Merged in bugfix/PMCORE-3918-2 (pull request #8515)

PMCORE-3918

Approved-by: Julio Cesar Laura Avendaño
This commit is contained in:
Paula Quispe
2022-08-17 18:43:46 +00:00
committed by Julio Cesar Laura Avendaño
2 changed files with 324 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
<?php
namespace Tests\unit\workflow\engine\methods\cases;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use ProcessMaker\Model\User;
use RBAC;
use Tests\TestCase;
class ProxyNewCasesListTest extends TestCase
{
use DatabaseTransactions;
/**
* This sets the initial parameters for each test.
*/
public function setUp()
{
parent::setUp(); // TODO: Change the autogenerated stub
$this->settingUserLogged();
}
/**
* This starts a valid user in session with the appropriate permissions.
* @global object $RBAC
*/
private function settingUserLogged()
{
global $RBAC;
$user = User::where('USR_ID', '=', 1)
->get()
->first();
$_SESSION['USER_LOGGED'] = $user['USR_UID'];
$RBAC = RBAC::getSingleton(PATH_DATA, session_id());
$RBAC->initRBAC();
$RBAC->loadUserRolePermission('PROCESSMAKER', $_SESSION['USER_LOGGED']);
}
/**
* It tests the result contains an error
*
* @test
*/
public function it_should_test_there_is_an_error_in_the_proxy_new_cases_list_file()
{
// Turn on output buffering
ob_start();
// Call the tested file
require_once PATH_METHODS . 'cases/proxyNewCasesList.php';
// Return the contents of the output buffer
$outputBuffer = ob_get_contents();
// Clean the output buffer and turn off output buffering
ob_end_clean();
// Parse JSON
$result = json_decode($outputBuffer, true);
// This asserts there is an error in the output
$this->assertNotEmpty($result);
$this->assertArrayHasKey('error', $result);
}
/**
* It tests the result contains an empty "search" field
*
* @test
*/
public function it_should_test_the_response_of_the_proxy_new_cases_list_file()
{
$_REQUEST["paged"] = '';
$_REQUEST['count'] = '';
$_REQUEST["category"] = '';
$_REQUEST["process"] = '';
$_REQUEST["search"] = 'fsfaefwa';
$_REQUEST["filter"] = '';
$_REQUEST["dateFrom"] = '';
$_REQUEST["dateTo"] = '';
$_REQUEST["start"] = '';
$_REQUEST["limit"] = '';
$_REQUEST['sort'] = 'ASC';
$_REQUEST["dir"] = '';
$_REQUEST["action"] = 'todo';
$_REQUEST["user"] = '';
$_REQUEST["list"] = 'inbox';
$_REQUEST["filterStatus"] = '';
$_REQUEST['openApplicationUid'] = '';
// Turn on output buffering
ob_start();
// Call the tested file
require_once PATH_METHODS . 'cases/proxyNewCasesList.php';
// Return the contents of the output buffer
$outputBuffer = ob_get_contents();
// Clean the output buffer and turn off output buffering
ob_end_clean();
// Parse JSON
$result = json_decode($outputBuffer, true);
// This asserts that the search parameter has an empty value
if (!empty($result)) {
$this->assertArrayHasKey('search', $result);
} else {
$this->assertNull($result);
}
}
}

View File

@@ -0,0 +1,217 @@
<?php
use ProcessMaker\Model\User;
if (!isset($_SESSION['USER_LOGGED'])) {
$responseObject = new stdclass();
$responseObject->error = G::LoadTranslation('ID_LOGIN_AGAIN');
$responseObject->success = true;
$responseObject->lostSession = true;
print(G::json_encode($responseObject));
die();
}
try {
$userUid = $_SESSION['USER_LOGGED'];
// This filter will search in the case title and this can be used '&'
$filters['search'] = isset($_REQUEST["search"]) ? htmlspecialchars($_REQUEST["search"]) : "";
// Sanitize the filters
$filter = new InputFilter();
$_REQUEST = $filter->xssFilterHard($_REQUEST);
// Prepare filters
$filters['paged'] = isset($_REQUEST["paged"]) ? $_REQUEST["paged"] : true;
$filters['count'] = isset($_REQUEST['count']) ? $_REQUEST["count"] : true;
$filters['category'] = isset($_REQUEST["category"]) ? $_REQUEST["category"] : "";
$filters['process'] = isset($_REQUEST["process"]) ? $_REQUEST["process"] : "";
$filters['filter'] = isset($_REQUEST["filter"]) ? $_REQUEST["filter"] : "";
$filters['dateFrom'] = (!empty($_REQUEST["dateFrom"])) ? substr($_REQUEST["dateFrom"], 0, 10) : "";
$filters['dateTo'] = (!empty($_REQUEST["dateTo"])) ? substr($_REQUEST["dateTo"], 0, 10) : "";
$filters['start'] = isset($_REQUEST["start"]) ? $_REQUEST["start"] : "0";
$filters['limit'] = isset($_REQUEST["limit"]) ? $_REQUEST["limit"] : "25";
$filters['sort'] = (isset($_REQUEST['sort'])) ? (($_REQUEST['sort'] == 'APP_STATUS_LABEL') ? 'APP_STATUS' : $_REQUEST["sort"]) : '';
$filters['dir'] = isset($_REQUEST["dir"]) ? $_REQUEST["dir"] : "DESC";
$filters['action'] = isset($_REQUEST["action"]) ? $_REQUEST["action"] : "";
$filters['user'] = isset($_REQUEST["user"]) ? $_REQUEST["user"] : "";
$listName = isset($_REQUEST["list"]) ? $_REQUEST["list"] : "inbox";
$filters['filterStatus'] = isset($_REQUEST["filterStatus"]) ? $_REQUEST["filterStatus"] : "";
$filters['sort'] = G::toUpper($filters['sort']);
$openApplicationUid = (isset($_REQUEST['openApplicationUid']) && $_REQUEST['openApplicationUid'] != '') ? $_REQUEST['openApplicationUid'] : null;
global $RBAC;
$RBAC->allows(basename(__FILE__), $filters['action']);
//Define user when is reassign
if ($filters['action'] == 'to_reassign') {
if ($filters['user'] == '') {
$userUid = '';
}
if ($filters['user'] !== '' && $filters['user'] !== 'CURRENT_USER') {
$userUid = $filters['user'];
}
}
// Select list
switch ($listName) {
case 'inbox':
$list = new ListInbox();
break;
case 'participated_history':
$list = new ListParticipatedHistory();
break;
case 'participated':
case 'participated_last':
$list = new ListParticipatedLast();
break;
case 'completed':
$list = new ListCompleted();
break;
case 'paused':
$list = new ListPaused();
break;
case 'canceled':
$list = new ListCanceled();
break;
case 'my_inbox':
$list = new ListMyInbox();
break;
case 'unassigned':
$list = new ListUnassigned();
break;
}
// Validate filters
$filters['search'] = (!is_null($openApplicationUid)) ? $openApplicationUid : $filters['search'];
//Set a flag for review in the list by APP_UID when is used the case Link with parallel task
$filters['caseLink'] = (!is_null($openApplicationUid)) ? $openApplicationUid : '';
$filters['start'] = (int) $filters['start'];
$filters['start'] = abs($filters['start']);
if ($filters['start'] != 0) {
$filters['start'] + 1;
}
$filters['limit'] = (int) $filters['limit'];
$filters['limit'] = abs($filters['limit']);
$conf = new Configurations();
$formats = $conf->getFormats();
$list->setUserDisplayFormat($formats['format']);
if ($filters['limit'] == 0) {
$generalConfCasesList = $conf->getConfiguration('ENVIRONMENT_SETTINGS', '');
if (isset($generalConfCasesList['casesListRowNumber'])) {
$filters['limit'] = (int) $generalConfCasesList['casesListRowNumber'];
} else {
$filters['limit'] = 25;
}
} else {
$filters['limit'] = (int) $filters['limit'];
}
switch ($filters['sort']) {
case 'APP_CURRENT_USER':
//This value is format according to the userDisplayFormat, for this reason we will sent the UID
$filters['sort'] = 'USR_UID';
break;
case 'DEL_TASK_DUE_DATE':
$filters['sort'] = 'DEL_DUE_DATE';
break;
case 'APP_UPDATE_DATE':
$filters['sort'] = 'DEL_DELEGATE_DATE';
break;
case 'APP_DEL_PREVIOUS_USER':
//This value is format according to the userDisplayFormat, for this reason we will sent the UID
$filters['sort'] = 'DEL_PREVIOUS_USR_UID';
break;
case 'DEL_CURRENT_TAS_TITLE':
$filters['sort'] = 'APP_TAS_TITLE';
break;
case 'APP_STATUS_LABEL':
$filters['sort'] = 'APP_STATUS';
break;
}
$filters['dir'] = G::toUpper($filters['dir']);
if (!($filters['dir'] == 'DESC' || $filters['dir'] == 'ASC')) {
$filters['dir'] = 'DESC';
}
$result = $list->loadList($userUid, $filters, function (array $record) {
try {
if (isset($record["DEL_PREVIOUS_USR_UID"])) {
if ($record["DEL_PREVIOUS_USR_UID"] == "") {
$appDelegation = AppDelegationPeer::retrieveByPK($record["APP_UID"], $record["DEL_INDEX"]);
if (!is_null($appDelegation)) {
$appDelegationPrevious = AppDelegationPeer::retrieveByPK($record["APP_UID"], $appDelegation->getDelPrevious());
if (!is_null($appDelegationPrevious)) {
$taskPrevious = TaskPeer::retrieveByPK($appDelegationPrevious->getTasUid());
if (!is_null($taskPrevious)) {
switch ($taskPrevious->getTasType()) {
case "SCRIPT-TASK":
$record["DEL_PREVIOUS_USR_UID"] = $taskPrevious->getTasType();
break;
}
}
}
}
}
$record["PREVIOUS_USR_UID"] = $record["DEL_PREVIOUS_USR_UID"];
$record["PREVIOUS_USR_USERNAME"] = $record["DEL_PREVIOUS_USR_USERNAME"];
$record["PREVIOUS_USR_FIRSTNAME"] = $record["DEL_PREVIOUS_USR_FIRSTNAME"];
$record["PREVIOUS_USR_LASTNAME"] = $record["DEL_PREVIOUS_USR_LASTNAME"];
} elseif (!empty($record["USR_ID"])) {
$user = User::where("USR_ID", $record["USR_ID"])->first();
$record["PREVIOUS_USR_UID"] = $record["DEL_PREVIOUS_USR_UID"] = $user->USR_UID;
$record["PREVIOUS_USR_USERNAME"] = $record["DEL_PREVIOUS_USR_USERNAME"] = $user->USR_USERNAME;
$record["PREVIOUS_USR_FIRSTNAME"] = $record["DEL_PREVIOUS_USR_FIRSTNAME"] = $user->USR_FIRSTNAME;
$record["PREVIOUS_USR_LASTNAME"] = $record["DEL_PREVIOUS_USR_LASTNAME"] = $user->USR_LASTNAME;
}
if (isset($record["DEL_DUE_DATE"])) {
$record["DEL_TASK_DUE_DATE"] = $record["DEL_DUE_DATE"];
}
if (isset($record["APP_PAUSED_DATE"])) {
$record["APP_UPDATE_DATE"] = $record["APP_PAUSED_DATE"];
}
if (isset($record["DEL_CURRENT_USR_USERNAME"])) {
$record["USR_USERNAME"] = $record["DEL_CURRENT_USR_USERNAME"];
$record["USR_FIRSTNAME"] = $record["DEL_CURRENT_USR_FIRSTNAME"];
$record["USR_LASTNAME"] = $record["DEL_CURRENT_USR_LASTNAME"];
$record["APP_UPDATE_DATE"] = $record["DEL_DELEGATE_DATE"];
}
if (isset($record['DEL_CURRENT_TAS_TITLE']) && $record['DEL_CURRENT_TAS_TITLE'] != '') {
$record['APP_TAS_TITLE'] = $record['DEL_CURRENT_TAS_TITLE'];
} elseif (!empty($record["TAS_TITLE"]) && empty($record["APP_TAS_TITLE"])) {
$record["APP_TAS_TITLE"] = $record["TAS_TITLE"];
}
if (isset($record["APP_STATUS"])) {
$record["APP_STATUS_LABEL"] = G::LoadTranslation("ID_" . $record["APP_STATUS"]);
}
if (!empty($record["PRO_TITLE"]) && empty($record["APP_PRO_TITLE"])) {
$record["APP_PRO_TITLE"] = $record["PRO_TITLE"];
}
return $record;
} catch (Exception $e) {
throw $e;
}
});
$response = array();
$response['filters'] = $filters;
$response['totalCount'] = $list->getCountList($userUid, $filters);
$response['data'] = \ProcessMaker\Util\DateTime::convertUtcToTimeZone($result);
!empty($response['filters']['search']) ? $response['filters']['search'] = '' : '';
echo G::json_encode($response);
} catch (Exception $e) {
$msg = array("error" => $e->getMessage());
echo G::json_encode($msg);
}