From 351432e92fe777af2727e932a5decc928b770ce4 Mon Sep 17 00:00:00 2001 From: norahmollo Date: Tue, 7 Oct 2014 15:58:46 -0400 Subject: [PATCH 01/13] BUG-12021 Audit Log Improvements Audit Log --- gulliver/system/class.g.php | 25 +- .../classes/model/AuthenticationSource.php | 4 + rbac/engine/classes/model/Roles.php | 27 +- workflow/engine/classes/class.groups.php | 8 + .../classes/class.serverConfiguration.php | 47 ++++ .../engine/classes/model/AdditionalTables.php | 3 + .../classes/model/CalendarDefinition.php | 6 + .../engine/classes/model/DashletInstance.php | 9 + workflow/engine/classes/model/Department.php | 31 ++- workflow/engine/classes/model/GroupUser.php | 9 + workflow/engine/classes/model/Groupwf.php | 20 ++ workflow/engine/classes/model/Language.php | 3 + .../engine/classes/model/ProcessCategory.php | 16 ++ workflow/engine/classes/model/Translation.php | 1 + workflow/engine/controllers/adminProxy.php | 15 +- workflow/engine/controllers/pmTablesProxy.php | 12 +- workflow/engine/menus/setup.php | 7 + .../methods/cases/proxyPMTablesFieldList.php | 21 ++ .../methods/departments/departments_Ajax.php | 9 + .../methods/enterprise/addonsStoreAction.php | 7 + .../methods/enterprise/processMakerAjax.php | 1 + .../engine/methods/groups/groups_Ajax.php | 5 + .../processCategory/processCategory_Ajax.php | 4 + .../engine/methods/setup/appCacheViewAjax.php | 2 +- workflow/engine/methods/setup/auditLog.php | 18 ++ .../engine/methods/setup/auditLogAjax.php | 140 ++++++++++ .../engine/methods/setup/auditLogConfig.php | 16 ++ .../methods/setup/auditLogConfigAjax.php | 33 +++ .../methods/setup/clearCompiledAjax.php | 6 + workflow/engine/methods/setup/cronAjax.php | 1 + .../methods/setup/environmentSettingsAjax.php | 2 + .../methods/setup/loginSettingsAjax.php | 3 + .../methods/setup/processHeartBeatAjax.php | 2 + workflow/engine/methods/setup/skin_Ajax.php | 5 +- workflow/engine/methods/users/usersAjax.php | 2 + workflow/engine/methods/users/users_Ajax.php | 7 +- .../templates/departments/departmentList.js | 2 +- .../engine/templates/groups/groupsList.js | 3 +- workflow/engine/templates/setup/auditLog.js | 248 ++++++++++++++++++ .../engine/templates/setup/auditLogConfig.js | 86 ++++++ 40 files changed, 847 insertions(+), 19 deletions(-) create mode 100644 workflow/engine/methods/setup/auditLog.php create mode 100644 workflow/engine/methods/setup/auditLogAjax.php create mode 100644 workflow/engine/methods/setup/auditLogConfig.php create mode 100644 workflow/engine/methods/setup/auditLogConfigAjax.php create mode 100644 workflow/engine/templates/setup/auditLog.js create mode 100644 workflow/engine/templates/setup/auditLogConfig.js diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 75f707ec5..b4022ed90 100755 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5271,6 +5271,21 @@ class G $oLogger->write($message); } + /** + */ + public function auditLog($actionToLog, $valueToLog = "") + { + $oServerConf = & serverConf::getSingleton(); + $sflagAudit = $oServerConf->getAuditLogProperty( 'AL_OPTION', SYS_SYS ); + + if ($sflagAudit) { + $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 ."|". $username . "|" . $fullname ."|" . $actionToLog . "|" . $valueToLog, PATH_DATA, "audit.log"); + } + } + /** * Changes all keys in an array and sub-arrays * @@ -5347,8 +5362,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; @@ -5376,7 +5391,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 +5399,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 +5491,7 @@ class G if ($docType[1] != $allowedDocTypes){ $flag = 1; } else { - $res->status = true; + $res->status = true; return $res; } break; diff --git a/rbac/engine/classes/model/AuthenticationSource.php b/rbac/engine/classes/model/AuthenticationSource.php index 43d0c99de..ccc97e590 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", $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", $aData['AUTH_SOURCE_NAME']." (".$aData['AUTH_SOURCE_UID'].") "); return $iResult; } else { @@ -126,10 +128,12 @@ class AuthenticationSource extends BaseAuthenticationSource { $oConnection = Propel::getConnection(AuthenticationSourcePeer::DATABASE_NAME); try { $oAuthenticationSource = AuthenticationSourcePeer::retrieveByPK($sUID); + $nameAuthenticationSource = $this->load($sUID); if (!is_null($oAuthenticationSource)) { $oConnection->begin(); $iResult = $oAuthenticationSource->delete(); $oConnection->commit(); + G::auditLog("DeleteAuthSource", $nameAuthenticationSource." (".$sUID.") "); return $iResult; } else { diff --git a/rbac/engine/classes/model/Roles.php b/rbac/engine/classes/model/Roles.php index 480179dbc..d0a30f36e 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", $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", $rol_name." (".$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", $rol_name['ROL_NAME']." (".$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("AssignUsersToRole", "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("DeleteUsersToRole", "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.") to Role ".$role['ROL_NAME']." (".$ROL_UID.") "); } function numUsersWithRole($ROL_UID) { diff --git a/workflow/engine/classes/class.groups.php b/workflow/engine/classes/class.groups.php index ccf9b0333..7c73bb19a 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("AssignUsersToGroup", "Assign user ". $usrName['USR_USERNAME'] ." (".$UsrUid.") to group ".$grpName['CON_VALUE']." (".$GrpUid.") "); } } catch (exception $oError) { throw ($oError); diff --git a/workflow/engine/classes/class.serverConfiguration.php b/workflow/engine/classes/class.serverConfiguration.php index 79fd692e8..d70d57123 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(); @@ -465,6 +466,52 @@ 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); diff --git a/workflow/engine/classes/model/AdditionalTables.php b/workflow/engine/classes/model/AdditionalTables.php index 07ce84404..d35abcfca 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", $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", $aData['ADD_TAB_NAME']." (".$aData['ADD_TAB_UID'].") "); } else { $sMessage = ''; $aValidationFailures = $oAdditionalTables->getValidationFailures(); diff --git a/workflow/engine/classes/model/CalendarDefinition.php b/workflow/engine/classes/model/CalendarDefinition.php index 37d3e29bf..31856b9c6 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", $aData['CALENDAR_NAME']); + } else { + G::auditLog("UpdateCalendar", $aData['CALENDAR_NAME']." (".$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", $deletedCalendar." (".$CalendarUid.") "); } else { // Something went wrong. We can now get the validationFailures and handle them. $msg = ''; diff --git a/workflow/engine/classes/model/DashletInstance.php b/workflow/engine/classes/model/DashletInstance.php index b4c504e25..585e18794 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, $dashletData['DAS_INS_TITLE']." (".$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", $dashletData['DAS_INS_TITLE']." (".$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..66512eb81 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, $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", $dptoTitle['DEPO_TITLE']." (".$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("AssignUsersToDepartament", "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..226d2da4f 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("AssignUsersToGroup", "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..b9904aa30 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", $languageID); + return $results; } catch (Exception $oError) { throw ($oError); @@ -549,6 +551,7 @@ class Language extends BaseLanguage } } //end foreach } + G::auditLog("ExportLanguage", $_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..82bc45a41 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", $locale); } } diff --git a/workflow/engine/controllers/adminProxy.php b/workflow/engine/controllers/adminProxy.php index 5afd4ee74..3d3abfc60 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'; + + 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; @@ -1065,7 +1073,7 @@ class adminProxy extends HttpProxyController } elseif ($_FILES['img']['type'] != '') { $failed = "1"; } - + G::auditLog("UploadLogo", $fileName); 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", $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", $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/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index 7ba429ffd..979bb16e1 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['ADD_TAB_NAME']." (".$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("AddDataInPMTable", $table['ADD_TAB_NAME']." (".$table['ADD_TAB_UID'].") "); $primaryKeysValues = array (); foreach ($primaryKeys as $primaryKey) { $method = 'get' . AdditionalTables::getPHPName( $primaryKey['FLD_NAME'] ); @@ -580,6 +581,10 @@ class pmTablesProxy extends HttpProxyController $result = $this->_dataUpdate( $row, $primaryKeys ); } + if ($result) { + G::auditLog("UpdateDataInPMTable", $table['ADD_TAB_NAME']." (".$table['ADD_TAB_UID'].") "); + } + $this->success = $result; $this->message = $result ? G::loadTranslation( 'ID_UPDATED_SUCCESSFULLY' ) : G::loadTranslation( 'ID_UPDATE_FAILED' ); } @@ -604,6 +609,8 @@ class pmTablesProxy extends HttpProxyController require_once $sPath . $this->className . '.php'; + G::auditLog("DeleteDataInPMTable", $table['ADD_TAB_NAME']." (".$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 +685,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 +927,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 +1113,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/menus/setup.php b/workflow/engine/menus/setup.php index c107afcbf..13821b0e0 100755 --- a/workflow/engine/menus/setup.php +++ b/workflow/engine/menus/setup.php @@ -26,6 +26,9 @@ global $G_TMP_MENU; global $RBAC; $partnerFlag = (defined('PARTNER_FLAG')) ? PARTNER_FLAG : false; +$oServerConf = & serverConf::getSingleton(); +$sAudit = $oServerConf->getAuditLogProperty( 'AL_OPTION', SYS_SYS ); + if ($RBAC->userCanAccess('PM_SETUP') == 1 ) { //settings options // $G_TMP_MENU->AddIdRawOption('LOGO', 'uplogo', G::LoadTranslation('ID_LOGO'), 'icon-pmlogo.png', '', 'settings'); @@ -95,12 +98,16 @@ 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) { + $G_TMP_MENU->AddIdRawOption('AUDIT_LOG', '../setup/auditLog', ucfirst (strtolower ( 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"); + $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/proxyPMTablesFieldList.php b/workflow/engine/methods/cases/proxyPMTablesFieldList.php index d8d996725..a5ea64795 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", $dep_name." (".$dep_uid.") "); + } else { + G::auditLog("UpdateSubDepartament", $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..1c0e30942 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", $_REQUEST['addon']); + } else { + G::auditLog("DisablePlugin", $_REQUEST['addon']); + } + break; case "install": $status = 1; diff --git a/workflow/engine/methods/enterprise/processMakerAjax.php b/workflow/engine/methods/enterprise/processMakerAjax.php index 877adde34..46a2d6e99 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", $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..18ea84d25 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", $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", $editGroup['GRP_TITLE']." (".$_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", $_POST['GRP_NAME']." (".$_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..20df5a3df 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", $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", $catName." (".$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", $catName." (".$catUID.") "); echo '{success: true}'; } catch (Exception $ex) { echo '{success: false, error: ' . $ex->getMessage() . '}'; diff --git a/workflow/engine/methods/setup/appCacheViewAjax.php b/workflow/engine/methods/setup/appCacheViewAjax.php index 23efa9ce0..8d51fce75 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..2f35243f8 --- /dev/null +++ b/workflow/engine/methods/setup/auditLog.php @@ -0,0 +1,18 @@ +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; + +$oHeadPublisher = &headPublisher::getSingleton(); +$oHeadPublisher->addExtJsScript( "setup/auditLog", true ); +$oHeadPublisher->assign( "CONFIG", $config ); +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..b4fded1ae --- /dev/null +++ b/workflow/engine/methods/setup/auditLogAjax.php @@ -0,0 +1,140 @@ + 1) { + $date = (isset( $arrayAux[0] )) ? trim( $arrayAux[0] ) : ""; + $workspace = (isset( $arrayAux[1] )) ? trim( $arrayAux[1] ) : ""; + $user = (isset( $arrayAux[3] )) ? trim( $arrayAux[3] ) : ""; + $action = (isset( $arrayAux[4] )) ? trim( $arrayAux[4] ) : ""; + $description = (isset( $arrayAux[5] )) ? trim( $arrayAux[5] ) : ""; + } + + $mktDate = (! empty( $date )) ? mktimeDate( $date ) : 0; + + //Filter + $sw = 1; + if ($workspace != $filter["workspace"]) { + $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($user, $string) !== false) || (stristr($action, $string) !== false) || (stristr($description, $string) !== false) ) { + $sw = 1; + } + } + + $arrayData = array (); + + if ($sw == 1) { + $arrayData = array ("DATE" => $date, "USER" => $user, "ACTION" => $action, "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; + $description = $_REQUEST["description"]; + $dateFrom = $_REQUEST["dateFrom"]; + $dateTo = $_REQUEST["dateTo"]; + + $arrayFilter = array ("workspace" => $workspace,"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..c5cf3decd --- /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("Enable AuditLog"); + } else { + $oServerConf->setAuditLogProperty( 'AL_OPTION', 0, SYS_SYS ); + $oServerConf->unsetAuditLogProperty( 'AL_NEXT_DATE', SYS_SYS ); + $oServerConf->setAuditLogProperty( 'AL_TYPE', 'endaudit', SYS_SYS ); + $response->enable = false; + G::auditLog("Disable AuditLog"); + } + $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..7f443a981 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("Cron", "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/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/skin_Ajax.php b/workflow/engine/methods/setup/skin_Ajax.php index e00bc76be..8c92e924e 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", $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", $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", $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", $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..3a950ed56 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", $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", $aData['USR_USERNAME']." (".$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 85beae03c..21b41a821 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", $userName." (".$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'? "Enable User" : "Disable User"; + g::auditLog($msg, $userData['USR_USERNAME']." (".$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", $aData['USR_USERNAME'].' ('.$aData['USR_UID'].') assign to '.$aData['USR_AUTH_TYPE']); echo '{success: true}'; break; case 'usersList': 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/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/setup/auditLog.js b/workflow/engine/templates/setup/auditLog.js new file mode 100644 index 000000000..b9dd4314d --- /dev/null +++ b/workflow/engine/templates/setup/auditLog.js @@ -0,0 +1,248 @@ +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_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: "ACTION"}, + {name: "DESCRIPTION"} + ] + }), + + listeners: { + beforeload: function (store) + { + loadMaskAudit.show(); + + this.baseParams = { + "option": "LST", + "pageSize": pageSize, + "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 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: 10}, + {header: _("ID_USER"), dataIndex: "USER", width: 15}, + {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_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..297617faf --- /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'), + 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); + } + }); +} + + From 5bf40eb87fb4dac89ea4c121a21732f064cba88b Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Tue, 7 Oct 2014 16:02:32 -0400 Subject: [PATCH 02/13] BUG 15973 "Multilenguaje en los las variables..." SOLVED - Multilenguaje en los las variables que se guardan en base de datos. - Problema resuelto, las variables TRIGGER e INPUT, que se muestran en las imagenes son traducibles. Disponible para la version 2.8 de ProcessMaker. --- workflow/engine/methods/cases/caseMessageHistory_Ajax.php | 2 ++ workflow/engine/methods/cases/cases_Ajax.php | 1 + 2 files changed, 3 insertions(+) diff --git a/workflow/engine/methods/cases/caseMessageHistory_Ajax.php b/workflow/engine/methods/cases/caseMessageHistory_Ajax.php index 94055d1dc..9750d8827 100755 --- a/workflow/engine/methods/cases/caseMessageHistory_Ajax.php +++ b/workflow/engine/methods/cases/caseMessageHistory_Ajax.php @@ -110,6 +110,8 @@ if ($actionAjax == 'messageHistoryGridList_JXP') { $r->data = $aProcesses; $r->totalCount = $totalCount; + $r->data[0]["APP_MSG_TYPE"] = ($r->data[0]["APP_MSG_TYPE"] == "TRIGGER")? G::LoadTranslation("ID_TRIGGER_DB") : $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 20a25b77e..c7570ab1e 100755 --- a/workflow/engine/methods/cases/cases_Ajax.php +++ b/workflow/engine/methods/cases/cases_Ajax.php @@ -551,6 +551,7 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { for ($j = 0; $j < $rs->getRecordCount(); $j ++) { $result = $rs->getRow(); + $result["TYPE"] = ($result["TYPE"] == "INPUT")? G::LoadTranslation("ID_INPUT_DB") : $result["TYPE"]; $aProcesses[] = $result; $rs->next(); $totalCount ++; From f0ead99b4c408d0de497664bce1e2a1475836faa Mon Sep 17 00:00:00 2001 From: jennylee Date: Wed, 8 Oct 2014 09:49:01 -0400 Subject: [PATCH 03/13] PM-451 No carga files en filds tipo file en Review como supervisor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PROBLEMA: El archivo que guarda los datos del dynaform que fueron cambiados por el supervisor solo hacia la comparacion de los datos de los campos y guardaba la diferencia. Nunca subia nuevos files. SOLUCION: Se año codigo parara que ahora haga la subida de los files correspondientes y lo almacene con los datos del supervisor. --- .../cases/cases_SaveDataSupervisor.php | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) 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']; From 0fae3652d3a59c4c04c261c6ac6d27b9f64db904 Mon Sep 17 00:00:00 2001 From: norahmollo Date: Wed, 8 Oct 2014 09:50:54 -0400 Subject: [PATCH 04/13] BUG-12021 Audit Log Ip client column added --- gulliver/system/class.g.php | 3 ++- workflow/engine/controllers/adminProxy.php | 4 ++-- workflow/engine/methods/setup/auditLogAjax.php | 11 ++++++----- workflow/engine/templates/setup/auditLog.js | 5 ++++- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index b4022ed90..c423a3caf 100755 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5277,12 +5277,13 @@ class G { $oServerConf = & serverConf::getSingleton(); $sflagAudit = $oServerConf->getAuditLogProperty( 'AL_OPTION', SYS_SYS ); + $ipClient = G::getIpAddress(); if ($sflagAudit) { $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 ."|". $username . "|" . $fullname ."|" . $actionToLog . "|" . $valueToLog, PATH_DATA, "audit.log"); + G::log("|". $workspace ."|". $ipClient ."|". $username . "|" . $fullname ."|" . $actionToLog . "|" . $valueToLog, PATH_DATA, "audit.log"); } } diff --git a/workflow/engine/controllers/adminProxy.php b/workflow/engine/controllers/adminProxy.php index 3d3abfc60..68c2adaf8 100644 --- a/workflow/engine/controllers/adminProxy.php +++ b/workflow/engine/controllers/adminProxy.php @@ -1056,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", $fileName); } catch (Exception $e) { $error = $e->getMessage(); } @@ -1072,8 +1073,7 @@ class adminProxy extends HttpProxyController } } elseif ($_FILES['img']['type'] != '') { $failed = "1"; - } - G::auditLog("UploadLogo", $fileName); + } echo '{success: true, failed: ' . $failed . ', uploaded: ' . $uploaded . ', type: "' . $_FILES['img']['type'] . '"}'; exit(); } diff --git a/workflow/engine/methods/setup/auditLogAjax.php b/workflow/engine/methods/setup/auditLogAjax.php index b4fded1ae..f61abccde 100644 --- a/workflow/engine/methods/setup/auditLogAjax.php +++ b/workflow/engine/methods/setup/auditLogAjax.php @@ -19,9 +19,10 @@ function auditLogArraySet ($str, $filter) if (count( $arrayAux ) > 1) { $date = (isset( $arrayAux[0] )) ? trim( $arrayAux[0] ) : ""; $workspace = (isset( $arrayAux[1] )) ? trim( $arrayAux[1] ) : ""; - $user = (isset( $arrayAux[3] )) ? trim( $arrayAux[3] ) : ""; - $action = (isset( $arrayAux[4] )) ? trim( $arrayAux[4] ) : ""; - $description = (isset( $arrayAux[5] )) ? trim( $arrayAux[5] ) : ""; + $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; @@ -48,7 +49,7 @@ function auditLogArraySet ($str, $filter) $sw = 0; $string = $filter["description"]; - if ( (stristr($date, $string) !== false) || (stristr($user, $string) !== false) || (stristr($action, $string) !== false) || (stristr($description, $string) !== false) ) { + if ( (stristr($date, $string) !== false) || (stristr($ip, $string) !== false) || (stristr($user, $string) !== false) || (stristr($action, $string) !== false) || (stristr($description, $string) !== false) ) { $sw = 1; } } @@ -56,7 +57,7 @@ function auditLogArraySet ($str, $filter) $arrayData = array (); if ($sw == 1) { - $arrayData = array ("DATE" => $date, "USER" => $user, "ACTION" => $action, "DESCRIPTION" => $description); + $arrayData = array ("DATE" => $date, "USER" => $user, "IP" =>$ip, "ACTION" => $action, "DESCRIPTION" => $description); } return $arrayData; diff --git a/workflow/engine/templates/setup/auditLog.js b/workflow/engine/templates/setup/auditLog.js index b9dd4314d..e50fcf930 100644 --- a/workflow/engine/templates/setup/auditLog.js +++ b/workflow/engine/templates/setup/auditLog.js @@ -43,6 +43,7 @@ audit.application = { 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") + "
"; @@ -65,6 +66,7 @@ audit.application = { fields: [ {name: "DATE"}, {name: "USER"}, + {name: "IP"}, {name: "ACTION"}, {name: "DESCRIPTION"} ] @@ -161,8 +163,9 @@ audit.application = { }, columns: [ {id: "ID", dataIndex: "DATE", hidden: true, hideable: false}, - {header: _("ID_DATE_LABEL"), dataIndex: "DATE", width: 10}, + {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"} ] From b81f6dfb739bb11067786d518a5f18034b504e17 Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Date: Wed, 8 Oct 2014 10:07:39 -0400 Subject: [PATCH 05/13] PM-520 Cambios en el Enterprise Plugins Manager - Se agrego una interfaz para administrar los fixtures. --- gulliver/system/class.bootstrap.php | 2 + .../engine/classes/class.pmLicenseManager.php | 19 +- workflow/engine/classes/class.wsTools.php | 7 + workflow/engine/classes/model/AddonsStore.php | 272 ++++-- workflow/engine/controllers/main.php | 11 +- .../methods/enterprise/addonsStoreAction.php | 4 +- .../engine/methods/enterprise/enterprise.php | 4 +- workflow/engine/skinEngine/skinEngine.php | 18 +- .../templates/enterprise/addonsStore.js | 916 ++++++++++++------ 9 files changed, 849 insertions(+), 404 deletions(-) diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php index fe35fa8e8..eee10fac8 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("fixtureDetail", PATH_CLASSES . "class.fixtureRegistry.php"); + self::registerClass("PMFixtureRegistry", PATH_CLASSES . "class.fixtureRegistry.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/workflow/engine/classes/class.pmLicenseManager.php b/workflow/engine/classes/class.pmLicenseManager.php index 8c2386a44..6698693c0 100644 --- a/workflow/engine/classes/class.pmLicenseManager.php +++ b/workflow/engine/classes/class.pmLicenseManager.php @@ -53,6 +53,8 @@ class pmLicenseManager ); $this->result = $results['RESULT']; + $this->features = array(); + $this->fixtures = array(); if (in_array($this->result, $validStatus)) { $this->serial="3ptta7Xko2prrptrZnSd356aqmPXvMrayNPFj6CLdaR1pWtrW6qPw9jV0OHjxrDGu8LVxtmSm9nP5kR23HRpdZWccpeui+bKkK°DoqCt2Kqgpq6Vg37s"; $info['FIRST_NAME'] = $results['DATA']['FIRST_NAME']; @@ -64,7 +66,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->fixtures = $this->result!='TMINUS'?isset($results ['DATA']['CUSTOMER_FIXTURE'])? $results ['DATA']['CUSTOMER_FIXTURE'] : $this->getActiveFixtures() : array(); + $this->fixturesList = isset($results ['DATA']['FIXTURE_LIST'])? $results ['DATA']['FIXTURE_LIST'] : null; $this->status = $this->getCurrentLicenseStatus (); if (isset ( $results ['LIC'] )) { @@ -352,7 +356,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 +502,17 @@ 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'))); + } + + public function getActiveFixtures() + { + 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.wsTools.php b/workflow/engine/classes/class.wsTools.php index d2b89e991..01a3d2367 100755 --- a/workflow/engine/classes/class.wsTools.php +++ b/workflow/engine/classes/class.wsTools.php @@ -1504,6 +1504,13 @@ class workspaceTools $versionOld = ( isset($version[0])) ? $version[0] : ''; CLI::logging(CLI::info("$versionOld < $versionPresent") . "\n"); + $start = microtime(true); + CLI::logging("> Verify enterprise old...\n"); + $this->verifyEnterprise($workSpace); + $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"); diff --git a/workflow/engine/classes/model/AddonsStore.php b/workflow/engine/classes/model/AddonsStore.php index 30e861fec..7ea500796 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->fixtures) == 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 addonFixtureList() { $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->fixturesList); + foreach ($list['addons'] as $key => $fixture) { + $addon = new AddonsManager(); + $addon->setAddonId($fixture['name']); + $addon->setStoreId($fixture['guid']); + $addon->setAddonName($fixture['name']); + $addon->setAddonDescription($fixture['description']); + $addon->setAddonNick($fixture['nick']); + $addon->setAddonVersion(""); + $addon->setAddonStatus($fixture['status']); + $addon->setAddonType("fixture"); + $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/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/methods/enterprise/addonsStoreAction.php b/workflow/engine/methods/enterprise/addonsStoreAction.php index ec0b59622..e5d593587 100644 --- a/workflow/engine/methods/enterprise/addonsStoreAction.php +++ b/workflow/engine/methods/enterprise/addonsStoreAction.php @@ -340,7 +340,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/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/templates/enterprise/addonsStore.js b/workflow/engine/templates/enterprise/addonsStore.js index 33bda2d8e..3cda2c5d9 100644 --- a/workflow/engine/templates/enterprise/addonsStore.js +++ b/workflow/engine/templates/enterprise/addonsStore.js @@ -499,6 +499,11 @@ Ext.onReady(function() { "force": true } }); + addonsFixtureStore.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 addonsFixtureStore = new Ext.data.JsonStore({ + proxy: new Ext.data.HttpProxy({ + url: "addonsStoreAction", + method: "POST" + }), + baseParams: { + "action": "addonsList", + "type" : "fixture" + }, + autoDestroy: true, + messageProperty: 'error', + storeId: 'addonsFixtureStore', + 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-fixture-indicator').setValue(''); + return true; + }, + "exception": function(e, type, action, options, response, arg) { + Ext.ComponentMgr.get('loading-fixture-indicator').setValue(' '); + }, + "load": function(store, records, options) { + Ext.ComponentMgr.get('loading-fixture-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 (addonsFixtureGrid.disabled) { + addonsFixtureGrid.enable(); + } + + errors = store.reader.jsonData.errors; + for (var i = 0, n = errors.length; i"; + } + + if (store_errors.length > 0) { + Ext.ComponentMgr.get('loading-fixture-indicator').setValue(' '); + //storeError(error_msg); + reloadTask.cancel(); + } else { + Ext.ComponentMgr.get('loading-fixture-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,426 @@ 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 Fixtures + var addonsFixtureGrid = new Ext.grid.GridPanel({ + store: addonsFixtureStore, + colspan: 2, + flex: 1, + padding: 5, + columns: [ + { + id : 'icon-column-fixture', + header : '', + width : 30, + hideable : false, + dataIndex: 'status', + renderer : function (val, metadata, record, rowIndex, colIndex, store) { + return ""; + } + }, + { + id :'nick-column-fixture', + 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-fixture', + header : _('ID_DESCRIPTION'), + width : 400, + dataIndex: 'description' + }, + { + id : 'enabled-column-fixture', + header : _('ID_ENABLED'), + width : 60, + dataIndex: 'enabled', + renderer: function (val) { + if (val === true) { + return ""; + } else if (val === false) { + return ""; + } + return ''; + } + }, + { + id : "status-fixture", + 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(); + addonsFixtureStore.load({ + params: { + "force": true + } + }); + } + }, + '->', + { + xtype:"displayfield", + id:'loading-fixture-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 +1692,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_FIXTURES'), + items : addonsFixtureGrid + } + ] + }); - 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 +1744,16 @@ Ext.onReady(function() { ); addonsGrid.addListener("rowcontextmenu", onMessageMnuContext, this); + + addonsFixtureGrid.on("rowcontextmenu", + function (grid, rowIndex, evt) { + var sm = grid.getSelectionModel(); + sm.selectRow(rowIndex, sm.isSelected(rowIndex)); + }, + this + ); + + addonsFixtureGrid.addListener("rowcontextmenu", onMessageMnuContext, this); /////// var viewport = new Ext.Viewport({ @@ -1490,6 +1767,7 @@ Ext.onReady(function() { if (licensed) { addonsStore.load(); + addonsFixtureStore.load(); } }); From ab237855ec0b11f29c84002591e124530580f49a Mon Sep 17 00:00:00 2001 From: jennylee Date: Wed, 8 Oct 2014 11:08:17 -0400 Subject: [PATCH 06/13] Fixing the label in inputdoc uploaded max file size. --- .../engine/xmlform/cases/cases_AttachInputDocumentGeneral.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From fa1425ba601dc594173f656d06c419088b11d559 Mon Sep 17 00:00:00 2001 From: jennylee Date: Wed, 8 Oct 2014 13:12:58 -0400 Subject: [PATCH 07/13] PM-555 No se crean los casus configurados con Case Scheduler PROBLEMA: En la creacion de Cases Schedulers se realizaba el guardado de el password del usuario con el algoritmo md5 siempre, lo cual generaba un password distinto al guardado en la base de datos cuando el ambiente estaba configurado con sha256. SOLUCION: Se utiliza la funcion hashPassword de bootstrap para encriptar el password con el algoritmo q se esta usando en el ambiente. --- workflow/engine/methods/cases/cases_Scheduler_Save.php | 2 +- workflow/engine/methods/cases/cases_Scheduler_Update.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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']; From a6ed36040cc4f63152ff9be723211cd5ecfc831b Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Wed, 8 Oct 2014 13:38:01 -0400 Subject: [PATCH 08/13] BUG 15973 "Multilenguaje en los las variables..." SOLVED - Multilenguaje en los las variables que se guardan en base de datos. - Problema resuelto, las variables que se muestran en las imagenes son traducibles. --- workflow/engine/methods/cases/caseMessageHistory_Ajax.php | 7 ++++++- workflow/engine/methods/cases/cases_Ajax.php | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/workflow/engine/methods/cases/caseMessageHistory_Ajax.php b/workflow/engine/methods/cases/caseMessageHistory_Ajax.php index 9750d8827..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,7 +115,7 @@ if ($actionAjax == 'messageHistoryGridList_JXP') { $r->data = $aProcesses; $r->totalCount = $totalCount; - $r->data[0]["APP_MSG_TYPE"] = ($r->data[0]["APP_MSG_TYPE"] == "TRIGGER")? G::LoadTranslation("ID_TRIGGER_DB") : $r->data[0]["APP_MSG_TYPE"]; + $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 ); } diff --git a/workflow/engine/methods/cases/cases_Ajax.php b/workflow/engine/methods/cases/cases_Ajax.php index c7570ab1e..3f64e0f27 100755 --- a/workflow/engine/methods/cases/cases_Ajax.php +++ b/workflow/engine/methods/cases/cases_Ajax.php @@ -533,6 +533,11 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { G::LoadClass( "BasePeer" ); global $G_PUBLISH; + $arrayToTranslation = array( + "OUTPUT" => G::LoadTranslation("ID_OUTPUT_DB"), + "INPUT" => G::LoadTranslation("ID_INPUT_DB") + ); + $oCase = new Cases(); $aProcesses = Array (); $G_PUBLISH = new Publisher(); @@ -551,7 +556,7 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { for ($j = 0; $j < $rs->getRecordCount(); $j ++) { $result = $rs->getRow(); - $result["TYPE"] = ($result["TYPE"] == "INPUT")? G::LoadTranslation("ID_INPUT_DB") : $result["TYPE"]; + $result["TYPE"] = (array_key_exists($result["TYPE"], $arrayToTranslation))? $arrayToTranslation[$result["TYPE"]] : $result["TYPE"]; $aProcesses[] = $result; $rs->next(); $totalCount ++; From 4f8f609f74df2a58345e384a953695bdf49636b2 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Wed, 8 Oct 2014 14:31:00 -0400 Subject: [PATCH 09/13] BUG 15973 "Multilenguaje en los las variables..." SOLVED --- workflow/engine/methods/cases/cases_Ajax.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/workflow/engine/methods/cases/cases_Ajax.php b/workflow/engine/methods/cases/cases_Ajax.php index 3f64e0f27..d97fdc197 100755 --- a/workflow/engine/methods/cases/cases_Ajax.php +++ b/workflow/engine/methods/cases/cases_Ajax.php @@ -534,8 +534,9 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { global $G_PUBLISH; $arrayToTranslation = array( - "OUTPUT" => G::LoadTranslation("ID_OUTPUT_DB"), - "INPUT" => G::LoadTranslation("ID_INPUT_DB") + "INPUT" => G::LoadTranslation("ID_INPUT_DB"), + "OUTPUT" => G::LoadTranslation("ID_OUTPUT_DB"), + "ATTACHED" => G::LoadTranslation("ID_ATTACHED_DB") ); $oCase = new Cases(); From ed70789047b13cd030da1241ea332ad9b57b55a9 Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Date: Wed, 8 Oct 2014 14:38:30 -0400 Subject: [PATCH 10/13] PM-520 Cambios en el Enterprise Plugins Manager - Se agrego una interfaz para administrar los fixtures. --- gulliver/system/class.bootstrap.php | 4 +- .../engine/classes/class.licensedFeatures.php | 89 +++++++++++++++++++ .../engine/classes/class.pmLicenseManager.php | 15 +--- workflow/engine/classes/model/AddonsStore.php | 22 ++--- .../templates/enterprise/addonsStore.js | 50 +++++------ 5 files changed, 131 insertions(+), 49 deletions(-) create mode 100644 workflow/engine/classes/class.licensedFeatures.php diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php index eee10fac8..1466842fa 100644 --- a/gulliver/system/class.bootstrap.php +++ b/gulliver/system/class.bootstrap.php @@ -225,8 +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("fixtureDetail", PATH_CLASSES . "class.fixtureRegistry.php"); - self::registerClass("PMFixtureRegistry", PATH_CLASSES . "class.fixtureRegistry.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/workflow/engine/classes/class.licensedFeatures.php b/workflow/engine/classes/class.licensedFeatures.php new file mode 100644 index 000000000..50ccb71e6 --- /dev/null +++ b/workflow/engine/classes/class.licensedFeatures.php @@ -0,0 +1,89 @@ +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) + { + $licenseManager = &pmLicenseManager::getSingleton(); + $_SESSION['__sw__'] = true; + $padl = new padl(); + + $enable = in_array($padl->_decrypt($featureName), $licenseManager->features); + + $this->featuresDetails[$padl->_decrypt($featureName)]->enabled = $enable; + return $enable; + } + + public static function loadSingleton($file) + { + self::$instancefeature = unserialize(file_get_contents($file)); + + if (! is_object(self::$instancefeature) || get_class(self::$instancefeature) != "PMLicensedFeatures") { + throw new Exception("Can't load main PMLicensedFeatures object."); + } + + return self::$instancefeature; + } +} + diff --git a/workflow/engine/classes/class.pmLicenseManager.php b/workflow/engine/classes/class.pmLicenseManager.php index 6698693c0..ace704336 100644 --- a/workflow/engine/classes/class.pmLicenseManager.php +++ b/workflow/engine/classes/class.pmLicenseManager.php @@ -54,7 +54,8 @@ class pmLicenseManager $this->result = $results['RESULT']; $this->features = array(); - $this->fixtures = 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']; @@ -67,8 +68,8 @@ class pmLicenseManager $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->fixtures = $this->result!='TMINUS'?isset($results ['DATA']['CUSTOMER_FIXTURE'])? $results ['DATA']['CUSTOMER_FIXTURE'] : $this->getActiveFixtures() : array(); - $this->fixturesList = isset($results ['DATA']['FIXTURE_LIST'])? $results ['DATA']['FIXTURE_LIST'] : null; + $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'] )) { @@ -507,13 +508,5 @@ class pmLicenseManager } return unserialize(G::decrypt($this->serial, file_get_contents(PATH_PLUGINS . 'enterprise/data/default'))); } - - public function getActiveFixtures() - { - 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/model/AddonsStore.php b/workflow/engine/classes/model/AddonsStore.php index 7ea500796..132b26a9b 100644 --- a/workflow/engine/classes/model/AddonsStore.php +++ b/workflow/engine/classes/model/AddonsStore.php @@ -125,7 +125,7 @@ class AddonsStore extends BaseAddonsStore } else { $status = "available"; $enabled = false; - if (!$addonInLicense && in_array($addon->getAddonName(), $licenseManager->fixtures) == 1) { + if (!$addonInLicense && in_array($addon->getAddonName(), $licenseManager->licensedfeatures) == 1) { $status = "installed"; $enabled = true; } @@ -172,7 +172,7 @@ class AddonsStore extends BaseAddonsStore return $result; } - public static function addonFixtureList() + public static function addonFeatureList() { $result = array(); @@ -425,17 +425,17 @@ class AddonsStore extends BaseAddonsStore } } } else { - $list = unserialize($pmLicenseManagerO->fixturesList); - foreach ($list['addons'] as $key => $fixture) { + $list = unserialize($pmLicenseManagerO->licensedfeaturesList); + foreach ($list['addons'] as $key => $feature) { $addon = new AddonsManager(); - $addon->setAddonId($fixture['name']); - $addon->setStoreId($fixture['guid']); - $addon->setAddonName($fixture['name']); - $addon->setAddonDescription($fixture['description']); - $addon->setAddonNick($fixture['nick']); + $addon->setAddonId($feature['name']); + $addon->setStoreId($feature['guid']); + $addon->setAddonName($feature['name']); + $addon->setAddonDescription($feature['description']); + $addon->setAddonNick($feature['nick']); $addon->setAddonVersion(""); - $addon->setAddonStatus($fixture['status']); - $addon->setAddonType("fixture"); + $addon->setAddonStatus($feature['status']); + $addon->setAddonType("features"); $addon->setAddonPublisher("Colosa"); $addon->setAddonDownloadUrl(""); $addon->setAddonDownloadMd5(""); diff --git a/workflow/engine/templates/enterprise/addonsStore.js b/workflow/engine/templates/enterprise/addonsStore.js index 3cda2c5d9..f1c2906ff 100644 --- a/workflow/engine/templates/enterprise/addonsStore.js +++ b/workflow/engine/templates/enterprise/addonsStore.js @@ -499,7 +499,7 @@ Ext.onReady(function() { "force": true } }); - addonsFixtureStore.load({ + addonsFeaturesStore.load({ params: { "force": true } @@ -615,18 +615,18 @@ Ext.onReady(function() { }); - var addonsFixtureStore = new Ext.data.JsonStore({ + var addonsFeaturesStore = new Ext.data.JsonStore({ proxy: new Ext.data.HttpProxy({ url: "addonsStoreAction", method: "POST" }), baseParams: { "action": "addonsList", - "type" : "fixture" + "type" : "features" }, autoDestroy: true, messageProperty: 'error', - storeId: 'addonsFixtureStore', + storeId: 'addonsFeaturesStore', root: 'addons', idProperty: 'id', sortInfo: { @@ -638,14 +638,14 @@ Ext.onReady(function() { 'log', 'progress'], listeners: { 'beforeload': function(store, options) { - Ext.ComponentMgr.get('loading-fixture-indicator').setValue(''); + Ext.ComponentMgr.get('loading-features-indicator').setValue(''); return true; }, "exception": function(e, type, action, options, response, arg) { - Ext.ComponentMgr.get('loading-fixture-indicator').setValue(' '); + Ext.ComponentMgr.get('loading-features-indicator').setValue(' '); }, "load": function(store, records, options) { - Ext.ComponentMgr.get('loading-fixture-indicator').setValue(""); + Ext.ComponentMgr.get('loading-features-indicator').setValue(""); progressWindow.hide(); store.filterBy(function (record, id) { if (record.get('type') == 'core') { @@ -659,8 +659,8 @@ Ext.onReady(function() { return true; }); - if (addonsFixtureGrid.disabled) { - addonsFixtureGrid.enable(); + if (addonsFeatureGrid.disabled) { + addonsFeatureGrid.enable(); } errors = store.reader.jsonData.errors; @@ -677,11 +677,11 @@ Ext.onReady(function() { } if (store_errors.length > 0) { - Ext.ComponentMgr.get('loading-fixture-indicator').setValue(' '); + Ext.ComponentMgr.get('loading-features-indicator').setValue(' '); //storeError(error_msg); reloadTask.cancel(); } else { - Ext.ComponentMgr.get('loading-fixture-indicator').setValue(' '); + Ext.ComponentMgr.get('loading-features-indicator').setValue(' '); } } } @@ -1512,15 +1512,15 @@ Ext.onReady(function() { } }); - // create the Grid Fixtures - var addonsFixtureGrid = new Ext.grid.GridPanel({ - store: addonsFixtureStore, + // create the Grid Features + var addonsFeatureGrid = new Ext.grid.GridPanel({ + store: addonsFeaturesStore, colspan: 2, flex: 1, padding: 5, columns: [ { - id : 'icon-column-fixture', + id : 'icon-column-feature', header : '', width : 30, hideable : false, @@ -1530,7 +1530,7 @@ Ext.onReady(function() { } }, { - id :'nick-column-fixture', + id :'nick-column-feature', header : _('ID_NAME'), width : 300, sortable : true, @@ -1546,13 +1546,13 @@ Ext.onReady(function() { } }, { - id :'description-column-fixture', + id :'description-column-feature', header : _('ID_DESCRIPTION'), width : 400, dataIndex: 'description' }, { - id : 'enabled-column-fixture', + id : 'enabled-column-feature', header : _('ID_ENABLED'), width : 60, dataIndex: 'enabled', @@ -1566,7 +1566,7 @@ Ext.onReady(function() { } }, { - id : "status-fixture", + id : "status-feature", header : _('ID_STATUS'), width : 120, sortable : false, @@ -1627,7 +1627,7 @@ Ext.onReady(function() { disabled: (INTERNET_CONNECTION == 1)? false : true, handler: function (b, e) { reloadTask.cancel(); - addonsFixtureStore.load({ + addonsFeaturesStore.load({ params: { "force": true } @@ -1637,7 +1637,7 @@ Ext.onReady(function() { '->', { xtype:"displayfield", - id:'loading-fixture-indicator' + id:'loading-features-indicator' } ], listeners: { @@ -1709,7 +1709,7 @@ Ext.onReady(function() { items : addonsGrid },{ title: _('ID_ENTERPRISE_FIXTURES'), - items : addonsFixtureGrid + items : addonsFeatureGrid } ] }); @@ -1745,7 +1745,7 @@ Ext.onReady(function() { addonsGrid.addListener("rowcontextmenu", onMessageMnuContext, this); - addonsFixtureGrid.on("rowcontextmenu", + addonsFeatureGrid.on("rowcontextmenu", function (grid, rowIndex, evt) { var sm = grid.getSelectionModel(); sm.selectRow(rowIndex, sm.isSelected(rowIndex)); @@ -1753,7 +1753,7 @@ Ext.onReady(function() { this ); - addonsFixtureGrid.addListener("rowcontextmenu", onMessageMnuContext, this); + addonsFeatureGrid.addListener("rowcontextmenu", onMessageMnuContext, this); /////// var viewport = new Ext.Viewport({ @@ -1767,7 +1767,7 @@ Ext.onReady(function() { if (licensed) { addonsStore.load(); - addonsFixtureStore.load(); + addonsFeaturesStore.load(); } }); From 7df77949fdce84cb367cb85707fc025cdad61f6d Mon Sep 17 00:00:00 2001 From: norahmollo Date: Wed, 8 Oct 2014 15:23:38 -0400 Subject: [PATCH 11/13] BUG-12021 Corrections Audit Log Authentication Source Name --- rbac/engine/classes/model/AuthenticationSource.php | 8 +++++--- workflow/engine/methods/setup/appCacheViewAjax.php | 2 +- workflow/engine/methods/users/users_Ajax.php | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/rbac/engine/classes/model/AuthenticationSource.php b/rbac/engine/classes/model/AuthenticationSource.php index ccc97e590..09bd10b12 100755 --- a/rbac/engine/classes/model/AuthenticationSource.php +++ b/rbac/engine/classes/model/AuthenticationSource.php @@ -69,7 +69,7 @@ class AuthenticationSource extends BaseAuthenticationSource { $oConnection->begin(); $iResult = $oAuthenticationSource->save(); $oConnection->commit(); - G::auditLog("createAuthSource", $aData['AUTH_SOURCE_NAME']); + G::auditLog("CreateAuthSource", $aData['AUTH_SOURCE_NAME']); return $aData['AUTH_SOURCE_UID']; } else { @@ -128,12 +128,14 @@ class AuthenticationSource extends BaseAuthenticationSource { $oConnection = Propel::getConnection(AuthenticationSourcePeer::DATABASE_NAME); try { $oAuthenticationSource = AuthenticationSourcePeer::retrieveByPK($sUID); - $nameAuthenticationSource = $this->load($sUID); + $authenticationSource = $this->load($sUID); + if (!is_null($oAuthenticationSource)) { $oConnection->begin(); $iResult = $oAuthenticationSource->delete(); $oConnection->commit(); - G::auditLog("DeleteAuthSource", $nameAuthenticationSource." (".$sUID.") "); + + G::auditLog("DeleteAuthSource", $authenticationSource['AUTH_SOURCE_NAME']." (".$sUID.") "); return $iResult; } else { diff --git a/workflow/engine/methods/setup/appCacheViewAjax.php b/workflow/engine/methods/setup/appCacheViewAjax.php index 8d51fce75..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"); + G::auditLog("BuildCache"); echo G::json_encode( $result ); } catch (Exception $e) { diff --git a/workflow/engine/methods/users/users_Ajax.php b/workflow/engine/methods/users/users_Ajax.php index 21b41a821..f2263111f 100644 --- a/workflow/engine/methods/users/users_Ajax.php +++ b/workflow/engine/methods/users/users_Ajax.php @@ -231,7 +231,7 @@ try { $userInstance->update($userData); $msg = $_REQUEST['NEW_USR_STATUS'] == 'ACTIVE'? "Enable User" : "Disable User"; - g::auditLog($msg, $userData['USR_USERNAME']." (".$userData['USR_UID'].") "); + G::auditLog($msg, $userData['USR_USERNAME']." (".$userData['USR_UID'].") "); $response->status = 'OK'; } else { $response->status = 'ERROR'; From 730187b267c4a135939bbaef13262df6068a9795 Mon Sep 17 00:00:00 2001 From: norahmollo Date: Wed, 8 Oct 2014 15:56:04 -0400 Subject: [PATCH 12/13] PM-476 Tablas RBAC MyISAM Correccion Engine InnoDB --- rbac/engine/data/mysql/schema.sql | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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; From 0d40ffbfb084759bc7a69f4e771265355773c974 Mon Sep 17 00:00:00 2001 From: norahmollo Date: Wed, 8 Oct 2014 16:32:12 -0400 Subject: [PATCH 13/13] PM-476 Engine InnoDB Tables Engine --- gulliver/bin/tasks/templates/db_insert.sql | 2 +- gulliver/bin/tasks/templates/pluginSchema.xml.tpl | 2 +- gulliver/bin/tasks/templates/schema.xml.tpl | 8 ++++---- gulliver/system/class.database_mysql.php | 2 +- .../pear/SOAP/Interop/interop_database.sql | 8 ++++---- .../templates/sql/base/mysql/table.tpl | 2 +- rbac/engine/config/schema.xml | 14 +++++++------- workflow/engine/classes/model/Content.php | 2 +- workflow/engine/data/mysql/schema.sql | 6 +++--- .../methods/setup/setupSchemas/app_cache_view.sql | 2 +- 10 files changed, 24 insertions(+), 24 deletions(-) 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.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/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/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/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/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/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';