Merged develop into feature/PMCORE-639

This commit is contained in:
Paula Quispe
2020-10-16 12:14:28 -04:00
33 changed files with 1212 additions and 200 deletions

View File

@@ -15,7 +15,7 @@ jobs:
name: Run Test Units
command: |
mkdir coverage
vendor/phpunit/phpunit/phpunit --stop-on-failure --testdox-html coverage/result.html --coverage-html coverage --verbose tests/unit/
vendor/phpunit/phpunit/phpunit --testdox-html coverage/result.html --coverage-html coverage --verbose tests/unit/
- store_artifacts:
path: coverage
destination: coverage

View File

@@ -33,7 +33,7 @@
"require": {
"php": ">=7.1",
"laravel/framework": "5.7.*",
"luracast/restler": "^3.0",
"luracast/restler": "3.0",
"bshaffer/oauth2-server-php": "v1.0",
"colosa/pmui": "release/3.5.0-dev",
"colosa/michelangelofe": "release/3.5.0-dev",

408
composer.lock generated
View File

@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "dfa09f203f7f454deac5cd0bcb07c8dc",
"content-hash": "5fee2ceaf7f4d761c96852141e566de9",
"packages": [
{
"name": "aws/aws-sdk-php",
"version": "3.154.5",
"version": "3.158.6",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "50b1ef32d51d80f35a691e13c34f67b920765c18"
"reference": "4e912c1ae4d4b3538ada36ac1478f980f9bdf329"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/50b1ef32d51d80f35a691e13c34f67b920765c18",
"reference": "50b1ef32d51d80f35a691e13c34f67b920765c18",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/4e912c1ae4d4b3538ada36ac1478f980f9bdf329",
"reference": "4e912c1ae4d4b3538ada36ac1478f980f9bdf329",
"shasum": ""
},
"require": {
@@ -89,7 +89,7 @@
"s3",
"sdk"
],
"time": "2020-09-17T18:22:25+00:00"
"time": "2020-10-09T18:11:48+00:00"
},
{
"name": "bshaffer/oauth2-server-php",
@@ -474,20 +474,20 @@
},
{
"name": "dragonmantank/cron-expression",
"version": "v2.3.0",
"version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git",
"reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27"
"reference": "69ab0de70a3fdc7b99fe8fa9b1ef073e3b2b5e00"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27",
"reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27",
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/69ab0de70a3fdc7b99fe8fa9b1ef073e3b2b5e00",
"reference": "69ab0de70a3fdc7b99fe8fa9b1ef073e3b2b5e00",
"shasum": ""
},
"require": {
"php": "^7.0"
"php": "^7.1|^8.0"
},
"require-dev": {
"phpunit/phpunit": "^6.4|^7.0"
@@ -524,20 +524,26 @@
"cron",
"schedule"
],
"time": "2019-03-31T00:38:28+00:00"
"funding": [
{
"url": "https://github.com/dragonmantank",
"type": "github"
}
],
"time": "2020-10-12T18:35:36+00:00"
},
{
"name": "egulias/email-validator",
"version": "2.1.20",
"version": "2.1.22",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "f46887bc48db66c7f38f668eb7d6ae54583617ff"
"reference": "68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f46887bc48db66c7f38f668eb7d6ae54583617ff",
"reference": "f46887bc48db66c7f38f668eb7d6ae54583617ff",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5",
"reference": "68e418ec08fbfc6f58f6fd2eea70ca8efc8cc7d5",
"shasum": ""
},
"require": {
@@ -582,7 +588,7 @@
"validation",
"validator"
],
"time": "2020-09-06T13:44:32+00:00"
"time": "2020-09-26T15:48:38+00:00"
},
{
"name": "erusev/parsedown",
@@ -752,7 +758,7 @@
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"notification-url": "http://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
@@ -832,23 +838,23 @@
},
{
"name": "guzzlehttp/promises",
"version": "v1.3.1",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
"reference": "60d379c243457e073cff02bc323a2a86cb355631"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
"url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631",
"reference": "60d379c243457e073cff02bc323a2a86cb355631",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
"symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"type": "library",
"extra": {
@@ -879,20 +885,20 @@
"keywords": [
"promise"
],
"time": "2016-12-20T10:07:11+00:00"
"time": "2020-09-30T07:37:28+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.6.1",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a"
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
"reference": "239400de7a173fe9901b9ac7c06497751f00727a",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3",
"reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3",
"shasum": ""
},
"require": {
@@ -905,15 +911,15 @@
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
},
"suggest": {
"zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
"dev-master": "1.7-dev"
}
},
"autoload": {
@@ -950,7 +956,7 @@
"uri",
"url"
],
"time": "2019-07-01T23:21:34+00:00"
"time": "2020-09-30T07:37:11+00:00"
},
{
"name": "jakub-onderka/php-console-color",
@@ -1709,7 +1715,7 @@
],
"authors": [
{
"name": "Jean-Marc Trémeaux",
"name": "Jean-Marc Tr??meaux",
"homepage": "http://naku.dohcrew.com/",
"role": "Developer"
},
@@ -1731,45 +1737,47 @@
},
{
"name": "luracast/restler",
"version": "3.1.0",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/Luracast/Restler.git",
"reference": "fd6eefabf4f12b9649657d3ab07378649e22044b"
"reference": "e82d5622f5a1798c3c208867184a469fb4fd445c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Luracast/Restler/zipball/fd6eefabf4f12b9649657d3ab07378649e22044b",
"reference": "fd6eefabf4f12b9649657d3ab07378649e22044b",
"url": "https://api.github.com/repos/Luracast/Restler/zipball/e82d5622f5a1798c3c208867184a469fb4fd445c",
"reference": "e82d5622f5a1798c3c208867184a469fb4fd445c",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": ">=5.4"
"php": ">=5.3.0"
},
"conflict": {
"restler/framework": "3.*"
},
"require-dev": {
"behat/behat": "^3.8@dev",
"bshaffer/oauth2-server-php": "dev-master",
"ext-libxml": "*",
"guzzlehttp/guzzle": "^7.0@dev",
"illuminate/view": "^8",
"behat/behat": "2.5.*@stable",
"bshaffer/oauth2-server-php": "v1.0",
"guzzle/guzzle": "~3.1.1",
"illuminate/view": "4.2.*",
"luracast/explorer": "*",
"mustache/mustache": "dev-master",
"rize/uri-template": "dev-master",
"twig/twig": "^3"
"rodneyrehm/plist": "dev-master",
"symfony/yaml": "*",
"twig/twig": "v1.13.0",
"zendframework/zendamf": "dev-master"
},
"suggest": {
"behat/behat": "Behaviour driven development testing framework (see require-dev for details)",
"bshaffer/oauth2-server-php": "If you want to use OAuth2 for authentication",
"bshaffer/oauth2-server-php": "Restler can provide OAuth2 authentication using this library (see require-dev for details)",
"guzzle/guzzle": "RESTful api HTTP client framework (see require-dev for details)",
"illuminate/view": "If you want to use laravel blade templates with Html format",
"mustache/mustache": "If you want to use mustache/handlebar templates with Html format",
"rodneyrehm/plist": "If you need Apple plist binary/xml format",
"symfony/yaml": "If you need YAML format",
"twig/twig": "If you want to use twig templates with Html format",
"zendframework/zendamf": "If you need AMF format"
"illuminate/view": "Restler can render HtmlView using laravel blade templates (see require-dev for details)",
"luracast/explorer": "Restler's very own api explorer (see require-dev for details)",
"mustache/mustache": "Restler can render HtmlView using mustache/handlebar templates (see require-dev for details)",
"rodneyrehm/plist": "Restler supports tho Apple plist xml format (see require-dev for details)",
"symfony/yaml": "Restler can produce content in yaml format as well (see require-dev for details)",
"twig/twig": "Restler can render HtmlView using twig templates (see require-dev for details)",
"zendframework/zendamf": "Support for the amf document format (see require-dev for details)"
},
"type": "library",
"extra": {
@@ -1778,8 +1786,8 @@
}
},
"autoload": {
"psr-4": {
"Luracast\\Restler\\": "vendor/Luracast/Restler"
"psr-0": {
"Luracast\\Restler": "vendor/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1790,6 +1798,10 @@
{
"name": "Luracast",
"email": "arul@luracast.com"
},
{
"name": "Nick nickl- Lombard",
"email": "github@jigsoft.co.za"
}
],
"description": "Restler is a simple and effective multi-format Web API Server framework written in PHP. Just deal with your business logic in php, Restler will take care of the REST!",
@@ -1800,7 +1812,7 @@
"rest",
"server"
],
"time": "2020-07-07T13:28:35+00:00"
"time": "2020-02-13T18:25:17+00:00"
},
{
"name": "monolog/monolog",
@@ -2144,29 +2156,29 @@
},
{
"name": "opis/closure",
"version": "3.5.7",
"version": "3.6.0",
"source": {
"type": "git",
"url": "https://github.com/opis/closure.git",
"reference": "4531e53afe2fc660403e76fb7644e95998bff7bf"
"reference": "c547f8262a5fa9ff507bd06cc394067b83a75085"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opis/closure/zipball/4531e53afe2fc660403e76fb7644e95998bff7bf",
"reference": "4531e53afe2fc660403e76fb7644e95998bff7bf",
"url": "https://api.github.com/repos/opis/closure/zipball/c547f8262a5fa9ff507bd06cc394067b83a75085",
"reference": "c547f8262a5fa9ff507bd06cc394067b83a75085",
"shasum": ""
},
"require": {
"php": "^5.4 || ^7.0"
"php": "^5.4 || ^7.0 || ^8.0"
},
"require-dev": {
"jeremeamia/superclosure": "^2.0",
"phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
"phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.5.x-dev"
"dev-master": "3.6.x-dev"
}
},
"autoload": {
@@ -2201,7 +2213,7 @@
"serialization",
"serialize"
],
"time": "2020-09-06T17:02:15+00:00"
"time": "2020-10-11T21:42:15+00:00"
},
{
"name": "paragonie/random_compat",
@@ -2293,6 +2305,12 @@
"BSD-3-Clause"
],
"description": "Official version of pdepend to be handled with Composer",
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend",
"type": "tidelift"
}
],
"time": "2020-06-20T10:53:13+00:00"
},
{
@@ -2814,16 +2832,16 @@
},
{
"name": "phpmyadmin/sql-parser",
"version": "5.3.1",
"version": "5.4.0",
"source": {
"type": "git",
"url": "https://github.com/phpmyadmin/sql-parser.git",
"reference": "11457e9bbedc182b48c04db3a2621d17b58b0808"
"reference": "6c597821433d9dfbc796f105149614f802a25a4e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/11457e9bbedc182b48c04db3a2621d17b58b0808",
"reference": "11457e9bbedc182b48c04db3a2621d17b58b0808",
"url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/6c597821433d9dfbc796f105149614f802a25a4e",
"reference": "6c597821433d9dfbc796f105149614f802a25a4e",
"shasum": ""
},
"require": {
@@ -2834,11 +2852,11 @@
"phpmyadmin/motranslator": "<3.0"
},
"require-dev": {
"phpmyadmin/coding-standard": "^1.0",
"phpmyadmin/coding-standard": "^2.0",
"phpmyadmin/motranslator": "^4.0 || ^5.0",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^0.12.3",
"phpstan/phpstan-phpunit": "^0.12.1",
"phpstan/phpstan": "^0.12.40",
"phpstan/phpstan-phpunit": "^0.12.16",
"phpunit/php-code-coverage": "*",
"phpunit/phpunit": "^7.4 || ^8 || ^9"
},
@@ -2876,7 +2894,7 @@
"parser",
"sql"
],
"time": "2020-03-21T00:25:34+00:00"
"time": "2020-10-08T19:21:19+00:00"
},
{
"name": "predis/predis",
@@ -3481,16 +3499,16 @@
},
{
"name": "symfony/config",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
"reference": "043bf8652c307ebc23ce44047d215eec889d8850"
"reference": "7c5a1002178a612787c291a4f515f87b19176b61"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/043bf8652c307ebc23ce44047d215eec889d8850",
"reference": "043bf8652c307ebc23ce44047d215eec889d8850",
"url": "https://api.github.com/repos/symfony/config/zipball/7c5a1002178a612787c291a4f515f87b19176b61",
"reference": "7c5a1002178a612787c291a4f515f87b19176b61",
"shasum": ""
},
"require": {
@@ -3555,20 +3573,20 @@
"type": "tidelift"
}
],
"time": "2020-08-10T07:27:51+00:00"
"time": "2020-10-02T07:34:48+00:00"
},
{
"name": "symfony/console",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "b39fd99b9297b67fb7633b7d8083957a97e1e727"
"reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/b39fd99b9297b67fb7633b7d8083957a97e1e727",
"reference": "b39fd99b9297b67fb7633b7d8083957a97e1e727",
"url": "https://api.github.com/repos/symfony/console/zipball/90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
"reference": "90933b39c7b312fc3ceaa1ddeac7eb48cb953124",
"shasum": ""
},
"require": {
@@ -3646,11 +3664,11 @@
"type": "tidelift"
}
],
"time": "2020-09-02T07:07:21+00:00"
"time": "2020-09-15T07:58:55+00:00"
},
{
"name": "symfony/css-selector",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
@@ -3717,16 +3735,16 @@
},
{
"name": "symfony/debug",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e"
"reference": "726b85e69342e767d60e3853b98559a68ff74183"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e",
"reference": "aeb73aca16a8f1fe958230fe44e6cf4c84cbb85e",
"url": "https://api.github.com/repos/symfony/debug/zipball/726b85e69342e767d60e3853b98559a68ff74183",
"reference": "726b85e69342e767d60e3853b98559a68ff74183",
"shasum": ""
},
"require": {
@@ -3784,20 +3802,20 @@
"type": "tidelift"
}
],
"time": "2020-08-10T07:47:39+00:00"
"time": "2020-09-09T05:20:36+00:00"
},
{
"name": "symfony/dependency-injection",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/dependency-injection.git",
"reference": "384c2601e5a6228d60b041911d63f010e0885ffb"
"reference": "89274c8847dff2ed703e481843eb9159ca25cc6e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/384c2601e5a6228d60b041911d63f010e0885ffb",
"reference": "384c2601e5a6228d60b041911d63f010e0885ffb",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/89274c8847dff2ed703e481843eb9159ca25cc6e",
"reference": "89274c8847dff2ed703e481843eb9159ca25cc6e",
"shasum": ""
},
"require": {
@@ -3871,20 +3889,20 @@
"type": "tidelift"
}
],
"time": "2020-09-01T17:42:15+00:00"
"time": "2020-09-10T10:08:39+00:00"
},
{
"name": "symfony/error-handler",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "2434fb32851f252e4f27691eee0b77c16198db62"
"reference": "c8be4a5c70af70fec82e762dd93e3bbcf95c035f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/2434fb32851f252e4f27691eee0b77c16198db62",
"reference": "2434fb32851f252e4f27691eee0b77c16198db62",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/c8be4a5c70af70fec82e762dd93e3bbcf95c035f",
"reference": "c8be4a5c70af70fec82e762dd93e3bbcf95c035f",
"shasum": ""
},
"require": {
@@ -3942,20 +3960,20 @@
"type": "tidelift"
}
],
"time": "2020-08-17T09:56:45+00:00"
"time": "2020-10-01T16:21:20+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "3e8ea5ccddd00556b86d69d42f99f1061a704030"
"reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3e8ea5ccddd00556b86d69d42f99f1061a704030",
"reference": "3e8ea5ccddd00556b86d69d42f99f1061a704030",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e17bb5e0663dc725f7cdcafc932132735b4725cd",
"reference": "e17bb5e0663dc725f7cdcafc932132735b4725cd",
"shasum": ""
},
"require": {
@@ -3973,6 +3991,7 @@
"psr/log": "~1.0",
"symfony/config": "^3.4|^4.0|^5.0",
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
"symfony/error-handler": "~3.4|~4.4",
"symfony/expression-language": "^3.4|^4.0|^5.0",
"symfony/http-foundation": "^3.4|^4.0|^5.0",
"symfony/service-contracts": "^1.1|^2",
@@ -4026,7 +4045,7 @@
"type": "tidelift"
}
],
"time": "2020-08-13T14:18:44+00:00"
"time": "2020-09-18T14:07:46+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -4106,16 +4125,16 @@
},
{
"name": "symfony/filesystem",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "27575bcbc68db1f6d06218891296572c9b845704"
"reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/27575bcbc68db1f6d06218891296572c9b845704",
"reference": "27575bcbc68db1f6d06218891296572c9b845704",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/ebc51494739d3b081ea543ed7c462fa73a4f74db",
"reference": "ebc51494739d3b081ea543ed7c462fa73a4f74db",
"shasum": ""
},
"require": {
@@ -4166,20 +4185,20 @@
"type": "tidelift"
}
],
"time": "2020-08-21T17:19:37+00:00"
"time": "2020-09-27T13:54:16+00:00"
},
{
"name": "symfony/finder",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "2a78590b2c7e3de5c429628457c47541c58db9c7"
"reference": "60d08560f9aa72997c44077c40d47aa28a963230"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/2a78590b2c7e3de5c429628457c47541c58db9c7",
"reference": "2a78590b2c7e3de5c429628457c47541c58db9c7",
"url": "https://api.github.com/repos/symfony/finder/zipball/60d08560f9aa72997c44077c40d47aa28a963230",
"reference": "60d08560f9aa72997c44077c40d47aa28a963230",
"shasum": ""
},
"require": {
@@ -4229,20 +4248,95 @@
"type": "tidelift"
}
],
"time": "2020-08-17T09:56:45+00:00"
"time": "2020-10-02T07:34:48+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v4.4.13",
"name": "symfony/http-client-contracts",
"version": "v1.1.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "e3e5a62a6631a461954d471e7206e3750dbe8ee1"
"url": "https://github.com/symfony/http-client-contracts.git",
"reference": "7e86f903f9720d0caa7688f5c29a2de2d77cbb89"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/e3e5a62a6631a461954d471e7206e3750dbe8ee1",
"reference": "e3e5a62a6631a461954d471e7206e3750dbe8ee1",
"url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e86f903f9720d0caa7688f5c29a2de2d77cbb89",
"reference": "7e86f903f9720d0caa7688f5c29a2de2d77cbb89",
"shasum": ""
},
"require": {
"php": ">=7.1.3"
},
"suggest": {
"symfony/http-client-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\HttpClient\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to HTTP clients",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-08-17T09:35:39+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "10683b407c3b6087c64619ebc97a87e36ea62c92"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/10683b407c3b6087c64619ebc97a87e36ea62c92",
"reference": "10683b407c3b6087c64619ebc97a87e36ea62c92",
"shasum": ""
},
"require": {
@@ -4298,20 +4392,20 @@
"type": "tidelift"
}
],
"time": "2020-08-17T07:39:58+00:00"
"time": "2020-09-27T14:14:06+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "2bb7b90ecdc79813c0bf237b7ff20e79062b5188"
"reference": "6544745997b06c7dcecf0d4a70f09e5de1db7ca8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/2bb7b90ecdc79813c0bf237b7ff20e79062b5188",
"reference": "2bb7b90ecdc79813c0bf237b7ff20e79062b5188",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/6544745997b06c7dcecf0d4a70f09e5de1db7ca8",
"reference": "6544745997b06c7dcecf0d4a70f09e5de1db7ca8",
"shasum": ""
},
"require": {
@@ -4319,6 +4413,7 @@
"psr/log": "~1.0",
"symfony/error-handler": "^4.4",
"symfony/event-dispatcher": "^4.4",
"symfony/http-client-contracts": "^1.1|^2",
"symfony/http-foundation": "^4.4|^5.0",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-php73": "^1.9",
@@ -4403,20 +4498,20 @@
"type": "tidelift"
}
],
"time": "2020-09-02T08:09:29+00:00"
"time": "2020-10-04T07:48:13+00:00"
},
{
"name": "symfony/mime",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "50ad671306d3d3ffb888d95b4fb1859496831e3a"
"reference": "42df2507eb8e6cd9795f51c99dd52bab543a918f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/50ad671306d3d3ffb888d95b4fb1859496831e3a",
"reference": "50ad671306d3d3ffb888d95b4fb1859496831e3a",
"url": "https://api.github.com/repos/symfony/mime/zipball/42df2507eb8e6cd9795f51c99dd52bab543a918f",
"reference": "42df2507eb8e6cd9795f51c99dd52bab543a918f",
"shasum": ""
},
"require": {
@@ -4479,7 +4574,7 @@
"type": "tidelift"
}
],
"time": "2020-08-17T09:56:45+00:00"
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -5185,16 +5280,16 @@
},
{
"name": "symfony/process",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479"
"reference": "9b887acc522935f77555ae8813495958c7771ba7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/65e70bab62f3da7089a8d4591fb23fbacacb3479",
"reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479",
"url": "https://api.github.com/repos/symfony/process/zipball/9b887acc522935f77555ae8813495958c7771ba7",
"reference": "9b887acc522935f77555ae8813495958c7771ba7",
"shasum": ""
},
"require": {
@@ -5244,20 +5339,20 @@
"type": "tidelift"
}
],
"time": "2020-07-23T08:31:43+00:00"
"time": "2020-09-02T16:08:58+00:00"
},
{
"name": "symfony/routing",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "e3387963565da9bae51d1d3ab8041646cc93bd04"
"reference": "006b2d06672b8650998f328fc603eb6f3feb979f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/e3387963565da9bae51d1d3ab8041646cc93bd04",
"reference": "e3387963565da9bae51d1d3ab8041646cc93bd04",
"url": "https://api.github.com/repos/symfony/routing/zipball/006b2d06672b8650998f328fc603eb6f3feb979f",
"reference": "006b2d06672b8650998f328fc603eb6f3feb979f",
"shasum": ""
},
"require": {
@@ -5334,7 +5429,7 @@
"type": "tidelift"
}
],
"time": "2020-08-10T07:27:51+00:00"
"time": "2020-10-01T16:25:17+00:00"
},
{
"name": "symfony/service-contracts",
@@ -5414,16 +5509,16 @@
},
{
"name": "symfony/translation",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "700e6e50174b0cdcf0fa232773bec5c314680575"
"reference": "8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/700e6e50174b0cdcf0fa232773bec5c314680575",
"reference": "700e6e50174b0cdcf0fa232773bec5c314680575",
"url": "https://api.github.com/repos/symfony/translation/zipball/8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd",
"reference": "8494fa1bbf9d77fe1e7d50ac8ccfb80a858a98bd",
"shasum": ""
},
"require": {
@@ -5500,7 +5595,7 @@
"type": "tidelift"
}
],
"time": "2020-08-17T09:56:45+00:00"
"time": "2020-10-02T07:34:48+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -5579,16 +5674,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "1bef32329f3166486ab7cb88599cae4875632b99"
"reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/1bef32329f3166486ab7cb88599cae4875632b99",
"reference": "1bef32329f3166486ab7cb88599cae4875632b99",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/0dc22bdf9d1197467bb04d505355180b6f20bcca",
"reference": "0dc22bdf9d1197467bb04d505355180b6f20bcca",
"shasum": ""
},
"require": {
@@ -5666,7 +5761,7 @@
"type": "tidelift"
}
],
"time": "2020-08-17T07:31:35+00:00"
"time": "2020-09-18T08:35:10+00:00"
},
{
"name": "tecnickcom/tcpdf",
@@ -6972,6 +7067,7 @@
"keywords": [
"tokenizer"
],
"abandoned": true,
"time": "2017-11-27T05:48:46+00:00"
},
{
@@ -7682,16 +7778,16 @@
},
{
"name": "symfony/yaml",
"version": "v4.4.13",
"version": "v4.4.15",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "e2a69525b11a33be51cb00b8d6d13a9258a296b1"
"reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/e2a69525b11a33be51cb00b8d6d13a9258a296b1",
"reference": "e2a69525b11a33be51cb00b8d6d13a9258a296b1",
"url": "https://api.github.com/repos/symfony/yaml/zipball/c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
"reference": "c7885964b1eceb70b0981556d0a9b01d2d97c8d1",
"shasum": ""
},
"require": {
@@ -7751,7 +7847,7 @@
"type": "tidelift"
}
],
"time": "2020-08-26T08:30:46+00:00"
"time": "2020-09-27T03:36:23+00:00"
},
{
"name": "webmozart/assert",

View File

@@ -2731,4 +2731,67 @@ class Bootstrap
}
set_include_path(get_include_path() . PATH_SEPARATOR . PATH_DATA_SITE);
}
/**
* @deprecated since version 3.5.3
*/
public static function registerMonolog(
$channel,
$level,
$message,
$context,
$workspace = '',
$file = 'processmaker.log',
$readLoggingLevel = true
)
{
$level = intval($level);
$context = is_array($context) ? $context : [];
switch ($level) {
case 100:
Log::channel(':' . $channel)->debug($message, Bootstrap::context($context));
break;
default://200
Log::channel(':' . $channel)->info($message, Bootstrap::context($context));
break;
case 250:
Log::channel(':' . $channel)->notice($message, Bootstrap::context($context));
break;
case 300:
Log::channel(':' . $channel)->warning($message, Bootstrap::context($context));
break;
case 400:
Log::channel(':' . $channel)->error($message, Bootstrap::context($context));
break;
case 500:
Log::channel(':' . $channel)->critical($message, Bootstrap::context($context));
break;
case 550:
Log::channel(':' . $channel)->alert($message, Bootstrap::context($context));
break;
case 600:
Log::channel(':' . $channel)->emergency($message, Bootstrap::context($context));
break;
}
}
/**
* @deprecated since version 3.5.3
*/
public static function getDefaultContextLog()
{
return self::context();
}
/**
* @deprecated since version 3.5.3
*/
public static function registerMonologPhpUploadExecution($channel, $level, $message, $fileName)
{
$context = [
'filename' => $fileName,
'url' => $_SERVER["REQUEST_URI"] ?? ''
];
self::registerMonolog($channel, $level, $message, $context);
}
}

