From fadec156e5225a7c7620bb24880e658779c8eaab Mon Sep 17 00:00:00 2001 From: Marco Antonio Nina Date: Thu, 8 Mar 2012 11:11:47 -0400 Subject: [PATCH] BUG 8660 Problems in Case Tracker SOLVED - The first problem, when the tab diagram showing the map did not hide when you selected the option NONE, and when they entered a white screen is displayed, the error speak second to show the dynaforms not present a session variable the which was shown as a notice. - To display dinaforms valid only in the XmlForm class, and q if you increase the session showed the Dynaform across the page, to edit the first problem is how to obtain permits in class case by changing the role permission caseTrackerPermissions addition to improving function, also modified the way to generate depending on the function menu caseTrackerPermissions also modified the authentication to lead the tab corresponding to the relevant validations. --- gulliver/system/class.xmlform.php | 8 +- workflow/engine/classes/class.case.php | 36 ++-- workflow/engine/menus/caseTracker.php | 59 ++---- .../engine/methods/tracker/authentication.php | 138 +++++++------- .../engine/methods/tracker/tracker_Show.php | 3 +- .../methods/tracker/tracker_ViewMap.php | 168 +++++++++--------- .../test/unit/processmaker/classCasesTest.php | 2 +- 7 files changed, 187 insertions(+), 227 deletions(-) diff --git a/gulliver/system/class.xmlform.php b/gulliver/system/class.xmlform.php index 24922b0b8..444d4b04e 100755 --- a/gulliver/system/class.xmlform.php +++ b/gulliver/system/class.xmlform.php @@ -2530,9 +2530,11 @@ class XmlForm_Field_Submit extends XmlForm_Field { } elseif ($this->mode === 'view') { // return "style};display:none\" disabled='disabled' class='module_app_button___gray module_app_buttonDisabled___gray {$this->className}' id=\"form[{$this->name}]\" name=\"form[{$this->name}]\" type='submit' value=\"{$this->label}\" " . (($this->onclick) ? 'onclick="' . htmlentities ( $onclick, ENT_COMPAT, 'utf-8' ) . '"' : '') . " />"; //$sLinkNextStep = 'window.open("' . $owner->fields['__DYNAFORM_OPTIONS']->xmlMenu->values['NEXT_STEP'] . '", "_self");'; - - $sLinkNextStep = 'window.location=("casesSaveDataView?UID='.$_SESSION['CURRENT_DYN_UID'].'");'; - $html = ''; + $html = ''; + if (isset($_SESSION['CURRENT_DYN_UID'])) { + $sLinkNextStep = 'window.location=("casesSaveDataView?UID='.$_SESSION['CURRENT_DYN_UID'].'");'; + $html = ''; + } $html .= 'name . ']" '; $html .= 'name="form[' . $this->name . ']" '; diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 7f850aa3a..f01c167a1 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -4595,36 +4595,26 @@ class Cases { } /* - * funcion permisos, by Everth + * funcion caseTrackerPermissions, by Everth * - * @name Permisos + * @name caseTrackerPermissions * @param string $PRO_UID * @return string */ - function Permisos($PRO_UID) { - $a = 0; - $b = 0; - $c = 0; - $d = 0; - $oCaseTracker = new CaseTracker(); - $aCaseTracker = $oCaseTracker->load($PRO_UID); - if (is_array($aCaseTracker)) { - if ($aCaseTracker['CT_MAP_TYPE'] != 'NONE') - $a = 1; + function caseTrackerPermissions($PRO_UID) { + $newCaseTracker = new CaseTracker(); + $caseTracker = $newCaseTracker->load($PRO_UID); + if (is_array($caseTracker)) { + $caseTracker['CT_MAP_TYPE'] = ($caseTracker['CT_MAP_TYPE'] != 'NONE')? true : false; + //$caseTracker['CT_DERIVATION_HISTORY'] = ($caseTracker['CT_DERIVATION_HISTORY'] == 1)? true : false; + //$caseTracker['CT_MESSAGE_HISTORY'] = ($caseTracker['CT_MESSAGE_HISTORY'] == 1)? true : false; - $oCriteria = new Criteria(); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $PRO_UID); - if (CaseTrackerObjectPeer::doCount($oCriteria) > 0) - $b = 1; - - if ($aCaseTracker['CT_DERIVATION_HISTORY'] == 1) - $c = 1; - - if ($aCaseTracker['CT_MESSAGE_HISTORY'] == 1) - $d = 1; + $criteria = new Criteria(); + $criteria->add(CaseTrackerObjectPeer::PRO_UID, $PRO_UID); + $caseTracker['DYNADOC'] = (CaseTrackerObjectPeer::doCount($criteria) > 0)? true : false; } - return $a . '-' . $b . '-' . $c . '-' . $d; + return $caseTracker; } /* diff --git a/workflow/engine/menus/caseTracker.php b/workflow/engine/menus/caseTracker.php index 4d45d3eb0..7b37701bf 100755 --- a/workflow/engine/menus/caseTracker.php +++ b/workflow/engine/menus/caseTracker.php @@ -23,7 +23,7 @@ * */ /* - * Case Tracker Menú + * Case Tracker Menú * * @author Everth S. Berrios Morales * @@ -31,46 +31,25 @@ global $G_TMP_MENU; global $RBAC; -$G_TMP_MENU->AddIdRawOption('MAP', 'tracker/tracker_ViewMap'); -$G_TMP_MENU->AddIdRawOption('DYNADOC', 'tracker/tracker_DynaDocs'); -$G_TMP_MENU->AddIdRawOption('HISTORY', 'tracker/tracker_History'); -$G_TMP_MENU->AddIdRawOption('MESSAGES', 'tracker/tracker_Messages'); - -$G_TMP_MENU->Labels = array( - G::LoadTranslation('ID_MAP'), - G::LoadTranslation('ID_DYNADOC'), - G::LoadTranslation('ID_HISTORY'), - G::LoadTranslation('ID_HISTORY_MESSAGES') -); - -if ( file_exists ( PATH_CORE . 'menus/plugin.php' ) ) { - require_once ( PATH_CORE . 'menus/plugin.php' ); +if (file_exists ( PATH_CORE . 'menus/plugin.php')) { + require_once (PATH_CORE . 'menus/plugin.php'); } -G::LoadClass('case'); - $oCase = new Cases(); - $per = $oCase->Permisos( $_SESSION['PROCESS']); - - $p = explode('-', $per); - -if ($p[0] != 1) -{ - $G_TMP_MENU->DisableOptionId('MAP'); -} - -if ($p[1] != 1) -{ - $G_TMP_MENU->DisableOptionId('DYNADOC'); -} - -if ($p[2] != 1) -{ - $G_TMP_MENU->DisableOptionId('HISTORY'); -} - -if ($p[3] != 1) -{ - $G_TMP_MENU->DisableOptionId('MESSAGES'); -} + G::LoadClass('case'); + $case = new Cases(); + $caseTracker = $case->caseTrackerPermissions( $_SESSION['PROCESS']); + if ($caseTracker['CT_MAP_TYPE']) { + $G_TMP_MENU->AddIdRawOption('MAP', 'tracker/tracker_ViewMap', G::LoadTranslation('ID_MAP')); + } + if ($caseTracker['DYNADOC']) { + $G_TMP_MENU->AddIdRawOption('DYNADOC', 'tracker/tracker_DynaDocs', G::LoadTranslation('ID_DYNADOC')); + } + if ($caseTracker['CT_DERIVATION_HISTORY']) { + $G_TMP_MENU->AddIdRawOption('HISTORY', 'tracker/tracker_History', G::LoadTranslation('ID_HISTORY')); + } + if ($caseTracker['CT_MESSAGE_HISTORY']) { + $G_TMP_MENU->AddIdRawOption('MESSAGES', 'tracker/tracker_Messages', G::LoadTranslation('ID_HISTORY_MESSAGES')); + } + diff --git a/workflow/engine/methods/tracker/authentication.php b/workflow/engine/methods/tracker/authentication.php index 649c81e71..9c14cd0f7 100755 --- a/workflow/engine/methods/tracker/authentication.php +++ b/workflow/engine/methods/tracker/authentication.php @@ -29,98 +29,88 @@ * */ - if (!isset($_POST['form']) ) { G::SendTemporalMessage ('ID_USER_HAVENT_RIGHTS_SYSTEM', "error"); G::header ("location: login.php");die; } - try { - $frm = $_POST['form']; - $case = ''; - $pin = ''; + $frm = $_POST['form']; + $case = ''; + $pin = ''; - if (isset($frm['CASE'])) { - $case = strtolower(trim($frm['CASE'])); - $pin = trim($frm['PIN']); - } + if (isset($frm['CASE'])) { + $case = strtolower(trim($frm['CASE'])); + $pin = trim($frm['PIN']); + } - G::LoadClass('case'); - $oCase = new Cases(); + G::LoadClass('case'); + $cases = new Cases(); - $uid = $oCase->verifyCaseTracker($case, $pin); - //print_r($uid); die; - switch ($uid) { - //The case doesn't exist - case -1: - G::SendTemporalMessage ('ID_CASE_NOT_EXISTS', "error"); - break; - //The pin is invalid - case -2: - G::SendTemporalMessage ('ID_PIN_INVALID', "error"); - break; - } + $uid = $cases->verifyCaseTracker($case, $pin); + switch ($uid) { + //The case doesn't exist + case -1: + G::SendTemporalMessage ('ID_CASE_NOT_EXISTS', "error"); + break; + //The pin is invalid + case -2: + G::SendTemporalMessage ('ID_PIN_INVALID', "error"); + break; + } - if ($uid < 0 ) { - G::header ("location: login.php"); - die; - } + if ($uid < 0 ) { + G::header ("location: login.php"); + die; + } - if(is_array($uid)) - { - require_once ("classes/model/CaseTracker.php"); - require_once ("classes/model/CaseTrackerObject.php"); - $_SESSION['CASE']=$case; - $_SESSION['PIN']=$pin; - $_SESSION['PROCESS']=$uid['PRO_UID']; - $_SESSION['APPLICATION']=$uid['APP_UID']; - $_SESSION['TASK']=-1; - $_SESSION['INDEX']=-1; - $a=0; - $b=0; - $c=0; - $oCriteria = new Criteria(); - $oCriteria->add(CaseTrackerPeer::PRO_UID, $_SESSION['PROCESS']); - $oCaseTracker = new CaseTracker(); - if (CaseTrackerPeer::doCount($oCriteria) === 0) { - $aCaseTracker = array('PRO_UID' => $_SESSION['PROCESS'], + if(is_array($uid)) + { + require_once ("classes/model/CaseTracker.php"); + require_once ("classes/model/CaseTrackerObject.php"); + $_SESSION['CASE'] = $case; + $_SESSION['PIN'] = $pin; + $_SESSION['PROCESS'] = $uid['PRO_UID']; + $_SESSION['APPLICATION'] = $uid['APP_UID']; + $_SESSION['TASK'] = -1; + $_SESSION['INDEX'] = -1; + + $criteria = new Criteria(); + $criteria->add(CaseTrackerPeer::PRO_UID, $_SESSION['PROCESS']); + $caseTracker = new CaseTracker(); + if (CaseTrackerPeer::doCount($criteria) === 0) { + $permissionsCaseTracker = array('PRO_UID' => $_SESSION['PROCESS'], 'CT_MAP_TYPE' => 'PROCESSMAP', 'CT_DERIVATION_HISTORY' => 1, 'CT_MESSAGE_HISTORY' => 1); - $oCaseTracker->create($aCaseTracker); + $caseTracker->create($permissionsCaseTracker); + } + $caseTracker = $cases->caseTrackerPermissions( $_SESSION['PROCESS']); + + if ($caseTracker['CT_MAP_TYPE']) { + G::header ('location: tracker_ViewMap'); } else { - $aCaseTracker = $oCaseTracker->load($_SESSION['PROCESS']); - } - - if(is_array($aCaseTracker)) - { if($aCaseTracker['CT_MAP_TYPE']!='NONE') - { $a=1; - G::header ('location: tracker_ViewMap'); - die; - } - - $oCriteria = new Criteria(); - $oCriteria->add(CaseTrackerObjectPeer::PRO_UID, $_SESSION['PROCESS']); - if (CaseTrackerObjectPeer::doCount($oCriteria) > 0) - { $b=1; - G::header ("location: tracker_DynaDocs"); - die; - } - - if($aCaseTracker['CT_DERIVATION_HISTORY']==1) - { $c=1; - G::header ("location: tracker_History"); - die; - } - - G::header ("location: tracker_No"); - } + if ($caseTracker['DYNADOC']) { + G::header ("location: tracker_DynaDocs"); + } + else { + if ($caseTracker['CT_DERIVATION_HISTORY']) { + G::header ("location: tracker_History"); + } + else { + if ($caseTracker['CT_MESSAGE_HISTORY']) { + G::header ("location: tracker_No"); + } + else { + G::header ("location: login.php"); + G::SendTemporalMessage ('ID_ACCOUNT_DISABLED_CONTACT_ADMIN', "error"); + } + } + } + } } - } - catch ( Exception $e ) { $aMessage['MESSAGE'] = $e->getMessage(); $G_PUBLISH = new Publisher; diff --git a/workflow/engine/methods/tracker/tracker_Show.php b/workflow/engine/methods/tracker/tracker_Show.php index 07c6bade4..53ba49fde 100755 --- a/workflow/engine/methods/tracker/tracker_Show.php +++ b/workflow/engine/methods/tracker/tracker_Show.php @@ -43,7 +43,7 @@ $G_MAIN_MENU = 'caseTracker'; $G_ID_MENU_SELECTED = 'DYNADOC'; global $G_PUBLISH; - + switch ($_GET['CTO_TYPE_OBJ']) { case 'DYNAFORM': @@ -57,7 +57,6 @@ $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['PRINT_PREVIEW'] = '#'; $Fields['APP_DATA']['__DYNAFORM_OPTIONS']['PRINT_PREVIEW_ACTION'] = 'tracker_PrintView?CTO_UID_OBJ=' . $_GET['CTO_UID_OBJ'] . '&CTO_TYPE_OBJ=PRINT_PREVIEW'; $_SESSION['CTO_UID_OBJ'] = $_GET['CTO_UID_OBJ']; - $G_PUBLISH = new Publisher; $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS']. '/' . $_GET['CTO_UID_OBJ'], '', $Fields['APP_DATA'],'','','view'); G::RenderPage('publish'); diff --git a/workflow/engine/methods/tracker/tracker_ViewMap.php b/workflow/engine/methods/tracker/tracker_ViewMap.php index 15d6a422f..0f64a202a 100755 --- a/workflow/engine/methods/tracker/tracker_ViewMap.php +++ b/workflow/engine/methods/tracker/tracker_ViewMap.php @@ -29,95 +29,95 @@ * @author Everth S. Berrios Morales * */ - if (!isset($_SESSION['PROCESS'])) { - G::header('location: login'); + if (!isset($_SESSION['PROCESS'])) { + G::header('location: login'); } - $G_MAIN_MENU = 'caseTracker'; + $G_MAIN_MENU = 'caseTracker'; $G_ID_MENU_SELECTED = 'MAP'; - require_once 'classes/model/CaseTracker.php'; - $oCaseTracker = new CaseTracker(); - $aCaseTracker = $oCaseTracker->load($_SESSION['PROCESS']); - switch (($aCaseTracker['CT_MAP_TYPE'])) { - case 'NONE': - //Nothing - break; - case 'PROCESSMAP': - G::LoadClass('case'); - $oCase = new Cases(); - $aFields = $oCase->loadCase($_SESSION['APPLICATION']); - if (isset($aFields['TITLE'])) { - $aFields['APP_TITLE'] = $aFields['TITLE']; - } - if ($aFields['APP_PROC_CODE'] != '') { - $aFields['APP_NUMBER'] = $aFields['APP_PROC_CODE']; - } + require_once 'classes/model/CaseTracker.php'; + $oCaseTracker = new CaseTracker(); + $aCaseTracker = $oCaseTracker->load($_SESSION['PROCESS']); + switch (($aCaseTracker['CT_MAP_TYPE'])) { + case 'NONE': + //Nothing + break; + case 'PROCESSMAP': + G::LoadClass('case'); + $oCase = new Cases(); + $aFields = $oCase->loadCase($_SESSION['APPLICATION']); + if (isset($aFields['TITLE'])) { + $aFields['APP_TITLE'] = $aFields['TITLE']; + } + if ($aFields['APP_PROC_CODE'] != '') { + $aFields['APP_NUMBER'] = $aFields['APP_PROC_CODE']; + } $aFields['CASE'] = G::LoadTranslation('ID_CASE'); $aFields['TITLE'] = G::LoadTranslation('ID_TITLE'); - $oTemplatePower = new TemplatePower(PATH_TPL . 'processes/processes_Map.html'); - $oTemplatePower->prepare(); - $G_PUBLISH = new Publisher; - $G_PUBLISH->AddContent('smarty', 'cases/cases_title', '', '', $aFields); - $G_PUBLISH->AddContent('template', '', '', '', $oTemplatePower); - $oHeadPublisher =& headPublisher::getSingleton(); - $oHeadPublisher->addScriptCode(' - leimnud.event.add(window,"load",function(){ - var pb=leimnud.dom.capture("tag.body 0"); - Pm=new processmap(); - Pm.options = { - target : "pm_target", - dataServer: "../processes/processes_Ajax", - uid : "' . $_SESSION['PROCESS'] . '", - lang : "' . SYS_LANG . '", - theme : "processmaker", - size : {w:pb.offsetWidth-10,h:pb.offsetHeight}, - images_dir: "/jscore/processmap/core/images/", - rw : false, - mi : false, - ct : true, - hideMenu : false - } - Pm.make(); - });'); - G::RenderPage('publish'); - break; - case 'STAGES': - G::LoadClass('case'); - $oCase = new Cases(); - $aFields = $oCase->loadCase($_SESSION['APPLICATION']); - if (isset($aFields['TITLE'])) { - $aFields['APP_TITLE'] = $aFields['TITLE']; - } - if ($aFields['APP_PROC_CODE'] != '') { - $aFields['APP_NUMBER'] = $aFields['APP_PROC_CODE']; - } + $oTemplatePower = new TemplatePower(PATH_TPL . 'processes/processes_Map.html'); + $oTemplatePower->prepare(); + $G_PUBLISH = new Publisher; + $G_PUBLISH->AddContent('smarty', 'cases/cases_title', '', '', $aFields); + $G_PUBLISH->AddContent('template', '', '', '', $oTemplatePower); + $oHeadPublisher =& headPublisher::getSingleton(); + $oHeadPublisher->addScriptCode(' + leimnud.event.add(window,"load",function(){ + var pb=leimnud.dom.capture("tag.body 0"); + Pm=new processmap(); + Pm.options = { + target : "pm_target", + dataServer: "../processes/processes_Ajax", + uid : "' . $_SESSION['PROCESS'] . '", + lang : "' . SYS_LANG . '", + theme : "processmaker", + size : {w:pb.offsetWidth-10,h:pb.offsetHeight}, + images_dir: "/jscore/processmap/core/images/", + rw : false, + mi : false, + ct : true, + hideMenu : false + } + Pm.make(); + });'); + G::RenderPage('publish'); + break; + case 'STAGES': + G::LoadClass('case'); + $oCase = new Cases(); + $aFields = $oCase->loadCase($_SESSION['APPLICATION']); + if (isset($aFields['TITLE'])) { + $aFields['APP_TITLE'] = $aFields['TITLE']; + } + if ($aFields['APP_PROC_CODE'] != '') { + $aFields['APP_NUMBER'] = $aFields['APP_PROC_CODE']; + } $aFields['CASE'] = G::LoadTranslation('ID_CASE'); $aFields['TITLE'] = G::LoadTranslation('ID_TITLE'); - $oTemplatePower = new TemplatePower(PATH_TPL . 'tracker/stages_Map.html'); - $oTemplatePower->prepare(); - $G_PUBLISH = new Publisher; - $G_PUBLISH->AddContent('smarty', 'cases/cases_title', '', '', $aFields); - $G_PUBLISH->AddContent('template', '', '', '', $oTemplatePower); - $oHeadPublisher =& headPublisher::getSingleton(); - $oHeadPublisher->addScriptCode(' - leimnud.Package.Load("stagesmap",{Type:"file",Absolute:true,Path:"/jscore/stagesmap/core/stagesmap.js"}); - leimnud.event.add(window,"load",function(){ - var pb=leimnud.dom.capture("tag.body 0"); - Sm=new stagesmap(); - Sm.options = { - target : "sm_target", - dataServer: "../tracker/tracker_Ajax", - uid : "' . $_SESSION['PROCESS'] . '", - lang : "' . SYS_LANG . '", - theme : "processmaker", - size : {w:"780",h:"540"}, - //size : {w:pb.offsetWidth-10,h:pb.offsetHeight}, - images_dir: "/jscore/processmap/core/images/", - rw : false, - hideMenu : false - }; - Sm.make(); - });'); - G::RenderPage('publish'); - break; + $oTemplatePower = new TemplatePower(PATH_TPL . 'tracker/stages_Map.html'); + $oTemplatePower->prepare(); + $G_PUBLISH = new Publisher; + $G_PUBLISH->AddContent('smarty', 'cases/cases_title', '', '', $aFields); + $G_PUBLISH->AddContent('template', '', '', '', $oTemplatePower); + $oHeadPublisher =& headPublisher::getSingleton(); + $oHeadPublisher->addScriptCode(' + leimnud.Package.Load("stagesmap",{Type:"file",Absolute:true,Path:"/jscore/stagesmap/core/stagesmap.js"}); + leimnud.event.add(window,"load",function(){ + var pb=leimnud.dom.capture("tag.body 0"); + Sm=new stagesmap(); + Sm.options = { + target : "sm_target", + dataServer: "../tracker/tracker_Ajax", + uid : "' . $_SESSION['PROCESS'] . '", + lang : "' . SYS_LANG . '", + theme : "processmaker", + size : {w:"780",h:"540"}, + //size : {w:pb.offsetWidth-10,h:pb.offsetHeight}, + images_dir: "/jscore/processmap/core/images/", + rw : false, + hideMenu : false + }; + Sm.make(); + });'); + G::RenderPage('publish'); + break; } diff --git a/workflow/engine/test/unit/processmaker/classCasesTest.php b/workflow/engine/test/unit/processmaker/classCasesTest.php index 1a07b5d1c..24248e458 100755 --- a/workflow/engine/test/unit/processmaker/classCasesTest.php +++ b/workflow/engine/test/unit/processmaker/classCasesTest.php @@ -550,7 +550,7 @@ //checking method 'Permisos' $t->is ( $aMethods[60], 'Permisos', 'Permisos() is callable' ); - //$result = $obj->Permisos ( $PRO_UID); + //$result = $obj->caseTrackerPermissions ( $PRO_UID); //$t->isa_ok( $result, 'NULL', 'call to method Permisos '); $t->todo( "call to method Permisos using $PRO_UID ");