From 818d8b663d02ad550376825895c2dffc8f27f15f Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Fri, 11 Sep 2015 16:41:15 -0400 Subject: [PATCH 01/18] PM-3513: Remove heartbeat slow queries in authentication process --- workflow/engine/methods/login/authentication.php | 1 - 1 file changed, 1 deletion(-) diff --git a/workflow/engine/methods/login/authentication.php b/workflow/engine/methods/login/authentication.php index f41bce88c..5385ca548 100755 --- a/workflow/engine/methods/login/authentication.php +++ b/workflow/engine/methods/login/authentication.php @@ -238,7 +238,6 @@ try { $heartBeatNWIDate = time(); } if (time() >= $heartBeatNWIDate) { - $oServerConf->setWsInfo(SYS_SYS, $oServerConf->getWorkspaceInfo(SYS_SYS)); $oServerConf->setHeartbeatProperty('HB_NEXT_GWI_DATE', strtotime('+1 day'), 'HEART_BEAT_CONF'); } From 4374dbdea7fc85683113642eac17cd15202b229b Mon Sep 17 00:00:00 2001 From: dheeyi Date: Mon, 21 Sep 2015 13:02:43 -0400 Subject: [PATCH 02/18] =?UTF-8?q?PM-3000=200017474:=20El=20email=20FROM=20?= =?UTF-8?q?no=20respeta=20la=20configuraci=C3=B3n=20"Email=20configuration?= =?UTF-8?q?"(adicionar=20una=20nueva=20opcion=20en=20el=20plugin=20"action?= =?UTF-8?q?s=20by=20email")?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Conflicts: workflow/engine/classes/model/ListInbox.php --- .../classes/class.actionsByEmailCore.php | 17 +++-- .../engine/classes/class.pluginRegistry.php | 5 ++ workflow/engine/classes/class.spool.php | 7 +- .../engine/classes/model/AbeConfiguration.php | 2 +- .../engine/classes/model/AppDelegation.php | 53 ++++++++------ workflow/engine/classes/model/ListInbox.php | 2 +- .../model/map/AbeConfigurationMapBuilder.php | 5 +- .../classes/model/om/BaseAbeConfiguration.php | 71 +++++++++++++++++-- .../model/om/BaseAbeConfigurationPeer.php | 23 +++--- workflow/engine/config/schema.xml | 10 +++ workflow/engine/data/mysql/schema.sql | 1 + .../services/ActionsByEmailDataForm.php | 3 +- .../BusinessModel/ActionsByEmail.php | 1 + 13 files changed, 153 insertions(+), 47 deletions(-) diff --git a/workflow/engine/classes/class.actionsByEmailCore.php b/workflow/engine/classes/class.actionsByEmailCore.php index 3596ea45f..f1e5883be 100644 --- a/workflow/engine/classes/class.actionsByEmailCore.php +++ b/workflow/engine/classes/class.actionsByEmailCore.php @@ -58,13 +58,12 @@ class actionsByEmailCoreClass extends PMPlugin } if ($data->USR_UID == '') { - throw new Exception('The parameter $data->USR_UID is empty.'); + error_log('The parameter $data->USR_UID is empty, the routed task may be a self-service type, actions by email does not work with self-service task types.', 0); } } catch(Exception $e) { echo $e->getMessage().' Please contact to your system administrator.'; - die; + die; } - G::LoadClass('pmFunctions'); $emailSetup = getEmailConfiguration(); @@ -86,6 +85,7 @@ class actionsByEmailCoreClass extends PMPlugin $criteria->addSelectColumn(AbeConfigurationPeer::ABE_EMAIL_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); $criteria->addSelectColumn(AbeConfigurationPeer::ABE_SUBJECT_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT); $criteria->addSelectColumn(DynaformPeer::DYN_CONTENT); $criteria->addJoin( AbeConfigurationPeer::DYN_UID, DynaformPeer::DYN_UID, Criteria::LEFT_JOIN ); $criteria->add(AbeConfigurationPeer::PRO_UID, $caseFields['PRO_UID']); @@ -233,8 +233,17 @@ class actionsByEmailCoreClass extends PMPlugin $user = new Users(); $userDetails = $user->loadDetails($data->PREVIOUS_USR_UID); - $emailFrom = $userDetails["USR_EMAIL"]; + if($configuration['ABE_MAILSERVER_OR_MAILCURRENT'] == 1 && $configuration['ABE_TYPE'] !== ''){ + $emailFrom = ($userDetails["USR_FULLNAME"] . ' <' . $userDetails["USR_EMAIL"] . '>'); + }else{ + if(isset($emailSetup["MESS_FROM_NAME"]) && isset($emailSetup["MESS_FROM_MAIL"] )){ + $emailFrom = ($emailSetup["MESS_FROM_NAME"] . ' <' . $emailSetup["MESS_FROM_MAIL"] . '>'); + }else{ + $emailFrom = ((isset($emailSetup["MESS_FROM_NAME"])) ? $emailSetup["MESS_FROM_NAME"] : $emailSetup["MESS_FROM_MAIL"]); + } + } + G::LoadClass('wsBase'); $wsBaseInstance = new wsBase(); diff --git a/workflow/engine/classes/class.pluginRegistry.php b/workflow/engine/classes/class.pluginRegistry.php index eb1d956c8..e24f21941 100755 --- a/workflow/engine/classes/class.pluginRegistry.php +++ b/workflow/engine/classes/class.pluginRegistry.php @@ -317,6 +317,11 @@ class PMPluginRegistry if (method_exists( $detail, "disable" )) { $detail->disable(); } + //flag Only Plugin actionsByEmail + if($detail->sNamespace == 'actionsByEmail'){ + $plugin = new $detail->sClassName( $detail->sNamespace, $detail->sFilename ); + $plugin->disable(); + } } $sw = true; diff --git a/workflow/engine/classes/class.spool.php b/workflow/engine/classes/class.spool.php index 66c40bed2..162e3aa4a 100755 --- a/workflow/engine/classes/class.spool.php +++ b/workflow/engine/classes/class.spool.php @@ -449,16 +449,15 @@ class spoolRun $oPHPMailer->SMTPSecure = $this->config['SMTPSecure']; } break; - } - + } $oPHPMailer->CharSet = "UTF-8"; $oPHPMailer->Encoding = "8bit"; $oPHPMailer->Host = $this->config['MESS_SERVER']; $oPHPMailer->Port = $this->config['MESS_PORT']; $oPHPMailer->Username = $this->config['MESS_ACCOUNT']; $oPHPMailer->Password = $this->config['MESS_PASSWORD']; - $oPHPMailer->From = $this->fileData['from_email']; - $oPHPMailer->FromName = utf8_decode( $this->fileData['from_name'] ); + $oPHPMailer->SetFrom($this->fileData['from_email'], utf8_decode($this->fileData['from_name'])); + if (isset($this->fileData['reply_to'])) { if ($this->fileData['reply_to'] != '') { $oPHPMailer->AddReplyTo($this->fileData['reply_to'], $this->fileData['reply_to_name']); diff --git a/workflow/engine/classes/model/AbeConfiguration.php b/workflow/engine/classes/model/AbeConfiguration.php index ce6b55226..e81ca8242 100644 --- a/workflow/engine/classes/model/AbeConfiguration.php +++ b/workflow/engine/classes/model/AbeConfiguration.php @@ -18,7 +18,7 @@ class AbeConfiguration extends BaseAbeConfiguration private $filterThisFields = array('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID','ABE_EMAIL_FIELD', - 'ABE_ACTION_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_CREATE_DATE','ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD'); + 'ABE_ACTION_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_CREATE_DATE','ABE_UPDATE_DATE','ABE_MAILSERVER_OR_MAILCURRENT','ABE_SUBJECT_FIELD'); public function load($abeUid) { diff --git a/workflow/engine/classes/model/AppDelegation.php b/workflow/engine/classes/model/AppDelegation.php index 1013f462d..489b00c0c 100755 --- a/workflow/engine/classes/model/AppDelegation.php +++ b/workflow/engine/classes/model/AppDelegation.php @@ -172,37 +172,48 @@ class AppDelegation extends BaseAppDelegation // Hook for the trigger PM_CREATE_NEW_DELEGATION if (defined( 'PM_CREATE_NEW_DELEGATION' )) { + + $bpmn = new \ProcessMaker\Project\Bpmn(); + $flagActionsByEmail = true; + $data = new stdclass(); $data->TAS_UID = $sTasUid; $data->APP_UID = $sAppUid; $data->DEL_INDEX = $delIndex; $data->USR_UID = $sUsrUid; $data->PREVIOUS_USR_UID = $delPreviusUsrUid; - $oPluginRegistry = &PMPluginRegistry::getSingleton(); - $oPluginRegistry->executeTriggers(PM_CREATE_NEW_DELEGATION, $data); - /*----------------------------------********---------------------------------*/ - // this section evaluates the actions by email trigger execution please - // modify this section carefully, the if evaluation checks if the license has been - // activated in order to send the mail according to the configuration table - if (PMLicensedFeatures - ::getSingleton() - ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) { - $criteriaAbe = new Criteria(); - $criteriaAbe->add(AbeConfigurationPeer::PRO_UID, $sProUid); - $criteriaAbe->add(AbeConfigurationPeer::TAS_UID, $sTasUid); - $resultAbe = AbeConfigurationPeer::doSelectRS($criteriaAbe); - $resultAbe->setFetchmode(ResultSet::FETCHMODE_ASSOC); - if ($resultAbe->next()) { - $dataAbe = $resultAbe->getRow(); - if($dataAbe['ABE_TYPE']!=''){ - G::LoadClass('actionsByEmailCore'); - $actionsByEmail = new actionsByEmailCoreClass(); - $actionsByEmail->sendActionsByEmail($data); + if ($bpmn->exists($sProUid)) { + /*----------------------------------********---------------------------------*/ + // this section evaluates the actions by email trigger execution please + // modify this section carefully, the if evaluation checks if the license has been + // activated in order to send the mail according to the configuration table + if (PMLicensedFeatures + ::getSingleton() + ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) { + $criteriaAbe = new Criteria(); + $criteriaAbe->add(AbeConfigurationPeer::PRO_UID, $sProUid); + $criteriaAbe->add(AbeConfigurationPeer::TAS_UID, $sTasUid); + $resultAbe = AbeConfigurationPeer::doSelectRS($criteriaAbe); + $resultAbe->setFetchmode(ResultSet::FETCHMODE_ASSOC); + if ($resultAbe->next()) { + $dataAbe = $resultAbe->getRow(); + if($dataAbe['ABE_TYPE']!=''){ + $flagActionsByEmail = false; + G::LoadClass('actionsByEmailCore'); + $actionsByEmail = new actionsByEmailCoreClass(); + $actionsByEmail->sendActionsByEmail($data); + } } } + /*----------------------------------********---------------------------------*/ + } - /*----------------------------------********---------------------------------*/ + + if ($flagActionsByEmail) { + $oPluginRegistry = &PMPluginRegistry::getSingleton(); + $oPluginRegistry->executeTriggers(PM_CREATE_NEW_DELEGATION, $data); + } } return $delIndex; diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index f010d34f7..e227292b0 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -120,7 +120,7 @@ class ListInbox extends BaseListInbox $users = new Users(); $users->refreshTotal($data['USR_UID'], 'add', 'participated'); } - + if((array_key_exists('TAS_UID', $data) && isset($data['TAS_UID'])) && (array_key_exists('TAS_UID', $data) && isset($data['PRO_UID'])) && isset($data['APP_UID'])) { $data['DEL_PRIORITY'] = $this->getTaskPriority($data['TAS_UID'], $data['PRO_UID'], $data["APP_UID"]); } diff --git a/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php b/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php index c1f53169e..28eb5eb2d 100644 --- a/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php +++ b/workflow/engine/classes/model/map/AbeConfigurationMapBuilder.php @@ -89,7 +89,10 @@ class AbeConfigurationMapBuilder $tMap->addColumn('ABE_UPDATE_DATE', 'AbeUpdateDate', 'int', CreoleTypes::TIMESTAMP, false, null); - $tMap->addColumn('ABE_SUBJECT_FIELD', 'AbeSubjectField', 'string', CreoleTypes::VARCHAR, true, 100); + $tMap->addColumn('ABE_SUBJECT_FIELD', 'AbeSubjectField', 'string', CreoleTypes::VARCHAR, false, 100); + + $tMap->addColumn('ABE_MAILSERVER_OR_MAILCURRENT', 'AbeMailserverOrMailcurrent', 'int', CreoleTypes::INTEGER, false, null); + } // doBuild() } // AbeConfigurationMapBuilder diff --git a/workflow/engine/classes/model/om/BaseAbeConfiguration.php b/workflow/engine/classes/model/om/BaseAbeConfiguration.php index 16b7cdc13..037553444 100644 --- a/workflow/engine/classes/model/om/BaseAbeConfiguration.php +++ b/workflow/engine/classes/model/om/BaseAbeConfiguration.php @@ -103,7 +103,13 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent * The value for the abe_subject_field field. * @var string */ - protected $abe_subject_field; + protected $abe_subject_field = ''; + + /** + * The value for the abe_mailserver_or_mailcurrent field. + * @var int + */ + protected $abe_mailserver_or_mailcurrent = 0; /** * Flag to prevent endless save loop, if this object is referenced @@ -295,7 +301,7 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent /** * Get the [abe_subject_field] column value. - * + * * @return string */ public function getAbeSubjectField() @@ -304,6 +310,17 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent return $this->abe_subject_field; } + /** + * Get the [abe_mailserver_or_mailcurrent] column value. + * + * @return int + */ + public function getAbeMailserverOrMailcurrent() + { + + return $this->abe_mailserver_or_mailcurrent; + } + /** * Set the value of [abe_uid] column. * @@ -584,7 +601,7 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent /** * Set the value of [abe_subject_field] column. - * + * * @param string $v new value * @return void */ @@ -604,6 +621,28 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent } // setAbeSubjectField() + /** + * Set the value of [abe_mailserver_or_mailcurrent] column. + * + * @param int $v new value + * @return void + */ + public function setAbeMailserverOrMailcurrent($v) + { + + // Since the native PHP type for this column is integer, + // we will cast the input value to an int (if it is not). + if ($v !== null && !is_int($v) && is_numeric($v)) { + $v = (int) $v; + } + + if ($this->abe_mailserver_or_mailcurrent !== $v || $v === 0) { + $this->abe_mailserver_or_mailcurrent = $v; + $this->modifiedColumns[] = AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT; + } + + } // setAbeMailserverOrMailcurrent() + /** * Hydrates (populates) the object variables with values from the database resultset. * @@ -645,14 +684,16 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $this->abe_update_date = $rs->getTimestamp($startcol + 11, null); - $this->abe_subject_field = $rs->getString($startcol + 12, null); + $this->abe_subject_field = $rs->getString($startcol + 12); + + $this->abe_mailserver_or_mailcurrent = $rs->getInt($startcol + 13); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 13; // 13 = AbeConfigurationPeer::NUM_COLUMNS - AbeConfigurationPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 14; // 14 = AbeConfigurationPeer::NUM_COLUMNS - AbeConfigurationPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating AbeConfiguration object", $e); @@ -895,6 +936,9 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent case 12: return $this->getAbeSubjectField(); break; + case 13: + return $this->getAbeMailserverOrMailcurrent(); + break; default: return null; break; @@ -928,6 +972,7 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $keys[10] => $this->getAbeCreateDate(), $keys[11] => $this->getAbeUpdateDate(), $keys[12] => $this->getAbeSubjectField(), + $keys[13] => $this->getAbeMailserverOrMailcurrent(), ); return $result; } @@ -998,6 +1043,9 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent case 12: $this->setAbeSubjectField($value); break; + case 13: + $this->setAbeMailserverOrMailcurrent($value); + break; } // switch() } @@ -1072,6 +1120,11 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent if (array_key_exists($keys[12], $arr)) { $this->setAbeSubjectField($arr[$keys[12]]); } + + if (array_key_exists($keys[13], $arr)) { + $this->setAbeMailserverOrMailcurrent($arr[$keys[13]]); + } + } /** @@ -1135,6 +1188,11 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $criteria->add(AbeConfigurationPeer::ABE_SUBJECT_FIELD, $this->abe_subject_field); } + if ($this->isColumnModified(AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT)) { + $criteria->add(AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT, $this->abe_mailserver_or_mailcurrent); + } + + return $criteria; } @@ -1212,6 +1270,9 @@ abstract class BaseAbeConfiguration extends BaseObject implements Persistent $copyObj->setAbeSubjectField($this->abe_subject_field); + $copyObj->setAbeMailserverOrMailcurrent($this->abe_mailserver_or_mailcurrent); + + $copyObj->setNew(true); $copyObj->setAbeUid(''); // this is a pkey column, so set to default value diff --git a/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php b/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php index 2c20c8718..53c63bdd0 100644 --- a/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php +++ b/workflow/engine/classes/model/om/BaseAbeConfigurationPeer.php @@ -25,7 +25,7 @@ abstract class BaseAbeConfigurationPeer const CLASS_DEFAULT = 'classes.model.AbeConfiguration'; /** The total number of columns. */ - const NUM_COLUMNS = 13; + const NUM_COLUMNS = 14; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -70,6 +70,9 @@ abstract class BaseAbeConfigurationPeer /** the column name for the ABE_SUBJECT_FIELD field */ const ABE_SUBJECT_FIELD = 'ABE_CONFIGURATION.ABE_SUBJECT_FIELD'; + /** the column name for the ABE_MAILSERVER_OR_MAILCURRENT field */ + const ABE_MAILSERVER_OR_MAILCURRENT = 'ABE_CONFIGURATION.ABE_MAILSERVER_OR_MAILCURRENT'; + /** The PHP to DB Name Mapping */ private static $phpNameMap = null; @@ -81,10 +84,10 @@ abstract class BaseAbeConfigurationPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AbeUid', 'ProUid', 'TasUid', 'AbeType', 'AbeTemplate', 'AbeDynType', 'DynUid', 'AbeEmailField', 'AbeActionField', 'AbeCaseNoteInResponse', 'AbeCreateDate', 'AbeUpdateDate', 'AbeSubjectField', ), - BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID, AbeConfigurationPeer::PRO_UID, AbeConfigurationPeer::TAS_UID, AbeConfigurationPeer::ABE_TYPE, AbeConfigurationPeer::ABE_TEMPLATE, AbeConfigurationPeer::ABE_DYN_TYPE, AbeConfigurationPeer::DYN_UID, AbeConfigurationPeer::ABE_EMAIL_FIELD, AbeConfigurationPeer::ABE_ACTION_FIELD, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, AbeConfigurationPeer::ABE_CREATE_DATE, AbeConfigurationPeer::ABE_UPDATE_DATE, AbeConfigurationPeer::ABE_SUBJECT_FIELD, ), - BasePeer::TYPE_FIELDNAME => array ('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_CREATE_DATE', 'ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ) + BasePeer::TYPE_PHPNAME => array ('AbeUid', 'ProUid', 'TasUid', 'AbeType', 'AbeTemplate', 'AbeDynType', 'DynUid', 'AbeEmailField', 'AbeActionField', 'AbeCaseNoteInResponse', 'AbeCreateDate', 'AbeUpdateDate', 'AbeSubjectField', 'AbeMailserverOrMailcurrent', ), + BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID, AbeConfigurationPeer::PRO_UID, AbeConfigurationPeer::TAS_UID, AbeConfigurationPeer::ABE_TYPE, AbeConfigurationPeer::ABE_TEMPLATE, AbeConfigurationPeer::ABE_DYN_TYPE, AbeConfigurationPeer::DYN_UID, AbeConfigurationPeer::ABE_EMAIL_FIELD, AbeConfigurationPeer::ABE_ACTION_FIELD, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE, AbeConfigurationPeer::ABE_CREATE_DATE, AbeConfigurationPeer::ABE_UPDATE_DATE, AbeConfigurationPeer::ABE_SUBJECT_FIELD, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT, ), + BasePeer::TYPE_FIELDNAME => array ('ABE_UID', 'PRO_UID', 'TAS_UID', 'ABE_TYPE', 'ABE_TEMPLATE', 'ABE_DYN_TYPE', 'DYN_UID', 'ABE_EMAIL_FIELD', 'ABE_ACTION_FIELD', 'ABE_CASE_NOTE_IN_RESPONSE', 'ABE_CREATE_DATE', 'ABE_UPDATE_DATE', 'ABE_SUBJECT_FIELD', 'ABE_MAILSERVER_OR_MAILCURRENT', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ) ); /** @@ -94,10 +97,10 @@ abstract class BaseAbeConfigurationPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AbeUid' => 0, 'ProUid' => 1, 'TasUid' => 2, 'AbeType' => 3, 'AbeTemplate' => 4, 'AbeDynType' => 5, 'DynUid' => 6, 'AbeEmailField' => 7, 'AbeActionField' => 8, 'AbeCaseNoteInResponse' => 9, 'AbeCreateDate' => 10, 'AbeUpdateDate' => 11, 'AbeSubjectField' => 12, ), - BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID => 0, AbeConfigurationPeer::PRO_UID => 1, AbeConfigurationPeer::TAS_UID => 2, AbeConfigurationPeer::ABE_TYPE => 3, AbeConfigurationPeer::ABE_TEMPLATE => 4, AbeConfigurationPeer::ABE_DYN_TYPE => 5, AbeConfigurationPeer::DYN_UID => 6, AbeConfigurationPeer::ABE_EMAIL_FIELD => 7, AbeConfigurationPeer::ABE_ACTION_FIELD => 8, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE => 9, AbeConfigurationPeer::ABE_CREATE_DATE => 10, AbeConfigurationPeer::ABE_UPDATE_DATE => 11, AbeConfigurationPeer::ABE_SUBJECT_FIELD => 12, ), - BasePeer::TYPE_FIELDNAME => array ('ABE_UID' => 0, 'PRO_UID' => 1, 'TAS_UID' => 2, 'ABE_TYPE' => 3, 'ABE_TEMPLATE' => 4, 'ABE_DYN_TYPE' => 5, 'DYN_UID' => 6, 'ABE_EMAIL_FIELD' => 7, 'ABE_ACTION_FIELD' => 8, 'ABE_CASE_NOTE_IN_RESPONSE' => 9, 'ABE_CREATE_DATE' => 10, 'ABE_UPDATE_DATE' => 11, 'ABE_SUBJECT_FIELD' => 12, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ) + BasePeer::TYPE_PHPNAME => array ('AbeUid' => 0, 'ProUid' => 1, 'TasUid' => 2, 'AbeType' => 3, 'AbeTemplate' => 4, 'AbeDynType' => 5, 'DynUid' => 6, 'AbeEmailField' => 7, 'AbeActionField' => 8, 'AbeCaseNoteInResponse' => 9, 'AbeCreateDate' => 10, 'AbeUpdateDate' => 11, 'AbeSubjectField' => 12, 'AbeMailserverOrMailcurrent' => 13, ), + BasePeer::TYPE_COLNAME => array (AbeConfigurationPeer::ABE_UID => 0, AbeConfigurationPeer::PRO_UID => 1, AbeConfigurationPeer::TAS_UID => 2, AbeConfigurationPeer::ABE_TYPE => 3, AbeConfigurationPeer::ABE_TEMPLATE => 4, AbeConfigurationPeer::ABE_DYN_TYPE => 5, AbeConfigurationPeer::DYN_UID => 6, AbeConfigurationPeer::ABE_EMAIL_FIELD => 7, AbeConfigurationPeer::ABE_ACTION_FIELD => 8, AbeConfigurationPeer::ABE_CASE_NOTE_IN_RESPONSE => 9, AbeConfigurationPeer::ABE_CREATE_DATE => 10, AbeConfigurationPeer::ABE_UPDATE_DATE => 11, AbeConfigurationPeer::ABE_SUBJECT_FIELD => 12, AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT => 13, ), + BasePeer::TYPE_FIELDNAME => array ('ABE_UID' => 0, 'PRO_UID' => 1, 'TAS_UID' => 2, 'ABE_TYPE' => 3, 'ABE_TEMPLATE' => 4, 'ABE_DYN_TYPE' => 5, 'DYN_UID' => 6, 'ABE_EMAIL_FIELD' => 7, 'ABE_ACTION_FIELD' => 8, 'ABE_CASE_NOTE_IN_RESPONSE' => 9, 'ABE_CREATE_DATE' => 10, 'ABE_UPDATE_DATE' => 11, 'ABE_SUBJECT_FIELD' => 12, 'ABE_MAILSERVER_OR_MAILCURRENT' => 13, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ) ); /** @@ -224,6 +227,8 @@ abstract class BaseAbeConfigurationPeer $criteria->addSelectColumn(AbeConfigurationPeer::ABE_SUBJECT_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_MAILSERVER_OR_MAILCURRENT); + } const COUNT = 'COUNT(ABE_CONFIGURATION.ABE_UID)'; diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 9036d7673..9bff54f9f 100755 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -4664,6 +4664,16 @@ + + + + + + + + + + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index c9d2f9370..9012b5fe2 100755 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2651,6 +2651,7 @@ CREATE TABLE `ABE_CONFIGURATION` `ABE_CREATE_DATE` DATETIME NOT NULL, `ABE_UPDATE_DATE` DATETIME, `ABE_SUBJECT_FIELD` VARCHAR(100) default '' NOT NULL, + `ABE_MAILSERVER_OR_MAILCURRENT` INTEGER default 0 NOT NULL, PRIMARY KEY (`ABE_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='The plugin table for actionsByEmail'; #----------------------------------------------------------------------------- diff --git a/workflow/engine/methods/services/ActionsByEmailDataForm.php b/workflow/engine/methods/services/ActionsByEmailDataForm.php index a9ecb7671..6fe0e0880 100755 --- a/workflow/engine/methods/services/ActionsByEmailDataForm.php +++ b/workflow/engine/methods/services/ActionsByEmailDataForm.php @@ -39,7 +39,7 @@ if (PMLicensedFeatures $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); $result->next(); $configuration = $result->getRow(); - $a = new pmDynaform(G::decrypt($_REQUEST['DYN_UID'], URL_KEY)); + $action = 'ActionsByEmailDataFormPost.php?APP_UID=' . $_REQUEST['APP_UID'] . '&DEL_INDEX=' . $_REQUEST['DEL_INDEX'] . '&ABER=' . $_REQUEST['ABER']; $record['DYN_CONTENT'] = $configuration['DYN_CONTENT']; $record['PRO_UID'] = $configuration['PRO_UID']; @@ -48,6 +48,7 @@ if (PMLicensedFeatures $record['DEL_INDEX'] = $_REQUEST['DEL_INDEX']; $record['ABER'] = $_REQUEST['ABER']; if (is_null($caseFields['DEL_FINISH_DATE'])) { + $a = new pmDynaform($record); $a->printABE($action,$record); } else { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showInfo', '', array('MESSAGE' => 'The form has already been filled and sent.')); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php index 6fde65015..918b80ac6 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php @@ -59,6 +59,7 @@ class ActionsByEmail $configuration['ABE_SUBJECT_FIELD'] = $configuration['ABE_SUBJECT_FIELD']; $configuration['ABE_EMAIL_FIELD'] = $configuration['ABE_EMAIL_FIELD']; $configuration['ABE_ACTION_FIELD'] = $configuration['ABE_ACTION_FIELD']; + $configuration['ABE_MAILSERVER_OR_MAILCURRENT'] = $configuration['ABE_MAILSERVER_OR_MAILCURRENT']; $configuration['ABE_CASE_NOTE_IN_RESPONSE'] = $configuration['ABE_CASE_NOTE_IN_RESPONSE'] ? '["1"]' : '[]'; } $configuration['feature'] = 'ActionsByEmail'; From e6d59e6f34391f6b16808e425754dbb46e8c9c9f Mon Sep 17 00:00:00 2001 From: dheeyi Date: Wed, 23 Sep 2015 10:02:33 -0400 Subject: [PATCH 03/18] PM-3612 18236: Error en bandeja "paused" al buscar --- workflow/engine/classes/model/ListPaused.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/model/ListPaused.php b/workflow/engine/classes/model/ListPaused.php index fb2ddc41f..11c326398 100644 --- a/workflow/engine/classes/model/ListPaused.php +++ b/workflow/engine/classes/model/ListPaused.php @@ -229,8 +229,8 @@ class ListPaused extends BaseListPaused { if ($search != '') { $criteria->add( - $criteria->getNewCriterion( 'CON_APP.CON_VALUE', '%' . $search . '%', Criteria::LIKE )-> - addOr( $criteria->getNewCriterion( 'CON_TAS.CON_VALUE', '%' . $search . '%', Criteria::LIKE )-> + $criteria->getNewCriterion( ListPausedPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE )-> + addOr( $criteria->getNewCriterion( ListPausedPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE )-> addOr( $criteria->getNewCriterion( ListPausedPeer::APP_NUMBER, $search, Criteria::LIKE ) ) ) ); } From be0cd32d5f52fbaad9e61792b6057f48b97b5973 Mon Sep 17 00:00:00 2001 From: Ronald Quenta Date: Thu, 24 Sep 2015 15:48:24 -0400 Subject: [PATCH 04/18] =?UTF-8?q?PM-3664=20(Endpoint)=20api/1.0/{workflow}?= =?UTF-8?q?/light/start-case=20devuelve=20par=C3=A1metros=20vacios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/src/ProcessMaker/BusinessModel/Light.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php index 408b09aff..6e4a93f28 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php @@ -271,11 +271,23 @@ class Light { try { $oCase = new \Cases(); + $oUser = new \Users(); $this->lookinginforContentProcess( $proUid ); $aData = $oCase->startCase( $taskUid, $userId ); + $aUserLog = $oUser->loadDetailed($userId); + $_SESSION['APPLICATION'] = $aData['APPLICATION']; + $_SESSION['INDEX'] = $aData['INDEX']; + $_SESSION['PROCESS'] = $aData['PROCESS']; + $_SESSION['TASK'] = $taskUid; + $_SESSION["USER_LOGGED"] = $userId; + $_SESSION["USR_USERNAME"] = $aUserLog['USR_USERNAME']; + + $aFields = $oCase->loadCase( $aData['APPLICATION'], $aData['INDEX'] ); + $oCase->updateCase( $aData['APPLICATION'], $aFields ); + $response = array(); $response['caseId'] = $aData['APPLICATION']; $response['caseIndex'] = $aData['INDEX']; From 697c8acff16055808df284ac3a7e10faf41a3ca4 Mon Sep 17 00:00:00 2001 From: dheeyi Date: Thu, 24 Sep 2015 16:17:57 -0400 Subject: [PATCH 05/18] PM-3567 Un usuario asignado como Process Supervisor no puede editar los dynaforms --- workflow/engine/classes/class.case.php | 3 +- workflow/engine/classes/class.processMap.php | 2 +- workflow/engine/methods/cases/cases_Ajax.php | 11 +- .../cases/cases_SaveDataSupervisor.php | 141 +++++++++--------- .../methods/cases/cases_StepToRevise.php | 19 ++- 5 files changed, 97 insertions(+), 79 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 9dca4e926..1e1c1ee00 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -2377,7 +2377,6 @@ class Cases public function getNextSupervisorStep($sProcessUID, $iPosition, $sType = 'DYNAFORM') { - $iPosition += 1; $oCriteria = new Criteria(); $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProcessUID); $oCriteria->add(StepSupervisorPeer::STEP_TYPE_OBJ, $sType); @@ -2390,7 +2389,7 @@ class Cases $oCriteria = new Criteria(); $oCriteria->add(StepSupervisorPeer::PRO_UID, $sProcessUID); $oCriteria->add(StepSupervisorPeer::STEP_TYPE_OBJ, $sType); - $oCriteria->add(StepSupervisorPeer::STEP_POSITION, 1); + $oCriteria->add(StepSupervisorPeer::STEP_POSITION, ($iPosition+1)); $oDataset = StepSupervisorPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); diff --git a/workflow/engine/classes/class.processMap.php b/workflow/engine/classes/class.processMap.php index 1f3ad6b19..679f0c115 100755 --- a/workflow/engine/classes/class.processMap.php +++ b/workflow/engine/classes/class.processMap.php @@ -3331,7 +3331,7 @@ class processMap public function assignSupervisorStep($sProcessUID, $sObjType, $sObjUID) { $oStepSupervisor = new StepSupervisor(); - $oStepSupervisor->create(array('PRO_UID' => $sProcessUID, 'STEP_TYPE_OBJ' => $sObjType, 'STEP_UID_OBJ' => $sObjUID, 'STEP_POSITION' => $oStepSupervisor->getNextPosition($sProcessUID, $sObjType))); + $oStepSupervisor->create(array('PRO_UID' => $sProcessUID, 'STEP_TYPE_OBJ' => $sObjType, 'STEP_UID_OBJ' => $sObjUID, 'STEP_POSITION' => $oStepSupervisor->getNextPositionAll($sProcessUID, $sObjType))); } /** diff --git a/workflow/engine/methods/cases/cases_Ajax.php b/workflow/engine/methods/cases/cases_Ajax.php index 9b0e75bb9..19cf881de 100644 --- a/workflow/engine/methods/cases/cases_Ajax.php +++ b/workflow/engine/methods/cases/cases_Ajax.php @@ -956,9 +956,6 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { $Fields['actionType'] = $_POST['actionType']; $Fields["docVersion"] = (int)($_POST["docVersion"]); - $appDocument = new AppDocument(); - $arrayAppDocumentData = $appDocument->load($_POST["appDocId"]); - $oInputDocument = new InputDocument(); $InpDocData = $oInputDocument->load( $Fields['DOC_UID'] ); @@ -971,7 +968,13 @@ switch (($_POST['action']) ? $_POST['action'] : $_REQUEST['action']) { $Fields["INP_DOC_MAX_FILESIZE_LABEL"] = ($inpDocMaxFilesize > 0)? "[" . $InpDocData["INP_DOC_MAX_FILESIZE"] . " " . $InpDocData["INP_DOC_MAX_FILESIZE_UNIT"] . "]" : ""; $Fields['fileTypes'] = $InpDocData['INP_DOC_TYPE_FILE']; - $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'cases/cases_AttachInputDocumentGeneral', '', $Fields, 'cases_SupervisorSaveDocument?APP_DOC_UID=' . $_POST['appDocId'] . "&DOC_VERSION=" . ($Fields['docVersion'] + 1) . '&APP_UID=' . $arrayAppDocumentData["APP_UID"] . '&UID=' . $_POST['docID']); + if($_POST['actionType'] == 'NV'){ + $appDocument = new AppDocument(); + $arrayAppDocumentData = $appDocument->load($_POST["appDocId"]); + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'cases/cases_AttachInputDocumentGeneral', '', $Fields, 'cases_SupervisorSaveDocument?APP_DOC_UID=' . $_POST['appDocId'] . "&DOC_VERSION=" . ($Fields['docVersion'] + 1) . '&APP_UID=' . $arrayAppDocumentData["APP_UID"] . '&UID=' . $_POST['docID']); + }else{ + $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'cases/cases_AttachInputDocumentGeneral', '', $Fields, 'cases_SupervisorSaveDocument?UID=' . $_POST['docID'] . '&APP_UID=' . $_POST['appDocId'] ); + } G::RenderPage( 'publish', 'raw' ); break; case "inputDocumentVersionHistory": diff --git a/workflow/engine/methods/cases/cases_SaveDataSupervisor.php b/workflow/engine/methods/cases/cases_SaveDataSupervisor.php index f40f3a918..b31e7d633 100755 --- a/workflow/engine/methods/cases/cases_SaveDataSupervisor.php +++ b/workflow/engine/methods/cases/cases_SaveDataSupervisor.php @@ -1,68 +1,68 @@ -. - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ -//validate the data post - -$dynaForm = DynaformPeer::retrieveByPK($_GET["UID"]); - -$flagDynaFormNewVersion = !is_null($dynaForm) && $dynaForm->getDynVersion() == 2; - -if ($flagDynaFormNewVersion) { - $dataForm = $_POST["form"]; -} - -$oForm = new Form( $_SESSION['PROCESS'] . '/' . $_GET['UID'], PATH_DYNAFORM ); -$oForm->validatePost(); - -/* Includes */ -G::LoadClass( 'case' ); - -//load the variables -$oCase = new Cases(); -$Fields = $oCase->loadCase( $_SESSION['APPLICATION'] ); - -if ($flagDynaFormNewVersion) { - $Fields["APP_DATA"] = array_merge($Fields["APP_DATA"], $dataForm); -} - -$Fields['APP_DATA'] = array_merge( $Fields['APP_DATA'], $_POST['form'] ); - -//save data -$aData = array (); -$aData['APP_NUMBER'] = $Fields['APP_NUMBER']; -$aData['APP_PROC_STATUS'] = $Fields['APP_PROC_STATUS']; -$aData['APP_DATA'] = $Fields['APP_DATA']; -$aData['DEL_INDEX'] = $_SESSION['INDEX']; -$aData['TAS_UID'] = $_SESSION['TASK']; -$aData['CURRENT_DYNAFORM'] = $_GET['UID']; -$aData['PRO_UID'] = $Fields['PRO_UID']; -$aData['USER_UID'] = $_SESSION['USER_LOGGED']; -$aData['APP_STATUS'] = $Fields['APP_STATUS']; - -//$aData = $oCase->loadCase( $_SESSION['APPLICATION'] ); +. + * + * For more information, contact Colosa Inc, 2566 Le Jeune Rd., + * Coral Gables, FL, 33134, USA, or email info@colosa.com. + */ +//validate the data post + +$dynaForm = DynaformPeer::retrieveByPK($_GET["UID"]); + +$flagDynaFormNewVersion = !is_null($dynaForm) && $dynaForm->getDynVersion() == 2; + +if ($flagDynaFormNewVersion) { + $dataForm = $_POST["form"]; +} + +$oForm = new Form( $_SESSION['PROCESS'] . '/' . $_GET['UID'], PATH_DYNAFORM ); +$oForm->validatePost(); + +/* Includes */ +G::LoadClass( 'case' ); + +//load the variables +$oCase = new Cases(); +$Fields = $oCase->loadCase( $_SESSION['APPLICATION'] ); + +if ($flagDynaFormNewVersion) { + $Fields["APP_DATA"] = array_merge($Fields["APP_DATA"], $dataForm); +} + +$Fields['APP_DATA'] = array_merge( $Fields['APP_DATA'], $_POST['form'] ); + +//save data +$aData = array (); +$aData['APP_NUMBER'] = $Fields['APP_NUMBER']; +$aData['APP_PROC_STATUS'] = $Fields['APP_PROC_STATUS']; +$aData['APP_DATA'] = $Fields['APP_DATA']; +$aData['DEL_INDEX'] = $_SESSION['INDEX']; +$aData['TAS_UID'] = $_SESSION['TASK']; +$aData['CURRENT_DYNAFORM'] = $_GET['UID']; +$aData['PRO_UID'] = $Fields['PRO_UID']; +$aData['USER_UID'] = $_SESSION['USER_LOGGED']; +$aData['APP_STATUS'] = $Fields['APP_STATUS']; + +//$aData = $oCase->loadCase( $_SESSION['APPLICATION'] ); $oCase->updateCase( $_SESSION['APPLICATION'], $aData ); -G::SendTemporalMessage( 'ID_SAVED_SUCCESSFULLY', 'info' ); - +G::SendTemporalMessage( 'ID_SAVED_SUCCESSFULLY', 'info' ); + //Save files if (isset( $_FILES["form"]["name"] ) && count( $_FILES["form"]["name"] ) > 0) { $arrayField = array (); @@ -204,10 +204,9 @@ if (isset( $_FILES["form"]["name"] ) && count( $_FILES["form"]["name"] ) > 0) { } } } -} - -//go to the next step -$aNextStep = $oCase->getNextSupervisorStep( $_SESSION['PROCESS'], $_SESSION['STEP_POSITION'] ); -$_SESSION['STEP_POSITION'] = $aNextStep['POSITION']; -G::header( 'location: cases_StepToRevise?DYN_UID=' . $aNextStep['UID'] . '&APP_UID=' . $_SESSION['APPLICATION'] . '&DEL_INDEX=' . $_SESSION['INDEX'] ); - +} + +//go to the next step +$aNextStep = $oCase->getNextSupervisorStep( $_SESSION['PROCESS'], $_SESSION['STEP_POSITION'] ); +G::header( 'location: cases_StepToRevise?DYN_UID=' . $aNextStep['UID'] . '&APP_UID=' . $_SESSION['APPLICATION'] . '&DEL_INDEX=' . $_SESSION['INDEX'] ); + diff --git a/workflow/engine/methods/cases/cases_StepToRevise.php b/workflow/engine/methods/cases/cases_StepToRevise.php index 936aabcb0..9e72f1a57 100755 --- a/workflow/engine/methods/cases/cases_StepToRevise.php +++ b/workflow/engine/methods/cases/cases_StepToRevise.php @@ -96,7 +96,24 @@ if (! isset( $_GET['type'] )) { $_GET['type'] = 'DYNAFORM'; } if (! isset( $_GET['position'] )) { - $_GET['position'] = 1; + $_GET['position'] = $_SESSION['STEP_POSITION']; +}else{ + if($_GET['type'] == 'DYNAFORM'){ + $criteria = new Criteria(); + + $criteria->addSelectColumn(StepSupervisorPeer::STEP_POSITION); + $criteria->add(StepSupervisorPeer::PRO_UID, $_SESSION['PROCESS'], Criteria::EQUAL); + $criteria->add(StepSupervisorPeer::STEP_UID_OBJ, $_GET['DYN_UID'], Criteria::EQUAL); + + $rsCriteria = StepSupervisorPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $rsCriteria->next(); + $aRow = $rsCriteria->getRow(); + + $_GET['position'] = $aRow['STEP_POSITION']; + }else{ + $_GET['position'] = 1; + } } $_SESSION['STEP_POSITION'] = (int) $_GET['position']; From a3aa66a1ab7ef85b55f4a188f37b8fbf61298c16 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Fri, 25 Sep 2015 12:54:12 -0400 Subject: [PATCH 06/18] PM-3625 "REST endpoint PUT /api/1.0/workflow/cases/..." SOLVED --- .../engine/src/ProcessMaker/BusinessModel/Cases.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 2b370490d..3020f85ac 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -1586,6 +1586,16 @@ class Cases Validator::isString($usr_uid, '$usr_uid'); Validator::usrUid($usr_uid, '$usr_uid'); + $arrayResult = $this->getStatusInfo($app_uid); + + if ($arrayResult["APP_STATUS"] == "CANCELLED") { + throw new \Exception(\G::LoadTranslation("ID_CASE_CANCELLED", array($app_uid))); + } + + if ($arrayResult["APP_STATUS"] == "COMPLETED") { + throw new \Exception(\G::LoadTranslation("ID_CASE_IS_COMPLETED", array($app_uid))); + } + $appCacheView = new \AppCacheView(); $isProcessSupervisor = $appCacheView->getProUidSupervisor($usr_uid); $criteria = new \Criteria("workflow"); From 3abea00ef01af96b837545a5bf983368d7b92655 Mon Sep 17 00:00:00 2001 From: dheeyi Date: Fri, 25 Sep 2015 12:59:51 -0400 Subject: [PATCH 07/18] PM-3600 Cuando importas un proceso que tiene configurado una categoria, no se puede editar las propiedades. --- workflow/engine/src/ProcessMaker/Importer/Importer.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index 10cf796b1..59f593cd7 100755 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -399,7 +399,9 @@ abstract class Importer unset($arrayWorkflowTables["process"]["PRO_CREATE_USER"]); unset($arrayWorkflowTables["process"]["PRO_CREATE_DATE"]); unset($arrayWorkflowTables["process"]["PRO_UPDATE_DATE"]); - + unset($arrayWorkflowTables["process"]["PRO_CATEGORY"]); + unset($arrayWorkflowTables["process"]["PRO_CATEGORY_LABEL"]); + $workflow->update($arrayWorkflowTables["process"]); //Process-Files upgrade From e9ff9f17e44175a6cddc41039bcb0a5617f3082d Mon Sep 17 00:00:00 2001 From: dheeyi Date: Fri, 25 Sep 2015 15:15:50 -0400 Subject: [PATCH 08/18] PM-3516 0018383 Error en el buscador de la bandeja "Participated" --- workflow/engine/classes/model/ListParticipatedLast.php | 9 +++++++-- workflow/engine/templates/cases/casesList.js | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/workflow/engine/classes/model/ListParticipatedLast.php b/workflow/engine/classes/model/ListParticipatedLast.php index 2912e4db1..caf23ca82 100644 --- a/workflow/engine/classes/model/ListParticipatedLast.php +++ b/workflow/engine/classes/model/ListParticipatedLast.php @@ -203,6 +203,7 @@ class ListParticipatedLast extends BaseListParticipatedLast $category = isset($filters['category']) ? $filters['category'] : ""; $dateFrom = isset($filters['dateFrom']) ? $filters['dateFrom'] : ""; $dateTo = isset($filters['dateTo']) ? $filters['dateTo'] : ""; + $filterStatus = isset($filters['filterStatus']) ? $filters['filterStatus'] : ""; if ($filter != '') { switch ($filter) { @@ -215,11 +216,15 @@ class ListParticipatedLast extends BaseListParticipatedLast } } - if ($search != '') { + if ($search != '' ) { $criteria->add( $criteria->getNewCriterion( ListParticipatedLastPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE )-> addOr( $criteria->getNewCriterion( ListParticipatedLastPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE )-> - addOr( $criteria->getNewCriterion( ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::LIKE ) ) ) ); + addOr( $criteria->getNewCriterion( ListParticipatedLastPeer::APP_NUMBER, $search, Criteria::LIKE ) ) ) ); + } + + if($filterStatus != ''){ + $criteria->add(ListParticipatedLastPeer::APP_STATUS, '%' . $filterStatus . '%', Criteria::LIKE ); } if ($process != '') { diff --git a/workflow/engine/templates/cases/casesList.js b/workflow/engine/templates/cases/casesList.js index 34a6785e4..2f9486c57 100755 --- a/workflow/engine/templates/cases/casesList.js +++ b/workflow/engine/templates/cases/casesList.js @@ -1189,7 +1189,7 @@ Ext.onReady ( function() { scope: this, 'select': function() { filterStatus = comboStatus.value; - storeCases.setBaseParam( 'status', filterStatus); + storeCases.setBaseParam( 'filterStatus', filterStatus); storeCases.setBaseParam( 'start', 0); storeCases.setBaseParam( 'limit', pageSize); //storeCases.load(); From 3a73a96f51a65dc0f9a1f94c9fb94dce53266df2 Mon Sep 17 00:00:00 2001 From: Ronald Quenta Date: Fri, 25 Sep 2015 16:34:54 -0400 Subject: [PATCH 09/18] PM-3671 Process Permission>AL configurar un permiso y querer guardar nos visualiza un error --- framework/src/Maveriks/WebApplication.php | 1 + .../Api/Project/ProcessPermissions.php | 5 ---- .../ProcessMaker/Services/OAuth2/PmPdo.php | 9 ------- .../ProcessMaker/Services/OAuth2/Server.php | 27 ++++++++++++++++--- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/framework/src/Maveriks/WebApplication.php b/framework/src/Maveriks/WebApplication.php index 71324a893..7fcd99d6f 100644 --- a/framework/src/Maveriks/WebApplication.php +++ b/framework/src/Maveriks/WebApplication.php @@ -378,6 +378,7 @@ class WebApplication } Services\OAuth2\Server::setWorkspace(SYS_SYS); + Services\OAuth2\Server::loadPostEnvironment(); $this->rest->addAPIClass('\ProcessMaker\\Services\\OAuth2\\Server', 'oauth2'); return $uri; diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php index 46922b2e2..e73247e51 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php @@ -17,7 +17,6 @@ class ProcessPermissions extends Api /** * @param string $prj_uid {@min 1} {@max 32} * - * @access public * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia * @@ -40,7 +39,6 @@ class ProcessPermissions extends Api * @param string $prj_uid {@min 1} {@max 32} * @param string $ob_uid {@min 1} {@max 32} * - * @access public * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia * @@ -75,7 +73,6 @@ class ProcessPermissions extends Api * @param string $inputs {@from body} * @param string $outputs {@from body} * - * @access public * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia * @@ -134,7 +131,6 @@ class ProcessPermissions extends Api * @param string $inputs {@from body} * @param string $outputs {@from body} * - * @access public * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia * @@ -172,7 +168,6 @@ class ProcessPermissions extends Api * @param string $prj_uid {@min 1} {@max 32} * @param string $ob_uid {@min 1} {@max 32} * - * @access public * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia * diff --git a/workflow/engine/src/ProcessMaker/Services/OAuth2/PmPdo.php b/workflow/engine/src/ProcessMaker/Services/OAuth2/PmPdo.php index 9bb70b8fd..4e610f8ad 100644 --- a/workflow/engine/src/ProcessMaker/Services/OAuth2/PmPdo.php +++ b/workflow/engine/src/ProcessMaker/Services/OAuth2/PmPdo.php @@ -296,14 +296,5 @@ class PmPdo implements \OAuth2\Storage\AuthorizationCodeInterface, return array_merge($a, array_change_key_case($a, $case)); } - public function loadPostEnvironment($request = null) - { - if (!defined('SYS_LANG')) { - $acceptLanguage =$request->headers('ACCEPT_LANGUAGE'); - $lang = (!is_null($acceptLanguage) && strlen($acceptLanguage)<=2)?$acceptLanguage:'en'; - define("SYS_LANG", $lang); - } - return true; - } } diff --git a/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php b/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php index 5fd8216b4..5fc811618 100644 --- a/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php +++ b/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php @@ -285,8 +285,6 @@ class Server implements iAuthenticate $request = \OAuth2\Request::createFromGlobals(); } - $this->storage->loadPostEnvironment($request); - $response = $this->server->handleTokenRequest($request); //Set/Get token //PmPdo->setAccessToken() $token = $response->getParameters(); @@ -334,7 +332,6 @@ class Server implements iAuthenticate public function __isAllowed() { $request = \OAuth2\Request::createFromGlobals(); - $this->storage->loadPostEnvironment($request); $allowed = $this->server->verifyResourceRequest($request); $token = $this->server->getAccessTokenData($request); self::$userId = $token['user_id']; @@ -394,5 +391,29 @@ class Server implements iAuthenticate { return ""; } + + public static function loadPostEnvironment($request = null) + { + $acceptLanguage = 'en'; + if ($request == null) { + $request = \OAuth2\Request::createFromGlobals(); + $acceptLanguage = $request->headers('ACCEPT_LANGUAGE'); + } + + if (!defined('SYS_LANG')) { + $Translations = new \Translation; + $translationsTable = $Translations->getTranslationEnvironments(); + $inLang = false; + foreach ($translationsTable as $locale) { + if ($locale['LOCALE'] == $acceptLanguage){ + $inLang = true; + break; + } + } + $lang = $inLang?$acceptLanguage:'en'; + define("SYS_LANG", $lang); + } + + } } From ad2faf3126f36e0a21fc740cd48165c20f64dd34 Mon Sep 17 00:00:00 2001 From: "marcelo.cuiza" Date: Tue, 8 Sep 2015 16:07:09 -0400 Subject: [PATCH 10/18] PM-3475: 0018278: Desaparecen casos al cambiar el tipo de derivacion optimizacion de query cambio de metodo en criteria builder validacion SELF_SERVICE_VALUE_BASED se considera tambien de SELF SERVICE VALUE BASED a SELF SERVICE --- workflow/engine/classes/model/Task.php | 29 ++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/workflow/engine/classes/model/Task.php b/workflow/engine/classes/model/Task.php index 38adfaaac..524ed3cc1 100755 --- a/workflow/engine/classes/model/Task.php +++ b/workflow/engine/classes/model/Task.php @@ -498,9 +498,10 @@ class Task extends BaseTask try { $con->begin(); - $this->load($fields["TAS_UID"]); + $oldValues = $this->load($fields["TAS_UID"]); $this->fromArray($fields, BasePeer::TYPE_FIELDNAME); - + $this->validateAssignType($fields,$oldValues); + if ($this->validate()) { $taskDefTitlePrevious = null; @@ -787,5 +788,29 @@ class Task extends BaseTask return $event_uid; } + + public function validateAssignType($newValues,$oldValues) + { + if(isset($newValues['TAS_ASSIGN_TYPE']) && isset($oldValues['TAS_ASSIGN_TYPE'])) { + $newAssigType = $newValues['TAS_ASSIGN_TYPE']; + $oldAssigType = $oldValues['TAS_ASSIGN_TYPE']; + if($newAssigType == 'SELF_SERVICE'){ + $newAssigType = isset($newValues['TAS_GROUP_VARIABLE'])?(empty($newValues['TAS_GROUP_VARIABLE'])?'SELF_SERVICE':'SELF_SERVICE_VALUE_BASED'):'SELF_SERVICE'; + } + if($oldAssigType == 'SELF_SERVICE'){ + $oldAssigType = isset($oldValues['TAS_GROUP_VARIABLE'])?(empty($oldValues['TAS_GROUP_VARIABLE'])?'SELF_SERVICE':'SELF_SERVICE_VALUE_BASED'):'SELF_SERVICE'; + } + if(($oldAssigType == 'SELF_SERVICE' && $newAssigType != 'SELF_SERVICE') || ($oldAssigType == 'SELF_SERVICE_VALUE_BASED' && $newAssigType != 'SELF_SERVICE_VALUE_BASED')) { + $oCriteria = new Criteria(); + $oCriteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"); + $oCriteria->add(AppDelegationPeer::TAS_UID, $newValues['TAS_UID']); + $oApplication = AppDelegationPeer::doSelectOne($oCriteria); + if(!empty($oApplication)) { + throw (new Exception(G::LoadTranslation('ID_CURRENT_ASSING_TYPE_WITH_CASES'))); + } + } + } + } } + \ No newline at end of file From a3589fe9488d67ba4a37ef3f413f0664c3ae9b29 Mon Sep 17 00:00:00 2001 From: Luis Fernando Saisa Lopez Date: Fri, 25 Sep 2015 19:25:47 -0400 Subject: [PATCH 11/18] PM-3477-C "REST endpoint DELETE cases/{app_uid}/output-document/..." SOLVED --- .../src/ProcessMaker/BusinessModel/Cases.php | 49 +++++- .../BusinessModel/Cases/OutputDocument.php | 163 ++++++++++++++++++ .../Services/Api/Cases/OutputDocument.php | 19 +- 3 files changed, 219 insertions(+), 12 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 2b370490d..757a96dfe 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -49,16 +49,25 @@ class Cases * Verify if does not exist the Case in table APPLICATION * * @param string $applicationUid Unique id of Case + * @param string $delIndex Delegation index * @param string $fieldNameForException Field name for the exception * * return void Throw exception if does not exist the Case in table APPLICATION */ - public function throwExceptionIfNotExistsCase($applicationUid, $fieldNameForException) + public function throwExceptionIfNotExistsCase($applicationUid, $delIndex, $fieldNameForException) { try { $obj = \ApplicationPeer::retrieveByPK($applicationUid); - if (is_null($obj)) { + $flag = is_null($obj); + + if (!$flag && $delIndex > 0) { + $obj = \AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); + + $flag = is_null($obj); + } + + if ($flag) { throw new \Exception(\G::LoadTranslation("ID_CASE_DOES_NOT_EXIST2", array($fieldNameForException, $applicationUid))); } } catch (\Exception $e) { @@ -440,7 +449,7 @@ class Cases \G::LoadClass("wsBase"); //Verify data - $this->throwExceptionIfNotExistsCase($applicationUid, $this->getFieldNameByFormatFieldName("APP_UID")); + $this->throwExceptionIfNotExistsCase($applicationUid, 0, $this->getFieldNameByFormatFieldName("APP_UID")); $criteria = new \Criteria("workflow"); @@ -536,7 +545,7 @@ class Cases { try { //Verify data - $this->throwExceptionIfNotExistsCase($applicationUid, $this->getFieldNameByFormatFieldName("APP_UID")); + $this->throwExceptionIfNotExistsCase($applicationUid, 0, $this->getFieldNameByFormatFieldName("APP_UID")); $criteria = new \Criteria("workflow"); @@ -1805,7 +1814,7 @@ class Cases $arrayTask = array(); //Verify data - $this->throwExceptionIfNotExistsCase($applicationUid, $this->getFieldNameByFormatFieldName("APP_UID")); + $this->throwExceptionIfNotExistsCase($applicationUid, 0, $this->getFieldNameByFormatFieldName("APP_UID")); //Set variables $process = new \Process(); @@ -2363,14 +2372,16 @@ class Cases * Get status info Case * * @param string $applicationUid Unique id of Case + * @param int $del_index {@min 1} + * @param string $userUid Unique id of User * * return array Return an array with status info Case, array empty otherwise */ - public function getStatusInfo($applicationUid) + public function getStatusInfo($applicationUid, $delIndex = 0, $userUid = "") { try { //Verify data - $this->throwExceptionIfNotExistsCase($applicationUid, $this->getFieldNameByFormatFieldName("APP_UID")); + $this->throwExceptionIfNotExistsCase($applicationUid, $delIndex, $this->getFieldNameByFormatFieldName("APP_UID")); //Get data //Status is PAUSED @@ -2388,6 +2399,14 @@ class Cases $criteria->getNewCriterion(\AppDelayPeer::APP_DISABLE_ACTION_USER, 0, \Criteria::EQUAL)) ); + if ($delIndex != 0) { + $criteria->add(\AppDelayPeer::APP_DEL_INDEX, $delIndex, \Criteria::EQUAL); + } + + if ($userUid != "") { + $criteria->add(\AppDelayPeer::APP_DELEGATION_USER, $userUid, \Criteria::EQUAL); + } + $rsCriteria = \AppDelayPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); @@ -2421,6 +2440,14 @@ class Cases $criteria->getNewCriterion(\AppThreadPeer::APP_THREAD_STATUS, "OPEN")) ); + if ($delIndex != 0) { + $criteria->add(\AppDelegationPeer::DEL_INDEX, $delIndex, \Criteria::EQUAL); + } + + if ($userUid != "") { + $criteria->add(\AppDelegationPeer::USR_UID, $userUid, \Criteria::EQUAL); + } + $rsCriteria = \ApplicationPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); @@ -2445,6 +2472,14 @@ class Cases $criteria->add(\ApplicationPeer::APP_STATUS, array("CANCELLED", "COMPLETED"), \Criteria::IN); $criteria->add(\AppDelegationPeer::DEL_LAST_INDEX, 1, \Criteria::EQUAL); + if ($delIndex != 0) { + $criteria->add(\AppDelegationPeer::DEL_INDEX, $delIndex, \Criteria::EQUAL); + } + + if ($userUid != "") { + $criteria->add(\AppDelegationPeer::USR_UID, $userUid, \Criteria::EQUAL); + } + $rsCriteria = \ApplicationPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php index 4b9e3b71a..2a77fdcb5 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php @@ -3,6 +3,169 @@ namespace ProcessMaker\BusinessModel\Cases; class OutputDocument { + /** + * Check if the user has permissions + * + * @param string $applicationUid Unique id of Case + * @param string $delIndex Delegation index + * @param string $userUid Unique id of User + * @param string $appDocumentUid + * + * return void Throw exception the user does not have permission to delete + */ + public function throwExceptionIfHaventPermissionToDelete($applicationUid, $delIndex, $userUid, $appDocumentUid) + { + try { + //Verify data inbox + $case = new \ProcessMaker\BusinessModel\Cases(); + $arrayResult = $case->getStatusInfo($applicationUid, $delIndex, $userUid); + + $flagInbox = 1; + + if (empty($arrayResult) || !preg_match("/^(?:TO_DO|DRAFT)$/", $arrayResult["APP_STATUS"])) { + $flagInbox = 0; + } + + //Verify data permission + $flagPermission = 0; + + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\AppDocumentPeer::DOC_UID); + + $criteria->add(\AppDocumentPeer::APP_DOC_UID, $appDocumentUid, \Criteria::EQUAL); + $criteria->add(\AppDocumentPeer::APP_UID, $applicationUid, \Criteria::EQUAL); + $criteria->add(\AppDocumentPeer::APP_DOC_TYPE, "OUTPUT", \Criteria::EQUAL); + + $rsCriteria = \AppDocumentPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteria->next()) { + $row = $rsCriteria->getRow(); + + $outputDocumentUid = $row["DOC_UID"]; + + $application = \ApplicationPeer::retrieveByPK($applicationUid); + + //Criteria + $criteria2 = new \Criteria("workflow"); + + $criteria2->addSelectColumn(\ObjectPermissionPeer::OP_UID); + + $criteria2->add(\ObjectPermissionPeer::PRO_UID, $application->getProUid(), \Criteria::EQUAL); + $criteria2->add(\ObjectPermissionPeer::OP_OBJ_TYPE, "OUTPUT", \Criteria::EQUAL); + $criteria2->add( + $criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, $outputDocumentUid, \Criteria::EQUAL)->addOr( + $criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, "0", \Criteria::EQUAL))->addOr( + $criteria2->getNewCriterion(\ObjectPermissionPeer::OP_OBJ_UID, "", \Criteria::EQUAL)) + ); + $criteria2->add(\ObjectPermissionPeer::OP_ACTION, "DELETE", \Criteria::EQUAL); + + //User + $criteriaU = clone $criteria2; + + $criteriaU->add(\ObjectPermissionPeer::OP_USER_RELATION, 1, \Criteria::EQUAL); + $criteriaU->add(\ObjectPermissionPeer::USR_UID, $userUid, \Criteria::EQUAL); + + $rsCriteriaU = \ObjectPermissionPeer::doSelectRS($criteriaU); + $rsCriteriaU->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteriaU->next()) { + $flagPermission = 1; + } + + //Group + if ($flagPermission == 0) { + $criteriaG = clone $criteria2; + + $criteriaG->add(\ObjectPermissionPeer::OP_USER_RELATION, 2, \Criteria::EQUAL); + + $criteriaG->addJoin(\ObjectPermissionPeer::USR_UID, \GroupUserPeer::GRP_UID, \Criteria::LEFT_JOIN); + $criteriaG->add(\GroupUserPeer::USR_UID, $userUid, \Criteria::EQUAL); + + $rsCriteriaG = \ObjectPermissionPeer::doSelectRS($criteriaG); + $rsCriteriaG->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if ($rsCriteriaG->next()) { + $flagPermission = 1; + } + } + } + + if ($flagInbox == 1) { + if ($flagPermission == 0) { + throw new \Exception(\G::LoadTranslation("ID_USER_NOT_HAVE_PERMISSION_DELETE_OUTPUT_DOCUMENT", array($userUid))); + } + } else { + if ($flagPermission == 0) { + throw new \Exception(\G::LoadTranslation("ID_USER_NOT_HAVE_PERMISSION_DELETE_OUTPUT_DOCUMENT", array($userUid))); + } + } + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Verify if does not exists the inbox + * + * @param string $applicationUid Unique id of Case + * @param string $delIndex Delegation index + * @param string $userUid Unique id of User + * + * return void Throw exception if not exists in inbox + */ + public function throwExceptionIfCaseNotIsInInbox($applicationUid, $delIndex, $userUid) + { + try { + //Verify data + $case = new \ProcessMaker\BusinessModel\Cases(); + $arrayResult = $case->getStatusInfo($applicationUid, $delIndex, $userUid); + + if (empty($arrayResult) || !preg_match("/^(?:TO_DO|DRAFT)$/", $arrayResult["APP_STATUS"])) { + throw new \Exception(\G::LoadTranslation("ID_USER_NOT_HAVE_PERMISSION", array($userUid))); + } + } catch (\Exception $e) { + throw $e; + } + } + + /** + * Verify if not exists OuputDocument in Steps + * + * @param string $applicationUid Unique id of Case + * @param string $delIndex Delegation index + * @param string $outDocUuid + * + * return void Throw exception if not exists OuputDocument in Steps + */ + public function throwExceptionIfOuputDocumentNotExistsInSteps($applicacionUid, $delIndex, $outputDocumentUid) + { + try { + //Verify data + $appDelegation = \AppDelegationPeer::retrieveByPK($applicacionUid, $delIndex); + + $taskUid = $appDelegation->getTasUid(); + + $criteria = new \Criteria("workflow"); + + $criteria->addSelectColumn(\StepPeer::STEP_UID); + + $criteria->add(\StepPeer::TAS_UID, $taskUid, \Criteria::EQUAL); + $criteria->add(\StepPeer::STEP_TYPE_OBJ, "OUTPUT_DOCUMENT", \Criteria::EQUAL); + $criteria->add(\StepPeer::STEP_UID_OBJ, $outputDocumentUid, \Criteria::EQUAL); + + $rsCriteria = \StepPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + if (!$rsCriteria->next()) { + throw new \Exception(\G::LoadTranslation("ID_CASES_OUTPUT_DOES_NOT_EXIST", array($outputDocumentUid))); + } + } catch (\Exception $e) { + throw $e; + } + } + /** * Get data of Cases OutputDocument * diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases/OutputDocument.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases/OutputDocument.php index 8ad620f2a..27cdd901d 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Cases/OutputDocument.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases/OutputDocument.php @@ -56,26 +56,35 @@ class OutputDocument extends Api { try { $outputDocument = new \ProcessMaker\BusinessModel\Cases\OutputDocument(); + $outputDocument->throwExceptionIfHaventPermissionToDelete($app_uid, 0, $this->getUserId(), $app_doc_uid); $outputDocument->removeOutputDocument($app_doc_uid); } catch (\Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } + /** - * @url POST /:app_uid/output-document + * @url POST /:app_uid/:del_index/output-document/:out_doc_uid * - * @param string $app_uid {@min 32}{@max 32} - * @param string $out_doc_uid {@min 32}{@max 32} + * @param string $app_uid {@min 32}{@max 32} + * @param int $del_index {@min 1} + * @param string $out_doc_uid {@min 32}{@max 32} */ - public function doPostOutputDocument($app_uid, $out_doc_uid) + public function doPostOutputDocument($app_uid, $del_index, $out_doc_uid) { try { $userUid = $this->getUserId(); + + $case = new \ProcessMaker\BusinessModel\Cases(); $outputDocument = new \ProcessMaker\BusinessModel\Cases\OutputDocument(); + $outputDocument->throwExceptionIfCaseNotIsInInbox($app_uid, $del_index, $userUid); + $outputDocument->throwExceptionIfOuputDocumentNotExistsInSteps($app_uid, $del_index, $out_doc_uid); $response = $outputDocument->addCasesOutputDocument($app_uid, $out_doc_uid, $userUid); + + //Return return $response; } catch (\Exception $e) { - throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } } From 8f740ed72a8a5605d985ee738b847063254722a9 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 25 Sep 2015 19:55:26 -0400 Subject: [PATCH 12/18] PM-3474 --- gulliver/system/class.bootstrap.php | 8 +- workflow/engine/classes/class.pmDynaform.php | 282 ++++++++++++------ workflow/engine/controllers/designer.php | 2 + .../engine/methods/login/authentication.php | 4 +- .../engine/methods/login/forgotPassword.php | 4 +- workflow/engine/methods/login/login.php | 8 +- workflow/engine/methods/login/sysLogin.php | 16 +- workflow/engine/methods/tracker/login.php | 4 +- .../engine/templates/cases/pmdynaform.html | 1 + workflow/engine/templates/designer/index.html | 1 + 10 files changed, 227 insertions(+), 103 deletions(-) diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php index a9fe4f872..65d6ba029 100644 --- a/gulliver/system/class.bootstrap.php +++ b/gulliver/system/class.bootstrap.php @@ -1149,8 +1149,14 @@ class Bootstrap //Read Configuration File $xmlConfiguration = file_get_contents($configurationFile); $xmlConfigurationObj = Bootstrap::xmlParser($xmlConfiguration); - + + if (!isset($xmlConfigurationObj->result['skinConfiguration']['__CONTENT__']['cssFiles']['__CONTENT__'][$skinVariant]['__CONTENT__'])) { + $xmlConfigurationObj->result['skinConfiguration']['__CONTENT__']['cssFiles']['__CONTENT__'][$skinVariant]['__CONTENT__'] = array('cssFile' => array()); + } $skinFilesArray = $xmlConfigurationObj->result['skinConfiguration']['__CONTENT__']['cssFiles']['__CONTENT__'][$skinVariant]['__CONTENT__']['cssFile']; + if (isset($skinFilesArray['__ATTRIBUTES__'])) { + $skinFilesArray = array($skinFilesArray); + } foreach ($skinFilesArray as $keyFile => $cssFileInfo) { $enabledBrowsers = explode(",", $cssFileInfo['__ATTRIBUTES__']['enabledBrowsers']); $disabledBrowsers = explode(",", $cssFileInfo['__ATTRIBUTES__']['disabledBrowsers']); diff --git a/workflow/engine/classes/class.pmDynaform.php b/workflow/engine/classes/class.pmDynaform.php index 77caa227a..82525d979 100644 --- a/workflow/engine/classes/class.pmDynaform.php +++ b/workflow/engine/classes/class.pmDynaform.php @@ -139,35 +139,13 @@ class pmDynaform } } } - //query & options - if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "dropdown" || $value === "suggest" || $value === "checkbox" || $value === "checkgroup" || $value === "radio" || $value === "datetime" || $value === "hidden")) { - if (!isset($json->data)) { - $json->data = array( - "value" => "", - "label" => "" - ); - } + //options & query + if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "hidden" || $value === "dropdown" || $value === "checkgroup" || $value === "radio" || $value === "suggest" )) { if (!isset($json->dbConnection)) $json->dbConnection = "none"; if (!isset($json->sql)) $json->sql = ""; - if (!isset($json->options)) - $json->options = array(); - if (!isset($json->optionsSql)) - $json->optionsSql = array(); - else { - //convert stdClass to array - if (is_array($json->options)) { - $option = array(); - foreach ($json->options as $valueOptions) { - array_push($option, array( - "value" => $valueOptions->value, - "label" => isset($valueOptions->label) ? $valueOptions->label : "" - )); - } - $json->options = $option; - } - } + $json->optionsSql = array(); if ($json->dbConnection !== "" && $json->dbConnection !== "none" && $json->sql !== "") { $cnn = Propel::getConnection($json->dbConnection); $stmt = $cnn->createStatement(); @@ -175,68 +153,151 @@ class pmDynaform $rs = $stmt->executeQuery(G::replaceDataField($json->sql, array()), \ResultSet::FETCHMODE_NUM); while ($rs->next()) { $row = $rs->getRow(); - $option = array( - "label" => isset($row[1]) ? $row[1] : $row[0], - "value" => $row[0] - ); + $option = new stdClass(); + $option->value = $row[0]; + $option->label = isset($row[1]) ? $row[1] : $row[0]; array_push($json->optionsSql, $option); } } catch (Exception $e) { - - } - } - if (isset($json->options[0])) { - $json->data = $json->options[0]; - $no = count($json->options); - for ($io = 0; $io < $no; $io++) { - if ((is_array($json->options[$io]) ? $json->options[$io]["value"] : $json->options[$io]->value) === $json->defaultValue) { - $json->data = $json->options[$io]; - } + } } } //data - if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "suggest" || $value === "dropdown" || $value === "radio" || $value === "datetime" || $value === "hidden")) { - $json->data = array( - "value" => isset($this->fields["APP_DATA"][$json->name]) ? $this->fields["APP_DATA"][$json->name] : (is_array($json->data) ? $json->data["value"] : $json->data->value), - "label" => isset($this->fields["APP_DATA"][$json->name . "_label"]) ? $this->fields["APP_DATA"][$json->name . "_label"] : (is_array($json->data) ? $json->data["label"] : $json->data->label) - ); - if ($json->data["label"] === "") { - $json->data["label"] = $json->data["value"]; + if ($key === "type" && ($value === "text" || $value === "textarea" || $value === "hidden")) { + $json->data = new stdClass(); + $json->data->value = ""; + $json->data->label = ""; + if (isset($json->optionsSql[0])) { + $json->data->value = $json->optionsSql[0]->value; + $json->data->label = $json->optionsSql[0]->value; } - //synchronize var_label - if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && - in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) { - $json->data["label"] = $json->data["value"]; - foreach ($json->options as $io) { - if ($json->data["value"] === $io->value) { - $json->data["label"] = $io->label; - } - } - foreach ($json->optionsSql as $io) { - if ($json->data["value"] === $io["value"]) { - $json->data["label"] = $io["label"]; - } - } - $_SESSION["TRIGGER_DEBUG"]["DATA"][] = Array( - "key" => $json->name . "_label", - "value" => $json->data["label"] - ); + if ($json->defaultValue !== "") { + $json->data->value = $json->defaultValue; + $json->data->label = $json->defaultValue; + } + if (isset($this->fields["APP_DATA"][$json->name])) { + $json->data->value = $this->fields["APP_DATA"][$json->name]; + $json->data->label = $this->fields["APP_DATA"][$json->name]; } } - if ($key === "type" && ($value === "checkbox" || $value === "checkgroup")) { - $json->data = array( - "value" => isset($this->fields["APP_DATA"][$json->name]) ? $this->fields["APP_DATA"][$json->name] : array(), - "label" => isset($this->fields["APP_DATA"][$json->name . "_label"]) ? $this->fields["APP_DATA"][$json->name . "_label"] : "[]" - ); - //synchronize var_label - if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && - in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) { - $json->data["label"] = G::json_encode($json->data["value"]); - $_SESSION["TRIGGER_DEBUG"]["DATA"][] = Array( - "key" => $json->name . "_label", - "value" => $json->data["label"] - ); + if ($key === "type" && ($value === "dropdown")) { + $json->data = new stdClass(); + $json->data->value = ""; + $json->data->label = ""; + if ($json->defaultValue !== "") { + foreach ($json->optionsSql as $os) { + if ($os->value === $json->defaultValue) { + $json->data->value = $os->value; + $json->data->label = $os->label; + } + } + foreach ($json->options as $os) { + if ($os->value === $json->defaultValue) { + $json->data->value = $os->value; + $json->data->label = $os->label; + } + } + } + if (isset($this->fields["APP_DATA"][$json->name])) { + $json->data->value = $this->fields["APP_DATA"][$json->name]; + $json->data->label = $this->fields["APP_DATA"][$json->name . "_label"]; + } + } + if ($key === "type" && ($value === "suggest")) { + $json->data = new stdClass(); + $json->data->value = ""; + $json->data->label = ""; + if ($json->defaultValue !== "") { + $json->data->value = $json->defaultValue; + $json->data->label = $json->defaultValue; + foreach ($json->optionsSql as $os) { + if ($os->value === $json->defaultValue) { + $json->data->value = $os->value; + $json->data->label = $os->label; + } + } + foreach ($json->options as $os) { + if ($os->value === $json->defaultValue) { + $json->data->value = $os->value; + $json->data->label = $os->label; + } + } + } + if (isset($this->fields["APP_DATA"][$json->name])) { + $json->data->value = $this->fields["APP_DATA"][$json->name]; + $json->data->label = $this->fields["APP_DATA"][$json->name . "_label"]; + } + } + if ($key === "type" && ($value === "radio")) { + $json->data = new stdClass(); + $json->data->value = ""; + $json->data->label = ""; + if ($json->defaultValue !== "") { + foreach ($json->optionsSql as $os) { + if ($os->value === $json->defaultValue) { + $json->data->value = $os->value; + $json->data->label = $os->label; + } + } + foreach ($json->options as $os) { + if ($os->value === $json->defaultValue) { + $json->data->value = $os->value; + $json->data->label = $os->label; + } + } + } + if (isset($this->fields["APP_DATA"][$json->name])) { + $json->data->value = $this->fields["APP_DATA"][$json->name]; + $json->data->label = $this->fields["APP_DATA"][$json->name . "_label"]; + } + } + if ($key === "type" && ($value === "checkbox")) { + $json->data = new stdClass(); + $json->data->value = ""; + $json->data->label = ""; + if (isset($this->fields["APP_DATA"][$json->name])) { + $json->data->value = $this->fields["APP_DATA"][$json->name]; + $json->data->label = $this->fields["APP_DATA"][$json->name]; + } + } + if ($key === "type" && ($value === "checkgroup")) { + $json->data = new stdClass(); + $json->data->value = ""; + $json->data->label = "[]"; + if ($json->defaultValue !== "") { + $dataValue = array(); + $dataLabel = array(); + $dv = explode("|", $json->defaultValue); + foreach ($dv as $idv) { + foreach ($json->optionsSql as $os) { + if ($os->value === trim($idv)) { + array_push($dataValue, $os->value); + array_push($dataLabel, $os->label); + } + } + foreach ($json->options as $os) { + if ($os->value === trim($idv)) { + array_push($dataValue, $os->value); + array_push($dataLabel, $os->label); + } + } + } + $json->data->value = $dataValue; + $json->data->label = G::json_encode($dataLabel); + } + if (isset($this->fields["APP_DATA"][$json->name])) { + $json->data->value = $this->fields["APP_DATA"][$json->name]; + $json->data->label = $this->fields["APP_DATA"][$json->name . "_label"]; + } + } + if ($key === "type" && ($value === "datetime")) { + $json->data = new stdClass(); + $json->data->value = ""; + $json->data->label = ""; + if (isset($this->fields["APP_DATA"][$json->name])) { + $json->data->value = $this->fields["APP_DATA"][$json->name]; + $json->data->label = $this->fields["APP_DATA"][$json->name . "_label"]; } } if ($key === "type" && ($value === "file") && isset($this->fields["APP_DATA"]["APPLICATION"])) { @@ -252,10 +313,55 @@ class pmDynaform $row = $rs->getRow(); array_push($links, "../cases/cases_ShowDocument?a=" . $row["APP_DOC_UID"] . "&v=" . $row["DOC_VERSION"]); } - $json->data = array( - "value" => $links, - "label" => isset($this->fields["APP_DATA"][$json->name . "_label"]) ? $this->fields["APP_DATA"][$json->name . "_label"] : "[]" - ); + $json->data = new stdClass(); + $json->data->value = $links; + $json->data->label = isset($this->fields["APP_DATA"][$json->name . "_label"]) ? $this->fields["APP_DATA"][$json->name . "_label"] : "[]"; + } + //synchronize var_label + if ($key === "type" && ($value === "dropdown" || $value === "suggest")) { + if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) { + foreach ($json->optionsSql as $io) { + if ($json->data->value === $io->value) { + $json->data->label = $io->label; + } + } + foreach ($json->options as $io) { + if ($json->data->value === $io->value) { + $json->data->label = $io->label; + } + } + $_SESSION["TRIGGER_DEBUG"]["DATA"][] = Array("key" => $json->name . "_label", "value" => $json->data->label); + } + } + if ($key === "type" && ($value === "checkgroup")) { + if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) { + $dataValue = array(); + $dataLabel = array(); + $dv = $this->fields["APP_DATA"][$json->name]; + foreach ($dv as $idv) { + foreach ($json->optionsSql as $os) { + if ($os->value === $idv) { + array_push($dataValue, $os->value); + array_push($dataLabel, $os->label); + } + } + foreach ($json->options as $os) { + if ($os->value === $idv) { + array_push($dataValue, $os->value); + array_push($dataLabel, $os->label); + } + } + } + $json->data->value = $dataValue; + $json->data->label = G::json_encode($dataLabel); + $_SESSION["TRIGGER_DEBUG"]["DATA"][] = Array("key" => $json->name . "_label", "value" => $json->data->label); + } + } + if ($key === "type" && ($value === "datetime")) { + if (isset($this->fields["APP_DATA"]["__VAR_CHANGED__"]) && in_array($json->name, explode(",", $this->fields["APP_DATA"]["__VAR_CHANGED__"]))) { + $json->data->label = $json->data->value; + $_SESSION["TRIGGER_DEBUG"]["DATA"][] = Array("key" => $json->name . "_label", "value" => $json->data->label); + } } //grid if ($key === "type" && ($value === "grid")) { @@ -378,7 +484,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . "public_html" . PATH_SEP . "lib" . PATH_SEP . "pmdynaform" . PATH_SEP . "build" . PATH_SEP . "pmdynaform.html"); $file = str_replace("{javascript}", $javascript, $file); - + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(0); } @@ -424,6 +530,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(); } @@ -471,6 +578,7 @@ class pmDynaform ""; $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(); } @@ -502,7 +610,7 @@ class pmDynaform var step_mode = null; var workspace = \"" . SYS_SYS . "\"; var credentials = " . G::json_encode($this->credentials) . "; - var filePost = \"cases_SaveDataSupervisor?UID=" . $this->fields["CURRENT_DYNAFORM"] . "\"; + var filePost = \"cases_SaveDataSupervisor?UID=" . $this->fields["CURRENT_DYNAFORM"] . "\"; var fieldsRequired = null; var triggerDebug = null; @@ -519,7 +627,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . "public_html" . PATH_SEP . "lib" . PATH_SEP . "pmdynaform" . PATH_SEP . "build" . PATH_SEP . "pmdynaform.html"); $file = str_replace("{javascript}", $javascrip, $file); - + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(0); } @@ -554,6 +662,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(); } @@ -587,6 +696,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(); } @@ -603,7 +713,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); - + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(); } @@ -633,6 +743,7 @@ class pmDynaform ""; $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); + $file = str_replace("{sys_skin}", SYS_SKIN, $file); return $file; } @@ -1016,4 +1127,3 @@ class pmDynaform } } - diff --git a/workflow/engine/controllers/designer.php b/workflow/engine/controllers/designer.php index d5e76e1bd..73cafd8bc 100644 --- a/workflow/engine/controllers/designer.php +++ b/workflow/engine/controllers/designer.php @@ -125,6 +125,8 @@ class Designer extends Controller $translation = new Translation(); $translation->generateFileTranslationMafe(); } + + $this->setVar('sys_skin', SYS_SKIN); $this->setView('designer/index'); $this->render(); diff --git a/workflow/engine/methods/login/authentication.php b/workflow/engine/methods/login/authentication.php index 5385ca548..f8cb12d3e 100755 --- a/workflow/engine/methods/login/authentication.php +++ b/workflow/engine/methods/login/authentication.php @@ -319,7 +319,9 @@ try { } $aFields['DESCRIPTION'] .= '
' . G::LoadTranslation('ID_PLEASE_CHANGE_PASSWORD_POLICY') . '