View File

@@ -6219,4 +6219,17 @@ class G
}, $string);
return $string;
}
/**
* This function is used to create a legal SQL string that you can use in an SQL statement.
* The given string is encoded to an escaped SQL string, taking into account the current
* character set of the connection.
* @param string $string
* @return string
*/
public static function realEscapeString(string $string): string
{
$resource = Propel::getConnection('workflow')->getResource();
return mysqli_real_escape_string($resource, $string);
}
}

View File

@@ -4,6 +4,8 @@ namespace Tests\unit\gulliver\system;
use Bootstrap;
use Faker\Factory;
use Illuminate\Support\Facades\File;
use ProcessMaker\Core\System;
use Tests\TestCase;
class BootstrapTest extends TestCase
@@ -62,4 +64,78 @@ class BootstrapTest extends TestCase
//add more assertions
$this->assertRegexp("/{$filename}/", $result);
}
/**
* Return logging level code.
*/
public function levelCode()
{
//the level record depends on env.ini, by default the records are shown
//starting from info (200) and the debug level (100) is excluded.
return[
[200],
[250],
[300],
[400],
[500],
[550],
[600]
];
}
/**
* This test the registerMonolog method.
* @test
* @covers Bootstrap::registerMonolog()
* @dataProvider levelCode
*/
public function it_should_test_registerMonolog_method($level)
{
$channel = 'test';
$message = 'test';
$context = [];
Bootstrap::registerMonolog($channel, $level, $message, $context);
$result = '';
$files = File::allFiles(PATH_DATA_SITE . '/log');
foreach ($files as $value) {
$result = $result . File::get($value->getPathname());
}
$this->assertRegExp("/{$channel}/", $result);
}
/**
* This test the getDefaultContextLog method.
* @test
* @covers Bootstrap::getDefaultContextLog()
*/
public function it_should_test_getDefaultContextLog_method()
{
$result = Bootstrap::getDefaultContextLog();
$this->assertArrayHasKey('ip', $result);
$this->assertArrayHasKey('workspace', $result);
$this->assertArrayHasKey('timeZone', $result);
$this->assertArrayHasKey('usrUid', $result);
}
/**
* This test the registerMonologPhpUploadExecution method.
* @test
* @covers Bootstrap::registerMonologPhpUploadExecution()
* @dataProvider levelCode
*/
public function it_should_test_registerMonologPhpUploadExecution_method($level)
{
$channel = 'test';
$message = 'test';
$fileName = 'test';
Bootstrap::registerMonologPhpUploadExecution($channel, $level, $message, $fileName);
$result = '';
$files = File::allFiles(PATH_DATA_SITE . '/log');
foreach ($files as $value) {
$result = $result . File::get($value->getPathname());
}
$this->assertRegExp("/{$channel}/", $result);
}
}

