diff --git a/gulliver/bin/tasks/pakeGulliver.php b/gulliver/bin/tasks/pakeGulliver.php index 094009361..c4459e6bf 100755 --- a/gulliver/bin/tasks/pakeGulliver.php +++ b/gulliver/bin/tasks/pakeGulliver.php @@ -49,6 +49,9 @@ pake_task('new-project', 'project_exists'); pake_desc("build new plugin \n args: "); pake_task('new-plugin', 'project_exists'); +pake_desc("Update the plugin attributes in all workspaces\n args: "); +pake_task("update-plugin-attributes", "project_exists"); + pake_desc("pack plugin in .tar file \n args: "); pake_task('pack-plugin', 'project_exists'); @@ -275,7 +278,7 @@ function convertPhpName($f) { function copyPluginFile($tplName, $fName, $class) { $pluginOutDirectory = PATH_OUTTRUNK . "plugins" . PATH_SEP . $class . PATH_SEP; $pluginFilename = $pluginOutDirectory . $fName; - + $fileTpl = PATH_GULLIVER_HOME . 'bin' . PATH_SEP . 'tasks' . PATH_SEP . 'templates' . PATH_SEP . $tplName . '.tpl'; $content = file_get_contents($fileTpl); $iSize = file_put_contents($pluginFilename, $content); @@ -293,7 +296,7 @@ function savePluginFile($fName, $tplName, $class, $tableName, $fields = null, $u $template->assign('className', $class); $template->assign('tableName', $tableName); $template->assign('menuId', 'ID_' . strtoupper($class)); - + if( is_array($fields) ) { foreach( $fields as $block => $data ) { $template->gotoBlock("_ROOT"); @@ -704,7 +707,7 @@ function run_new_plugin($task, $args) { $fields["dashboard"][] = array( "className" => $pluginName ); - + $fields["dashboardAttribute"] = "private \$dashletsUids;"; $fields["dashboardAttributeValue"] = " \$this->dashletsUids = array( @@ -720,9 +723,9 @@ function run_new_plugin($task, $args) { $fields["dashboardSetup"] = "\$this->registerDashlets();"; $fields["dashboardEnable"] = "\$this->dashletInsert();"; $fields["dashboardDisable"] = "\$this->dashletDelete();"; - + G::verifyPath($pluginHome . PATH_SEP . "views", true); - + savePluginFile($pluginName . PATH_SEP . "classes" . PATH_SEP . "class.dashlet". $pluginName . ".php", "pluginDashletClass.php", $pluginName, $pluginName); copyPluginFile("pluginDashlet.html", $pluginName . PATH_SEP . "views" . PATH_SEP . "dashlet". $pluginName . ".html", $pluginName, null, true); } @@ -2613,3 +2616,28 @@ function run_check_standard_code ( $task, $options) { pakeColor::colorize($val['dos'] ? 'dos' : ' ', 'INFO'), $val['file'] ); } } + +function run_update_plugin_attributes($task, $args) +{ + try { + G::LoadClass("plugin"); + + //Verify data + if (!isset($args[0])) { + throw new Exception("Error: You must specify the name of a plugin"); + } + + //Set variables + $pluginName = $args[0]; + + //Update plugin attributes + $pmPluginRegistry = &PMPluginRegistry::getSingleton(); + + $pmPluginRegistry->updatePluginAttributesInAllWorkspaces($pluginName); + + echo "Done!\n"; + } catch (Exception $e) { + echo $e->getMessage() . "\n"; + } +} + diff --git a/gulliver/bin/tasks/templates/db_insert.sql b/gulliver/bin/tasks/templates/db_insert.sql index 892cfebc0..77c3a6a87 100755 --- a/gulliver/bin/tasks/templates/db_insert.sql +++ b/gulliver/bin/tasks/templates/db_insert.sql @@ -7,7 +7,7 @@ CREATE TABLE `LANGUAGE` ( `LAN_ENABLED` char(1) NOT NULL default '1', `LAN_CALENDAR` varchar(30) NOT NULL default 'GREGORIAN', PRIMARY KEY (`LAN_ID`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Dumping data for table `LANGUAGE` diff --git a/gulliver/bin/tasks/templates/pluginSchema.xml.tpl b/gulliver/bin/tasks/templates/pluginSchema.xml.tpl index aae41bf43..c74de4c3a 100755 --- a/gulliver/bin/tasks/templates/pluginSchema.xml.tpl +++ b/gulliver/bin/tasks/templates/pluginSchema.xml.tpl @@ -4,7 +4,7 @@ - + diff --git a/gulliver/bin/tasks/templates/schema.xml.tpl b/gulliver/bin/tasks/templates/schema.xml.tpl index f3670ae36..11a41e59e 100755 --- a/gulliver/bin/tasks/templates/schema.xml.tpl +++ b/gulliver/bin/tasks/templates/schema.xml.tpl @@ -4,7 +4,7 @@
- + @@ -88,7 +88,7 @@
- + @@ -189,7 +189,7 @@
- + @@ -268,7 +268,7 @@
- + diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php index fe35fa8e8..1466842fa 100644 --- a/gulliver/system/class.bootstrap.php +++ b/gulliver/system/class.bootstrap.php @@ -225,6 +225,8 @@ class Bootstrap self::registerClass("cronFile", PATH_CLASSES . "class.plugin.php"); self::registerClass("pluginDetail", PATH_CLASSES . "class.pluginRegistry.php"); self::registerClass("PMPluginRegistry", PATH_CLASSES . "class.pluginRegistry.php"); + self::registerClass("featuresDetail", PATH_CLASSES . "class.licensedFeatures.php"); + self::registerClass("PMLicensedFeatures", PATH_CLASSES . "class.licensedFeatures.php"); self::registerClass("PMDashlet", PATH_CLASSES . "class.pmDashlet.php"); self::registerClass("pmGauge", PATH_CLASSES . "class.pmGauge.php"); self::registerClass("pmPhing", PATH_CLASSES . "class.pmPhing.php"); diff --git a/gulliver/system/class.database_mysql.php b/gulliver/system/class.database_mysql.php index 739c926ce..44bf43ec6 100755 --- a/gulliver/system/class.database_mysql.php +++ b/gulliver/system/class.database_mysql.php @@ -682,7 +682,7 @@ class database extends database_base `OP_OBJ_UID` varchar(32) NOT NULL, `OP_ACTION` varchar(10) NOT NULL default 'VIEW', KEY `PRO_UID` (`PRO_UID`,`TAS_UID`,`USR_UID`,`OP_TASK_SOURCE`,`OP_OBJ_UID`) - )ENGINE=MyISAM DEFAULT CHARSET=latin1;"; + )ENGINE=InnoDB DEFAULT CHARSET=latin1;"; return $sql; } diff --git a/gulliver/system/class.dbMaintenance.php b/gulliver/system/class.dbMaintenance.php index 79615a571..edf866889 100755 --- a/gulliver/system/class.dbMaintenance.php +++ b/gulliver/system/class.dbMaintenance.php @@ -523,9 +523,11 @@ class DataBaseMaintenance fwrite( $file, $data ); } } - - foreach ($tablesBpmn as $table) { - fwrite( $file, $sqlTablesBpmn[$table] ); + + if (count ($sqlTablesBpmn) > 0) { + foreach ($tablesBpmn as $table) { + fwrite( $file, $sqlTablesBpmn[$table] ); + } } fclose( $file ); @@ -622,7 +624,7 @@ class DataBaseMaintenance * @return string $tableSchema */ function getSchemaFromTable ($tablename) - { + { //$tableSchema = "/* Structure for table `$tablename` */\n"; //$tableSchema .= "DROP TABLE IF EXISTS `$tablename`;\n\n"; $tableSchema = ""; diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 75f707ec5..0db4130ac 100755 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -1403,7 +1403,7 @@ class G * * @return string $ret */ - public function getformatedDate ($date, $format = 'yyyy-mm-dd', $lang = '') + public static function getformatedDate ($date, $format = 'yyyy-mm-dd', $lang = '') { /** * ****************************************************************************************************** @@ -1528,7 +1528,7 @@ class G * @author Erik Amaru Ortiz * @name complete_field($string, $lenght, $type={1:number/2:string/3:float}) */ - public function complete_field ($campo, $long, $tipo) + public static function complete_field ($campo, $long, $tipo) { $campo = trim( $campo ); switch ($tipo) { @@ -2296,7 +2296,7 @@ class G * @param string $sText * @return string strtolower($sText) */ - public function toLower ($sText) + public static function toLower ($sText) { return strtolower( $sText ); } @@ -5260,17 +5260,34 @@ class G * @param type $pathData * @param type $file */ - public function log($message, $pathData = PATH_DATA, $file = 'cron.log') + public static function log($message, $pathData = PATH_DATA, $file = 'cron.log') { $config = System::getSystemConfiguration(); G::LoadSystem('logger'); - $oLogger =& Logger::getSingleton($pathData, PATH_SEP, $file); + $oLogger = Logger::getSingleton($pathData, PATH_SEP, $file); $oLogger->limitFile = $config['number_log_file']; $oLogger->limitSize = $config['size_log_file']; $oLogger->write($message); } + /** + */ + public static function auditLog($actionToLog, $valueToLog = "") + { + $oServerConf = & serverConf::getSingleton(); + $sflagAudit = $oServerConf->getAuditLogProperty( 'AL_OPTION', SYS_SYS ); + $ipClient = G::getIpAddress(); + + $licensedFeatures = PMLicensedFeatures::getSingleton(); + if ($sflagAudit && $licensedFeatures->verifyfeature('vtSeHNhT0JnSmo1bTluUVlTYUxUbUFSVStEeXVqc1pEUG5EeXc0MGd2Q3ErYz0=')) { + $workspace = defined('SYS_SYS') ? SYS_SYS : 'Wokspace Undefined'; + $username = isset($_SESSION['USER_LOGGED']) && $_SESSION['USER_LOGGED'] != '' ? $_SESSION['USER_LOGGED'] : 'Unknow User'; + $fullname = isset($_SESSION['USR_FULLNAME']) && $_SESSION['USR_FULLNAME'] != '' ? $_SESSION['USR_FULLNAME'] : '-'; + G::log("|". $workspace ."|". $ipClient ."|". $username . "|" . $fullname ."|" . $actionToLog . "|" . $valueToLog, PATH_DATA, "audit.log"); + } + } + /** * Changes all keys in an array and sub-arrays * @@ -5330,9 +5347,9 @@ class G } /** - * Verify the InputDoc extension, cheking the file name extension (.pdf, .ppt) and the file content. + * Verify the InputDoc extension, cheking the file name extension (.pdf, .ppt) and the file content. + * * - * * */ public function verifyInputDocExtension($InpDocAllowedFiles, $filesName, $filesTmpName){ @@ -5347,8 +5364,8 @@ class G if((preg_match('/^\*\.?[a-z]{2,8}$/', $val)) || ($val == '*.*')){ $allowedDocTypes = substr($val, 2); if(($dtype[count($dtype) -1]) == $allowedDocTypes || $allowedDocTypes == '*'){ - $res->status = true; - return $res; + $res->status = true; + return $res; break; } else { $flag = 1; @@ -5363,7 +5380,7 @@ class G $finfo = new finfo(FILEINFO_MIME_TYPE); $finfo_ = $finfo->file($filesTmpName); $docType = explode("/", $finfo_); - + foreach ($allowedTypes as $types => $val) { if((preg_match('/^\*\.?[a-z]{2,8}$/', $val)) || ($val == '*.*')){ $allowedDocTypes = substr($val, 2); @@ -5376,7 +5393,7 @@ class G break; case 'xls': if($docType[1] == 'vnd.ms-excel' || ($dtype[count($dtype) - 1] == 'xls' && $docType[1] == 'plain')){ - $res->status = true; + $res->status = true; return $res; } else { $flag = 1; @@ -5384,7 +5401,7 @@ class G break; case 'doc': if($docType[1] == 'msword' || ($dtype[count($dtype) - 1] == 'doc' && $docType[1] == 'html')){ - $res->status = true; + $res->status = true; return $res; } else { $flag = 1; @@ -5476,7 +5493,7 @@ class G if ($docType[1] != $allowedDocTypes){ $flag = 1; } else { - $res->status = true; + $res->status = true; return $res; } break; diff --git a/gulliver/system/class.logger.php b/gulliver/system/class.logger.php index c107dd71d..080c62b93 100644 --- a/gulliver/system/class.logger.php +++ b/gulliver/system/class.logger.php @@ -46,7 +46,7 @@ class Logger $this->filePath = $this->path . $this->fullName; } - public function getSingleton($pathData, $pathSep, $file = 'cron.log') + public static function getSingleton($pathData, $pathSep, $file = 'cron.log') { if (self::$instance == null) { self::$instance = new Logger($pathData, $pathSep, $file); diff --git a/gulliver/thirdparty/pear/SOAP/Interop/interop_database.sql b/gulliver/thirdparty/pear/SOAP/Interop/interop_database.sql index 1c8f0cf09..bb2f5119b 100755 --- a/gulliver/thirdparty/pear/SOAP/Interop/interop_database.sql +++ b/gulliver/thirdparty/pear/SOAP/Interop/interop_database.sql @@ -21,7 +21,7 @@ CREATE TABLE clientinfo ( name char(100) NOT NULL default '', version char(20) NOT NULL default '', resultsURL char(255) NOT NULL default '' -) TYPE=MyISAM; +) TYPE=InnoDB; # -------------------------------------------------------- # @@ -41,7 +41,7 @@ CREATE TABLE results ( error text, wire text NOT NULL, PRIMARY KEY (id) -) TYPE=MyISAM; +) TYPE=InnoDB; # -------------------------------------------------------- # @@ -56,7 +56,7 @@ CREATE TABLE serverinfo ( endpointURL char(255) NOT NULL default '', wsdlURL char(255) NOT NULL default '', PRIMARY KEY (id) -) TYPE=MyISAM; +) TYPE=InnoDB; # -------------------------------------------------------- # @@ -70,7 +70,7 @@ CREATE TABLE services ( wsdlURL char(255) NOT NULL default '', websiteURL char(255) NOT NULL default '', PRIMARY KEY (id) -) TYPE=MyISAM; +) TYPE=InnoDB; diff --git a/gulliver/thirdparty/propel-generator/templates/sql/base/mysql/table.tpl b/gulliver/thirdparty/propel-generator/templates/sql/base/mysql/table.tpl index 34ecb24cf..d52bc5e1a 100755 --- a/gulliver/thirdparty/propel-generator/templates/sql/base/mysql/table.tpl +++ b/gulliver/thirdparty/propel-generator/templates/sql/base/mysql/table.tpl @@ -37,7 +37,7 @@ CREATE TABLE getName() . "`" ?> if(isset($vendorSpecific['Type'])) $mysqlTableType = $vendorSpecific['Type']; else - $mysqlTableType = 'MyISAM'; + $mysqlTableType = 'InnoDB'; } ?> diff --git a/gulliver/thirdparty/propel/Propel.php b/gulliver/thirdparty/propel/Propel.php index dc7c81036..b6a7377c6 100755 --- a/gulliver/thirdparty/propel/Propel.php +++ b/gulliver/thirdparty/propel/Propel.php @@ -614,6 +614,11 @@ class Propel { */ public static function getDbConnection($name) { + $licensedFeatures = & PMLicensedFeatures::getSingleton(); + if (! $licensedFeatures->verifyfeature('02YeEFKNnVoOWFKMzN4ZmpXT0V3MU9SVklnOXNCcE9zcXJKa0tpemNmQkJ5OTUvOWlLdFhibGp0MHVHUlV0VmNpNw==')) { + return null; + } + if (! empty(self::$configuration['datasources'][$name]['connection'])) { return self::getConnection($name); } diff --git a/rbac/engine/classes/model/AuthenticationSource.php b/rbac/engine/classes/model/AuthenticationSource.php index 43d0c99de..e0c5481c2 100755 --- a/rbac/engine/classes/model/AuthenticationSource.php +++ b/rbac/engine/classes/model/AuthenticationSource.php @@ -69,6 +69,7 @@ class AuthenticationSource extends BaseAuthenticationSource { $oConnection->begin(); $iResult = $oAuthenticationSource->save(); $oConnection->commit(); + G::auditLog("CreateAuthSource", "Authentication Source Name: ". $aData['AUTH_SOURCE_NAME']); return $aData['AUTH_SOURCE_UID']; } else { @@ -97,6 +98,7 @@ class AuthenticationSource extends BaseAuthenticationSource { $oConnection->begin(); $iResult = $oAuthenticationSource->save(); $oConnection->commit(); + G::auditLog("UpdateAuthSource", "Authentication Source Name: ".$aData['AUTH_SOURCE_NAME']." Authentication Source ID: (".$aData['AUTH_SOURCE_UID'].") "); return $iResult; } else { @@ -126,10 +128,14 @@ class AuthenticationSource extends BaseAuthenticationSource { $oConnection = Propel::getConnection(AuthenticationSourcePeer::DATABASE_NAME); try { $oAuthenticationSource = AuthenticationSourcePeer::retrieveByPK($sUID); + $authenticationSource = $this->load($sUID); + if (!is_null($oAuthenticationSource)) { $oConnection->begin(); $iResult = $oAuthenticationSource->delete(); $oConnection->commit(); + + G::auditLog("DeleteAuthSource", "Authentication Source Name: ".$authenticationSource['AUTH_SOURCE_NAME']." Authentication Source ID: (".$sUID.") "); return $iResult; } else { diff --git a/rbac/engine/classes/model/Roles.php b/rbac/engine/classes/model/Roles.php index 480179dbc..26fd87cd9 100755 --- a/rbac/engine/classes/model/Roles.php +++ b/rbac/engine/classes/model/Roles.php @@ -236,9 +236,8 @@ class Roles extends BaseRoles { if ($obj->validate()) { $result = $obj->save(); $con->commit(); - $obj->setRolName($rol_name); - + G::auditLog("CreateRole", "Role Name: ". $rol_name); } else { $e = new Exception("Failed Validation in class " . get_class($this) . "."); $e->aValidationFailures = $this->getValidationFailures(); @@ -263,8 +262,8 @@ class Roles extends BaseRoles { if ($this->validate()) { $result = $this->save(); $con->commit(); - $this->setRolName($rol_name); + G::auditLog("UpdateRole", "Role Name: ".$rol_name." Role ID: (".$fields['ROL_UID'].") "); return $result; } else { $con->rollback(); @@ -281,10 +280,11 @@ class Roles extends BaseRoles { try { $con->begin(); $this->setRolUid($ROL_UID); + $rol_name = $this->load($ROL_UID); Content::removeContent('ROL_NAME', '', $this->getRolUid()); $result = $this->delete(); - $con->commit(); + G::auditLog("DeleteRole", "Role Name: ".$rol_name['ROL_NAME']." Role UID: (".$ROL_UID.") "); return $result; } catch( exception $e ) { $con->rollback(); @@ -514,6 +514,10 @@ class Roles extends BaseRoles { $oUsersRoles->setRolUid($aData['ROL_UID']); $oUsersRoles->save(); + $rol = $this->load($aData['ROL_UID']); + $oUsersRbac = new RbacUsers(); + $user = $oUsersRbac->load($aData['USR_UID']); + G::auditLog("AssignUserToRole", "Assign user ".$user['USR_USERNAME']." (".$aData['USR_UID'].") to Role ".$rol['ROL_NAME']." (".$aData['ROL_UID'].") "); } function deleteUserRole($ROL_UID, $USR_UID) { @@ -524,6 +528,11 @@ class Roles extends BaseRoles { $crit->add(UsersRolesPeer::ROL_UID, $ROL_UID); } UsersRolesPeer::doDelete($crit); + $rol = $this->load($ROL_UID); + $oUsersRbac = new RbacUsers(); + $user = $oUsersRbac->load($USR_UID); + + G::auditLog("DeleteUserToRole", "Delete user ".$user['USR_USERNAME']." (".$USR_UID.") to Role ".$rol['ROL_NAME']." (".$ROL_UID.") "); } function getRolePermissions($ROL_UID, $filter='', $status=null) { @@ -619,7 +628,10 @@ class Roles extends BaseRoles { if (isset($sData['PER_NAME'])) { $o->setPermissionName($sData['PER_NAME']); } + $permission = $o->getPermissionName($sData['PER_UID']); + $role = $this->load($sData['ROL_UID']); $o->save(); + G::auditLog("AddPermissionToRole", "Add Permission ".$permission." (".$sData['PER_UID'].") to Role ".$role['ROL_NAME']." (".$sData['ROL_UID'].") "); } function deletePermissionRole($ROL_UID, $PER_UID) { @@ -627,6 +639,13 @@ class Roles extends BaseRoles { $crit->add(RolesPermissionsPeer::ROL_UID, $ROL_UID); $crit->add(RolesPermissionsPeer::PER_UID, $PER_UID); RolesPermissionsPeer::doDelete($crit); + + $o = new RolesPermissions(); + $o->setPerUid($PER_UID); + $permission = $o->getPermissionName($PER_UID); + $role = $this->load($ROL_UID); + + G::auditLog("DeletePermissionToRole", "Delete Permission ".$permission." (".$PER_UID.") from Role ".$role['ROL_NAME']." (".$ROL_UID.") "); } function numUsersWithRole($ROL_UID) { diff --git a/rbac/engine/config/schema.xml b/rbac/engine/config/schema.xml index a113f0e1f..2b82770e3 100755 --- a/rbac/engine/config/schema.xml +++ b/rbac/engine/config/schema.xml @@ -4,7 +4,7 @@
- + @@ -32,7 +32,7 @@
- + @@ -61,7 +61,7 @@
- + @@ -85,7 +85,7 @@
- + @@ -112,7 +112,7 @@
- + @@ -148,7 +148,7 @@
- + @@ -172,7 +172,7 @@
- + diff --git a/rbac/engine/data/mysql/schema.sql b/rbac/engine/data/mysql/schema.sql index 4c4a9cdbc..40de34f8c 100755 --- a/rbac/engine/data/mysql/schema.sql +++ b/rbac/engine/data/mysql/schema.sql @@ -19,7 +19,7 @@ CREATE TABLE `RBAC_PERMISSIONS` `PER_STATUS` INTEGER default 1 NOT NULL, `PER_SYSTEM` VARCHAR(32) default '00000000000000000000000000000002' NOT NULL, PRIMARY KEY (`PER_UID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Permissions'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Permissions'; #----------------------------------------------------------------------------- #-- ROLES #----------------------------------------------------------------------------- @@ -37,7 +37,7 @@ CREATE TABLE `RBAC_ROLES` `ROL_UPDATE_DATE` DATETIME, `ROL_STATUS` INTEGER default 1 NOT NULL, PRIMARY KEY (`ROL_UID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Roles'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Roles'; #----------------------------------------------------------------------------- #-- ROLES_PERMISSIONS #----------------------------------------------------------------------------- @@ -50,7 +50,7 @@ CREATE TABLE `RBAC_ROLES_PERMISSIONS` `ROL_UID` VARCHAR(32) default '' NOT NULL, `PER_UID` VARCHAR(32) default '' NOT NULL, PRIMARY KEY (`ROL_UID`,`PER_UID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Permissions of the roles'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Permissions of the roles'; #----------------------------------------------------------------------------- #-- SYSTEMS #----------------------------------------------------------------------------- @@ -66,7 +66,7 @@ CREATE TABLE `RBAC_SYSTEMS` `SYS_UPDATE_DATE` DATETIME, `SYS_STATUS` INTEGER default 0 NOT NULL, PRIMARY KEY (`SYS_UID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Systems'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Systems'; #----------------------------------------------------------------------------- #-- USERS #----------------------------------------------------------------------------- @@ -91,7 +91,7 @@ CREATE TABLE `RBAC_USERS` `USR_AUTH_USER_DN` VARCHAR(255) default '' NOT NULL, `USR_AUTH_SUPERVISOR_DN` VARCHAR(255) default '' NOT NULL, PRIMARY KEY (`USR_UID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Users'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Users'; #----------------------------------------------------------------------------- #-- USERS_ROLES #----------------------------------------------------------------------------- @@ -104,7 +104,7 @@ CREATE TABLE `RBAC_USERS_ROLES` `USR_UID` VARCHAR(32) default '' NOT NULL, `ROL_UID` VARCHAR(32) default '' NOT NULL, PRIMARY KEY (`USR_UID`,`ROL_UID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Roles of the users'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Roles of the users'; #----------------------------------------------------------------------------- #-- AUTHENTICATION_SOURCE #----------------------------------------------------------------------------- @@ -129,6 +129,6 @@ CREATE TABLE `RBAC_AUTHENTICATION_SOURCE` `AUTH_SOURCE_OBJECT_CLASSES` VARCHAR(255) default '' NOT NULL, `AUTH_SOURCE_DATA` MEDIUMTEXT, PRIMARY KEY (`AUTH_SOURCE_UID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8'; # This restores the fkey checks, after having unset them earlier SET FOREIGN_KEY_CHECKS = 1; diff --git a/workflow/engine/bin/tasks/cliAddons.php b/workflow/engine/bin/tasks/cliAddons.php index eae7ce857..beac69878 100644 --- a/workflow/engine/bin/tasks/cliAddons.php +++ b/workflow/engine/bin/tasks/cliAddons.php @@ -118,7 +118,18 @@ function change_hash($command, $opts) $response = new stdclass(); $response->workspace = $workspace; $response->hash = $hash; - $workspace->changeHashPassword($workspace->name, $response); + if (!defined("SYS_SYS")) { + define("SYS_SYS", $workspace->name); + } + if (!defined("PATH_DATA_SITE")) { + define("PATH_DATA_SITE", PATH_DATA . "sites/" . SYS_SYS . "/"); + } + $_SESSION['__sw__'] = ''; + if (!$workspace->changeHashPassword($workspace->name, $response)) { + CLI::logging(pakeColor::colorize("This command cannot be used because your license does not include it.", "ERROR") . "\n"); + $workspace->close(); + die; + } $workspace->close(); CLI::logging(pakeColor::colorize("Changed...", "ERROR") . "\n"); } catch (Exception $e) { diff --git a/workflow/engine/bin/tasks/cliUpgrade.php b/workflow/engine/bin/tasks/cliUpgrade.php index 51f65c613..d76dd1b38 100755 --- a/workflow/engine/bin/tasks/cliUpgrade.php +++ b/workflow/engine/bin/tasks/cliUpgrade.php @@ -196,17 +196,27 @@ function listFiles($dir) { } function run_unify_database($args) -{ - $workspaces = get_workspaces_from_args($args); - +{ + $workspaces = array(); + + if (sizeof($args) > 2) { + $filename = array_pop($args); + foreach ($args as $arg) { + $workspaces[] = new workspaceTools($arg); + } + } else if (sizeof($args) > 0) { + $workspace = new workspaceTools($args[0]); + $workspaces[] = $workspace; + } + CLI::logging("UPGRADE", PROCESSMAKER_PATH . "upgrade.log"); CLI::logging("Checking workspaces...\n"); //setting flag to true to check into sysGeneric.php $flag = G::isPMUnderUpdating(0); - + //start to unify $count = count($workspaces); - + if ($count > 1) { if(!Bootstrap::isLinuxOs()){ CLI::error("This is not a Linux enviroment, please especify workspace.\n"); @@ -214,34 +224,31 @@ function run_unify_database($args) } } - foreach ($workspaces as $workspace) { - - if (! $workspace->workspaceExists()) { - echo "Workspace {$workspace->name} not found\n"; - return false; - } - - $ws = $workspace->name; - $sContent = file_get_contents (PATH_DB . $ws . PATH_SEP . 'db.php'); - - if (strpos($sContent, 'rb_')) { - $workspace->onedb = false; - } else { - $workspace->onedb = true; - } - } - $first = true; $errors = false; $countWorkspace = 0; $buildCacheView = array_key_exists("buildACV", $args); - - foreach ($workspaces as $workspace) { - try { + + foreach ($workspaces as $workspace) { + try { $countWorkspace++; + if (! $workspace->workspaceExists()) { + echo "Workspace {$workspace->name} not found\n"; + return false; + } + + $ws = $workspace->name; + $sContent = file_get_contents (PATH_DB . $ws . PATH_SEP . 'db.php'); + + if (strpos($sContent, 'rb_')) { + $workspace->onedb = false; + } else { + $workspace->onedb = true; + } + if ($workspace->onedb) { - CLI::logging("Workspace $workspace->name already one Database...\n"); + CLI::logging("The \"$workspace->name\" workspace already using one database...\n"); } else { //create destination path $parentDirectory = PATH_DATA . "upgrade"; @@ -258,31 +265,36 @@ function run_unify_database($args) CLI::logging( "Exporting rb and rp databases to a temporal location...\n" ); $metadata["databases"] = $workspace->exportDatabase( $tempDirectory,true ); $metadata["version"] = 1; - + list ($dbHost, $dbUser, $dbPass) = @explode( SYSTEM_HASH, G::decrypt( HASH_INSTALLATION, SYSTEM_HASH ) ); $link = mysql_connect( $dbHost, $dbUser, $dbPass ); - - foreach ($metadata->databases as $db) { - $dbName = 'wf_'.$workspace->name; - CLI::logging( "+> Restoring {$db->name} to $dbName database\n" ); - $restore = $workspace->executeSQLScript( $dbName, "$tempDirectory/{$db->name}.sql" ); - - CLI::logging( "+> Remove {$db->name} database\n" ); - $sql = "DROP DATABASE IF EXISTS {$db->name};"; - if (! @mysql_query( $sql )) { - throw new Exception( mysql_error() ); + foreach ($metadata['databases'] as $db) { + $dbName = 'wf_'.$workspace->name; + CLI::logging( "+> Restoring {$db['name']} to $dbName database\n" ); + + $aParameters = array('dbHost'=>$dbHost,'dbUser'=>$dbUser,'dbPass'=>$dbPass); + + $restore = $workspace->executeScript( $dbName, "$tempDirectory/{$db['name']}.sql", $aParameters); + + if ($restore) { + CLI::logging( "+> Remove {$db['name']} database\n" ); + + $sql = "DROP DATABASE IF EXISTS {$db['name']};"; + if (! @mysql_query( $sql )) { + throw new Exception( mysql_error() ); + } } } - + CLI::logging( "Removing temporary files\n" ); G::rm_dir( $tempDirectory ); - - $newDBNames = $workspace->resetDBInfo( $dbHost, true ); + + $newDBNames = $workspace->resetDBInfo( $dbHost, true, true ); CLI::logging( CLI::info( "Done restoring databases" ) . "\n" ); - } - } catch (Exception $e) { + } + } catch (Exception $e) { CLI::logging("Errors upgrading workspace " . CLI::info($workspace->name) . ": " . CLI::error($e->getMessage()) . "\n"); $errors = true; } diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 165afd35c..ef4f93176 100755 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -372,60 +372,64 @@ function run_drafts_clean($args, $opts) { } function run_workspace_backup($args, $opts) { - $workspaces = array(); - if (sizeof($args) > 2) { - $filename = array_pop($args); - foreach ($args as $arg) { - $workspaces[] = new workspaceTools($arg); + $workspaces = array(); + if (sizeof($args) > 2) { + $filename = array_pop($args); + foreach ($args as $arg) { + $workspaces[] = new workspaceTools($arg); + } + } else if (sizeof($args) > 0) { + $workspace = new workspaceTools($args[0]); + $workspaces[] = $workspace; + if (sizeof($args) == 2) { + $filename = $args[1]; + } else { + $filename = "{$workspace->name}.tar"; + } + } else { + throw new Exception("No workspace specified for backup"); } - } else if (sizeof($args) > 0) { - $workspace = new workspaceTools($args[0]); - $workspaces[] = $workspace; - if (sizeof($args) == 2) - $filename = $args[1]; - else - $filename = "{$workspace->name}.tar"; - } else { - throw new Exception("No workspace specified for backup"); - } - foreach ($workspaces as $workspace) - if (!$workspace->workspaceExists()) - throw new Exception("Workspace '{$workspace->name}' not found"); - //If this is a relative path, put the file in the backups directory - if (strpos($filename, "/") === false && strpos($filename, '\\') === false){ - $filename = PATH_DATA . "backups/$filename"; - } - CLI::logging("Backing up to $filename\n"); - $filesize = array_key_exists("filesize", $opts) ? $opts['filesize'] : -1; - if($filesize >= 0) - { - if(!Bootstrap::isLinuxOs()){ + + foreach ($workspaces as $workspace) { + if (!$workspace->workspaceExists()) { + throw new Exception("Workspace '{$workspace->name}' not found"); + } + } + + //If this is a relative path, put the file in the backups directory + if (strpos($filename, "/") === false && strpos($filename, '\\') === false){ + $filename = PATH_DATA . "backups/$filename"; + } + CLI::logging("Backing up to $filename\n"); + + $filesize = array_key_exists("filesize", $opts) ? $opts['filesize'] : -1; + + if ($filesize >= 0) { + if (!Bootstrap::isLinuxOs()) { CLI::error("This is not a Linux enviroment, cannot use this filesize [-s] feature.\n"); return; - } - $multipleBackup = new multipleFilesBackup ($filename,$filesize);//if filesize is 0 the default size will be took - //using new method - foreach ($workspaces as $workspace){ - $multipleBackup->addToBackup($workspace); - } - $multipleBackup->letsBackup(); - } - else - { - //ansient method to backup into one large file - $backup = workspaceTools::createBackup($filename); + } + $multipleBackup = new multipleFilesBackup ($filename,$filesize);//if filesize is 0 the default size will be took + //using new method + foreach ($workspaces as $workspace) { + $multipleBackup->addToBackup($workspace); + } + $multipleBackup->letsBackup(); + } else { + //ansient method to backup into one large file + $backup = workspaceTools::createBackup($filename); - foreach ($workspaces as $workspace) - $workspace->backup($backup); - } - CLI::logging("\n"); - workspaceTools::printSysInfo(); - foreach ($workspaces as $workspace) { + foreach ($workspaces as $workspace) { + $workspace->backup($backup); + } + } CLI::logging("\n"); - $workspace->printMetadata(false); - } - + workspaceTools::printSysInfo(); + foreach ($workspaces as $workspace) { + CLI::logging("\n"); + $workspace->printMetadata(false); + } } function run_workspace_restore($args, $opts) { diff --git a/workflow/engine/classes/class.applications.php b/workflow/engine/classes/class.applications.php index 93702e54b..4652ea969 100755 --- a/workflow/engine/classes/class.applications.php +++ b/workflow/engine/classes/class.applications.php @@ -18,7 +18,7 @@ class Applications $sort = "APP_CACHE_VIEW.APP_NUMBER", $category = null, $configuration = true, - $paged = false + $paged = true ) { $callback = isset($callback)? $callback : "stcCallback1001"; $dir = isset($dir)? $dir : "DESC"; @@ -443,10 +443,14 @@ class Applications } //Add sortable options - if ($sort != "") { + $sortBk = $sort; + + if ($sortBk != "") { + $sort = ""; + //Current delegation (*) if (($action == "sent" || $action == "search" || $action == "simple_search" || $action == "to_revise" || $action == "to_reassign") && ($status != "TO_DO")) { - switch ($sort) { + switch ($sortBk) { case "APP_CACHE_VIEW.APP_CURRENT_USER": $sort = "USRCR_" . $conf->userNameFormatGetFirstFieldByUsersTable(); break; @@ -455,10 +459,12 @@ class Applications break; } } + if (isset( $oAppCache->confCasesList['PMTable'] ) && ! empty( $oAppCache->confCasesList['PMTable'] ) && $tableNameAux != '') { - $sortTable = explode(".", $sort); + $sortTable = explode(".", $sortBk); $additionalTableUid = $oAppCache->confCasesList["PMTable"]; + require_once 'classes/model/Fields.php'; $oCriteria = new Criteria('workflow'); @@ -489,6 +495,15 @@ class Applications } } + if ($sort == "") { + $sort = $sortBk; + + if (!in_array($sortBk, $Criteria->getSelectColumns())) { + $sort = AppCacheViewPeer::APP_NUMBER; //DEFAULT VALUE + $dir = "DESC"; + } + } + if ($dir == "DESC") { $Criteria->addDescendingOrderByColumn($sort); } else { diff --git a/workflow/engine/classes/class.enterprise.php b/workflow/engine/classes/class.enterprise.php index 19957b692..307caca53 100644 --- a/workflow/engine/classes/class.enterprise.php +++ b/workflow/engine/classes/class.enterprise.php @@ -33,6 +33,9 @@ class enterpriseClass extends PMPlugin public function enterpriseSystemUpdate($data) //$data = $oData { + if (count(glob(PATH_DATA_SITE . 'license/*.dat')) == 0) { + return; + } require_once ("classes/model/Users.php"); $user = $data; $criteria = new Criteria("workflow"); diff --git a/workflow/engine/classes/class.groups.php b/workflow/engine/classes/class.groups.php index ccf9b0333..e0c8241e4 100755 --- a/workflow/engine/classes/class.groups.php +++ b/workflow/engine/classes/class.groups.php @@ -115,6 +115,14 @@ class Groups $oGrp->setGrpUid($GrpUid); $oGrp->setUsrUid($UsrUid); $oGrp->Save(); + + $oGrpwf = new Groupwf(); + $grpName = $oGrpwf->loadByGroupUid($GrpUid); + + $oUsr = new Users(); + $usrName = $oUsr->load($UsrUid); + + G::auditLog("AssignUserToGroup", "Assign user ". $usrName['USR_USERNAME'] ." (".$UsrUid.") to group ".$grpName['CON_VALUE']." (".$GrpUid.") "); } } catch (exception $oError) { throw ($oError); diff --git a/workflow/engine/classes/class.licensedFeatures.php b/workflow/engine/classes/class.licensedFeatures.php new file mode 100644 index 000000000..9b543c487 --- /dev/null +++ b/workflow/engine/classes/class.licensedFeatures.php @@ -0,0 +1,86 @@ +featureName = $featureName; + $this->description = $description; + } +} + + +class PMLicensedFeatures +{ + private $featuresDetails = array (); + private $features = array (); + + private static $instancefeature = null; + + /** + * This function is the constructor of the PMLicensedFeatures class + * param + * + * @return void + */ + public function __construct () + { + $criteria = new Criteria(); + $criteria->addAscendingOrderByColumn(AddonsManagerPeer::ADDON_ID); + $criteria->add(AddonsManagerPeer::ADDON_TYPE, 'feature', Criteria::EQUAL); + $addons = AddonsManagerPeer::doSelect($criteria); + foreach ($addons as $addon) { + $this->features[] = $addon->getAddonId(); + $detail = new featuresDetail($addon->getAddonNick(), $addon->getAddonDescription()); + $this->featuresDetails[$addon->getAddonId()] = $detail; + } + } + + /** + * This function is instancing to this class + * param + * + * @return object + */ + public static function getSingleton () + { + if (self::$instancefeature == null) { + self::$instancefeature = new PMLicensedFeatures(); + } + return self::$instancefeature; + } + + public function verifyfeature ($featureName) + { + if (!class_exists("pmLicenseManager")) { + require_once ("classes" . PATH_SEP . "class.pmLicenseManager.php"); + } + $licenseManager = &pmLicenseManager::getSingleton(); + + $_SESSION['__sw__'] = true; + $padl = new padl(); + $value = $padl->_decrypt($featureName); + + $enable = in_array($value[0], $licenseManager->licensedfeatures); + + if (!isset($this->featuresDetails[$value[0]]) || !is_object($this->featuresDetails[$value[0]])) { + $this->featuresDetails[$value[0]] = new stdclass(); + } + $this->featuresDetails[$value[0]]->enabled = $enable; + return $enable; + } +} + diff --git a/workflow/engine/classes/class.pluginRegistry.php b/workflow/engine/classes/class.pluginRegistry.php index eb3fcd775..01ce7de33 100755 --- a/workflow/engine/classes/class.pluginRegistry.php +++ b/workflow/engine/classes/class.pluginRegistry.php @@ -260,7 +260,7 @@ class PMPluginRegistry //register the default directory, later we can have more $this->_aPluginDetails[$sNamespace]->enabled = true; if (class_exists($detail->sClassName)) { - $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); + $oPlugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); } else { $oPlugin = $detail; } @@ -1513,5 +1513,88 @@ class PMPluginRegistry { return $this->_aCronFiles; } + + /** + * Update the plugin attributes in all workspaces + * + * @param string $pluginName Plugin name + * + * return void + */ + public function updatePluginAttributesInAllWorkspaces($pluginName) + { + try { + G::LoadClass("system"); + G::LoadClass("wsTools"); + + //Set variables + $pluginFileName = $pluginName . ".php"; + + //Verify data + if (!file_exists(PATH_PLUGINS . $pluginFileName)) { + throw new Exception("Error: The plugin not exists"); + } + + //Update plugin attributes + require_once(PATH_PLUGINS . $pluginFileName); + + $pmPluginRegistry = &PMPluginRegistry::getSingleton(); + + $pluginDetails = $pmPluginRegistry->getPluginDetails($pluginFileName); + + if (isset($pluginDetails->aWorkspaces) && is_array($pluginDetails->aWorkspaces) && count($pluginDetails->aWorkspaces) > 0) { + $arrayWorkspace = array(); + + foreach (System::listWorkspaces() as $value) { + $workspaceTools = $value; + + $arrayWorkspace[] = $workspaceTools->name; + } + + $arrayWorkspaceAux = array_diff($arrayWorkspace, $pluginDetails->aWorkspaces); //Workspaces to update + $strWorkspaceNoWritable = ""; + + $arrayWorkspace = array(); + + foreach ($arrayWorkspaceAux as $value) { + $workspace = $value; + + $workspacePathDataSite = PATH_DATA . "sites" . PATH_SEP . $workspace . PATH_SEP; + + if (file_exists($workspacePathDataSite . "plugin.singleton")) { + $pmPluginRegistry = PMPluginRegistry::loadSingleton($workspacePathDataSite . "plugin.singleton"); + + if (isset($pmPluginRegistry->_aPluginDetails[$pluginName])) { + if (!is_writable($workspacePathDataSite . "plugin.singleton")) { + $strWorkspaceNoWritable .= (($strWorkspaceNoWritable != "")? ", " : "") . $workspace; + } + + $arrayWorkspace[] = $workspace; + } + } + } + + //Verify data + if ($strWorkspaceNoWritable != "") { + throw new Exception("Error: The workspaces \"$strWorkspaceNoWritable\" has problems of permissions of write in file \"plugin.singleton\", solve this problem"); + } + + //Update plugin attributes + foreach ($arrayWorkspace as $value) { + $workspace = $value; + + $workspacePathDataSite = PATH_DATA . "sites" . PATH_SEP . $workspace . PATH_SEP; + + $pmPluginRegistry = PMPluginRegistry::loadSingleton($workspacePathDataSite . "plugin.singleton"); + + $pmPluginRegistry->disablePlugin($pluginName); + + file_put_contents($workspacePathDataSite . "plugin.singleton", $pmPluginRegistry->serializeInstance()); + } + } + } catch (Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/classes/class.pmLicenseManager.php b/workflow/engine/classes/class.pmLicenseManager.php index 8c2386a44..a92aec915 100644 --- a/workflow/engine/classes/class.pmLicenseManager.php +++ b/workflow/engine/classes/class.pmLicenseManager.php @@ -19,7 +19,7 @@ class pmLicenseManager //to do: this files probably needs to be in core, since they are GPL2 //include_once (PATH_PLUGINS . 'enterprise' . PATH_SEP . 'classes' . PATH_SEP . 'class.license.lib.php'); //include_once (PATH_PLUGINS . 'enterprise' . PATH_SEP . 'classes' . PATH_SEP . 'class.license.app.php'); - + require_once PATH_CORE . 'classes' . PATH_SEP . 'class.license.lib.php'; require_once PATH_CORE . 'classes' . PATH_SEP . 'class.license.app.php'; @@ -53,6 +53,9 @@ class pmLicenseManager ); $this->result = $results['RESULT']; + $this->features = array(); + $this->licensedfeatures = array(); + $this->licensedfeaturesList = array(); if (in_array($this->result, $validStatus)) { $this->serial="3ptta7Xko2prrptrZnSd356aqmPXvMrayNPFj6CLdaR1pWtrW6qPw9jV0OHjxrDGu8LVxtmSm9nP5kR23HRpdZWccpeui+bKkK°DoqCt2Kqgpq6Vg37s"; $info['FIRST_NAME'] = $results['DATA']['FIRST_NAME']; @@ -64,7 +67,9 @@ class pmLicenseManager $this->plan = isset($results ['DATA']['PLAN'])?$results ['DATA']['PLAN']:""; $this->id = $results ['ID']; $this->expireIn = $this->getExpireIn (); - $this->features = $this->result!='TMINUS'?isset($results ['DATA']['CUSTOMER_PLUGIN'])?$results ['DATA']['CUSTOMER_PLUGIN']:$this->getActiveFeatures():array(); + $this->features = $this->result!='TMINUS'?isset($results ['DATA']['CUSTOMER_PLUGIN'])? $results ['DATA']['CUSTOMER_PLUGIN'] : $this->getActiveFeatures() : array(); + $this->licensedfeatures = $this->result!='TMINUS'?isset($results ['DATA']['CUSTOMER_LICENSED_FEATURES'])? $results ['DATA']['CUSTOMER_LICENSED_FEATURES'] : array() : array(); + $this->licensedfeaturesList = isset($results ['DATA']['LICENSED_FEATURES_LIST'])? $results ['DATA']['LICENSED_FEATURES_LIST'] : null; $this->status = $this->getCurrentLicenseStatus (); if (isset ( $results ['LIC'] )) { @@ -108,7 +113,7 @@ class pmLicenseManager $this->activateFeatures (); } - public function &getSingleton() + public static function getSingleton() { if (self::$instance == null) { self::$instance = new pmLicenseManager (); @@ -352,7 +357,9 @@ class pmLicenseManager public function installLicense($path, $redirect = true) { $application = new license_application ( $path, false, true, false, true, true ); + $results = $application->validate ( false, false, "", "", "80", true ); + //if the result is ok then it is saved into DB $res = $results ['RESULT']; if (( $res != 'OK') && ($res != 'EXPIRED' ) && ($res != 'TMINUS') ) { @@ -496,6 +503,9 @@ class pmLicenseManager public function getActiveFeatures() { + if (file_exists ( PATH_PLUGINS . 'enterprise/data/default' )) { + return array(); + } return unserialize(G::decrypt($this->serial, file_get_contents(PATH_PLUGINS . 'enterprise/data/default'))); } } diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index de9d57fea..e77b7f677 100755 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -1164,6 +1164,7 @@ class processMap $c++; $oGroup = new Groupwf(); $aFields = $oGroup->load($aRow['USR_UID']); + $aRow['GRP_TITLE'] = ($aRow['GRP_TITLE']=="")? $aFields['GRP_TITLE'] : $aRow['GRP_TITLE']; if ($aFields['GRP_STATUS'] == 'ACTIVE') { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('COUNT(*) AS MEMBERS_NUMBER'); @@ -1259,7 +1260,10 @@ class processMap $oCriteria->addSelectColumn(UsersPeer::USR_UID); $oCriteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); $oCriteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $oCriteria->add(UsersPeer::USR_STATUS, 'ACTIVE'); + $oCriteria->add( + $oCriteria->getNewCriterion(UsersPeer::USR_STATUS, "ACTIVE", Criteria::EQUAL)->addOr( + $oCriteria->getNewCriterion(UsersPeer::USR_STATUS, "VACATION", Criteria::EQUAL)) + ); $oCriteria->add(UsersPeer::USR_UID, $aUIDS2, Criteria::NOT_IN); $oDataset = UsersPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); diff --git a/workflow/engine/classes/class.serverConfiguration.php b/workflow/engine/classes/class.serverConfiguration.php index 79fd692e8..9c4cf5fb9 100755 --- a/workflow/engine/classes/class.serverConfiguration.php +++ b/workflow/engine/classes/class.serverConfiguration.php @@ -39,6 +39,7 @@ class serverConf private $_aProperties = array(); private $_aHeartbeatConfig = array(); private $_aWSapces = array(); + private $_auditLogConfig = array(); private $aWSinfo = array(); private $pluginsA = array(); private $errors = array(); @@ -75,7 +76,7 @@ class serverConf * * @return object */ - public function &getSingleton() + public static function &getSingleton() { if (self::$instance == null) { self::$instance = new serverConf(); @@ -465,10 +466,55 @@ class serverConf } } + /** + * 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 + */ + public function setAuditLogProperty($propertyName, $propertyValue, $workspace) + { + $this->_auditLogConfig[$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 + */ + public function unsetAuditLogProperty($propertyName, $workspace) + { + if (isset($this->_auditLogConfig[$workspace][$propertyName])) { + unset($this->_auditLogConfig[$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 + */ + public function getAuditLogProperty($propertyName, $workspace) + { + if (isset($this->_auditLogConfig[$workspace][$propertyName])) { + return $this->_auditLogConfig[$workspace][$propertyName]; + } else { + return null; + } + } + public 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.wsBase.php b/workflow/engine/classes/class.wsBase.php index 3e4c65a9a..43965394e 100755 --- a/workflow/engine/classes/class.wsBase.php +++ b/workflow/engine/classes/class.wsBase.php @@ -920,7 +920,8 @@ class wsBase if (!class_exists('System')) { G::LoadClass('system'); } - $aSetup = !empty($config) ? $config : System::getEmailConfiguration(); + $licensedFeatures = & PMLicensedFeatures::getSingleton(); + $aSetup = (!empty($config) && $licensedFeatures->verifyfeature('nKaNTNuT1MzK0RsMEtXTnYzR09ucHF2WGNuS0hRdDBBak42WXJhNVVOOG1INEVoaU1EaTllbjBBeEJNeG9wRVJ6NmxQelhyVTBvdThzPQ==') ) ? $config : System::getEmailConfiguration(); $oSpool = new spoolRun(); diff --git a/workflow/engine/classes/class.wsTools.php b/workflow/engine/classes/class.wsTools.php index a52b9ee03..4063f0634 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -233,12 +233,13 @@ class workspaceTools $value = isset($matches['value']) ? $matches['value'] : $matches[3]; if($this->onedb){ - $dbPrefix = array('DB_NAME' => 'wf_', 'DB_USER' => 'wf_', 'DB_RBAC_NAME' => 'wf_', 'DB_RBAC_USER' => 'wf_', 'DB_REPORT_NAME' => 'wf_', 'DB_REPORT_USER' => 'wf_'); + $dbInfo = $this->getDBInfo(); + $dbPrefix = array('DB_NAME' => 'wf_', 'DB_USER' => 'wf_', 'DB_RBAC_NAME' => 'wf_', 'DB_RBAC_USER' => 'wf_', 'DB_REPORT_NAME' => 'wf_', 'DB_REPORT_USER' => 'wf_'); if (array_search($key, array('DB_PASS', 'DB_RBAC_PASS', 'DB_REPORT_PASS'))) { - $value = $this->dbInfo['DB_PASS']; + $value = $dbInfo['DB_PASS']; } } else{ - $dbPrefix = array('DB_NAME' => 'wf_', 'DB_USER' => 'wf_', 'DB_RBAC_NAME' => 'rb_', 'DB_RBAC_USER' => 'rb_', 'DB_REPORT_NAME' => 'rp_', 'DB_REPORT_USER' => 'rp_'); + $dbPrefix = array('DB_NAME' => 'wf_', 'DB_USER' => 'wf_', 'DB_RBAC_NAME' => 'rb_', 'DB_RBAC_USER' => 'rb_', 'DB_REPORT_NAME' => 'rp_', 'DB_REPORT_USER' => 'rp_'); } if (array_search($key, array('DB_HOST', 'DB_RBAC_HOST', 'DB_REPORT_HOST')) !== false) { @@ -272,7 +273,7 @@ class workspaceTools * @param bool $resetDBNames if true, also reset all database names * @return array contains the new database names as values */ - public function resetDBInfo($newHost, $resetDBNames = true) + public function resetDBInfo($newHost, $resetDBNames = true, $onedb = false) { if (count(explode(":", $newHost)) < 2) { $newHost .= ':3306'; @@ -280,7 +281,7 @@ class workspaceTools $this->newHost = $newHost; $this->resetDBNames = $resetDBNames; $this->resetDBDiff = array(); - $this->onedb = false; + $this->onedb = $onedb; if (!$this->workspaceExists()) { throw new Exception("Could not find db.php in the workspace"); @@ -289,14 +290,7 @@ class workspaceTools if ($sDbFile === false) { throw new Exception("Could not read database information from db.php"); - } else { - if (strpos($sDbFile, 'rb_')) { - $this->onedb = false; - } else { - $this->onedb = true; - } } - /* Match all defines in the config file. Check updateDBCallback to know what * keys are changed and what groups are matched. * This regular expression will match any "define ('', '');" @@ -434,7 +428,7 @@ class workspaceTools * @return database connection */ private function getDatabase($rbac = false) - { + { if (isset($this->db) && $this->db->isConnected() && $rbac == false) { return $this->db; } @@ -847,6 +841,7 @@ class workspaceTools if (!empty($changes['tablesToAdd'])) { CLI::logging("-> " . count($changes['tablesToAdd']) . " tables to add\n"); } + foreach ($changes['tablesToAdd'] as $sTable => $aColumns) { $oDataBase->executeQuery($oDataBase->generateCreateTableSQL($sTable, $aColumns)); if (isset($changes['tablesToAdd'][$sTable]['INDEXES'])) { @@ -859,6 +854,7 @@ class workspaceTools if (!empty($changes['tablesToAlter'])) { CLI::logging("-> " . count($changes['tablesToAlter']) . " tables to alter\n"); } + foreach ($changes['tablesToAlter'] as $sTable => $aActions) { foreach ($aActions as $sAction => $aAction) { foreach ($aAction as $sColumn => $vData) { @@ -974,6 +970,9 @@ class workspaceTools $dbNetView = new NET($this->dbHost); $dbNetView->loginDbServer($this->dbUser, $this->dbPass); try { + if (!defined('DB_ADAPTER')) { + require_once($this->dbPath); + } $sMySQLVersion = $dbNetView->getDbServerVersion('mysql'); } catch (Exception $oException) { $sMySQLVersion = 'Unknown'; @@ -1033,10 +1032,14 @@ class workspaceTools $wfDsn = $fields['DB_ADAPTER'] . '://' . $fields['DB_USER'] . ':' . $fields['DB_PASS'] . '@' . $fields['DB_HOST'] . '/' . $fields['DB_NAME']; + if ($fields['DB_NAME'] == $fields['DB_RBAC_NAME']) { + $info = array('Workspace Name' => $fields['WORKSPACE_NAME'], 'Workflow Database' => sprintf("%s://%s:%s@%s/%s", $fields['DB_ADAPTER'], $fields['DB_USER'], $fields['DB_PASS'], $fields['DB_HOST'], $fields['DB_NAME']), 'MySql Version' => $fields['DATABASE']); + } else { $info = array('Workspace Name' => $fields['WORKSPACE_NAME'], //'Available Databases' => $fields['AVAILABLE_DB'], 'Workflow Database' => sprintf("%s://%s:%s@%s/%s", $fields['DB_ADAPTER'], $fields['DB_USER'], $fields['DB_PASS'], $fields['DB_HOST'], $fields['DB_NAME']), 'RBAC Database' => sprintf("%s://%s:%s@%s/%s", $fields['DB_ADAPTER'], $fields['DB_RBAC_USER'], $fields['DB_RBAC_PASS'], $fields['DB_RBAC_HOST'], $fields['DB_RBAC_NAME']), 'Report Database' => sprintf("%s://%s:%s@%s/%s", $fields['DB_ADAPTER'], $fields['DB_REPORT_USER'], $fields['DB_REPORT_PASS'], $fields['DB_REPORT_HOST'], $fields['DB_REPORT_NAME']), 'MySql Version' => $fields['DATABASE'] ); + } foreach ($info as $k => $v) { if (is_numeric($k)) { @@ -1071,15 +1074,18 @@ class workspaceTools public function exportDatabase($path, $onedb = false) { $dbInfo = $this->getDBInfo(); - + if ($onedb) { $databases = array("rb", "rp"); + } else if ($dbInfo['DB_NAME'] == $dbInfo['DB_RBAC_NAME']) { + $databases = array("wf"); } else { $databases = array("wf", "rp", "rb"); } $dbNames = array(); - foreach ($databases as $db) { + + foreach ($databases as $db) { $dbInfo = $this->getDBCredentials($db); $oDbMaintainer = new DataBaseMaintenance($dbInfo["host"], $dbInfo["user"], $dbInfo["pass"]); CLI::logging("Saving database {$dbInfo["name"]}\n"); @@ -1140,7 +1146,7 @@ class workspaceTools * @param bool $compress specifies wheter the backup is compressed or not */ public function backup($backupFile, $compress = true) - { + { /* $filename can be a string, in which case it's used as the filename of * the backup, or it can be a previously created tar, which allows for * multiple workspaces in one backup. @@ -1315,6 +1321,12 @@ class workspaceTools } } + public function executeScript($database, $filename, $parameters) + { + $this->executeSQLScript($database, $filename, $parameters); + return true; + } + static public function restoreLegacy($directory) { throw new Exception("Use gulliver to restore backups from old versions"); @@ -1435,6 +1447,13 @@ class workspaceTools throw new Exception("Backup version {$metadata->version} not supported"); } $backupWorkspace = $metadata->WORKSPACE_NAME; + + if (strpos($metadata->DB_RBAC_NAME, 'rb_') === false) { + $onedb = true; + } else { + $onedb = false; + } + if (isset($dstWorkspace)) { $workspaceName = $dstWorkspace; $createWorkspace = true; @@ -1449,7 +1468,7 @@ class workspaceTools CLI::logging("> Restoring " . CLI::info($backupWorkspace) . " to " . CLI::info($workspaceName) . "\n"); } $workspace = new workspaceTools($workspaceName); - + if ($workspace->workspaceExists()) { if ($overwrite) { @@ -1492,24 +1511,34 @@ class workspaceTools throw new Exception('Could not connect to system database: ' . mysql_error()); } - $newDBNames = $workspace->resetDBInfo($dbHost, $createWorkspace); + $dbName = ''; + $newDBNames = $workspace->resetDBInfo($dbHost, $createWorkspace, $onedb); foreach ($metadata->databases as $db) { - $dbName = $newDBNames[$db->name]; - CLI::logging("+> Restoring database {$db->name} to $dbName\n"); - $workspace->executeSQLScript($dbName, "$tempDirectory/{$db->name}.sql",$aParameters); - $workspace->createDBUser($dbName, $db->pass, "localhost", $dbName); - $workspace->createDBUser($dbName, $db->pass, "%", $dbName); + if ($dbName != $newDBNames[$db->name]) { + $dbName = $newDBNames[$db->name]; + CLI::logging("+> Restoring database {$db->name} to $dbName\n"); + $workspace->executeSQLScript($dbName, "$tempDirectory/{$db->name}.sql",$aParameters); + $workspace->createDBUser($dbName, $db->pass, "localhost", $dbName); + $workspace->createDBUser($dbName, $db->pass, "%", $dbName); + } } $version = explode('-', $metadata->PM_VERSION); $versionOld = ( isset($version[0])) ? $version[0] : ''; CLI::logging(CLI::info("$versionOld < $versionPresent") . "\n"); + $start = microtime(true); + CLI::logging("> Verify enterprise old...\n"); + $workspace->verifyEnterprise($workspaceName); + $stop = microtime(true); + $final = $stop - $start; + CLI::logging("<*> Verify took $final seconds.\n"); + if ( $versionOld < $versionPresent || strpos($versionPresent, "Branch")) { $start = microtime(true); CLI::logging("> Updating database...\n"); - $workspace->upgradeDatabase(); + $workspace->upgradeDatabase($onedb); $stop = microtime(true); $final = $stop - $start; CLI::logging("<*> Database Upgrade Process took $final seconds.\n"); @@ -1639,7 +1668,13 @@ class workspaceTools { $this->initPropel( true ); G::LoadClass("enterprise"); - enterpriseClass::setHashPassword($response); + $licensedFeatures = & PMLicensedFeatures::getSingleton(); + if ($licensedFeatures->verifyfeature('95OY24wcXpEMzIyRmlNSnF0STNFSHJzMG9wYTJKekpLNmY2ZmRCeGtuZk5oUDloaUNhUGVjTDJBPT0=')) { + enterpriseClass::setHashPassword($response); + } else { + return false; + } + return true; } public function verifyEnterprise ($workspace) diff --git a/workflow/engine/classes/model/AdditionalTables.php b/workflow/engine/classes/model/AdditionalTables.php index 07ce84404..028b0ff10 100755 --- a/workflow/engine/classes/model/AdditionalTables.php +++ b/workflow/engine/classes/model/AdditionalTables.php @@ -200,6 +200,8 @@ class AdditionalTables extends BaseAdditionalTables 'APP_UID' => '', 'SHD_DATE' => date('Y-m-d H:i:s'))); */ + + G::auditLog("CreatePmtable", "PM Table Name: ".$aData['ADD_TAB_NAME']); return $aData['ADD_TAB_UID']; } else { $sMessage = ''; @@ -226,6 +228,7 @@ class AdditionalTables extends BaseAdditionalTables $oConnection->begin(); $iResult = $oAdditionalTables->save(); $oConnection->commit(); + G::auditLog("UpdatePmtable", "PM Table Name: ".$aData['ADD_TAB_NAME']." PM Table ID: (".$aData['ADD_TAB_UID'].") "); } else { $sMessage = ''; $aValidationFailures = $oAdditionalTables->getValidationFailures(); diff --git a/workflow/engine/classes/model/AddonsStore.php b/workflow/engine/classes/model/AddonsStore.php index 30e861fec..132b26a9b 100644 --- a/workflow/engine/classes/model/AddonsStore.php +++ b/workflow/engine/classes/model/AddonsStore.php @@ -64,7 +64,115 @@ class AddonsStore extends BaseAddonsStore return false; } - public static function addonList() + public static function addonList($type = 'plugin') + { + $result = array(); + + AddonsStore::checkLicenseStore(); + + $licenseManager = &pmLicenseManager::getSingleton(); //Getting the licenseManager + + $result["store_errors"] = array(); + list($stores, $errors) = AddonsStore::updateAll(false, $type); + + foreach ($errors as $store_id => $store_error) { + $result["store_errors"][] = array("id" => $store_id, "msg" => $store_error); + } + + $result["addons"] = array(); + $result["errors"] = array(); + + $criteria = new Criteria(); + $criteria->addAscendingOrderByColumn(AddonsManagerPeer::ADDON_TYPE); + $criteria->addAscendingOrderByColumn(AddonsManagerPeer::ADDON_ID); + $criteria->add(AddonsManagerPeer::ADDON_TYPE, $type, Criteria::EQUAL); + $addons = AddonsManagerPeer::doSelect($criteria); + + foreach ($addons as $addon) { + + $status = $addon->getAddonStatus(); + $version = $addon->getAddonVersion(); + $enabled = null; + + if (!$addon->checkState()) { + $result["errors"][] = array("addonId" => $addon->getAddonId(), "storeId" => $addon->getStoreId()); + } + + $sw = 1; + $addonInLicense = in_array($addon->getAddonId(), $licenseManager->features); + + if ($sw == 1 && $addon->getAddonId() != "enterprise" && !$addonInLicense) { + $sw = 0; + } + + if ($type == 'plugin') { + if ($sw == 1 && $addon->isInstalled()) { + if ($addon->isEnabled()) { + $status = "installed"; + } else { + $status = "disabled"; + } + + $version = $addon->getInstalledVersion(); + + if (version_compare($version . "", $addon->getAddonVersion() . "", "<")) { + $status = "upgrade"; + } + + $enabled = $addon->isEnabled(); + $sw = 0; + } + } else { + $status = "available"; + $enabled = false; + if (!$addonInLicense && in_array($addon->getAddonName(), $licenseManager->licensedfeatures) == 1) { + $status = "installed"; + $enabled = true; + } + } + + if ($sw == 1 && $addonInLicense) { + $status = "ready"; + $sw = 0; + } + + $state = $addon->getAddonState(); + $log = null; + + if ($state != null) { + $status = $state; + $log = $addon->getInstallLog(); + } + if ($addon->getAddonId() == "enterprise" && $status== 'ready') { + $status = 'installed'; + } + if ($status == 'minus-circle' ) { + $status = "available"; + } + + $result["addons"][$addon->getAddonId()] = array( + "id" => $addon->getAddonId(), + "store" => $addon->getStoreId(), + "name" => $addon->getAddonName(), + "nick" => $addon->getAddonNick(), + "version" => $version, + "enabled" => $enabled, + "latest_version" => $addon->getAddonVersion(), + "type" => $addon->getAddonType(), + "release_type" => $addon->getAddonReleaseType(), + "url" => $addon->getAddonDownloadUrl(), + "publisher" => $addon->getAddonPublisher(), + "description" => $addon->getAddonDescription(), + "status" => $status, + "log" => $log, + "progress" => round($addon->getAddonDownloadProgress()) + ); + } + + return $result; + } + + public static function addonFeatureList() { $result = array(); @@ -135,6 +243,9 @@ class AddonsStore extends BaseAddonsStore if ($addon->getAddonId() == "enterprise" && $status== 'ready') { $status = 'installed'; } + if ($status == 'minus-circle' ) { + $status = "available"; + } $result["addons"][$addon->getAddonId()] = array( "id" => $addon->getAddonId(), @@ -175,14 +286,14 @@ class AddonsStore extends BaseAddonsStore * * @return array containing a 'stores' array and a 'errors' array */ - public static function updateAll($force = false) + public static function updateAll($force = false, $type = 'plugin') { $stores = array(); $errors = array(); foreach (self::listStores() as $store) { try { - $stores[$store->getStoreId()] = $store->update($force); + $stores[$store->getStoreId()] = $store->update($force, $type); } catch (Exception $e) { $errors[$store->getStoreId()] = $e->getMessage(); } @@ -196,11 +307,12 @@ class AddonsStore extends BaseAddonsStore * * @return int number of addons removed */ - public function clear() + public function clear($type = 'plugin') { /* Remove old items from this store */ $criteria = new Criteria(AddonsManagerPeer::DATABASE_NAME); $criteria->add(AddonsManagerPeer::STORE_ID, $this->getStoreId(), Criteria::EQUAL); + $criteria->add(AddonsManagerPeer::ADDON_TYPE, $type, Criteria::EQUAL); return AddonsManagerPeer::doDelete($criteria); } @@ -210,7 +322,7 @@ class AddonsStore extends BaseAddonsStore * * @return bool true if updated, false otherwise */ - public function update($force = false) + public function update($force = false, $type = 'plugin') { require_once PATH_CORE . 'classes' . PATH_SEP . 'class.pmLicenseManager.php'; @@ -221,12 +333,13 @@ class AddonsStore extends BaseAddonsStore //If we have any addon that is installing or updating, don't update store $criteria = new Criteria(AddonsManagerPeer::DATABASE_NAME); $criteria->add(AddonsManagerPeer::ADDON_STATE, '', Criteria::NOT_EQUAL); + $criteria->add(AddonsManagerPeer::ADDON_TYPE, $type); if (AddonsManagerPeer::doCount($criteria) > 0) { return false; } - $this->clear(); + $this->clear($type); //Fill with local information @@ -241,74 +354,98 @@ class AddonsStore extends BaseAddonsStore $pmLicenseManagerO = &pmLicenseManager::getSingleton(); $localPlugins = array(); - foreach ($aPluginsPP as $aPlugin) { - $sClassName = substr($aPlugin['sFilename'], 0, strpos($aPlugin['sFilename'], '-')); + if ($type == 'plugin') { + foreach ($aPluginsPP as $aPlugin) { + $sClassName = substr($aPlugin['sFilename'], 0, strpos($aPlugin['sFilename'], '-')); - if (file_exists(PATH_PLUGINS . $sClassName . '.php')) { - require_once PATH_PLUGINS . $sClassName . '.php'; + if (file_exists(PATH_PLUGINS . $sClassName . '.php')) { + require_once PATH_PLUGINS . $sClassName . '.php'; - $oDetails = $oPluginRegistry->getPluginDetails($sClassName . '.php'); + $oDetails = $oPluginRegistry->getPluginDetails($sClassName . '.php'); - if ($oDetails) { - $sStatus = $oDetails->enabled ? G::LoadTranslation('ID_ENABLED') : G::LoadTranslation('ID_DISABLED'); + if ($oDetails) { + $sStatus = $oDetails->enabled ? G::LoadTranslation('ID_ENABLED') : G::LoadTranslation('ID_DISABLED'); - if (isset($oDetails->aWorkspaces)) { - if (!in_array(SYS_SYS, $oDetails->aWorkspaces)) { + if (isset($oDetails->aWorkspaces)) { + if (!in_array(SYS_SYS, $oDetails->aWorkspaces)) { + continue; + } + } + + if ($sClassName == "pmLicenseManager" || $sClassName == "pmTrial") { continue; } + + $sEdit = (($oDetails->sSetupPage != '') && ($oDetails->enabled)? G::LoadTranslation('ID_SETUP') : ' '); + $aPlugin = array(); + $aPluginId = $sClassName; + $aPluginTitle = $oDetails->sFriendlyName; + $aPluginDescription = $oDetails->sDescription; + $aPluginVersion = $oDetails->iVersion; + + if (@in_array($sClassName, $pmLicenseManagerO->features)) { + $aPluginStatus = $sStatus; + $aPluginLinkStatus = 'pluginsChange?id=' . $sClassName . '.php&status=' . $oDetails->enabled; + $aPluginEdit = $sEdit; + $aPluginLinkEdit = 'pluginsSetup?id=' . $sClassName . '.php'; + $aPluginStatusA = $sStatus == "Enabled" ? "installed" : 'disabled'; + $enabledStatus = true; + } else { + $aPluginStatus = ""; + $aPluginLinkStatus = ''; + $aPluginEdit = ''; + $aPluginLinkEdit = ''; + $aPluginStatusA = 'minus-circle'; + $enabledStatus = false; + } + + $addon = new AddonsManager(); + //G::pr($addon); + $addon->setAddonId($aPluginId); + $addon->setStoreId($this->getStoreId()); + //Don't trust external data + $addon->setAddonName($aPluginId); + $addon->setAddonDescription($aPluginDescription); + $addon->setAddonNick($aPluginTitle); + $addon->setAddonVersion(""); + $addon->setAddonStatus($aPluginStatusA); + $addon->setAddonType("plugin"); + $addon->setAddonPublisher("Colosa"); + $addon->setAddonDownloadUrl(""); + $addon->setAddonDownloadMd5(""); + $addon->setAddonReleaseDate(null); + $addon->setAddonReleaseType('localRegistry'); + $addon->setAddonReleaseNotes(""); + $addon->setAddonState(""); + + $addon->save(); + + $localPlugins[$aPluginId] = $addon; } - - if ($sClassName == "pmLicenseManager" || $sClassName == "pmTrial") { - continue; - } - - $sEdit = (($oDetails->sSetupPage != '') && ($oDetails->enabled)? G::LoadTranslation('ID_SETUP') : ' '); - $aPlugin = array(); - $aPluginId = $sClassName; - $aPluginTitle = $oDetails->sFriendlyName; - $aPluginDescription = $oDetails->sDescription; - $aPluginVersion = $oDetails->iVersion; - - if (@in_array($sClassName, $pmLicenseManagerO->features)) { - $aPluginStatus = $sStatus; - $aPluginLinkStatus = 'pluginsChange?id=' . $sClassName . '.php&status=' . $oDetails->enabled; - $aPluginEdit = $sEdit; - $aPluginLinkEdit = 'pluginsSetup?id=' . $sClassName . '.php'; - $aPluginStatusA = $sStatus == "Enabled" ? "installed" : 'disabled'; - $enabledStatus = true; - } else { - $aPluginStatus = ""; - $aPluginLinkStatus = ''; - $aPluginEdit = ''; - $aPluginLinkEdit = ''; - $aPluginStatusA = 'minus-circle'; - $enabledStatus = false; - } - - $addon = new AddonsManager(); - //G::pr($addon); - $addon->setAddonId($aPluginId); - $addon->setStoreId($this->getStoreId()); - //Don't trust external data - $addon->setAddonName($aPluginId); - $addon->setAddonDescription($aPluginDescription); - $addon->setAddonNick($aPluginTitle); - $addon->setAddonVersion(""); - $addon->setAddonStatus($aPluginStatusA); - $addon->setAddonType("plugin"); - $addon->setAddonPublisher("Colosa"); - $addon->setAddonDownloadUrl(""); - $addon->setAddonDownloadMd5(""); - $addon->setAddonReleaseDate(null); - $addon->setAddonReleaseType('localRegistry'); - $addon->setAddonReleaseNotes(""); - $addon->setAddonState(""); - - $addon->save(); - - $localPlugins[$aPluginId] = $addon; } } + } else { + $list = unserialize($pmLicenseManagerO->licensedfeaturesList); + foreach ($list['addons'] as $key => $feature) { + $addon = new AddonsManager(); + $addon->setAddonId($feature['name']); + $addon->setStoreId($feature['guid']); + $addon->setAddonName($feature['name']); + $addon->setAddonDescription($feature['description']); + $addon->setAddonNick($feature['nick']); + $addon->setAddonVersion(""); + $addon->setAddonStatus($feature['status']); + $addon->setAddonType("features"); + $addon->setAddonPublisher("Colosa"); + $addon->setAddonDownloadUrl(""); + $addon->setAddonDownloadMd5(""); + $addon->setAddonReleaseDate(null); + $addon->setAddonReleaseType('localRegistry'); + $addon->setAddonReleaseNotes(""); + $addon->setAddonState(""); + + $addon->save(); + } } $this->setStoreLastUpdated(time()); @@ -359,6 +496,7 @@ class AddonsStore extends BaseAddonsStore $context = stream_context_create($option); //This may block for a while, always use AJAX to call this method + $url = $url . '&type=' . strtoupper($type); $data = file_get_contents($url, false, $context); if ($data === false) { @@ -388,7 +526,7 @@ class AddonsStore extends BaseAddonsStore throw (new Exception("Addons not found on store data")); } - $this->clear(); + $this->clear($type); try { //Add each item to this stores addons @@ -451,7 +589,7 @@ class AddonsStore extends BaseAddonsStore $this->save(); } catch (Exception $e) { //If we had issues, don't keep only a part of the items - $this->clear(); + $this->clear($type); throw $e; } diff --git a/workflow/engine/classes/model/CalendarDefinition.php b/workflow/engine/classes/model/CalendarDefinition.php index 37d3e29bf..e655f6db9 100755 --- a/workflow/engine/classes/model/CalendarDefinition.php +++ b/workflow/engine/classes/model/CalendarDefinition.php @@ -253,7 +253,11 @@ class CalendarDefinition extends BaseCalendarDefinition if (! (is_object( $tr ) && get_class( $tr ) == 'CalendarDefinition')) { $tr = new CalendarDefinition(); $tr->setCalendarCreateDate( 'now' ); + G::auditLog("CreateCalendar", "Calendar Name: ".$aData['CALENDAR_NAME']); + } else { + G::auditLog("UpdateCalendar", "Calendar Name: ".$aData['CALENDAR_NAME']." Calendar ID: (".$CalendarUid.") "); } + $tr->setCalendarUid( $CalendarUid ); $tr->setCalendarName( $CalendarName ); $tr->setCalendarUpdateDate( 'now' ); @@ -315,6 +319,8 @@ class CalendarDefinition extends BaseCalendarDefinition if ($tr->validate()) { // we save it, since we get no validation errors, or do whatever else you like. $res = $tr->save(); + $deletedCalendar = $tr->getCalendarName(); + G::auditLog("DeleteCalendar", "Calendar Name: ".$deletedCalendar." Calendar ID: (".$CalendarUid.") "); } else { // Something went wrong. We can now get the validationFailures and handle them. $msg = ''; diff --git a/workflow/engine/classes/model/Content.php b/workflow/engine/classes/model/Content.php index 2a5255e70..cec41fcb8 100755 --- a/workflow/engine/classes/model/Content.php +++ b/workflow/engine/classes/model/Content.php @@ -342,7 +342,7 @@ class Content extends BaseContent `CON_LANG` VARCHAR(10) default '' NOT NULL, `CON_VALUE` MEDIUMTEXT NOT NULL, CONSTRAINT CONTENT_BACKUP_PK PRIMARY KEY (CON_CATEGORY,CON_PARENT,CON_ID,CON_LANG) - )Engine=MyISAM DEFAULT CHARSET='utf8' COMMENT='Table for add content';" ); + )Engine=InnoDB DEFAULT CHARSET='utf8' COMMENT='Table for add content';" ); $oStatement->executeQuery(); $sql = " SELECT DISTINCT CON_LANG diff --git a/workflow/engine/classes/model/DashletInstance.php b/workflow/engine/classes/model/DashletInstance.php index b4c504e25..7ab5f5782 100644 --- a/workflow/engine/classes/model/DashletInstance.php +++ b/workflow/engine/classes/model/DashletInstance.php @@ -57,8 +57,10 @@ class DashletInstance extends BaseDashletInstance $data['DAS_INS_UID'] = G::generateUniqueID(); $data['DAS_INS_CREATE_DATE'] = date('Y-m-d H:i:s'); $dashletInstance = new DashletInstance(); + $msg = 'CreateDashletInstance'; } else { $dashletInstance = DashletInstancePeer::retrieveByPK($data['DAS_INS_UID']); + $msg = 'UpdateDashletInstance'; } $data['DAS_INS_UPDATE_DATE'] = date('Y-m-d H:i:s'); $dashletInstance->fromArray($data, BasePeer::TYPE_FIELDNAME); @@ -66,6 +68,10 @@ class DashletInstance extends BaseDashletInstance $connection->begin(); $result = $dashletInstance->save(); $connection->commit(); + + $dashletData = $this->load($data['DAS_INS_UID']); + G::auditLog($msg, "Dashlet Instance Name: ".$dashletData['DAS_INS_TITLE']." Dashlet Instance ID: (".$dashletData['DAS_INS_UID'].") "); + return $data['DAS_INS_UID']; } else { $message = ''; @@ -88,8 +94,11 @@ class DashletInstance extends BaseDashletInstance $dashletInstance = DashletInstancePeer::retrieveByPK($dasInsUid); if (!is_null($dashletInstance)) { $connection->begin(); + $dashletData = $this->load($dasInsUid); $result = $dashletInstance->delete(); $connection->commit(); + + G::auditLog("DeleteDashletInstance", "Dashlet Instance Name: ". $dashletData['DAS_INS_TITLE']." Dashlet Instance ID: (".$dasInsUid.") "); return $result; } else { throw new Exception('Error trying to delete: The row "' . $dasInsUid. '" does not exist.'); diff --git a/workflow/engine/classes/model/Department.php b/workflow/engine/classes/model/Department.php index 49ae0e04a..2138fc837 100755 --- a/workflow/engine/classes/model/Department.php +++ b/workflow/engine/classes/model/Department.php @@ -61,6 +61,12 @@ class Department extends BaseDepartment $this->setDepUid( G::generateUniqueID() ); } + if (isset( $aData['DEP_PARENT'] ) && ($aData['DEP_PARENT'] =='')) { + $msgLog = 'Departament'; + } else { + $msgLog = 'SubDepartament'; + } + if (isset( $aData['DEP_PARENT'] )) { $this->setDepParent( $aData['DEP_PARENT'] ); } else { @@ -108,6 +114,9 @@ class Department extends BaseDepartment $res = $this->save(); $con->commit(); + + G::auditLog("Create".$msgLog, $msgLog." Name: ". $aData['DEP_TITLE']); + return $this->getDepUid(); } else { $msg = ''; @@ -277,8 +286,11 @@ class Department extends BaseDepartment $oPro = DepartmentPeer::retrieveByPK( $ProUid ); if (! is_null( $oPro )) { + $dptoTitle = $this->Load($oPro->getDepUid()); Content::removeContent( 'DEPO_TITLE', '', $oPro->getDepUid() ); Content::removeContent( 'DEPO_DESCRIPTION', '', $oPro->getDepUid() ); + + G::auditLog("DeleteDepartament", "Departament Name: ".$dptoTitle['DEPO_TITLE']." Departament ID: (".$oPro->getDepUid().") "); return $oPro->delete(); } else { throw (new Exception( "The row '$ProUid' in table Group doesn't exist!" )); @@ -320,10 +332,11 @@ class Department extends BaseDepartment } public function updateDepartmentManager ($depId) - { + { $managerId = ''; $depParent = ''; $oDept = DepartmentPeer::retrieveByPk( $depId ); + if (is_object( $oDept ) && get_class( $oDept ) == 'Department') { $managerId = $oDept->getDepManager(); $depParent = $oDept->getDepParent(); @@ -353,7 +366,12 @@ class Department extends BaseDepartment } $oUser->save(); } - + + if ($managerId) { + $user = $oUser->loadDetailed ($managerId); + $dptoTitle = $oDept->Load($depId); + G::auditLog("AssignManagerToDepartament", "Assign Manager ".$user['USR_USERNAME']." (".$managerId.") to ".$dptoTitle['DEPO_TITLE']." (".$depId.") "); + } // get children departments to update the reportsTo of these children $childrenCriteria = new Criteria( 'workflow' ); $childrenCriteria->add( DepartmentPeer::DEP_PARENT, $depId ); @@ -378,9 +396,13 @@ class Department extends BaseDepartment try { //update the field in user table $oUser = UsersPeer::retrieveByPk( $userId ); + $user = $oUser->loadDetailed ($userId); + $dptoTitle = $this->Load($depId); + if (is_object( $oUser ) && get_class( $oUser ) == 'Users') { $oUser->setDepUid( $depId ); $oUser->save(); + G::auditLog("AssignUserToDepartament", "Assign user ".$user['USR_USERNAME']." (".$userId.") to departament ".$dptoTitle['DEPO_TITLE']." (".$depId.") "); } //if the user is a manager update Department Table @@ -549,11 +571,16 @@ class Department extends BaseDepartment ); try { $oUser = UsersPeer::retrieveByPk( $UsrUid ); + $user = $oUser->loadDetailed ($UsrUid); + $dptoTitle = $this->Load($DepUid); + if (is_object( $oUser ) && get_class( $oUser ) == 'Users') { //$oDepto = new Users(); $oUser->setDepUid( '' ); $oUser->setUsrReportsTo( '' ); $oUser->save(); + + G::auditLog("RemoveUsersFromDepartament", "Remove user ".$user['USR_USERNAME']."( ".$UsrUid.") from departament ".$dptoTitle['DEPO_TITLE']." (".$DepUid.") "); } } catch (exception $oError) { throw ($oError); diff --git a/workflow/engine/classes/model/GroupUser.php b/workflow/engine/classes/model/GroupUser.php index d4124cb37..5bf2e6980 100755 --- a/workflow/engine/classes/model/GroupUser.php +++ b/workflow/engine/classes/model/GroupUser.php @@ -91,6 +91,15 @@ class GroupUser extends BaseGroupUser $oConnection->begin(); $iResult = $oGroupUser->delete(); $oConnection->commit(); + + $oGrpwf = new Groupwf(); + $grpName = $oGrpwf->loadByGroupUid($sGrpUid); + + $oUsr = new Users(); + $usrName = $oUsr->load($sUserUid); + + G::auditLog("AssignUserToGroup", "Remove user: ".$usrName['USR_USERNAME'] ." (".$sUserUid.") from group ".$grpName['CON_VALUE']." (".$sGrpUid.") "); + return $iResult; } else { throw (new Exception( 'This row doesn\'t exist!' )); diff --git a/workflow/engine/classes/model/Groupwf.php b/workflow/engine/classes/model/Groupwf.php index 605345679..f99a70127 100755 --- a/workflow/engine/classes/model/Groupwf.php +++ b/workflow/engine/classes/model/Groupwf.php @@ -272,6 +272,26 @@ class Groupwf extends BaseGroupwf return $c; } + public function loadByGroupUid ($UidGroup) + { + $c = new Criteria( 'workflow' ); + $del = DBAdapter::getStringDelimiter(); + + $c->clearSelectColumns(); + $c->addSelectColumn( ContentPeer::CON_VALUE ); + + $c->add( ContentPeer::CON_CATEGORY, 'GRP_TITLE' ); + $c->add( ContentPeer::CON_ID, $UidGroup ); + $c->add( ContentPeer::CON_LANG, SYS_LANG ); + + $dataset = ContentPeer::doSelectRS( $c ); + $dataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + $row = $dataset->getRow(); + + return $row; + } + public function getAll ($start = null, $limit = null, $search = null) { $totalCount = 0; diff --git a/workflow/engine/classes/model/Language.php b/workflow/engine/classes/model/Language.php index 6384a8b1b..0f65cc66b 100755 --- a/workflow/engine/classes/model/Language.php +++ b/workflow/engine/classes/model/Language.php @@ -301,6 +301,8 @@ class Language extends BaseLanguage $results->headers = $POHeaders; $results->errMsg = $errorMsg; + G::auditLog("UploadLanguage", "Language: ".$languageID); + return $results; } catch (Exception $oError) { throw ($oError); @@ -549,6 +551,7 @@ class Language extends BaseLanguage } } //end foreach } + G::auditLog("ExportLanguage", "Language: ".$_GET['LOCALE']); G::streamFile( $sPOFile, true ); } public function updateLanguagePlugin ($plugin, $idLanguage) diff --git a/workflow/engine/classes/model/ProcessCategory.php b/workflow/engine/classes/model/ProcessCategory.php index b0de98507..2d51d25f6 100755 --- a/workflow/engine/classes/model/ProcessCategory.php +++ b/workflow/engine/classes/model/ProcessCategory.php @@ -55,6 +55,22 @@ class ProcessCategory extends BaseProcessCategory return $aRow; } + public function loadByCategoryId($sCategoryUid) + { + $c = new Criteria('workflow'); + $del = DBAdapter::getStringDelimiter(); + + $c->clearSelectColumns(); + $c->addSelectColumn( ProcessCategoryPeer::CATEGORY_NAME); + + $c->add(ProcessCategoryPeer::CATEGORY_UID, $sCategoryUid); + $dataset = ProcessCategoryPeer::doSelectRS($c); + $dataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); + $dataset->next(); + $aRow = $dataset->getRow(); + return $aRow['CATEGORY_NAME']; + } + public function exists ($catUid) { $oProCat = ProcessCategoryPeer::retrieveByPk( $catUid ); diff --git a/workflow/engine/classes/model/Translation.php b/workflow/engine/classes/model/Translation.php index 01e608303..4803bad50 100755 --- a/workflow/engine/classes/model/Translation.php +++ b/workflow/engine/classes/model/Translation.php @@ -454,6 +454,7 @@ class Translation extends BaseTranslation if (file_exists( PATH_CORE . PATH_SEP . 'content' . PATH_SEP . 'translations' . PATH_SEP . 'processmaker' . $locale . '.po' )) { G::rm_dir( PATH_CORE . PATH_SEP . 'content' . PATH_SEP . 'translations' . PATH_SEP . 'processmaker' . $locale . '.po' ); } + G::auditLog("DeleteLanguage", "Language: ".$locale); } } diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 058eb2ae9..1d0bc79d1 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: ProcessMaker 2.5.2.3\n" +"Project-Id-Version: ProcessMaker 2.8.0\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2014-09-22 16:11:21\n" +"PO-Revision-Date: 2014-10-13 12:37:31\n" "Last-Translator: \n" "Language-Team: Colosa Developers Team \n" "MIME-Version: 1.0\n" @@ -10036,8 +10036,8 @@ msgstr "Resume" # TRANSLATION # LABEL/ID_USER_ID #: LABEL/ID_USER_ID -msgid "User ID (*)" -msgstr "User ID (*)" +msgid "[LABEL/ID_USER_ID] Username" +msgstr "Username" # TRANSLATION # LABEL/ID_PHONE @@ -12412,8 +12412,8 @@ msgstr "Ajax communication failed" # TRANSLATION # LABEL/ID_CHECK_FIELDS_MARK_RED #: LABEL/ID_CHECK_FIELDS_MARK_RED -msgid "Please check the fields mark in red." -msgstr "Please check the fields mark in red." +msgid "Please check the fields marked in red." +msgstr "Please check the fields marked in red." # TRANSLATION # LABEL/ID_INPUT_ERROR @@ -13204,8 +13204,8 @@ msgstr "xxx" # TRANSLATION # LABEL/ID_SIZE_VERY_LARGE_PERMITTED #: LABEL/ID_SIZE_VERY_LARGE_PERMITTED -msgid "The size is very large as permitted!" -msgstr "The size is very large as permitted!" +msgid "The file is too large . Please upload a smaller file." +msgstr "The file is too large . Please upload a smaller file." # TRANSLATION # LABEL/ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP5 @@ -14392,8 +14392,8 @@ msgstr "All Categories" # TRANSLATION # LABEL/ID_CASES_NOTES_NO_PERMISSIONS #: LABEL/ID_CASES_NOTES_NO_PERMISSIONS -msgid "You do not have permission to cases notes" -msgstr "You do not have permission to cases notes" +msgid "You do not have permission to access cases notes" +msgstr "You do not have permission to access cases notes" # TRANSLATION # LABEL/ID_DELETE_DOCUMENT @@ -16456,8 +16456,8 @@ msgstr "Index" # TRANSLATION # LABEL/ID_ERROR_JS_NOT_AVAILABLE #: LABEL/ID_ERROR_JS_NOT_AVAILABLE -msgid "Your browser does not support javascript or it is disabled, please use a different browser or activate the javascript. Forms won't work totally because javascript is used." -msgstr "Your browser does not support javascript or it is disabled, please use a different browser or activate the javascript. Forms won't work totally because javascript is used." +msgid "Your browser doesn't support JavaScript or it may be disabled. Please use a different browser or enable the JavaScript, Dynaforms won't entirely work because JavaScript is used." +msgstr "Your browser doesn't support JavaScript or it may be disabled. Please use a different browser or enable the JavaScript, Dynaforms won't entirely work because JavaScript is used." # TRANSLATION # LABEL/ID_MAXIMUM_SIZE_FILE_REQUIRED @@ -16900,14 +16900,14 @@ msgstr "Audit Log has been disabled" # TRANSLATION # LABEL/ID_AUDIT_LOG_DETAILS_1 #: LABEL/ID_AUDIT_LOG_DETAILS_1 -msgid "Audit Log details1" -msgstr "Audit Log details1" +msgid "When this option is enabled, all changes made in the \"ADMIN\" tab are registered in a log." +msgstr "When this option is enabled, all changes made in the \"ADMIN\" tab are registered in a log." # TRANSLATION # LABEL/ID_AUDIT_LOG_DETAILS_2 #: LABEL/ID_AUDIT_LOG_DETAILS_2 -msgid "Audit Log details 2" -msgstr "Audit Log details 2" +msgid "and the user will be able to see those changes in the \"Audit Log\" option in Logs Menu" +msgstr "and the user will be able to see those changes in the \"Audit Log\" option in Logs Menu" # TRANSLATION # LABEL/ID_PRIVATE @@ -16945,6 +16945,492 @@ msgstr "center" msgid "right" msgstr "right" +# TRANSLATION +# LABEL/ID_LANGUAGE_CANT_DELETE_CURRENTLY +#: LABEL/ID_LANGUAGE_CANT_DELETE_CURRENTLY +msgid "The language, which the system is currently using, cannot be deleted." +msgstr "The language, which the system is currently using, cannot be deleted." + +# TRANSLATION +# LABEL/ID_INPUT_DOC_MAX_FILESIZE_REQUIRED +#: LABEL/ID_INPUT_DOC_MAX_FILESIZE_REQUIRED +msgid "Maximum file size parameter is required." +msgstr "Maximum file size parameter is required." + +# TRANSLATION +# LABEL/ID_AUDIT_LOG_ACTIONS +#: LABEL/ID_AUDIT_LOG_ACTIONS +msgid "Audit Log Actions" +msgstr "Audit Log Actions" + +# TRANSLATION +# LABEL/ID_RESET_FILTERS +#: LABEL/ID_RESET_FILTERS +msgid "Reset Filters" +msgstr "Reset Filters" + +# TRANSLATION +# LABEL/ID_INPUT_DB +#: LABEL/ID_INPUT_DB +msgid "Input" +msgstr "Input" + +# TRANSLATION +# LABEL/ID_TRIGGER_DB +#: LABEL/ID_TRIGGER_DB +msgid "Trigger" +msgstr "Trigger" + +# TRANSLATION +# LABEL/ID_IP +#: LABEL/ID_IP +msgid "IP Client" +msgstr "IP Client" + +# TRANSLATION +# LABEL/ID_OUTPUT_DB +#: LABEL/ID_OUTPUT_DB +msgid "Output" +msgstr "Output" + +# TRANSLATION +# LABEL/ID_ATTACHED_DB +#: LABEL/ID_ATTACHED_DB +msgid "Attached" +msgstr "Attached" + +# TRANSLATION +# LABEL/ID_DERIVATION_DB +#: LABEL/ID_DERIVATION_DB +msgid "Derivation" +msgstr "Derivation" + +# TRANSLATION +# LABEL/ID_OPEN_DYNAFORM_TAB +#: LABEL/ID_OPEN_DYNAFORM_TAB +msgid "Open the Dynaform in a new tab" +msgstr "Open the Dynaform in a new tab" + +# TRANSLATION +# LABEL/ID_ENTERPRISE_FEATURES +#: LABEL/ID_ENTERPRISE_FEATURES +msgid "Enterprise features" +msgstr "Enterprise features" + +# TRANSLATION +# LABEL/ID_CREATE_USER +#: LABEL/ID_CREATE_USER +msgid "Create User" +msgstr "Create User" + +# TRANSLATION +# LABEL/ID_UPDATE_USER +#: LABEL/ID_UPDATE_USER +msgid "Update User" +msgstr "Update User" + +# TRANSLATION +# LABEL/ID_DELETE_USER +#: LABEL/ID_DELETE_USER +msgid "Delete User" +msgstr "Delete User" + +# TRANSLATION +# LABEL/ID_ENABLE_USER +#: LABEL/ID_ENABLE_USER +msgid "Enable User" +msgstr "Enable User" + +# TRANSLATION +# LABEL/ID_DISABLE_USER +#: LABEL/ID_DISABLE_USER +msgid "Disable User" +msgstr "Disable User" + +# TRANSLATION +# LABEL/ID_ASSIGN_AUTHENTICATION_SOURCE +#: LABEL/ID_ASSIGN_AUTHENTICATION_SOURCE +msgid "Assign Authentication Source" +msgstr "Assign Authentication Source" + +# TRANSLATION +# LABEL/ID_ASSIGN_USER_TO_GROUP +#: LABEL/ID_ASSIGN_USER_TO_GROUP +msgid "Assign Users To Group" +msgstr "Assign Users To Group" + +# TRANSLATION +# LABEL/ID_CREATE_AUTH_SOURCE +#: LABEL/ID_CREATE_AUTH_SOURCE +msgid "Create Authentication Source" +msgstr "Create Authentication Source" + +# TRANSLATION +# LABEL/ID_UPDATE_AUTH_SOURCE +#: LABEL/ID_UPDATE_AUTH_SOURCE +msgid "Update Authentication Source" +msgstr "Update Authentication Source" + +# TRANSLATION +# LABEL/ID_DELETE_AUTH_SOURCE +#: LABEL/ID_DELETE_AUTH_SOURCE +msgid "Delete Authentication Source" +msgstr "Delete Authentication Source" + +# TRANSLATION +# LABEL/ID_UPDATE_ROLE +#: LABEL/ID_UPDATE_ROLE +msgid "Update Role" +msgstr "Update Role" + +# TRANSLATION +# LABEL/ID_DELETE_ROLE +#: LABEL/ID_DELETE_ROLE +msgid "Delete Role" +msgstr "Delete Role" + +# TRANSLATION +# LABEL/ID_ASSIGN_USER_TO_ROLE +#: LABEL/ID_ASSIGN_USER_TO_ROLE +msgid "Assign Users To Role" +msgstr "Assign Users To Role" + +# TRANSLATION +# LABEL/ID_DELETE_USER_TO_ROLE +#: LABEL/ID_DELETE_USER_TO_ROLE +msgid "Delete Users To Role" +msgstr "Delete Users To Role" + +# TRANSLATION +# LABEL/ID_ADD_PERMISSION_TO_ROLE +#: LABEL/ID_ADD_PERMISSION_TO_ROLE +msgid "Add Permission To Role" +msgstr "Add Permission To Role" + +# TRANSLATION +# LABEL/ID_DELETE_PERMISSION_TO_ROLE +#: LABEL/ID_DELETE_PERMISSION_TO_ROLE +msgid "Delete Permission To Role" +msgstr "Delete Permission To Role" + +# TRANSLATION +# LABEL/ID_CREATE_SKIN +#: LABEL/ID_CREATE_SKIN +msgid "Create Skin" +msgstr "Create Skin" + +# TRANSLATION +# LABEL/ID_IMPORT_SKIN +#: LABEL/ID_IMPORT_SKIN +msgid "Import Skin" +msgstr "Import Skin" + +# TRANSLATION +# LABEL/ID_EXPORT_SKIN +#: LABEL/ID_EXPORT_SKIN +msgid "Export Skin" +msgstr "Export Skin" + +# TRANSLATION +# LABEL/ID_DELETE_SKIN +#: LABEL/ID_DELETE_SKIN +msgid "Delete Skin" +msgstr "Delete Skin" + +# TRANSLATION +# LABEL/ID_UPDATE_GROUP +#: LABEL/ID_UPDATE_GROUP +msgid "Update Group" +msgstr "Update Group" + +# TRANSLATION +# LABEL/ID_CREATE_CATEGORY +#: LABEL/ID_CREATE_CATEGORY +msgid "Create Category" +msgstr "Create Category" + +# TRANSLATION +# LABEL/ID_UPDATE_CATEGORY +#: LABEL/ID_UPDATE_CATEGORY +msgid "Update Category" +msgstr "Update Category" + +# TRANSLATION +# LABEL/ID_DELETE_CATEGORY +#: LABEL/ID_DELETE_CATEGORY +msgid "Delete Category" +msgstr "Delete Category" + +# TRANSLATION +# LABEL/ID_BUILD_CACHE +#: LABEL/ID_BUILD_CACHE +msgid "[LABEL/ID_BUILD_CACHE] Build Cache" +msgstr "Build Cache" + +# TRANSLATION +# LABEL/ID_CLEAR_CRON +#: LABEL/ID_CLEAR_CRON +msgid "Clear Cron" +msgstr "Clear Cron" + +# TRANSLATION +# LABEL/ID_REPLACE_LOGO +#: LABEL/ID_REPLACE_LOGO +msgid "Replace Logo" +msgstr "Replace Logo" + +# TRANSLATION +# LABEL/ID_UPDATE_LOGIN_SETTINGS +#: LABEL/ID_UPDATE_LOGIN_SETTINGS +msgid "Update Login Settings" +msgstr "Update Login Settings" + +# TRANSLATION +# LABEL/ID_DISABLE_HEART_BEAT +#: LABEL/ID_DISABLE_HEART_BEAT +msgid "Disable Heart Beat" +msgstr "Disable Heart Beat" + +# TRANSLATION +# LABEL/ID_CREATE_PMTABLE +#: LABEL/ID_CREATE_PMTABLE +msgid "Create PM Table" +msgstr "Create PM Table" + +# TRANSLATION +# LABEL/ID_UPDATE_PMTABLE +#: LABEL/ID_UPDATE_PMTABLE +msgid "Update PM Table" +msgstr "Update PM Table" + +# TRANSLATION +# LABEL/ID_DELETE_PMTABLE +#: LABEL/ID_DELETE_PMTABLE +msgid "Delete PM Table" +msgstr "Delete PM Table" + +# TRANSLATION +# LABEL/ID_ADD_DATA_PMTABLE +#: LABEL/ID_ADD_DATA_PMTABLE +msgid "Add Data to PM table" +msgstr "Add Data to PM table" + +# TRANSLATION +# LABEL/ID_UPDATE_DATA_PMTABLE +#: LABEL/ID_UPDATE_DATA_PMTABLE +msgid "Update Data from PM Table" +msgstr "Update Data from PM Table" + +# TRANSLATION +# LABEL/ID_DELETE_DATA_PMTABLE +#: LABEL/ID_DELETE_DATA_PMTABLE +msgid "Delete Data from PM Table" +msgstr "Delete Data from PM Table" + +# TRANSLATION +# LABEL/ID_IMPORT_TABLE +#: LABEL/ID_IMPORT_TABLE +msgid "Import Table" +msgstr "Import Table" + +# TRANSLATION +# LABEL/ID_EXPORT_TABLE +#: LABEL/ID_EXPORT_TABLE +msgid "Export Table" +msgstr "Export Table" + +# TRANSLATION +# LABEL/ID_CREATE_CALENDAR +#: LABEL/ID_CREATE_CALENDAR +msgid "Create Calendar" +msgstr "Create Calendar" + +# TRANSLATION +# LABEL/ID_UPDATE_CALENDAR +#: LABEL/ID_UPDATE_CALENDAR +msgid "Update Calendar" +msgstr "Update Calendar" + +# TRANSLATION +# LABEL/ID_DELETE_CALENDAR +#: LABEL/ID_DELETE_CALENDAR +msgid "Delete Calendar" +msgstr "Delete Calendar" + +# TRANSLATION +# LABEL/ID_CREATE_DASHLET_INSTANCE +#: LABEL/ID_CREATE_DASHLET_INSTANCE +msgid "Create Dashlet Instance" +msgstr "Create Dashlet Instance" + +# TRANSLATION +# LABEL/ID_UPDATE_DASHLET_INSTANCE +#: LABEL/ID_UPDATE_DASHLET_INSTANCE +msgid "Update Dashlet Instance" +msgstr "Update Dashlet Instance" + +# TRANSLATION +# LABEL/ID_DELETE_DASHLET_INSTANCE +#: LABEL/ID_DELETE_DASHLET_INSTANCE +msgid "Delete Dashlet Instance" +msgstr "Delete Dashlet Instance" + +# TRANSLATION +# LABEL/ID_CREATE_DEPARTAMENT +#: LABEL/ID_CREATE_DEPARTAMENT +msgid "Create Departament" +msgstr "Create Departament" + +# TRANSLATION +# LABEL/ID_CREATE_SUB_DEPARTAMENT +#: LABEL/ID_CREATE_SUB_DEPARTAMENT +msgid "Create Sub Departament" +msgstr "Create Sub Departament" + +# TRANSLATION +# LABEL/ID_UPDATE_DEPARTAMENT +#: LABEL/ID_UPDATE_DEPARTAMENT +msgid "Update Departament" +msgstr "Update Departament" + +# TRANSLATION +# LABEL/ID_UPDATE_SUB_DEPARTAMENT +#: LABEL/ID_UPDATE_SUB_DEPARTAMENT +msgid "Update Sub Departament" +msgstr "Update Sub Departament" + +# TRANSLATION +# LABEL/ID_DELETE_DEPARTAMENT +#: LABEL/ID_DELETE_DEPARTAMENT +msgid "Delete Departament" +msgstr "Delete Departament" + +# TRANSLATION +# LABEL/ID_ASSIGN_MANAGER_TO_DEPARTAMENT +#: LABEL/ID_ASSIGN_MANAGER_TO_DEPARTAMENT +msgid "Assign Manager To Departament" +msgstr "Assign Manager To Departament" + +# TRANSLATION +# LABEL/ID_ASSIGN_USER_TO_DEPARTAMENT +#: LABEL/ID_ASSIGN_USER_TO_DEPARTAMENT +msgid "Assign Users To Departament" +msgstr "Assign Users To Departament" + +# TRANSLATION +# LABEL/ID_REMOVE_USERS_FROM_DEPARTAMENT +#: LABEL/ID_REMOVE_USERS_FROM_DEPARTAMENT +msgid "Remove Users From Departament" +msgstr "Remove Users From Departament" + +# TRANSLATION +# LABEL/ID_UPLOAD_LANGUAGE +#: LABEL/ID_UPLOAD_LANGUAGE +msgid "Upload Language" +msgstr "Upload Language" + +# TRANSLATION +# LABEL/ID_EXPORT_LANGUAGE +#: LABEL/ID_EXPORT_LANGUAGE +msgid "Export Language" +msgstr "Export Language" + +# TRANSLATION +# LABEL/ID_DELETE_LAGUAGE +#: LABEL/ID_DELETE_LAGUAGE +msgid "Delete Language" +msgstr "Delete Language" + +# TRANSLATION +# LABEL/ID_UPLOAD_SYSTEM_SETTINGS +#: LABEL/ID_UPLOAD_SYSTEM_SETTINGS +msgid "Upload System Settings" +msgstr "Upload System Settings" + +# TRANSLATION +# LABEL/ID_UPDATE_EMAIL_SETTINGS +#: LABEL/ID_UPDATE_EMAIL_SETTINGS +msgid "Update Email Settings" +msgstr "Update Email Settings" + +# TRANSLATION +# LABEL/ID_CREATE_EMAIL_SETTINGS +#: LABEL/ID_CREATE_EMAIL_SETTINGS +msgid "Create Email Settings" +msgstr "Create Email Settings" + +# TRANSLATION +# LABEL/ID_UPLOAD_LOGO +#: LABEL/ID_UPLOAD_LOGO +msgid "Upload Logo" +msgstr "Upload Logo" + +# TRANSLATION +# LABEL/ID_DELETE_LOGO +#: LABEL/ID_DELETE_LOGO +msgid "Delete Logo" +msgstr "Delete Logo" + +# TRANSLATION +# LABEL/ID_INSTALL_PLUGIN +#: LABEL/ID_INSTALL_PLUGIN +msgid "Install Plugin" +msgstr "Install Plugin" + +# TRANSLATION +# LABEL/ID_SET_COLUMNS +#: LABEL/ID_SET_COLUMNS +msgid "Set Columns" +msgstr "Set Columns" + +# TRANSLATION +# LABEL/ID_DISABLE_AUDIT_LOG +#: LABEL/ID_DISABLE_AUDIT_LOG +msgid "Disable Audit Log" +msgstr "Disable Audit Log" + +# TRANSLATION +# LABEL/ID_REMOVE_PLUGIN +#: LABEL/ID_REMOVE_PLUGIN +msgid "Remove Plugin" +msgstr "Remove Plugin" + +# TRANSLATION +# LABEL/ID_CREATE_ROLE +#: LABEL/ID_CREATE_ROLE +msgid "[LABEL/ID_CREATE_ROLE] Create New Role" +msgstr "Create New Role" + +# TRANSLATION +# LABEL/ID_CREATE_GROUP +#: LABEL/ID_CREATE_GROUP +msgid "[LABEL/ID_CREATE_GROUP] Create New Group" +msgstr "Create New Group" + +# TRANSLATION +# LABEL/ID_DELETE_GROUP +#: LABEL/ID_DELETE_GROUP +msgid "Remove Group" +msgstr "Remove Group" + +# TRANSLATION +# LABEL/ID_DISABLE_PLUGIN +#: LABEL/ID_DISABLE_PLUGIN +msgid "Disable Plugin" +msgstr "Disable Plugin" + +# TRANSLATION +# LABEL/ID_ENABLE_PLUGIN +#: LABEL/ID_ENABLE_PLUGIN +msgid "Enable Plugin" +msgstr "Enable Plugin" + +# TRANSLATION +# LABEL/ID_UPDATE_ENVIRONMENT_SETTINGS +#: LABEL/ID_UPDATE_ENVIRONMENT_SETTINGS +msgid "Update Environment Settings" +msgstr "Update Environment Settings" + # additionalTables/additionalTablesData.xml?ADD_TAB_NAME # additionalTables/additionalTablesData.xml #: text - ADD_TAB_NAME @@ -25262,7 +25748,7 @@ msgstr "-- Default --" # events/eventsEditAction.xml?TRI_UID # events/eventsEditAction.xml #: dropdown - TRI_UID -msgid "Trigger" +msgid "[events/eventsEditAction.xml?TRI_UID] Trigger" msgstr "Trigger" # events/eventsEditAction.xml?TRI_UID- @@ -35690,7 +36176,7 @@ msgstr "Last Name" # users/users_Edit.xml?USR_USERNAME # users/users_Edit.xml #: text - USR_USERNAME -msgid "[users/users_Edit.xml?USR_USERNAME] User ID (*)" +msgid "User ID (*)" msgstr "User ID (*)" # users/users_Edit.xml?USR_EMAIL @@ -37928,7 +38414,7 @@ msgstr "Label" # dynaforms/fields/file.xml?PME_INPUT # dynaforms/fields/file.xml #: dropdown - PME_INPUT -msgid "Input" +msgid "[dynaforms/fields/file.xml?PME_INPUT] Input" msgstr "Input" # dynaforms/fields/file.xml?PME_INPUT- diff --git a/workflow/engine/controllers/adminProxy.php b/workflow/engine/controllers/adminProxy.php index 5afd4ee74..a84047818 100644 --- a/workflow/engine/controllers/adminProxy.php +++ b/workflow/engine/controllers/adminProxy.php @@ -121,6 +121,12 @@ class adminProxy extends HttpProxyController $this->restart = $restart; $this->url = "/sys" . SYS_SYS . "/" . (($sysConf["default_lang"] != "")? $sysConf["default_lang"] : ((defined("SYS_LANG") && SYS_LANG != "")? SYS_LANG : "en")) . "/" . $sysConf["default_skin"] . $urlPart; $this->message = 'Saved Successfully'; + $msg = ""; + if($httpData->proxy_host != '' || $httpData->proxy_port != '' || $httpData->proxy_user != '') { + $msg = " Host -> ".$httpData->proxy_host." Port -> ".$httpData->proxy_port." User -> ".$httpData->proxy_user; + } + + G::auditLog("UploadSystemSettings", "Time Zone -> ".$httpData->time_zone." Memory Limit -> ".$httpData->memory_limit." Cookie lifetime -> ".$httpData->max_life_time." Default Skin -> ".$httpData->default_skin." Default Language -> ". $httpData->default_lang. $msg); } public function uxUserUpdate($httpData) @@ -732,6 +738,7 @@ class adminProxy extends HttpProxyController ); $this->success='true'; $this->msg='Saved'; + G::auditLog("UpdateEmailSettings", "EnableEmailNotifications->".$aFields['MESS_ENABLED']." EmailEngine->".$aFields['MESS_ENGINE']." Server->".$aFields['MESS_SERVER']." Port->".$aFields['MESS_PORT']." RequireAuthentication->".$aFields['MESS_RAUTH']." FromMail->".$aFields['MESS_ACCOUNT']." FromName->".$aFields['MESS_FROM_NAME']." Use Secure Connection->".$aFields['SMTPSecure']); } else { $oConfiguration->create( array( @@ -745,6 +752,7 @@ class adminProxy extends HttpProxyController ); $this->success='true'; $this->msg='Saved'; + G::auditLog("CreateEmailSettings", "EnableEmailNotifications->".$aFields['MESS_ENABLED']." EmailEngine->".$aFields['MESS_ENGINE']." Server->".$aFields['MESS_SERVER']." Port->".$aFields['MESS_PORT']." RequireAuthentication->".$aFields['MESS_RAUTH']." FromMail->".$aFields['MESS_ACCOUNT']." FromName->".$aFields['MESS_FROM_NAME']." Use Secure Connection->".$aFields['SMTPSecure']); } } catch (Exception $e) { $this->success= false; @@ -1048,6 +1056,7 @@ class adminProxy extends HttpProxyController try { list($imageWidth, $imageHeight, $imageType) = @getimagesize($dir . '/' . 'tmp' . $fileName); G::resizeImage($dir . '/tmp' . $fileName, $imageWidth, 49, $dir . '/' . $fileName); + G::auditLog("UploadLogo", "File Name: ".$fileName); } catch (Exception $e) { $error = $e->getMessage(); } @@ -1064,8 +1073,7 @@ class adminProxy extends HttpProxyController } } elseif ($_FILES['img']['type'] != '') { $failed = "1"; - } - + } echo '{success: true, failed: ' . $failed . ', uploaded: ' . $uploaded . ', type: "' . $_FILES['img']['type'] . '"}'; exit(); } @@ -1130,6 +1138,7 @@ class adminProxy extends HttpProxyController if (file_exists($dir . '/tmp' . $imgname)) { unlink ($dir . '/tmp' . $imgname); } + G::auditLog("DeleteLogo", "File Name: ".$imgname); } else { echo '{success: false}'; exit(); @@ -1182,6 +1191,8 @@ class adminProxy extends HttpProxyController $oConf->saveConfig('USER_LOGO_REPLACEMENT', '', '', ''); G::SendTemporalMessage('ID_REPLACED_LOGO', 'tmp-info', 'labels'); + G::auditLog("ReplaceLogo", "File Name: ".$snameLogo); + break; case 'restoreLogo': $snameLogo = $_GET['NAMELOGO']; @@ -1194,8 +1205,8 @@ class adminProxy extends HttpProxyController $oConf->aConfig = $aConf; $oConf->saveConfig('USER_LOGO_REPLACEMENT', '', '', ''); - G::SendTemporalMessage('ID_REPLACED_LOGO', 'tmp-info', 'labels'); + G::auditLog("RestoreLogo", "Restore Original Logo"); break; } } catch (Exception $oException) { diff --git a/workflow/engine/controllers/main.php b/workflow/engine/controllers/main.php index 295e11bd1..ebb7151c9 100644 --- a/workflow/engine/controllers/main.php +++ b/workflow/engine/controllers/main.php @@ -44,11 +44,12 @@ class Main extends Controller // license notification $expireInLabel = ''; - if (class_exists( 'pmLicenseManager' )) { - $pmLicenseManager = &pmLicenseManager::getSingleton(); - $expireIn = $pmLicenseManager->getExpireIn(); - $expireInLabel = $pmLicenseManager->getExpireInLabel(); - } + + require_once ("classes" . PATH_SEP . "class.pmLicenseManager.php"); + $pmLicenseManager = &pmLicenseManager::getSingleton(); + $expireIn = $pmLicenseManager->getExpireIn(); + $expireInLabel = $pmLicenseManager->getExpireInLabel(); + $this->setVar( 'licenseNotification', $expireInLabel ); // setting variables on javascript env. diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index 7ba429ffd..1238b7ea0 100755 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -410,6 +410,7 @@ class pmTablesProxy extends HttpProxyController if ($errors == '') { $result->success = true; $result->message = $count.G::LoadTranslation( 'ID_TABLES_REMOVED_SUCCESSFULLY' ); + G::auditLog("DeletePmtable", "Table Name: ". $table['ADD_TAB_NAME']." Table ID: (".$table['ADD_TAB_UID'].") "); } else { $result->success = false; $result->message = $count. G::LoadTranslation( 'ID_TABLES_REMOVED_WITH_ERRORS' ) .$errors; @@ -508,7 +509,7 @@ class pmTablesProxy extends HttpProxyController if ($obj->validate()) { $obj->save(); $toSave = true; - + G::auditLog("AddDataPmtable", "Table Name: ".$table['ADD_TAB_NAME']." Table ID: (".$table['ADD_TAB_UID'].") "); $primaryKeysValues = array (); foreach ($primaryKeys as $primaryKey) { $method = 'get' . AdditionalTables::getPHPName( $primaryKey['FLD_NAME'] ); @@ -527,6 +528,7 @@ class pmTablesProxy extends HttpProxyController $toSave = false; } + $result = new stdclass(); if ($toSave) { $result->success = true; $result->message = G::LoadTranslation('ID_RECORD_SAVED_SUCCESFULLY'); @@ -580,6 +582,10 @@ class pmTablesProxy extends HttpProxyController $result = $this->_dataUpdate( $row, $primaryKeys ); } + if ($result) { + G::auditLog("UpdateDataPmtable", "Table Name: ".$table['ADD_TAB_NAME']." Table ID: (".$table['ADD_TAB_UID'].") "); + } + $this->success = $result; $this->message = $result ? G::loadTranslation( 'ID_UPDATED_SUCCESSFULLY' ) : G::loadTranslation( 'ID_UPDATE_FAILED' ); } @@ -604,6 +610,8 @@ class pmTablesProxy extends HttpProxyController require_once $sPath . $this->className . '.php'; + G::auditLog("DeleteDataPmtable", "Table Name: ".$table['ADD_TAB_NAME']." Table ID: (".$table['ADD_TAB_UID'].") "); + $this->success = $this->_dataDestroy( $httpData->rows ); $this->message = $this->success ? G::loadTranslation( 'ID_DELETED_SUCCESSFULLY' ) : G::loadTranslation( 'ID_DELETE_FAILED' ); } @@ -678,6 +686,7 @@ class pmTablesProxy extends HttpProxyController $this->success = true; $this->message = G::loadTranslation( 'ID_FILE_IMPORTED_SUCCESSFULLY', array ($filename ) ); + G::auditLog("ImportTable", $filename); } } else { $sMessage = G::LoadTranslation( 'ID_UPLOAD_VALID_CSV_FILE' ); @@ -919,6 +928,7 @@ class pmTablesProxy extends HttpProxyController // is a report table, try populate it $additionalTable->populateReportTable( $table['ADD_TAB_NAME'], pmTable::resolveDbSource( $table['DBS_UID'] ), $table['ADD_TAB_TYPE'], $table['PRO_UID'], $table['ADD_TAB_GRID'], $table['ADD_TAB_UID'] ); } + G::auditLog("ImportTable", $table['ADD_TAB_NAME']." (".$table['ADD_TAB_UID'].") "); break; case '@DATA': $fstName = intval( fread( $fp, 9 ) ); @@ -1104,6 +1114,7 @@ class pmTablesProxy extends HttpProxyController $bytesSaved += fwrite( $fp, $fsData ); //writing the size of xml file $bytesSaved += fwrite( $fp, $SDATA ); //writing the xmlfile } + G::auditLog("ExportTable", $table->ADD_TAB_NAME." (".$table->ADD_TAB_UID.") "); } fclose( $fp ); diff --git a/workflow/engine/data/mssql/insert.sql b/workflow/engine/data/mssql/insert.sql index 5d560c37e..d18f0d8d5 100755 --- a/workflow/engine/data/mssql/insert.sql +++ b/workflow/engine/data/mssql/insert.sql @@ -4770,7 +4770,7 @@ SELECT 'LABEL','ID_PLEASE_SELECT_PHOTO','en','Please select a photo','2014-01-15 UNION ALL SELECT 'LABEL','ID_RESUME','en','Resume','2014-01-15' UNION ALL -SELECT 'LABEL','ID_USER_ID','en','User ID (*)','2014-01-15' +SELECT 'LABEL','ID_USER_ID','en','Username','2014-10-09' UNION ALL SELECT 'LABEL','ID_PHONE','en','Phone','2014-01-15' UNION ALL @@ -5572,7 +5572,7 @@ SELECT 'LABEL','ID_FAILED_DASHBOARD INSTANCE','en','Dashboard Instance registere UNION ALL SELECT 'LABEL','ID_AJAX_COMMUNICATION_FAILED','en','Ajax communication failed','2014-01-15' UNION ALL -SELECT 'LABEL','ID_CHECK_FIELDS_MARK_RED','en','Please check the fields mark in red.','2014-01-15' +SELECT 'LABEL','ID_CHECK_FIELDS_MARK_RED','en','Please check the fields marked in red.','2014-10-06' UNION ALL SELECT 'LABEL','ID_INPUT_ERROR','en','Input Error','2014-01-15' UNION ALL @@ -5840,7 +5840,7 @@ SELECT 'LABEL','ID_LOGIN_WITH_FACEBOOK','en','Login with Facebook!!','2014-01-15 UNION ALL SELECT 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP6','en','xxx','2014-01-15' UNION ALL -SELECT 'LABEL','ID_SIZE_VERY_LARGE_PERMITTED','en','The size is very large as permitted!','2014-09-10' +SELECT 'LABEL','ID_SIZE_VERY_LARGE_PERMITTED','en','The file is too large . Please upload a smaller file.','2014-10-08' UNION ALL SELECT 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP5','en','ProcessMaker uses workspaces to store data. Please enter a valid workspace name and credentials to login.','2014-09-02' UNION ALL @@ -6240,7 +6240,7 @@ SELECT 'LABEL','ID_MSG_ENABLE_HTML_EDITING','en','Warning: Editing the HT UNION ALL SELECT 'LABEL','ID_ALL_CATEGORIES','en','All Categories','2014-01-15' UNION ALL -SELECT 'LABEL','ID_CASES_NOTES_NO_PERMISSIONS','en','You do not have permission to cases notes','2014-01-15' +SELECT 'LABEL','ID_CASES_NOTES_NO_PERMISSIONS','en','You do not have permission to access cases notes','2014-09-30' UNION ALL SELECT 'LABEL','ID_DELETE_DOCUMENT','en','Do you want to delete selected document?','2014-01-15' UNION ALL @@ -6938,7 +6938,7 @@ SELECT 'LABEL','ID_CHOOSE_PROVIDER','en','Please select provider','2014-08-27' UNION ALL SELECT 'LABEL','ID_INDEX','en','Index','2014-09-10' UNION ALL -SELECT 'LABEL','ID_ERROR_JS_NOT_AVAILABLE','en','Your browser does not support javascript or it is disabled, please use a different browser or activate the javascript. Forms won''t work totally because javascript is used.','2014-08-29' +SELECT 'LABEL','ID_ERROR_JS_NOT_AVAILABLE','en','Your browser doesn''t support JavaScript or it may be disabled. Please use a different browser or enable the JavaScript, Dynaforms won''t entirely work because JavaScript is used.','2014-10-09' UNION ALL SELECT 'LABEL','ID_MAXIMUM_SIZE_FILE_REQUIRED','en','The maximum size file, is required!','2014-09-12' UNION ALL @@ -7088,9 +7088,9 @@ SELECT 'LABEL','ID_AUDIT_LOG_ENABLED','en','Audit Log has been enabled','2014-09 UNION ALL SELECT 'LABEL','ID_AUDIT_LOG_DISABLED','en','Audit Log has been disabled','2014-09-19' UNION ALL -SELECT 'LABEL','ID_AUDIT_LOG_DETAILS_1','en','Audit Log details1','2014-09-19' +SELECT 'LABEL','ID_AUDIT_LOG_DETAILS_1','en','When this option is enabled, all changes made in the "ADMIN" tab are registered in a log.','2014-09-30' UNION ALL -SELECT 'LABEL','ID_AUDIT_LOG_DETAILS_2','en','Audit Log details 2','2014-09-19' +SELECT 'LABEL','ID_AUDIT_LOG_DETAILS_2','en','and the user will be able to see those changes in the "Audit Log" option in Logs Menu','2014-10-10' UNION ALL SELECT 'LABEL','ID_PRIVATE','en','Private','2014-09-22' UNION ALL @@ -7103,6 +7103,170 @@ SELECT 'LABEL','ID_LEFT','en','left','2014-09-18' SELECT 'LABEL','ID_CENTER','en','center','2014-09-18' UNION ALL SELECT 'LABEL','ID_RIGHT','en','right','2014-09-18' + UNION ALL +SELECT 'LABEL','ID_LANGUAGE_CANT_DELETE_CURRENTLY','en','The language, which the system is currently using, cannot be deleted.','2014-09-25' + UNION ALL +SELECT 'LABEL','ID_INPUT_DOC_MAX_FILESIZE_REQUIRED','en','Maximum file size parameter is required.','2014-09-30' + UNION ALL +SELECT 'LABEL','ID_AUDIT_LOG_ACTIONS','en','Audit Log Actions','2014-09-30' + UNION ALL +SELECT 'LABEL','ID_RESET_FILTERS','en','Reset Filters','2014-10-07' + UNION ALL +SELECT 'LABEL','ID_INPUT_DB','en','Input','2014-10-08' + UNION ALL +SELECT 'LABEL','ID_TRIGGER_DB','en','Trigger','2014-10-08' + UNION ALL +SELECT 'LABEL','ID_IP','en','IP Client','2014-10-08' + UNION ALL +SELECT 'LABEL','ID_OUTPUT_DB','en','Output','2014-10-08' + UNION ALL +SELECT 'LABEL','ID_ATTACHED_DB','en','Attached','2014-10-08' + UNION ALL +SELECT 'LABEL','ID_DERIVATION_DB','en','Derivation','2014-10-08' + UNION ALL +SELECT 'LABEL','ID_OPEN_DYNAFORM_TAB','en','Open the Dynaform in a new tab','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ENTERPRISE_FEATURES','en','Enterprise features','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_USER','en','Create User','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_USER','en','Update User','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_USER','en','Delete User','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ENABLE_USER','en','Enable User','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DISABLE_USER','en','Disable User','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ASSIGN_AUTHENTICATION_SOURCE','en','Assign Authentication Source','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ASSIGN_USER_TO_GROUP','en','Assign Users To Group','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_AUTH_SOURCE','en','Create Authentication Source','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_UPDATE_AUTH_SOURCE','en','Update Authentication Source','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_DELETE_AUTH_SOURCE','en','Delete Authentication Source','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_UPDATE_ROLE','en','Update Role','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_ROLE','en','Delete Role','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ASSIGN_USER_TO_ROLE','en','Assign Users To Role','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_USER_TO_ROLE','en','Delete Users To Role','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ADD_PERMISSION_TO_ROLE','en','Add Permission To Role','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_PERMISSION_TO_ROLE','en','Delete Permission To Role','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_SKIN','en','Create Skin','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_IMPORT_SKIN','en','Import Skin','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_EXPORT_SKIN','en','Export Skin','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_SKIN','en','Delete Skin','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_GROUP','en','Update Group','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_CATEGORY','en','Create Category','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_CATEGORY','en','Update Category','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_CATEGORY','en','Delete Category','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_BUILD_CACHE','en','Build Cache','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CLEAR_CRON','en','Clear Cron','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_REPLACE_LOGO','en','Replace Logo','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_UPDATE_LOGIN_SETTINGS','en','Update Login Settings','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DISABLE_HEART_BEAT','en','Disable Heart Beat','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_PMTABLE','en','Create PM Table','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_PMTABLE','en','Update PM Table','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_PMTABLE','en','Delete PM Table','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ADD_DATA_PMTABLE','en','Add Data to PM table','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_DATA_PMTABLE','en','Update Data from PM Table','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_DATA_PMTABLE','en','Delete Data from PM Table','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_IMPORT_TABLE','en','Import Table','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_EXPORT_TABLE','en','Export Table','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_CALENDAR','en','Create Calendar','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_CALENDAR','en','Update Calendar','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_CALENDAR','en','Delete Calendar','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_DASHLET_INSTANCE','en','Create Dashlet Instance','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_DASHLET_INSTANCE','en','Update Dashlet Instance','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_DASHLET_INSTANCE','en','Delete Dashlet Instance','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_DEPARTAMENT','en','Create Departament','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_SUB_DEPARTAMENT','en','Create Sub Departament','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_DEPARTAMENT','en','Update Departament','2014-10-10' + ; +INSERT INTO [TRANSLATION] ([TRN_CATEGORY],[TRN_ID],[TRN_LANG],[TRN_VALUE],[TRN_UPDATE_DATE]) + +SELECT 'LABEL','ID_UPDATE_SUB_DEPARTAMENT','en','Update Sub Departament','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_DEPARTAMENT','en','Delete Departament','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ASSIGN_MANAGER_TO_DEPARTAMENT','en','Assign Manager To Departament','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_ASSIGN_USER_TO_DEPARTAMENT','en','Assign Users To Departament','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_REMOVE_USERS_FROM_DEPARTAMENT','en','Remove Users From Departament','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPLOAD_LANGUAGE','en','Upload Language','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_EXPORT_LANGUAGE','en','Export Language','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_LAGUAGE','en','Delete Language','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPLOAD_SYSTEM_SETTINGS','en','Upload System Settings','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPDATE_EMAIL_SETTINGS','en','Update Email Settings','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_EMAIL_SETTINGS','en','Create Email Settings','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_UPLOAD_LOGO','en','Upload Logo','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DELETE_LOGO','en','Delete Logo','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_INSTALL_PLUGIN','en','Install Plugin','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_SET_COLUMNS','en','Set Columns','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_DISABLE_AUDIT_LOG','en','Disable Audit Log','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_REMOVE_PLUGIN','en','Remove Plugin','2014-10-10' + UNION ALL +SELECT 'LABEL','ID_CREATE_ROLE','en','Create New Role','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_CREATE_GROUP','en','Create New Group','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_DELETE_GROUP','en','Remove Group','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_DISABLE_PLUGIN','en','Disable Plugin','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_ENABLE_PLUGIN','en','Enable Plugin','2014-10-13' + UNION ALL +SELECT 'LABEL','ID_UPDATE_ENVIRONMENT_SETTINGS','en','Update Environment Settings','2014-10-13' ; INSERT INTO ISO_LOCATION ([IC_UID],[IL_UID],[IL_NAME],[IL_NORMAL_NAME],[IS_UID]) diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 2d9fb9868..86a8eb077 100755 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -3100,7 +3100,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_PROFILE','en','Profile','2014-01-15') , ( 'LABEL','ID_PLEASE_SELECT_PHOTO','en','Please select a photo','2014-01-15') , ( 'LABEL','ID_RESUME','en','Resume','2014-01-15') , -( 'LABEL','ID_USER_ID','en','User ID (*)','2014-01-15') , +( 'LABEL','ID_USER_ID','en','Username','2014-10-09') , ( 'LABEL','ID_PHONE','en','Phone','2014-01-15') , ( 'LABEL','ID_NEW_PASSWORD','en','New Password','2014-01-15') , ( 'LABEL','ID_CONFIRM_PASSWORD','en','Confirm Password','2014-01-15') , @@ -3506,7 +3506,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_INVALID_DATA','en','Invalid data','2014-01-15') , ( 'LABEL','ID_FAILED_DASHBOARD INSTANCE','en','Dashboard Instance registered failed','2014-01-15') , ( 'LABEL','ID_AJAX_COMMUNICATION_FAILED','en','Ajax communication failed','2014-01-15') , -( 'LABEL','ID_CHECK_FIELDS_MARK_RED','en','Please check the fields mark in red.','2014-01-15') , +( 'LABEL','ID_CHECK_FIELDS_MARK_RED','en','Please check the fields marked in red.','2014-10-06') , ( 'LABEL','ID_INPUT_ERROR','en','Input Error','2014-01-15') , ( 'LABEL','ID_INVALID_APPLICATION_NUMBER','en','You have set a invalid Application Number','2014-01-15') , ( 'LABEL','ID_3DAYSMINIMUM','en','3 days at least','2014-01-15') , @@ -3642,7 +3642,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_COPYRIGHT','en','Copyright © 2003-2011 Colosa, Inc. All rights reserved.','2014-01-15') , ( 'LABEL','ID_LOGIN_WITH_FACEBOOK','en','Login with Facebook!!','2014-01-15') , ( 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP6','en','xxx','2014-01-15') , -( 'LABEL','ID_SIZE_VERY_LARGE_PERMITTED','en','The size is very large as permitted!','2014-09-10') , +( 'LABEL','ID_SIZE_VERY_LARGE_PERMITTED','en','The file is too large . Please upload a smaller file.','2014-10-08') , ( 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP5','en','ProcessMaker uses workspaces to store data. Please enter a valid workspace name and credentials to login.','2014-09-02') , ( 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP4_2','en','If you are installing ProcessMaker on a remote web server, you will need to get this information from your Database Server.','2014-01-15') , ( 'LABEL','ID_PROCESSMAKER_REQUIREMENTS_DESCRIPTION_STEP4_1','en','ProcessMaker stores all of its data in a database. This screen gives the installation program the information needed to create this database.','2014-01-15') , @@ -3844,7 +3844,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_REFRESH_TIME_SECONDS','en','Refresh Time (seconds)','2014-01-15') , ( 'LABEL','ID_MSG_ENABLE_HTML_EDITING','en','Warning: Editing the HTML prevents fields from being added or moved, so only edit the HTML after creating all the fields. Do you like to continue anyway?','2014-01-15') , ( 'LABEL','ID_ALL_CATEGORIES','en','All Categories','2014-01-15') , -( 'LABEL','ID_CASES_NOTES_NO_PERMISSIONS','en','You do not have permission to cases notes','2014-01-15') , +( 'LABEL','ID_CASES_NOTES_NO_PERMISSIONS','en','You do not have permission to access cases notes','2014-09-30') , ( 'LABEL','ID_DELETE_DOCUMENT','en','Do you want to delete selected document?','2014-01-15') , ( 'LABEL','ID_CRON_ACTIONS_LOG','en','Cron Actions Log','2014-01-15') , ( 'LABEL','ID_AUTH_SOURCE_MISSING','en','The plugin that is related to this authentication source was removed or disabled, please consult to your system administrator.','2014-01-15') ; @@ -4198,7 +4198,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_TINY_SYSTEM_VARIABLE','en','System Variable','2014-08-27') , ( 'LABEL','ID_CHOOSE_PROVIDER','en','Please select provider','2014-08-27') , ( 'LABEL','ID_INDEX','en','Index','2014-09-10') , -( 'LABEL','ID_ERROR_JS_NOT_AVAILABLE','en','Your browser does not support javascript or it is disabled, please use a different browser or activate the javascript. Forms won''t work totally because javascript is used.','2014-08-29') , +( 'LABEL','ID_ERROR_JS_NOT_AVAILABLE','en','Your browser doesn''t support JavaScript or it may be disabled. Please use a different browser or enable the JavaScript, Dynaforms won''t entirely work because JavaScript is used.','2014-10-09') , ( 'LABEL','ID_MAXIMUM_SIZE_FILE_REQUIRED','en','The maximum size file, is required!','2014-09-12') , ( 'LABEL','ID_BEFORE_UPDATE','en','Before Upgrade','2014-09-18') , ( 'LABEL','ID_WAIT_INSTALLING_PLUGIN','en','Please wait while installing the plugin...','2014-09-18') , @@ -4274,14 +4274,97 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_ENABLE_AUDIT_LOG','en','Enable Audit Log','2014-09-19') , ( 'LABEL','ID_AUDIT_LOG_ENABLED','en','Audit Log has been enabled','2014-09-19') , ( 'LABEL','ID_AUDIT_LOG_DISABLED','en','Audit Log has been disabled','2014-09-19') , -( 'LABEL','ID_AUDIT_LOG_DETAILS_1','en','Audit Log details1','2014-09-19') , -( 'LABEL','ID_AUDIT_LOG_DETAILS_2','en','Audit Log details 2','2014-09-19') , +( 'LABEL','ID_AUDIT_LOG_DETAILS_1','en','When this option is enabled, all changes made in the "ADMIN" tab are registered in a log.','2014-09-30') , +( 'LABEL','ID_AUDIT_LOG_DETAILS_2','en','and the user will be able to see those changes in the "Audit Log" option in Logs Menu','2014-10-10') , ( 'LABEL','ID_PRIVATE','en','Private','2014-09-22') , ( 'LABEL','ID_CASES_LIST','en','Cases Lists','2014-09-18') , ( 'LABEL','ID_MENU_NAME','en','Enterprise Plugins Manager','2014-09-18') , ( 'LABEL','ID_LEFT','en','left','2014-09-18') , ( 'LABEL','ID_CENTER','en','center','2014-09-18') , -( 'LABEL','ID_RIGHT','en','right','2014-09-18') ; +( 'LABEL','ID_RIGHT','en','right','2014-09-18') , +( 'LABEL','ID_LANGUAGE_CANT_DELETE_CURRENTLY','en','The language, which the system is currently using, cannot be deleted.','2014-09-25') , +( 'LABEL','ID_INPUT_DOC_MAX_FILESIZE_REQUIRED','en','Maximum file size parameter is required.','2014-09-30') , +( 'LABEL','ID_AUDIT_LOG_ACTIONS','en','Audit Log Actions','2014-09-30') , +( 'LABEL','ID_RESET_FILTERS','en','Reset Filters','2014-10-07') , +( 'LABEL','ID_INPUT_DB','en','Input','2014-10-08') , +( 'LABEL','ID_TRIGGER_DB','en','Trigger','2014-10-08') , +( 'LABEL','ID_IP','en','IP Client','2014-10-08') , +( 'LABEL','ID_OUTPUT_DB','en','Output','2014-10-08') , +( 'LABEL','ID_ATTACHED_DB','en','Attached','2014-10-08') , +( 'LABEL','ID_DERIVATION_DB','en','Derivation','2014-10-08') , +( 'LABEL','ID_OPEN_DYNAFORM_TAB','en','Open the Dynaform in a new tab','2014-10-10') , +( 'LABEL','ID_ENTERPRISE_FEATURES','en','Enterprise features','2014-10-10') , +( 'LABEL','ID_CREATE_USER','en','Create User','2014-10-10') , +( 'LABEL','ID_UPDATE_USER','en','Update User','2014-10-10') , +( 'LABEL','ID_DELETE_USER','en','Delete User','2014-10-10') , +( 'LABEL','ID_ENABLE_USER','en','Enable User','2014-10-10') , +( 'LABEL','ID_DISABLE_USER','en','Disable User','2014-10-10') , +( 'LABEL','ID_ASSIGN_AUTHENTICATION_SOURCE','en','Assign Authentication Source','2014-10-10') , +( 'LABEL','ID_ASSIGN_USER_TO_GROUP','en','Assign Users To Group','2014-10-10') , +( 'LABEL','ID_CREATE_AUTH_SOURCE','en','Create Authentication Source','2014-10-13') , +( 'LABEL','ID_UPDATE_AUTH_SOURCE','en','Update Authentication Source','2014-10-13') , +( 'LABEL','ID_DELETE_AUTH_SOURCE','en','Delete Authentication Source','2014-10-13') , +( 'LABEL','ID_UPDATE_ROLE','en','Update Role','2014-10-10') , +( 'LABEL','ID_DELETE_ROLE','en','Delete Role','2014-10-10') , +( 'LABEL','ID_ASSIGN_USER_TO_ROLE','en','Assign Users To Role','2014-10-10') , +( 'LABEL','ID_DELETE_USER_TO_ROLE','en','Delete Users To Role','2014-10-10') , +( 'LABEL','ID_ADD_PERMISSION_TO_ROLE','en','Add Permission To Role','2014-10-10') , +( 'LABEL','ID_DELETE_PERMISSION_TO_ROLE','en','Delete Permission To Role','2014-10-10') , +( 'LABEL','ID_CREATE_SKIN','en','Create Skin','2014-10-10') , +( 'LABEL','ID_IMPORT_SKIN','en','Import Skin','2014-10-10') , +( 'LABEL','ID_EXPORT_SKIN','en','Export Skin','2014-10-10') , +( 'LABEL','ID_DELETE_SKIN','en','Delete Skin','2014-10-10') , +( 'LABEL','ID_UPDATE_GROUP','en','Update Group','2014-10-10') , +( 'LABEL','ID_CREATE_CATEGORY','en','Create Category','2014-10-10') , +( 'LABEL','ID_UPDATE_CATEGORY','en','Update Category','2014-10-10') , +( 'LABEL','ID_DELETE_CATEGORY','en','Delete Category','2014-10-10') , +( 'LABEL','ID_BUILD_CACHE','en','Build Cache','2014-10-10') , +( 'LABEL','ID_CLEAR_CRON','en','Clear Cron','2014-10-10') , +( 'LABEL','ID_REPLACE_LOGO','en','Replace Logo','2014-10-13') , +( 'LABEL','ID_UPDATE_LOGIN_SETTINGS','en','Update Login Settings','2014-10-10') , +( 'LABEL','ID_DISABLE_HEART_BEAT','en','Disable Heart Beat','2014-10-10') , +( 'LABEL','ID_CREATE_PMTABLE','en','Create PM Table','2014-10-10') , +( 'LABEL','ID_UPDATE_PMTABLE','en','Update PM Table','2014-10-10') , +( 'LABEL','ID_DELETE_PMTABLE','en','Delete PM Table','2014-10-10') , +( 'LABEL','ID_ADD_DATA_PMTABLE','en','Add Data to PM table','2014-10-10') , +( 'LABEL','ID_UPDATE_DATA_PMTABLE','en','Update Data from PM Table','2014-10-10') , +( 'LABEL','ID_DELETE_DATA_PMTABLE','en','Delete Data from PM Table','2014-10-10') , +( 'LABEL','ID_IMPORT_TABLE','en','Import Table','2014-10-10') , +( 'LABEL','ID_EXPORT_TABLE','en','Export Table','2014-10-10') , +( 'LABEL','ID_CREATE_CALENDAR','en','Create Calendar','2014-10-10') , +( 'LABEL','ID_UPDATE_CALENDAR','en','Update Calendar','2014-10-10') , +( 'LABEL','ID_DELETE_CALENDAR','en','Delete Calendar','2014-10-10') , +( 'LABEL','ID_CREATE_DASHLET_INSTANCE','en','Create Dashlet Instance','2014-10-10') , +( 'LABEL','ID_UPDATE_DASHLET_INSTANCE','en','Update Dashlet Instance','2014-10-10') , +( 'LABEL','ID_DELETE_DASHLET_INSTANCE','en','Delete Dashlet Instance','2014-10-10') , +( 'LABEL','ID_CREATE_DEPARTAMENT','en','Create Departament','2014-10-10') , +( 'LABEL','ID_CREATE_SUB_DEPARTAMENT','en','Create Sub Departament','2014-10-10') , +( 'LABEL','ID_UPDATE_DEPARTAMENT','en','Update Departament','2014-10-10') ; +INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ) VALUES + +( 'LABEL','ID_UPDATE_SUB_DEPARTAMENT','en','Update Sub Departament','2014-10-10') , +( 'LABEL','ID_DELETE_DEPARTAMENT','en','Delete Departament','2014-10-10') , +( 'LABEL','ID_ASSIGN_MANAGER_TO_DEPARTAMENT','en','Assign Manager To Departament','2014-10-10') , +( 'LABEL','ID_ASSIGN_USER_TO_DEPARTAMENT','en','Assign Users To Departament','2014-10-10') , +( 'LABEL','ID_REMOVE_USERS_FROM_DEPARTAMENT','en','Remove Users From Departament','2014-10-10') , +( 'LABEL','ID_UPLOAD_LANGUAGE','en','Upload Language','2014-10-10') , +( 'LABEL','ID_EXPORT_LANGUAGE','en','Export Language','2014-10-10') , +( 'LABEL','ID_DELETE_LAGUAGE','en','Delete Language','2014-10-10') , +( 'LABEL','ID_UPLOAD_SYSTEM_SETTINGS','en','Upload System Settings','2014-10-10') , +( 'LABEL','ID_UPDATE_EMAIL_SETTINGS','en','Update Email Settings','2014-10-10') , +( 'LABEL','ID_CREATE_EMAIL_SETTINGS','en','Create Email Settings','2014-10-10') , +( 'LABEL','ID_UPLOAD_LOGO','en','Upload Logo','2014-10-10') , +( 'LABEL','ID_DELETE_LOGO','en','Delete Logo','2014-10-10') , +( 'LABEL','ID_INSTALL_PLUGIN','en','Install Plugin','2014-10-10') , +( 'LABEL','ID_SET_COLUMNS','en','Set Columns','2014-10-10') , +( 'LABEL','ID_DISABLE_AUDIT_LOG','en','Disable Audit Log','2014-10-10') , +( 'LABEL','ID_REMOVE_PLUGIN','en','Remove Plugin','2014-10-10') , +( 'LABEL','ID_CREATE_ROLE','en','Create New Role','2014-10-13') , +( 'LABEL','ID_CREATE_GROUP','en','Create New Group','2014-10-13') , +( 'LABEL','ID_DELETE_GROUP','en','Remove Group','2014-10-13') , +( 'LABEL','ID_DISABLE_PLUGIN','en','Disable Plugin','2014-10-13') , +( 'LABEL','ID_ENABLE_PLUGIN','en','Enable Plugin','2014-10-13') , +( 'LABEL','ID_UPDATE_ENVIRONMENT_SETTINGS','en','Update Environment Settings','2014-10-13') ; INSERT INTO ISO_LOCATION (IC_UID,IL_UID,IL_NAME,IL_NORMAL_NAME,IS_UID) VALUES ('AD','','',' ','') , diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index a44a36510..b044eec61 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2119,7 +2119,7 @@ CREATE TABLE `ADDONS_STORE` `STORE_TYPE` VARCHAR(255) NOT NULL, `STORE_LAST_UPDATED` DATETIME, PRIMARY KEY (`STORE_ID`) -)ENGINE=MyISAM ; +)ENGINE=InnoDB ; #----------------------------------------------------------------------------- #-- ADDONS_MANAGER @@ -2147,7 +2147,7 @@ CREATE TABLE `ADDONS_MANAGER` `ADDON_DOWNLOAD_PROGRESS` FLOAT, `ADDON_DOWNLOAD_MD5` VARCHAR(32), PRIMARY KEY (`ADDON_ID`,`STORE_ID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Addons manager'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Addons manager'; #----------------------------------------------------------------------------- @@ -2167,4 +2167,4 @@ CREATE TABLE IF NOT EXISTS `LICENSE_MANAGER` ( `LICENSE_WORKSPACE` varchar(32) NOT NULL DEFAULT '0', `LICENSE_TYPE` varchar(32) NOT NULL DEFAULT '0', PRIMARY KEY (`LICENSE_UID`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Licenses Manager'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Licenses Manager'; diff --git a/workflow/engine/menus/setup.php b/workflow/engine/menus/setup.php index c107afcbf..1b8c48b4e 100755 --- a/workflow/engine/menus/setup.php +++ b/workflow/engine/menus/setup.php @@ -26,6 +26,10 @@ global $G_TMP_MENU; global $RBAC; $partnerFlag = (defined('PARTNER_FLAG')) ? PARTNER_FLAG : false; +$oServerConf = & serverConf::getSingleton(); +$sAudit = $oServerConf->getAuditLogProperty( 'AL_OPTION', SYS_SYS ); +$licensedFeatures = & PMLicensedFeatures::getSingleton(); + if ($RBAC->userCanAccess('PM_SETUP') == 1 ) { //settings options // $G_TMP_MENU->AddIdRawOption('LOGO', 'uplogo', G::LoadTranslation('ID_LOGO'), 'icon-pmlogo.png', '', 'settings'); @@ -95,12 +99,18 @@ if ($RBAC->userCanAccess('PM_SETUP') == 1) { $G_TMP_MENU->AddIdRawOption('LOG_CASE_SCHEDULER', '../cases/cases_Scheduler_Log', G::LoadTranslation('ID_CASE_SCHEDULER'), "icon-logs-list.png",'', 'logs'); $G_TMP_MENU->AddIdRawOption("CRON", "../setup/cron", G::LoadTranslation("ID_CRON_ACTIONS"), null, null, "logs"); $G_TMP_MENU->AddIdRawOption('EMAILS', '../mails/emailList', ucfirst (strtolower ( G::LoadTranslation('ID_EMAILS'))), '', '', 'logs'); + if (isset($sAudit) && $sAudit != false && $licensedFeatures->verifyfeature('vtSeHNhT0JnSmo1bTluUVlTYUxUbUFSVStEeXVqc1pEUG5EeXc0MGd2Q3ErYz0=')) { + $G_TMP_MENU->AddIdRawOption('AUDIT_LOG', '../setup/auditLog', ucfirst (G::LoadTranslation('ID_AUDITLOG_DISPLAY')), '', '', 'logs'); + } } if ($RBAC->userCanAccess("PM_SETUP") == 1) { $G_TMP_MENU->AddIdRawOption("PM_REQUIREMENTS", "../setup/systemInfo", G::LoadTranslation("ID_PROCESSMAKER_REQUIREMENTS_CHECK"), "", "", "settings"); $G_TMP_MENU->AddIdRawOption("PHP_INFO", "../setup/systemInfo?option=php", G::LoadTranslation("ID_PHP_INFO"), "", "", "settings"); //$G_TMP_MENU->AddIdRawOption("PHP_MAINTENANCE", "../admin/maintenance", 'Maintenance', "", "", "settings"); + if ($licensedFeatures->verifyfeature('vtSeHNhT0JnSmo1bTluUVlTYUxUbUFSVStEeXVqc1pEUG5EeXc0MGd2Q3ErYz0=')) { + $G_TMP_MENU->AddIdRawOption("AUDIT_LOG", "auditLogConfig", G::LoadTranslation("ID_AUDITLOG_DISPLAY"), "", "", "settings"); + } } require_once 'classes/class.pmLicenseManager.php'; diff --git a/workflow/engine/methods/cases/caseMessageHistory_Ajax.php b/workflow/engine/methods/cases/caseMessageHistory_Ajax.php index 94055d1dc..4e01a467f 100755 --- a/workflow/engine/methods/cases/caseMessageHistory_Ajax.php +++ b/workflow/engine/methods/cases/caseMessageHistory_Ajax.php @@ -22,6 +22,11 @@ * Coral Gables, FL, 33134, USA, or email info@colosa.com. */ +$arrayToTranslation = array( + "TRIGGER" => G::LoadTranslation("ID_TRIGGER_DB"), + "DERIVATION" => G::LoadTranslation("ID_DERIVATION_DB") +); + $actionAjax = isset( $_REQUEST['actionAjax'] ) ? $_REQUEST['actionAjax'] : null; if ($actionAjax == 'messageHistoryGridList_JXP') { @@ -110,6 +115,8 @@ if ($actionAjax == 'messageHistoryGridList_JXP') { $r->data = $aProcesses; $r->totalCount = $totalCount; + $r->data[0]["APP_MSG_TYPE"] = (array_key_exists($r->data[0]["APP_MSG_TYPE"], $arrayToTranslation))? $arrayToTranslation[$r->data[0]["APP_MSG_TYPE"]] : $r->data[0]["APP_MSG_TYPE"]; + echo G::json_encode( $r ); } if ($actionAjax == 'showHistoryMessage') { diff --git a/workflow/engine/methods/cases/cases_Ajax.php b/workflow/engine/methods/cases/cases_Ajax.php index 3f8aa3bc3..d97fdc197 100755 --- a/workflow/engine/methods/cases/cases_Ajax.php +++ b/workflow/engine/methods/cases/cases_Ajax.php @@ -533,6 +533,12 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { G::LoadClass( "BasePeer" ); global $G_PUBLISH; + $arrayToTranslation = array( + "INPUT" => G::LoadTranslation("ID_INPUT_DB"), + "OUTPUT" => G::LoadTranslation("ID_OUTPUT_DB"), + "ATTACHED" => G::LoadTranslation("ID_ATTACHED_DB") + ); + $oCase = new Cases(); $aProcesses = Array (); $G_PUBLISH = new Publisher(); @@ -551,6 +557,7 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { for ($j = 0; $j < $rs->getRecordCount(); $j ++) { $result = $rs->getRow(); + $result["TYPE"] = (array_key_exists($result["TYPE"], $arrayToTranslation))? $arrayToTranslation[$result["TYPE"]] : $result["TYPE"]; $aProcesses[] = $result; $rs->next(); $totalCount ++; @@ -929,6 +936,17 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { $Fields['APP_DOC_UID'] = $_POST['appDocId']; $Fields['actionType'] = $_POST['actionType']; $Fields['docVersion'] = $_POST['docVersion']; + $oInputDocument = new InputDocument(); + $InpDocData = $oInputDocument->load( $Fields['DOC_UID'] ); + + $inpDocMaxFilesize = $InpDocData["INP_DOC_MAX_FILESIZE"]; + $inpDocMaxFilesizeUnit = $InpDocData["INP_DOC_MAX_FILESIZE_UNIT"]; + $inpDocMaxFilesize = $inpDocMaxFilesize * (($inpDocMaxFilesizeUnit == "MB")? 1024 *1024 : 1024); //Bytes + + $Fields["INP_DOC_MAX_FILESIZE"] = $inpDocMaxFilesize; + $Fields["INP_DOC_MAX_FILESIZE_LABEL"] = ($inpDocMaxFilesize > 0)? "[" . $InpDocData["INP_DOC_MAX_FILESIZE"] . " " . $InpDocData["INP_DOC_MAX_FILESIZE_UNIT"] . "]" : ""; + $Fields['fileTypes'] = $InpDocData['INP_DOC_TYPE_FILE']; + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'cases/cases_AttachInputDocumentGeneral', '', $Fields, 'cases_SupervisorSaveDocument?UID=' . $_POST['docID'] . '&APP_UID=' . $_POST['appDocId'] ); G::RenderPage( 'publish', 'raw' ); break; diff --git a/workflow/engine/methods/cases/cases_SaveDataSupervisor.php b/workflow/engine/methods/cases/cases_SaveDataSupervisor.php index 54e42c063..29d6180c9 100755 --- a/workflow/engine/methods/cases/cases_SaveDataSupervisor.php +++ b/workflow/engine/methods/cases/cases_SaveDataSupervisor.php @@ -49,6 +49,149 @@ $aData['APP_STATUS'] = $Fields['APP_STATUS']; $oCase->updateCase( $_SESSION['APPLICATION'], $aData ); G::SendTemporalMessage( 'ID_SAVED_SUCCESSFULLY', 'info' ); +//Save files +if (isset( $_FILES["form"]["name"] ) && count( $_FILES["form"]["name"] ) > 0) { + $arrayField = array (); + $arrayFileName = array (); + $arrayFileTmpName = array (); + $arrayFileError = array (); + $i = 0; + + foreach ($_FILES["form"]["name"] as $fieldIndex => $fieldValue) { + if (is_array( $fieldValue )) { + foreach ($fieldValue as $index => $value) { + if (is_array( $value )) { + foreach ($value as $grdFieldIndex => $grdFieldValue) { + $arrayField[$i]["grdName"] = $fieldIndex; + $arrayField[$i]["grdFieldName"] = $grdFieldIndex; + $arrayField[$i]["index"] = $index; + + $arrayFileName[$i] = $_FILES["form"]["name"][$fieldIndex][$index][$grdFieldIndex]; + $arrayFileTmpName[$i] = $_FILES["form"]["tmp_name"][$fieldIndex][$index][$grdFieldIndex]; + $arrayFileError[$i] = $_FILES["form"]["error"][$fieldIndex][$index][$grdFieldIndex]; + $i = $i + 1; + } + } + } + } else { + $arrayField[$i] = $fieldIndex; + + $arrayFileName[$i] = $_FILES["form"]["name"][$fieldIndex]; + $arrayFileTmpName[$i] = $_FILES["form"]["tmp_name"][$fieldIndex]; + $arrayFileError[$i] = $_FILES["form"]["error"][$fieldIndex]; + $i = $i + 1; + } + } + if (count( $arrayField ) > 0) { + for ($i = 0; $i <= count( $arrayField ) - 1; $i ++) { + if ($arrayFileError[$i] == 0) { + $indocUid = null; + $fieldName = null; + $fileSizeByField = 0; + + if (is_array( $arrayField[$i] )) { + if (isset( $_POST["INPUTS"][$arrayField[$i]["grdName"]][$arrayField[$i]["grdFieldName"]] ) && ! empty( $_POST["INPUTS"][$arrayField[$i]["grdName"]][$arrayField[$i]["grdFieldName"]] )) { + $indocUid = $_POST["INPUTS"][$arrayField[$i]["grdName"]][$arrayField[$i]["grdFieldName"]]; + } + + $fieldName = $arrayField[$i]["grdName"] . "_" . $arrayField[$i]["index"] . "_" . $arrayField[$i]["grdFieldName"]; + + if (isset($_FILES["form"]["size"][$arrayField[$i]["grdName"]][$arrayField[$i]["index"]][$arrayField[$i]["grdFieldName"]])) { + $fileSizeByField = $_FILES["form"]["size"][$arrayField[$i]["grdName"]][$arrayField[$i]["index"]][$arrayField[$i]["grdFieldName"]]; + } + } else { + if (isset( $_POST["INPUTS"][$arrayField[$i]] ) && ! empty( $_POST["INPUTS"][$arrayField[$i]] )) { + $indocUid = $_POST["INPUTS"][$arrayField[$i]]; + } + + $fieldName = $arrayField[$i]; + + if (isset($_FILES["form"]["size"][$fieldName])) { + $fileSizeByField = $_FILES["form"]["size"][$fieldName]; + } + } + + if ($indocUid != null) { + //require_once ("classes/model/AppFolder.php"); + //require_once ("classes/model/InputDocument.php"); + + $oInputDocument = new InputDocument(); + $aID = $oInputDocument->load( $indocUid ); + + //Get the Custom Folder ID (create if necessary) + $oFolder = new AppFolder(); + + //***Validating the file allowed extensions*** + $res = G::verifyInputDocExtension($aID['INP_DOC_TYPE_FILE'], $arrayFileName[$i], $arrayFileTmpName[$i]); + if($res->status == 0){ + $message = $res->message; + G::SendMessageText( $message, "ERROR" ); + $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + die(); + } + + //--- Validate Filesize of $_FILE + $inpDocMaxFilesize = $aID["INP_DOC_MAX_FILESIZE"]; + $inpDocMaxFilesizeUnit = $aID["INP_DOC_MAX_FILESIZE_UNIT"]; + + $inpDocMaxFilesize = $inpDocMaxFilesize * (($inpDocMaxFilesizeUnit == "MB")? 1024 *1024 : 1024); //Bytes + + if ($inpDocMaxFilesize > 0 && $fileSizeByField > 0) { + if ($fileSizeByField > $inpDocMaxFilesize) { + G::SendMessageText(G::LoadTranslation("ID_SIZE_VERY_LARGE_PERMITTED"), "ERROR"); + $arrayAux1 = explode("sys" . SYS_SYS, $_SERVER["HTTP_REFERER"]); + G::header("location: /sys" . SYS_SYS . $arrayAux1[1]); + exit(0); + } + } + + $aFields = array ("APP_UID" => $_SESSION["APPLICATION"],"DEL_INDEX" => $_SESSION["INDEX"],"USR_UID" => $_SESSION["USER_LOGGED"],"DOC_UID" => $indocUid,"APP_DOC_TYPE" => "INPUT","APP_DOC_CREATE_DATE" => date( "Y-m-d H:i:s" ),"APP_DOC_COMMENT" => "","APP_DOC_TITLE" => "","APP_DOC_FILENAME" => $arrayFileName[$i],"FOLDER_UID" => $oFolder->createFromPath( $aID["INP_DOC_DESTINATION_PATH"] ),"APP_DOC_TAGS" => $oFolder->parseTags( $aID["INP_DOC_TAGS"] ),"APP_DOC_FIELDNAME" => $fieldName); + } else { + $aFields = array ("APP_UID" => $_SESSION["APPLICATION"],"DEL_INDEX" => $_SESSION["INDEX"],"USR_UID" => $_SESSION["USER_LOGGED"],"DOC_UID" => - 1,"APP_DOC_TYPE" => "ATTACHED","APP_DOC_CREATE_DATE" => date( "Y-m-d H:i:s" ),"APP_DOC_COMMENT" => "","APP_DOC_TITLE" => "","APP_DOC_FILENAME" => $arrayFileName[$i],"APP_DOC_FIELDNAME" => $fieldName); + } + + $oAppDocument = new AppDocument(); + $oAppDocument->create( $aFields ); + + $iDocVersion = $oAppDocument->getDocVersion(); + $sAppDocUid = $oAppDocument->getAppDocUid(); + $aInfo = pathinfo( $oAppDocument->getAppDocFilename() ); + $sExtension = ((isset( $aInfo["extension"] )) ? $aInfo["extension"] : ""); + $pathUID = G::getPathFromUID($_SESSION["APPLICATION"]); + $sPathName = PATH_DOCUMENT . $pathUID . PATH_SEP; + $sFileName = $sAppDocUid . "_" . $iDocVersion . "." . $sExtension; + G::uploadFile( $arrayFileTmpName[$i], $sPathName, $sFileName ); + + //Plugin Hook PM_UPLOAD_DOCUMENT for upload document + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + + if ($oPluginRegistry->existsTrigger( PM_UPLOAD_DOCUMENT ) && class_exists( "uploadDocumentData" )) { + $triggerDetail = $oPluginRegistry->getTriggerInfo( PM_UPLOAD_DOCUMENT ); + $documentData = new uploadDocumentData( $_SESSION["APPLICATION"], $_SESSION["USER_LOGGED"], $sPathName . $sFileName, $aFields["APP_DOC_FILENAME"], $sAppDocUid, $iDocVersion ); + $uploadReturn = $oPluginRegistry->executeTriggers( PM_UPLOAD_DOCUMENT, $documentData ); + + if ($uploadReturn) { + $aFields["APP_DOC_PLUGIN"] = $triggerDetail->sNamespace; + + if (! isset( $aFields["APP_DOC_UID"] )) { + $aFields["APP_DOC_UID"] = $sAppDocUid; + } + + if (! isset( $aFields["DOC_VERSION"] )) { + $aFields["DOC_VERSION"] = $iDocVersion; + } + + $oAppDocument->update( $aFields ); + + unlink( $sPathName . $sFileName ); + } + } + } + } + } +} + //go to the next step $aNextStep = $oCase->getNextSupervisorStep( $_SESSION['PROCESS'], $_SESSION['STEP_POSITION'] ); $_SESSION['STEP_POSITION'] = $aNextStep['POSITION']; diff --git a/workflow/engine/methods/cases/cases_Scheduler_Save.php b/workflow/engine/methods/cases/cases_Scheduler_Save.php index a6b36e3f4..9a296b527 100755 --- a/workflow/engine/methods/cases/cases_Scheduler_Save.php +++ b/workflow/engine/methods/cases/cases_Scheduler_Save.php @@ -49,7 +49,7 @@ try { $aData['SCH_UID'] = G::generateUniqueID(); $aData['SCH_NAME'] = $_POST['form']['SCH_NAME']; $aData['SCH_DEL_USER_NAME'] = $_POST['form']['SCH_USER_NAME']; - $aData['SCH_DEL_USER_PASS'] = md5( $_POST['form']['SCH_USER_PASSWORD'] ); + $aData['SCH_DEL_USER_PASS'] = Bootstrap::hashPassword($_POST['form']['SCH_USER_PASSWORD']); $aData['SCH_DEL_USER_UID'] = $_POST['form']['SCH_USER_UID']; $aData['PRO_UID'] = $_POST['form']['PRO_UID']; $aData['TAS_UID'] = $_POST['form']['TAS_UID']; diff --git a/workflow/engine/methods/cases/cases_Scheduler_Update.php b/workflow/engine/methods/cases/cases_Scheduler_Update.php index 995eaaefb..122ef8c22 100755 --- a/workflow/engine/methods/cases/cases_Scheduler_Update.php +++ b/workflow/engine/methods/cases/cases_Scheduler_Update.php @@ -54,7 +54,7 @@ try { $aData['SCH_DEL_USER_NAME'] = $_POST['form']['SCH_USER_NAME']; if ($_POST['form']['SCH_USER_PASSWORD'] != 'DefaultPM') { - $aData['SCH_DEL_USER_PASS'] = md5( $_POST['form']['SCH_USER_PASSWORD'] ); + $aData['SCH_DEL_USER_PASS'] = Bootstrap::hashPassword($_POST['form']['SCH_USER_PASSWORD']); } $aData['SCH_DEL_USER_UID'] = $_POST['form']['SCH_USER_UID']; diff --git a/workflow/engine/methods/cases/proxyPMTablesFieldList.php b/workflow/engine/methods/cases/proxyPMTablesFieldList.php index d8d996725..37f6d6bdf 100644 --- a/workflow/engine/methods/cases/proxyPMTablesFieldList.php +++ b/workflow/engine/methods/cases/proxyPMTablesFieldList.php @@ -631,6 +631,27 @@ function fieldSave() $conf->saveObject($result, "casesList", $action, "", "", ""); + $msgLog = ''; + + if($action == 'todo') { + $list = 'Inbox'; + } elseif ($action == 'sent') { + $list = 'Participated'; + } else { + $list = ucwords($action); + } + + for ($i=4; $iupdate( $editDepartment ); $oDept->updateDepartmentManager( $dep_uid ); + + if ($dep_parent == '') { + G::auditLog("UpdateDepartament", "Departament Name: ".$dep_name." (".$dep_uid.") "); + } else { + G::auditLog("UpdateSubDepartament", "Sub Departament Name: ".$dep_name." (".$dep_uid.") "); + } + echo '{success: true}'; } catch (exception $e) { echo '{success: false}'; diff --git a/workflow/engine/methods/enterprise/addonsStoreAction.php b/workflow/engine/methods/enterprise/addonsStoreAction.php index ec0b59622..ed1522b0a 100644 --- a/workflow/engine/methods/enterprise/addonsStoreAction.php +++ b/workflow/engine/methods/enterprise/addonsStoreAction.php @@ -177,6 +177,13 @@ try { } $result["success"] = $addon->setEnabled(($action == "enable")); + + if ($action == "enable") { + G::auditLog("EnablePlugin", "Plugin Name: ".$_REQUEST['addon']); + } else { + G::auditLog("DisablePlugin", "Plugin Name: ".$_REQUEST['addon']); + } + break; case "install": $status = 1; @@ -340,7 +347,9 @@ try { exit(0); break; case "addonslist": - $result = AddonsStore::addonList(); + $type = (isset($_REQUEST['type'])) ? $_REQUEST['type']: 'plugin'; + $result = AddonsStore::addonList($type); + break; break; default: throw (new Exception("Action \"$action\" is not valid")); diff --git a/workflow/engine/methods/enterprise/enterprise.php b/workflow/engine/methods/enterprise/enterprise.php index d8a122412..2ae816c76 100644 --- a/workflow/engine/methods/enterprise/enterprise.php +++ b/workflow/engine/methods/enterprise/enterprise.php @@ -21,8 +21,8 @@ class enterprisePlugin extends PMPlugin $VERSION = System::getVersion(); $res = parent::PMPlugin($sNamespace, $sFilename); - $this->sFriendlyName = "ProcessMaker Enterprise Edition"; - $this->sDescription = "ProcessMaker Enterprise Edition $VERSION"; + $this->sFriendlyName = "ProcessMaker Enterprise Core Edition"; + $this->sDescription = "ProcessMaker Enterprise Core Edition $VERSION"; $this->sPluginFolder = "enterprise"; $this->sSetupPage = "../enterprise/addonsStore.php"; $this->iVersion = $VERSION; diff --git a/workflow/engine/methods/enterprise/processMakerAjax.php b/workflow/engine/methods/enterprise/processMakerAjax.php index 877adde34..443c75aca 100644 --- a/workflow/engine/methods/enterprise/processMakerAjax.php +++ b/workflow/engine/methods/enterprise/processMakerAjax.php @@ -270,6 +270,7 @@ switch ($option) { if ($result["status"] == "OK") { $response["status"] = $result["status"]; //OK $response["message"] = $result["message"]; + G::auditLog("InstallPlugin", "Plugin Name: ".$file); } else { throw (new Exception($result["message"])); } diff --git a/workflow/engine/methods/groups/groups_Ajax.php b/workflow/engine/methods/groups/groups_Ajax.php index 76f350204..5911a519f 100644 --- a/workflow/engine/methods/groups/groups_Ajax.php +++ b/workflow/engine/methods/groups/groups_Ajax.php @@ -149,7 +149,10 @@ switch ($_POST['action']) { unset( $newGroup['GRP_UID'] ); $group = new Groupwf(); $group->create( $newGroup ); + G::auditLog("CreateGroup", "Group Name: ".$newGroup['GRP_TITLE']); + echo '{success: true}'; + break; case 'saveEditGroup': G::LoadClass( 'groups' ); @@ -158,6 +161,7 @@ switch ($_POST['action']) { $editGroup['GRP_TITLE'] = trim( $_POST['name'] ); $group = new Groupwf(); $group->update( $editGroup ); + G::auditLog("UpdateGroup", "Group Name: ".$editGroup['GRP_TITLE']." Group ID: (".$_POST['grp_uid'].") "); echo '{success: true}'; break; case 'deleteGroup': @@ -167,6 +171,7 @@ switch ($_POST['action']) { return; } $group->remove( urldecode( $_POST['GRP_UID'] ) ); + G::auditLog("DeleteGroup", "Group Name: ".$_POST['GRP_NAME']." Group ID: (".$_POST['GRP_UID'].") "); require_once 'classes/model/TaskUser.php'; $oProcess = new TaskUser(); $oCriteria = new Criteria( 'workflow' ); diff --git a/workflow/engine/methods/processCategory/processCategory_Ajax.php b/workflow/engine/methods/processCategory/processCategory_Ajax.php index 37a678507..54cef67b5 100755 --- a/workflow/engine/methods/processCategory/processCategory_Ajax.php +++ b/workflow/engine/methods/processCategory/processCategory_Ajax.php @@ -104,6 +104,7 @@ if (isset( $_REQUEST['action'] )) { $pcat->setCategoryUid( G::GenerateUniqueID() ); $pcat->setCategoryName( $catName ); $pcat->save(); + G::auditLog("CreateCategory", "Category Name: ".$catName); echo '{success: true}'; } catch (Exception $ex) { echo '{success: false, error: ' . $ex->getMessage() . '}'; @@ -134,6 +135,7 @@ if (isset( $_REQUEST['action'] )) { $pcat->setCategoryUid( $catUID ); $pcat->setCategoryName( $catName ); $pcat->save(); + g::auditLog("UpdateCategory", "Category Name: ".$catName." Category ID: (".$catUID.") "); echo '{success: true}'; } catch (Exception $ex) { echo '{success: false, error: ' . $ex->getMessage() . '}'; @@ -153,7 +155,9 @@ if (isset( $_REQUEST['action'] )) { $catUID = $_REQUEST['cat_uid']; $cat = new ProcessCategory(); $cat->setCategoryUid( $catUID ); + $catName = $cat->loadByCategoryId( $catUID ); $cat->delete(); + G::auditLog("DeleteCategory", "Category Name: ".$catName." Category ID: (".$catUID.") "); echo '{success: true}'; } catch (Exception $ex) { echo '{success: false, error: ' . $ex->getMessage() . '}'; diff --git a/workflow/engine/methods/processes/processes_Export.php b/workflow/engine/methods/processes/processes_Export.php index 5c5993eaf..023f1a82f 100755 --- a/workflow/engine/methods/processes/processes_Export.php +++ b/workflow/engine/methods/processes/processes_Export.php @@ -26,6 +26,10 @@ $response = new StdClass(); $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; try { + if(empty($_GET)){ + $proUid = Bootstrap::json_decode( $_POST['data']); + $_GET["pro_uid"] = $proUid->pro_uid; + } if (\BpmnProject::exists($_GET["pro_uid"])) { $exporter = new ProcessMaker\Exporter\XmlExporter($_GET["pro_uid"]); @@ -40,16 +44,26 @@ try { rename($outputDir . $outputFilename . "tpm", $outputDir . $outputFilename); } - $response->file_hash = base64_encode($outputFilename); $response->success = true; + + /* Render page */ + if (isset( $_REQUEST["processMap"] ) && $_REQUEST["processMap"] == 1) { + $link = parse_url($result['FILENAME_LINK']); + $result['FILENAME_LINK'] = $link['path'] . '?file_hash=' . $response->file_hash; + + $G_PUBLISH = new Publisher(); + $G_PUBLISH->AddContent( "xmlform", "xmlform", "processes/processes_Export", "", $result ); + + G::RenderPage( "publish", "raw" ); + } else{ + echo json_encode($response); + } } catch (Exception $e) { $response->message = $e->getMessage(); $response->success = false; } -echo json_encode($response); - // ************* DEPRECATED (it will be removed soon) ********************************* diff --git a/workflow/engine/methods/setup/appCacheViewAjax.php b/workflow/engine/methods/setup/appCacheViewAjax.php index 23efa9ce0..1cc649c1b 100755 --- a/workflow/engine/methods/setup/appCacheViewAjax.php +++ b/workflow/engine/methods/setup/appCacheViewAjax.php @@ -260,7 +260,7 @@ switch ($request) { $result = new StdClass(); $result->success = true; $result->msg = G::LoadTranslation('ID_TITLE_COMPLETED'); - + G::auditLog("BuildCache"); echo G::json_encode( $result ); } catch (Exception $e) { diff --git a/workflow/engine/methods/setup/auditLog.php b/workflow/engine/methods/setup/auditLog.php new file mode 100644 index 000000000..51bb5ef52 --- /dev/null +++ b/workflow/engine/methods/setup/auditLog.php @@ -0,0 +1,96 @@ +userCanAccess("PM_SETUP") != 1) { + G::SendTemporalMessage("ID_USER_HAVENT_RIGHTS_PAGE", "error", "labels"); + exit(0); +} + +$c = new Configurations(); +$configPage = $c->getConfiguration( "auditLogList", "pageSize", null, $_SESSION["USER_LOGGED"] ); + +$config = array (); +$config["pageSize"] = (isset( $configPage["pageSize"] )) ? $configPage["pageSize"] : 20; + +$arrayAction = array (array ("ALL", G::LoadTranslation( "ID_ALL" )), + array ("CreateUser", G::LoadTranslation( "ID_CREATE_USER" )), + array ("UpdateUser", G::LoadTranslation( "ID_UPDATE_USER" )), + array ("DeleteUser", G::LoadTranslation( "ID_DELETE_USER" )), + array ("EnableUser", G::LoadTranslation( "ID_ENABLE_USER" )), + array ("DisableUser", G::LoadTranslation( "ID_DISABLE_USER" )), + array ("AssignAuthenticationSource", G::LoadTranslation( "ID_ASSIGN_AUTHENTICATION_SOURCE" )), + array ("AssignUserToGroup", G::LoadTranslation( "ID_ASSIGN_USER_TO_GROUP" )), + array ("CreateAuthSource", G::LoadTranslation( "ID_CREATE_AUTH_SOURCE" )), + array ("UpdateAuthSource", G::LoadTranslation( "ID_UPDATE_AUTH_SOURCE" )), + array ("DeleteAuthSource", G::LoadTranslation( "ID_DELETE_AUTH_SOURCE" )), + array ("CreateRole", G::LoadTranslation( "ID_CREATE_ROLE" )), + array ("UpdateRole", G::LoadTranslation( "ID_UPDATE_ROLE" )), + array ("DeleteRole", G::LoadTranslation( "ID_DELETE_ROLE" )), + array ("AssignUserToRole", G::LoadTranslation( "ID_ASSIGN_USER_TO_ROLE" )), + array ("DeleteUserToRole", G::LoadTranslation( "ID_DELETE_USER_TO_ROLE" )), + array ("AddPermissionToRole", G::LoadTranslation( "ID_ADD_PERMISSION_TO_ROLE" )), + array ("DeletePermissionToRole", G::LoadTranslation( "ID_DELETE_PERMISSION_TO_ROLE" )), + array ("CreateSkin", G::LoadTranslation( "ID_CREATE_SKIN" )), + array ("ImportSkin", G::LoadTranslation( "ID_IMPORT_SKIN" )), + array ("ExportSkin", G::LoadTranslation( "ID_EXPORT_SKIN" )), + array ("DeleteSkin", G::LoadTranslation( "ID_DELETE_SKIN" )), + array ("CreateGroup", G::LoadTranslation( "ID_CREATE_GROUP" )), + array ("UpdateGroup", G::LoadTranslation( "ID_UPDATE_GROUP" )), + array ("DeleteGroup", G::LoadTranslation( "ID_DELETE_GROUP" )), + array ("CreateCategory", G::LoadTranslation( "ID_CREATE_CATEGORY" )), + array ("UpdateCategory", G::LoadTranslation( "ID_UPDATE_CATEGORY" )), + array ("DeleteCategory", G::LoadTranslation( "ID_DELETE_CATEGORY" )), + array ("BuildCache", G::LoadTranslation( "ID_BUILD_CACHE" )), + array ("ClearCache", G::LoadTranslation( "ID_CLEAR_CACHE" )), + array ("ClearCron", G::LoadTranslation( "ID_CLEAR_CRON" )), + array ("UpdateEnvironmentSettings", G::LoadTranslation( "ID_UPDATE_ENVIRONMENT_SETTINGS" )), + array ("UpdateLoginSettings", G::LoadTranslation( "ID_UPDATE_LOGIN_SETTINGS" )), + array ("EnableHeartBeat", G::LoadTranslation( "ID_ENABLE_HEART_BEAT" )), + array ("DisableHeartBeat", G::LoadTranslation( "ID_DISABLE_HEART_BEAT" )), + array ("CreatePmtable", G::LoadTranslation( "ID_CREATE_PMTABLE" )), + array ("UpdatePmtable", G::LoadTranslation( "ID_UPDATE_PMTABLE" )), + array ("DeletePmtable", G::LoadTranslation( "ID_DELETE_PMTABLE" )), + array ("AddDataPmtable", G::LoadTranslation( "ID_ADD_DATA_PMTABLE" )), + array ("UpdateDataPmtable", G::LoadTranslation( "ID_UPDATE_DATA_PMTABLE" )), + array ("DeleteDataPmtable", G::LoadTranslation( "ID_DELETE_DATA_PMTABLE" )), + array ("ImportTable", G::LoadTranslation( "ID_IMPORT_TABLE" )), + array ("ExportTable", G::LoadTranslation( "ID_EXPORT_TABLE" )), + array ("CreateCalendar", G::LoadTranslation( "ID_CREATE_CALENDAR" )), + array ("UpdateCalendar", G::LoadTranslation( "ID_UPDATE_CALENDAR" )), + array ("DeleteCalendar", G::LoadTranslation( "ID_DELETE_CALENDAR" )), + array ("CreateDashletInstance", G::LoadTranslation( "ID_CREATE_DASHLET_INSTANCE" )), + array ("UpdateDashletInstance", G::LoadTranslation( "ID_UPDATE_DASHLET_INSTANCE" )), + array ("DeleteDashletInstance", G::LoadTranslation( "ID_DELETE_DASHLET_INSTANCE" )), + array ("CreateDepartament", G::LoadTranslation( "ID_CREATE_DEPARTAMENT" )), + array ("CreateSubDepartament", G::LoadTranslation( "ID_CREATE_SUB_DEPARTAMENT" )), + array ("UpdateDepartament", G::LoadTranslation( "ID_UPDATE_DEPARTAMENT" )), + array ("UpdateSubDepartament", G::LoadTranslation( "ID_UPDATE_SUB_DEPARTAMENT" )), + array ("DeleteDepartament", G::LoadTranslation( "ID_DELETE_DEPARTAMENT" )), + array ("AssignManagerToDepartament", G::LoadTranslation( "ID_ASSIGN_MANAGER_TO_DEPARTAMENT" )), + array ("AssignUserToDepartament", G::LoadTranslation( "ID_ASSIGN_USER_TO_DEPARTAMENT" )), + array ("RemoveUsersFromDepartament", G::LoadTranslation( "ID_REMOVE_USERS_FROM_DEPARTAMENT" )), + array ("AssignUserToGroup", G::LoadTranslation( "ID_ASSIGN_USER_TO_GROUP" )), + array ("UploadLanguage", G::LoadTranslation( "ID_UPLOAD_LANGUAGE" )), + array ("ExportLanguage", G::LoadTranslation( "ID_EXPORT_LANGUAGE" )), + array ("DeleteLanguage", G::LoadTranslation( "ID_DELETE_LAGUAGE" )), + array ("UploadSystemSettings", G::LoadTranslation( "ID_UPLOAD_SYSTEM_SETTINGS" )), + array ("UpdateEmailSettings", G::LoadTranslation( "ID_UPDATE_EMAIL_SETTINGS" )), + array ("CreateEmailSettings", G::LoadTranslation( "ID_CREATE_EMAIL_SETTINGS" )), + array ("UploadLogo", G::LoadTranslation( "ID_UPLOAD_LOGO" )), + array ("DeleteLogo", G::LoadTranslation( "ID_DELETE_LOGO" )), + array ("RestoreLogo", G::LoadTranslation( "ID_RESTORE_LOGO" )), + array ("ReplaceLogo", G::LoadTranslation( "ID_REPLACE_LOGO" )), + array ("InstallPlugin", G::LoadTranslation( "ID_INSTALL_PLUGIN" )), + array ("EnablePlugin", G::LoadTranslation( "ID_ENABLE_PLUGIN" )), + array ("DisablePlugin", G::LoadTranslation( "ID_DISABLE_PLUGIN" )), + array ("RemovePlugin", G::LoadTranslation( "ID_REMOVE_PLUGIN" )), + array ("SetColumns", G::LoadTranslation( "ID_SET_COLUMNS" )), + array ("EnableAuditLog", G::LoadTranslation( "ID_ENABLE_AUDIT_LOG" )), + array ("DisableAuditLog", G::LoadTranslation( "ID_DISABLE_AUDIT_LOG" )), + ); + +$oHeadPublisher = &headPublisher::getSingleton(); +$oHeadPublisher->addExtJsScript( "setup/auditLog", true ); +$oHeadPublisher->assign( "CONFIG", $config ); +$oHeadPublisher->assign( "ACTION", $arrayAction ); +G::RenderPage( "publish", "extJs" ); diff --git a/workflow/engine/methods/setup/auditLogAjax.php b/workflow/engine/methods/setup/auditLogAjax.php new file mode 100644 index 000000000..236db9265 --- /dev/null +++ b/workflow/engine/methods/setup/auditLogAjax.php @@ -0,0 +1,151 @@ + 1) { + $date = (isset( $arrayAux[0] )) ? trim( $arrayAux[0] ) : ""; + $workspace = (isset( $arrayAux[1] )) ? trim( $arrayAux[1] ) : ""; + $ip = (isset( $arrayAux[2] )) ? trim( $arrayAux[2] ) : ""; + $user = (isset( $arrayAux[4] )) ? trim( $arrayAux[4] ) : ""; + $action = (isset( $arrayAux[5] )) ? trim( $arrayAux[5] ) : ""; + $description = (isset( $arrayAux[6] )) ? trim( $arrayAux[6] ) : ""; + } + + $mktDate = (! empty( $date )) ? mktimeDate( $date ) : 0; + + //Filter + $sw = 1; + if ($workspace != $filter["workspace"]) { + $sw = 0; + } + + if ($filter["action"] != "ALL") { + if ($action != $filter["action"]) { + $sw = 0; + } + } + + if ($filter["dateFrom"] && $mktDate > 0) { + if (! (mktimeDate( $filter["dateFrom"] ) <= $mktDate)) { + $sw = 0; + } + } + + if ($filter["dateTo"] && $mktDate > 0) { + if (! ($mktDate <= mktimeDate( $filter["dateTo"] . " 23:59:59" ))) { + $sw = 0; + } + } + + if ($filter["description"]) { + $sw = 0; + $string = $filter["description"]; + + if ( (stristr($date, $string) !== false) || (stristr($ip, $string) !== false) || (stristr($user, $string) !== false) || (stristr($action, $string) !== false) || (stristr($description, $string) !== false) ) { + $sw = 1; + } + } + + $arrayData = array (); + $newAction = preg_replace('/([A-Z])/', '_$1', $action); + $newAction = "ID".strtoupper($newAction); + + if ($sw == 1) { + $arrayData = array ("DATE" => $date, "USER" => $user, "IP" =>$ip, "ACTION" => G::LoadTranslation($newAction), "DESCRIPTION" => $description); + } + + return $arrayData; +} + +function getAuditLogData ($filter, $r, $i) +{ + $arrayData = array (); + $strAux = null; + $count = 0; + + $file = PATH_DATA . "log" . PATH_SEP . "audit.log"; + + if (file_exists($file)) { + $arrayFileData = file($file); + + for ($k = 0; $k < count($arrayFileData); $k++) { + + $strAux = $arrayFileData[$k]; + + if ($strAux) { + $arrayAux = auditLogArraySet($strAux, $filter); + if (count($arrayAux) > 0) { + $count = $count + 1; + + if ($count > $i && count($arrayData) < $r) { + $arrayData[] = $arrayAux; + } + } + } + } + } + + return array($count, $arrayData); +} + +$option = (isset( $_REQUEST["option"] )) ? $_REQUEST["option"] : null; + +$response = array (); + +switch ($option) { + case "LST": + $pageSize = $_REQUEST["pageSize"]; + $workspace = SYS_SYS; + $action = $_REQUEST["action"]; + $description = $_REQUEST["description"]; + $dateFrom = $_REQUEST["dateFrom"]; + $dateTo = $_REQUEST["dateTo"]; + + $arrayFilter = array ("workspace" => $workspace, "action" => $action, "description" => $description,"dateFrom" => str_replace( "T00:00:00", null, $dateFrom ),"dateTo" => str_replace( "T00:00:00", null, $dateTo ) + ); + + $limit = isset( $_REQUEST["limit"] ) ? $_REQUEST["limit"] : $pageSize; + $start = isset( $_REQUEST["start"] ) ? $_REQUEST["start"] : 0; + + list ($count, $data) = getAuditLogData( $arrayFilter, $limit, $start ); + $response = array ("success" => true,"resultTotal" => $count,"resultRoot" => $data + ); + break; + case "EMPTY": + $status = 1; + + try { + $file = PATH_DATA . "log" . PATH_SEP . "cron.log"; + + if (file_exists( $file )) { + unlink( $file ); + } + + $response["status"] = "OK"; + } catch (Exception $e) { + $response["message"] = $e->getMessage(); + $status = 0; + } + + if ($status == 0) { + $response["status"] = "ERROR"; + } + break; +} + +echo G::json_encode( $response ); \ No newline at end of file diff --git a/workflow/engine/methods/setup/auditLogConfig.php b/workflow/engine/methods/setup/auditLogConfig.php new file mode 100644 index 000000000..829d5c778 --- /dev/null +++ b/workflow/engine/methods/setup/auditLogConfig.php @@ -0,0 +1,16 @@ +requirePermissions( 'PM_SETUP' ); + +$oHeadPublisher = & headPublisher::getSingleton(); +G::LoadClass( 'serverConfiguration' ); + +$oServerConf = & serverConf::getSingleton(); + +$sflag = $oServerConf->getAuditLogProperty( 'AL_OPTION', SYS_SYS ); +$auditLogChecked = $sflag == 1 ? true : false; + +$oHeadPublisher->addExtJsScript( 'setup/auditLogConfig', true ); //adding a javascript file .js +$oHeadPublisher->assign( 'auditLogChecked', $auditLogChecked ); +G::RenderPage( 'publish', 'extJs' ); \ No newline at end of file diff --git a/workflow/engine/methods/setup/auditLogConfigAjax.php b/workflow/engine/methods/setup/auditLogConfigAjax.php new file mode 100644 index 000000000..fb29cc22d --- /dev/null +++ b/workflow/engine/methods/setup/auditLogConfigAjax.php @@ -0,0 +1,33 @@ +unsetAuditLogProperty( 'AL_TYPE', SYS_SYS ); + if (isset( $_POST['acceptAL'] )) { + $oServerConf->setAuditLogProperty( 'AL_OPTION', 1, SYS_SYS ); + $oServerConf->unsetAuditLogProperty( 'AL_NEXT_DATE', SYS_SYS ); + $response->enable = true; + G::auditLog("EnableAuditLog"); + } else { + G::auditLog("DisableAuditLog"); + $oServerConf->setAuditLogProperty( 'AL_OPTION', 0, SYS_SYS ); + $oServerConf->unsetAuditLogProperty( 'AL_NEXT_DATE', SYS_SYS ); + $oServerConf->setAuditLogProperty( 'AL_TYPE', 'endaudit', SYS_SYS ); + $response->enable = false; + } + $response->success = true; + + } catch (Exception $e) { + $response->success = false; + $response->msg = $e->getMessage(); + } + echo G::json_encode( $response ); + break; +} + diff --git a/workflow/engine/methods/setup/clearCompiledAjax.php b/workflow/engine/methods/setup/clearCompiledAjax.php index f4e47bafe..d665b64d8 100644 --- a/workflow/engine/methods/setup/clearCompiledAjax.php +++ b/workflow/engine/methods/setup/clearCompiledAjax.php @@ -3,22 +3,28 @@ try { $response = new stdClass; if (isset( $_POST['javascriptCache'] ) || isset( $_POST['metadataCache'] ) || isset( $_POST['htmlCache'] )) { + $msgLog = ''; if (isset( $_POST['javascriptCache'] )) { G::rm_dir( PATH_C . 'ExtJs' ); $response->javascript = true; + $msgLog .= 'Javascript cache '; } if (isset( $_POST['metadataCache'] )) { G::rm_dir( PATH_C . 'xmlform' ); $response->xmlform = true; + $msgLog .= 'Forms Metadata cache '; } if (isset( $_POST['htmlCache'] )) { G::rm_dir( PATH_C . 'smarty' ); $response->smarty = true; + $msgLog .= 'Forms Html Templates cache '; } $response->success = true; + + G::auditLog("ClearCache", $msgLog); } else { $response->success = false; } diff --git a/workflow/engine/methods/setup/cronAjax.php b/workflow/engine/methods/setup/cronAjax.php index ea67d253d..623f2355f 100644 --- a/workflow/engine/methods/setup/cronAjax.php +++ b/workflow/engine/methods/setup/cronAjax.php @@ -144,6 +144,7 @@ switch ($option) { } $response["status"] = "OK"; + G::auditLog("ClearCron"); } catch (Exception $e) { $response["message"] = $e->getMessage(); $status = 0; diff --git a/workflow/engine/methods/setup/environmentSettingsAjax.php b/workflow/engine/methods/setup/environmentSettingsAjax.php index 7666e75a8..6ee5a6017 100755 --- a/workflow/engine/methods/setup/environmentSettingsAjax.php +++ b/workflow/engine/methods/setup/environmentSettingsAjax.php @@ -46,6 +46,8 @@ switch ($request) { $conf->aConfig = $config; $conf->saveConfig( "ENVIRONMENT_SETTINGS", "" ); + G::auditLog("UpdateEnvironmentSettings", "UserNameDisplayFormat -> ".$_POST["userFormat"]." GlobalDateFormat -> ".$_POST["dateFormat"]." HideProcessInformation -> ".$_POST["hideProcessInf"]." DateFormat -> ".$_POST["casesListDateFormat"]." NumberOfRowsPerPage -> ".$_POST["casesListRowNumber"]." RefreshTimeSeconds -> ".$_POST["txtCasesRefreshTime"]); + $response = new stdclass(); $response->success = true; $response->msg = G::LoadTranslation( "ID_SAVED_SUCCESSFULLY" ); diff --git a/workflow/engine/methods/setup/loginSettingsAjax.php b/workflow/engine/methods/setup/loginSettingsAjax.php index 61eba676b..67aa16a79 100755 --- a/workflow/engine/methods/setup/loginSettingsAjax.php +++ b/workflow/engine/methods/setup/loginSettingsAjax.php @@ -30,10 +30,13 @@ switch ($request) { $conf->saveConfig( 'ENVIRONMENT_SETTINGS', '' ); + $lang = isset( $_REQUEST['lang'] ) ? $_REQUEST['lang'] : 'en'; //remove from memcache when this value is updated/created $memcache->delete( 'flagForgotPassword' ); $response->success = true; + G::auditLog("UpdateLoginSettings", "DefaultLanguage->".$lang." EnableForgotPassword->".$_REQUEST['forgotPasswd']); + echo G::json_encode( $response ); break; diff --git a/workflow/engine/methods/setup/pluginsChange.php b/workflow/engine/methods/setup/pluginsChange.php index 2ad4b8552..27fec35fc 100755 --- a/workflow/engine/methods/setup/pluginsChange.php +++ b/workflow/engine/methods/setup/pluginsChange.php @@ -42,6 +42,7 @@ if ($handle = opendir( PATH_PLUGINS )) { $details = $oPluginRegistry->getPluginDetails( $pluginFile ); $oPluginRegistry->disablePlugin( $details->sNamespace ); $size = file_put_contents( PATH_DATA_SITE . 'plugin.singleton', $oPluginRegistry->serializeInstance() ); + G::auditLog("DisablePlugin", "Plugin Name: ".$details->sNamespace); print "size saved : $size
"; } else { //print "change to ENABLED"; @@ -50,6 +51,7 @@ if ($handle = opendir( PATH_PLUGINS )) { $oPluginRegistry->enablePlugin( $details->sNamespace ); $oPluginRegistry->setupPlugins(); //get and setup enabled plugins $size = file_put_contents( PATH_DATA_SITE . 'plugin.singleton', $oPluginRegistry->serializeInstance() ); + G::auditLog("EnablePlugin", "Plugin Name: ".$details->sNamespace); print "size saved : $size
"; } } diff --git a/workflow/engine/methods/setup/pluginsImportFile.php b/workflow/engine/methods/setup/pluginsImportFile.php index e55399b1e..3f3697e64 100755 --- a/workflow/engine/methods/setup/pluginsImportFile.php +++ b/workflow/engine/methods/setup/pluginsImportFile.php @@ -34,6 +34,77 @@ try { throw (new Exception( G::loadTranslation( 'ID_ERROR_UPLOADING_PLUGIN_FILENAME' ) )); } + //save the files Enterprise + if ($_FILES['form']['error']['PLUGIN_FILENAME'] == 0) { + $filename = $_FILES['form']['name']['PLUGIN_FILENAME']; + $path = PATH_DOCUMENT . 'input' . PATH_SEP; + if (strpos($filename, 'enterprise') !== false) { + + G::LoadThirdParty( 'pear/Archive', 'Tar' ); + $tar = new Archive_Tar( $path . $filename ); + $sFileName = substr( $filename, 0, strrpos( $filename, '.' ) ); + $sClassName = substr( $filename, 0, strpos( $filename, '-' ) ); + + $files = $tar->listContent(); + $licenseName = ''; + $listFiles = array(); + foreach ($files as $key => $val) { + if (strpos(trim($val['filename']), 'enterprise/data/') !== false) { + $listFiles[] = trim($val['filename']); + } + if (strpos(trim($val['filename']), 'license_') !== false) { + $licenseName = trim($val['filename']); + } + } + $tar->extractList( $listFiles, PATH_PLUGINS . 'data'); + $tar->extractList( $licenseName, PATH_PLUGINS); + + $pluginRegistry = &PMPluginRegistry::getSingleton(); + $autoPlugins = glob(PATH_PLUGINS . "data/enterprise/data/*.tar"); + $autoPluginsA = array(); + + foreach ($autoPlugins as $filePath) { + $plName = basename($filePath); + //if (!(in_array($plName, $def))) { + if (strpos($plName, 'enterprise') === false) { + $autoPluginsA[]["sFilename"] = $plName; + } + } + + $aPlugins = $autoPluginsA; + foreach ($aPlugins as $key=>$aPlugin) { + $sClassName = substr($aPlugin["sFilename"], 0, strpos($aPlugin["sFilename"], "-")); + + $oTar = new Archive_Tar(PATH_PLUGINS . "data/enterprise/data/" . $aPlugin["sFilename"]); + $oTar->extract(PATH_PLUGINS); + + if (!(class_exists($sClassName))) { + require_once (PATH_PLUGINS . $sClassName . ".php"); + } + + $pluginDetail = $pluginRegistry->getPluginDetails($sClassName . ".php"); + $pluginRegistry->installPlugin($pluginDetail->sNamespace); //error + } + + file_put_contents(PATH_DATA_SITE . "plugin.singleton", $pluginRegistry->serializeInstance()); + $licfile = glob(PATH_PLUGINS . "*.dat"); + + if ((isset($licfile[0])) && ( is_file($licfile[0]) )) { + $licfilename = basename($licfile[0]); + @copy($licfile[0], PATH_DATA_SITE . $licfilename); + @unlink($licfile[0]); + } + + require_once ('classes/model/AddonsStore.php'); + AddonsStore::checkLicenseStore(); + $licenseManager = &pmLicenseManager::getSingleton(); + AddonsStore::updateAll(false); + + $message = G::loadTranslation( 'ID_ENTERPRISE_INSTALLED') . ' ' . G::loadTranslation( 'ID_LOG_AGAIN'); + G::SendMessageText($message, "INFO"); + die(''); + } + } //save the file if ($_FILES['form']['error']['PLUGIN_FILENAME'] == 0) { $filename = $_FILES['form']['name']['PLUGIN_FILENAME']; @@ -168,6 +239,8 @@ try { $size = file_put_contents( PATH_DATA_SITE . "plugin.singleton", $oPluginRegistry->serializeInstance() ); $response = $oPluginRegistry->verifyTranslation( $details->sNamespace); + G::auditLog("InstallPlugin", "Plugin Name: ".$details->sNamespace ); + //if ($response->recordsCountSuccess <= 0) { //throw (new Exception( 'The plugin ' . $details->sNamespace . ' couldn\'t verify any translation item. Verified Records:' . $response->recordsCountSuccess)); //} diff --git a/workflow/engine/methods/setup/pluginsRemove.php b/workflow/engine/methods/setup/pluginsRemove.php index 41ea327ba..6504d0ed3 100755 --- a/workflow/engine/methods/setup/pluginsRemove.php +++ b/workflow/engine/methods/setup/pluginsRemove.php @@ -49,6 +49,6 @@ if (file_exists( PATH_PLUGINS . $pluginName . ".php" )) { $pluginRegistry->unSerializeInstance( file_get_contents( PATH_DATA_SITE . "plugin.singleton" ) ); } - +G::auditLog("RemovePlugin","Plugin Name: ".$pluginName); echo $pluginName . " " . nl2br( G::LoadTranslation( "ID_MSG_REMOVE_PLUGIN_SUCCESS" ) ); diff --git a/workflow/engine/methods/setup/processHeartBeatAjax.php b/workflow/engine/methods/setup/processHeartBeatAjax.php index d743c42ae..7241e656b 100644 --- a/workflow/engine/methods/setup/processHeartBeatAjax.php +++ b/workflow/engine/methods/setup/processHeartBeatAjax.php @@ -12,11 +12,13 @@ switch ($_GET['action']) { $oServerConf->setHeartbeatProperty( 'HB_OPTION', 1, 'HEART_BEAT_CONF' ); $oServerConf->unsetHeartbeatProperty( 'HB_NEXT_BEAT_DATE', 'HEART_BEAT_CONF' ); $response->enable = true; + G::auditLog("EnableHeartBeat"); } else { $oServerConf->setHeartbeatProperty( 'HB_OPTION', 0, 'HEART_BEAT_CONF' ); $oServerConf->unsetHeartbeatProperty( 'HB_NEXT_BEAT_DATE', 'HEART_BEAT_CONF' ); $oServerConf->setHeartbeatProperty( 'HB_BEAT_TYPE', 'endbeat', 'HEART_BEAT_CONF' ); $response->enable = false; + G::auditLog("DisableHeartBeat"); } $response->success = true; diff --git a/workflow/engine/methods/setup/setupSchemas/app_cache_view.sql b/workflow/engine/methods/setup/setupSchemas/app_cache_view.sql index 7416765bc..74cf64bbb 100755 --- a/workflow/engine/methods/setup/setupSchemas/app_cache_view.sql +++ b/workflow/engine/methods/setup/setupSchemas/app_cache_view.sql @@ -34,4 +34,4 @@ CREATE TABLE `APP_CACHE_VIEW` PRIMARY KEY (`APP_UID`,`DEL_INDEX`), KEY `indexAppNumber`(`APP_NUMBER`), KEY `indexAppUser`(`USR_UID`, `APP_STATUS`) -)ENGINE=MyISAM DEFAULT CHARSET='utf8' COMMENT='Application cache view'; +)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Application cache view'; diff --git a/workflow/engine/methods/setup/skin_Ajax.php b/workflow/engine/methods/setup/skin_Ajax.php index e00bc76be..b2b5bde01 100755 --- a/workflow/engine/methods/setup/skin_Ajax.php +++ b/workflow/engine/methods/setup/skin_Ajax.php @@ -170,6 +170,7 @@ function newSkin ($baseSkin = 'classic') file_put_contents( $configFileFinal, $xmlConfiguration ); $response['success'] = true; $response['message'] = G::LoadTranslation( 'ID_SKIN_SUCCESS_CREATE' ); + G::auditLog("CreateSkin", "Skin Name: ".$skinName); print_r( G::json_encode( $response ) ); } catch (Exception $e) { $response['success'] = false; @@ -285,6 +286,7 @@ function importSkin () $response['success'] = true; $response['message'] = G::LoadTranslation( 'ID_SKIN_SUCCESSFUL_IMPORTED' ); + G::auditLog("ImportSkin", "Skin Name: ".$skinName); print_r( G::json_encode( $response ) ); } catch (Exception $e) { $response['success'] = false; @@ -329,7 +331,7 @@ function exportSkin ($skinToExport = "") $response['success'] = true; $response['message'] = $skinTar; - + G::auditLog("ExportSkin", "Skin Name: ".$skinName); print_r( G::json_encode( $response ) ); } catch (Exception $e) { $response['success'] = false; @@ -355,6 +357,7 @@ function deleteSkin () G::rm_dir( PATH_CUSTOM_SKINS . $folderId ); $response['success'] = true; $response['message'] = "$folderId deleted"; + G::auditLog("DeleteSkin", "Skin Name: ".$folderId); } catch (Exception $e) { $response['success'] = false; $response['error'] = $response['message'] = $e->getMessage(); diff --git a/workflow/engine/methods/users/usersAjax.php b/workflow/engine/methods/users/usersAjax.php index 1f7220c82..9842db631 100755 --- a/workflow/engine/methods/users/usersAjax.php +++ b/workflow/engine/methods/users/usersAjax.php @@ -187,6 +187,7 @@ switch ($_POST['action']) { require_once 'classes/model/Users.php'; $oUser = new Users(); $oUser->create($aData); + G::auditLog("CreateUser", "User Name: ". $aData['USR_USERNAME']); if ($_FILES['USR_PHOTO']['error'] != 1) { //print (PATH_IMAGES_ENVIRONMENT_USERS); @@ -363,6 +364,7 @@ switch ($_POST['action']) { require_once 'classes/model/Users.php'; $oUser = new Users(); $oUser->update($aData); + G::auditLog("UpdateUser", "User Name: ". $aData['USR_USERNAME']." User ID: (".$aData['USR_UID'].") "); if ($_FILES['USR_PHOTO']['error'] != 1) { if ($_FILES['USR_PHOTO']['tmp_name'] != '') { $aAux = explode('.', $_FILES['USR_PHOTO']['name']); diff --git a/workflow/engine/methods/users/users_Ajax.php b/workflow/engine/methods/users/users_Ajax.php index f155fe69b..4eb621755 100644 --- a/workflow/engine/methods/users/users_Ajax.php +++ b/workflow/engine/methods/users/users_Ajax.php @@ -201,6 +201,7 @@ try { $oUser = new Users(); $aFields = $oUser->load($UID); $aFields['USR_STATUS'] = 'CLOSED'; + $userName = $aFields['USR_USERNAME']; $aFields['USR_USERNAME'] = ''; $oUser->update($aFields); @@ -216,8 +217,8 @@ try { $criteria->add(ProcessUserPeer::USR_UID, $UID, Criteria::EQUAL); $criteria->add(ProcessUserPeer::PU_TYPE, "SUPERVISOR", Criteria::EQUAL); - ProcessUserPeer::doDelete($criteria); + G::auditLog("DeleteUser", "User Name: ". $userName." User ID: (".$UID.") "); break; case 'changeUserStatus': $response = new stdclass(); @@ -228,6 +229,9 @@ try { $userData = $userInstance->load($_REQUEST['USR_UID']); $userData['USR_STATUS'] = $_REQUEST['NEW_USR_STATUS']; $userInstance->update($userData); + + $msg = $_REQUEST['NEW_USR_STATUS'] == 'ACTIVE'? "EnableUser" : "DisableUser"; + G::auditLog($msg, "User Name: ".$userData['USR_USERNAME']." User ID: (".$userData['USR_UID'].") "); $response->status = 'OK'; } else { $response->status = 'ERROR'; @@ -353,6 +357,7 @@ try { } $aData['USR_AUTH_USER_DN'] = $auth_dn; $RBAC->updateUser($aData); + G::auditLog("AssignAuthenticationSource", "User Name: ".$aData['USR_USERNAME'].' User ID: ('.$aData['USR_UID'].') assign to '.$aData['USR_AUTH_TYPE']); echo '{success: true}'; break; case 'usersList': diff --git a/workflow/engine/skinEngine/neoclassic/css/pmos-xtheme-gray.css b/workflow/engine/skinEngine/neoclassic/css/pmos-xtheme-gray.css index 5341c8c91..6dcbbd266 100644 --- a/workflow/engine/skinEngine/neoclassic/css/pmos-xtheme-gray.css +++ b/workflow/engine/skinEngine/neoclassic/css/pmos-xtheme-gray.css @@ -886,6 +886,11 @@ antes funcionaba. background-image: url(/skins/neoclassic/images/icons_silk/sprites.png) !important; background-position: 0 -10873px !important; } +.ICON_AUDIT_LOG{ + background-image: url(/images/Audit.png) !important; + width: 16px !important; + height: 16px !important; +} .ICON_EMAILS { /*ss_email_edit*/ diff --git a/workflow/engine/skinEngine/skinEngine.php b/workflow/engine/skinEngine/skinEngine.php index 45334f0f9..af5f412a8 100755 --- a/workflow/engine/skinEngine/skinEngine.php +++ b/workflow/engine/skinEngine/skinEngine.php @@ -755,16 +755,16 @@ class SkinEngine $name = $conf->userNameFormat(isset($_SESSION['USR_USERNAME']) ? $_SESSION['USR_USERNAME']: '', isset($_SESSION['USR_FULLNAME']) ? htmlentities($_SESSION['USR_FULLNAME'] , ENT_QUOTES, 'UTF-8'): '', isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : ''); $smarty->assign('user',$name); } - if(class_exists('pmLicenseManager')){ - $pmLicenseManagerO = &pmLicenseManager::getSingleton(); - $expireIn = $pmLicenseManagerO->getExpireIn(); - $expireInLabel = $pmLicenseManagerO->getExpireInLabel(); - //if($expireIn<=30){ - if($expireInLabel != ""){ - $smarty->assign('msgVer', '  '); + + if (defined('SYS_SYS')) { + require_once ("classes" . PATH_SEP . "class.pmLicenseManager.php"); + $pmLicenseManagerO = &pmLicenseManager::getSingleton(); + $expireIn = $pmLicenseManagerO->getExpireIn(); + $expireInLabel = $pmLicenseManagerO->getExpireInLabel(); + if($expireInLabel != ""){ + $smarty->assign('msgVer', '  '); + } } - //} - } if (defined('SYS_SYS')) { $logout = '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/login/login'; diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php index 0763322f7..e27f6017a 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php @@ -458,7 +458,7 @@ class Cases extends Api try { $dataList['userId'] = $this->getUserId(); $dataList['action'] = 'paused'; - $dataList['paged'] = false; + $dataList["paged"] = true; $dataList['start'] = $start; $dataList['limit'] = $limit; diff --git a/workflow/engine/templates/cases/casesGenerateDocumentPage.js b/workflow/engine/templates/cases/casesGenerateDocumentPage.js index 6376c191d..2c0924bcd 100644 --- a/workflow/engine/templates/cases/casesGenerateDocumentPage.js +++ b/workflow/engine/templates/cases/casesGenerateDocumentPage.js @@ -289,9 +289,9 @@ function renderDeleteFile(val,p,r) { if (r.data.DELETE_FILE) { - return ''; + return ""; } else { - return ''; + return "-"; } } @@ -316,8 +316,7 @@ }, cm: new Ext.grid.ColumnModel({ defaults: { - width: 200, - sortable: true + width: 200 }, columns: [ @@ -326,13 +325,12 @@ {id:'FILEPDFEXIST', dataIndex: 'FILEPDFEXIST', hidden:true, hideable:false}, {id:'FILEDOC', dataIndex: 'FILEDOC', hidden:true, hideable:false}, {id:'FILEPDF', dataIndex: 'FILEPDF', hidden:true, hideable:false}, - {header: _("ID_TITLE_FIELD"), dataIndex: 'TITLE', width: 70}, - {header: _("ID_OUTPUT_DOCUMENT"), dataIndex: 'OUTDOCTITLE', width: 70}, - {header: _("ID_ORIGIN_TASK"), dataIndex: 'ORIGIN', width: 70}, - {header: _("ID_CREATED_BY"), dataIndex: 'CREATED_BY', width: 70}, - {header: _("ID_CREATE_DATE"), dataIndex: 'CREATE_DATE', width: 70,renderer:startDateRender}, - {header: '', dataIndex: 'DELETE_FILE', width: 30,renderer:renderDeleteFile} - + {dataIndex: "TITLE", header: _("ID_TITLE_FIELD"), sortable: true, width: 70}, + {dataIndex: "OUTDOCTITLE", header: _("ID_OUTPUT_DOCUMENT"), sortable: true, width: 70}, + {dataIndex: "ORIGIN", header: _("ID_ORIGIN_TASK"), sortable: true, width: 70}, + {dataIndex: "CREATED_BY", header: _("ID_CREATED_BY"), sortable: true, width: 70}, + {dataIndex: "CREATE_DATE", header: _("ID_CREATE_DATE"), sortable: true, width: 70, renderer: startDateRender}, + {dataIndex: "DELETE_FILE", header: _("ID_ACTIONS"), sortable: false, menuDisabled: true, hideable: false, width: 30, align: "center", renderer: renderDeleteFile} ] }), store: store, @@ -360,12 +358,12 @@ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } @@ -434,12 +432,12 @@ icon: Ext.MessageBox.ERROR, buttons: Ext.MessageBox.OK, fn : function(btn) { - try + try { prnt = parent.parent; top.location = top.location; } - catch (err) + catch (err) { parent.location = parent.location; } diff --git a/workflow/engine/templates/cases/open.js b/workflow/engine/templates/cases/open.js index 15979b6d4..bc00723d5 100755 --- a/workflow/engine/templates/cases/open.js +++ b/workflow/engine/templates/cases/open.js @@ -367,7 +367,7 @@ Ext.onReady(function(){ frameConfig:{name:'openCaseFrame', id:'openCaseFrame'}, defaultSrc : uri, loadMask:{msg: _('ID_LOADING_GRID') }, - bodyStyle:{height: (PMExt.getBrowser().screen.height-60) + 'px', overflow:'auto'}, + bodyStyle:{height: (PMExt.getBrowser().screen.height-60) + 'px', overflow:'hidden'}, width:screenWidth } @@ -1516,7 +1516,7 @@ Ext.onReady(function(){ if (name == "generatedDocuments") { var uri = 'casesGenerateDocumentPage_Ajax.php?actionAjax=casesGenerateDocumentPage'; } - + if (name == "processMap" && _PROJECT_TYPE === 'bpmn') { var uri = '../designer?prj_uid=' + _PRO_UID + '&prj_readonly=true&app_uid=' + _APP_UID; } diff --git a/workflow/engine/templates/departments/departmentList.js b/workflow/engine/templates/departments/departmentList.js index 825ac207c..2f2bcbc94 100755 --- a/workflow/engine/templates/departments/departmentList.js +++ b/workflow/engine/templates/departments/departmentList.js @@ -383,7 +383,7 @@ SaveEditDepartment = function(){ if (res_ok){ Ext.Ajax.request({ url: 'departments_Ajax', - params: {action: 'updateDepartment', uid: dep_uid, name: dep_name, status: dep_status, manager: dep_manager}, + params: {action: 'updateDepartment', uid: dep_uid, name: dep_name, status: dep_status, manager: dep_manager, parent: dep_parent}, success: function(r,o){ var xtree = Ext.getCmp('treePanel'); xtree.getLoader().load(xtree.root); diff --git a/workflow/engine/templates/enterprise/addonsStore.js b/workflow/engine/templates/enterprise/addonsStore.js index 33bda2d8e..7fabaaa8a 100644 --- a/workflow/engine/templates/enterprise/addonsStore.js +++ b/workflow/engine/templates/enterprise/addonsStore.js @@ -499,6 +499,11 @@ Ext.onReady(function() { "force": true } }); + addonsFeaturesStore.load({ + params: { + "force": true + } + }); Ext.getCmp("refresh-btn").setDisabled(!Ext.getCmp("chkEeInternetConnection").checked); @@ -518,8 +523,9 @@ Ext.onReady(function() { url: "addonsStoreAction", method: "POST" }), - baseParams: {"action": "addonsList" - }, + baseParams: { + "action": "addonsList" + }, //url: "addonsStoreAction?action=addonsList", @@ -608,6 +614,79 @@ Ext.onReady(function() { } }); + + var addonsFeaturesStore = new Ext.data.JsonStore({ + proxy: new Ext.data.HttpProxy({ + url: "addonsStoreAction", + method: "POST" + }), + baseParams: { + "action": "addonsList", + "type" : "features" + }, + autoDestroy: true, + messageProperty: 'error', + storeId: 'addonsFeaturesStore', + root: 'addons', + idProperty: 'id', + sortInfo: { + field: 'nick', + direction: 'ASC' // or 'DESC' (case sensitive for local sorting) + }, + fields: ['id', 'name', 'store', 'nick', 'latest_version', 'version', 'status', + 'type', 'release_type', 'url', 'enabled', 'publisher', 'description', + 'log', 'progress'], + listeners: { + 'beforeload': function(store, options) { + Ext.ComponentMgr.get('loading-features-indicator').setValue(''); + return true; + }, + "exception": function(e, type, action, options, response, arg) { + Ext.ComponentMgr.get('loading-features-indicator').setValue(' '); + }, + "load": function(store, records, options) { + Ext.ComponentMgr.get('loading-features-indicator').setValue(""); + progressWindow.hide(); + store.filterBy(function (record, id) { + if (record.get('type') == 'core') { + coreRecord = record.copy(); + status = record.get('status'); + if (status == "download-start" || status == "download" || status == "install" || status == "install-finish") { + upgradeStatus(record.get('id'), record.get('store'), record); + } + return false; + } + return true; + }); + + if (addonsFeatureGrid.disabled) { + addonsFeatureGrid.enable(); + } + + errors = store.reader.jsonData.errors; + for (var i = 0, n = errors.length; i"; + } + + if (store_errors.length > 0) { + Ext.ComponentMgr.get('loading-features-indicator').setValue(' '); + //storeError(error_msg); + reloadTask.cancel(); + } else { + Ext.ComponentMgr.get('loading-features-indicator').setValue(' '); + } + } + } + }); + var upgradeStore = new Ext.data.Store({ recordType: addonsStore.recordType }); @@ -930,8 +1009,8 @@ Ext.onReady(function() { var pnlSetup = new Ext.FormPanel({ frame: true, title: _('ID_SETUP_WEBSERVICES'), - height: 188, - bodyStyle: "padding: 5px 5px 5px 5px;", + height: 178, + //bodyStyle: "padding: 5px 5px 5px 5px;", disabled: !licensed, items: [ @@ -966,7 +1045,7 @@ Ext.onReady(function() { }); var pnlSystem = new Ext.Container({ - autoEl: "div", + //autoEl: "div", //width: 550, anchor: "right 50%", //items: [pnlUpgrade, pnlSetup] @@ -976,62 +1055,62 @@ Ext.onReady(function() { var licensePanel = new Ext.FormPanel( { frame: true, title: _('ID_YOUR_LICENSE'), - labelWidth: 150, + labelWidth: 130, labelAlign: "right", //width : '50%', anchor: "right 50%", - bodyStyle: "padding: 5px 5px 5px 5px;", + //bodyStyle: "padding: 5px 5px 5px 5px;", defaultType: "displayfield", autoHeight: true, items: [ - { - id: "license_name", - fieldLabel: _('ID_CURRENT_LICENSE'), - value: license_name - }, - { - id: "license_server", - fieldLabel: _('ID_LICENSE_SERVER'), - value: license_server - }, - { - id: "license_message", - fieldLabel:_('ID_STATUS'), - hidden: licensed, - hideLabel: licensed, - value: ""+license_message+" ("+license_start_date+"/"+license_end_date+")
"+license_user - }, - - { - id: "license_user", - fieldLabel: _('ID_ISSUED_TO'), - value: license_user, - hidden: !licensed, - hideLabel: !licensed - }, - - { - id: "license_expires", - fieldLabel: _('ID_EXPIRES'), - value: license_expires+'/'+license_span+" ("+license_start_date+" / "+license_end_date+")", - hidden: !licensed, - hideLabel: !licensed - } - ], - buttons : [ - { - text: _('ID_IMPORT_LICENSE'), - disable: false, - handler: function() { - addLicenseWindow.show(); - } - }, - { - text : _('ID_RENEW'), - hidden: true, - disabled : true - } + { + id: "license_name", + fieldLabel: _('ID_CURRENT_LICENSE'), + value: license_name + }, + { + id: "license_server", + fieldLabel: _('ID_LICENSE_SERVER'), + value: license_server + }, + { + id: "license_message", + fieldLabel:_('ID_STATUS'), + hidden: licensed, + hideLabel: licensed, + value: ""+license_message+" ("+license_start_date+"/"+license_end_date+")
"+license_user + }, + + { + id: "license_user", + fieldLabel: _('ID_ISSUED_TO'), + value: license_user, + hidden: !licensed, + hideLabel: !licensed + }, + + { + id: "license_expires", + fieldLabel: _('ID_EXPIRES'), + value: license_expires+'/'+license_span+" ("+license_start_date+" / "+license_end_date+")", + hidden: !licensed, + hideLabel: !licensed + } + ], + buttons : [ + { + text: _('ID_IMPORT_LICENSE'), + disable: false, + handler: function() { + addLicenseWindow.show(); + } + }, + { + text : _('ID_RENEW'), + hidden: true, + disabled : true + } ] }); @@ -1178,257 +1257,427 @@ Ext.onReady(function() { items: [btnEnable, btnDisable, btnAdmin] }); - var addonsGrid = new Ext.grid.GridPanel({ - store: addonsStore, - colspan: 2, - flex: 1, - padding: 5, - disabled: !licensed, - columns: [ - expander, - { - id : 'icon-column', - header : '', - width : 30, - //sortable : true, - menuDisabled: true, - hideable : false, - dataIndex: 'status', - renderer : function (val, metadata, record, rowIndex, colIndex, store) { - return ""; - } - }, - { - id :'nick-column', - header : _('ID_NAME'), - //width : 160, - //sortable : true, - menuDisabled: true, - dataIndex: 'nick', - renderer: function (val, metadata, record, rowIndex, colIndex, store) { - if (record.get('release_type') == 'beta') { - return val + " (Beta)"; - } else if (record.get('release_type') == 'localRegistry') { - return val + " (Local)"; - } else { - return val; - } - } - }, - { - id : 'publisher-column', - header : _('ID_PUBLISHER'), - //sortable : true, - menuDisabled: true, - dataIndex: 'publisher' - }, - { - id : 'version-column', - header : _('ID_VERSION'), - //width : 160, - //sortable : true, - menuDisabled: true, - dataIndex: 'version' - }, - { - id : 'latest-version-column', - header : _('ID_LATEST_VERSION'), - //width : 160, - //sortable : true, - menuDisabled: true, - dataIndex: 'latest_version' - }, - { - id : 'enabled-column', - header : _('ID_ENABLED'), - width : 60, - //sortable : true, - menuDisabled: true, - dataIndex: 'enabled', - renderer: function (val) { - if (val === true) { - return ""; - } else if (val === false) { - return ""; - } - return ''; - } - }, - { - id : "status", - header : "", - width : 120, - //sortable : true, - menuDisabled: true, - hideable : false, - dataIndex: "status", - renderer: function (val) { - var str = ""; - var text = ""; - - switch (val) { - case "available": text = _('ID_BUY_NOW'); break; - case "installed": text = _('ID_INSTALLED'); break; - case "ready": text = _('ID_INSTALL_NOW'); break; - case "upgrade": text = _('ID_UPGRADE_NOW'); break; - case "download": text = _('ID_CANCEL'); break; - case "install": text = _('ID_INSTALLING'); break; - case "cancel": text = _('ID_CANCELLING'); break; - case "disabled": text = _('ID_DISABLED'); break; - case "download-start": text = ""; break; - default: text = val; break; - } - - switch (val) { - case "available": - case "ready": - case "upgrade": - case "download": - case "install": - case "cancel": - case "download-start": - str = "
" + text + "
"; - break; - - case "installed": - case "disabled": - str = "
" + text + "
"; - break; - - default: - str = "
" + text + "
"; - break; - } - - return (str); - } - } - ], - tbar:[/*{ - text:'Install', - tooltip:'Install this addon', - //iconCls:'add', - handler: function(b, e) { - record = addonsGrid.getSelectionModel().getSelected(); - console.log(record.get('name') + ' ' + record.get('store')); - installAddon(record.get('name'), record.get('store')); - } - }, - btnUninstall, - '-',*/ - btnEnable, - btnDisable, - btnAdmin, - '-', - { - id: "import-btn", - text: _('ID_INSTALL_FROM_FILE'), - tooltip: _('ID_INSTALL_FROM_FILE_PLUGIN_TIP'), - iconCls:"button_menu_ext ss_sprite ss_application_add", - - //ref: "../removeButton", - disabled: false, - handler: function () { - var sw = 1; - var msg = ""; - if (sw == 1 && PATH_PLUGINS_WRITABLE == 0) { - sw = 0; - msg = PATH_PLUGINS_WRITABLE_MESSAGE; - } - if (sw == 1) { - addPluginWindow.show(); - } else { - Ext.MessageBox.alert(_('ID_WARNING'), msg); - } - } - }, - '-', - { - id: 'refresh-btn', - text:_('ID_REFRESH_LABEL'), - iconCls:'button_menu_ext ss_sprite ss_database_refresh', - tooltip: _('ID_REFRESH_LABEL_PLUGIN_TIP'), - disabled: (INTERNET_CONNECTION == 1)? false : true, - handler: function (b, e) { - reloadTask.cancel(); - addonsStore.load({ - params: { - "force": true - } - }); - } - }, - '->', - { - xtype:"displayfield", - id:'loading-indicator' - } - ], - plugins: expander, - collapsible: false, - animCollapse: false, - stripeRows: true, - autoExpandColumn: 'nick-column', - title: _('ID_ENTERPRISE_PLUGINS'), - sm: new Ext.grid.RowSelectionModel({ - singleSelect:true, - listeners: { - selectionchange: function (sel) { - if (sel.getCount() == 0 || sel.getSelected().get("name") == "enterprise") { - //btnUninstall.setDisabled(true); - btnEnable.setDisabled(true); - btnDisable.setDisabled(true); - btnAdmin.setDisabled(true); - } else { - record = sel.getSelected(); - - //btnUninstall.setDisabled(!(record.get("status") == "installed" || record.get("status") == "upgrade" || record.get("status") == "disabled")); - btnEnable.setDisabled(!(record.get("enabled") === false)); - btnDisable.setDisabled(!(record.get("enabled") === true)); - btnAdmin.setDisabled(!(record.get("enabled") === true)); - } - } - } - }), - //config options for stateful behavior - stateful: true, - stateId: "grid", - listeners: { - "cellclick": function (grid, rowIndex, columnIndex, e) { - var record = grid.getStore().getAt(rowIndex); - var fieldName = grid.getColumnModel().getDataIndex(columnIndex); - //var data = record.get(fieldName); - - if (fieldName != "status") { - return; - } - - switch (record.get("status")) { - case "upgrade": - case "ready": - if (INTERNET_CONNECTION == 1) { - installAddon(record.get("id"), record.get("store")); - } else { - Ext.MessageBox.alert(_('ID_INFORMATION'), _('ID_NO_INTERNET_CONECTION')); + var addonsGrid = new Ext.grid.GridPanel({ + store: addonsStore, + colspan: 2, + flex: 1, + padding: 5, + //anchor : '100%', + //height: 300, + autoHeight : true, + disabled: !licensed, + columns: [ + expander, + { + id : 'icon-column', + header : '', + width : 30, + //sortable : true, + menuDisabled: true, + hideable : false, + dataIndex: 'status', + renderer : function (val, metadata, record, rowIndex, colIndex, store) { + return ""; } - break; - case "download": - Ext.Ajax.request({ - url: "addonsStoreAction", - params: { - "action": "cancel", - "addon": record.get("id"), - "store": record.get("store") + }, + { + id :'nick-column', + header : _('ID_NAME'), + width : 160, + //sortable : true, + menuDisabled: true, + dataIndex: 'nick', + renderer: function (val, metadata, record, rowIndex, colIndex, store) { + if (record.get('release_type') == 'beta') { + return val + " (Beta)"; + } else if (record.get('release_type') == 'localRegistry') { + return val + " (Local)"; + } else { + return val; + } + } + }, + { + id : 'publisher-column', + header : _('ID_PUBLISHER'), + //sortable : true, + menuDisabled: true, + dataIndex: 'publisher' + }, + { + id : 'version-column', + header : _('ID_VERSION'), + //width : 160, + //sortable : true, + menuDisabled: true, + dataIndex: 'version' + }, + { + id : 'latest-version-column', + header : _('ID_LATEST_VERSION'), + //width : 160, + //sortable : true, + menuDisabled: true, + dataIndex: 'latest_version' + }, + { + id : 'enabled-column', + header : _('ID_ENABLED'), + width : 60, + //sortable : true, + menuDisabled: true, + dataIndex: 'enabled', + renderer: function (val) { + if (val === true) { + return ""; + } else if (val === false) { + return ""; } - }); - break; - case "available": - addonAvailable(record.get("id")); - break; + return ''; + } + }, + { + id : "status", + header : "", + width : 120, + //sortable : true, + menuDisabled: true, + hideable : false, + dataIndex: "status", + renderer: function (val) { + var str = ""; + var text = ""; + + switch (val) { + case "available": text = _('ID_BUY_NOW'); break; + case "installed": text = _('ID_INSTALLED'); break; + case "ready": text = _('ID_INSTALL_NOW'); break; + case "upgrade": text = _('ID_UPGRADE_NOW'); break; + case "download": text = _('ID_CANCEL'); break; + case "install": text = _('ID_INSTALLING'); break; + case "cancel": text = _('ID_CANCELLING'); break; + case "disabled": text = _('ID_DISABLED'); break; + case "download-start": text = ""; break; + default: text = val; break; + } + + switch (val) { + case "available": + case "ready": + case "upgrade": + case "download": + case "install": + case "cancel": + case "download-start": + str = "
" + text + "
"; + break; + + case "installed": + case "disabled": + str = "
" + text + "
"; + break; + + default: + str = "
" + text + "
"; + break; + } + + return (str); + } + } + ], + tbar:[ + /*{ + text:'Install', + tooltip:'Install this addon', + //iconCls:'add', + handler: function(b, e) { + record = addonsGrid.getSelectionModel().getSelected(); + console.log(record.get('name') + ' ' + record.get('store')); + installAddon(record.get('name'), record.get('store')); + } + }, + btnUninstall, + '-',*/ + btnEnable, + btnDisable, + btnAdmin, + '-', + { + id: "import-btn", + text: _('ID_INSTALL_FROM_FILE'), + tooltip: _('ID_INSTALL_FROM_FILE_PLUGIN_TIP'), + iconCls:"button_menu_ext ss_sprite ss_application_add", + + //ref: "../removeButton", + disabled: false, + handler: function () { + var sw = 1; + var msg = ""; + if (sw == 1 && PATH_PLUGINS_WRITABLE == 0) { + sw = 0; + msg = PATH_PLUGINS_WRITABLE_MESSAGE; + } + if (sw == 1) { + addPluginWindow.show(); + } else { + Ext.MessageBox.alert(_('ID_WARNING'), msg); + } + } + }, + '-', + { + id: 'refresh-btn', + text:_('ID_REFRESH_LABEL'), + iconCls:'button_menu_ext ss_sprite ss_database_refresh', + tooltip: _('ID_REFRESH_LABEL_PLUGIN_TIP'), + disabled: (INTERNET_CONNECTION == 1)? false : true, + handler: function (b, e) { + reloadTask.cancel(); + addonsStore.load({ + params: { + "force": true + } + }); + } + }, + '->', + { + xtype:"displayfield", + id:'loading-indicator' + } + ], + plugins: expander, + collapsible: false, + animCollapse: false, + stripeRows: true, + autoExpandColumn: 'nick-column', + //title: _('ID_ENTERPRISE_PLUGINS'), + sm: new Ext.grid.RowSelectionModel({ + singleSelect:true, + listeners: { + selectionchange: function (sel) { + if (sel.getCount() == 0 || sel.getSelected().get("name") == "enterprise") { + //btnUninstall.setDisabled(true); + btnEnable.setDisabled(true); + btnDisable.setDisabled(true); + btnAdmin.setDisabled(true); + } else { + record = sel.getSelected(); + //btnUninstall.setDisabled(!(record.get("status") == "installed" || record.get("status") == "upgrade" || record.get("status") == "disabled")); + btnEnable.setDisabled(!(record.get("enabled") === false)); + btnDisable.setDisabled(!(record.get("enabled") === true)); + btnAdmin.setDisabled(!(record.get("enabled") === true)); + } + } + } + }), + //config options for stateful behavior + stateful: true, + stateId: "grid", + listeners: { + "cellclick": function (grid, rowIndex, columnIndex, e) { + var record = grid.getStore().getAt(rowIndex); + var fieldName = grid.getColumnModel().getDataIndex(columnIndex); + //var data = record.get(fieldName); + + if (fieldName != "status") { + return; + } + + switch (record.get("status")) { + case "upgrade": + case "ready": + if (INTERNET_CONNECTION == 1) { + installAddon(record.get("id"), record.get("store")); + } else { + Ext.MessageBox.alert(_('ID_INFORMATION'), _('ID_NO_INTERNET_CONECTION')); + } + break; + case "download": + Ext.Ajax.request({ + url: "addonsStoreAction", + params: { + "action": "cancel", + "addon": record.get("id"), + "store": record.get("store") + } + }); + break; + case "available": + addonAvailable(record.get("id")); + break; + } + } } - } - } - }); + }); + + // create the Grid Features + var addonsFeatureGrid = new Ext.grid.GridPanel({ + store: addonsFeaturesStore, + colspan: 2, + flex: 1, + padding: 5, + disabled: !licensed, + columns: [ + { + id : 'icon-column-feature', + header : '', + width : 30, + hideable : false, + dataIndex: 'status', + renderer : function (val, metadata, record, rowIndex, colIndex, store) { + return ""; + } + }, + { + id :'nick-column-feature', + header : _('ID_NAME'), + width : 300, + sortable : true, + dataIndex: 'nick', + renderer: function (val, metadata, record, rowIndex, colIndex, store) { + if (record.get('release_type') == 'beta') { + return val + " (Beta)"; + } else if (record.get('release_type') == 'localRegistry') { + return val + " (Local)"; + } else { + return val; + } + } + }, + { + id :'description-column-feature', + header : _('ID_DESCRIPTION'), + width : 400, + dataIndex: 'description' + }, + { + id : 'enabled-column-feature', + header : _('ID_ENABLED'), + width : 60, + dataIndex: 'enabled', + renderer: function (val) { + if (val === true) { + return ""; + } else if (val === false) { + return ""; + } + return ''; + } + }, + { + id : "status-feature", + header : _('ID_STATUS'), + width : 120, + sortable : false, + hideable : false, + dataIndex: "status", + renderer: function (val) { + var str = ""; + var text = ""; + + switch (val) { + case "available": text = _('ID_BUY_NOW'); break; + case "installed": text = _('ID_INSTALLED'); break; + case "ready": text = _('ID_INSTALL_NOW'); break; + case "upgrade": text = _('ID_UPGRADE_NOW'); break; + case "download": text = _('ID_CANCEL'); break; + case "install": text = _('ID_INSTALLING'); break; + case "cancel": text = _('ID_CANCELLING'); break; + case "disabled": text = _('ID_DISABLED'); break; + case "download-start": text = ""; break; + default: text = val; break; + } + + switch (val) { + case "available": + case "ready": + case "upgrade": + case "download": + case "install": + case "cancel": + case "download-start": + str = "
" + text + "
"; + break; + + case "installed": + case "disabled": + str = "
" + text + "
"; + break; + + default: + str = "
" + text + "
"; + break; + } + + return (str); + } + } + ], + stripeRows: true, + autoHeight : true, + stateId: "grid", + tbar: + [ + { + id: 'refresh-btn', + text:_('ID_REFRESH_LABEL'), + iconCls:'button_menu_ext ss_sprite ss_database_refresh', + tooltip: _('ID_REFRESH_LABEL_PLUGIN_TIP'), + disabled: (INTERNET_CONNECTION == 1)? false : true, + handler: function (b, e) { + reloadTask.cancel(); + addonsFeaturesStore.load({ + params: { + "force": true + } + }); + } + }, + '->', + { + xtype:"displayfield", + id:'loading-features-indicator' + } + ], + listeners: { + "cellclick": function (grid, rowIndex, columnIndex, e) { + var record = grid.getStore().getAt(rowIndex); + var fieldName = grid.getColumnModel().getDataIndex(columnIndex); + + if (fieldName != "status") { + return; + } + + switch (record.get("status")) { + case "upgrade": + case "ready": + if (INTERNET_CONNECTION == 1) { + installAddon(record.get("id"), record.get("store")); + } else { + Ext.MessageBox.alert(_('ID_INFORMATION'), _('ID_NO_INTERNET_CONECTION')); + } + break; + case "download": + Ext.Ajax.request({ + url: "addonsStoreAction", + params: { + "action": "cancel", + "addon": record.get("id"), + "store": record.get("store") + } + }); + break; + case "available": + addonAvailable(record.get("id")); + break; + } + } + } + }); + + var topBox = new Ext.Panel({ id:'main-panel-hbox', @@ -1444,28 +1693,47 @@ Ext.onReady(function() { defaults: { frame:true, flex: 1, - height: 210 + height: 182 }, items:[licensePanel, pnlSystem] }); - var fullBox = new Ext.Panel({ - id:'main-panel-vbox', - baseCls:'x-plain', - anchor: "right 100%", - layout:'vbox', - //padding: 10, - //defaultMargins: "5", - layoutConfig: { - align : 'stretch', - pack : 'start' - }, + var tabEnterprise = new Ext.TabPanel({ + activeTab: 0, + //width:600, + anchor: '100%', + height: 370, + plain:true, + defaults:{autoScroll: true}, + items:[{ + title: _('ID_ENTERPRISE_PLUGINS'), + items : addonsGrid + },{ + title: _('ID_ENTERPRISE_FEATURES'), + items : addonsFeatureGrid + } + ] + }); - defaults: { - frame:true - }, - items:[topBox, addonsGrid] - }); + + var fullBox = new Ext.Panel({ + id:'main-panel-vbox', + baseCls:'x-plain', + anchor: "right 100%", + layout:'vbox', + //padding: 10, + //defaultMargins: "5", + layoutConfig: { + align : 'stretch', + pack : 'start' + }, + + defaults: { + frame:true + }, + //items:[topBox, addonsGrid] + items:[topBox, tabEnterprise] + }); /////// addonsGrid.on("rowcontextmenu", @@ -1477,6 +1745,16 @@ Ext.onReady(function() { ); addonsGrid.addListener("rowcontextmenu", onMessageMnuContext, this); + + addonsFeatureGrid.on("rowcontextmenu", + function (grid, rowIndex, evt) { + var sm = grid.getSelectionModel(); + sm.selectRow(rowIndex, sm.isSelected(rowIndex)); + }, + this + ); + + addonsFeatureGrid.addListener("rowcontextmenu", onMessageMnuContext, this); /////// var viewport = new Ext.Viewport({ @@ -1490,6 +1768,7 @@ Ext.onReady(function() { if (licensed) { addonsStore.load(); + addonsFeaturesStore.load(); } }); diff --git a/workflow/engine/templates/groups/groupsList.js b/workflow/engine/templates/groups/groupsList.js index 0ce028370..aa7b53db9 100755 --- a/workflow/engine/templates/groups/groupsList.js +++ b/workflow/engine/templates/groups/groupsList.js @@ -516,7 +516,8 @@ DeleteButtonAction = function() { url: "groups_Ajax", params: { action: "deleteGroup", - GRP_UID: rowSelected.data.GRP_UID + GRP_UID: rowSelected.data.GRP_UID, + GRP_NAME: rowSelected.data.CON_VALUE }, success: function(r,o) { diff --git a/workflow/engine/templates/oauth2/index.html b/workflow/engine/templates/oauth2/index.html index 3c36f7a65..c809ecb7a 100644 --- a/workflow/engine/templates/oauth2/index.html +++ b/workflow/engine/templates/oauth2/index.html @@ -125,7 +125,7 @@ grant_type=password& username=bob& password=secret& - scope=offline_access + scope=*

diff --git a/workflow/engine/templates/pmTables/data.js b/workflow/engine/templates/pmTables/data.js index 85bae78ab..cd31a5661 100755 --- a/workflow/engine/templates/pmTables/data.js +++ b/workflow/engine/templates/pmTables/data.js @@ -180,7 +180,9 @@ Ext.onReady(function(){ dataIndex : tableDef.FIELDS[i].FLD_NAME, width : 95, align : 'center', - renderer : columnRenderer + renderer : function (columnRenderer) { + return Ext.util.Format.htmlEncode(columnRenderer); + } }; if (tableDef.FIELDS[i].FLD_AUTO_INCREMENT != 1) { column.editor = columnEditor diff --git a/workflow/engine/templates/setup/auditLog.js b/workflow/engine/templates/setup/auditLog.js new file mode 100644 index 000000000..924abb1d9 --- /dev/null +++ b/workflow/engine/templates/setup/auditLog.js @@ -0,0 +1,279 @@ +Ext.namespace("audit"); + +audit.application = { + init: function () + { + var loadMaskAudit = new Ext.LoadMask(Ext.getBody(), {msg: _("ID_LOADING_GRID")}); + + auditLogAjax = function (option) + { + var p; + switch (option) { + case "EMPTY": + p = { + "option": option + }; + break; + } + + Ext.Ajax.request({ + url: "auditLogAjax", + method: "POST", + params: p, + + success: function (response, opts) + { + var dataResponse = eval("(" + response.responseText + ")"); //json + + switch (option) { + case "EMPTY": + if (dataResponse.status && dataResponse.status == "OK") { + pagingAudit.moveFirst(); + } + break; + } + } + }); + } + + logView = function () + { + var record = grdpnlMain.getSelectionModel().getSelected(); + + if (typeof record != "undefined") { + var strData = "" + _("ID_DATE_LABEL") + "
" + record.get("DATE") + "
"; + strData = strData + "" + _("ID_USER") + "
" + record.get("WORKSPACE") + "
"; + strData = strData + "" + _("ID_IP") + "
" + record.get("IP") + "
"; + strData = strData + "" + _("ID_ACTION") + "
" + record.get("ACTION") + "
"; + strData = strData + "" + _("ID_DESCRIPTION") + "
" + record.get("DESCRIPTION") + "
"; + + var formItems = Ext.getCmp("frmLogView").form.items; + formItems.items[0].setValue(strData); + } + } + + var pageSize = parseInt(CONFIG.pageSize); + + var storeAudit = new Ext.data.Store({ + proxy: new Ext.data.HttpProxy({ + url: "auditLogAjax", + method: "POST" + }), + + reader: new Ext.data.JsonReader({ + root: "resultRoot", + totalProperty: "resultTotal", + fields: [ + {name: "DATE"}, + {name: "USER"}, + {name: "IP"}, + {name: "ACTION"}, + {name: "DESCRIPTION"} + ] + }), + + listeners: { + beforeload: function (store) + { + loadMaskAudit.show(); + + this.baseParams = { + "option": "LST", + "pageSize": pageSize, + "action": Ext.getCmp("cboAction").getValue(), + "description": Ext.getCmp("fldDescription").getValue(), + "dateFrom": Ext.getCmp("dateFrom").getValue(), + "dateTo": Ext.getCmp("dateTo").getValue() + }; + }, + load: function (store, record, opt) + { + loadMaskAudit.hide(); + } + } + }); + + var storePageSize = new Ext.data.SimpleStore({ + fields: ["size"], + data: [["20"], ["30"], ["40"], ["50"], ["100"]], + autoLoad: true + }); + + var dateFrom = new Ext.form.DateField({ + id: "dateFrom", + format: "Y-m-d", + editable: false, + width: 90, + value: "" + }); + + var dateTo = new Ext.form.DateField({ + id: "dateTo", + format: "Y-m-d", + editable: false, + width: 90, + value: "" + }); + + var fldDescription = new Ext.form.TextField({ + id: "fldDescription", + valueField: "id", + displayField: "value", + emptyText: _('ID_ENTER_SEARCH_TERM'), + value: "", + triggerAction: "all", + mode: "local", + editable: false, + width: 150 + }); + + var storeAction = new Ext.data.ArrayStore({ + idIndex: 0, + fields: ["id", "value"], + data: ACTION + }); + + var cboAction = new Ext.form.ComboBox({ + id: "cboAction", + valueField: "id", + displayField: "value", + value: "ALL", + store: storeAction, + triggerAction: "all", + mode: "local", + editable: false, + width: 150, + listeners: { + select: function (combo, record, index) + { + pagingAudit.moveFirst(); + } + } + }); + + var cboPageSize = new Ext.form.ComboBox({ + id: "cboPageSize", + + mode: "local", + triggerAction: "all", + store: storePageSize, + valueField: "size", + displayField: "size", + width: 50, + editable: false, + listeners: { + select: function (combo, record, index) + { + pageSize = parseInt(record.data["size"]); + pagingAudit.pageSize = pageSize; + pagingAudit.moveFirst(); + } + } + }); + + var pagingAudit = new Ext.PagingToolbar({ + id: "pagingAudit", + pageSize: pageSize, + store: storeAudit, + displayInfo: true, + displayMsg: _("ID_CRON_GRID_PAGE_DISPLAYING_MESSAGE"), + emptyMsg: _("ID_NO_RECORDS_FOUND"), + items: ["-", _("ID_PAGE_SIZE") + " ", cboPageSize] + }); + + var cmodel = new Ext.grid.ColumnModel({ + defaults: { + width: 50, + sortable: true + }, + columns: [ + {id: "ID", dataIndex: "DATE", hidden: true, hideable: false}, + {header: _("ID_DATE_LABEL"), dataIndex: "DATE", width: 15}, + {header: _("ID_USER"), dataIndex: "USER", width: 15}, + {header: _("ID_IP"), dataIndex: "IP", width: 10}, + {header: _("ID_ACTION"), dataIndex: "ACTION", width: 15}, + {header: _("ID_DESCRIPTION"), dataIndex: "DESCRIPTION"} + ] + }); + + var smodel = new Ext.grid.RowSelectionModel({ + singleSelect: true, + listeners: { + rowselect: function (sm) + { + }, + rowdeselect: function (sm) + { + } + } + }); + + var grdpnlMain = new Ext.grid.GridPanel({ + id: "grdpnlMain", + + store: storeAudit, + colModel: cmodel, + selModel: smodel, + + columnLines: true, + viewConfig: {forceFit: true}, + enableColumnResize: true, + enableHdMenu: false, + tbar: [ + "->", + {xtype: "tbtext", text: _("ID_ACTION") + " "}, + cboAction, + "-", + {xtype: "tbtext", text: _("ID_DESCRIPTION") + " "}, + fldDescription, + "-", + {xtype: "tbtext", text: _("ID_FROM") + " "}, + dateFrom, + {xtype: "tbtext", text: _("ID_TO") + " "}, + dateTo, + { + xtype: "button", + text: _("ID_RESET_FILTERS"), + + handler: function () + { + Ext.getCmp("dateFrom").reset(), + Ext.getCmp("dateTo").reset(), + Ext.getCmp("fldDescription").reset() + } + }, + "-", + { + xtype: "button", + text: _("ID_SEARCH"), + + handler: function () + { + pagingAudit.moveFirst(); + } + } + ], + bbar: pagingAudit, + border: false, + title: _("ID_AUDIT_LOG_ACTIONS"), + listeners: { + rowdblclick: function () + { + logView(); + } + } + }); + + storeAudit.load(); + + cboPageSize.setValue(pageSize); + + var viewport = new Ext.Viewport({ + layout: "fit", + autoScroll: false, + items: [grdpnlMain] + }); + } +} + +Ext.onReady(audit.application.init, audit.application); \ No newline at end of file diff --git a/workflow/engine/templates/setup/auditLogConfig.js b/workflow/engine/templates/setup/auditLogConfig.js new file mode 100644 index 000000000..1457bd245 --- /dev/null +++ b/workflow/engine/templates/setup/auditLogConfig.js @@ -0,0 +1,86 @@ +Ext.onReady(function() { + auditLogFields = new Ext.form.FieldSet({ + + title : _('ID_AUDITLOG_DISPLAY'), + items : [ + { + xtype : 'checkbox', + checked : auditLogChecked, + name : 'acceptAL', + fieldLabel : _('ID_TERMS_USE'), + hideLabel : true, + id : 'ch_ii', + style : 'margin-top:15px', + boxLabel : '' + _('ID_ENABLE_AUDIT_LOG') + '', + listeners : { + check : function(){ + Ext.getCmp('btn_save').enable(); + } + } + }, + { + xtype : 'box', + autoEl : { tag : 'div', + html : '
' + _('ID_AUDIT_LOG_DETAILS_1') + + '
' + _('ID_AUDIT_LOG_DETAILS_2') + }, + style : 'margin-left:20px' + } + ], + buttons : [{ + id : 'btn_save', + text : _('ID_SAVE_SETTINGS'), + disabled: true, + handler : saveOption + }] + }); + + + var frm = new Ext.FormPanel( { + title : ' ', + id : 'frmAuditLog', + labelWidth : 150, + width : 600, + labelAlign : 'right', + autoScroll : true, + bodyStyle : 'padding:2px', + waitMsgTarget : true, + frame : true, + + defaults: { + allowBlank : false, + msgTarget : 'side', + align : 'center' + }, + items : [ auditLogFields ] + + }); + //render to process-panel + frm.render(document.body); +}); + +function saveOption() +{ + Ext.getCmp('btn_save').disable(); + Ext.getCmp('frmAuditLog').getForm().submit( { + url : 'auditLogConfigAjax?action=saveOption', + waitMsg : _('ID_SAVING_PROCESS'), + waitTitle : " ", + timeout : 36000, + success : function(obj, resp) { + //nothing to do + response = Ext.decode(resp.response.responseText); + if (response.enable) { + parent.PMExt.notify(_('ID_AUDITLOG_DISPLAY'), _('ID_AUDIT_LOG_ENABLED')); + } + else { + parent.PMExt.notify(_('ID_AUDITLOG_DISPLAY'), _('ID_AUDIT_LOG_DISABLED')); + } + }, + failure : function(obj, resp) { + Ext.Msg.alert( _('ID_ERROR'), resp.result.msg); + } + }); +} + + diff --git a/workflow/engine/xmlform/cases/cases_AttachInputDocumentGeneral.xml b/workflow/engine/xmlform/cases/cases_AttachInputDocumentGeneral.xml index 8c4782a52..21bc9a536 100755 --- a/workflow/engine/xmlform/cases/cases_AttachInputDocumentGeneral.xml +++ b/workflow/engine/xmlform/cases/cases_AttachInputDocumentGeneral.xml @@ -10,7 +10,7 @@ - Max size accepted + Max. file size diff --git a/workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml b/workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml index 289f9dab5..d831de2b8 100755 --- a/workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml +++ b/workflow/engine/xmlform/dynaforms/dynaforms_WebEntry.xml @@ -45,6 +45,7 @@ =1){ + showRowById("SEARCH"); + getField('SEARCH').disabled = false; //webEntry_generate(PRO_UID); } else { @@ -129,7 +147,7 @@ var tasksName = getField('TASKS')[getField('TASKS').selectedIndex].innerHTML; } - + } var webEntry_generate = function(PRO_UID, TASKS, DYNAFORM) { @@ -144,7 +162,7 @@ var webEntry_generate = function(PRO_UID, TASKS, DYNAFORM) { } else { if(odynaform.value=='') - { alert('This process does not have an assigned dynaform'); + { alert('This process does not have an assigned dynaform'); } else { sw=1; @@ -180,7 +198,7 @@ var webEntry_generate = function(PRO_UID, TASKS, DYNAFORM) { scs.evalScript(); }.extend(this); oRPC.make(); - } + } else { var k = new leimnud.module.rpc.xmlhttp({ @@ -188,28 +206,28 @@ var webEntry_generate = function(PRO_UID, TASKS, DYNAFORM) { async : true, method: 'POST', args : "action=webEntry_Val_Assig&data="+{ - PRO_UID:PRO_UID, - TASKS:getField('TASKS').value, + PRO_UID:PRO_UID, + TASKS:getField('TASKS').value, DYNAFORM:getField('DYNAFORM').value }.toJSONString() }); - + k.callback = function(rpc){ if(rpc.xmlhttp.responseText!=1){ msgBox(G_STRINGS.WEBEN_ONLY_BALANCEDJS,"alert"); - } + } }.extend(this); - k.make(); - + k.make(); + var oRPC = new leimnud.module.rpc.xmlhttp({ url : '../processes/processes_Ajax', async : true, method: 'POST', args : "action=webEntry_generate&data="+{PRO_UID:PRO_UID, TASKS:getField('TASKS').value, DYNAFORM:getField('DYNAFORM').value, WE_TYPE:getField('WE_TYPE').value, WS_USER:getField('WS_USER').value, WS_PASS:getField('WS_PASS').value, WS_ROUNDROBIN:getField('WS_ROUNDROBIN').value, WE_USR:getField('WE_USR').value }.toJSONString() - }); + }); oRPC.make(); - oPanel.remove(); - Pm.tmp.editProcessPanel.clearContent(); + oPanel.remove(); + Pm.tmp.editProcessPanel.clearContent(); Pm.tmp.editProcessPanel.loader.show(); var r = new leimnud.module.rpc.xmlhttp({ url:'../processes/processes_Ajax', @@ -222,7 +240,7 @@ var webEntry_generate = function(PRO_UID, TASKS, DYNAFORM) { Pm.tmp.editProcessPanel.loader.hide(); var scs = rpc.xmlhttp.responseText.extractScript(); Pm.tmp.editProcessPanel.addContent(rpc.xmlhttp.responseText); - scs.evalScript(); + scs.evalScript(); }.extend(this,panel); r.make(); } diff --git a/workflow/engine/xmlform/dynaforms/fields/date.html b/workflow/engine/xmlform/dynaforms/fields/date.html index cf4122849..590c9157c 100755 --- a/workflow/engine/xmlform/dynaforms/fields/date.html +++ b/workflow/engine/xmlform/dynaforms/fields/date.html @@ -44,12 +44,12 @@
- + - + diff --git a/workflow/engine/xmlform/inputdocs/inputdocs_Edit.xml b/workflow/engine/xmlform/inputdocs/inputdocs_Edit.xml index 1f192985a..882ad19d7 100755 --- a/workflow/engine/xmlform/inputdocs/inputdocs_Edit.xml +++ b/workflow/engine/xmlform/inputdocs/inputdocs_Edit.xml @@ -27,7 +27,7 @@ - + diff --git a/workflow/public_html/images/Audit.png b/workflow/public_html/images/Audit.png new file mode 100644 index 000000000..d7795eaa8 Binary files /dev/null and b/workflow/public_html/images/Audit.png differ
{$form.PME_SUBTITLE3}
{$PME_STARTDATE}* {$PME_STARTDATE} {$form.PME_STARTDATE}
{$PME_ENDDATE}* {$PME_ENDDATE} {$form.PME_ENDDATE}