conflicts: merge develop
This commit is contained in:
@@ -64,7 +64,8 @@
|
|||||||
"phpmyadmin/sql-parser": "^5.3",
|
"phpmyadmin/sql-parser": "^5.3",
|
||||||
"aws/aws-sdk-php": "~3.0",
|
"aws/aws-sdk-php": "~3.0",
|
||||||
"cretueusebiu/laravel-javascript": "^0.2.1",
|
"cretueusebiu/laravel-javascript": "^0.2.1",
|
||||||
"stevenmaguire/oauth2-microsoft": "^2.2"
|
"stevenmaguire/oauth2-microsoft": "^2.2",
|
||||||
|
"phpseclib/mcrypt_compat": "^2.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"guzzlehttp/guzzle": "^6.3",
|
"guzzlehttp/guzzle": "^6.3",
|
||||||
|
|||||||
250
composer.lock
generated
250
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "0cfdbd7bd38cb8bdeebe9625a7d66455",
|
"content-hash": "5bcf521c2f8df8459b05200fbdef3ed7",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "aws/aws-crt-php",
|
"name": "aws/aws-crt-php",
|
||||||
@@ -2357,6 +2357,73 @@
|
|||||||
],
|
],
|
||||||
"time": "2021-04-09T13:42:10+00:00"
|
"time": "2021-04-09T13:42:10+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "paragonie/constant_time_encoding",
|
||||||
|
"version": "v2.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/paragonie/constant_time_encoding.git",
|
||||||
|
"reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c",
|
||||||
|
"reference": "f34c2b11eb9d2c9318e13540a1dbc2a3afbd939c",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7|^8"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^6|^7|^8|^9",
|
||||||
|
"vimeo/psalm": "^1|^2|^3|^4"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"ParagonIE\\ConstantTime\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Paragon Initiative Enterprises",
|
||||||
|
"email": "security@paragonie.com",
|
||||||
|
"homepage": "https://paragonie.com",
|
||||||
|
"role": "Maintainer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Steve 'Sc00bz' Thomas",
|
||||||
|
"email": "steve@tobtu.com",
|
||||||
|
"homepage": "https://www.tobtu.com",
|
||||||
|
"role": "Original Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
|
||||||
|
"keywords": [
|
||||||
|
"base16",
|
||||||
|
"base32",
|
||||||
|
"base32_decode",
|
||||||
|
"base32_encode",
|
||||||
|
"base64",
|
||||||
|
"base64_decode",
|
||||||
|
"base64_encode",
|
||||||
|
"bin2hex",
|
||||||
|
"encoding",
|
||||||
|
"hex",
|
||||||
|
"hex2bin",
|
||||||
|
"rfc4648"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"email": "info@paragonie.com",
|
||||||
|
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
|
||||||
|
"source": "https://github.com/paragonie/constant_time_encoding"
|
||||||
|
},
|
||||||
|
"time": "2020-12-06T15:14:20+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "paragonie/random_compat",
|
"name": "paragonie/random_compat",
|
||||||
"version": "v9.99.100",
|
"version": "v9.99.100",
|
||||||
@@ -3045,6 +3112,185 @@
|
|||||||
],
|
],
|
||||||
"time": "2021-02-05T14:33:29+00:00"
|
"time": "2021-02-05T14:33:29+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "phpseclib/mcrypt_compat",
|
||||||
|
"version": "2.0.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/phpseclib/mcrypt_compat.git",
|
||||||
|
"reference": "299da4c7e7e41c8d4964e894a90ca4c96175846b"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/phpseclib/mcrypt_compat/zipball/299da4c7e7e41c8d4964e894a90ca4c96175846b",
|
||||||
|
"reference": "299da4c7e7e41c8d4964e894a90ca4c96175846b",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.6.1",
|
||||||
|
"phpseclib/phpseclib": ">=3.0.12 <4.0.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-mcrypt": "5.6.40"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^5.7|^6.0|^9.4"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-openssl": "Will enable faster cryptographic operations"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"lib/mcrypt.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Jim Wigginton",
|
||||||
|
"email": "terrafrost@php.net",
|
||||||
|
"homepage": "http://phpseclib.sourceforge.net"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PHP 5.x/7.x polyfill for mcrypt extension",
|
||||||
|
"keywords": [
|
||||||
|
"cryptograpy",
|
||||||
|
"encryption",
|
||||||
|
"mcrypt",
|
||||||
|
"polyfill"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"email": "terrafrost@php.net",
|
||||||
|
"issues": "https://github.com/phpseclib/mcrypt_compat/issues",
|
||||||
|
"source": "https://github.com/phpseclib/mcrypt_compat"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.patreon.com/phpseclib",
|
||||||
|
"type": "patreon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/phpseclib/mcrypt_compat",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2021-11-29T02:38:47+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "phpseclib/phpseclib",
|
||||||
|
"version": "3.0.12",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/phpseclib/phpseclib.git",
|
||||||
|
"reference": "89bfb45bd8b1abc3b37e910d57f5dbd3174f40fb"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/89bfb45bd8b1abc3b37e910d57f5dbd3174f40fb",
|
||||||
|
"reference": "89bfb45bd8b1abc3b37e910d57f5dbd3174f40fb",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"paragonie/constant_time_encoding": "^1|^2",
|
||||||
|
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
|
||||||
|
"php": ">=5.6.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phing/phing": "~2.7",
|
||||||
|
"phpunit/phpunit": "^5.7|^6.0|^9.4",
|
||||||
|
"squizlabs/php_codesniffer": "~2.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
|
||||||
|
"ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
|
||||||
|
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
|
||||||
|
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"phpseclib/bootstrap.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"phpseclib3\\": "phpseclib/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Jim Wigginton",
|
||||||
|
"email": "terrafrost@php.net",
|
||||||
|
"role": "Lead Developer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Patrick Monnerat",
|
||||||
|
"email": "pm@datasphere.ch",
|
||||||
|
"role": "Developer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Andreas Fischer",
|
||||||
|
"email": "bantu@phpbb.com",
|
||||||
|
"role": "Developer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Hans-Jürgen Petrich",
|
||||||
|
"email": "petrich@tronic-media.com",
|
||||||
|
"role": "Developer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Graham Campbell",
|
||||||
|
"email": "graham@alt-three.com",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
|
||||||
|
"homepage": "http://phpseclib.sourceforge.net",
|
||||||
|
"keywords": [
|
||||||
|
"BigInteger",
|
||||||
|
"aes",
|
||||||
|
"asn.1",
|
||||||
|
"asn1",
|
||||||
|
"blowfish",
|
||||||
|
"crypto",
|
||||||
|
"cryptography",
|
||||||
|
"encryption",
|
||||||
|
"rsa",
|
||||||
|
"security",
|
||||||
|
"sftp",
|
||||||
|
"signature",
|
||||||
|
"signing",
|
||||||
|
"ssh",
|
||||||
|
"twofish",
|
||||||
|
"x.509",
|
||||||
|
"x509"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/phpseclib/phpseclib/issues",
|
||||||
|
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.12"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/terrafrost",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://www.patreon.com/phpseclib",
|
||||||
|
"type": "patreon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2021-11-28T23:46:03+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "predis/predis",
|
"name": "predis/predis",
|
||||||
"version": "v1.1.1",
|
"version": "v1.1.1",
|
||||||
@@ -8143,5 +8389,5 @@
|
|||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
"platform-dev": [],
|
"platform-dev": [],
|
||||||
"plugin-api-version": "1.1.0"
|
"plugin-api-version": "2.0.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,6 +96,18 @@ $factory->state(\ProcessMaker\Model\Application::class, 'draft', function (Faker
|
|||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$factory->state(\ProcessMaker\Model\Application::class, 'paused', function (Faker $faker) {
|
||||||
|
$user = factory(\ProcessMaker\Model\User::class)->create();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'APP_NUMBER' => $faker->unique()->numberBetween(1000),
|
||||||
|
'APP_STATUS_ID' => 1,
|
||||||
|
'APP_STATUS' => 'PAUSED',
|
||||||
|
'APP_INIT_USER' => $user->USR_UID,
|
||||||
|
'APP_INIT_USER_ID' => $user->USR_ID,
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
$factory->state(\ProcessMaker\Model\Application::class, 'completed', function (Faker $faker) {
|
$factory->state(\ProcessMaker\Model\Application::class, 'completed', function (Faker $faker) {
|
||||||
return [
|
return [
|
||||||
'APP_NUMBER' => $faker->unique()->numberBetween(1000),
|
'APP_NUMBER' => $faker->unique()->numberBetween(1000),
|
||||||
|
|||||||
@@ -2789,4 +2789,15 @@ class Bootstrap
|
|||||||
];
|
];
|
||||||
self::registerMonolog($channel, $level, $message, $context);
|
self::registerMonolog($channel, $level, $message, $context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the options for a cookie, according to the system configuration and values optionally sent to this method
|
||||||
|
*
|
||||||
|
* @param array $options
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function buildCookieOptions(array $options = [])
|
||||||
|
{
|
||||||
|
return System::buildCookieOptions($options);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,12 +29,7 @@
|
|||||||
<TaskCell :data="props.row.TASK" />
|
<TaskCell :data="props.row.TASK" />
|
||||||
</div>
|
</div>
|
||||||
<div slot="send_by" slot-scope="props">
|
<div slot="send_by" slot-scope="props">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.row.USER_DATA" />
|
<CurrentUserCell :data="props.row.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.row.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
<div slot="current_user" slot-scope="props">
|
<div slot="current_user" slot-scope="props">
|
||||||
{{ props.row.USERNAME_DISPLAY_FORMAT }}
|
{{ props.row.USERNAME_DISPLAY_FORMAT }}
|
||||||
@@ -110,8 +105,7 @@ export default {
|
|||||||
DRAFT: this.$i18n.t("ID_IN_DRAFT"),
|
DRAFT: this.$i18n.t("ID_IN_DRAFT"),
|
||||||
PAUSED: this.$i18n.t("ID_PAUSED"),
|
PAUSED: this.$i18n.t("ID_PAUSED"),
|
||||||
UNASSIGNED: this.$i18n.t("ID_UNASSIGNED"),
|
UNASSIGNED: this.$i18n.t("ID_UNASSIGNED"),
|
||||||
},
|
}
|
||||||
showUserTooltip: true
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -256,8 +250,8 @@ export default {
|
|||||||
formatUser(data) {
|
formatUser(data) {
|
||||||
var dataFormat = [],
|
var dataFormat = [],
|
||||||
userDataFormat;
|
userDataFormat;
|
||||||
if (data.user_tooltip && !_.isEmpty(data.user_tooltip)) {
|
switch (data.key_name) {
|
||||||
this.showUserTooltip = true;
|
case 'user_tooltip':
|
||||||
userDataFormat = utils.userNameDisplayFormat({
|
userDataFormat = utils.userNameDisplayFormat({
|
||||||
userName: data.user_tooltip.usr_firstname,
|
userName: data.user_tooltip.usr_firstname,
|
||||||
firstName: data.user_tooltip.usr_lastname,
|
firstName: data.user_tooltip.usr_lastname,
|
||||||
@@ -271,14 +265,16 @@ export default {
|
|||||||
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
||||||
window.config.SYS_URI +
|
window.config.SYS_URI +
|
||||||
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
||||||
UNASSIGNED: userDataFormat !== "" ? true : false
|
UNASSIGNED: userDataFormat !== "" ? true : false,
|
||||||
|
SHOW_TOOLTIP: true
|
||||||
});
|
});
|
||||||
} else if (data.dummy_task && !_.isEmpty(data.dummy_task)) {
|
break;
|
||||||
this.showUserTooltip = false;
|
case 'dummy_task':
|
||||||
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
||||||
} else {
|
break;
|
||||||
this.showUserTooltip = false;
|
default:
|
||||||
dataFormat = this.$i18n.t("ID_ANONYMOUS_USER");
|
dataFormat = "";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return dataFormat;
|
return dataFormat;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="data.length" class="grouped-cell">
|
<div v-if="showTooltip" class="grouped-cell">
|
||||||
<div v-for="(item, index) in data" v-bind:key="item.TITLE" class="d-flex">
|
<div v-for="(item, index) in data" v-bind:key="item.TITLE" class="d-flex">
|
||||||
<div class="avatar" :id="id + index">
|
<div class="avatar" :id="id + index">
|
||||||
<b-avatar
|
<b-avatar
|
||||||
@@ -36,6 +36,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else class="grouped-cell">
|
||||||
|
<span class="col ellipsis">
|
||||||
|
{{ data }}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -47,6 +52,14 @@ export default {
|
|||||||
id: "avatar-" + _.random(1000000)
|
id: "avatar-" + _.random(1000000)
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
/**
|
||||||
|
* Verify if data is an array.
|
||||||
|
*/
|
||||||
|
showTooltip() {
|
||||||
|
return typeof this.data !== 'string'
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
/**
|
/**
|
||||||
* Generates the mail link
|
* Generates the mail link
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<i class="fas fa-square"></i>
|
<i class="fas fa-square"></i>
|
||||||
</div>
|
</div>
|
||||||
<b-popover
|
<b-popover
|
||||||
v-if="item.DELAYED_TITLE && item.DELAYED_MSG"
|
v-if="item.DELAYED_TITLE || item.DELAYED_MSG"
|
||||||
:target="statusId + index"
|
:target="statusId + index"
|
||||||
triggers="hover"
|
triggers="hover"
|
||||||
placement="top"
|
placement="top"
|
||||||
|
|||||||
@@ -524,7 +524,8 @@ export default {
|
|||||||
DEL_INDEX: v.DEL_INDEX,
|
DEL_INDEX: v.DEL_INDEX,
|
||||||
PRO_UID: v.PRO_UID,
|
PRO_UID: v.PRO_UID,
|
||||||
TAS_UID: v.TAS_UID,
|
TAS_UID: v.TAS_UID,
|
||||||
UNASSIGNED: v.UNASSIGNED
|
UNASSIGNED: v.UNASSIGNED,
|
||||||
|
USR_ID: v.USR_ID
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return data;
|
return data;
|
||||||
@@ -578,7 +579,7 @@ export default {
|
|||||||
* @param {object} data
|
* @param {object} data
|
||||||
*/
|
*/
|
||||||
onClick(data) {
|
onClick(data) {
|
||||||
if (data.row.UNASSIGNED) {
|
if (data.row.UNASSIGNED && data.row.USR_ID === 0) {
|
||||||
this.claimCase(data.row);
|
this.claimCase(data.row);
|
||||||
} else {
|
} else {
|
||||||
this.$emit("onUpdateDataCase", {
|
this.$emit("onUpdateDataCase", {
|
||||||
|
|||||||
@@ -65,12 +65,7 @@
|
|||||||
<TaskCell :data="props.row.TASK" />
|
<TaskCell :data="props.row.TASK" />
|
||||||
</div>
|
</div>
|
||||||
<div slot="send_by" slot-scope="props">
|
<div slot="send_by" slot-scope="props">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.row.USER_DATA" />
|
<CurrentUserCell :data="props.row.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.row.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
<div slot="current_user" slot-scope="props">
|
<div slot="current_user" slot-scope="props">
|
||||||
{{ props.row.USERNAME_DISPLAY_FORMAT }}
|
{{ props.row.USERNAME_DISPLAY_FORMAT }}
|
||||||
@@ -154,12 +149,7 @@
|
|||||||
{{ props["item"]["PRIORITY"] }}
|
{{ props["item"]["PRIORITY"] }}
|
||||||
</span>
|
</span>
|
||||||
<span v-else-if="column === 'send_by'" class="v-card-text-light">
|
<span v-else-if="column === 'send_by'" class="v-card-text-light">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.item.USER_DATA" />
|
<CurrentUserCell :data="props.item.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.item.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</span>
|
</span>
|
||||||
<span v-else class="v-card-text-light">
|
<span v-else class="v-card-text-light">
|
||||||
{{ props["item"][column] }}
|
{{ props["item"][column] }}
|
||||||
@@ -216,12 +206,7 @@
|
|||||||
{{ props["item"]["PRIORITY"] }}
|
{{ props["item"]["PRIORITY"] }}
|
||||||
</span>
|
</span>
|
||||||
<span v-else-if="column === 'send_by'" class="v-card-text-light">
|
<span v-else-if="column === 'send_by'" class="v-card-text-light">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.item.USER_DATA" />
|
<CurrentUserCell :data="props.item.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.item.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</span>
|
</span>
|
||||||
<span v-else class="v-card-text-light">
|
<span v-else class="v-card-text-light">
|
||||||
{{ props["item"][column] }}
|
{{ props["item"][column] }}
|
||||||
@@ -933,32 +918,31 @@ export default {
|
|||||||
formatUser(data) {
|
formatUser(data) {
|
||||||
var dataFormat = [],
|
var dataFormat = [],
|
||||||
userDataFormat;
|
userDataFormat;
|
||||||
if (data.user_tooltip && !_.isEmpty(data.user_tooltip)) {
|
switch (data.key_name) {
|
||||||
this.showUserTooltip = true;
|
case 'user_tooltip':
|
||||||
userDataFormat = utils.userNameDisplayFormat({
|
userDataFormat = utils.userNameDisplayFormat({
|
||||||
userName: data.user_tooltip.usr_firstname,
|
userName: data.user_tooltip.usr_firstname,
|
||||||
firstName: data.user_tooltip.usr_lastname,
|
firstName: data.user_tooltip.usr_lastname,
|
||||||
lastName: data.user_tooltip.usr_username,
|
lastName: data.user_tooltip.usr_username,
|
||||||
format: window.config.FORMATS.format || null,
|
format: window.config.FORMATS.format || null
|
||||||
});
|
});
|
||||||
dataFormat.push({
|
dataFormat.push({
|
||||||
USERNAME_DISPLAY_FORMAT: userDataFormat,
|
USERNAME_DISPLAY_FORMAT: userDataFormat,
|
||||||
EMAIL: data.user_tooltip.usr_email,
|
EMAIL: data.user_tooltip.usr_email,
|
||||||
POSITION: data.user_tooltip.usr_position,
|
POSITION: data.user_tooltip.usr_position,
|
||||||
AVATAR:
|
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
||||||
userDataFormat !== ""
|
|
||||||
? window.config.SYS_SERVER_AJAX +
|
|
||||||
window.config.SYS_URI +
|
window.config.SYS_URI +
|
||||||
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}`
|
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
||||||
: "",
|
|
||||||
UNASSIGNED: userDataFormat !== "" ? true : false,
|
UNASSIGNED: userDataFormat !== "" ? true : false,
|
||||||
|
SHOW_TOOLTIP: true
|
||||||
});
|
});
|
||||||
} else if (data.dummy_task && !_.isEmpty(data.dummy_task)) {
|
break;
|
||||||
this.showUserTooltip = false;
|
case 'dummy_task':
|
||||||
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
||||||
} else {
|
break;
|
||||||
this.showUserTooltip = false;
|
default:
|
||||||
dataFormat = this.$i18n.t("ID_ANONYMOUS_USER");
|
dataFormat = "";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return dataFormat;
|
return dataFormat;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -229,7 +229,20 @@ export default {
|
|||||||
* Return the columns for table - concat with field "detail" "actions"
|
* Return the columns for table - concat with field "detail" "actions"
|
||||||
*/
|
*/
|
||||||
getTableColumns(columns) {
|
getTableColumns(columns) {
|
||||||
return _.concat(["detail"], columns, ["actions"]);
|
return _.concat(["detail"], this.removeDefaultColumns(columns), ["actions"]);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* Remove the default columns, 'detail' and 'actions'
|
||||||
|
* @param {Array} columns
|
||||||
|
*/
|
||||||
|
removeDefaultColumns(columns) {
|
||||||
|
if (columns[0] === 'detail') {
|
||||||
|
columns.shift()
|
||||||
|
}
|
||||||
|
if (columns[columns.length - 1] === 'actions') {
|
||||||
|
columns.pop();
|
||||||
|
}
|
||||||
|
return columns;
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Return options for Table
|
* Return options for Table
|
||||||
|
|||||||
@@ -56,12 +56,7 @@
|
|||||||
<TaskCell :data="props.row.TASK" />
|
<TaskCell :data="props.row.TASK" />
|
||||||
</div>
|
</div>
|
||||||
<div slot="send_by" slot-scope="props">
|
<div slot="send_by" slot-scope="props">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.row.USER_DATA" />
|
<CurrentUserCell :data="props.row.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.row.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
<div slot="current_user" slot-scope="props">
|
<div slot="current_user" slot-scope="props">
|
||||||
{{ props.row.USERNAME_DISPLAY_FORMAT }}
|
{{ props.row.USERNAME_DISPLAY_FORMAT }}
|
||||||
@@ -164,12 +159,7 @@
|
|||||||
>{{ props["headings"][props.column] }} :</span
|
>{{ props["headings"][props.column] }} :</span
|
||||||
>
|
>
|
||||||
<span class="v-card-text-light">
|
<span class="v-card-text-light">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.item.USER_DATA" />
|
<CurrentUserCell :data="props.item.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.item.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</VueCardView>
|
</VueCardView>
|
||||||
@@ -258,12 +248,7 @@
|
|||||||
>{{ props["headings"][props.column] }} :</span
|
>{{ props["headings"][props.column] }} :</span
|
||||||
>
|
>
|
||||||
<span class="v-card-text-light">
|
<span class="v-card-text-light">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.item.USER_DATA" />
|
<CurrentUserCell :data="props.item.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.item.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</VueListView>
|
</VueListView>
|
||||||
@@ -418,7 +403,6 @@ export default {
|
|||||||
},
|
},
|
||||||
showEllipsis: false,
|
showEllipsis: false,
|
||||||
dataSubtitle: null,
|
dataSubtitle: null,
|
||||||
showUserTooltip: true
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@@ -631,8 +615,8 @@ export default {
|
|||||||
formatUser(data) {
|
formatUser(data) {
|
||||||
var dataFormat = [],
|
var dataFormat = [],
|
||||||
userDataFormat;
|
userDataFormat;
|
||||||
if (data.user_tooltip && !_.isEmpty(data.user_tooltip)) {
|
switch (data.key_name) {
|
||||||
this.showUserTooltip = true;
|
case 'user_tooltip':
|
||||||
userDataFormat = utils.userNameDisplayFormat({
|
userDataFormat = utils.userNameDisplayFormat({
|
||||||
userName: data.user_tooltip.usr_firstname,
|
userName: data.user_tooltip.usr_firstname,
|
||||||
firstName: data.user_tooltip.usr_lastname,
|
firstName: data.user_tooltip.usr_lastname,
|
||||||
@@ -646,14 +630,16 @@ export default {
|
|||||||
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
||||||
window.config.SYS_URI +
|
window.config.SYS_URI +
|
||||||
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
||||||
UNASSIGNED: userDataFormat !== "" ? true : false
|
UNASSIGNED: userDataFormat !== "" ? true : false,
|
||||||
|
SHOW_TOOLTIP: true
|
||||||
});
|
});
|
||||||
} else if (data.dummy_task && !_.isEmpty(data.dummy_task)) {
|
break;
|
||||||
this.showUserTooltip = false;
|
case 'dummy_task':
|
||||||
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
||||||
} else {
|
break;
|
||||||
this.showUserTooltip = false;
|
default:
|
||||||
dataFormat = this.$i18n.t("ID_ANONYMOUS_USER");
|
dataFormat = "";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return dataFormat;
|
return dataFormat;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -55,12 +55,7 @@
|
|||||||
<TaskCell :data="props.row.TASK" />
|
<TaskCell :data="props.row.TASK" />
|
||||||
</div>
|
</div>
|
||||||
<div slot="send_by" slot-scope="props">
|
<div slot="send_by" slot-scope="props">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.row.USER_DATA" />
|
<CurrentUserCell :data="props.row.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.row.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
<div slot="current_user" slot-scope="props">
|
<div slot="current_user" slot-scope="props">
|
||||||
{{ props.row.USERNAME_DISPLAY_FORMAT }}
|
{{ props.row.USERNAME_DISPLAY_FORMAT }}
|
||||||
@@ -163,12 +158,7 @@
|
|||||||
>{{ props["headings"][props.column] }} :</span
|
>{{ props["headings"][props.column] }} :</span
|
||||||
>
|
>
|
||||||
<span class="v-card-text-light">
|
<span class="v-card-text-light">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.item.USER_DATA" />
|
<CurrentUserCell :data="props.item.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.item.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</VueCardView>
|
</VueCardView>
|
||||||
@@ -257,12 +247,7 @@
|
|||||||
>{{ props["headings"][props.column] }} :</span
|
>{{ props["headings"][props.column] }} :</span
|
||||||
>
|
>
|
||||||
<span class="v-card-text-light">
|
<span class="v-card-text-light">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.item.USER_DATA" />
|
<CurrentUserCell :data="props.item.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.item.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</VueListView>
|
</VueListView>
|
||||||
@@ -417,8 +402,7 @@ export default {
|
|||||||
buttons: {}
|
buttons: {}
|
||||||
},
|
},
|
||||||
showEllipsis: false,
|
showEllipsis: false,
|
||||||
dataSubtitle: null,
|
dataSubtitle: null
|
||||||
showUserTooltip: true
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@@ -626,8 +610,8 @@ export default {
|
|||||||
formatUser(data) {
|
formatUser(data) {
|
||||||
var dataFormat = [],
|
var dataFormat = [],
|
||||||
userDataFormat;
|
userDataFormat;
|
||||||
if (data.user_tooltip && !_.isEmpty(data.user_tooltip)) {
|
switch (data.key_name) {
|
||||||
this.showUserTooltip = true;
|
case 'user_tooltip':
|
||||||
userDataFormat = utils.userNameDisplayFormat({
|
userDataFormat = utils.userNameDisplayFormat({
|
||||||
userName: data.user_tooltip.usr_firstname,
|
userName: data.user_tooltip.usr_firstname,
|
||||||
firstName: data.user_tooltip.usr_lastname,
|
firstName: data.user_tooltip.usr_lastname,
|
||||||
@@ -641,14 +625,16 @@ export default {
|
|||||||
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
||||||
window.config.SYS_URI +
|
window.config.SYS_URI +
|
||||||
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
||||||
UNASSIGNED: userDataFormat !== "" ? true : false
|
UNASSIGNED: userDataFormat !== "" ? true : false,
|
||||||
|
SHOW_TOOLTIP: true
|
||||||
});
|
});
|
||||||
} else if (data.dummy_task && !_.isEmpty(data.dummy_task)) {
|
break;
|
||||||
this.showUserTooltip = false;
|
case 'dummy_task':
|
||||||
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
||||||
} else {
|
break;
|
||||||
this.showUserTooltip = false;
|
default:
|
||||||
dataFormat = this.$i18n.t("ID_ANONYMOUS_USER");
|
dataFormat = "";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return dataFormat;
|
return dataFormat;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -53,12 +53,7 @@
|
|||||||
<TaskCell :data="props.row.TASK" />
|
<TaskCell :data="props.row.TASK" />
|
||||||
</div>
|
</div>
|
||||||
<div slot="send_by" slot-scope="props">
|
<div slot="send_by" slot-scope="props">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.row.USER_DATA" />
|
<CurrentUserCell :data="props.row.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.row.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
<div slot="due_date" slot-scope="props">
|
<div slot="due_date" slot-scope="props">
|
||||||
{{ props.row.DUE_DATE }}
|
{{ props.row.DUE_DATE }}
|
||||||
@@ -158,12 +153,7 @@
|
|||||||
>{{ props["headings"][props.column] }} :</span
|
>{{ props["headings"][props.column] }} :</span
|
||||||
>
|
>
|
||||||
<span class="v-card-text-light">
|
<span class="v-card-text-light">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.item.USER_DATA" />
|
<CurrentUserCell :data="props.item.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.item.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</VueCardView>
|
</VueCardView>
|
||||||
@@ -252,12 +242,7 @@
|
|||||||
>{{ props["headings"][props.column] }} :</span
|
>{{ props["headings"][props.column] }} :</span
|
||||||
>
|
>
|
||||||
<span class="v-card-text-light">
|
<span class="v-card-text-light">
|
||||||
<template v-if="showUserTooltip" >
|
|
||||||
<CurrentUserCell :data="props.item.USER_DATA" />
|
<CurrentUserCell :data="props.item.USER_DATA" />
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
{{ props.item.USER_DATA }}
|
|
||||||
</template>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</VueListView>
|
</VueListView>
|
||||||
@@ -409,8 +394,7 @@ export default {
|
|||||||
buttons: {}
|
buttons: {}
|
||||||
},
|
},
|
||||||
showEllipsis: false,
|
showEllipsis: false,
|
||||||
dataSubtitle: null,
|
dataSubtitle: null
|
||||||
showUserTooltip: true
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -583,8 +567,8 @@ export default {
|
|||||||
formatUser(data) {
|
formatUser(data) {
|
||||||
var dataFormat = [],
|
var dataFormat = [],
|
||||||
userDataFormat;
|
userDataFormat;
|
||||||
if (data.user_tooltip && !_.isEmpty(data.user_tooltip)) {
|
switch (data.key_name) {
|
||||||
this.showUserTooltip = true;
|
case 'user_tooltip':
|
||||||
userDataFormat = utils.userNameDisplayFormat({
|
userDataFormat = utils.userNameDisplayFormat({
|
||||||
userName: data.user_tooltip.usr_firstname,
|
userName: data.user_tooltip.usr_firstname,
|
||||||
firstName: data.user_tooltip.usr_lastname,
|
firstName: data.user_tooltip.usr_lastname,
|
||||||
@@ -598,14 +582,16 @@ export default {
|
|||||||
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
AVATAR: userDataFormat !== "" ? window.config.SYS_SERVER_AJAX +
|
||||||
window.config.SYS_URI +
|
window.config.SYS_URI +
|
||||||
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
`users/users_ViewPhotoGrid?pUID=${data.user_tooltip.usr_id}` : "",
|
||||||
UNASSIGNED: userDataFormat !== "" ? true : false
|
UNASSIGNED: userDataFormat !== "" ? true : false,
|
||||||
|
SHOW_TOOLTIP: true
|
||||||
});
|
});
|
||||||
} else if (data.dummy_task && !_.isEmpty(data.dummy_task)) {
|
break;
|
||||||
this.showUserTooltip = false;
|
case 'dummy_task':
|
||||||
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
dataFormat = data.dummy_task.type + ': ' + data.dummy_task.name;
|
||||||
} else {
|
break;
|
||||||
this.showUserTooltip = false;
|
default:
|
||||||
dataFormat = this.$i18n.t("ID_ANONYMOUS_USER");
|
dataFormat = "";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return dataFormat;
|
return dataFormat;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ class DraftTest extends TestCase
|
|||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
Delegation::truncate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -881,4 +882,18 @@ class DraftTest extends TestCase
|
|||||||
$res = $draft->getCasesRisk($process->PRO_ID, null, null, 'OVERDUE');
|
$res = $draft->getCasesRisk($process->PRO_ID, null, null, 'OVERDUE');
|
||||||
$this->assertCount(1, $res);
|
$this->assertCount(1, $res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This tests the getCounterMetrics() method
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Draft::getCounterMetrics()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_test_get_counter_metrics()
|
||||||
|
{
|
||||||
|
$this->createDraft();
|
||||||
|
$draft = new Draft();
|
||||||
|
$result = $draft->getCounterMetrics();
|
||||||
|
$this->assertTrue($result > 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,14 @@ class InboxTest extends TestCase
|
|||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
Delegation::truncate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method tearDown
|
||||||
|
*/
|
||||||
|
public function tearDown() {
|
||||||
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -272,9 +280,14 @@ class InboxTest extends TestCase
|
|||||||
public function it_filter_by_thread_title()
|
public function it_filter_by_thread_title()
|
||||||
{
|
{
|
||||||
// Create factories related to the to_do cases
|
// Create factories related to the to_do cases
|
||||||
$cases = $this->createInbox();
|
$delegation = factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
$usrId = $cases->USR_ID;
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
$title = $cases->DEL_TITLE;
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
'DEL_TITLE' => 'Test',
|
||||||
|
]);
|
||||||
|
$usrId = $delegation->USR_ID;
|
||||||
|
$title = 'Test';
|
||||||
// We need to commit the records inserted because is needed for the "fulltext" index
|
// We need to commit the records inserted because is needed for the "fulltext" index
|
||||||
DB::commit();
|
DB::commit();
|
||||||
// Create new Inbox object
|
// Create new Inbox object
|
||||||
@@ -830,4 +843,18 @@ class InboxTest extends TestCase
|
|||||||
$res = $inbox->getCasesRisk($process->PRO_ID, null, null, "OVERDUE");
|
$res = $inbox->getCasesRisk($process->PRO_ID, null, null, "OVERDUE");
|
||||||
$this->assertCount(1, $res);
|
$this->assertCount(1, $res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getCounterMetrics method
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Inbox::getCounterMetrics()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_counter_metrics()
|
||||||
|
{
|
||||||
|
$this->createInbox();
|
||||||
|
$inbox = new Inbox();
|
||||||
|
$res = $inbox->getCounterMetrics();
|
||||||
|
$this->assertTrue($res > 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ class PausedTest extends TestCase
|
|||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
Delegation::truncate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -911,4 +912,19 @@ class PausedTest extends TestCase
|
|||||||
$res = $paused->getCasesRisk($process1->PRO_ID, null, null, 'OVERDUE');
|
$res = $paused->getCasesRisk($process1->PRO_ID, null, null, 'OVERDUE');
|
||||||
$this->assertCount(1, $res);
|
$this->assertCount(1, $res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It tests the getCounterMetrics() method
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Paused::getCounterMetrics()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_counter_metrics()
|
||||||
|
{
|
||||||
|
$this->createMultiplePaused(3);
|
||||||
|
$paused = new Paused();
|
||||||
|
|
||||||
|
$res = $paused->getCounterMetrics();
|
||||||
|
$this->assertTrue($res > 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ class UnassignedTest extends TestCase
|
|||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
Delegation::truncate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -951,4 +952,18 @@ class UnassignedTest extends TestCase
|
|||||||
$res = $unassigned->getCasesRisk($process1->PRO_ID, null, null, 'OVERDUE');
|
$res = $unassigned->getCasesRisk($process1->PRO_ID, null, null, 'OVERDUE');
|
||||||
$this->assertCount(1, $res);
|
$this->assertCount(1, $res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This the getCounterMetrics method
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\BusinessModel\Cases\Unassigned::getCounterMetrics()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_counter_metrics()
|
||||||
|
{
|
||||||
|
$this->createSelfServiceUserOrGroup();
|
||||||
|
$unassigned = new Unassigned;
|
||||||
|
$result = $unassigned->getCounterMetrics();
|
||||||
|
$this->assertTrue($result > 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1154,7 +1154,11 @@ class DelegationTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function it_should_search_and_filter_by_app_title()
|
public function it_should_search_and_filter_by_app_title()
|
||||||
{
|
{
|
||||||
$delegations = factory(Delegation::class, 1)->states('foreign_keys')->create();
|
$delegations = factory(Delegation::class, 1)->states('foreign_keys')->create([
|
||||||
|
'APP_NUMBER' => function () {
|
||||||
|
return factory(Application::class)->create()->APP_NUMBER;
|
||||||
|
}
|
||||||
|
]);
|
||||||
$title = $delegations->last()->DEL_TITLE;
|
$title = $delegations->last()->DEL_TITLE;
|
||||||
// We need to commit the records inserted because is needed for the "fulltext" index
|
// We need to commit the records inserted because is needed for the "fulltext" index
|
||||||
DB::commit();
|
DB::commit();
|
||||||
@@ -3596,4 +3600,83 @@ class DelegationTest extends TestCase
|
|||||||
$res = $table->joinApplication()->participatedUser($table->USR_ID)->get();
|
$res = $table->joinApplication()->participatedUser($table->USR_ID)->get();
|
||||||
$this->assertCount(1, $res);
|
$this->assertCount(1, $res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the scopeInboxMetrics
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\Model\Delegation::scopeInboxMetrics()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_scope_inbox_metrics()
|
||||||
|
{
|
||||||
|
$application = factory(Application::class)->states('todo')->create();
|
||||||
|
$table = factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'APP_UID' => $application->APP_UID,
|
||||||
|
]);
|
||||||
|
$res = $table->inboxMetrics()->get();
|
||||||
|
$this->assertCount(1, $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the scopeDraftMetrics
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\Model\Delegation::scopeDraftMetrics()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_scope_draft_metrics()
|
||||||
|
{
|
||||||
|
$application = factory(Application::class)->states('draft')->create();
|
||||||
|
$table = factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'APP_UID' => $application->APP_UID,
|
||||||
|
]);
|
||||||
|
$res = $table->draftMetrics()->get();
|
||||||
|
$this->assertCount(1, $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the scopePausedMetrics
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\Model\Delegation::scopePausedMetrics()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_scope_paused_metrics()
|
||||||
|
{
|
||||||
|
$application = factory(Application::class)->states('paused')->create();
|
||||||
|
$appDelay = factory(AppDelay::class)->states('paused_foreign_keys')->create([
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'APP_UID' => $application->APP_UID,
|
||||||
|
]);
|
||||||
|
$table = factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'APP_UID' => $application->APP_UID,
|
||||||
|
'DEL_INDEX' => $appDelay->APP_DEL_INDEX,
|
||||||
|
]);
|
||||||
|
$res = $table->pausedMetrics()->get();
|
||||||
|
$this->assertCount(1, $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the scopeSelfServiceMetrics
|
||||||
|
*
|
||||||
|
* @covers \ProcessMaker\Model\Delegation::scopeSelfServiceMetrics()
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_scope_self_service_metrics()
|
||||||
|
{
|
||||||
|
$application = factory(Application::class)->states('paused')->create();
|
||||||
|
$task = factory(Task::class)->create([
|
||||||
|
'TAS_ASSIGN_TYPE' => 'SELF_SERVICE',
|
||||||
|
]);
|
||||||
|
$delegation = factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'APP_UID' => $application->APP_UID,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_ID' => 0,
|
||||||
|
]);
|
||||||
|
$res = $delegation->selfServiceMetrics()->get();
|
||||||
|
$this->assertCount(1, $res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,13 @@ use Luracast\Restler\Defaults;
|
|||||||
use Luracast\Restler\HumanReadableCache;
|
use Luracast\Restler\HumanReadableCache;
|
||||||
use Maveriks\Extension\Restler;
|
use Maveriks\Extension\Restler;
|
||||||
use ProcessMaker\BusinessModel\Cases\Unassigned;
|
use ProcessMaker\BusinessModel\Cases\Unassigned;
|
||||||
|
use ProcessMaker\Model\AppDelay;
|
||||||
|
use ProcessMaker\Model\Application as ApplicationModel;
|
||||||
|
use ProcessMaker\Model\Delegation;
|
||||||
|
use ProcessMaker\Model\Process;
|
||||||
|
use ProcessMaker\Model\Task;
|
||||||
|
use ProcessMaker\Model\TaskUser;
|
||||||
|
use ProcessMaker\Model\User;
|
||||||
use ProcessMaker\Services\Api\Metrics;
|
use ProcessMaker\Services\Api\Metrics;
|
||||||
use ReflectionClass;
|
use ReflectionClass;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
@@ -31,6 +38,7 @@ class MetricsTest extends TestCase
|
|||||||
public function setUp()
|
public function setUp()
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
Delegation::truncate();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Initialize Rest API.
|
* Initialize Rest API.
|
||||||
@@ -80,6 +88,8 @@ class MetricsTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function it_tests_get_counters_list_method_empty_lists()
|
public function it_tests_get_counters_list_method_empty_lists()
|
||||||
{
|
{
|
||||||
|
ApplicationModel::truncate();
|
||||||
|
|
||||||
$user = factory(\ProcessMaker\Model\User::class)->create();
|
$user = factory(\ProcessMaker\Model\User::class)->create();
|
||||||
$this->initializeRestApi($user->USR_UID);
|
$this->initializeRestApi($user->USR_UID);
|
||||||
|
|
||||||
@@ -154,4 +164,560 @@ class MetricsTest extends TestCase
|
|||||||
$res = $metrics->getCountersList();
|
$res = $metrics->getCountersList();
|
||||||
$this->assertNotEmpty($res);
|
$this->assertNotEmpty($res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getProcessTotalCases method with inbox
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_process_total_cases_inbox()
|
||||||
|
{
|
||||||
|
factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getProcessTotalCases('inbox');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getProcessTotalCases method with draft
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_process_total_cases_draft()
|
||||||
|
{
|
||||||
|
$application = factory(ApplicationModel::class)->states('draft')->create();
|
||||||
|
factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_INDEX' => 1,
|
||||||
|
'USR_UID' => $application->APP_INIT_USER,
|
||||||
|
'USR_ID' => $application->APP_INIT_USER_ID,
|
||||||
|
'APP_UID' => $application->APP_UID,
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getProcessTotalCases('draft');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getProcessTotalCases method with paused
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_process_total_cases_paused()
|
||||||
|
{
|
||||||
|
$process1 = factory(Process::class)->create(
|
||||||
|
['PRO_CATEGORY' => '1']
|
||||||
|
);
|
||||||
|
$process2 = factory(Process::class)->create(
|
||||||
|
['PRO_CATEGORY' => '2']
|
||||||
|
);
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$task = factory(Task::class)->create([
|
||||||
|
'TAS_ASSIGN_TYPE' => '',
|
||||||
|
'TAS_GROUP_VARIABLE' => '',
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'TAS_TYPE' => 'NORMAL'
|
||||||
|
]);
|
||||||
|
$application1 = factory(ApplicationModel::class)->create();
|
||||||
|
$application2 = factory(ApplicationModel::class)->create();
|
||||||
|
factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application1->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'CLOSED',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process1->PRO_ID,
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 0,
|
||||||
|
'DEL_INDEX' => 1
|
||||||
|
]);
|
||||||
|
$delegation1 = factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application1->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'CLOSED',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process1->PRO_ID,
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2
|
||||||
|
]);
|
||||||
|
factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application2->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process2->PRO_ID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 0,
|
||||||
|
'DEL_INDEX' => 1
|
||||||
|
]);
|
||||||
|
$delegation2 = factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application2->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process2->PRO_ID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2
|
||||||
|
]);
|
||||||
|
factory(AppDelay::class, 5)->create([
|
||||||
|
'APP_DELEGATION_USER' => $user->USR_UID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'APP_NUMBER' => $delegation1->APP_NUMBER,
|
||||||
|
'APP_DEL_INDEX' => $delegation1->DEL_INDEX,
|
||||||
|
'APP_DISABLE_ACTION_USER' => 0,
|
||||||
|
'APP_TYPE' => 'PAUSE'
|
||||||
|
]);
|
||||||
|
factory(AppDelay::class, 5)->create([
|
||||||
|
'APP_DELEGATION_USER' => $user->USR_UID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'APP_NUMBER' => $delegation2->APP_NUMBER,
|
||||||
|
'APP_DEL_INDEX' => $delegation2->DEL_INDEX,
|
||||||
|
'APP_DISABLE_ACTION_USER' => 0,
|
||||||
|
'APP_TYPE' => 'PAUSE'
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getProcessTotalCases('paused');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getProcessTotalCases method with unassigned
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_process_total_cases_unassigned()
|
||||||
|
{
|
||||||
|
$user = factory(\ProcessMaker\Model\User::class)->create();
|
||||||
|
$process = factory(Process::class)->create();
|
||||||
|
$application = factory(ApplicationModel::class)->create([
|
||||||
|
'APP_STATUS_ID' => 2
|
||||||
|
]);
|
||||||
|
$task = factory(Task::class)->create([
|
||||||
|
'TAS_ASSIGN_TYPE' => 'SELF_SERVICE',
|
||||||
|
'TAS_GROUP_VARIABLE' => '',
|
||||||
|
'PRO_UID' => $process->PRO_UID,
|
||||||
|
'PRO_ID' => $process->PRO_ID,
|
||||||
|
]);
|
||||||
|
factory(TaskUser::class)->create([
|
||||||
|
'TAS_UID' => $task->TAS_UID,
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'TU_RELATION' => 1,
|
||||||
|
'TU_TYPE' => 1
|
||||||
|
]);
|
||||||
|
factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'PRO_ID' => $process->PRO_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_ID' => 0,
|
||||||
|
'DEL_DELEGATE_DATE' => date('Y-m-d H:i:s', strtotime("-1 year"))
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getProcessTotalCases('unassigned');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getTotalCasesByRange method with inbox
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_total_cases_by_range_inbox()
|
||||||
|
{
|
||||||
|
factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getTotalCasesByRange('inbox');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getTotalCasesByRange method with draft
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_total_cases_by_range_draft()
|
||||||
|
{
|
||||||
|
$application = factory(ApplicationModel::class)->states('draft')->create();
|
||||||
|
factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_INDEX' => 1,
|
||||||
|
'USR_UID' => $application->APP_INIT_USER,
|
||||||
|
'USR_ID' => $application->APP_INIT_USER_ID,
|
||||||
|
'APP_UID' => $application->APP_UID,
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getTotalCasesByRange('draft');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getTotalCasesByRange method with paused
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_total_cases_by_range_paused()
|
||||||
|
{
|
||||||
|
$process1 = factory(Process::class)->create(
|
||||||
|
['PRO_CATEGORY' => '1']
|
||||||
|
);
|
||||||
|
$process2 = factory(Process::class)->create(
|
||||||
|
['PRO_CATEGORY' => '2']
|
||||||
|
);
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$task = factory(Task::class)->create([
|
||||||
|
'TAS_ASSIGN_TYPE' => '',
|
||||||
|
'TAS_GROUP_VARIABLE' => '',
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'TAS_TYPE' => 'NORMAL'
|
||||||
|
]);
|
||||||
|
$application1 = factory(ApplicationModel::class)->create();
|
||||||
|
$application2 = factory(ApplicationModel::class)->create();
|
||||||
|
factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application1->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'CLOSED',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process1->PRO_ID,
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 0,
|
||||||
|
'DEL_INDEX' => 1
|
||||||
|
]);
|
||||||
|
$delegation1 = factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application1->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'CLOSED',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process1->PRO_ID,
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2
|
||||||
|
]);
|
||||||
|
factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application2->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process2->PRO_ID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 0,
|
||||||
|
'DEL_INDEX' => 1
|
||||||
|
]);
|
||||||
|
$delegation2 = factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application2->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process2->PRO_ID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2
|
||||||
|
]);
|
||||||
|
factory(AppDelay::class, 5)->create([
|
||||||
|
'APP_DELEGATION_USER' => $user->USR_UID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'APP_NUMBER' => $delegation1->APP_NUMBER,
|
||||||
|
'APP_DEL_INDEX' => $delegation1->DEL_INDEX,
|
||||||
|
'APP_DISABLE_ACTION_USER' => 0,
|
||||||
|
'APP_TYPE' => 'PAUSE'
|
||||||
|
]);
|
||||||
|
factory(AppDelay::class, 5)->create([
|
||||||
|
'APP_DELEGATION_USER' => $user->USR_UID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'APP_NUMBER' => $delegation2->APP_NUMBER,
|
||||||
|
'APP_DEL_INDEX' => $delegation2->DEL_INDEX,
|
||||||
|
'APP_DISABLE_ACTION_USER' => 0,
|
||||||
|
'APP_TYPE' => 'PAUSE'
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getTotalCasesByRange('paused');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getTotalCasesByRange method with unassigned
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_total_cases_by_range_unassigned()
|
||||||
|
{
|
||||||
|
$user = factory(\ProcessMaker\Model\User::class)->create();
|
||||||
|
$process = factory(Process::class)->create();
|
||||||
|
$application = factory(ApplicationModel::class)->create([
|
||||||
|
'APP_STATUS_ID' => 2
|
||||||
|
]);
|
||||||
|
$task = factory(Task::class)->create([
|
||||||
|
'TAS_ASSIGN_TYPE' => 'SELF_SERVICE',
|
||||||
|
'TAS_GROUP_VARIABLE' => '',
|
||||||
|
'PRO_UID' => $process->PRO_UID,
|
||||||
|
'PRO_ID' => $process->PRO_ID,
|
||||||
|
]);
|
||||||
|
factory(TaskUser::class)->create([
|
||||||
|
'TAS_UID' => $task->TAS_UID,
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'TU_RELATION' => 1,
|
||||||
|
'TU_TYPE' => 1
|
||||||
|
]);
|
||||||
|
factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'PRO_ID' => $process->PRO_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_ID' => 0,
|
||||||
|
'DEL_DELEGATE_DATE' => date('Y-m-d H:i:s', strtotime("-1 year"))
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getTotalCasesByRange('unassigned');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getCasesRiskByProcess method with inbox
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_cases_risk_by_process_inbox()
|
||||||
|
{
|
||||||
|
$process = factory(Process::class)->create();
|
||||||
|
$delegation = factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
'PRO_ID' => $process->PRO_ID,
|
||||||
|
'DEL_RISK_DATE' => date('Y-m-d H:i:s'),
|
||||||
|
'DEL_TASK_DUE_DATE' => date('Y-m-d H:i:s', strtotime("+1 hour"))
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getCasesRiskByProcess('inbox', $delegation->PRO_ID, null, null, 'AT_RISK');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getCasesRiskByProcess method with draft
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_cases_risk_by_process_draft()
|
||||||
|
{
|
||||||
|
$process = factory(Process::class)->create();
|
||||||
|
$application = factory(ApplicationModel::class)->states('draft')->create();
|
||||||
|
$delegation = factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_INDEX' => 1,
|
||||||
|
'USR_UID' => $application->APP_INIT_USER,
|
||||||
|
'USR_ID' => $application->APP_INIT_USER_ID,
|
||||||
|
'APP_UID' => $application->APP_UID,
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'PRO_ID' => $process->PRO_ID,
|
||||||
|
'DEL_RISK_DATE' => date('Y-m-d H:i:s'),
|
||||||
|
'DEL_TASK_DUE_DATE' => date('Y-m-d H:i:s', strtotime("+1 hour"))
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getCasesRiskByProcess('draft', $delegation->PRO_ID, null, null, 'AT_RISK');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getCasesRiskByProcess method with paused
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_cases_risk_by_process_paused()
|
||||||
|
{
|
||||||
|
$process1 = factory(Process::class)->create(
|
||||||
|
['PRO_CATEGORY' => '1']
|
||||||
|
);
|
||||||
|
$process2 = factory(Process::class)->create(
|
||||||
|
['PRO_CATEGORY' => '2']
|
||||||
|
);
|
||||||
|
$user = factory(User::class)->create();
|
||||||
|
$task = factory(Task::class)->create([
|
||||||
|
'TAS_ASSIGN_TYPE' => '',
|
||||||
|
'TAS_GROUP_VARIABLE' => '',
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'TAS_TYPE' => 'NORMAL'
|
||||||
|
]);
|
||||||
|
$application1 = factory(ApplicationModel::class)->create();
|
||||||
|
$application2 = factory(ApplicationModel::class)->create();
|
||||||
|
factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application1->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'CLOSED',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process1->PRO_ID,
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 0,
|
||||||
|
'DEL_INDEX' => 1,
|
||||||
|
'DEL_RISK_DATE' => date('Y-m-d H:i:s'),
|
||||||
|
'DEL_TASK_DUE_DATE' => date('Y-m-d H:i:s', strtotime("+1 hour"))
|
||||||
|
]);
|
||||||
|
$delegation1 = factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application1->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'CLOSED',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process1->PRO_ID,
|
||||||
|
'PRO_UID' => $process1->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
'DEL_RISK_DATE' => date('Y-m-d H:i:s'),
|
||||||
|
'DEL_TASK_DUE_DATE' => date('Y-m-d H:i:s', strtotime("+1 hour"))
|
||||||
|
]);
|
||||||
|
factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application2->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process2->PRO_ID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 0,
|
||||||
|
'DEL_INDEX' => 1,
|
||||||
|
'DEL_RISK_DATE' => date('Y-m-d H:i:s'),
|
||||||
|
'DEL_TASK_DUE_DATE' => date('Y-m-d H:i:s', strtotime("+1 hour"))
|
||||||
|
]);
|
||||||
|
$delegation2 = factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application2->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'USR_ID' => $user->USR_ID,
|
||||||
|
'PRO_ID' => $process2->PRO_ID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
'DEL_RISK_DATE' => date('Y-m-d H:i:s'),
|
||||||
|
'DEL_TASK_DUE_DATE' => date('Y-m-d H:i:s', strtotime("+1 hour"))
|
||||||
|
]);
|
||||||
|
factory(AppDelay::class, 5)->create([
|
||||||
|
'APP_DELEGATION_USER' => $user->USR_UID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'APP_NUMBER' => $delegation1->APP_NUMBER,
|
||||||
|
'APP_DEL_INDEX' => $delegation1->DEL_INDEX,
|
||||||
|
'APP_DISABLE_ACTION_USER' => 0,
|
||||||
|
'APP_TYPE' => 'PAUSE'
|
||||||
|
]);
|
||||||
|
factory(AppDelay::class, 5)->create([
|
||||||
|
'APP_DELEGATION_USER' => $user->USR_UID,
|
||||||
|
'PRO_UID' => $process2->PRO_UID,
|
||||||
|
'APP_NUMBER' => $delegation2->APP_NUMBER,
|
||||||
|
'APP_DEL_INDEX' => $delegation2->DEL_INDEX,
|
||||||
|
'APP_DISABLE_ACTION_USER' => 0,
|
||||||
|
'APP_TYPE' => 'PAUSE'
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getCasesRiskByProcess('paused', $delegation1->PRO_ID, null, null, 'AT_RISK');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getCasesRiskByProcess method with unassigned
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_cases_risk_by_process_unassigned()
|
||||||
|
{
|
||||||
|
$user = factory(\ProcessMaker\Model\User::class)->create();
|
||||||
|
$process = factory(Process::class)->create();
|
||||||
|
$application = factory(ApplicationModel::class)->create([
|
||||||
|
'APP_STATUS_ID' => 2
|
||||||
|
]);
|
||||||
|
$task = factory(Task::class)->create([
|
||||||
|
'TAS_ASSIGN_TYPE' => 'SELF_SERVICE',
|
||||||
|
'TAS_GROUP_VARIABLE' => '',
|
||||||
|
'PRO_UID' => $process->PRO_UID,
|
||||||
|
'PRO_ID' => $process->PRO_ID,
|
||||||
|
]);
|
||||||
|
factory(TaskUser::class)->create([
|
||||||
|
'TAS_UID' => $task->TAS_UID,
|
||||||
|
'USR_UID' => $user->USR_UID,
|
||||||
|
'TU_RELATION' => 1,
|
||||||
|
'TU_TYPE' => 1
|
||||||
|
]);
|
||||||
|
$delegation = factory(Delegation::class)->create([
|
||||||
|
'APP_NUMBER' => $application->APP_NUMBER,
|
||||||
|
'TAS_ID' => $task->TAS_ID,
|
||||||
|
'PRO_ID' => $process->PRO_ID,
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'USR_ID' => 0,
|
||||||
|
'DEL_DELEGATE_DATE' => date('Y-m-d H:i:s', strtotime("-1 year")),
|
||||||
|
'DEL_RISK_DATE' => date('Y-m-d H:i:s'),
|
||||||
|
'DEL_TASK_DUE_DATE' => date('Y-m-d H:i:s', strtotime("+1 hour"))
|
||||||
|
]);
|
||||||
|
unset($RBAC);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$res = $metrics->getCasesRiskByProcess('unassigned', $delegation->PRO_ID, null, null, 'AT_RISK');
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getProcessTotalCases method with exception
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_process_total_cases_exception()
|
||||||
|
{
|
||||||
|
factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$this->expectExceptionMessage("Undefined variable: list");
|
||||||
|
$metrics->getProcessTotalCases(12, 123, "asda");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getTotalCasesByRange method with exception
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_total_cases_by_range_exception()
|
||||||
|
{
|
||||||
|
factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$this->expectExceptionMessage("Undefined variable: list");
|
||||||
|
$metrics->getTotalCasesByRange(12, 123, "asda");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the getCasesRiskByProcess method with exception
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_tests_get_counters_list_exception()
|
||||||
|
{
|
||||||
|
factory(Delegation::class)->states('foreign_keys')->create([
|
||||||
|
'DEL_THREAD_STATUS' => 'OPEN',
|
||||||
|
'DEL_PREVIOUS' => 1,
|
||||||
|
'DEL_INDEX' => 2,
|
||||||
|
]);
|
||||||
|
$metrics = new Metrics();
|
||||||
|
$this->expectExceptionMessage("Undefined variable: list");
|
||||||
|
$metrics->getCasesRiskByProcess(12, 123, "asda");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3401,8 +3401,10 @@ class Cases
|
|||||||
$lastFields = $this->executeTriggerFromList($triggersList, $fieldsCase, $stepType, $stepUidObj, $triggerType);
|
$lastFields = $this->executeTriggerFromList($triggersList, $fieldsCase, $stepType, $stepUidObj, $triggerType);
|
||||||
|
|
||||||
/*----------------------------------********---------------------------------*/
|
/*----------------------------------********---------------------------------*/
|
||||||
|
$usrUid = empty($fieldsCase['USER_LOGGED']) ? '' : $fieldsCase['USER_LOGGED'];
|
||||||
ChangeLog::getChangeLog()
|
ChangeLog::getChangeLog()
|
||||||
->setObjectUid($stepUidObj)
|
->setObjectUid($stepUidObj)
|
||||||
|
->getUsrIdByUsrUid($usrUid)
|
||||||
->getExecutedAtIdByTriggerType($triggerType);
|
->getExecutedAtIdByTriggerType($triggerType);
|
||||||
/*----------------------------------********---------------------------------*/
|
/*----------------------------------********---------------------------------*/
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ use Illuminate\Support\Facades\DB;
|
|||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use ProcessMaker\BusinessModel\Cases as BusinessModelCases;
|
use ProcessMaker\BusinessModel\Cases as BusinessModelCases;
|
||||||
use ProcessMaker\Core\System;
|
use ProcessMaker\Core\System;
|
||||||
|
use ProcessMaker\Model\Application;
|
||||||
|
use ProcessMaker\Model\Delegation;
|
||||||
use ProcessMaker\Model\GroupUser;
|
use ProcessMaker\Model\GroupUser;
|
||||||
use ProcessMaker\Model\Groupwf;
|
use ProcessMaker\Model\Groupwf;
|
||||||
use ProcessMaker\Model\RbacRoles;
|
use ProcessMaker\Model\RbacRoles;
|
||||||
@@ -2491,9 +2493,6 @@ function PMFgetLabelOption ($PROCESS, $DYNAFORM_UID, $FIELD_NAME, $FIELD_SELECTE
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @method
|
|
||||||
*
|
|
||||||
* Redirects a case to any step in the current task. In order for the step to
|
* Redirects a case to any step in the current task. In order for the step to
|
||||||
* be executed, the specified step much exist and if it contains a condition,
|
* be executed, the specified step much exist and if it contains a condition,
|
||||||
* it must evaluate to true.
|
* it must evaluate to true.
|
||||||
@@ -2502,79 +2501,76 @@ function PMFgetLabelOption ($PROCESS, $DYNAFORM_UID, $FIELD_NAME, $FIELD_SELECTE
|
|||||||
* @label PMF Redirect To Step
|
* @label PMF Redirect To Step
|
||||||
* @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#PMFRedirectToStep.28.29
|
* @link http://wiki.processmaker.com/index.php/ProcessMaker_Functions#PMFRedirectToStep.28.29
|
||||||
*
|
*
|
||||||
* @param string(32) | $sApplicationUID | Case ID | The unique ID for a case,
|
* @param string(32) | $appUid | Case ID | The unique ID for a case,
|
||||||
* @param int | $iDelegation | Delegation index | The delegation index of a case.
|
* @param int | $index | Delegation index | The delegation index of a case.
|
||||||
* @param string(32) | $sStepType | Type of Step | The type of step, which can be "DYNAFORM", "INPUT_DOCUMENT" or "OUTPUT_DOCUMENT".
|
* @param string(32) | $stepType | Type of Step | The type of step, which can be "DYNAFORM", "INPUT_DOCUMENT" or "OUTPUT_DOCUMENT".
|
||||||
* @param string(32) | $sStepUid | Step ID | The unique ID for the step.
|
* @param string(32) | $stepUid | Step ID | The unique ID for the step.
|
||||||
* @return none | $none | None | None
|
* @return none | $none | None | None
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function PMFRedirectToStep($sApplicationUID, $iDelegation, $sStepType, $sStepUid)
|
function PMFRedirectToStep($appUid, $index, $stepType, $stepUid)
|
||||||
{
|
{
|
||||||
|
// Set initial values
|
||||||
|
$index = intval($index);
|
||||||
|
$sessionCase = $_SESSION["APPLICATION"];
|
||||||
|
// Save the session variables
|
||||||
$g = new G();
|
$g = new G();
|
||||||
|
|
||||||
$g->sessionVarSave();
|
$g->sessionVarSave();
|
||||||
|
$_SESSION["APPLICATION"] = $appUid;
|
||||||
$iDelegation = intval($iDelegation);
|
$_SESSION["INDEX"] = $index;
|
||||||
|
// Get the caseNumber
|
||||||
$_SESSION["APPLICATION"] = $sApplicationUID;
|
$appNumber = Application::getCaseNumber($appUid);
|
||||||
$_SESSION["INDEX"] = $iDelegation;
|
// Get thread information
|
||||||
|
$thread = Delegation::getThreadInfo($appNumber, $index);
|
||||||
require_once 'classes/model/AppDelegation.php';
|
// Review if exist a thread
|
||||||
$oCriteria = new Criteria('workflow');
|
if (!empty($thread)) {
|
||||||
$oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID);
|
|
||||||
$oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID);
|
|
||||||
$oCriteria->add(AppDelegationPeer::DEL_INDEX, $iDelegation);
|
|
||||||
$oDataset = AppDelegationPeer::doSelectRS($oCriteria);
|
|
||||||
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
|
||||||
$oDataset->next();
|
|
||||||
global $oPMScript;
|
global $oPMScript;
|
||||||
$aRow = $oDataset->getRow();
|
// Load the data
|
||||||
if ($aRow) {
|
$case = new Cases();
|
||||||
require_once 'classes/model/Step.php';
|
// Get the step information
|
||||||
$oStep = new Step();
|
$step = new Step();
|
||||||
$oTheStep = $oStep->loadByType($aRow['TAS_UID'], $sStepType, $sStepUid);
|
$theStep = $step->loadByType($thread['TAS_UID'], $stepType, $stepUid);
|
||||||
$bContinue = true;
|
// Save data if the case fields loaded in the $oPMScript is related to the same case in execution
|
||||||
$oCase = new Cases();
|
if ($sessionCase === $appUid && !is_null($oPMScript)) {
|
||||||
$aFields = $oCase->loadCase($sApplicationUID);
|
$fields = [];
|
||||||
if ($oTheStep->getStepCondition() != '') {
|
$fields['APP_DATA'] = $oPMScript->aFields;
|
||||||
$pmScript = new PMScript();
|
unset($fields['APP_STATUS']);
|
||||||
$pmScript->setFields($aFields['APP_DATA']);
|
unset($fields['APP_PROC_STATUS']);
|
||||||
$pmScript->setScript($oTheStep->getStepCondition());
|
unset($fields['APP_PROC_CODE']);
|
||||||
$pmScript->setExecutedOn(PMScript::CONDITION);
|
unset($fields['APP_PIN']);
|
||||||
$bContinue = $pmScript->evaluate();
|
$case->updateCase($appUid, $fields);
|
||||||
}
|
}
|
||||||
if ($bContinue) {
|
$fields = $case->loadCase($appUid);
|
||||||
switch ($oTheStep->getStepTypeObj()) {
|
// Review the step condition
|
||||||
|
$continue = true;
|
||||||
|
if (!empty($theStep->getStepCondition())) {
|
||||||
|
$pmScript = new PMScript();
|
||||||
|
$pmScript->setFields($fields['APP_DATA']);
|
||||||
|
$pmScript->setScript($theStep->getStepCondition());
|
||||||
|
$pmScript->setExecutedOn(PMScript::CONDITION);
|
||||||
|
$continue = $pmScript->evaluate();
|
||||||
|
}
|
||||||
|
if ($continue) {
|
||||||
|
switch ($theStep->getStepTypeObj()) {
|
||||||
case 'DYNAFORM':
|
case 'DYNAFORM':
|
||||||
$sAction = 'EDIT';
|
$action = 'EDIT';
|
||||||
break;
|
break;
|
||||||
case 'OUTPUT_DOCUMENT':
|
case 'OUTPUT_DOCUMENT':
|
||||||
$sAction = 'GENERATE';
|
$action = 'GENERATE';
|
||||||
break;
|
break;
|
||||||
case 'INPUT_DOCUMENT':
|
case 'INPUT_DOCUMENT':
|
||||||
$sAction = 'ATTACH';
|
$action = 'ATTACH';
|
||||||
break;
|
break;
|
||||||
case 'EXTERNAL':
|
case 'EXTERNAL':
|
||||||
$sAction = 'EDIT';
|
$action = 'EDIT';
|
||||||
break;
|
break;
|
||||||
case 'MESSAGE':
|
case 'MESSAGE':
|
||||||
$sAction = '';
|
$action = '';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// save data
|
|
||||||
if (!is_null($oPMScript)) {
|
|
||||||
$aFields['APP_DATA'] = $oPMScript->aFields;
|
|
||||||
unset($aFields['APP_STATUS']);
|
|
||||||
unset($aFields['APP_PROC_STATUS']);
|
|
||||||
unset($aFields['APP_PROC_CODE']);
|
|
||||||
unset($aFields['APP_PIN']);
|
|
||||||
$oCase->updateCase($sApplicationUID, $aFields);
|
|
||||||
}
|
|
||||||
|
|
||||||
$g->sessionVarRestore();
|
$g->sessionVarRestore();
|
||||||
|
G::header('Location: ' . 'cases_Step?TYPE=' . $stepType . '&UID=' . $stepUid . '&POSITION=' . $theStep->getStepPosition() . '&ACTION=' . $action);
|
||||||
G::header('Location: ' . 'cases_Step?TYPE=' . $sStepType . '&UID=' . $sStepUid . '&POSITION=' . $oTheStep->getStepPosition() . '&ACTION=' . $sAction);
|
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -19175,12 +19175,6 @@ msgstr "Cookie Lifetime (Seconds)"
|
|||||||
msgid "The maximun limit of columns for a database table is 255, you already have them defined!"
|
msgid "The maximun limit of columns for a database table is 255, you already have them defined!"
|
||||||
msgstr "The maximun limit of columns for a database table is 255, you already have them defined!"
|
msgstr "The maximun limit of columns for a database table is 255, you already have them defined!"
|
||||||
|
|
||||||
# TRANSLATION
|
|
||||||
# LABEL/ID_MCRYPT_SUPPORT
|
|
||||||
#: LABEL/ID_MCRYPT_SUPPORT
|
|
||||||
msgid "Mcrypt Support"
|
|
||||||
msgstr "Mcrypt Support"
|
|
||||||
|
|
||||||
# TRANSLATION
|
# TRANSLATION
|
||||||
# LABEL/ID_MEDIA
|
# LABEL/ID_MEDIA
|
||||||
#: LABEL/ID_MEDIA
|
#: LABEL/ID_MEDIA
|
||||||
|
|||||||
@@ -203,7 +203,6 @@ class InstallerModule extends Controller
|
|||||||
$info->multibyte = new stdclass();
|
$info->multibyte = new stdclass();
|
||||||
$info->soap = new stdclass();
|
$info->soap = new stdclass();
|
||||||
$info->ldap = new stdclass();
|
$info->ldap = new stdclass();
|
||||||
$info->mcrypt = new stdclass();
|
|
||||||
$info->memory = new stdclass();
|
$info->memory = new stdclass();
|
||||||
|
|
||||||
$info->php->version = $phpVer;
|
$info->php->version = $phpVer;
|
||||||
@@ -272,10 +271,6 @@ class InstallerModule extends Controller
|
|||||||
$info->soap->version = G::LoadTranslation('ID_ENABLED');
|
$info->soap->version = G::LoadTranslation('ID_ENABLED');
|
||||||
}
|
}
|
||||||
|
|
||||||
//mcrypt info
|
|
||||||
$info->mcrypt->result = extension_loaded('mcrypt');
|
|
||||||
$info->mcrypt->version = $info->mcrypt->result ? G::LoadTranslation('ID_ENABLED') : G::LoadTranslation('ID_NOT_ENABLED');
|
|
||||||
|
|
||||||
// ldap info
|
// ldap info
|
||||||
$info->ldap->result = false;
|
$info->ldap->result = false;
|
||||||
$info->ldap->version = G::LoadTranslation('ID_NOT_ENABLED');
|
$info->ldap->version = G::LoadTranslation('ID_NOT_ENABLED');
|
||||||
|
|||||||
@@ -60091,7 +60091,6 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE
|
|||||||
( 'LABEL','ID_MAX_INDICATOR_DASHBOARD','en','Maximum number of Indicators','2015-03-31') ,
|
( 'LABEL','ID_MAX_INDICATOR_DASHBOARD','en','Maximum number of Indicators','2015-03-31') ,
|
||||||
( 'LABEL','ID_MAX_LIFETIME','en','Cookie Lifetime (Seconds)','2017-02-21') ,
|
( 'LABEL','ID_MAX_LIFETIME','en','Cookie Lifetime (Seconds)','2017-02-21') ,
|
||||||
( 'LABEL','ID_MAX_LIMIT_COLUMNS_FOR_DATABASE','en','The maximun limit of columns for a database table is 255, you already have them defined!','2014-01-15') ,
|
( 'LABEL','ID_MAX_LIMIT_COLUMNS_FOR_DATABASE','en','The maximun limit of columns for a database table is 255, you already have them defined!','2014-01-15') ,
|
||||||
( 'LABEL','ID_MCRYPT_SUPPORT','en','Mcrypt Support','2014-10-17') ,
|
|
||||||
( 'LABEL','ID_MEDIA','en','Media','2014-01-15') ,
|
( 'LABEL','ID_MEDIA','en','Media','2014-01-15') ,
|
||||||
( 'LABEL','ID_MEMBER','en','Member','2014-01-15') ,
|
( 'LABEL','ID_MEMBER','en','Member','2014-01-15') ,
|
||||||
( 'LABEL','ID_MEMBERS','en','Members','2014-01-15') ,
|
( 'LABEL','ID_MEMBERS','en','Members','2014-01-15') ,
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ try {
|
|||||||
$urlLogin = (substr(SYS_SKIN, 0, 2) !== 'ux')? 'login' : '../main/login';
|
$urlLogin = (substr(SYS_SKIN, 0, 2) !== 'ux')? 'login' : '../main/login';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60)]);
|
||||||
if (!$RBAC->singleSignOn) {
|
if (!$RBAC->singleSignOn) {
|
||||||
setcookie("singleSignOn", '0', time() + (24 * 60 * 60), '/', '', G::is_https());
|
setcookie('singleSignOn', '0', $cookieOptions);
|
||||||
if (!isset($_POST['form']) ) {
|
if (!isset($_POST['form']) ) {
|
||||||
G::SendTemporalMessage ('ID_USER_HAVENT_RIGHTS_SYSTEM', 'error');
|
G::SendTemporalMessage ('ID_USER_HAVENT_RIGHTS_SYSTEM', 'error');
|
||||||
G::header('Location: login');
|
G::header('Location: login');
|
||||||
@@ -181,7 +182,7 @@ try {
|
|||||||
EnterpriseClass::enterpriseSystemUpdate($loginInfo);
|
EnterpriseClass::enterpriseSystemUpdate($loginInfo);
|
||||||
initUserSession($uid, $usr);
|
initUserSession($uid, $usr);
|
||||||
} else {
|
} else {
|
||||||
setcookie("singleSignOn", '1', time() + (24 * 60 * 60), '/', '', G::is_https());
|
setcookie('singleSignOn', '1', $cookieOptions);
|
||||||
$uid = $RBAC->userObj->fields['USR_UID'];
|
$uid = $RBAC->userObj->fields['USR_UID'];
|
||||||
$usr = $RBAC->userObj->fields['USR_USERNAME'];
|
$usr = $RBAC->userObj->fields['USR_USERNAME'];
|
||||||
initUserSession($uid, $usr);
|
initUserSession($uid, $usr);
|
||||||
@@ -416,7 +417,7 @@ try {
|
|||||||
$configS = System::getSystemConfiguration('', '', config("system.workspace"));
|
$configS = System::getSystemConfiguration('', '', config("system.workspace"));
|
||||||
$activeSession = isset($configS['session_block']) ? !(int)$configS['session_block']:true;
|
$activeSession = isset($configS['session_block']) ? !(int)$configS['session_block']:true;
|
||||||
if ($activeSession){
|
if ($activeSession){
|
||||||
setcookie("PM-TabPrimary", 101010010, time() + (24 * 60 * 60), '/', '', G::is_https());
|
setcookie('PM-TabPrimary', 101010010, $cookieOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the User's last login date
|
// Update the User's last login date
|
||||||
|
|||||||
@@ -81,8 +81,8 @@ try {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*----------------------------------********---------------------------------*/
|
/*----------------------------------********---------------------------------*/
|
||||||
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60)]);
|
||||||
setcookie('singleSignOn', '1', time() + (24 * 60 * 60), '/', '', G::is_https());
|
setcookie('singleSignOn', '1', $cookieOptions);
|
||||||
|
|
||||||
initUserSession(
|
initUserSession(
|
||||||
$_SESSION['__USER_LOGGED_SSO__'],
|
$_SESSION['__USER_LOGGED_SSO__'],
|
||||||
|
|||||||
@@ -1,27 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* login.php
|
|
||||||
*
|
|
||||||
* ProcessMaker Open Source Edition
|
|
||||||
* Copyright (C) 2004 - 2008 Colosa Inc.23
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as
|
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
|
||||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
use ProcessMaker\Core\System;
|
use ProcessMaker\Core\System;
|
||||||
use ProcessMaker\Plugins\PluginRegistry;
|
use ProcessMaker\Plugins\PluginRegistry;
|
||||||
@@ -182,7 +159,11 @@ if (isset($_SESSION['USER_LOGGED'])) {
|
|||||||
session_start();
|
session_start();
|
||||||
session_regenerate_id();
|
session_regenerate_id();
|
||||||
|
|
||||||
setcookie("workspaceSkin", SYS_SKIN, time() + (24 * 60 * 60), "/sys" . config("system.workspace"), null, G::is_https(), true);
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60), 'httponly' => true]);
|
||||||
|
setcookie(session_name(), session_id(), $cookieOptions);
|
||||||
|
|
||||||
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60), 'path' => '/sys' . config('system.workspace'), 'httponly' => true]);
|
||||||
|
setcookie('workspaceSkin', SYS_SKIN, $cookieOptions);
|
||||||
|
|
||||||
if (strlen($msg) > 0) {
|
if (strlen($msg) > 0) {
|
||||||
$_SESSION['G_MESSAGE'] = $msg;
|
$_SESSION['G_MESSAGE'] = $msg;
|
||||||
@@ -319,14 +300,16 @@ $flagForgotPassword = isset($oConf->aConfig['login_enableForgotPassword'])
|
|||||||
? $oConf->aConfig['login_enableForgotPassword']
|
? $oConf->aConfig['login_enableForgotPassword']
|
||||||
: 'off';
|
: 'off';
|
||||||
|
|
||||||
setcookie('PM-Warning', trim(G::LoadTranslation('ID_BLOCKER_MSG'), '*'), time() + (24 * 60 * 60), SYS_URI, '', G::is_https());
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60), 'path' => SYS_URI]);
|
||||||
|
setcookie('PM-Warning', trim(G::LoadTranslation('ID_BLOCKER_MSG'), '*'), $cookieOptions);
|
||||||
|
|
||||||
$configS = System::getSystemConfiguration('', '', config("system.workspace"));
|
$configS = System::getSystemConfiguration('', '', config("system.workspace"));
|
||||||
$activeSession = isset($configS['session_block']) ? !(int)$configS['session_block'] : true;
|
$activeSession = isset($configS['session_block']) ? !(int)$configS['session_block'] : true;
|
||||||
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60)]);
|
||||||
if ($activeSession) {
|
if ($activeSession) {
|
||||||
setcookie("PM-TabPrimary", 101010010, time() + (24 * 60 * 60), '/', '', G::is_https());
|
setcookie('PM-TabPrimary', 101010010, $cookieOptions);
|
||||||
} else {
|
} else {
|
||||||
setcookie("PM-TabPrimary", uniqid(), time() + (24 * 60 * 60), '/', '', G::is_https());
|
setcookie('PM-TabPrimary', uniqid(), $cookieOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
$oHeadPublisher->addScriptCode("var flagForgotPassword = '$flagForgotPassword';");
|
$oHeadPublisher->addScriptCode("var flagForgotPassword = '$flagForgotPassword';");
|
||||||
|
|||||||
@@ -1,28 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* sysLogin.php
|
|
||||||
*
|
|
||||||
* ProcessMaker Open Source Edition
|
|
||||||
* Copyright (C) 2004 - 2008 Colosa Inc.23
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as
|
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program 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 Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
|
|
||||||
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*----------------------------------********---------------------------------*/
|
|
||||||
//Browser Compatibility
|
//Browser Compatibility
|
||||||
$browserSupported = G::checkBrowserCompatibility();
|
$browserSupported = G::checkBrowserCompatibility();
|
||||||
if ($browserSupported==false) {
|
if ($browserSupported==false) {
|
||||||
@@ -50,11 +27,14 @@ if (!empty($_SESSION['G_MESSAGE_TYPE'])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Initialize session
|
//Initialize session
|
||||||
|
|
||||||
@session_destroy();
|
@session_destroy();
|
||||||
session_start();
|
session_start();
|
||||||
session_regenerate_id();
|
session_regenerate_id();
|
||||||
|
|
||||||
|
//Set options for PHP session cookie
|
||||||
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60), 'httponly' => true]);
|
||||||
|
setcookie(session_name(), session_id(), $cookieOptions);
|
||||||
|
|
||||||
//Restore session variables
|
//Restore session variables
|
||||||
$_SESSION = array_merge($_SESSION, $arraySession);
|
$_SESSION = array_merge($_SESSION, $arraySession);
|
||||||
|
|
||||||
@@ -169,8 +149,12 @@ switch (WS_IN_LOGIN) {
|
|||||||
$fileLogin = 'login/sysLogin';
|
$fileLogin = 'login/sysLogin';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
setcookie("PM-Warning", trim(G::LoadTranslation('ID_BLOCKER_MSG'), '*'), time() + (24 * 60 * 60), SYS_CURRENT_URI, '', G::is_https());
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60), 'path' => SYS_CURRENT_URI]);
|
||||||
setcookie("PM-TabPrimary", uniqid(), time() + (24 * 60 * 60), '/', '', G::is_https());
|
setcookie('PM-Warning', trim(G::LoadTranslation('ID_BLOCKER_MSG'), '*'), $cookieOptions);
|
||||||
|
|
||||||
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60)]);
|
||||||
|
setcookie('PM-TabPrimary', uniqid(), $cookieOptions);
|
||||||
|
|
||||||
$oHeadPublisher = headPublisher::getSingleton();
|
$oHeadPublisher = headPublisher::getSingleton();
|
||||||
$oHeadPublisher->addScriptFile('/jscore/src/PM.js');
|
$oHeadPublisher->addScriptFile('/jscore/src/PM.js');
|
||||||
$oHeadPublisher->addScriptFile('/jscore/src/Sessions.js');
|
$oHeadPublisher->addScriptFile('/jscore/src/Sessions.js');
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ switch ($option) {
|
|||||||
$oHeadPublisher->assign("SYSINFO_GD", "\"" . $systemInfo->gd->version . "\", " . (($systemInfo->gd->result)? 1 : 0));
|
$oHeadPublisher->assign("SYSINFO_GD", "\"" . $systemInfo->gd->version . "\", " . (($systemInfo->gd->result)? 1 : 0));
|
||||||
$oHeadPublisher->assign("SYSINFO_MULTIBYTESTRING", "\"" . $systemInfo->multibyte->version . "\", " . (($systemInfo->multibyte->result)? 1 : 0));
|
$oHeadPublisher->assign("SYSINFO_MULTIBYTESTRING", "\"" . $systemInfo->multibyte->version . "\", " . (($systemInfo->multibyte->result)? 1 : 0));
|
||||||
$oHeadPublisher->assign("SYSINFO_SOAP", "\"" . $systemInfo->soap->version . "\", " . (($systemInfo->soap->result)? 1 : 0));
|
$oHeadPublisher->assign("SYSINFO_SOAP", "\"" . $systemInfo->soap->version . "\", " . (($systemInfo->soap->result)? 1 : 0));
|
||||||
$oHeadPublisher->assign("SYSINFO_MCRYPT", "\"" . $systemInfo->mcrypt->version . "\", " . (($systemInfo->mcrypt->result)? 1 : 0));
|
|
||||||
$oHeadPublisher->assign("SYSINFO_LDAP", "\"" . $systemInfo->ldap->version . "\", " . (($systemInfo->ldap->result)? 1 : 0));
|
$oHeadPublisher->assign("SYSINFO_LDAP", "\"" . $systemInfo->ldap->version . "\", " . (($systemInfo->ldap->result)? 1 : 0));
|
||||||
$oHeadPublisher->assign("SYSINFO_MEMORYLIMIT", "\"" . $systemInfo->memory->version . "\", " . (($systemInfo->memory->result)? 1 : 0));
|
$oHeadPublisher->assign("SYSINFO_MEMORYLIMIT", "\"" . $systemInfo->memory->version . "\", " . (($systemInfo->memory->result)? 1 : 0));
|
||||||
|
|
||||||
|
|||||||
@@ -1556,16 +1556,16 @@ class AbstractCases implements CasesInterface
|
|||||||
$list = end($listArray);
|
$list = end($listArray);
|
||||||
switch ($list) {
|
switch ($list) {
|
||||||
case 'Inbox':
|
case 'Inbox':
|
||||||
$query->inbox($this->getUserId());
|
$query->inboxMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Draft':
|
case 'Draft':
|
||||||
$query->draft($this->getUserId());
|
$query->draftMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Paused':
|
case 'Paused':
|
||||||
$query->paused($this->getUserId());
|
$query->pausedMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Unassigned':
|
case 'Unassigned':
|
||||||
$query->selfService($this->getUserUid());
|
$query->selfServiceMetrics();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$query->joinProcess();
|
$query->joinProcess();
|
||||||
@@ -1608,16 +1608,16 @@ class AbstractCases implements CasesInterface
|
|||||||
$list = end($listArray);
|
$list = end($listArray);
|
||||||
switch ($list) {
|
switch ($list) {
|
||||||
case 'Inbox':
|
case 'Inbox':
|
||||||
$query->inbox($this->getUserId());
|
$query->inboxMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Draft':
|
case 'Draft':
|
||||||
$query->draft($this->getUserId());
|
$query->draftMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Paused':
|
case 'Paused':
|
||||||
$query->paused($this->getUserId());
|
$query->pausedMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Unassigned':
|
case 'Unassigned':
|
||||||
$query->selfService($this->getUserUid());
|
$query->selfServiceMetrics();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$query->joinProcess();
|
$query->joinProcess();
|
||||||
@@ -1661,16 +1661,16 @@ class AbstractCases implements CasesInterface
|
|||||||
$list = end($listArray);
|
$list = end($listArray);
|
||||||
switch ($list) {
|
switch ($list) {
|
||||||
case 'Inbox':
|
case 'Inbox':
|
||||||
$query->inbox($this->getUserId());
|
$query->inboxMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Draft':
|
case 'Draft':
|
||||||
$query->draft($this->getUserId());
|
$query->draftMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Paused':
|
case 'Paused':
|
||||||
$query->paused($this->getUserId());
|
$query->pausedMetrics();
|
||||||
break;
|
break;
|
||||||
case 'Unassigned':
|
case 'Unassigned':
|
||||||
$query->selfService($this->getUserUid());
|
$query->selfServiceMetrics();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$query->joinProcess();
|
$query->joinProcess();
|
||||||
|
|||||||
@@ -258,4 +258,16 @@ class Draft extends AbstractCases
|
|||||||
'total' => $count
|
'total' => $count
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count how many cases there are in DRAFT
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getCounterMetrics()
|
||||||
|
{
|
||||||
|
$query = Delegation::query()->select();
|
||||||
|
$query->draftMetrics();
|
||||||
|
return $query->count(['APPLICATION.APP_NUMBER']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -275,4 +275,16 @@ class Inbox extends AbstractCases
|
|||||||
'total' => $count
|
'total' => $count
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count how many cases there are in TO_DO
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getCounterMetrics()
|
||||||
|
{
|
||||||
|
$query = Delegation::query()->select();
|
||||||
|
$query->inboxMetrics();
|
||||||
|
return $query->count(['APP_DELEGATION.APP_NUMBER']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -265,4 +265,16 @@ class Paused extends AbstractCases
|
|||||||
'total' => $count
|
'total' => $count
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count how many cases there are in PAUSED
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getCounterMetrics()
|
||||||
|
{
|
||||||
|
$query = Delegation::query()->select();
|
||||||
|
$query->pausedMetrics();
|
||||||
|
return $query->count(['APP_DELEGATION.APP_NUMBER']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -278,4 +278,16 @@ class Unassigned extends AbstractCases
|
|||||||
'total' => $count
|
'total' => $count
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count how many cases there are in SELF_SERVICE
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getCounterMetrics()
|
||||||
|
{
|
||||||
|
$query = Delegation::query()->select();
|
||||||
|
$query->selfServiceMetrics();
|
||||||
|
return $query->count(['APP_DELEGATION.APP_NUMBER']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -874,8 +874,8 @@ class Light
|
|||||||
session_start();
|
session_start();
|
||||||
session_regenerate_id();
|
session_regenerate_id();
|
||||||
|
|
||||||
setcookie("workspaceSkin", SYS_SKIN, time() + (24 * 60 * 60), "/sys" . config("system.workspace"), null, G::is_https(),
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60), 'path' => '/sys' . config('system.workspace'), 'httponly' => true]);
|
||||||
true);
|
setcookie('workspaceSkin', SYS_SKIN, $cookieOptions);
|
||||||
|
|
||||||
if (strlen($msg) > 0) {
|
if (strlen($msg) > 0) {
|
||||||
$_SESSION['G_MESSAGE'] = $msg;
|
$_SESSION['G_MESSAGE'] = $msg;
|
||||||
|
|||||||
@@ -86,6 +86,21 @@ class System
|
|||||||
'disable_task_manager_routing_async' => '0',
|
'disable_task_manager_routing_async' => '0',
|
||||||
'on_one_server_enable' => 0,
|
'on_one_server_enable' => 0,
|
||||||
'at_risk_delegation_max_time' => '0.2',
|
'at_risk_delegation_max_time' => '0.2',
|
||||||
|
'samesite_cookie_setting' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
public static $cookieDefaultOptions = [
|
||||||
|
'expires' => 0,
|
||||||
|
'path' => '/',
|
||||||
|
'domain' => '',
|
||||||
|
'secure' => false,
|
||||||
|
'httponly' => false,
|
||||||
|
'samesite' => ''
|
||||||
|
];
|
||||||
|
|
||||||
|
public static $cookieSameSiteValues = [
|
||||||
|
'Lax',
|
||||||
|
'Strict'
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1252,6 +1267,13 @@ class System
|
|||||||
$config['at_risk_delegation_max_time'] = self::$defaultConfig['at_risk_delegation_max_time'];
|
$config['at_risk_delegation_max_time'] = self::$defaultConfig['at_risk_delegation_max_time'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$value = ucfirst(strtolower($config['samesite_cookie_setting']));
|
||||||
|
if (in_array($value, self::$cookieSameSiteValues)) {
|
||||||
|
$config['samesite_cookie_setting'] = $value;
|
||||||
|
} else {
|
||||||
|
$config['samesite_cookie_setting'] = '';
|
||||||
|
}
|
||||||
|
|
||||||
return $config;
|
return $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1778,4 +1800,29 @@ class System
|
|||||||
$parseDsn["pass"] = urldecode($parseDsn["pass"]);
|
$parseDsn["pass"] = urldecode($parseDsn["pass"]);
|
||||||
return $parseDsn;
|
return $parseDsn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the options for a cookie, according to the system configuration and values optionally sent to this method
|
||||||
|
*
|
||||||
|
* @param array $options
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function buildCookieOptions(array $options = [])
|
||||||
|
{
|
||||||
|
// Get system values
|
||||||
|
$cookieOptions = self::$cookieDefaultOptions;
|
||||||
|
$systemConfiguration = self::getSystemConfiguration();
|
||||||
|
|
||||||
|
// Always set "secure" option according to the server protocol
|
||||||
|
$cookieOptions['secure'] = G::is_https();
|
||||||
|
|
||||||
|
// Set the "samesite" option according to the system configuration
|
||||||
|
$cookieOptions['samesite'] = $systemConfiguration['samesite_cookie_setting'];
|
||||||
|
|
||||||
|
// Overrides the cookie options with the values sent to the method
|
||||||
|
$cookieOptions = array_merge($cookieOptions, $options);
|
||||||
|
|
||||||
|
// Return the cookie options
|
||||||
|
return $cookieOptions;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1069,6 +1069,64 @@ class Delegation extends Model
|
|||||||
return $query;
|
return $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope the Inbox cases no matter the user
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Database\Eloquent\Builder
|
||||||
|
*/
|
||||||
|
public function scopeInboxMetrics($query)
|
||||||
|
{
|
||||||
|
$query->joinApplication();
|
||||||
|
$query->status(Application::STATUS_TODO);
|
||||||
|
$query->threadOpen();
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope a draft cases no matter the user
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Database\Eloquent\Builder
|
||||||
|
*/
|
||||||
|
public function scopeDraftMetrics($query)
|
||||||
|
{
|
||||||
|
$query->joinApplication();
|
||||||
|
$query->status(Application::STATUS_DRAFT);
|
||||||
|
$query->threadOpen();
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope paused cases list no matter the user
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Database\Eloquent\Builder
|
||||||
|
*/
|
||||||
|
public function scopePausedMetrics($query)
|
||||||
|
{
|
||||||
|
$query->joinAppDelay('PAUSE');
|
||||||
|
$query->joinApplication();
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope a self service cases no matter the user
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Database\Eloquent\Builder $query
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Database\Eloquent\Builder
|
||||||
|
*/
|
||||||
|
public function scopeSelfServiceMetrics($query)
|
||||||
|
{
|
||||||
|
$query->taskAssignType('SELF_SERVICE');
|
||||||
|
$query->threadOpen()->withoutUserId();
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get specific cases unassigned that the user can view
|
* Get specific cases unassigned that the user can view
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
namespace ProcessMaker\Services\Api;
|
namespace ProcessMaker\Services\Api;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use Luracast\Restler\RestException;
|
||||||
use ProcessMaker\BusinessModel\Cases\Draft;
|
use ProcessMaker\BusinessModel\Cases\Draft;
|
||||||
use ProcessMaker\BusinessModel\Cases\Inbox;
|
use ProcessMaker\BusinessModel\Cases\Inbox;
|
||||||
use ProcessMaker\BusinessModel\Cases\Paused;
|
use ProcessMaker\BusinessModel\Cases\Paused;
|
||||||
use ProcessMaker\BusinessModel\Cases\Unassigned;
|
use ProcessMaker\BusinessModel\Cases\Unassigned;
|
||||||
use ProcessMaker\Model\User;
|
|
||||||
use ProcessMaker\Services\Api;
|
use ProcessMaker\Services\Api;
|
||||||
use RBAC;
|
use RBAC;
|
||||||
|
|
||||||
@@ -46,8 +46,6 @@ class Metrics extends Api
|
|||||||
*/
|
*/
|
||||||
public function getProcessTotalCases($caseList, $category = null, $topTen = false, $processes = [])
|
public function getProcessTotalCases($caseList, $category = null, $topTen = false, $processes = [])
|
||||||
{
|
{
|
||||||
$usrUid = $this->getUserId();
|
|
||||||
$usrId = !empty($usrUid) ? User::getId($usrUid) : 0;
|
|
||||||
try {
|
try {
|
||||||
switch ($caseList) {
|
switch ($caseList) {
|
||||||
case 'inbox':
|
case 'inbox':
|
||||||
@@ -61,10 +59,8 @@ class Metrics extends Api
|
|||||||
break;
|
break;
|
||||||
case 'unassigned':
|
case 'unassigned':
|
||||||
$list = new Unassigned();
|
$list = new Unassigned();
|
||||||
$list->setUserUid($usrUid);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$list->setUserId($usrId);
|
|
||||||
$result = $list->getCountersByProcesses($category, $topTen, $processes);
|
$result = $list->getCountersByProcesses($category, $topTen, $processes);
|
||||||
return $result;
|
return $result;
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
@@ -91,8 +87,6 @@ class Metrics extends Api
|
|||||||
*/
|
*/
|
||||||
public function getTotalCasesByRange($caseList, $processId = null, $dateFrom = null, $dateTo = null, $groupBy = 'day')
|
public function getTotalCasesByRange($caseList, $processId = null, $dateFrom = null, $dateTo = null, $groupBy = 'day')
|
||||||
{
|
{
|
||||||
$usrUid = $this->getUserId();
|
|
||||||
$usrId = !empty($usrUid) ? User::getId($usrUid) : 0;
|
|
||||||
try {
|
try {
|
||||||
switch ($caseList) {
|
switch ($caseList) {
|
||||||
case 'inbox':
|
case 'inbox':
|
||||||
@@ -106,10 +100,8 @@ class Metrics extends Api
|
|||||||
break;
|
break;
|
||||||
case 'unassigned':
|
case 'unassigned':
|
||||||
$list = new Unassigned();
|
$list = new Unassigned();
|
||||||
$list->setUserUid($usrUid);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$list->setUserId($usrId);
|
|
||||||
$result = $list->getCountersByRange($processId, $dateFrom, $dateTo, $groupBy);
|
$result = $list->getCountersByRange($processId, $dateFrom, $dateTo, $groupBy);
|
||||||
return $result;
|
return $result;
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
@@ -125,31 +117,21 @@ class Metrics extends Api
|
|||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
* @throws RestException
|
* @throws RestException
|
||||||
|
*
|
||||||
|
* @class AccessControl {@permission TASK_METRICS_VIEW}
|
||||||
*/
|
*/
|
||||||
public function getCountersList()
|
public function getCountersList()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$usrUid = $this->getUserId();
|
|
||||||
$properties['user'] = !empty($usrUid) ? User::getId($usrUid) : 0;
|
|
||||||
|
|
||||||
$listInbox = new Inbox();
|
$listInbox = new Inbox();
|
||||||
$listInbox->setProperties($properties);
|
|
||||||
|
|
||||||
$listDraft = new Draft();
|
$listDraft = new Draft();
|
||||||
$listDraft->setUserUid($usrUid);
|
|
||||||
$listDraft->setProperties($properties);
|
|
||||||
|
|
||||||
$listPaused = new Paused();
|
$listPaused = new Paused();
|
||||||
$listPaused->setProperties($properties);
|
|
||||||
|
|
||||||
$listUnassigned = new Unassigned();
|
$listUnassigned = new Unassigned();
|
||||||
$listUnassigned->setUserUid($usrUid);
|
|
||||||
$listUnassigned->setProperties($properties);
|
|
||||||
|
|
||||||
$casesInbox = $listInbox->getCounter();
|
$casesInbox = $listInbox->getCounterMetrics();
|
||||||
$casesDraft = $listDraft->getCounter();
|
$casesDraft = $listDraft->getCounterMetrics();
|
||||||
$casesPaused = $listPaused->getCounter();
|
$casesPaused = $listPaused->getCounterMetrics();
|
||||||
$casesUnassigned = $listUnassigned->getCounter();
|
$casesUnassigned = $listUnassigned->getCounterMetrics();
|
||||||
|
|
||||||
$result = [
|
$result = [
|
||||||
['List Name' => 'Inbox', 'Total' => $casesInbox, 'Color' => 'green'],
|
['List Name' => 'Inbox', 'Total' => $casesInbox, 'Color' => 'green'],
|
||||||
@@ -179,12 +161,12 @@ class Metrics extends Api
|
|||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
* @throws RestException
|
* @throws RestException
|
||||||
|
*
|
||||||
|
* @class AccessControl {@permission TASK_METRICS_VIEW}
|
||||||
*/
|
*/
|
||||||
public function getCasesRiskByProcess($caseList = 'inbox', $process, $dateFrom = null, $dateTo = null, $riskStatus = 'ON_TIME', $topCases = null)
|
public function getCasesRiskByProcess($caseList = 'inbox', $process, $dateFrom = null, $dateTo = null, $riskStatus = 'ON_TIME', $topCases = null)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$usrUid = $this->getUserId();
|
|
||||||
$usrId = !empty($usrUid) ? User::getId($usrUid) : 0;
|
|
||||||
switch ($caseList) {
|
switch ($caseList) {
|
||||||
case 'inbox':
|
case 'inbox':
|
||||||
$list = new Inbox();
|
$list = new Inbox();
|
||||||
@@ -197,10 +179,8 @@ class Metrics extends Api
|
|||||||
break;
|
break;
|
||||||
case 'unassigned':
|
case 'unassigned':
|
||||||
$list = new Unassigned();
|
$list = new Unassigned();
|
||||||
$list->setUserUid($usrUid);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$list->setUserId($usrId);
|
|
||||||
$result = $list->getCasesRisk($process, $dateFrom, $dateTo, $riskStatus, $topCases);
|
$result = $list->getCasesRisk($process, $dateFrom, $dateTo, $riskStatus, $topCases);
|
||||||
return $result;
|
return $result;
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace ProcessMaker\Services\OAuth2;
|
namespace ProcessMaker\Services\OAuth2;
|
||||||
|
|
||||||
|
use Bootstrap;
|
||||||
use Luracast\Restler\iAuthenticate;
|
use Luracast\Restler\iAuthenticate;
|
||||||
use Luracast\Restler\RestException;
|
use Luracast\Restler\RestException;
|
||||||
use OAuth2\Request;
|
use OAuth2\Request;
|
||||||
@@ -367,7 +368,8 @@ class Server implements iAuthenticate
|
|||||||
$lifetime = 1440;
|
$lifetime = 1440;
|
||||||
}
|
}
|
||||||
|
|
||||||
setcookie($session->getSessionName(), $_COOKIE[$session->getSessionName()], time() + $lifetime, "/", null, false, true);
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + $lifetime, 'secure' => false, 'httponly' => true]);
|
||||||
|
setcookie($session->getSessionName(), $_COOKIE[$session->getSessionName()], $cookieOptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,12 +67,11 @@ Ext.onReady(function () {
|
|||||||
Ext.getCmp('gd').setValue(getFieldOutput(response.gd.version, response.gd.result));
|
Ext.getCmp('gd').setValue(getFieldOutput(response.gd.version, response.gd.result));
|
||||||
Ext.getCmp('multibyte').setValue(getFieldOutput(response.multibyte.version, response.multibyte.result));
|
Ext.getCmp('multibyte').setValue(getFieldOutput(response.multibyte.version, response.multibyte.result));
|
||||||
Ext.getCmp('soap').setValue(getFieldOutput(response.soap.version, response.soap.result));
|
Ext.getCmp('soap').setValue(getFieldOutput(response.soap.version, response.soap.result));
|
||||||
Ext.getCmp("mcrypt").setValue(getFieldOutput(response.mcrypt.version, response.mcrypt.result));
|
|
||||||
Ext.getCmp('ldap').setValue(getFieldOutput(response.ldap.version, response.ldap.result));
|
Ext.getCmp('ldap').setValue(getFieldOutput(response.ldap.version, response.ldap.result));
|
||||||
Ext.getCmp('memory').setValue(getFieldOutput(response.memory.version, response.memory.result));
|
Ext.getCmp('memory').setValue(getFieldOutput(response.memory.version, response.memory.result));
|
||||||
|
|
||||||
dbReq = response.mysql.result;
|
dbReq = response.mysql.result;
|
||||||
phpReq = response.php.result && response.curl.result && response.dom.result && response.gd.result && response.multibyte.result && response.soap.result && response.memory.result && response.mcrypt.result;
|
phpReq = response.php.result && response.curl.result && response.dom.result && response.gd.result && response.multibyte.result && response.soap.result && response.memory.result;
|
||||||
wizard.onClientValidation(0, dbReq && phpReq);
|
wizard.onClientValidation(0, dbReq && phpReq);
|
||||||
wizard.showLoadMask(false);
|
wizard.showLoadMask(false);
|
||||||
},
|
},
|
||||||
@@ -323,11 +322,6 @@ Ext.onReady(function () {
|
|||||||
fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_SOAP'),
|
fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_SOAP'),
|
||||||
id: 'soap'
|
id: 'soap'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
xtype: "displayfield",
|
|
||||||
id: "mcrypt",
|
|
||||||
fieldLabel: _("ID_MCRYPT_SUPPORT")
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
xtype: 'displayfield',
|
xtype: 'displayfield',
|
||||||
fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_LDAP'),
|
fieldLabel: _('ID_PROCESSMAKER_REQUIREMENTS_LDAP'),
|
||||||
|
|||||||
@@ -135,12 +135,6 @@ systemInfo.application = {
|
|||||||
fieldLabel: _("ID_PROCESSMAKER_REQUIREMENTS_SOAP"),
|
fieldLabel: _("ID_PROCESSMAKER_REQUIREMENTS_SOAP"),
|
||||||
value: eval("fieldFormatValue(" + SYSINFO_SOAP + ");")
|
value: eval("fieldFormatValue(" + SYSINFO_SOAP + ");")
|
||||||
},
|
},
|
||||||
{
|
|
||||||
xtype: "displayfield",
|
|
||||||
id: "mcrypt ",
|
|
||||||
fieldLabel: _("ID_MCRYPT_SUPPORT"),
|
|
||||||
value: eval("fieldFormatValue(" + SYSINFO_MCRYPT + ");")
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
xtype: "displayfield",
|
xtype: "displayfield",
|
||||||
id: "ldap",
|
id: "ldap",
|
||||||
|
|||||||
@@ -1,736 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use ProcessMaker\Plugins\PluginRegistry;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sysGeneric - ProcessMaker Bootstrap
|
|
||||||
* this file is used initialize main variables, redirect and dispatch all requests
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Defining the PATH_SEP constant, he we are defining if the the path separator symbol will be '\\' or '/'
|
|
||||||
define('PATH_SEP', '/');
|
|
||||||
|
|
||||||
// Defining the Home Directory
|
|
||||||
$realdocuroot = str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']);
|
|
||||||
$docuroot = explode(PATH_SEP, $realdocuroot);
|
|
||||||
|
|
||||||
array_pop($docuroot);
|
|
||||||
$pathhome = implode(PATH_SEP, $docuroot) . PATH_SEP;
|
|
||||||
|
|
||||||
// try to find automatically the trunk directory where are placed the RBAC and Gulliver directories
|
|
||||||
// in a normal installation you don't need to change it.
|
|
||||||
array_pop($docuroot);
|
|
||||||
$pathTrunk = implode(PATH_SEP, $docuroot) . PATH_SEP;
|
|
||||||
|
|
||||||
array_pop($docuroot);
|
|
||||||
$pathOutTrunk = implode(PATH_SEP, $docuroot) . PATH_SEP;
|
|
||||||
|
|
||||||
define('PATH_HOME', $pathhome);
|
|
||||||
define('PATH_TRUNK', $pathTrunk);
|
|
||||||
define('PATH_OUTTRUNK', $pathOutTrunk);
|
|
||||||
// Including these files we get the PM paths and definitions (that should be just one file.
|
|
||||||
require_once $pathhome . PATH_SEP . 'engine' . PATH_SEP . 'config' . PATH_SEP . 'paths.php';
|
|
||||||
require_once PATH_CORE . 'classes' . PATH_SEP . 'class.system.php';
|
|
||||||
|
|
||||||
// starting session
|
|
||||||
$timelife = ini_get('session.gc_maxlifetime');
|
|
||||||
if (is_null($timelife)) {
|
|
||||||
$timelife = 1440;
|
|
||||||
}
|
|
||||||
ini_set('session.gc_maxlifetime', $timelife);
|
|
||||||
ini_set('session.cookie_lifetime', $timelife);
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
$config = PmSystem::getSystemConfiguration();
|
|
||||||
|
|
||||||
//$e_all = defined('E_DEPRECATED') ? E_ALL & ~E_DEPRECATED : E_ALL;
|
|
||||||
//$e_all = defined('E_STRICT') ? $e_all & ~E_STRICT : $e_all;
|
|
||||||
//$e_all = $config['debug'] ? $e_all : $e_all & ~E_NOTICE;
|
|
||||||
//$e_all = E_ALL & ~ E_DEPRECATED & ~ E_STRICT & ~ E_NOTICE & ~E_WARNING;
|
|
||||||
|
|
||||||
|
|
||||||
$filter = new InputFilter();
|
|
||||||
$config['display_errors'] = $filter->validateInput($config['display_errors']);
|
|
||||||
$config['error_reporting'] = $filter->validateInput($config['error_reporting']);
|
|
||||||
$config['wsdl_cache'] = $filter->validateInput($config['wsdl_cache'], 'int');
|
|
||||||
$config['time_zone'] = $filter->validateInput($config['time_zone']);
|
|
||||||
// Do not change any of these settings directly, use env.ini instead
|
|
||||||
ini_set('display_errors', $filter->validateInput($config['display_errors']));
|
|
||||||
ini_set('error_reporting', $filter->validateInput($config['error_reporting']));
|
|
||||||
ini_set('short_open_tag', 'On');
|
|
||||||
ini_set('default_charset', "UTF-8");
|
|
||||||
ini_set('soap.wsdl_cache_enabled', $config['wsdl_cache']);
|
|
||||||
ini_set('date.timezone',
|
|
||||||
(isset($_SESSION['__SYSTEM_UTC_TIME_ZONE__']) && $_SESSION['__SYSTEM_UTC_TIME_ZONE__']) ? 'UTC' : $config['time_zone']); //Set Time Zone
|
|
||||||
|
|
||||||
define('DEBUG_SQL_LOG', $config['debug_sql']);
|
|
||||||
define('DEBUG_TIME_LOG', $config['debug_time']);
|
|
||||||
define('DEBUG_CALENDAR_LOG', $config['debug_calendar']);
|
|
||||||
define('MEMCACHED_ENABLED', $config['memcached']);
|
|
||||||
define('MEMCACHED_SERVER', $config['memcached_server']);
|
|
||||||
define('TIME_ZONE', ini_get('date.timezone'));
|
|
||||||
|
|
||||||
// IIS Compatibility, SERVER_ADDR doesn't exist on that env, so we need to define it.
|
|
||||||
$_SERVER['SERVER_ADDR'] = isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : $_SERVER['SERVER_NAME'];
|
|
||||||
|
|
||||||
//to do: make different environments. sys
|
|
||||||
|
|
||||||
define('ERROR_SHOW_SOURCE_CODE',
|
|
||||||
true); // enable ERROR_SHOW_SOURCE_CODE to display the source code for any WARNING OR NOTICE
|
|
||||||
//define ( 'ERROR_LOG_NOTICE_ERROR', true ); //enable ERROR_LOG_NOTICE_ERROR to log Notices messages in default apache log
|
|
||||||
|
|
||||||
//check if it is a installation instance
|
|
||||||
if (!defined('PATH_C')) {
|
|
||||||
// is a intallation instance, so we need to define PATH_C and PATH_LANGUAGECONT constants temporarily
|
|
||||||
define('PATH_C', (rtrim(G::sys_get_temp_dir(), PATH_SEP) . PATH_SEP));
|
|
||||||
define('PATH_LANGUAGECONT', PATH_HOME . 'engine/content/languages/');
|
|
||||||
}
|
|
||||||
|
|
||||||
// defining Virtual URLs
|
|
||||||
$virtualURITable = [];
|
|
||||||
$virtualURITable['/plugin/(*)'] = 'plugin';
|
|
||||||
$virtualURITable['/(sys*)/(*.js)'] = 'jsMethod';
|
|
||||||
$virtualURITable['/js/(*)'] = PATH_GULLIVER_HOME . 'js/';
|
|
||||||
$virtualURITable['/jscore/(*)'] = PATH_CORE . 'js/';
|
|
||||||
|
|
||||||
if (defined('PATH_C')) {
|
|
||||||
$virtualURITable['/jsform/(*.js)'] = PATH_C . 'xmlform/';
|
|
||||||
$virtualURITable['/extjs/(*)'] = PATH_C . 'ExtJs/';
|
|
||||||
}
|
|
||||||
|
|
||||||
$virtualURITable['/htmlarea/(*)'] = PATH_THIRDPARTY . 'htmlarea/';
|
|
||||||
$virtualURITable['/sys[a-zA-Z][a-zA-Z0-9]{0,}()/'] = 'sysNamed';
|
|
||||||
$virtualURITable['/(sys*)'] = false;
|
|
||||||
$virtualURITable['/errors/(*)'] = PATH_GULLIVER_HOME . 'methods/errors/';
|
|
||||||
$virtualURITable['/gulliver/(*)'] = PATH_GULLIVER_HOME . 'methods/';
|
|
||||||
$virtualURITable['/controls/(*)'] = PATH_GULLIVER_HOME . 'methods/controls/';
|
|
||||||
$virtualURITable['/html2ps_pdf/(*)'] = PATH_THIRDPARTY . 'html2ps_pdf/';
|
|
||||||
$virtualURITable['/images/'] = 'errorFile';
|
|
||||||
$virtualURITable['/skins/'] = 'errorFile';
|
|
||||||
$virtualURITable['/files/'] = 'errorFile';
|
|
||||||
$virtualURITable['/[a-zA-Z][a-zA-Z0-9]{0,}()'] = 'sysUnnamed';
|
|
||||||
$virtualURITable['/rest/(*)'] = 'rest-service';
|
|
||||||
$virtualURITable['/update/(*)'] = PATH_GULLIVER_HOME . 'methods/update/';
|
|
||||||
$virtualURITable['/(*)'] = PATH_HTML;
|
|
||||||
|
|
||||||
$isRestRequest = false;
|
|
||||||
|
|
||||||
// Verify if we need to redirect or stream the file, if G:VirtualURI returns true means we are going to redirect the page
|
|
||||||
if (G::virtualURI($_SERVER['REQUEST_URI'], $virtualURITable, $realPath)) {
|
|
||||||
// review if the file requested belongs to public_html plugin
|
|
||||||
if (substr($realPath, 0, 6) == 'plugin') {
|
|
||||||
// Another way to get the path of Plugin public_html and stream the correspondent file, By JHL Jul 14, 08
|
|
||||||
// TODO: $pathsQuery will be used?
|
|
||||||
$pathsQuery = '';
|
|
||||||
// Get the query side
|
|
||||||
// Did we use this variable $pathsQuery for something??
|
|
||||||
$forQuery = explode("?", $realPath);
|
|
||||||
if (isset($forQuery[1])) {
|
|
||||||
$pathsQuery = $forQuery[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
//Get that path in array
|
|
||||||
$paths = explode(PATH_SEP, $forQuery[0]);
|
|
||||||
//remove the "plugin" word from
|
|
||||||
$paths[0] = substr($paths[0], 6);
|
|
||||||
//Get the Plugin Folder, always the first element
|
|
||||||
$pluginFolder = array_shift($paths);
|
|
||||||
//The other parts are the realpath into public_html (no matter how many elements)
|
|
||||||
$filePath = implode(PATH_SEP, $paths);
|
|
||||||
$pluginFilename = PATH_PLUGINS . $pluginFolder . PATH_SEP . 'public_html' . PATH_SEP . $filePath;
|
|
||||||
|
|
||||||
if (file_exists($pluginFilename)) {
|
|
||||||
G::streamFile($pluginFilename);
|
|
||||||
}
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
|
|
||||||
$requestUriArray = explode("/", $_SERVER['REQUEST_URI']);
|
|
||||||
|
|
||||||
if ((isset($requestUriArray[1])) && ($requestUriArray[1] == 'skin')) {
|
|
||||||
// This will allow to public images of Custom Skins, By JHL Feb 28, 11
|
|
||||||
$pathsQuery = "";
|
|
||||||
// Get the query side
|
|
||||||
// This way we remove garbage
|
|
||||||
$forQuery = explode("?", $realPath);
|
|
||||||
if (isset($forQuery[1])) {
|
|
||||||
$pathsQuery = $forQuery[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
//Get that path in array
|
|
||||||
$paths = explode(PATH_SEP, $forQuery[0]);
|
|
||||||
$fileToBeStreamed = str_replace("/skin/", PATH_CUSTOM_SKINS, $_SERVER['REQUEST_URI']);
|
|
||||||
|
|
||||||
if (file_exists($fileToBeStreamed)) {
|
|
||||||
G::streamFile($fileToBeStreamed);
|
|
||||||
}
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
switch ($realPath) {
|
|
||||||
case 'sysUnnamed' :
|
|
||||||
require_once('sysUnnamed.php');
|
|
||||||
die;
|
|
||||||
break;
|
|
||||||
case 'sysNamed' :
|
|
||||||
header('location : ' . $_SERVER['REQUEST_URI'] . '/' . SYS_LANG . '/classic/login/login');
|
|
||||||
die;
|
|
||||||
break;
|
|
||||||
case 'jsMethod' :
|
|
||||||
G::parseURI(getenv("REQUEST_URI"));
|
|
||||||
$filename = PATH_METHODS . SYS_COLLECTION . '/' . SYS_TARGET . '.js';
|
|
||||||
G::streamFile($filename);
|
|
||||||
die;
|
|
||||||
break;
|
|
||||||
case 'errorFile':
|
|
||||||
header("location: /errors/error404.php?url=" . urlencode($_SERVER['REQUEST_URI']));
|
|
||||||
if (DEBUG_TIME_LOG) {
|
|
||||||
G::logTimeByPage();
|
|
||||||
} //log this page
|
|
||||||
die;
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
if (substr($realPath, 0, 12) == 'rest-service') {
|
|
||||||
$isRestRequest = true;
|
|
||||||
} else {
|
|
||||||
$realPath = explode('?', $realPath);
|
|
||||||
$realPath[0] .= strpos(basename($realPath[0]), '.') === false ? '.php' : '';
|
|
||||||
G::streamFile($realPath[0]);
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}//virtual URI parser
|
|
||||||
|
|
||||||
// the request correspond to valid php page, now parse the URI
|
|
||||||
G::parseURI(getenv("REQUEST_URI"), $isRestRequest);
|
|
||||||
|
|
||||||
$arrayUpdating = G::isPMUnderUpdating();
|
|
||||||
if ($arrayUpdating['action']) {
|
|
||||||
if ($arrayUpdating['workspace'] == "true" || $arrayUpdating['workspace'] == SYS_TEMP) {
|
|
||||||
header("location: /update/updating.php");
|
|
||||||
if (DEBUG_TIME_LOG) {
|
|
||||||
G::logTimeByPage();
|
|
||||||
}
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// verify if index.html exists
|
|
||||||
if (!file_exists(PATH_HTML . 'index.html')) { // if not, create it from template
|
|
||||||
file_put_contents(
|
|
||||||
PATH_HTML . 'index.html',
|
|
||||||
G::parseTemplate(PATH_TPL . "index.html",
|
|
||||||
array("lang" => ((defined("SYS_LANG") && SYS_LANG != "") ? SYS_LANG : "en"), "skin" => SYS_SKIN))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
define('SYS_URI', '/sys' . SYS_TEMP . '/' . SYS_LANG . '/' . SYS_SKIN . '/');
|
|
||||||
|
|
||||||
// defining the serverConf singleton
|
|
||||||
if (defined('PATH_DATA') && file_exists(PATH_DATA)) {
|
|
||||||
//Instance Server Configuration Singleton
|
|
||||||
$oServerConf = ServerConf::getSingleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call Gulliver Classes
|
|
||||||
|
|
||||||
|
|
||||||
// Create headPublisher singleton
|
|
||||||
|
|
||||||
$oHeadPublisher = headPublisher::getSingleton();
|
|
||||||
|
|
||||||
//Load filter class
|
|
||||||
|
|
||||||
$filter = new InputFilter();
|
|
||||||
|
|
||||||
// Installer, redirect to install if we don't have a valid shared data folder
|
|
||||||
if (!defined('PATH_DATA') || !file_exists(PATH_DATA)) {
|
|
||||||
|
|
||||||
// new installer, extjs based
|
|
||||||
define('PATH_DATA', PATH_C);
|
|
||||||
require_once ( PATH_CONTROLLERS . 'InstallerModule.php' );
|
|
||||||
$controller = InstallerModule::class;
|
|
||||||
|
|
||||||
// if the method name is empty set default to index method
|
|
||||||
if (strpos(SYS_TARGET, '/') !== false) {
|
|
||||||
list($controller, $controllerAction) = explode('/', SYS_TARGET);
|
|
||||||
} else {
|
|
||||||
$controllerAction = SYS_TARGET;
|
|
||||||
}
|
|
||||||
|
|
||||||
$controllerAction = ($controllerAction != '' && $controllerAction != 'login') ? $controllerAction : 'index';
|
|
||||||
|
|
||||||
// create the installer controller and call its method
|
|
||||||
if (is_callable([InstallerModule::class, $controllerAction])) {
|
|
||||||
$installer = new $controller();
|
|
||||||
$installer->setHttpRequestData($_REQUEST);
|
|
||||||
$installer->call($controllerAction);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$_SESSION['phpFileNotFound'] = $_SERVER['REQUEST_URI'];
|
|
||||||
header ("location: /errors/error404.php?url=" . urlencode($_SERVER['REQUEST_URI']));
|
|
||||||
}
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load Language Translation
|
|
||||||
G::LoadTranslationObject(defined('SYS_LANG') ? SYS_LANG : "en");
|
|
||||||
|
|
||||||
// look for a disabled workspace
|
|
||||||
if ($oServerConf->isWSDisabled(SYS_TEMP)) {
|
|
||||||
$aMessage['MESSAGE'] = G::LoadTranslation('ID_DISB_WORKSPACE');
|
|
||||||
$G_PUBLISH = new Publisher;
|
|
||||||
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage);
|
|
||||||
G::RenderPage('publish');
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
|
|
||||||
// database and workspace definition
|
|
||||||
// if SYS_TEMP exists, the URL has a workspace, now we need to verify if exists their db.php file
|
|
||||||
if (defined('SYS_TEMP') && SYS_TEMP != '') {
|
|
||||||
//this is the default, the workspace db.php file is in /shared/workflow/sites/SYS_SYS
|
|
||||||
if (file_exists(PATH_DB . SYS_TEMP . '/db.php')) {
|
|
||||||
$pathFile = $filter->validateInput(PATH_DB . SYS_TEMP . '/db.php', 'path');
|
|
||||||
require_once($pathFile);
|
|
||||||
define('SYS_SYS', SYS_TEMP);
|
|
||||||
|
|
||||||
// defining constant for workspace shared directory
|
|
||||||
define('PATH_WORKSPACE', PATH_DB . config("system.workspace") . PATH_SEP);
|
|
||||||
// including workspace shared classes -> particularlly for pmTables
|
|
||||||
set_include_path(get_include_path() . PATH_SEPARATOR . PATH_WORKSPACE);
|
|
||||||
} else {
|
|
||||||
G::SendTemporalMessage('ID_NOT_WORKSPACE', "error");
|
|
||||||
G::header('location: /sys/' . SYS_LANG . '/' . SYS_SKIN . '/main/sysLogin?errno=2');
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
} else { //when we are in global pages, outside any valid workspace
|
|
||||||
if (SYS_TARGET === 'newSite') {
|
|
||||||
$phpFile = G::ExpandPath('methods') . SYS_COLLECTION . "/" . SYS_TARGET . '.php';
|
|
||||||
$phpFile = $filter->validateInput($phpFile, 'path');
|
|
||||||
require_once($phpFile);
|
|
||||||
die();
|
|
||||||
} else {
|
|
||||||
if (SYS_TARGET == "dbInfo") { //Show dbInfo when no SYS_SYS
|
|
||||||
$pathFile = PATH_METHODS . 'login/dbInfo.php';
|
|
||||||
$pathFile = $filter->validateInput($pathFile, 'path');
|
|
||||||
require_once($pathFile);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if (substr(SYS_SKIN, 0,
|
|
||||||
2) === 'ux' && SYS_TARGET != 'sysLoginVerify') { // new ux sysLogin - extjs based form
|
|
||||||
$pathFile = $filter->validateInput(PATH_CONTROLLERS . 'main.php', 'path');
|
|
||||||
require_once $pathFile;
|
|
||||||
$controllerClass = 'Main';
|
|
||||||
$controllerAction = SYS_TARGET == 'sysLoginVerify' ? SYS_TARGET : 'sysLogin';
|
|
||||||
//if the method exists
|
|
||||||
if (is_callable(Array($controllerClass, $controllerAction))) {
|
|
||||||
$controller = new $controllerClass();
|
|
||||||
$controller->setHttpRequestData($_REQUEST);
|
|
||||||
$controller->call($controllerAction);
|
|
||||||
}
|
|
||||||
} else { // classic sysLogin interface
|
|
||||||
$pathFile = PATH_METHODS . 'login/sysLogin.php';
|
|
||||||
$pathFile = $filter->validateInput($pathFile, 'path');
|
|
||||||
require_once($pathFile);
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (DEBUG_TIME_LOG) {
|
|
||||||
G::logTimeByPage();
|
|
||||||
} //log this page
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PM Paths DATA
|
|
||||||
define('PATH_DATA_SITE', PATH_DATA . 'sites/' . config("system.workspace") . '/');
|
|
||||||
define('PATH_DOCUMENT', PATH_DATA_SITE . 'files/');
|
|
||||||
define('PATH_DATA_MAILTEMPLATES', PATH_DATA_SITE . 'mailTemplates/');
|
|
||||||
define('PATH_DATA_PUBLIC', PATH_DATA_SITE . 'public/');
|
|
||||||
define('PATH_DATA_REPORTS', PATH_DATA_SITE . 'reports/');
|
|
||||||
define('PATH_DYNAFORM', PATH_DATA_SITE . 'xmlForms/');
|
|
||||||
define('PATH_IMAGES_ENVIRONMENT_FILES', PATH_DATA_SITE . 'usersFiles' . PATH_SEP);
|
|
||||||
define('PATH_IMAGES_ENVIRONMENT_USERS', PATH_DATA_SITE . 'usersPhotographies' . PATH_SEP);
|
|
||||||
define('SERVER_NAME', $_SERVER ['SERVER_NAME']);
|
|
||||||
define('SERVER_PORT', $_SERVER ['SERVER_PORT']);
|
|
||||||
|
|
||||||
// create memcached singleton
|
|
||||||
$memcache = PMmemcached::getSingleton(config("system.workspace"));
|
|
||||||
|
|
||||||
// verify configuration for rest service
|
|
||||||
if ($isRestRequest) {
|
|
||||||
// disable until confirm that rest is enabled & configured on rest-config.ini file
|
|
||||||
$isRestRequest = false;
|
|
||||||
$confFile = '';
|
|
||||||
$restApiClassPath = '';
|
|
||||||
|
|
||||||
// try load and getting rest configuration
|
|
||||||
if (file_exists(PATH_DATA_SITE . 'rest-config.ini')) {
|
|
||||||
$confFile = PATH_DATA_SITE . 'rest-config.ini';
|
|
||||||
$restApiClassPath = PATH_DATA_SITE;
|
|
||||||
} elseif (file_exists(PATH_CONFIG . 'rest-config.ini')) {
|
|
||||||
$confFile = PATH_CONFIG . 'rest-config.ini';
|
|
||||||
}
|
|
||||||
if (!empty($confFile) && $restConfig = @parse_ini_file($confFile, true)) {
|
|
||||||
if (array_key_exists('enable_service', $restConfig)) {
|
|
||||||
if ($restConfig['enable_service'] == 'true' || $restConfig['enable_service'] == '1') {
|
|
||||||
$isRestRequest = true; // rest service enabled
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//here we are loading all plugins registered
|
|
||||||
//the singleton has a list of enabled plugins
|
|
||||||
$oPluginRegistry = PluginRegistry::loadSingleton();
|
|
||||||
|
|
||||||
// setup propel definitions and logging
|
|
||||||
require_once("propel/Propel.php");
|
|
||||||
require_once("creole/Creole.php");
|
|
||||||
|
|
||||||
if (defined('DEBUG_SQL_LOG') && DEBUG_SQL_LOG) {
|
|
||||||
define('PM_PID', mt_rand(1, 999999));
|
|
||||||
require_once 'Log.php';
|
|
||||||
|
|
||||||
// register debug connection decorator driver
|
|
||||||
Creole::registerDriver('*', 'creole.contrib.DebugConnection');
|
|
||||||
|
|
||||||
// initialize Propel with converted config file
|
|
||||||
Propel::init(PATH_CORE . "config/databases.php");
|
|
||||||
|
|
||||||
// unified log file for all databases
|
|
||||||
$logFile = PATH_DATA . 'log' . PATH_SEP . 'propel.log';
|
|
||||||
$logger = Log::singleton('file', $logFile, 'wf ' . config("system.workspace"), null, PEAR_LOG_INFO);
|
|
||||||
Propel::setLogger($logger);
|
|
||||||
// log file for workflow database
|
|
||||||
$con = Propel::getConnection('workflow');
|
|
||||||
if ($con instanceof DebugConnection) {
|
|
||||||
$con->setLogger($logger);
|
|
||||||
}
|
|
||||||
// log file for rbac database
|
|
||||||
$con = Propel::getConnection('rbac');
|
|
||||||
|
|
||||||
if ($con instanceof DebugConnection) {
|
|
||||||
$con->setLogger($logger);
|
|
||||||
}
|
|
||||||
|
|
||||||
// log file for report database
|
|
||||||
$con = Propel::getConnection('rp');
|
|
||||||
if ($con instanceof DebugConnection) {
|
|
||||||
$con->setLogger($logger);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Propel::init(PATH_CORE . "config/databases.php");
|
|
||||||
}
|
|
||||||
|
|
||||||
Creole::registerDriver('dbarray', 'creole.contrib.DBArrayConnection');
|
|
||||||
|
|
||||||
// Session Initializations
|
|
||||||
ini_set('session.auto_start', '1');
|
|
||||||
|
|
||||||
// The register_globals feature has been DEPRECATED as of PHP 5.3.0. default value Off.
|
|
||||||
// ini_set( 'register_globals', 'Off' );
|
|
||||||
//session_start();
|
|
||||||
ob_start();
|
|
||||||
|
|
||||||
// Rebuild the base Workflow translations if not exists
|
|
||||||
if (!is_file(PATH_LANGUAGECONT . 'translation.en')) {
|
|
||||||
require_once("classes/model/Translation.php");
|
|
||||||
$fields = Translation::generateFileTranslation('en');
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Verify if the language set into url is defined in translations env.
|
|
||||||
if (SYS_LANG != 'en' && !is_file(PATH_LANGUAGECONT . 'translation.' . SYS_LANG)) {
|
|
||||||
require_once("classes/model/Translation.php");
|
|
||||||
$fields = Translation::generateFileTranslation(SYS_LANG);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup plugins
|
|
||||||
$oPluginRegistry->setupPlugins(); //get and setup enabled plugins
|
|
||||||
$avoidChangedWorkspaceValidation = false;
|
|
||||||
|
|
||||||
// Load custom Classes and Model from Plugins.
|
|
||||||
G::LoadAllPluginModelClasses();
|
|
||||||
|
|
||||||
// jump to php file in methods directory
|
|
||||||
$collectionPlugin = '';
|
|
||||||
if ($oPluginRegistry->isRegisteredFolder(SYS_COLLECTION)) {
|
|
||||||
$phpFile = PATH_PLUGINS . SYS_COLLECTION . PATH_SEP . SYS_TARGET . '.php';
|
|
||||||
$targetPlugin = explode('/', SYS_TARGET);
|
|
||||||
$collectionPlugin = $targetPlugin[0];
|
|
||||||
$avoidChangedWorkspaceValidation = true;
|
|
||||||
} else {
|
|
||||||
$phpFile = G::ExpandPath('methods') . SYS_COLLECTION . PATH_SEP . SYS_TARGET . '.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
// services is a special folder,
|
|
||||||
if (SYS_COLLECTION == 'services') {
|
|
||||||
$avoidChangedWorkspaceValidation = true;
|
|
||||||
$targetPlugin = explode('/', SYS_TARGET);
|
|
||||||
|
|
||||||
if ($targetPlugin[0] == 'webdav') {
|
|
||||||
$phpFile = G::ExpandPath('methods') . SYS_COLLECTION . PATH_SEP . 'webdav.php';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SYS_COLLECTION == 'login' && SYS_TARGET == 'login') {
|
|
||||||
$avoidChangedWorkspaceValidation = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//the index.php file, this new feature will allow automatically redirects to valid php file inside any methods folder
|
|
||||||
/* DEPRECATED
|
|
||||||
if ( SYS_TARGET == '' ) {
|
|
||||||
$phpFile = str_replace ( '.php', 'index.php', $phpFile );
|
|
||||||
$phpFile = include ( $phpFile );
|
|
||||||
}*/
|
|
||||||
$bWE = false;
|
|
||||||
$isControllerCall = false;
|
|
||||||
if (substr(SYS_COLLECTION, 0, 8) === 'gulliver') {
|
|
||||||
$phpFile = PATH_GULLIVER_HOME . 'methods/' . substr(SYS_COLLECTION, 8) . SYS_TARGET . '.php';
|
|
||||||
} else {
|
|
||||||
//when the file is part of the public directory of any PROCESS, this a ProcessMaker feature
|
|
||||||
if (preg_match('/^[0-9][[:alnum:]]+$/', SYS_COLLECTION) == 1) { //the pattern is /sysSYS/LANG/SKIN/PRO_UID/file
|
|
||||||
$auxPart = explode('/', $_SERVER['REQUEST_URI']);
|
|
||||||
$aAux = explode('?', $auxPart[count($auxPart) - 1]);
|
|
||||||
//$extPart = explode ( '.' , $auxPart[ count($auxPart)-1] );
|
|
||||||
$extPart = explode('.', $aAux[0]);
|
|
||||||
$queryPart = isset($aAux[1]) ? $aAux[1] : "";
|
|
||||||
$extension = $extPart[count($extPart) - 1];
|
|
||||||
$phpFile = PATH_DATA_SITE . 'public' . PATH_SEP . SYS_COLLECTION . PATH_SEP . urldecode($auxPart[count($auxPart) - 1]);
|
|
||||||
$aAux = explode('?', $phpFile);
|
|
||||||
$phpFile = $aAux[0];
|
|
||||||
|
|
||||||
if ($extension != 'php') {
|
|
||||||
G::streamFile($phpFile);
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
|
|
||||||
$avoidChangedWorkspaceValidation = true;
|
|
||||||
$bWE = true;
|
|
||||||
//$phpFile = PATH_DATA_SITE . 'public' . PATH_SEP . SYS_COLLECTION . PATH_SEP . $auxPart[ count($auxPart)-1];
|
|
||||||
}
|
|
||||||
|
|
||||||
//erik: verify if it is a Controller Class or httpProxyController Class
|
|
||||||
if (is_file(PATH_CONTROLLERS . SYS_COLLECTION . '.php')) {
|
|
||||||
$pathFile = $filter->validateInput(PATH_CONTROLLERS . SYS_COLLECTION . '.php', 'path');
|
|
||||||
require_once $pathFile;
|
|
||||||
$controllerClass = SYS_COLLECTION;
|
|
||||||
//if the method name is empty set default to index method
|
|
||||||
$controllerAction = SYS_TARGET != '' ? SYS_TARGET : 'index';
|
|
||||||
//if the method exists
|
|
||||||
if (is_callable(Array($controllerClass, $controllerAction))) {
|
|
||||||
$isControllerCall = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$isControllerCall && !file_exists($phpFile) && !$isRestRequest) {
|
|
||||||
$_SESSION['phpFileNotFound'] = $_SERVER['REQUEST_URI'];
|
|
||||||
header("location: /errors/error404.php?url=" . urlencode($_SERVER['REQUEST_URI']));
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//redirect to login, if user changed the workspace in the URL
|
|
||||||
if (!$avoidChangedWorkspaceValidation && isset($_SESSION['WORKSPACE']) && $_SESSION['WORKSPACE'] != config("system.workspace")) {
|
|
||||||
$_SESSION['WORKSPACE'] = config("system.workspace");
|
|
||||||
G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_SYSTEM', "error");
|
|
||||||
// verify if the current skin is a 'ux' variant
|
|
||||||
$urlPart = substr(SYS_SKIN, 0, 2) == 'ux' && SYS_SKIN != 'uxs' ? '/main/login' : '/login/login';
|
|
||||||
|
|
||||||
header('Location: /sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . $urlPart);
|
|
||||||
die;
|
|
||||||
}
|
|
||||||
|
|
||||||
// enable rbac
|
|
||||||
$RBAC = RBAC::getSingleton(PATH_DATA, session_id());
|
|
||||||
$RBAC->sSystem = 'PROCESSMAKER';
|
|
||||||
|
|
||||||
// define and send Headers for all pages
|
|
||||||
if (!defined('EXECUTE_BY_CRON')) {
|
|
||||||
header("Expires: " . gmdate("D, d M Y H:i:s", mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'))) . " GMT");
|
|
||||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
|
||||||
header("Cache-Control: no-store, no-cache, must-revalidate");
|
|
||||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
|
||||||
header("Pragma: no-cache");
|
|
||||||
|
|
||||||
// get the language direction from ServerConf
|
|
||||||
define('SYS_LANG_DIRECTION', $oServerConf->getLanDirection());
|
|
||||||
|
|
||||||
if ((isset($_SESSION['USER_LOGGED'])) && (!(isset($_GET['sid'])))) {
|
|
||||||
if (PHP_VERSION < 5.2) {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', '; HttpOnly');
|
|
||||||
} else {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', null, false, true);
|
|
||||||
}
|
|
||||||
$RBAC->initRBAC();
|
|
||||||
//using optimization with memcache, the user data will be in memcache 8 hours, or until session id goes invalid
|
|
||||||
$memKey = 'rbacSession' . session_id();
|
|
||||||
if (($RBAC->aUserInfo = $memcache->get($memKey)) === false) {
|
|
||||||
$RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']);
|
|
||||||
$memcache->set($memKey, $RBAC->aUserInfo, PMmemcached::EIGHT_HOURS);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// this is the blank list to allow execute scripts with no login (without session started)
|
|
||||||
$noLoginFiles = $noLoginFolders = [];
|
|
||||||
$noLoginFiles[] = 'login';
|
|
||||||
$noLoginFiles[] = 'authentication';
|
|
||||||
$noLoginFiles[] = 'login_Ajax';
|
|
||||||
$noLoginFiles[] = 'dbInfo';
|
|
||||||
$noLoginFiles[] = 'sysLoginVerify';
|
|
||||||
$noLoginFiles[] = 'processes_Ajax';
|
|
||||||
$noLoginFiles[] = 'showLogoFile';
|
|
||||||
$noLoginFiles[] = 'forgotPassword';
|
|
||||||
$noLoginFiles[] = 'retrivePassword';
|
|
||||||
$noLoginFiles[] = 'genericAjax';
|
|
||||||
|
|
||||||
$noLoginFolders[] = 'services';
|
|
||||||
$noLoginFolders[] = 'tracker';
|
|
||||||
$noLoginFolders[] = 'installer';
|
|
||||||
|
|
||||||
// This sentence is used when you lost the Session
|
|
||||||
if (!in_array(SYS_TARGET, $noLoginFiles)
|
|
||||||
&& !in_array(SYS_COLLECTION, $noLoginFolders)
|
|
||||||
&& $bWE != true && $collectionPlugin != 'services'
|
|
||||||
&& !$isRestRequest
|
|
||||||
) {
|
|
||||||
$bRedirect = true;
|
|
||||||
|
|
||||||
if (isset($_GET['sid'])) {
|
|
||||||
$oSessions = new Sessions();
|
|
||||||
if ($aSession = $oSessions->verifySession($_GET['sid'])) {
|
|
||||||
require_once 'classes/model/Users.php';
|
|
||||||
$oUser = new Users();
|
|
||||||
$aUser = $oUser->load($aSession['USR_UID']);
|
|
||||||
initUserSession($aUser['USR_UID'], $aUser['USR_USERNAME']);
|
|
||||||
$bRedirect = false;
|
|
||||||
if (PHP_VERSION < 5.2) {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', '; HttpOnly');
|
|
||||||
} else {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', null, false, true);
|
|
||||||
}
|
|
||||||
$RBAC->initRBAC();
|
|
||||||
$RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']);
|
|
||||||
$memKey = 'rbacSession' . session_id();
|
|
||||||
$memcache->set($memKey, $RBAC->aUserInfo, PMmemcached::EIGHT_HOURS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((isset($_SESSION['USER_LOGGED'])) && (!(isset($_GET['sid'])))) {
|
|
||||||
if (PHP_VERSION < 5.2) {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', '; HttpOnly');
|
|
||||||
} else {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', null, false, true);
|
|
||||||
}
|
|
||||||
$RBAC->initRBAC();
|
|
||||||
//using optimization with memcache, the user data will be in memcache 8 hours, or until session id goes invalid
|
|
||||||
$memKey = 'rbacSession' . session_id();
|
|
||||||
if (($RBAC->aUserInfo = $memcache->get($memKey)) === false) {
|
|
||||||
$RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']);
|
|
||||||
$memcache->set($memKey, $RBAC->aUserInfo, PMmemcached::EIGHT_HOURS);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// this is the blank list to allow execute scripts with no login (without session started)
|
|
||||||
$noLoginFiles = $noLoginFolders = [];
|
|
||||||
$noLoginFiles[] = 'login';
|
|
||||||
$noLoginFiles[] = 'authentication';
|
|
||||||
$noLoginFiles[] = 'login_Ajax';
|
|
||||||
$noLoginFiles[] = 'dbInfo';
|
|
||||||
$noLoginFiles[] = 'sysLoginVerify';
|
|
||||||
$noLoginFiles[] = 'processes_Ajax';
|
|
||||||
$noLoginFiles[] = 'showLogoFile';
|
|
||||||
$noLoginFiles[] = 'forgotPassword';
|
|
||||||
$noLoginFiles[] = 'retrivePassword';
|
|
||||||
$noLoginFiles[] = 'genericAjax';
|
|
||||||
|
|
||||||
$noLoginFolders[] = 'services';
|
|
||||||
$noLoginFolders[] = 'tracker';
|
|
||||||
$noLoginFolders[] = 'installer';
|
|
||||||
|
|
||||||
// This sentence is used when you lost the Session
|
|
||||||
if (!in_array(SYS_TARGET, $noLoginFiles)
|
|
||||||
&& !in_array(SYS_COLLECTION, $noLoginFolders)
|
|
||||||
&& $bWE != true && $collectionPlugin != 'services'
|
|
||||||
&& !$isRestRequest
|
|
||||||
) {
|
|
||||||
$bRedirect = true;
|
|
||||||
|
|
||||||
if (isset($_GET['sid'])) {
|
|
||||||
$oSessions = new Sessions();
|
|
||||||
if ($aSession = $oSessions->verifySession($_GET['sid'])) {
|
|
||||||
require_once 'classes/model/Users.php';
|
|
||||||
$oUser = new Users();
|
|
||||||
$aUser = $oUser->load($aSession['USR_UID']);
|
|
||||||
$_SESSION['USER_LOGGED'] = $aUser['USR_UID'];
|
|
||||||
$_SESSION['USR_USERNAME'] = $aUser['USR_USERNAME'];
|
|
||||||
$bRedirect = false;
|
|
||||||
if (PHP_VERSION < 5.2) {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', '; HttpOnly');
|
|
||||||
} else {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', null, false, true);
|
|
||||||
}
|
|
||||||
$RBAC->initRBAC();
|
|
||||||
$RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']);
|
|
||||||
$memKey = 'rbacSession' . session_id();
|
|
||||||
$memcache->set($memKey, $RBAC->aUserInfo, PMmemcached::EIGHT_HOURS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($bRedirect) {
|
|
||||||
if (substr(SYS_SKIN, 0,
|
|
||||||
2) == 'ux' && SYS_SKIN != 'uxs'
|
|
||||||
) { // verify if the current skin is a 'ux' variant
|
|
||||||
$loginUrl = 'main/login';
|
|
||||||
} else {
|
|
||||||
if (strpos($_SERVER['REQUEST_URI'],
|
|
||||||
'/home') !== false
|
|
||||||
) { //verify is it is using the uxs skin for simplified interface
|
|
||||||
$loginUrl = 'home/login';
|
|
||||||
} else {
|
|
||||||
$loginUrl = 'login/login'; // just set up the classic login
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($_POST)) {
|
|
||||||
header('location: ' . SYS_URI . $loginUrl . '?u=' . urlencode($_SERVER['REQUEST_URI']));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if ($isControllerCall) {
|
|
||||||
header("HTTP/1.0 302 session lost in controller");
|
|
||||||
} else {
|
|
||||||
header('location: ' . SYS_URI . $loginUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
die();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$_SESSION['phpLastFileFound'] = $_SERVER['REQUEST_URI'];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* New feature for Gulliver framework to support Controllers & HttpProxyController classes handling
|
|
||||||
*
|
|
||||||
* @author Erik Amaru Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
|
|
||||||
*/
|
|
||||||
if ($isControllerCall) { //Instance the Controller object and call the request method
|
|
||||||
$controller = new $controllerClass();
|
|
||||||
$controller->setHttpRequestData($_REQUEST);
|
|
||||||
$controller->call($controllerAction);
|
|
||||||
} elseif ($isRestRequest) {
|
|
||||||
G::dispatchRestService(SYS_TARGET, $restConfig, $restApiClassPath);
|
|
||||||
} else {
|
|
||||||
require_once $filter->validateInput($phpFile, 'path');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (defined('SKIP_HEADERS')) {
|
|
||||||
header("Expires: " . gmdate("D, d M Y H:i:s",
|
|
||||||
mktime(0, 0, 0, date('m'), date('d'), date('Y') + 1)) . " GMT");
|
|
||||||
header('Cache-Control: public');
|
|
||||||
header('Pragma: ');
|
|
||||||
}
|
|
||||||
|
|
||||||
ob_end_flush();
|
|
||||||
if (DEBUG_TIME_LOG) {
|
|
||||||
G::logTimeByPage(); //log this page
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -98,7 +98,8 @@ if (!isset($_SESSION['USER_LOGGED']) || $_SESSION['USER_LOGGED'] != $decodedResp
|
|||||||
session_start();
|
session_start();
|
||||||
session_regenerate_id();
|
session_regenerate_id();
|
||||||
|
|
||||||
setcookie("workspaceSkin", $enviroment, time() + (24 * 60 * 60), "/sys" . $enviroment, null, G::is_https(), true);
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + (24 * 60 * 60), 'path' => '/sys' . $enviroment, 'httponly' => true]);
|
||||||
|
setcookie('workspaceSkin', $enviroment, $cookieOptions);
|
||||||
|
|
||||||
$_SESSION = array();
|
$_SESSION = array();
|
||||||
$_SESSION['__EE_INSTALLATION__'] = 2;
|
$_SESSION['__EE_INSTALLATION__'] = 2;
|
||||||
|
|||||||
@@ -944,11 +944,8 @@ if (!defined('EXECUTE_BY_CRON')) {
|
|||||||
(!(preg_match("/safari/i", $_SERVER ['HTTP_USER_AGENT']) == 1 && preg_match("/chrome/i",
|
(!(preg_match("/safari/i", $_SERVER ['HTTP_USER_AGENT']) == 1 && preg_match("/chrome/i",
|
||||||
$_SERVER ['HTTP_USER_AGENT']) == 0) ||
|
$_SERVER ['HTTP_USER_AGENT']) == 0) ||
|
||||||
$config['safari_cookie_lifetime'] == 1)) {
|
$config['safari_cookie_lifetime'] == 1)) {
|
||||||
if (PHP_VERSION < 5.2) {
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + $timelife, 'httponly' => true]);
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', '; HttpOnly');
|
setcookie(session_name(), session_id(), $cookieOptions);
|
||||||
} else {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', null, G::is_https(), true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$RBAC->initRBAC();
|
$RBAC->initRBAC();
|
||||||
//using optimization with memcache, the user data will be in memcache 8 hours, or until session id goes invalid
|
//using optimization with memcache, the user data will be in memcache 8 hours, or until session id goes invalid
|
||||||
@@ -1024,11 +1021,8 @@ if (!defined('EXECUTE_BY_CRON')) {
|
|||||||
(!(preg_match("/safari/i", $_SERVER ['HTTP_USER_AGENT']) == 1 && preg_match("/chrome/i",
|
(!(preg_match("/safari/i", $_SERVER ['HTTP_USER_AGENT']) == 1 && preg_match("/chrome/i",
|
||||||
$_SERVER ['HTTP_USER_AGENT']) == 0) ||
|
$_SERVER ['HTTP_USER_AGENT']) == 0) ||
|
||||||
$config['safari_cookie_lifetime'] == 1)) {
|
$config['safari_cookie_lifetime'] == 1)) {
|
||||||
if (PHP_VERSION < 5.2) {
|
$cookieOptions = Bootstrap::buildCookieOptions(['expires' => time() + $timelife, 'httponly' => true]);
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', '; HttpOnly');
|
setcookie(session_name(), session_id(), $cookieOptions);
|
||||||
} else {
|
|
||||||
setcookie(session_name(), session_id(), time() + $timelife, '/', null, G::is_https(), true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
$RBAC->initRBAC();
|
$RBAC->initRBAC();
|
||||||
$RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']);
|
$RBAC->loadUserRolePermission($RBAC->sSystem, $_SESSION['USER_LOGGED']);
|
||||||
|
|||||||
Reference in New Issue
Block a user