View File

@@ -2,8 +2,8 @@
namespace Tests\unit\gulliver\system;
use Faker\Factory;
use G;
use MonologProvider;
use Tests\TestCase;
/**
@@ -11,6 +11,16 @@ use Tests\TestCase;
*/
class gTest extends TestCase
{
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
}
/**
* It tests that the new words added to the array are present
*
@@ -373,4 +383,17 @@ class gTest extends TestCase
G::logTriggerExecution($data, '', '', 100);
$this->assertFalse($_SESSION['_DATA_TRIGGER_']['_TRI_LOG_']);
}
}
/**
* This test the realEscapeString method.
* @test
* @covers G::realEscapeString()
*/
public function it_should_test_realEscapeString_method()
{
$string = $this->faker->word;
$result = G::realEscapeString($string);
$this->assertNotEmpty($result);
}
}

View File

@@ -3,6 +3,7 @@
namespace Tests\unit\workflow\engine\classes;
use Cases;
use Exception;
use ProcessMaker\Model\Application;
use ProcessMaker\Model\Delegation;
use ProcessMaker\Model\Process;
@@ -244,7 +245,7 @@ class CasesTest extends TestCase
public function it_should_test_get_next_step_method_step_exception()
{
$cases = new Cases();
$this->expectExceptionMessage("The Application row '' doesn't exist!");
$this->expectException(Exception::class);
$res = $cases->getNextStep();
}

