Merged in release/3.8.1 (pull request #8656)

release/3.8.1
This commit is contained in:
Paula Quispe
2022-12-05 19:22:22 +00:00
114 changed files with 1615 additions and 790 deletions

View File

@@ -4,7 +4,7 @@ jobs:
working_directory: ~/processmaker
docker:
- image: devopsstacks/pm:n285-phpunit
- image: circleci/mysql:8.0.13-ram
- image: cimg/mysql:8.0
command: |
mysqld --default-authentication-plugin='mysql_native_password' --optimizer-switch='derived_merge=off' --sql-mode='NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' --collation-server='utf8mb4_unicode_ci' --character-set-server='utf8mb4' --max_connections=500
environment:
@@ -28,10 +28,12 @@ jobs:
name: Run Test Units
command: |
mkdir -p coverage
vendor/phpunit/phpunit/phpunit --stop-on-error --testdox-html coverage/result.html --coverage-html coverage --verbose tests/unit/
vendor/bin/phpunit --stop-on-error --testdox-html coverage/result.html --coverage-html coverage --verbose tests/unit/
environment:
XDEBUG_MODE: coverage
- store_artifacts:
path: coverage
destination: coverage
- store_test_results:
path: coverage

View File

@@ -96,7 +96,6 @@
"thirdparty/pear",
"thirdparty/phing",
"thirdparty/pake",
"thirdparty/wizard",
"rbac/engine/classes/"
],
"files": [

View File

@@ -9,7 +9,7 @@ return [
'url' => env('APP_URL', 'http://localhost'),
'env' => env('APP_ENV', 'production'),
'debug' => env('APP_DEBUG', false),
'cache_lifetime' => env('APP_CACHE_LIFETIME', 60),
'cache_lifetime' => env('APP_CACHE_LIFETIME', 3600), //laravel 8.x the time parameter is in seconds.
'key' => env('APP_KEY', 'base64:rU28h/tElUn/eiLY0qC24jJq1rakvAFRoRl1DWxj/kM='),
'cipher' => 'AES-256-CBC',
'timezone' => 'UTC',

View File

@@ -368,6 +368,7 @@ class DataBaseMaintenance
. ' --port=' . $dbPort
. ' --opt'
. ' --skip-comments'
. ' --no-tablespaces'
. ' ' . $this->getDbName()
. ' > ' . $outfile;
} else {
@@ -376,6 +377,7 @@ class DataBaseMaintenance
. ' --user=' . $this->getUser()
. ' --opt'
. ' --skip-comments'
. ' --no-tablespaces'
. ' --password=' . $password
. ' ' . $this->getDbName()
. ' > ' . $outfile;

View File

@@ -25,6 +25,21 @@
</testsuite>
</testsuites>
<coverage processUncoveredFiles="false">
<include>
<directory suffix=".php">./app</directory>
<directory suffix=".php">./gulliver</directory>
<directory suffix=".php">./rbac</directory>
<directory suffix=".php">./workflow</directory>
</include>
<exclude>
<directory>./workflow/engine/classes/model/map</directory>
<directory>./workflow/engine/classes/model/om</directory>
<directory>./workflow/public_html</directory>
<directory>./workflow/engine/templates</directory>
</exclude>
</coverage>
<php>
<!--Main environment-->
<env name="MAIN_SYS_SYS" value="workflow" />

View File

@@ -2,8 +2,8 @@
<div class="container py-2">
<div class="row"></div>
<div class="comments col-md-12" id="comments">
<p>
<b>{{ data.title }}</b>
<p class="commentTitle">
{{ data.title }}
</p>
<div v-for="item in data.items" :key="item.date">
<case-comment
@@ -45,6 +45,7 @@
ref="comment"
cols="80"
rows="5"
aria-label="comments"
></textarea>
</div>
</div>
@@ -52,7 +53,7 @@
</div>
<div class="comment mb-2 row float-right">
<div class="form-check v-check-comment">
<input type="checkbox" class="form-check-input" ref="send" />
<input id="sendEmail" type="checkbox" class="form-check-input" ref="send" />
<label class="form-check-label" for="sendEmail">
{{ $t("ID_SEND_EMAIL_CASE_PARTICIPANTS") }}</label
>
@@ -216,4 +217,7 @@ export default {
font-size: 32px;
color: antiquewhite;
}
.commentTitle {
font-weight: bolder;
}
</style>

View File

@@ -3,6 +3,7 @@
<iframe
:width="width"
ref="IFrameCaseHistory"
title="IFrameCaseHistory"
frameborder="0"
:src="path"
:height="height"

View File

@@ -3,6 +3,7 @@
<iframe
:width="width"
ref="IFrameChangeLog"
title="IFrameChangeLog"
frameborder="0"
:src="path"
:height="height"

View File

@@ -3,6 +3,7 @@
<iframe
:width="width"
ref="IFrameSummaryForm"
title="IFrameSummaryForm"
frameborder="0"
:src="path"
:height="height"

View File

@@ -3,6 +3,7 @@
<iframe
:width="width"
ref="IFrameProcessMap"
title="IFrameProcessMap"
frameborder="0"
:src="path"
:height="height"

View File

@@ -1,5 +1,5 @@
<template>
<div id="my-container">
<div :id="`menu-${item.id}`">
<div
v-if="item.header && !isItemHidden"
class="vsm--header"

View File

@@ -23,7 +23,7 @@
</div>
</template>
<template v-slot:body>
<b-form-group>
<b-form-group label-for="advancedFilter">
<b-form-checkbox-group
v-model="selected"
:options="filterItems"
@@ -82,7 +82,9 @@
<b-form-group
:state="caseNumberState"
:invalid-feedback="$t('ID_INVALID_APPLICATION_NUMBER')"
label-for="caseNumber"
>
<label for="case-number-input"></label>
<b-form-input
id="case-number-input"
v-model="caseNumber"
@@ -90,6 +92,7 @@
:placeholder="$t('ID_CASE_NUMBER_CAPITALIZED')"
required
type="number"
aria-label="case_number"
></b-form-input>
</b-form-group>
</form>
@@ -147,6 +150,7 @@
variant="outline-secondary"
class="pull-right"
@click="onSearch"
aria-label="search"
>
<b-icon icon="search"></b-icon>
</b-button>

View File

@@ -6,7 +6,7 @@
:title="addSearchTitle"
>
<template v-slot:body>
<b-form-group>
<b-form-group label-for="casesFilter">
<b-form-radio-group
v-model="selected"
:options="criteriaItems"
@@ -15,7 +15,7 @@
name="flavour-2a"
stacked
></b-form-radio-group>
<b-form-group> </b-form-group>
<p></p>
<b-form-checkbox
id="checkbox-2"
v-model="byProcessCategory"

View File

@@ -6,7 +6,7 @@
:title="addSearchTitle"
>
<template v-slot:body>
<b-form-group>
<b-form-group label-for="customFilter">
<b-form-radio-group
v-model="selectedRadio"
:options="getFilterColletion('radio')"
@@ -15,7 +15,7 @@
name="flavour-2a"
stacked
></b-form-radio-group>
<b-form-group> </b-form-group>
<p></p>
<b-form-checkbox-group
id="checkbox-custom-filter"
v-model="selectedCheckbox"

View File

@@ -6,8 +6,7 @@
:title="addSearchTitle"
>
<template v-slot:body>
<b-form-group>
<b-form-group label-for="myCasesFilter">
<b-form-radio-group
v-model="selected"
:options="filterItems"

View File

@@ -11,7 +11,7 @@
>
<span
v-html="tab.header"
:aria-controls="tab.hash"
:aria-label="tab.hash"
:aria-selected="tab.isActive"
@click="selectTab(tab.hash, $event)"
class="tabs-component-tab-a"

View File

@@ -16,7 +16,7 @@
<span>{{ item.label }}</span>
</span>
</li>
<div
<li
v-for="item in settings"
:key="item.id"
class="vp-bread-crumbs-settings vp-float-right vp-inline-block"
@@ -29,7 +29,7 @@
>
<i :class="formatClass(item)"></i>
</span>
</div>
</li>
</ol>
</nav>
</template>

View File

@@ -23,6 +23,7 @@
:key="item.name"
variant="outline-info"
@click="executeFunction(item.fn)"
:aria-label="item.name"
>
<i class="custom-icon" :class="item.icon" v-bind:style="{color: item.color}"></i>
</b-button>

View File

@@ -8,36 +8,32 @@
@show="onshow"
>
<template #title>{{ $t("ID_COLUMNS").toUpperCase() }}</template>
<div>
<div class="input-group input-group-sm mb-3">
<span class="input-group-text" id="inputGroup-sizing-sm"
><i class="fas fa-search"></i
></span>
<input
type="text"
class="form-control"
aria-describedby="inputGroup-sizing-sm"
aria-label="inputGroup-sizing-sm"
@keyup="search"
v-model="text"
/>
</div>
<div class="form-check border-bottom">
<input
class="form-check-input"
type="checkbox"
v-model="allColumns"
@change="toogleAllColumns"
id="flexCheckDefault"
/>
<label class="form-check-label" for="flexCheckDefault">
{{ $t("ID_ALL") }}
</label>
</div>
<b-form-group>
<b-form-group label-for="settingsPopover">
<b-form-checkbox-group
v-model="localSelected"
:options="options"
@@ -48,13 +44,11 @@
stacked
></b-form-checkbox-group>
</b-form-group>
<div class="v-popover-footer">
<div class="float-right">
<b-button @click="onClose" size="sm" variant="danger">
{{ $t("ID_CANCEL") }}</b-button
>
<b-button @click="onSave" size="sm" variant="success">{{
$t("ID_SAVE")
}}</b-button>

View File

@@ -3,6 +3,7 @@
<iframe
:width="width"
ref="xIFrame"
title="xIFrame"
frameborder="0"
:src="path"
:height="height"

View File

@@ -2,6 +2,7 @@
<div
id="home"
:class="[{ collapsed: collapsed }, { onmobile: isOnMobile }]"
role="main"
>
<div class="demo">
<b-alert

View File

@@ -7,6 +7,7 @@
:src="pageUri"
:height="height"
allowfullscreen
title="xIFrame"
></iframe>
</div>
</template>

View File

@@ -3,6 +3,7 @@
<iframe
:width="width"
ref="xIFrame"
title="xIFrame"
frameborder="0"
:src="path"
:height="height"

View File

@@ -19,6 +19,7 @@
aria-describedby="inputGroup-sizing-sm"
@keyup="search"
v-model="text"
aria-label="search"
/>
</div>
<div class="form-check border-bottom">
@@ -27,12 +28,13 @@
type="checkbox"
v-model="allColumns"
@change="toogleAllColumns"
id="flexCheckDefault"
/>
<label class="form-check-label" for="flexCheckDefault">
{{ $t("ID_ALL") }}
</label>
</div>
<b-form-group>
<b-form-group label-for="casesFilter">
<b-form-checkbox-group
v-model="localSelected"
:options="results"

View File

@@ -1,5 +1,5 @@
<template>
<div id="v-pm-charts" ref="v-pm-charts" class="v-pm-charts vp-inline-block">
<div ref="v-pm-charts" class="v-pm-charts vp-inline-block">
<div class="p-1 v-flex">
<h6 class="v-search-title">
{{ $t("ID_DRILL_DOWN_NUMBER_TASKS_PROCESS") }}
@@ -70,13 +70,13 @@
</div>
</b-popover>
<div class="vp-inline-block vp-right vp-padding-r40">
<h4
<span
class="v-search-title"
@click="showProcessesPopover"
id="pm-task-process"
>
<i class="fas fa-cog"></i>
</h4>
</span>
</div>
</div>
<div class="v-search-info">

View File

@@ -1,5 +1,5 @@
<template>
<div id="v-pm-charts" ref="v-pm-charts" class="v-pm-charts vp-inline-block">
<div ref="v-pm-charts" class="v-pm-charts vp-inline-block">
<div class="p-1 v-flex">
<h6 class="v-search-title">
{{ $t("ID_DRILL_DOWN_RISK_MATRIX") }}

View File

@@ -1,5 +1,5 @@
<template>
<div id="v-pm-charts" ref="v-pm-charts" class="v-pm-charts vp-inline-block">
<div ref="v-pm-charts" class="v-pm-charts vp-inline-block">
<div class="p-1 v-flex">
<h6 class="v-search-title">
{{ $t("ID_DRILL_DOWN_NUMBER_TASKS_PROCESS_BY_TASK") }}

View File

@@ -1,5 +1,5 @@
<template>
<div id="v-pm-charts" ref="v-pm-charts" class="v-pm-charts vp-inline-block">
<div ref="v-pm-charts" class="v-pm-charts vp-inline-block">
<div class="p-1 v-flex">
<h6 class="v-search-title">{{ $t("ID_DRILL_DOWN_NUMBER_TASKS") }}</h6>
<BreadCrumb :options="dataBreadcrumbs" :settings="settingsBreadcrumbs" />

View File

@@ -3,6 +3,7 @@
<iframe
:width="width"
ref="xIFrame"
title="xIFrame"
frameborder="0"
:src="path"
:height="height"

View File

@@ -3,6 +3,7 @@
<iframe
:width="width"
ref="xIFrame"
title="xIFrame"
frameborder="0"
:src="path"
:height="height"

View File

@@ -26,12 +26,13 @@
ref="comment"
cols="80"
rows="5"
aria-label="commentsCancelCase"
></textarea>
</div>
<div class="row">
<div class="col-md-12 ml-auto">
<input type="checkbox" class="" ref="send" />
<label class="form-check-label" for="sendEmail">
<input id="sendEmailCancelCase" type="checkbox" class="" ref="send" />
<label class="form-check-label" for="sendEmailCancelCase">
Send email to participants</label
>
</div>

View File

@@ -21,13 +21,14 @@
</b-alert>
<b-row class="my-1">
<b-col sm="3">
<label for="pauseDate">{{ $t('ID_PAUSE_DATE') }}</label>
<label aria-label="pauseDate">{{ $t('ID_PAUSE_DATE') }}</label>
</b-col>
<b-col sm="5">
<b-form-datepicker
disabled
id="pauseDate"
class="mb-2"
aria-controls="pauseDate"
v-model="pauseData.pauseDate"
:locale="locale"
:date-format-options="{ year: 'numeric', month: 'numeric', day: 'numeric' }"
@@ -40,12 +41,13 @@
<b-row class="my-1">
<b-col sm="3">
<label for="unpauseDate">{{ $t('ID_UNPAUSE_DATE') }}</label>
<label aria-label="unpauseDate">{{ $t('ID_UNPAUSE_DATE') }}</label>
</b-col>
<b-col sm="5">
<b-form-datepicker
id="unpauseDate"
class="mb-2"
aria-controls="unpauseDate"
v-model="pauseData.unpauseDate"
:locale="locale"
:min="minDate"

View File

@@ -21,10 +21,10 @@
<b-container fluid>
<b-row class="my-1">
<b-col sm="3">
<label for="selectUser">{{ $t('ID_SELECT_USER') }}</label>
<label aria-label="selectUser">{{ $t('ID_SELECT_USER') }}</label>
</b-col>
<b-col sm="9">
<b-form-select v-model="userSelected" :options="users"></b-form-select>
<b-form-select id="selectUser" v-model="userSelected" :options="users" aria-label="selectUser"></b-form-select>
</b-col>
</b-row>

View File

@@ -4,8 +4,7 @@ namespace Tests;
use App\Factories\Factory;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Support\Facades\DB;
use Propel;
use mysqli;
abstract class TestCase extends BaseTestCase
{
@@ -84,9 +83,8 @@ abstract class TestCase extends BaseTestCase
* truncate non-initial Models.
* @return void
*/
public function truncateNonInitialModels(): void
public static function truncateNonInitialModels(): void
{
DB::statement("set global max_connections = 500;");
if (empty(static::$truncateInitialTables)) {
$initialTables = [
'RBAC_PERMISSIONS',
@@ -135,12 +133,15 @@ abstract class TestCase extends BaseTestCase
}
static::$truncateInitialTables = implode(';', $truncates);
}
} else {
DB::unprepared(
"SET FOREIGN_KEY_CHECKS = 0;" .
static::$truncateInitialTables .
";SET FOREIGN_KEY_CHECKS = 1;"
);
}
$mysqli = new mysqli(env('DB_HOST'), env('DB_USERNAME'), env('DB_PASSWORD'), env('DB_DATABASE'));
$mysqli->multi_query(
"set global max_connections = 500;" .
"SET FOREIGN_KEY_CHECKS = 0;" .
static::$truncateInitialTables .
";SET FOREIGN_KEY_CHECKS = 1;"
);
// flush multi_queries
while ($mysqli->next_result()) {;}
}
}

View File

@@ -0,0 +1,274 @@
<?php
declare(strict_types=1);
namespace ExampleNamespace;
use Some\Classes\{
ClassA,
ClassB,
ClassC as C
};
/**
* Test
*/
class Example implements Iface1, Iface2, Iface3
{
#[A1("param")]
private ClassA|ClassB|null $unionType;
/**
* Test
* @var ClassA&ClassB
*/
private ClassA&ClassB $intersectionType;
/**
* Test
* @param type $a
* @param type $b
*/
public function ifExample($a, $b)
{
if (convert($a) > $b) {
echo "a is bigger than b";
} elseif ($a == $b) {
echo $a . " is equal to " . $b[0];
} else {
$result = getText($this->property1, $this->property2);
}
$result = $a < $b ? $a : $b;
}
/**
* test
*/
public function forExample()
{
for ($i = 1; $i <= 10; $i++) {
echo 'Item: ';
echo $i;
}
}
/**
* Test
*/
public function foreachEample()
{
$arr = array(1, 2, 3, 4, "b" => 5, "a" => 6);
foreach ($arr as &$value) {
$value = (int) $value * 2;
}
}
/**
* Test
*/
public function whileExample()
{
$i = 1;
while ($i <= 10) {
echo $i++;
}
}
/**
* Test
* @param type $i
*/
public function doWhileExample($i)
{
do {
echo $i--;
} while ($i > 0);
}
/**
* Test
*/
public function switchExample()
{
switch ($i) {
case 0:
echo "i equals 0";
break;
case 1:
echo "i equals 1";
break;
}
}
/**
* Test
*/
public function matchExample()
{
$result = match ($i) {
1, 2, 3 => "1, 2, or 3",
4, 5, => "4 or 5",
default => $this->getDefaultValue(),
};
}
/**
* Test
* @return int
*/
public function getDefaultValue(): int
{
return 10;
}
/**
* Test
*/
public function tryExample()
{
try {
echo inverse(5) . "\n";
} catch (Exception $e) {
echo 'Caught exception: ' . $e->getMessage() . "\n";
} finally {
echo "Finally block";
}
}
/**
* Test
* @param type $arg
* @return \ExampleNamespace\#anon#ContentPHPSourceCode_php#1
*/
public function anonymousClassExample($arg)
{
$instance = new class($arg) extends Anonymous
{
public function __construct($arg)
{
}
public function anon()
{
echo "anonymous";
}
};
return $instance;
}
/**
* Test
* @param type $arg1
* @param type $arg2
* @param type $arg3
* @param type $arg4
* @param type $arg5
*/
public function alignParamsExample($arg1, $arg2, $arg3, $arg4, $arg5)
{
}
/**
* Test
* @param Class1|Class2|null $object
* @return int|float|null
*/
public function unionTypesExample(Class1|Class2|null $object): int|float|null
{
return null;
}
/**
* Test
* @param ClassA&ClassB $object
* @return ClassA&ClassB
*/
public function intersectionTypesExample(ClassA&ClassB $object): ClassA&ClassB
{
return $object;
}
/**
* Test
* @param object $object
*/
public function nullsafeOperatorExample(object $object)
{
$object?->nullsafe();
}
}
enum EnumExample: string
{
case FOO = 'F';
case BAR = 'B';
public function example(): string
{
return match ($this) {
static::FOO => 'Foo',
static::BAR => 'Bar',
};
}
}
$anonymousFunc = function ($arg) use ($param): int {
return 1;
};
// Wrapping: Method Call Arguments must be set
(new Example())->alignParamsExample('one', 'two', 'three', 'four', 'five');
/**
* Test
* @param type $a
* @param type $b
*/
function namedArguments($a, $b)
{
}
/**
* ProcessMaker has made a number of its PHP functions available be used in triggers and conditions.
* Most of these functions are wrappers for internal functions used in Gulliver, which is the development framework
* used by ProcessMaker.
* @class pmFunctions
*
* @name ProcessMaker Functions
* @icon /images/pm.gif
* @className class.pmFunctions.php
*/
/**
* @method
*
* Create a new user
*
* @name PMFNewUser
* @label PMF New User
*
* @param string | $test
*
* @return array | $response | Response
*/
function testAnnotation($test){
return [];
}
namedArguments(a: 1, b: 2);
$shortName = 10;
$veryLooongName = 20;
$data = [
'short_key' => 10,
'very_looong_key' => 100,
];

View File

@@ -149,7 +149,7 @@ class CliWorkspacesTest extends TestCase
/**
* Test the queries incompatibilities in dynaforms
*
* @covers WorkspaceTools::check_queries_incompatibilities
* @covers check_queries_incompatibilities
* @test
*/
public function it_should_test_the_incompatibilities_in_the_dynaforms_queries()

View File

@@ -15,25 +15,6 @@ use Tests\TestCase;
class CasesTest extends TestCase
{
protected $preserveGlobalState = false;
protected $runTestInSeparateProcess = true;
/**
* Call setUp method
*/
public function setUp(): void
{
parent::setUp(); // TODO: Change the autogenerated stub
}
/**
* Call the tearDown method
*/
public function tearDown(): void
{
// The parent method needs to be override due to errors appearing
}
/**
* Test getNextStep method with no steps
*

View File

@@ -12,6 +12,16 @@ use Tests\TestCase;
*/
class PmDynaformTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
@@ -35,7 +45,6 @@ class PmDynaformTest extends TestCase
if (!defined("DB_PASS")) {
define("DB_PASS", env('DB_PASSWORD'));
}
$this->truncateNonInitialModels();
}
/**

View File

@@ -21,10 +21,19 @@ class ExecuteQueryTest extends TestCase
protected $contentSystemTables = "tables = 'APPLICATION|APP_SEQUENCE|APP_DELEGATION|APP_DOCUMENT|APP_MESSAGE|APP_OWNER|CONFIGURATION|CONTENT|DEPARTMENT|DYNAFORM|GROUPWF|GROUP_USER|HOLIDAY|INPUT_DOCUMENT|ISO_COUNTRY|ISO_LOCATION|ISO_SUBDIVISION|LANGUAGE|LEXICO|OUTPUT_DOCUMENT|PROCESS|PROCESS_OWNER|REPORT_TABLE|REPORT_VAR|ROUTE|STEP|STEP_TRIGGER|SWIMLANES_ELEMENTS|TASK|TASK_USER|TRANSLATION|TRIGGERS|USERS|APP_THREAD|APP_DELAY|PROCESS_USER|SESSION|DB_SOURCE|STEP_SUPERVISOR|OBJECT_PERMISSION|CASE_TRACKER|CASE_TRACKER_OBJECT|CASE_CONSOLIDATED|STAGE|SUB_PROCESS|SUB_APPLICATION|LOGIN_LOG|USERS_PROPERTIES|ADDITIONAL_TABLES|FIELDS|SHADOW_TABLE|EVENT|GATEWAY|APP_EVENT|APP_CACHE_VIEW|DIM_TIME_DELEGATE|DIM_TIME_COMPLETE|APP_HISTORY|APP_FOLDER|FIELD_CONDITION|LOG_CASES_SCHEDULER|CASE_SCHEDULER|CALENDAR_DEFINITION|CALENDAR_BUSINESS_HOURS|CALENDAR_HOLIDAYS|CALENDAR_ASSIGNMENTS|PROCESS_CATEGORY|APP_NOTES|DASHLET|DASHLET_INSTANCE|APP_SOLR_QUEUE|SEQUENCES|SESSION_STORAGE|PROCESS_FILES|WEB_ENTRY|OAUTH_ACCESS_TOKENS|OAUTH_AUTHORIZATION_CODES|OAUTH_CLIENTS|OAUTH_REFRESH_TOKENS|OAUTH_SCOPES|PMOAUTH_USER_ACCESS_TOKENS|BPMN_PROJECT|BPMN_PROCESS|BPMN_ACTIVITY|BPMN_ARTIFACT|BPMN_DIAGRAM|BPMN_BOUND|BPMN_DATA|BPMN_EVENT|BPMN_FLOW|BPMN_GATEWAY|BPMN_LANESET|BPMN_LANE|BPMN_PARTICIPANT|BPMN_EXTENSION|BPMN_DOCUMENTATION|PROCESS_VARIABLES|APP_TIMEOUT_ACTION_EXECUTED|ADDONS_STORE|ADDONS_MANAGER|LICENSE_MANAGER|APP_ASSIGN_SELF_SERVICE_VALUE|APP_ASSIGN_SELF_SERVICE_VALUE_GROUP|LIST_INBOX|LIST_PARTICIPATED_HISTORY|LIST_PARTICIPATED_LAST|LIST_COMPLETED|LIST_PAUSED|LIST_CANCELED|LIST_MY_INBOX|LIST_UNASSIGNED|LIST_UNASSIGNED_GROUP|MESSAGE_TYPE|MESSAGE_TYPE_VARIABLE|EMAIL_SERVER|WEB_ENTRY_EVENT|MESSAGE_EVENT_DEFINITION|MESSAGE_EVENT_RELATION|MESSAGE_APPLICATION|ELEMENT_TASK_RELATION|ABE_CONFIGURATION|ABE_REQUESTS|ABE_RESPONSES|USR_REPORTING|PRO_REPORTING|DASHBOARD|DASHBOARD_INDICATOR|DASHBOARD_DAS_IND|CATALOG|SCRIPT_TASK|TIMER_EVENT|EMAIL_EVENT|NOTIFICATION_DEVICE|GMAIL_RELABELING|NOTIFICATION_QUEUE|PLUGINS_REGISTRY|APP_DATA_CHANGE_LOG|JOBS_PENDING|JOBS_FAILED|RBAC_PERMISSIONS|RBAC_ROLES|RBAC_ROLES_PERMISSIONS|RBAC_SYSTEMS|RBAC_USERS|RBAC_USERS_ROLES|RBAC_AUTHENTICATION_SOURCE|'";
protected $oldContentSystemTables = "";
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
$this->oldContentSystemTables = "";
$path = PATH_CONFIG . $this->nameSystemTables;
if (file_exists($path)) {

View File

@@ -10,6 +10,16 @@ class WorkspaceToolsTest extends TestCase
use CreateTestSite;
public $workspace;
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up method.
* @return void
@@ -17,7 +27,6 @@ class WorkspaceToolsTest extends TestCase
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
config(["system.workspace" => "new_site"]);
$this->workspace = config("system.workspace");

View File

@@ -12,13 +12,22 @@ class GroupsAjaxTest extends TestCase
{
private $groups;
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up function
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
$this->settingUserLogged();
$this->createGroups();
}

View File

@@ -16,6 +16,16 @@ use Tests\TestCase;
class ActionsByEmailTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
*
* @return void
@@ -23,7 +33,6 @@ class ActionsByEmailTest extends TestCase
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -274,6 +283,7 @@ class ActionsByEmailTest extends TestCase
*/
public function it_should_test_the_load_action_by_email_method()
{
self::truncateNonInitialModels();
$user = User::factory()->create();
$application = Application::factory()->create([
'APP_UID' => '123456asse'

View File

@@ -23,13 +23,31 @@ use Tests\TestCase;
*/
class AbstractCasesTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -14,13 +14,31 @@ use Tests\TestCase;
*/
class BatchRoutingTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -14,13 +14,31 @@ use Tests\TestCase;
*/
class CanceledTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -14,13 +14,31 @@ use Tests\TestCase;
*/
class CasesListTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -14,13 +14,31 @@ use Tests\TestCase;
*/
class CompletedTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -21,13 +21,31 @@ use Tests\TestCase;
*/
class DraftTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -337,6 +355,7 @@ class DraftTest extends TestCase
*/
public function it_should_test_get_counters_by_processes_method_no_filter()
{
Delegation::truncate();
$process = Process::factory()->create();
$process2 = Process::factory()->create();
$user = User::factory()->create();
@@ -675,6 +694,7 @@ class DraftTest extends TestCase
*/
public function it_should_test_get_counters_by_range_method()
{
Delegation::truncate();
$process1 = Process::factory()->create();
$process2 = Process::factory()->create();
$user = User::factory()->create();

View File

@@ -25,13 +25,31 @@ use Tests\TestCase;
*/
class HomeTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* setUp method.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -20,13 +20,31 @@ use Tests\TestCase;
*/
class InboxTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -416,6 +434,7 @@ class InboxTest extends TestCase
*/
public function it_should_test_get_counters_by_processes_method_no_filter()
{
Delegation::truncate();
$user = User::factory()->create();
$process = Process::factory()->create();
$process2 = Process::factory()->create();
@@ -685,6 +704,7 @@ class InboxTest extends TestCase
*/
public function it_should_test_get_counters_by_range_method()
{
Delegation::truncate();
$user = User::factory()->create();
$process = Process::factory()->create();
$process2 = Process::factory()->create();

View File

@@ -15,13 +15,31 @@ use Tests\TestCase;
*/
class ParticipatedTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -424,6 +442,7 @@ class ParticipatedTest extends TestCase
*/
public function it_filter_by_thread_title()
{
Delegation::truncate();
// Create factories related to the participated cases
$cases = $this->createParticipated();
// We need to commit the records inserted because is needed for the "fulltext" index

View File

@@ -23,13 +23,31 @@ use Tests\TestCase;
*/
class PausedTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -357,6 +375,7 @@ class PausedTest extends TestCase
*/
public function it_filter_by_thread_title()
{
Delegation::truncate();
// Create factories related to the paused cases
$cases = $this->createPaused();
// We need to commit the records inserted because is needed for the "fulltext" index
@@ -469,6 +488,7 @@ class PausedTest extends TestCase
*/
public function it_should_test_get_counters_by_processes_method_no_filter()
{
Delegation::truncate();
$cases = $this->createMultiplePaused(2);
$paused = new Paused();
$paused->setUserId($cases->USR_ID);
@@ -581,6 +601,7 @@ class PausedTest extends TestCase
*/
public function it_should_test_get_counters_by_range_method()
{
Delegation::truncate();
$user = User::factory()->create();
$process1 = Process::factory()->create();
$task = Task::factory()->create([

View File

@@ -15,13 +15,31 @@ use Tests\TestCase;
*/
class SearchTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Set up function.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -20,13 +20,31 @@ use Tests\TestCase;
*/
class SupervisingTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -384,6 +402,7 @@ class SupervisingTest extends TestCase
*/
public function it_filter_by_thread_title()
{
Delegation::truncate();
// Create factories related to the to_do cases
$cases = $this->createSupervising();
$usrUid = $cases->USR_UID;

View File

@@ -27,13 +27,31 @@ use Tests\TestCase;
*/
class UnassignedTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This method is called after the last test of this test class is run.
*/
public static function tearDownAfterClass(): void
{
parent::tearDownAfterClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -495,6 +513,8 @@ class UnassignedTest extends TestCase
*/
public function it_filter_by_thread_title()
{
Delegation::truncate();
Application::truncate();
// Create factories related to the unassigned cases
$cases = $this->createSelfServiceUserOrGroup();
$usrUid = $cases['taskUser']->USR_UID;
@@ -573,6 +593,7 @@ class UnassignedTest extends TestCase
*/
public function it_should_test_get_counters_by_processes_method_no_filter()
{
Delegation::truncate();
$cases = $this->createMultipleUnassigned(3);
$unassigned = new Unassigned();
$unassigned->setUserId($cases['taskUser']->USR_ID);
@@ -735,6 +756,7 @@ class UnassignedTest extends TestCase
*/
public function it_should_test_get_counters_by_range_method()
{
Delegation::truncate();
$user = User::factory()->create();
$process1 = Process::factory()->create([
'CATEGORY_ID' => 2

View File

@@ -28,13 +28,22 @@ use Tests\TestCase;
*/
class CasesTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up method.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
User::where('USR_ID', '=', 1)
->where('USR_ID', '=', 2)
->delete();
@@ -333,6 +342,7 @@ class CasesTest extends TestCase
*/
public function it_should_test_get_dynaforms_by_application()
{
Application::truncate();
// Create a process
$process = Process::factory()->create();

View File

@@ -23,12 +23,16 @@ class GranularImporterTest extends TestCase
* It should return data from addObjectData() method.
* @test
* @covers \ProcessMaker\BusinessModel\Migrator\GranularImporter::addObjectData()
* @dataProvider importDataObject
*/
public function it_should_return_data_from_add_object_data_method($name, $data)
public function it_should_return_data_from_add_object_data_method()
{
$granularImporter = new GranularImporter();
$result = $granularImporter->addObjectData($name, $data);
$this->assertArrayHasKey($name, $result);
$data = $this->importDataObject();
foreach ($data as $value) {
$name = $value[0];
$data = $value[1];
$granularImporter = new GranularImporter();
$result = $granularImporter->addObjectData($name, $data);
$this->assertArrayHasKey($name, $result);
}
}
}

View File

@@ -8,13 +8,22 @@ use Tests\TestCase;
class TableTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Method setUp.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -8,6 +8,16 @@ use Tests\TestCase;
class TaskSchedulerBMTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up method.
* @return void
@@ -15,7 +25,6 @@ class TaskSchedulerBMTest extends TestCase
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -94,6 +103,7 @@ class TaskSchedulerBMTest extends TestCase
*/
public function it_should_test_generate_initial_data_method()
{
TaskScheduler::truncate();
$r = TaskScheduler::all()->toArray();
$this->assertEmpty($r);

View File

@@ -10,6 +10,15 @@ use Tests\TestCase;
class SystemTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Define the required variables
@@ -17,7 +26,6 @@ class SystemTest extends TestCase
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -233,7 +233,7 @@ class XmlImporterTest extends TestCase
* Test the import new option and the import new group option with repeated title.
* @test
* @covers \ProcessMaker\Importer\XmlImporter::import()
* @covers \ProcessMaker\Importer\XmlImporter::updateProcessInformation()
* @covers \ProcessMaker\Importer\Importer::updateProcessInformation()
*/
public function it_should_matter_with_import_option_create_new_and_group_import_option_create_new_try_rename_title()
{

View File

@@ -12,13 +12,22 @@ use Tests\TestCase;
*/
class AppDelayTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up function.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -41,6 +50,7 @@ class AppDelayTest extends TestCase
*/
public function it_return_scope_not_action_disable()
{
AppDelay::truncate();
$table = AppDelay::factory()->paused_foreign_keys()->create();
$this->assertCount(1, $table->notDisabled()->get());
}

View File

@@ -16,13 +16,23 @@ use Tests\TestCase;
*/
class ApplicationTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up function.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
Application::truncate();
}
/**

View File

@@ -13,13 +13,22 @@ use Tests\TestCase;
*/
class CaseListTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* setUp method.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -263,6 +272,7 @@ class CaseListTest extends TestCase
*/
public function it_should_test_getSetting()
{
CaseList::truncate();
$data = [
'type' => 'inbox',
'name' => 'test1',
@@ -369,6 +379,7 @@ class CaseListTest extends TestCase
*/
public function it_should_test_export()
{
CaseList::truncate();
$data = [
'type' => 'inbox',
'name' => 'test export',
@@ -488,6 +499,7 @@ class CaseListTest extends TestCase
*/
public function it_should_test_getReportTables()
{
AdditionalTables::truncate();
$additionalTables = AdditionalTables::factory(10)->create();
$search = '';

View File

@@ -29,13 +29,23 @@ use Tests\TestCase;
*/
class DelegationTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up function.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
Delegation::truncate();
}
/**
@@ -1173,9 +1183,8 @@ class DelegationTest extends TestCase
public function it_should_search_and_filter_by_app_title()
{
$delegations = Delegation::factory(1)->foreign_keys()->create([
'APP_NUMBER' => function () {
return Application::factory()->create()->APP_NUMBER;
}
'DEL_INDEX' => 1,
'DEL_PREVIOUS' => 0
]);
$title = $delegations->last()->DEL_TITLE;
// We need to commit the records inserted because is needed for the "fulltext" index
@@ -3318,7 +3327,7 @@ class DelegationTest extends TestCase
/**
* This checks if return the open thread
*
* @covers \ProcessMaker\Model\Delegation::getOpenThreads()
* @covers \ProcessMaker\Model\Delegation::getOpenThread()
* @test
*/
public function it_should_return_thread_open()
@@ -3332,20 +3341,20 @@ class DelegationTest extends TestCase
//Create task
$task = Task::factory()->create();
//Create a delegation
Delegation::factory()->create([
$delegation = Delegation::factory()->create([
'DEL_THREAD_STATUS' => 'OPEN',
'DEL_FINISH_DATE' => null,
'APP_NUMBER' => $application->APP_NUMBER,
'TAS_UID' => $task->TAS_UID,
]);
$result = Delegation::getOpenThreads($application->APP_NUMBER, $task->TAS_UID);
$result = Delegation::getOpenThread($application->APP_NUMBER, $delegation->DEL_INDEX);
$this->assertEquals($application->APP_NUMBER, $result['APP_NUMBER']);
}
/**
* This checks if return empty when the thread is CLOSED
*
* @covers \ProcessMaker\Model\Delegation::getOpenThreads()
* @covers \ProcessMaker\Model\Delegation::getOpenThread()
* @test
*/
public function it_should_return_empty_when_thread_is_closed()
@@ -3357,19 +3366,19 @@ class DelegationTest extends TestCase
//Create task
$task = Task::factory()->create();
//Create a delegation
Delegation::factory()->create([
$delegation = Delegation::factory()->create([
'DEL_THREAD_STATUS' => 'CLOSED',
'APP_NUMBER' => $application->APP_NUMBER,
'TAS_UID' => $task->TAS_UID,
]);
$result = Delegation::getOpenThreads($application->APP_NUMBER, $task->TAS_UID);
$result = Delegation::getOpenThread($application->APP_NUMBER, $delegation->DEL_INDEX);
$this->assertEmpty($result);
}
/**
* This checks if return empty when the data is not null
*
* @covers \ProcessMaker\Model\Delegation::getOpenThreads()
* @covers \ProcessMaker\Model\Delegation::getOpenThread()
* @test
*/
public function it_should_return_empty_when_thread_finish_date_is_not_null()
@@ -3383,12 +3392,12 @@ class DelegationTest extends TestCase
//Create task
$task = Task::factory()->create();
//Create a delegation
Delegation::factory()->create([
$delegation = Delegation::factory()->create([
'DEL_THREAD_STATUS' => 'CLOSED',
'APP_NUMBER' => $application->APP_NUMBER,
'TAS_UID' => $task->TAS_UID,
]);
$result = Delegation::getOpenThreads($application->APP_NUMBER, $task->TAS_UID);
$result = Delegation::getOpenThread($application->APP_NUMBER, $delegation->DEL_INDEX);
$this->assertEmpty($result);
}
@@ -3612,7 +3621,10 @@ class DelegationTest extends TestCase
*/
public function it_get_cases_thread_title()
{
$delegation = Delegation::factory()->foreign_keys()->create();
$delegation = Delegation::factory()->foreign_keys()->create([
'DEL_INDEX' => 1,
'DEL_PREVIOUS' => 0
]);
$result = Delegation::casesThreadTitle($delegation->DEL_TITLE);
$this->assertTrue(isset($result[0]));
}

View File

@@ -15,13 +15,22 @@ use Tests\TestCase;
*/
class GroupUserTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -13,13 +13,22 @@ use Tests\TestCase;
*/
class GroupwfTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**

View File

@@ -17,6 +17,16 @@ use Tests\TestCase;
class TaskTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up method.
* @return void
@@ -24,7 +34,6 @@ class TaskTest extends TestCase
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
@@ -257,6 +266,7 @@ class TaskTest extends TestCase
*/
public function it_should_test_get_tasks_for_home_method()
{
Task::truncate();
$process1 = Process::factory()->create();
$process2 = Process::factory()->create();

View File

@@ -13,15 +13,6 @@ use Tests\TestCase;
*/
class UserConfigTest extends TestCase
{
/**
* Setup method,
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
* Teardown method.
*/
@@ -59,7 +50,7 @@ class UserConfigTest extends TestCase
*/
public function it_should_test_addSetting()
{
$id = 1;
$id = 2;
$name = "test";
$setting = ["test" => 1];
@@ -79,7 +70,7 @@ class UserConfigTest extends TestCase
*/
public function it_should_test_editSetting()
{
$id = 1;
$id = 3;
$name = "test";
$setting = ["test" => 1];
$result = UserConfig::addSetting($id, $name, $setting);
@@ -102,7 +93,7 @@ class UserConfigTest extends TestCase
*/
public function it_should_test_deleteSetting()
{
$id = 2;
$id = 4;
$name = "test2";
$setting = ["test2" => 1];
$result = UserConfig::addSetting($id, $name, $setting);

View File

@@ -0,0 +1,102 @@
<?php
namespace ProcessMaker\PHPReflectionClass;
use ProcessMaker\PHPReflectionClass\MethodStructure;
use Tests\TestCase;
class ClassStructureTest extends TestCase
{
/**
* Instance of ClassStructure.
* @var ClassStructure
*/
protected $object;
/**
* This setUp method.
*/
protected function setUp(): void
{
parent::setUp();
$this->object = new ClassStructure();
}
/**
* This test the method deleteInfo.
* @covers ProcessMaker\PHPReflectionClass\ClassStructure::deleteInfo
* @test
*/
public function testDeleteInfo()
{
//assert false
$result1 = $this->object->deleteInfo("test1");
$this->assertFalse($result1);
//assert true
$this->object->info["test2"] = [];
$result2 = $this->object->deleteInfo("test2");
$this->assertTrue($result2);
}
/**
* This test the method getInfo.
* @covers ProcessMaker\PHPReflectionClass\ClassStructure::getInfo
* @test
*/
public function testGetInfo()
{
//assert false
$result1 = $this->object->getInfo("test1");
$this->assertFalse($result1);
//assert true
$this->object->info["test2"] = [];
$result2 = $this->object->getInfo("test2");
$this->assertEquals([], $result2);
}
/**
* This test the method parseFromFile.
* @covers ProcessMaker\PHPReflectionClass\ClassStructure::parseFromFile
* @test
*/
public function testParseFromFile()
{
//assert false
$result1 = $this->object->parseFromFile("invalidPath");
$this->assertFalse($result1);
$filename = PATH_TRUNK . "tests/resources/ContentPHPSourceCode.txt";
$result2 = $this->object->parseFromFile($filename);
$this->assertTrue($result2);
}
/**
* This test the method setInfo.
* @covers ProcessMaker\PHPReflectionClass\ClassStructure::setInfo
* @test
*/
public function testSetInfo()
{
$this->object->setInfo("test1", "testing");
$this->assertEquals($this->object->info["test1"], "testing");
}
/**
* This test the method setMethod.
* @covers ProcessMaker\PHPReflectionClass\ClassStructure::setMethod
* @test
*/
public function testSetMethod()
{
//assert false
$result1 = $this->object->setMethod(null);
$this->assertFalse($result1);
//assert true
$method = new MethodStructure("testing");
$result2 = $this->object->setMethod($method);
$this->assertTrue($result2);
}
}

View File

@@ -0,0 +1,62 @@
<?php
namespace ProcessMaker\PHPReflectionClass;
use Tests\TestCase;
class MethodStructureTest extends TestCase
{
/**
* Instance of MethodStructure.
* @var MethodStructure
*/
protected $object;
/**
* This setUp method.
*/
protected function setUp(): void
{
parent::setUp();
$this->object = new MethodStructure("test");
}
/**
* This test the method getInfo.
* @covers ProcessMaker\PHPReflectionClass\MethodStructure::getInfo
* @test
*/
public function testGetInfo()
{
//assert false
$result1 = $this->object->getInfo("test");
$this->assertFalse($result1);
//assert true
$this->object->info["test2"] = [];
$result2 = $this->object->getInfo("test2");
$this->assertEquals([], $result2);
}
/**
* This test the method setInfo.
* @covers ProcessMaker\PHPReflectionClass\MethodStructure::setInfo
* @test
*/
public function testSetInfo()
{
$this->object->setInfo("test1", "test1");
$this->assertEquals("test1", $this->object->info["test1"]);
}
/**
* This test the method setParam.
* @covers ProcessMaker\PHPReflectionClass\MethodStructure::setParam
* @test
*/
public function testSetParam()
{
$this->object->setParam("test2", "test2");
$this->assertEquals("test2", $this->object->params["test2"]);
}
}

View File

@@ -16,13 +16,22 @@ class BpmnWorkflowTest extends TestCase
{
private $user;
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Set up testing.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
$this->user = User::factory()->create();
}
@@ -106,6 +115,7 @@ class BpmnWorkflowTest extends TestCase
*/
public function it_should_create_from_structure()
{
Process::truncate();
$faker = Factory::create();
$projectDataFilename = PATH_TRUNK . "tests/resources/projectData.json";

View File

@@ -28,6 +28,16 @@ class LightTest extends TestCase
private $authorization;
private $optionsForConvertDatetime;
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* This is using instead of DatabaseTransactions
* @todo DatabaseTransactions is having conflicts with propel
@@ -35,7 +45,6 @@ class LightTest extends TestCase
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
$this->workspace = env("DB_DATABASE", "test");
$this->clientId = config("oauthClients.pm.clientId");
$this->clientSecret = config("oauthClients.pm.clientSecret");

View File

@@ -29,13 +29,22 @@ use Tests\unit\workflow\engine\src\ProcessMaker\BusinessModel\Cases\UnassignedTe
*/
class MetricsTest extends TestCase
{
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Method set up.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
}
/**
* Initialize Rest API.
@@ -104,6 +113,7 @@ class MetricsTest extends TestCase
*/
public function it_tests_get_counters_list_method_inbox()
{
$this->markTestSkipped('Invoking this test causes unexpected behavior.');
$inbox = new InboxTest();
$user = $inbox->createMultipleInbox(10);
$this->initializeRestApi($user->USR_UID);
@@ -119,6 +129,7 @@ class MetricsTest extends TestCase
*/
public function it_tests_get_counters_list_method_draft()
{
$this->markTestSkipped('Invoking this test causes unexpected behavior.');
$draft = new DraftTest();
$user = $draft->createManyDraft(10);
$this->initializeRestApi($user->USR_UID);
@@ -134,6 +145,7 @@ class MetricsTest extends TestCase
*/
public function it_tests_get_counters_list_method_paused()
{
$this->markTestSkipped('Invoking this test causes unexpected behavior.');
$paused = new PausedTest();
$user = $paused->createMultiplePaused(5);
$this->initializeRestApi($user->USR_UID);
@@ -149,6 +161,7 @@ class MetricsTest extends TestCase
*/
public function it_tests_get_counters_list_method_unassigned()
{
$this->markTestSkipped('Invoking this test causes unexpected behavior.');
$unassignedTest = new UnassignedTest();
$cases = $unassignedTest->createMultipleUnassigned(3);
$unassigned = new Unassigned();

View File

@@ -20,13 +20,22 @@ class TaskTest extends TestCase
{
private $faker;
/**
* This method is called before the first test of this test class is run.
* @return void
*/
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
self::truncateNonInitialModels();
}
/**
* Method setUp.
*/
public function setUp(): void
{
parent::setUp();
$this->truncateNonInitialModels();
$this->faker = Factory::create();
}

View File

@@ -1,39 +0,0 @@
<?php
/*
This file is part of ActiveLink PHP XML Package (www.active-link.com).
Copyright (c) 2002-2004 by Zurab Davitiani
You can contact the author of this software via E-mail at
hattrick@mailcan.com
ActiveLink PHP XML Package is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
ActiveLink PHP XML Package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with ActiveLink PHP XML Package; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/**
* Include file for ActiveLink IORCA
*/
// define included package locations
$GLOBALS["IORCA"]["BASE"]["PATH"] = dirname(__FILE__) . "/";
function import($classPath) {
$importFile = str_replace(".", "/", $classPath) . ".php";
require_once($GLOBALS["IORCA"]["BASE"]["PATH"] . $importFile);
}
?>

View File

@@ -1,242 +0,0 @@
<?php
/*
This file is part of ActiveLink PHP DOC Package (www.active-link.com).
Copyright (c) 2002-2004 by Zurab Davitiani
You can contact the author of this software via E-mail at
hattrick@mailcan.com
ActiveLink PHP DOC Package is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
ActiveLink PHP DOC Package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with ActiveLink PHP DOC Package; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import("org.active-link.xml.XML");
import("org.active-link.doc.PHPClass");
import("org.active-link.doc.Method");
/**
* DocHTML parses PHP class file comments and generates documentation
* @class DocHTML
* @package org.active-link.doc
* @author Zurab Davitiani
* @version 0.3.4
* @requires XML, PHPClass, Method
* @see PHPClass
*/
class DocHTML {
var $CSSFile;
var $CSSFileTag;
var $CSSString;
var $CSSStringTag;
var $CSSStringDefault;
/**
* Constructor, runs when new object instance is created, sets default values
* @method DocHTML
*/
function DocHTML() {
$this->CSSStringDefault = "
body {background-color: white;}
a {font-family: monospace;}
ul {list-style-type: none;}
.classTitle {color: blue;}
.name {color: black;}
.version {color: black;}
.requires {color: red;}
.extends {color: black;}
.description {color: black;font-family: sans-serif;}
.author {color: blue;}
.methodsTitle {color: blue;}
.methodList {color: blue;}
.methodName {color: blue;font-weight: bold;}
.returns {color: black;}
.param {color: black;font-weight: bold;font-family: monospace;}
";
}
/**
* Returns class documentation as a string, formatted in HTML
* If argument is a filename, it parses the file for comments and generates documentation
* If argument is an object of type PHPClass, then documentation is generated from it
* @method getClassDoc
* @param mixed argument
* @returns string HTML-formatted documentation if successful, false otherwise
*/
function getClassDoc($argument) {
if(is_object($argument) && get_class($argument) == "phpclass")
return $this->getClassDocFromClass($argument);
elseif(is_string($argument))
return $this->getClassDocFromFile($argument);
else
return false;
}
/**
* Returns class documentation as a string, formatted in HTML
* @method getClassDocFromClass
* @param object objClass
* @returns string HTML-formatted documentation if successful, false otherwise
*/
function getClassDocFromClass($objClass) {
if(is_object($objClass) && get_class($objClass) == "phpclass") {
$classDocXML = new XML_("html");
// ---------------------- HEAD ---------------------- //
$headXML = new XMLBranch("head");
$headXML->setTagContent($objClass->getInfo("name"), "head/title");
$headXML->setTagContent("", "head/meta");
$headXML->setTagAttribute("http-equiv", "content-type", "head/meta");
$headXML->setTagAttribute("content", "text/html; charset=ISO-8859-1", "head/meta");
$headXML->setTagContent($this->CSSStringDefault, "head/style");
$headXML->setTagAttribute("type", "text/css", "head/style");
// ---------------------- BODY ---------------------- //
$bodyXML = new XMLBranch("body");
$classTitleXML = new XMLBranch("h1");
$classTitleXML->setTagAttribute("class", "classTitle");
$classTitleXML->setTagContent($objClass->getInfo("name") . " Class");
$bodyXML->addXMLBranch($classTitleXML);
foreach($objClass->info as $infoKey => $infoValue) {
$brXML = new XMLBranch("br");
$bodyXML->addXMLBranch($brXML);
if(is_array($infoValue)) {
$spanXML = new XMLBranch("span");
$spanXML->setTagAttribute("class", $infoKey);
$spanXML->setTagContent(ucfirst($infoKey) . ":");
$ulXML = new XMLBranch("ul");
$ulXML->setTagAttribute("class", $infoKey);
foreach($infoValue as $value) {
$liXML = new XMLBranch("li");
$liXML->setTagContent($value);
$ulXML->addXMLBranch($liXML);
}
$bodyXML->addXMLBranch($spanXML);
$bodyXML->addXMLBranch($ulXML);
}
else {
$spanXML = new XMLBranch("span");
$spanXML->setTagAttribute("class", $infoKey);
$spanXML->setTagContent(ucfirst($infoKey) . ": " . $infoValue);
$bodyXML->addXMLBranch($spanXML);
}
}
$hrXML = new XMLBranch("hr");
$bodyXML->addXMLBranch($hrXML);
$h2XML = new XMLBranch("h2");
$h2XML->setTagAttribute("class", "methodsTitle");
$h2XML->setTagContent("All Methods");
$bodyXML->addXMLBranch($h2XML);
$spanXML = new XMLBranch("span");
$spanXML->setTagAttribute("class", "methodList");
foreach($objClass->methods as $methodName => $method) {
$aMethodXML = new XMLBranch("a");
$aMethodXML->setTagAttribute("href", "#" . $methodName);
$aMethodXML->setTagContent($methodName);
$brXML = new XMLBranch("br");
$spanXML->addXMLBranch($aMethodXML);
$spanXML->addXMLBranch($brXML);
}
$bodyXML->addXMLBranch($spanXML);
foreach($objClass->methods as $methodName => $method) {
$hrXML = new XMLBranch("hr");
$bodyXML->addXMLBranch($hrXML);
$pMethodXML = new XMLBranch("p");
$aMethodXML = new XMLBranch("a");
$aMethodXML->setTagAttribute("name", $methodName);
$spanXMLName = new XMLBranch("span");
$spanXMLName->setTagAttribute("class", "methodName");
$spanXMLName->setTagContent($methodName);
$spanXMLArgs = new XMLBranch("span");
$tagContentArgs = " ( ";
if(is_array($method->params) && count($method->params) > 0) {
$paramCount = 0;
foreach($method->params as $key => $value) {
if($paramCount > 0)
$tagContentArgs .= ", ";
$tagContentArgs .= $key;
$paramCount ++;
}
}
$tagContentArgs .= " )";
$spanXMLArgs->setTagContent($tagContentArgs);
$aMethodXML->addXMLBranch($spanXMLName);
$aMethodXML->addXMLBranch($spanXMLArgs);
$pMethodXML->addXMLBranch($aMethodXML);
$bodyXML->addXMLBranch($pMethodXML);
unset($method->info["name"]);
foreach($method->info as $infoKey => $infoValue) {
if(is_array($infoValue)) {
$pXML = new XMLBranch("p");
$pXML->setTagAttribute("class", $infoKey);
$pXML->setTagContent(ucfirst($infoKey) . ":");
$ulXML = new XMLBranch("ul");
$ulXML->setTagAttribute("class", $infoKey);
foreach($infoValue as $value) {
$liXML = new XMLBranch("li");
$liXML->setTagContent($value);
$ulXML->addXMLBranch($liXML);
}
$bodyXML->addXMLBranch($pXML);
$bodyXML->addXMLBranch($ulXML);
}
else {
$pXML = new XMLBranch("p");
$pXML->setTagAttribute("class", $infoKey);
$pXML->setTagContent(ucfirst($infoKey) . ": " . $infoValue);
$bodyXML->addXMLBranch($pXML);
}
}
if(is_array($method->params) && count($method->params) > 0) {
$pParamXML = new XMLBranch("p");
//$pParamXML->setTagAttribute("class", "param");
$paramTitleXML = new XMLBranch("span");
$paramTitleXML->setTagContent("Arguments:");
$pParamXML->addXMLBranch($paramTitleXML);
$paramListXML = new XMLBranch("ul");
foreach($method->params as $key => $value) {
$paramItemXML = new XMLBranch("li");
$paramItemXML->setTagAttribute("class", "param");
$paramItemXML->setTagContent($key);
$paramListXML->addXMLBranch($paramItemXML);
}
$pParamXML->addXMLBranch($paramListXML);
$bodyXML->addXMLBranch($pParamXML);
}
}
// ---------------------- END ---------------------- //
$classDocXML->addXMLBranch($headXML);
$classDocXML->addXMLBranch($bodyXML);
return $classDocXML->getXMLString(0);
}
else
return false;
}
/**
* Returns class documentation as a string, formatted in HTML
* @method getClassDocFromFile
* @param string filename
* @returns string HTML-formatted documentation if successful, false otherwise
*/
function getClassDocFromFile($filename) {
if(is_string($filename) && file_exists($filename) && is_readable($filename)) {
$objClass = new PHPClass($filename);
return $this->getClassDocFromClass($objClass);
}
else
return false;
}
}

View File

@@ -1,83 +0,0 @@
<?php
/*
This file is part of ActiveLink PHP DOC Package (www.active-link.com).
Copyright (c) 2002-2004 by Zurab Davitiani
You can contact the author of this software via E-mail at
hattrick@mailcan.com
ActiveLink PHP DOC Package is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
ActiveLink PHP DOC Package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with ActiveLink PHP DOC Package; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/**
* Method class complements PHPClass and is used to define a class method
* @class Method
* @package org.active-link.doc
* @author Zurab Davitiani
* @version 0.3.4
* @see PHPClass
*/
class Method {
var $params;
var $info;
/**
* Constructor, runs when new object instance is created, sets name of the method
* @method Method
* @param string name
*/
function Method($name) {
$this->info = array();
$this->params = array();
$this->setInfo("name", $name);
}
/**
* Returns value of a property by name
* @method getInfo
* @param string name
* @returns string value of a property if found, false otherwise
*/
function getInfo($name) {
if(array_key_exists($name, $this->info))
return $this->info[$name];
else
return false;
}
/**
* Sets a property with supplied name to a supplied value
* @method setInfo
* @param string name, string value
* @returns none
*/
function setInfo($name, $value) {
$this->info[$name] = $value;
}
/**
* Sets a parameter with supplied name and value
* @method setParam
* @param string name, string value
* @returns none
*/
function setParam($name, $value) {
$this->params[$name] = $value;
}
}

View File

@@ -1,195 +0,0 @@
<?php
/*
This file is part of ActiveLink PHP DOC Package (www.active-link.com).
Copyright (c) 2002-2004 by Zurab Davitiani
You can contact the author of this software via E-mail at
hattrick@mailcan.com
ActiveLink PHP DOC Package is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
ActiveLink PHP DOC Package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with ActiveLink PHP DOC Package; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/**
* PHPClass class provides a structural definition for a class
* @class PHPClass
* @package org.active-link.doc
* @author Zurab Davitiani
* @version 0.3.4
* @requires Method
* @see PHPClass
*/
class PHPClass {
var $methods;
var $properties;
var $info;
/**
* Constructor, if filename is supplied parses the file into the object
* @method PHPClass
* @param optional string filename
* @returns none
*/
function PHPClass($filename = "") {
$this->methods = array();
$this->properties = array();
$this->info = array();
if($filename != "")
$this->parseFromFile($filename);
}
/**
* Deletes a property by name
* @method deleteInfo
* @param string name
* @returns true if successful, false otherwise
*/
function deleteInfo($name) {
$success = false;
if(array_key_exists($name, $this->info)) {
unset($this->info[$name]);
$success = true;
}
return $success;
}
/**
* Returns a property value by name
* @method getInfo
* @param string name
* @returns string value if successful, false otherwise
*/
function getInfo($name) {
if(array_key_exists($name, $this->info))
return $this->info[$name];
else
return false;
}
/**
* Parses a class from supplied filename
* @method parseFromFile
* @param string filename
* @returns true if successful, false otherwise
*/
function parseFromFile($filename) {
$success = false;
if(file_exists($filename) && is_readable($filename)) {
$arrContents = file($filename);
$parsing = false;
$parsingBlocks = array();
$tempBlock = array();
foreach($arrContents as $line) {
if(trim($line) == "/**") {
$parsing = true;
$blockstart = true;
}
elseif($parsing && trim($line) == "*/") {
$parsing = false;
$parsingBlocks[] = $tempBlock;
$tempBlock = array();
}
else {
if($parsing) {
if($blockstart) {
$tempBlock[] = $line;
$blockstart = false;
}
else {
$tempBlock[] = $line;
}
}
}
}
foreach($parsingBlocks as $blockLines) {
$block = array();
foreach($blockLines as $line) {
$str = strstr($line, "@");
$str = substr($str, 1);
if($str !== false) {
$separatorPos = (strpos($str, " ") && strpos($str, "\t")) ? min(strpos($str, " "), strpos($str, "\t")) : (strpos($str, " ") ? strpos($str, " ") : (strpos($str, "\t") ? strpos($str, "\t") : strlen($str)));
$name = trim(substr($str, 0, $separatorPos));
$value = trim(substr($str, $separatorPos));
}
else {
$name = "description";
$value = trim($line);
}
if($name == "param" || $name == "description")
$block[$name][] = $value;
else
$block[$name] = $value;
}
//print("<pre>");
//print_r($block);
//print("</pre>");
if(array_key_exists("method", $block)) {
$tempMethod = new Method($block["method"]);
unset($block["method"]);
if(isset($block["param"]) && is_array($block["param"])) {
foreach($block["param"] as $param) {
$tempMethod->setParam($param, "");
}
}
unset($block["param"]);
foreach($block as $name => $value) {
$tempMethod->setInfo($name, $value);
}
$this->setMethod($tempMethod);
}
elseif(array_key_exists("class", $block)) {
$this->setInfo("name", $block["class"]);
unset($block["class"]);
foreach($block as $name => $value) {
$this->setInfo($name, $value);
}
}
}
$success = true;
}
return $success;
}
/**
* Sets a property by name
* @method setInfo
* @param string name, string value
* @returns none
*/
function setInfo($name, $value) {
$this->info[$name] = $value;
}
/**
* Adds a method to the class definition
* @method setMethod
* @param object method
* @returns true if successful, false otherwise
*/
function setMethod($method) {
$success = false;
if(is_object($method) && get_class($method) == "Method") {
$this->methods[$method->getInfo("name")] = $method;
$success = true;
}
return $success;
}
}
?>

View File

@@ -608,7 +608,7 @@ class LdapAdvanced
if (empty($message)) {
$message = G::LoadTranslation('ID_LDAP_ERROR_CONNECTION');
}
Cache::put('ldapMessageError', $message, 2);
Cache::put('ldapMessageError', $message, 120); //laravel 8.x the time parameter is in seconds.
$this->log($linkIdentifier, $messageError);
}
@@ -1588,7 +1588,7 @@ class LdapAdvanced
if ($error = ldap_errno($ldapcnn)) {
$messageError = ldap_err2str($error);
Cache::put('ldapMessageError', $messageError, 2);
Cache::put('ldapMessageError', $messageError, 120); //laravel 8.x the time parameter is in seconds.
//
} else {
if ($searchResult) {

View File

@@ -1,4 +1,6 @@
<?php
use ProcessMaker\PHPReflectionClass\ClassStructure;
use ProcessMaker\Plugins\PluginRegistry;
class TriggerLibrary
@@ -105,14 +107,13 @@ class TriggerLibrary
* getMethodsFromLibraryFile
*
* @param string $file
* @return object(PHPClass) $parsedLibrary
* @return ClassStructure $parsedLibrary
*/
public function getMethodsFromLibraryFile($file)
{
// parse class comments from file
$parsedLibrary = new PHPClass();
$parsedLibrary = new ClassStructure();
$success = $parsedLibrary->parseFromFile($file);
return $parsedLibrary;
}

View File

@@ -1635,14 +1635,16 @@ function newFolder()
$formNewFolder["items"]= array();
$field=array();
$field["xtype"]= "label";
$field["xtype"]= "textfield";
$field["fieldLabel"]= G::LoadTranslation('ID_CREATE_FOLDER_PATH_FOLDER');
$field["name"]= "form[FOLDER_PATH]";
$field["id"]= "form[FOLDER_PATH]";
$field["name"]= "FOLDER_PATH";
$field["id"]= "FOLDER_PATH";
$field["width"]=175;
$field["allowBlank"]=false;
$field["value"]=$folderPath;
$field["text"]=$folderPath;
$field["readOnly"]= true;
$field["style"] = "{'border': 'none'}";
$formNewFolder["items"][]= $field;
$field=array();

View File

@@ -374,6 +374,7 @@ function getReassignList()
$caseReaderFields[] = ['name' => 'APP_NUMBER'];
$caseReaderFields[] = ['name' => 'APP_TITLE'];
$caseReaderFields[] = ['name' => 'APP_UID'];
$caseReaderFields[] = ['name' => 'DEL_INDEX'];
$caseReaderFields[] = ['name' => 'USR_UID'];
$caseReaderFields[] = ['name' => 'APP_TAS_TITLE'];
$caseReaderFields[] = ['name' => 'APP_PRO_TITLE'];

View File

@@ -56,7 +56,7 @@ if (isset($_GET['ux'])) {
}';
} else {
/*----------------------------------********---------------------------------*/
echo '} else { window.parent.location.href = \'casesListExtJs\'; }';
echo '} else { parent.parent.postMessage("redirect=todo","*"); }';
/*----------------------------------********---------------------------------*/
}
/*----------------------------------********---------------------------------*/

View File

@@ -26,7 +26,7 @@ if (empty($dataPost)) {
foreach ($dataPost as $data) {
// It was supposed will return only one thread related to the task
// todo: implement the reassign case for multi instance task
$openThreads = Delegation::getOpenThreads($data->APP_NUMBER, $data->TAS_UID);
$openThreads = Delegation::getOpenThread($data->APP_NUMBER, $data->DEL_INDEX);
if (!empty($openThreads)) {
// Get the user information assigned in the index
$currentUsrUid = Delegation::getCurrentUser($openThreads['APP_NUMBER'], $openThreads['DEL_INDEX']);

View File

@@ -20,7 +20,7 @@ try {
$googleClient = $gmailOAuth->getGoogleClient();
$result = $googleClient->authenticate($_GET['code']);
if (isset($result["error"])) {
Cache::put('errorMessageIfNotAuthenticate', G::json_decode($result["error"]), 2);
Cache::put('errorMessageIfNotAuthenticate', G::json_decode($result["error"]), 120); //laravel 8.x the time parameter is in seconds.
G::header($header);
return;
}
@@ -34,7 +34,7 @@ try {
* value in minutes for each session. We use 2 minutes, enough time to retrieve
* the error message if there is one.
*/
Cache::put('errorMessageIfNotAuthenticate', $e->getMessage(), 2);
Cache::put('errorMessageIfNotAuthenticate', $e->getMessage(), 120); //laravel 8.x the time parameter is in seconds.
}
G::header($header);

View File

@@ -34,7 +34,7 @@ try {
* value in minutes for each session. We use 2 minutes, enough time to retrieve
* the error message if there is one.
*/
Cache::put('errorMessageIfNotAuthenticate', $e->getMessage(), 2);
Cache::put('errorMessageIfNotAuthenticate', $e->getMessage(), 120); //laravel 8.x the time parameter is in seconds.
}
G::header($header);

View File

@@ -1,6 +1,7 @@
<?php
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Crypt;
use ProcessMaker\BusinessModel\User;
use ProcessMaker\Core\System;
use ProcessMaker\Plugins\PluginRegistry;
@@ -52,7 +53,7 @@ try {
$enterprise->setup();
}
/*----------------------------------********---------------------------------*/
Cache::put('ldapMessageError', '', 2);
Cache::put('ldapMessageError', '', 120); //laravel 8.x the time parameter is in seconds.
$uid = $RBAC->VerifyLogin($usr, $pwd);
$ldapMessageError = Cache::pull('ldapMessageError');
$RBAC->cleanSessionFiles(72); //cleaning session files older than 72 hours
@@ -111,7 +112,7 @@ try {
$_SESSION["USERNAME_PREVIOUS1"] = (isset($_SESSION["USERNAME_PREVIOUS2"]))? $_SESSION["USERNAME_PREVIOUS2"] : "";
$_SESSION["USERNAME_PREVIOUS2"] = $usr;
$_SESSION["FAILED_LOGINS"] = (isset($frm['FAILED_LOGINS']))? $frm['FAILED_LOGINS'] : 0;
$_SESSION["FAILED_LOGINS"] = is_numeric(Cache::get("FAILED_LOGINS{$usr}")) ? Cache::get("FAILED_LOGINS{$usr}") : 0;
if (!isset($uid) || $uid < 0) {
if ($_SESSION["USERNAME_PREVIOUS1"] != "" && $_SESSION["USERNAME_PREVIOUS2"] != "" && $_SESSION["USERNAME_PREVIOUS1"] != $_SESSION["USERNAME_PREVIOUS2"]) {
@@ -138,6 +139,7 @@ try {
$oStatement = $oConnection->prepareStatement("UPDATE USERS SET USR_STATUS = 'INACTIVE' WHERE USR_UID = '" . $sUserUID . "'");
$oStatement->executeQuery();
unset($_SESSION['FAILED_LOGINS']);
Cache::forget("FAILED_LOGINS{$usr}");
$errLabel = G::LoadTranslation('ID_ACCOUNT') . ' "' . $usr . '" ' . G::LoadTranslation('ID_ACCOUNT_DISABLED_CONTACT_ADMIN');
}
//Log failed authentications
@@ -150,7 +152,7 @@ try {
if (strpos($_SERVER['HTTP_REFERER'], 'home/login') !== false) {
$d = serialize(['u' => $usr, 'p' => $pwd, 'm' => G::LoadTranslation($errLabel)]);
$urlLogin = $urlLogin . '?d=' . base64_encode($d);
$urlLogin = $urlLogin . '?d=' . Crypt::encryptString($d);
} else {
if (empty($ldapMessageError)) {
G::SendTemporalMessage($errLabel, "warning");
@@ -266,6 +268,7 @@ try {
//$_SESSION['USR_ROLENAME'] = $rol['ROL_NAME'];
unset($_SESSION['FAILED_LOGINS']);
Cache::forget("FAILED_LOGINS{$usr}");
// Assign the uid of user to userloggedobj
$RBAC->loadUserRolePermission($RBAC->sSystem, $uid);
@@ -404,7 +407,7 @@ try {
"browserTimeZoneOffset" => $_POST['form']['BROWSER_TIME_ZONE_OFFSET']
];
$messPassword['__USR_PASSWORD_CHANGE__'] = G::generateUniqueID();
Cache::put($messPassword['__USR_PASSWORD_CHANGE__'], $values, 2);
Cache::put($messPassword['__USR_PASSWORD_CHANGE__'], $values, 120); //laravel 8.x the time parameter is in seconds.
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/changePasswordpm3', '', $messPassword, 'sysLoginVerify');
G::RenderPage('publish');
session_destroy();

View File

@@ -1,5 +1,6 @@
<?php
use Illuminate\Support\Facades\Cache;
use ProcessMaker\Core\System;
use ProcessMaker\Plugins\PluginRegistry;
@@ -246,7 +247,7 @@ if (isset($oConf->aConfig["login_defaultLanguage"]) && $oConf->aConfig["login_de
$G_PUBLISH = new Publisher();
$version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION')));
$version = isset($version[0]) ? intval($version[0]) : 0;
$aFields["FAILED_LOGINS"] = $sFailedLogins;
Cache::put("FAILED_LOGINS{$usernamePrevious2}", $sFailedLogins, 1800); //this value will be lost after 30 minutes
if ($version >= 3) {
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/loginpm3', '', $aFields, SYS_URI . 'login/authentication.php');
} else {

View File

@@ -1,5 +1,7 @@
<?php
use Illuminate\Support\Facades\Crypt;
/*----------------------------------********---------------------------------*/
//Browser Compatibility
$browserSupported = G::checkBrowserCompatibility();
@@ -10,7 +12,7 @@ if ($browserSupported==false) {
}
/*----------------------------------********---------------------------------*/
if (isset ($_POST['form']['USER_ENV'])) {
$data = base64_encode(serialize($_POST));
$data = Crypt::encryptString(serialize($_POST));
$url = sprintf('/sys%s/%s/%s/login/sysLoginVerify?d=%s', $_POST['form']['USER_ENV'], SYS_LANG, SYS_SKIN, $data);
G::header("location: $url");
die();

View File

@@ -1,7 +1,9 @@
<?php
use Illuminate\Support\Facades\Crypt;
if (array_key_exists("d", $_GET)) {
$str = base64_decode($_GET["d"]);
$str = Crypt::decryptString($_GET["d"]);
if (preg_match('/^a:[0-9]+:{/', $str) && !preg_match('/(^|;|{|})O:\+?[0-9]+:"/', $str)) {
$_POST = unserialize($str);
}

View File

@@ -62,16 +62,21 @@ if (is_file( $imagen )) {
//cpyMoreLogos($dir,$newDir);
$newDir .= PATH_SEP . $idDecode64;
$dir .= PATH_SEP . $idDecode64;
copy( $dir, $newDir );
showLogo( $newDir );
if (file_exists($dir)) {
copy($dir, $newDir);
showLogo( $newDir );
}
die();
}
function showLogo ($imagen)
{
$info = @getimagesize( $imagen );
$fp = fopen( $imagen, "rb" );
$fp = null;
if (file_exists($imagen)) {
$fp = fopen($imagen, "rb");
$info = @getimagesize($imagen);
}
if ($info && $fp) {
header( "Content-type: {$info['mime']}" );
fpassthru( $fp );

View File

@@ -329,6 +329,12 @@ button.x-btn-text:focus,
background-image: url(/skins/neoclassic/images/icons_silk/sprites.png);
height: 18px;
}
#FOLDER_PATH{
border: none;
background-image: none;
background-color: #f1f1f1;
cursor: default;
}
.ICON_FOLDERS {
/*.ss_folder_explore*/

View File

@@ -7,7 +7,7 @@
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
{$header}
</head>
{if ($user_logged neq '' or $tracker neq '') and $timezone_status neq 'failed'}
{if ((isset($user_logged) && $user_logged neq '') or (isset($tracker) && $tracker neq '')) and $timezone_status neq 'failed'}
<body>
<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0" id="pm_main_table">
<tr>

View File

@@ -141,7 +141,6 @@ class GranularExporter
"vendor_version_code" => "Michelangelo",
"export_timestamp" => date("U"),
"export_datetime" => date("Y-m-d\TH:i:sP"),
"export_server_addr" => isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"].":".$_SERVER["SERVER_PORT"] : "Unknown",
"export_server_os" => PHP_OS ,
"export_server_php_version" => PHP_VERSION_ID,
);

View File

@@ -44,7 +44,6 @@ abstract class Exporter
"vendor_version_code" => "Michelangelo",
"export_timestamp" => date("U"),
"export_datetime" => date("Y-m-d\TH:i:sP"),
"export_server_addr" => isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"].":".$_SERVER["SERVER_PORT"] : "Unknown",
"export_server_os" => PHP_OS ,
"export_server_php_version" => PHP_VERSION_ID,
);

View File

@@ -1847,25 +1847,25 @@ class Delegation extends Model
* Return the open thread related to the task
*
* @param int $appNumber, Case number
* @param string $tasUid, The task uid
* @param int $delIndex
*
* @return array
*/
public static function getOpenThreads(int $appNumber, string $tasUid)
public static function getOpenThread(int $appNumber, int $delIndex)
{
$query = Delegation::query()->select();
$query->where('DEL_THREAD_STATUS', 'OPEN');
$query->where('DEL_FINISH_DATE', null);
$query->where('APP_NUMBER', $appNumber);
$query->where('TAS_UID', $tasUid);
$query->where('DEL_INDEX', $delIndex);
$results = $query->get();
$arrayOpenThreads = [];
$results->each(function ($item, $key) use (&$arrayOpenThreads) {
$arrayOpenThreads = $item->toArray();
$arrayOpenThread = [];
$results->each(function ($item, $key) use (&$arrayOpenThread) {
$arrayOpenThread = $item->toArray();
});
return $arrayOpenThreads;
return $arrayOpenThread;
}
/**

View File

@@ -0,0 +1,172 @@
<?php
namespace ProcessMaker\PHPReflectionClass;
use ReflectionClass;
/**
* Structure for the metadata of the class.
*/
class ClassStructure
{
/**
* Array of methods.
* @var array
*/
public $methods;
/**
* Array of properties.
* @var array
*/
public $properties;
/**
* Array of informations.
* @var array
*/
public $info;
/**
* Constructor of the class, require the path of source code.
* @param string $filename
* @return void
*/
public function __construct(string $filename = "")
{
$this->methods = [];
$this->properties = [];
$this->info = [];
if ($filename != "") {
$this->parseFromFile($filename);
}
}
/**
* Remove a property by name.
* @param string $name
* @return boolean
*/
public function deleteInfo(string $name): bool
{
if (array_key_exists($name, $this->info)) {
unset($this->info[$name]);
return true;
}
return false;
}
/**
* Get a property value by name.
* @param string $name
* @return mixed
*/
public function getInfo(string $name)
{
if (array_key_exists($name, $this->info)) {
return $this->info[$name];
} else {
return false;
}
}
/**
* Sets a property by name.
* @param string $name
* @param string $value
* @return void
*/
public function setInfo(string $name, string $value): void
{
$this->info[$name] = $value;
}
/**
* Adds a method to the class definition.
* @param type $method
* @return bool
*/
public function setMethod($method): bool
{
if (is_object($method) && (new ReflectionClass($method))->getShortName() == "MethodStructure") {
$this->methods[$method->getInfo("name")] = $method;
return true;
}
return false;
}
/**
* Parses a source code, require a filename.
* @param string $filename
* @return bool
*/
public function parseFromFile(string $filename): bool
{
if (file_exists($filename) && is_readable($filename)) {
$arrContents = file($filename);
$parsing = false;
$parsingBlocks = [];
$tempBlock = [];
foreach ($arrContents as $line) {
if (trim($line) == "/**") {
$parsing = true;
$blockstart = true;
} elseif ($parsing && trim($line) == "*/") {
$parsing = false;
$parsingBlocks[] = $tempBlock;
$tempBlock = [];
} else {
if ($parsing) {
if ($blockstart) {
$tempBlock[] = $line;
$blockstart = false;
} else {
$tempBlock[] = $line;
}
}
}
}
foreach ($parsingBlocks as $blockLines) {
$block = [];
foreach ($blockLines as $line) {
$str = strstr($line, "@");
$str = substr($str, 1);
if ($str !== false) {
$separatorPos = (strpos($str, " ") && strpos($str, "\t")) ? min(strpos($str, " "), strpos($str, "\t")) : (strpos($str, " ") ? strpos($str, " ") : (strpos($str, "\t") ? strpos($str, "\t") : strlen($str)));
$name = trim(substr($str, 0, $separatorPos));
$value = trim(substr($str, $separatorPos));
} else {
$name = "description";
$value = trim($line);
}
if ($name == "param" || $name == "description")
$block[$name][] = $value;
else
$block[$name] = $value;
}
if (array_key_exists("method", $block)) {
$tempMethod = new MethodStructure($block["method"]);
unset($block["method"]);
if (isset($block["param"]) && is_array($block["param"])) {
foreach ($block["param"] as $param) {
$tempMethod->setParam($param, "");
}
}
unset($block["param"]);
foreach ($block as $name => $value) {
$tempMethod->setInfo($name, $value);
}
$this->setMethod($tempMethod);
} elseif (array_key_exists("class", $block)) {
$this->setInfo("name", $block["class"]);
unset($block["class"]);
foreach ($block as $name => $value) {
$this->setInfo($name, $value);
}
}
}
return true;
}
return false;
}
}

View File

@@ -0,0 +1,69 @@
<?php
namespace ProcessMaker\PHPReflectionClass;
/**
* Structure for the metadata of the class method.
*/
class MethodStructure
{
/**
* Params property.
* @var array
*/
public $params;
/**
* Information property.
* @var array
*/
public $info;
/**
* Constructor, runs when new object instance is created, sets name of the method.
* @param string $name
* @return void
*/
public function __construct(string $name)
{
$this->info = [];
$this->params = [];
$this->setInfo("name", $name);
}
/**
* Get value of a property by name.
* @param string $name
* @return mixed
*/
public function getInfo(string $name)
{
if (array_key_exists($name, $this->info)) {
return $this->info[$name];
} else {
return false;
}
}
/**
* Sets a property with supplied name to a supplied value.
* @param string $name
* @param string $value
* @return void
*/
public function setInfo(string $name, string $value): void
{
$this->info[$name] = $value;
}
/**
* Sets a parameter with supplied name and value.
* @param string $name
* @param string $value
* @return void
*/
public function setParam(string $name, string $value): void
{
$this->params[$name] = $value;
}
}

View File

@@ -398,6 +398,7 @@ function newNoteHandler() {
});
Ext.getCmp('addCancelBtn').setIcon('/images/comment_add.gif');
Ext.getCmp('addCancelBtn').btnEl.dom.ariaLabel = _('ID_CASES_NOTES_ADD');
caseNotesWindow.getTopToolbar().hide();
Ext.getCmp("chkSendMail").hide();
@@ -411,6 +412,7 @@ function newNoteHandler() {
Ext.getCmp('addCancelBtn').setText('');
Ext.getCmp('addCancelBtn').setTooltip({ title: _('ID_CASES_NOTES_CANCEL') });
Ext.getCmp('addCancelBtn').setIcon('/images/cancel.png');
Ext.getCmp('addCancelBtn').btnEl.dom.ariaLabel = _('ID_CASES_NOTES_CANCEL');
caseNotesWindow.getTopToolbar().show();
Ext.getCmp("chkSendMail").show();

Some files were not shown because too many files have changed in this diff Show More