'; $G_PUBLISH = new Publisher; - if(SYS_SKIN == 'neoclassic'){ + $version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION'))); + $version = isset($version[0]) ? intval($version[0]) : 0; + if ($version >= 3) { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/changePasswordpm3', '', $aFields, 'changePassword'); }else{ $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/changePassword', '', $aFields, 'changePassword'); diff --git a/workflow/engine/methods/login/forgotPassword.php b/workflow/engine/methods/login/forgotPassword.php index 52340ab35..416bf7e5e 100755 --- a/workflow/engine/methods/login/forgotPassword.php +++ b/workflow/engine/methods/login/forgotPassword.php @@ -23,7 +23,9 @@ * */ $G_PUBLISH = new Publisher (); -if(SYS_SKIN == 'neoclassic'){ +$version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION'))); +$version = isset($version[0]) ? intval($version[0]) : 0; +if ($version >= 3) { $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'login/forgotPasswordpm3', '', array(), 'retrivePassword.php'); }else{ $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'login/forgotPassword', '', array(), 'retrivePassword.php'); diff --git a/workflow/engine/methods/login/login.php b/workflow/engine/methods/login/login.php index f2ccca411..b250eb693 100755 --- a/workflow/engine/methods/login/login.php +++ b/workflow/engine/methods/login/login.php @@ -171,7 +171,9 @@ if (!class_exists('pmLicenseManager')) { $licenseManager =& pmLicenseManager::getSingleton(); if (in_array(G::encryptOld($licenseManager->result), array('38afd7ae34bd5e3e6fc170d8b09178a3', 'ba2b45bdc11e2a4a6e86aab2ac693cbb'))) { $G_PUBLISH = new Publisher(); - if(SYS_SKIN == 'neoclassic'){ + $version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION'))); + $version = isset($version[0]) ? intval($version[0]) : 0; + if ($version >= 3) { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/licenseExpiredpm3', '', array(), 'licenseUpdate'); }else{ $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/licenseExpired', '', array(), 'licenseUpdate'); @@ -219,7 +221,9 @@ if (isset($oConf->aConfig["login_defaultLanguage"]) && $oConf->aConfig["login_de } $G_PUBLISH = new Publisher(); -if(SYS_SKIN == 'neoclassic'){ +$version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION'))); +$version = isset($version[0]) ? intval($version[0]) : 0; +if ($version >= 3) { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/loginpm3', '', $aFields, SYS_URI . 'login/authentication.php'); }else{ $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/login', '', $aFields, SYS_URI . 'login/authentication.php'); diff --git a/workflow/engine/methods/login/sysLogin.php b/workflow/engine/methods/login/sysLogin.php index b4b744ddf..4a2f6158c 100755 --- a/workflow/engine/methods/login/sysLogin.php +++ b/workflow/engine/methods/login/sysLogin.php @@ -155,26 +155,20 @@ if (!defined('WS_IN_LOGIN')) { define('WS_IN_LOGIN', 'serverconf'); } $fileLogin = 'login/sysLogin'; +$version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION'))); +$version = isset($version[0]) ? intval($version[0]) : 0; switch (WS_IN_LOGIN) { case 'serverconf': //Get Server Configuration $oServerConf = & serverConf::getSingleton (); if ($oServerConf->getProperty ('LOGIN_NO_WS')) { - if(SYS_SKIN == 'neoclassic'){ - $fileLogin = 'login/sysLoginNoWSpm3'; - }else{ - $fileLogin = 'login/sysLoginNoWS'; - } + $fileLogin = $version >= 3 ? 'login/sysLoginNoWSpm3' : 'login/sysLoginNoWS'; } else { $fileLogin = 'login/sysLogin'; } break; case 'no': - if(SYS_SKIN == 'neoclassic'){ - $fileLogin = 'login/sysLoginNoWSpm3'; - }else{ - $fileLogin = 'login/sysLoginNoWS'; - } + $fileLogin = $version >= 3 ? 'login/sysLoginNoWSpm3' : 'login/sysLoginNoWS'; break; case 'yes': $fileLogin = 'login/sysLogin'; @@ -183,6 +177,6 @@ switch (WS_IN_LOGIN) { $fileLogin = 'login/sysLogin'; break; } - +error_log($fileLogin); $G_PUBLISH->AddContent ('xmlform', 'xmlform', $fileLogin, '', $aField, 'sysLogin'); G::RenderPage ("publish"); diff --git a/workflow/engine/methods/tracker/login.php b/workflow/engine/methods/tracker/login.php index 4687b61be..d53e17cce 100755 --- a/workflow/engine/methods/tracker/login.php +++ b/workflow/engine/methods/tracker/login.php @@ -31,7 +31,9 @@ $G_PUBLISH = new Publisher(); //echo G::generateUniqueNumber(); -if(SYS_SKIN == 'neoclassic'){ +$version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION'))); +$version = isset($version[0]) ? intval($version[0]) : 0; +if ($version >= 3) { $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'tracker/loginpm3', '', '', SYS_URI . 'tracker/authentication.php' ); }else{ $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'tracker/login', '', '', SYS_URI . 'tracker/authentication.php' ); diff --git a/workflow/engine/templates/cases/pmdynaform.html b/workflow/engine/templates/cases/pmdynaform.html index ec9f57787..8b4e3b233 100644 --- a/workflow/engine/templates/cases/pmdynaform.html +++ b/workflow/engine/templates/cases/pmdynaform.html @@ -9,6 +9,7 @@ + diff --git a/workflow/engine/templates/designer/index.html b/workflow/engine/templates/designer/index.html index d2562584c..c8b15ad30 100644 --- a/workflow/engine/templates/designer/index.html +++ b/workflow/engine/templates/designer/index.html @@ -66,6 +66,7 @@ {else} + @@ -519,7 +627,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . "public_html" . PATH_SEP . "lib" . PATH_SEP . "pmdynaform" . PATH_SEP . "build" . PATH_SEP . "pmdynaform.html"); $file = str_replace("{javascript}", $javascrip, $file); - + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(0); } @@ -554,6 +662,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(); } @@ -587,6 +696,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(); } @@ -603,7 +713,7 @@ class pmDynaform $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); - + $file = str_replace("{sys_skin}", SYS_SKIN, $file); echo $file; exit(); } @@ -633,6 +743,7 @@ class pmDynaform ""; $file = file_get_contents(PATH_HOME . 'public_html/lib/pmdynaform/build/pmdynaform.html'); $file = str_replace("{javascript}", $javascrip, $file); + $file = str_replace("{sys_skin}", SYS_SKIN, $file); return $file; } @@ -1016,4 +1127,3 @@ class pmDynaform } } -