View File

@@ -1120,6 +1120,6 @@ class WsBaseTest extends TestCase
$ws = new WsBase();
$response = (object) $ws->cancelCase($fakeApp, $delegation->DEL_INDEX, $delegation->USR_UID);
$this->assertEquals($response->status_code, 100);
$this->assertEquals($response->message, "The Application row '$fakeApp' doesn't exist!");
$this->assertContains($fakeApp, $response->message);
}
}

View File

@@ -0,0 +1,64 @@
<?php
namespace Tests\unit\workflow\engine\classes\model;
use Criteria;
use Faker\Factory;
use ListCanceled;
use ProcessMaker\Model\Delegation;
use Tests\TestCase;
class ListCanceledTest extends TestCase
{
private $listCanceled;
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
$this->listCanceled = new ListCanceled();
}
/**
* Tear down method,
*/
public function tearDown()
{
parent::tearDown();
}
/**
* @test
* @covers ListCanceled::loadFilters()
*/
public function it_should_test_loadFilters_method()
{
$delegation = factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
]);
$criteria = new Criteria('workflow');
$filters = [
'filter' => '',
'search' => $delegation->application->APP_UID,
'process' => $delegation->process->PRO_UID,
'category' => $delegation->process->PRO_CATEGORY,
'dateFrom' => '',
'dateTo' => ''
];
$this->listCanceled->loadFilters($criteria, $filters);
$joinsMC = $criteria->getJoinsMC();
$this->assertNotEmpty($joinsMC);
$this->assertObjectHasAttribute('conditions', $joinsMC[0]);
$expected = [
'PROCESS.PRO_CATEGORY',
"'{$filters['category']}'"
];
$this->assertContains($expected, $joinsMC[0]->conditions);
}
}

View File

@@ -0,0 +1,67 @@
<?php
namespace Tests\unit\workflow\engine\classes\model;
use Criteria;
use Faker\Factory;
use ListCompleted;
use ProcessMaker\Model\Delegation;
use Tests\TestCase;
class ListCompletedTest extends TestCase
{
private $listCompleted;
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
$this->listCompleted = new ListCompleted();
}
/**
* Tear down method,
*/
public function tearDown()
{
parent::tearDown();
}
/**
* @test
* @covers ListCompleted::loadFilters()
*/
public function it_should_test_loadFilters_method()
{
$delegation = factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
]);
$criteria = new Criteria('workflow');
//the ListCompleted contains fields that were removed (DEL_DELEGATE_DATE,DEL_INIT_DATE) but are still used,
//these places are not reachable in code coverage.
$filters = [
'filter' => '', //read,unread
'search' => $delegation->application->APP_UID,
'process' => $delegation->process->PRO_UID,
'category' => $delegation->process->PRO_CATEGORY,
'dateFrom' => '',
'dateTo' => ''
];
$this->listCompleted->loadFilters($criteria, $filters);
$joinsMC = $criteria->getJoinsMC();
$this->assertNotEmpty($joinsMC);
$this->assertObjectHasAttribute('conditions', $joinsMC[0]);
$expected = [
'PROCESS.PRO_CATEGORY',
"'{$filters['category']}'"
];
$this->assertContains($expected, $joinsMC[0]->conditions);
}
}

View File

@@ -0,0 +1,71 @@
<?php
namespace Tests\unit\workflow\engine\classes\model;
use Criteria;
use Faker\Factory;
use ListInbox;
use ProcessMaker\Model\Delegation;
use Tests\TestCase;
class ListInboxTest extends TestCase
{
private $listInbox;
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
$this->listInbox = new ListInbox();
}
/**
* Tear down method,
*/
public function tearDown()
{
parent::tearDown();
}
/**
* @test
* @covers ListInbox::loadFilters()
*/
public function it_should_test_loadFilters_method()
{
$delegation = factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
]);
$criteria = new Criteria('workflow');
$filters = [
'action' => 'draft', //draft,to_revise,to_reassign
'usr_uid' => $delegation->user->USR_UID,
'filter' => '',
'search' => $delegation->application->APP_UID,
'caseLink' => $delegation->application->APP_UID,
'process' => $delegation->process->PRO_UID,
'category' => $delegation->process->PRO_CATEGORY,
'dateFrom' => '',
'dateTo' => '',
'filterStatus' => 'ON_TIME', //ON_TIME,AT_RISK,OVERDUE
'newestthan' => $delegation->DEL_DELEGATE_DATE->format('Y-m-d H:i:s'),
'oldestthan' => $delegation->DEL_DELEGATE_DATE->format('Y-m-d H:i:s'),
'appUidCheck' => $delegation->application->APP_UID
];
$this->listInbox->loadFilters($criteria, $filters);
$joinsMC = $criteria->getJoinsMC();
$this->assertNotEmpty($joinsMC);
$this->assertObjectHasAttribute('conditions', $joinsMC[0]);
$expected = [
'PROCESS.PRO_CATEGORY',
"'{$filters['category']}'"
];
$this->assertContains($expected, $joinsMC[0]->conditions);
}
}

View File

@@ -0,0 +1,64 @@
<?php
namespace Tests\unit\workflow\engine\classes\model;
use Criteria;
use Faker\Factory;
use ListMyInbox;
use ProcessMaker\Model\Delegation;
use Tests\TestCase;
class ListMyInboxTest extends TestCase
{
private $listMyInbox;
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
$this->listMyInbox = new ListMyInbox();
}
/**
* Tear down method,
*/
public function tearDown()
{
parent::tearDown();
}
/**
* @test
* @covers ListMyInbox::loadFilters()
*/
public function it_should_test_loadFilters_method()
{
$delegation = factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
]);
$criteria = new Criteria('workflow');
$filters = [
'filter' => '',
'search' => $delegation->application->APP_UID,
'process' => $delegation->process->PRO_UID,
'category' => $delegation->process->PRO_CATEGORY,
'dateFrom' => '',
'dateTo' => ''
];
$this->listMyInbox->loadFilters($criteria, $filters);
$joinsMC = $criteria->getJoinsMC();
$this->assertNotEmpty($joinsMC);
$this->assertObjectHasAttribute('conditions', $joinsMC[0]);
$expected = [
'PROCESS.PRO_CATEGORY',
"'{$filters['category']}'"
];
$this->assertContains($expected, $joinsMC[0]->conditions);
}
}

View File

@@ -0,0 +1,64 @@
<?php
namespace Tests\unit\workflow\engine\classes\model;
use Criteria;
use Faker\Factory;
use ListParticipatedHistory;
use ProcessMaker\Model\Delegation;
use Tests\TestCase;
class ListParticipatedHistoryTest extends TestCase
{
private $listParticipatedHistory;
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
$this->listParticipatedHistory = new ListParticipatedHistory();
}
/**
* Tear down method,
*/
public function tearDown()
{
parent::tearDown();
}
/**
* @test
* @covers ListParticipatedHistory::loadFilters()
*/
public function it_should_test_loadFilters_method()
{
$delegation = factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
]);
$criteria = new Criteria('workflow');
$filters = [
'filter' => '',
'search' => $delegation->application->APP_UID,
'process' => $delegation->process->PRO_UID,
'category' => $delegation->process->PRO_CATEGORY,
'dateFrom' => '',
'dateTo' => ''
];
$this->listParticipatedHistory->loadFilters($criteria, $filters);
$joinsMC = $criteria->getJoinsMC();
$this->assertNotEmpty($joinsMC);
$this->assertObjectHasAttribute('conditions', $joinsMC[0]);
$expected = [
'PROCESS.PRO_CATEGORY',
"'{$filters['category']}'"
];
$this->assertContains($expected, $joinsMC[0]->conditions);
}
}

View File

@@ -0,0 +1,68 @@
<?php
namespace Tests\unit\workflow\engine\classes\model;
use Criteria;
use Faker\Factory;
use ListParticipatedLast;
use ProcessMaker\Model\Delegation;
use Tests\TestCase;
class ListParticipatedLastTest extends TestCase
{
private $listParticipatedLast;
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
$this->listParticipatedLast = new ListParticipatedLast();
}
/**
* Tear down method,
*/
public function tearDown()
{
parent::tearDown();
}
/**
* @test
* @covers ListParticipatedLast::loadFilters()
*/
public function it_should_test_loadFilters_method()
{
$delegation = factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
]);
$criteria = new Criteria('workflow');
$filters = [
'filter' => '',
'search' => $delegation->application->APP_UID,
'caseLink' => $delegation->application->APP_UID,
'process' => $delegation->process->PRO_UID,
'category' => $delegation->process->PRO_CATEGORY,
'dateFrom' => '',
'dateTo' => '',
'filterStatus' => 'ON_TIME', //ON_TIME,AT_RISK,OVERDUE
'newestthan' => $delegation->DEL_DELEGATE_DATE->format('Y-m-d H:i:s'),
'oldestthan' => $delegation->DEL_DELEGATE_DATE->format('Y-m-d H:i:s')
];
$this->listParticipatedLast->loadFilters($criteria, $filters);
$joinsMC = $criteria->getJoinsMC();
$this->assertNotEmpty($joinsMC);
$this->assertObjectHasAttribute('conditions', $joinsMC[0]);
$expected = [
'PROCESS.PRO_CATEGORY',
"'{$filters['category']}'"
];
$this->assertContains($expected, $joinsMC[0]->conditions);
}
}

View File

@@ -0,0 +1,64 @@
<?php
namespace Tests\unit\workflow\engine\classes\model;
use Criteria;
use Faker\Factory;
use ListPaused;
use ProcessMaker\Model\Delegation;
use Tests\TestCase;
class ListPausedTest extends TestCase
{
private $listPaused;
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
$this->listPaused = new ListPaused();
}
/**
* Tear down method,
*/
public function tearDown()
{
parent::tearDown();
}
/**
* @test
* @covers ListPaused::loadFilters()
*/
public function it_should_test_loadFilters_method()
{
$delegation = factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
]);
$criteria = new Criteria('workflow');
$filters = [
'filter' => '',
'search' => $delegation->application->APP_UID,
'caseLink' => $delegation->application->APP_UID,
'process' => $delegation->process->PRO_UID,
'category' => $delegation->process->PRO_CATEGORY,
'filterStatus' => 'ON_TIME' //ON_TIME,AT_RISK,OVERDUE
];
$this->listPaused->loadFilters($criteria, $filters);
$joinsMC = $criteria->getJoinsMC();
$this->assertNotEmpty($joinsMC);
$this->assertObjectHasAttribute('conditions', $joinsMC[0]);
$expected = [
'PROCESS.PRO_CATEGORY',
"'{$filters['category']}'"
];
$this->assertContains($expected, $joinsMC[0]->conditions);
}
}

View File

@@ -0,0 +1,66 @@
<?php
namespace Tests\unit\workflow\engine\classes\model;
use Criteria;
use Faker\Factory;
use ListUnassigned;
use ProcessMaker\Model\Delegation;
use Tests\TestCase;
class ListUnassignedTest extends TestCase
{
private $listUnassigned;
/**
* Set up method.
*/
public function setUp()
{
parent::setUp();
$this->faker = Factory::create();
$this->listUnassigned = new ListUnassigned();
}
/**
* Tear down method,
*/
public function tearDown()
{
parent::tearDown();
}
/**
* @test
* @covers ListUnassigned::loadFilters()
*/
public function it_should_test_loadFilters_method()
{
$delegation = factory(Delegation::class)->create([
'DEL_THREAD_STATUS' => 'CLOSED',
]);
$criteria = new Criteria('workflow');
$filters = [
'filter' => '',
'search' => $delegation->application->APP_UID,
'caseLink' => $delegation->application->APP_UID,
'process' => $delegation->process->PRO_UID,
'category' => $delegation->process->PRO_CATEGORY,
'newestthan' => $delegation->DEL_DELEGATE_DATE->format('Y-m-d H:i:s'),
'oldestthan' => $delegation->DEL_DELEGATE_DATE->format('Y-m-d H:i:s'),
'appUidCheck' => $delegation->application->APP_UID
];
$this->listUnassigned->loadFilters($criteria, $filters);
$joinsMC = $criteria->getJoinsMC();
$this->assertNotEmpty($joinsMC);
$this->assertObjectHasAttribute('conditions', $joinsMC[0]);
$expected = [
'PROCESS.PRO_CATEGORY',
"'{$filters['category']}'"
];
$this->assertContains($expected, $joinsMC[0]->conditions);
}
}

View File

@@ -268,13 +268,13 @@ class GmailOAuthTest extends TestCase
$result = $gmailOauth->sendTestMailWithPHPMailerOAuth();
$this->assertTrue($result instanceof PHPMailerOAuth);
$this->expectException(Exception::class);
$gmailOauth = new GmailOAuth();
$gmailOauth->setFromAccount($faker->email);
$gmailOauth->setSenderEmail("");
$gmailOauth->setSenderEmail($faker->email);
$gmailOauth->setMailTo($faker->email);
$gmailOauth->setSendTestMail(1);
$result = $gmailOauth->sendTestMailWithPHPMailerOAuth();
$this->assertTrue($result instanceof PHPMailerOAuth);
}
/**

View File

@@ -16,6 +16,15 @@ use Tests\TestCase;
*/
class ListUnassignedTest extends TestCase
{
/**
* Method set up.
*/
public function setUp()
{
parent::setUp();
$this->markTestIncomplete();
}
/**
* This checks to make sure pagination is working properly
*

View File

@@ -569,7 +569,7 @@ class Cases
}
}
return $fields;
} catch (exception $e) {
} catch (Exception $e) {
throw ($e);
}
}

View File

@@ -199,7 +199,7 @@ class Application extends BaseApplication
return $aFields;
} else {
throw (new Exception("The Application row '$AppUid' doesn't exist!"));
throw (new Exception(htmlentities("The Application row '$AppUid' doesn't exist!", ENT_QUOTES, "UTF-8")));
}
} catch (Exception $oError) {
throw ($oError);

View File

@@ -254,7 +254,7 @@ class ListCanceled extends BaseListCanceled implements ListInterface
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListCanceledPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . $category . "'");
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}

View File

@@ -233,7 +233,7 @@ class ListCompleted extends BaseListCompleted implements ListInterface
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListCompletedPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . $category . "'");
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}

View File

@@ -513,7 +513,7 @@ class ListInbox extends BaseListInbox implements ListInterface
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListInboxPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . $category . "'");
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}
//Those filters: $newestthan, $oldestthan is used from mobile GET /light/todo

View File

@@ -210,7 +210,7 @@ class ListMyInbox extends BaseListMyInbox implements ListInterface
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListMyInboxPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . $category . "'");
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}

View File

@@ -165,7 +165,7 @@ class ListParticipatedHistory extends BaseListParticipatedHistory implements Lis
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListParticipatedHistoryPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . $category . "'");
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}

View File

@@ -351,7 +351,7 @@ class ListParticipatedLast extends BaseListParticipatedLast implements ListInter
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListParticipatedLastPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'".$category."'");
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}

View File

@@ -270,7 +270,7 @@ class ListPaused extends BaseListPaused implements ListInterface
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListPausedPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . $category . "'");
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}
}

View File

@@ -2,6 +2,8 @@
require_once 'classes/model/om/BaseListUnassigned.php';
use ProcessMaker\Model\Delegation;
/**
* Skeleton subclass for representing a row from the 'LIST_UNASSIGNED' table.
@@ -207,7 +209,7 @@ class ListUnassigned extends BaseListUnassigned implements ListInterface
$criteria->addSelectColumn(ProcessPeer::PRO_CATEGORY);
$aConditions = array();
$aConditions[] = array(ListUnassignedPeer::PRO_UID, ProcessPeer::PRO_UID);
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . $category . "'");
$aConditions[] = array(ProcessPeer::PRO_CATEGORY, "'" . G::realEscapeString($category) . "'");
$criteria->addJoinMC($aConditions, Criteria::INNER_JOIN);
}
@@ -232,19 +234,86 @@ class ListUnassigned extends BaseListUnassigned implements ListInterface
/**
* This function get the information in the corresponding cases list
* @param string $usr_uid, must be show cases related to this user
*
* @param string $usrUid, must be show cases related to this user
* @param array $filters for apply in the result
* @param callable $callbackRecord
* @return array $data
* @throws PropelException
*/
public function loadList($usr_uid, $filters = array(), callable $callbackRecord = null)
public function loadList($usrUid, $filters = [], callable $callbackRecord = null)
{
// Get criteria base and the additional columns
$pmTable = new PmTable();
$criteria = $pmTable->addPMFieldsToList('unassigned');
$this->setAdditionalClassName($pmTable->tableClassName);
$additionalColumns = $criteria->getSelectColumns();
// Check if exists the custom cases list configured for the unassigned list, if NOT exists we're using the new improved query
if (empty($additionalColumns)) {
// Initialize required parameters
$selectedColumns = [
// APP_DELEGATION table
'APP_DELEGATION.APP_NUMBER',
'APP_DELEGATION.DEL_INDEX',
'APP_DELEGATION.APP_UID',
'APP_DELEGATION.TAS_UID',
'APP_DELEGATION.PRO_UID',
'APP_DELEGATION.DEL_DELEGATE_DATE',
'APP_DELEGATION.DEL_TASK_DUE_DATE',
'APP_DELEGATION.DEL_PRIORITY',
'APP_DELEGATION.DEL_PREVIOUS',
// TASK table
'TASK.TAS_TITLE',
// APPLICATION table
'APPLICATION.APP_TITLE',
'APPLICATION.APP_UPDATE_DATE',
// PROCESS table
'PROCESS.PRO_TITLE'
];
$sortMap = [
'APP_NUMBER' => 'APP_NUMBER',
'DEL_DUE_DATE' => 'DEL_TASK_DUE_DATE',
'DEL_DELEGATE_DATE' => 'DEL_DELEGATE_DATE',
'APP_TITLE' => 'APP_TITLE',
'APP_PRO_TITLE' => 'PRO_TITLE',
'APP_TAS_TITLE' => 'TAS_TITLE',
'DEL_PREVIOUS_USR_UID' => 'USR_ID'
];
$categoryUid = $filters['category'] ?? null;
$processUid = $filters['process'] ?? null;
$textToSearch = $filters['search'] ?? null;
$sort = $sortMap[$filters['sort']] ?? null;
$dir = $filters['dir'] ?? null;
$offset = $filters['start'] ?? null;
$limit = $filters['limit'] ?? null;
// Get data
$data = Delegation::getSelfService($usrUid, $selectedColumns, $categoryUid, $processUid, $textToSearch, $sort, $dir, $offset, $limit);
// Transform and complete the data
foreach ($data as &$row) {
$row = is_null($callbackRecord) ? $row : $callbackRecord($row);
}
} else {
// Use the old Propel query that is compatible with the custom cases list
$data = $this->loadListWithAdditionalColumns($criteria, $usrUid, $filters, $additionalColumns, $callbackRecord);
}
return $data;
}
/**
* Get the data for unassigned list with the information of additional columns
*
* @param object $criteria
* @param string $usr_uid
* @param array $filters
* @param array $additionalColumns
* @param callable $callbackRecord
* @return array
*/
private function loadListWithAdditionalColumns($criteria, $usr_uid, $filters, $additionalColumns, callable $callbackRecord)
{
$criteria->addSelectColumn(ListUnassignedPeer::APP_UID);
$criteria->addSelectColumn(ListUnassignedPeer::DEL_INDEX);
$criteria->addSelectColumn(ListUnassignedPeer::TAS_UID);
@@ -460,17 +529,20 @@ class ListUnassigned extends BaseListUnassigned implements ListInterface
/**
* Returns the number of cases of a user
*
* @param string $userUid
* @param string $usrUid
* @param array $filters
*
* @return int $total
*/
public function getCountList($userUid, $filters = array())
public function getCountList($usrUid, $filters = [])
{
$criteria = new Criteria('workflow');
$this->getCriteriaWhereSelfService($criteria, $userUid);
$total = ListUnassignedPeer::doCount($criteria);
return (int)$total;
// Initialize required parameters
$categoryUid = $filters['category'] ?? null;
$processUid = $filters['process'] ?? null;
$textToSearch = $filters['search'] ?? null;
// Get counter
return Delegation::countSelfService($usrUid, $categoryUid, $processUid, $textToSearch);
}
/**

View File

@@ -1,5 +1,7 @@
<?php
use ProcessMaker\Model\User;
if (!isset($_SESSION['USER_LOGGED'])) {
$responseObject = new stdclass();
$responseObject->error = G::LoadTranslation('ID_LOGIN_AGAIN');
@@ -156,6 +158,12 @@ try {
$record["PREVIOUS_USR_USERNAME"] = $record["DEL_PREVIOUS_USR_USERNAME"];
$record["PREVIOUS_USR_FIRSTNAME"] = $record["DEL_PREVIOUS_USR_FIRSTNAME"];
$record["PREVIOUS_USR_LASTNAME"] = $record["DEL_PREVIOUS_USR_LASTNAME"];
} elseif (!empty($record["USR_ID"])) {
$user = User::where("USR_ID", $record["USR_ID"])->first();
$record["PREVIOUS_USR_UID"] = $record["DEL_PREVIOUS_USR_UID"] = $user->USR_UID;
$record["PREVIOUS_USR_USERNAME"] = $record["DEL_PREVIOUS_USR_USERNAME"] = $user->USR_USERNAME;
$record["PREVIOUS_USR_FIRSTNAME"] = $record["DEL_PREVIOUS_USR_FIRSTNAME"] = $user->USR_FIRSTNAME;
$record["PREVIOUS_USR_LASTNAME"] = $record["DEL_PREVIOUS_USR_LASTNAME"] = $user->USR_LASTNAME;
}
if (isset($record["DEL_DUE_DATE"])) {
@@ -175,12 +183,18 @@ try {
if (isset($record['DEL_CURRENT_TAS_TITLE']) && $record['DEL_CURRENT_TAS_TITLE'] != '') {
$record['APP_TAS_TITLE'] = $record['DEL_CURRENT_TAS_TITLE'];
} elseif (!empty($record["TAS_TITLE"]) && empty($record["APP_TAS_TITLE"])) {
$record["APP_TAS_TITLE"] = $record["TAS_TITLE"];
}
if (isset($record["APP_STATUS"])) {
$record["APP_STATUS_LABEL"] = G::LoadTranslation("ID_" . $record["APP_STATUS"]);
}
if (!empty($record["PRO_TITLE"]) && empty($record["APP_PRO_TITLE"])) {
$record["APP_PRO_TITLE"] = $record["PRO_TITLE"];
}
return $record;
} catch (Exception $e) {
throw $e;

View File

@@ -133,6 +133,8 @@ switch ($req) {
$row = $result->getRow();
$row['APP_MSG_STATUS'] = ucfirst($row['APP_MSG_STATUS']);
$row['APP_MSG_DATE'] = DateTime::convertUtcToTimeZone($row['APP_MSG_DATE']);
$row['APP_MSG_TO'] = htmlentities($row['APP_MSG_TO'], ENT_HTML5, "UTF-8");
$row['APP_MSG_ERROR'] = htmlentities($row['APP_MSG_ERROR'], ENT_HTML5, "UTF-8");
switch ($filterBy) {
case 'CASES':

View File

@@ -187,7 +187,7 @@ class Delegation extends Model
*/
public function scopeIsThreadOpen($query)
{
return $query->where('DEL_THREAD_STATUS', '=', 'OPEN');
return $query->where('APP_DELEGATION.DEL_THREAD_STATUS', '=', 'OPEN');
}
/**
@@ -198,7 +198,7 @@ class Delegation extends Model
*/
public function scopeNoUserInThread($query)
{
return $query->where('USR_ID', '=', 0);
return $query->where('APP_DELEGATION.USR_ID', '=', 0);
}
/**
@@ -836,10 +836,17 @@ class Delegation extends Model
*
* @param string $usrUid
* @param bool $count
* @param array $selectedColumns
* @param string $categoryUid
* @param string $processUid
* @param string $textToSearch
* @param string $sort
* @param string $dir
*
* @return \Illuminate\Database\Query\Builder
*/
public static function getSelfServiceQuery($usrUid, $count = false)
public static function getSelfServiceQuery($usrUid, $count = false, $selectedColumns = ['APP_DELEGATION.APP_NUMBER', 'APP_DELEGATION.DEL_INDEX'],
$categoryUid = null, $processUid = null, $textToSearch = null, $sort = null, $dir = null)
{
// Set the 'usrUid' property to preserve
Delegation::$usrUid = $usrUid;
@@ -856,10 +863,23 @@ class Delegation extends Model
// Set the 'groups' property to preserve
Delegation::$groups = $groups;
// Start the first query
$query1 = Delegation::query()->select(['APP_NUMBER', 'DEL_INDEX']);
// Add an extra column with alias if is needed to join with the previous delegation
if (array_search('APP_DELEGATION.DEL_PREVIOUS', $selectedColumns) !== false) {
$selectedColumns[] = 'ADP.USR_ID';
}
// Add the join clause
// Start the first query
$query1 = Delegation::query()->select($selectedColumns);
// Add join clause with the previous APP_DELEGATION record if required
if (array_search('APP_DELEGATION.DEL_PREVIOUS', $selectedColumns) !== false) {
$query1->join('APP_DELEGATION AS ADP', function ($join) {
$join->on('APP_DELEGATION.APP_NUMBER', '=', 'ADP.APP_NUMBER');
$join->on('APP_DELEGATION.DEL_PREVIOUS', '=', 'ADP.DEL_INDEX');
});
}
// Add the join clause with TASK table
$query1->join('TASK', function ($join) {
// Build partial plain query for a complex Join, because Eloquent doesn't support this type of Join
$complexJoin = "
@@ -889,6 +909,33 @@ class Delegation extends Model
whereRaw($complexJoin);
});
// Add join clause with APPLICATION table if required
if (array_search('APPLICATION.APP_TITLE', $selectedColumns) !== false || !empty($textToSearch) || $sort == 'APP_TITLE') {
$query1->join('APPLICATION', function ($join) {
$join->on('APP_DELEGATION.APP_NUMBER', '=', 'APPLICATION.APP_NUMBER');
});
}
// Add join clause with PROCESS table if required
if (array_search('PROCESS.PRO_TITLE', $selectedColumns) !== false || !empty($categoryUid) || !empty($processUid) || !empty($textToSearch) || $sort == 'PRO_TITLE') {
$query1->join('PROCESS', function ($join) use ($categoryUid, $processUid) {
$join->on('APP_DELEGATION.PRO_ID', '=', 'PROCESS.PRO_ID');
if (!empty($categoryUid)) {
$join->where('PROCESS.PRO_CATEGORY', $categoryUid);
}
if (!empty($processUid)) {
$join->where('PROCESS.PRO_UID', $processUid);
}
});
}
// Build where clause for the text to search
if (!empty($textToSearch)) {
$query1->where('APPLICATION.APP_TITLE', 'LIKE', "%$textToSearch%")
->orWhere('TASK.TAS_TITLE', 'LIKE', "%$textToSearch%")
->orWhere('PROCESS.PRO_TITLE', 'LIKE', "%$textToSearch%");
}
// Clean static properties
Delegation::$usrUid = '';
Delegation::$groups = [];
@@ -898,17 +945,63 @@ class Delegation extends Model
if (!empty($selfServiceTasks)) {
// Start the second query
$query2 = Delegation::query()->select(['APP_NUMBER', 'DEL_INDEX']);
$query2 = Delegation::query()->select($selectedColumns);
$query2->tasksIn($selfServiceTasks);
$query2->isThreadOpen();
$query2->noUserInThread();
// Add join clause with the previous APP_DELEGATION record if required
if (array_search('APP_DELEGATION.DEL_PREVIOUS', $selectedColumns) !== false) {
$query2->join('APP_DELEGATION AS ADP', function ($join) {
$join->on('APP_DELEGATION.APP_NUMBER', '=', 'ADP.APP_NUMBER');
$join->on('APP_DELEGATION.DEL_PREVIOUS', '=', 'ADP.DEL_INDEX');
});
}
// Add the join clause with TASK table if required
if (array_search('TASK.TAS_TITLE', $selectedColumns) !== false || !empty($textToSearch) || $sort == 'TAS_TITLE') {
$query2->join('TASK', function ($join) {
$join->on('APP_DELEGATION.TAS_ID', '=', 'TASK.TAS_ID');
});
}
// Add join clause with APPLICATION table if required
if (array_search('APPLICATION.APP_TITLE', $selectedColumns) !== false || !empty($textToSearch) || $sort == 'APP_TITLE') {
$query2->join('APPLICATION', function ($join) {
$join->on('APP_DELEGATION.APP_NUMBER', '=', 'APPLICATION.APP_NUMBER');
});
}
// Add join clause with PROCESS table if required
if (array_search('PROCESS.PRO_TITLE', $selectedColumns) !== false || !empty($categoryUid) || !empty($processUid) || !empty($textToSearch) || $sort == 'PRO_TITLE') {
$query2->join('PROCESS', function ($join) use ($categoryUid, $processUid) {
$join->on('APP_DELEGATION.PRO_ID', '=', 'PROCESS.PRO_ID');
if (!empty($categoryUid)) {
$join->where('PROCESS.PRO_CATEGORY', $categoryUid);
}
if (!empty($processUid)) {
$join->where('PROCESS.PRO_UID', $processUid);
}
});
}
// Build where clause for the text to search
if (!empty($textToSearch)) {
$query2->where('APPLICATION.APP_TITLE', 'LIKE', "%$textToSearch%")
->orWhere('TASK.TAS_TITLE', 'LIKE', "%$textToSearch%")
->orWhere('PROCESS.PRO_TITLE', 'LIKE', "%$textToSearch%");
}
// Build the complex query that uses "UNION DISTINCT" clause
$query = sprintf('select ' . ($count ? 'count(*) as aggregate' : 'APP_NUMBER') .
' from ((%s) union distinct (%s)) self_service_cases', toSqlWithBindings($query1), toSqlWithBindings($query2));
$query = sprintf('select ' . ($count ? 'count(*) as aggregate' : '*') .
' from ((%s) union distinct (%s)) self_service_cases' . (!empty($sort) && !empty($dir) ? ' ORDER BY %s %s' : ''),
toSqlWithBindings($query1), toSqlWithBindings($query2), $sort, $dir);
return $query;
} else {
if (!empty($sort) && !empty($dir)) {
$query1->orderBy($sort, $dir);
}
return $query1;
}
}
@@ -917,24 +1010,41 @@ class Delegation extends Model
* Get the self-services cases by user
*
* @param string $usrUid
*
* @param array $selectedColumns
* @param string $categoryUid
* @param string $processUid
* @param string $textToSearch
* @param string $sort
* @param string $dir
* @param int $offset
* @param int $limit
* @return array
*/
public static function getSelfService($usrUid)
public static function getSelfService($usrUid, $selectedColumns = ['APP_DELEGATION.APP_NUMBER', 'APP_DELEGATION.DEL_INDEX'],
$categoryUid = null, $processUid = null, $textToSearch = null, $sort = null, $dir = null, $offset = null, $limit = null)
{
// Initializing the variable to return
$data = [];
// Get the query
$query = self::getSelfServiceQuery($usrUid);
$query = self::getSelfServiceQuery($usrUid, false, $selectedColumns, $categoryUid, $processUid, $textToSearch, $sort, $dir);
// Get data
if (!is_string($query)) {
// Set offset and limit if were sent
if (!is_null($offset) && !is_null($limit)) {
$query->offset($offset);
$query->limit($limit);
}
$items = $query->get();
$items->each(function ($item) use (&$data) {
$data[] = get_object_vars($item);
});
} else {
// Set offset and limit if were sent
if (!is_null($offset) && !is_null($limit)) {
$query .= " LIMIT {$offset}, {$limit}";
}
$items = DB::select($query);
foreach ($items as $item) {
$data[] = get_object_vars($item);
@@ -949,13 +1059,17 @@ class Delegation extends Model
* Count the self-services cases by user
*
* @param string $usrUid
* @param string $categoryUid
* @param string $processUid
* @param string $textToSearch
*
* @return integer
*/
public static function countSelfService($usrUid)
public static function countSelfService($usrUid, $categoryUid = null, $processUid = null, $textToSearch = null)
{
// Get the query
$query = self::getSelfServiceQuery($usrUid, true);
$query = self::getSelfServiceQuery($usrUid, true, ['APP_DELEGATION.APP_NUMBER', 'APP_DELEGATION.DEL_INDEX'],
$categoryUid, $processUid, $textToSearch);
// Get count value
if (!is_string($query)) {

View File

@@ -13,14 +13,15 @@ class Task extends Model
public $timestamps = false;
// The following types will execute without user and run automatically
public static $typesRunAutomatically = [
"WEBENTRYEVENT",
"END-MESSAGE-EVENT",
"START-MESSAGE-EVENT",
"INTERMEDIATE-THROW-MESSAGE-EVENT",
"INTERMEDIATE-CATCH-MESSAGE-EVENT",
"INTERMEDIATE-CATCH-TIMER-EVENT",
"SCRIPT-TASK",
"SERVICE-TASK",
"START-MESSAGE-EVENT",
"START-TIMER-EVENT",
"INTERMEDIATE-CATCH-TIMER-EVENT"
"WEBENTRYEVENT",
];
const DUMMY_TASKS = [