From 5105a428cd5c1b90702552381bd9fcc897862114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 4 May 2018 14:38:06 -0400 Subject: [PATCH 01/24] HOR-4523 --- composer.json | 6 +- composer.lock | 936 +++++++++++++++++++++++++++++--------------------- 2 files changed, 553 insertions(+), 389 deletions(-) diff --git a/composer.json b/composer.json index 43604ee38..2b4546be7 100644 --- a/composer.json +++ b/composer.json @@ -30,9 +30,9 @@ "laravel/framework": "5.4.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", - "colosa/pmUI": "release/3.2.3-dev", - "colosa/MichelangeloFE": "release/3.2.3-dev", - "colosa/pmdynaform": "release/3.2.3-dev", + "colosa/pmUI": "release/3.2.4-dev", + "colosa/MichelangeloFE": "release/3.2.4-dev", + "colosa/pmdynaform": "release/3.2.4-dev", "google/apiclient": "1.1.6", "dapphp/securimage": "^3.6", "psr/log":"1.0.0", diff --git a/composer.lock b/composer.lock index 19a726d6e..9f4b4a575 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "41742709993d30b70991d5277781b2d8", + "content-hash": "0dc90239f9c320f6998dfce62b78862e", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -51,14 +51,14 @@ }, { "name": "colosa/MichelangeloFE", - "version": "dev-release/3.2.3", + "version": "dev-release/3.2.4", "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "a44fbc3e9d0c9c1ce1f0e7697cedc809f8a3a220" + "reference": "1780c624132004aa13d80882937f61527adafad5" }, "require": { - "colosa/pmui": "release/3.2.3-dev" + "colosa/pmui": "release/3.2.4-dev" }, "type": "library", "description": "ProcessMaker Michelangelo Front End", @@ -66,15 +66,15 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2018-04-27T20:10:38+00:00" + "time": "2018-05-04T18:33:23+00:00" }, { "name": "colosa/pmDynaform", - "version": "dev-release/3.2.3", + "version": "dev-release/3.2.4", "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "fa6a9eb4520a090aaf50e46c90e49596b0794f04" + "reference": "d22d2d185cac311fb803e0b6891160804091bac1" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -82,11 +82,11 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2018-04-16T15:41:04+00:00" + "time": "2018-04-23T18:36:59+00:00" }, { "name": "colosa/pmUI", - "version": "dev-release/3.2.3", + "version": "dev-release/3.2.4", "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", @@ -102,21 +102,21 @@ }, { "name": "dapphp/securimage", - "version": "3.6.5", + "version": "3.6.7", "source": { "type": "git", "url": "https://github.com/dapphp/securimage.git", - "reference": "3f5a84fd80b1a35d58332896c944142713a7e802" + "reference": "1ecb884797c66e01a875c058def46c85aecea45b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dapphp/securimage/zipball/3f5a84fd80b1a35d58332896c944142713a7e802", - "reference": "3f5a84fd80b1a35d58332896c944142713a7e802", + "url": "https://api.github.com/repos/dapphp/securimage/zipball/1ecb884797c66e01a875c058def46c85aecea45b", + "reference": "1ecb884797c66e01a875c058def46c85aecea45b", "shasum": "" }, "require": { "ext-gd": "*", - "php": ">=5.2.0" + "php": ">=5.4" }, "suggest": { "ext-pdo": "For database storage support", @@ -131,7 +131,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], "authors": [ { @@ -142,10 +142,12 @@ "description": "PHP CAPTCHA Library", "homepage": "https://www.phpcaptcha.org", "keywords": [ + "Forms", + "anti-spam", "captcha", "security" ], - "time": "2016-12-04T17:45:57+00:00" + "time": "2018-03-09T06:07:41+00:00" }, { "name": "doctrine/inflector", @@ -216,21 +218,25 @@ }, { "name": "erusev/parsedown", - "version": "1.6.3", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "728952b90a333b5c6f77f06ea9422b94b585878d" + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/728952b90a333b5c6f77f06ea9422b94b585878d", - "reference": "728952b90a333b5c6f77f06ea9422b94b585878d", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", "shasum": "" }, "require": { + "ext-mbstring": "*", "php": ">=5.3.0" }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, "type": "library", "autoload": { "psr-0": { @@ -254,7 +260,7 @@ "markdown", "parser" ], - "time": "2017-05-14T14:47:48+00:00" + "time": "2018-03-08T01:11:30+00:00" }, { "name": "geshi/geshi", @@ -262,12 +268,12 @@ "source": { "type": "git", "url": "https://github.com/GeSHi/geshi-1.0.git", - "reference": "ec918ac67f6d3e9008e1d41c4d22610a96f78755" + "reference": "ed9f49a7c7a195f6ed2bc864f5ce03b990b5867d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GeSHi/geshi-1.0/zipball/ec918ac67f6d3e9008e1d41c4d22610a96f78755", - "reference": "ec918ac67f6d3e9008e1d41c4d22610a96f78755", + "url": "https://api.github.com/repos/GeSHi/geshi-1.0/zipball/ed9f49a7c7a195f6ed2bc864f5ce03b990b5867d", + "reference": "ed9f49a7c7a195f6ed2bc864f5ce03b990b5867d", "shasum": "" }, "require-dev": { @@ -294,7 +300,7 @@ ], "description": "Generic Syntax Highlighter", "homepage": "http://qbnz.com/highlighter/", - "time": "2017-07-30T00:08:49+00:00" + "time": "2018-03-09T20:04:39+00:00" }, { "name": "google/apiclient", @@ -328,7 +334,7 @@ "src/" ] }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], @@ -470,16 +476,16 @@ }, { "name": "league/flysystem", - "version": "1.0.41", + "version": "1.0.44", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f400aa98912c561ba625ea4065031b7a41e5a155" + "reference": "168dbe519737221dc87d17385cde33073881fd02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f400aa98912c561ba625ea4065031b7a41e5a155", - "reference": "f400aa98912c561ba625ea4065031b7a41e5a155", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/168dbe519737221dc87d17385cde33073881fd02", + "reference": "168dbe519737221dc87d17385cde33073881fd02", "shasum": "" }, "require": { @@ -490,12 +496,13 @@ }, "require-dev": { "ext-fileinfo": "*", - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^2.2", - "phpunit/phpunit": "~4.8" + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7" }, "suggest": { "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", @@ -549,7 +556,7 @@ "sftp", "storage" ], - "time": "2017-08-06T17:41:04+00:00" + "time": "2018-04-06T09:58:14+00:00" }, { "name": "libchart/libchart", @@ -577,7 +584,7 @@ ], "authors": [ { - "name": "Jean-Marc Tr??meaux", + "name": "Jean-Marc Trémeaux", "homepage": "http://naku.dohcrew.com/", "role": "Developer" }, @@ -603,12 +610,12 @@ "source": { "type": "git", "url": "https://github.com/Luracast/Restler.git", - "reference": "cd0c21b4f7c0a99261ad618e90a5263483e78007" + "reference": "188968f6a15796077350f1be9c461f8d02c559a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Luracast/Restler/zipball/cd0c21b4f7c0a99261ad618e90a5263483e78007", - "reference": "cd0c21b4f7c0a99261ad618e90a5263483e78007", + "url": "https://api.github.com/repos/Luracast/Restler/zipball/188968f6a15796077350f1be9c461f8d02c559a8", + "reference": "188968f6a15796077350f1be9c461f8d02c559a8", "shasum": "" }, "require": { @@ -674,7 +681,7 @@ "rest", "server" ], - "time": "2017-01-11T03:42:36+00:00" + "time": "2018-03-16T05:08:02+00:00" }, { "name": "monolog/monolog", @@ -756,7 +763,7 @@ }, { "name": "mtdowling/cron-expression", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/mtdowling/cron-expression.git", @@ -800,35 +807,30 @@ }, { "name": "nesbot/carbon", - "version": "1.22.1", + "version": "1.27.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" + "reference": "ef81c39b67200dcd7401c24363dcac05ac3a4fe9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", - "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ef81c39b67200dcd7401c24363dcac05ac3a4fe9", + "reference": "ef81c39b67200dcd7401c24363dcac05ac3a4fe9", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/translation": "~2.6 || ~3.0" + "php": ">=5.3.9", + "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "~4.0 || ~5.0" + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.23-dev" - } - }, "autoload": { "psr-4": { - "Carbon\\": "src/Carbon/" + "": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -849,20 +851,20 @@ "datetime", "time" ], - "time": "2017-01-16T07:55:07+00:00" + "time": "2018-04-23T09:02:57+00:00" }, { "name": "paragonie/random_compat", - "version": "v2.0.10", + "version": "v2.0.12", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d" + "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d", - "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb", + "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb", "shasum": "" }, "require": { @@ -897,7 +899,7 @@ "pseudorandom", "random" ], - "time": "2017-03-13T16:27:32+00:00" + "time": "2018-04-04T21:24:14+00:00" }, { "name": "pear/archive_tar", @@ -1244,16 +1246,16 @@ }, { "name": "ramsey/uuid", - "version": "3.7.0", + "version": "3.7.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e" + "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/0ef23d1b10cf1bc576e9d865a7e9c47982c5715e", - "reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/44abcdad877d9a46685a3a4d221e3b2c4b87cb76", + "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76", "shasum": "" }, "require": { @@ -1264,17 +1266,15 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "apigen/apigen": "^4.1", - "codeception/aspect-mock": "^1.0 | ^2.0", + "codeception/aspect-mock": "^1.0 | ~2.0.0", "doctrine/annotations": "~1.2.0", "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1", "ircmaxell/random-lib": "^1.1", "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.4", + "mockery/mockery": "^0.9.9", "moontoast/math": "^1.1", "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|>=5.0 <5.4", - "satooshi/php-coveralls": "^0.6.1", + "phpunit/phpunit": "^4.7|^5.0", "squizlabs/php_codesniffer": "^2.3" }, "suggest": { @@ -1322,20 +1322,20 @@ "identifier", "uuid" ], - "time": "2017-08-04T13:39:04+00:00" + "time": "2018-01-20T00:28:24+00:00" }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.8", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517" + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/9a06dc570a0367850280eefd3f1dc2da45aef517", - "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91", + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91", "shasum": "" }, "require": { @@ -1370,54 +1370,55 @@ } ], "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.org", + "homepage": "https://swiftmailer.symfony.com", "keywords": [ "email", "mail", "mailer" ], - "time": "2017-05-01T15:54:03+00:00" + "time": "2018-01-23T07:37:21+00:00" }, { "name": "symfony/console", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d6596cb5022b6a0bd940eae54a1de78646a5fda6" + "reference": "5b1fdfa8eb93464bcc36c34da39cedffef822cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d6596cb5022b6a0bd940eae54a1de78646a5fda6", - "reference": "d6596cb5022b6a0bd940eae54a1de78646a5fda6", + "url": "https://api.github.com/repos/symfony/console/zipball/5b1fdfa8eb93464bcc36c34da39cedffef822cdf", + "reference": "5b1fdfa8eb93464bcc36c34da39cedffef822cdf", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0", + "symfony/debug": "~2.8|~3.0|~4.0", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3", - "symfony/dependency-injection": "~3.3", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/filesystem": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log": "For using the console logger", + "psr/log-implementation": "For using the console logger", "symfony/event-dispatcher": "", - "symfony/filesystem": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1444,20 +1445,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-08-27T14:52:21+00:00" + "time": "2018-04-30T01:22:56+00:00" }, { "name": "symfony/css-selector", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "c5f5263ed231f164c58368efbce959137c7d9488" + "reference": "519a80d7c1d95c6cc0b67f686d15fe27c6910de0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/c5f5263ed231f164c58368efbce959137c7d9488", - "reference": "c5f5263ed231f164c58368efbce959137c7d9488", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/519a80d7c1d95c6cc0b67f686d15fe27c6910de0", + "reference": "519a80d7c1d95c6cc0b67f686d15fe27c6910de0", "shasum": "" }, "require": { @@ -1466,7 +1467,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1483,7 +1484,7 @@ ], "authors": [ { - "name": "Jean-Fran??ois Simon", + "name": "Jean-François Simon", "email": "jeanfrancois.simon@sensiolabs.com" }, { @@ -1497,20 +1498,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-03-19T22:32:39+00:00" }, { "name": "symfony/debug", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "084d804fe35808eb2ef596ec83d85d9768aa6c9d" + "reference": "1b95888cfd996484527cb41e8952d9a5eaf7454f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/084d804fe35808eb2ef596ec83d85d9768aa6c9d", - "reference": "084d804fe35808eb2ef596ec83d85d9768aa6c9d", + "url": "https://api.github.com/repos/symfony/debug/zipball/1b95888cfd996484527cb41e8952d9a5eaf7454f", + "reference": "1b95888cfd996484527cb41e8952d9a5eaf7454f", "shasum": "" }, "require": { @@ -1521,12 +1522,12 @@ "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1553,20 +1554,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2017-08-27T14:52:21+00:00" + "time": "2018-04-30T16:53:52+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "54ca9520a00386f83bca145819ad3b619aaa2485" + "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/54ca9520a00386f83bca145819ad3b619aaa2485", - "reference": "54ca9520a00386f83bca145819ad3b619aaa2485", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/fdd5abcebd1061ec647089c6c41a07ed60af09f8", + "reference": "fdd5abcebd1061ec647089c6c41a07ed60af09f8", "shasum": "" }, "require": { @@ -1577,10 +1578,10 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~3.3", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1589,7 +1590,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1616,20 +1617,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-04-06T07:35:25+00:00" }, { "name": "symfony/finder", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e" + "reference": "bd14efe8b1fabc4de82bf50dce62f05f9a102433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b2260dbc80f3c4198f903215f91a1ac7fe9fe09e", - "reference": "b2260dbc80f3c4198f903215f91a1ac7fe9fe09e", + "url": "https://api.github.com/repos/symfony/finder/zipball/bd14efe8b1fabc4de82bf50dce62f05f9a102433", + "reference": "bd14efe8b1fabc4de82bf50dce62f05f9a102433", "shasum": "" }, "require": { @@ -1638,7 +1639,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1665,33 +1666,34 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-04-04T05:07:11+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "14bacad23a4f075bfd3fd456755236cb261320e3" + "reference": "edc43b1a50402bb06b5111eb86b275c87a93e373" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/14bacad23a4f075bfd3fd456755236cb261320e3", - "reference": "14bacad23a4f075bfd3fd456755236cb261320e3", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/edc43b1a50402bb06b5111eb86b275c87a93e373", + "reference": "edc43b1a50402bb06b5111eb86b275c87a93e373", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1" + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php70": "~1.6" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0" + "symfony/expression-language": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1718,56 +1720,58 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2017-08-10T07:07:06+00:00" + "time": "2018-04-30T01:05:13+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "1c1717d28904744dc9a9f6a9d97a8b9bed1680e9" + "reference": "280fcedbcb3dabcc467a9c1734054af61928fe4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1c1717d28904744dc9a9f6a9d97a8b9bed1680e9", - "reference": "1c1717d28904744dc9a9f6a9d97a8b9bed1680e9", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/280fcedbcb3dabcc467a9c1734054af61928fe4f", + "reference": "280fcedbcb3dabcc467a9c1734054af61928fe4f", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~3.3" + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "^3.4.4|^4.0.4" }, "conflict": { "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.3", + "symfony/dependency-injection": "<3.4.5|<4.0.5,>=4", "symfony/var-dumper": "<3.3", "twig/twig": "<1.34|<2.4,>=2" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0", + "symfony/browser-kit": "~2.8|~3.0|~4.0", "symfony/class-loader": "~2.8|~3.0", - "symfony/config": "~2.8|~3.0", - "symfony/console": "~2.8|~3.0", - "symfony/css-selector": "~2.8|~3.0", - "symfony/dependency-injection": "~3.3", - "symfony/dom-crawler": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/finder": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0", - "symfony/routing": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0", - "symfony/templating": "~2.8|~3.0", - "symfony/translation": "~2.8|~3.0", - "symfony/var-dumper": "~3.3" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/console": "~2.8|~3.0|~4.0", + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "^3.4.5|^4.0.5", + "symfony/dom-crawler": "~2.8|~3.0|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0", + "symfony/templating": "~2.8|~3.0|~4.0", + "symfony/translation": "~2.8|~3.0|~4.0", + "symfony/var-dumper": "~3.3|~4.0" }, "suggest": { "symfony/browser-kit": "", - "symfony/class-loader": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", @@ -1777,7 +1781,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1804,20 +1808,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2017-08-28T22:35:03+00:00" + "time": "2018-04-30T19:27:02+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.5.0", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803" + "reference": "3296adf6a6454a050679cde90f95350ad604b171" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", + "reference": "3296adf6a6454a050679cde90f95350ad604b171", "shasum": "" }, "require": { @@ -1829,7 +1833,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.8-dev" } }, "autoload": { @@ -1863,20 +1867,79 @@ "portable", "shim" ], - "time": "2017-06-14T15:44:48+00:00" + "time": "2018-04-26T10:06:28+00:00" }, { - "name": "symfony/process", - "version": "v3.3.8", + "name": "symfony/polyfill-php70", + "version": "v1.8.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "b7666e9b438027a1ea0e1ee813ec5042d5d7f6f0" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b7666e9b438027a1ea0e1ee813ec5042d5d7f6f0", - "reference": "b7666e9b438027a1ea0e1ee813ec5042d5d7f6f0", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6", + "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-04-26T10:06:28+00:00" + }, + { + "name": "symfony/process", + "version": "v3.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "4b7d64e852886319e93ddfdecff0d744ab87658b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/4b7d64e852886319e93ddfdecff0d744ab87658b", + "reference": "4b7d64e852886319e93ddfdecff0d744ab87658b", "shasum": "" }, "require": { @@ -1885,7 +1948,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1912,39 +1975,39 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-04-03T05:22:50+00:00" }, { "name": "symfony/routing", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "970326dcd04522e1cd1fe128abaee54c225e27f9" + "reference": "9deb375986f5d1f37283d8386716d26985a0f4b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/970326dcd04522e1cd1fe128abaee54c225e27f9", - "reference": "970326dcd04522e1cd1fe128abaee54c225e27f9", + "url": "https://api.github.com/repos/symfony/routing/zipball/9deb375986f5d1f37283d8386716d26985a0f4b6", + "reference": "9deb375986f5d1f37283d8386716d26985a0f4b6", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, "conflict": { - "symfony/config": "<2.8", + "symfony/config": "<3.3.1", "symfony/dependency-injection": "<3.3", - "symfony/yaml": "<3.3" + "symfony/yaml": "<3.4" }, "require-dev": { "doctrine/annotations": "~1.0", "doctrine/common": "~2.2", "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~3.3", - "symfony/expression-language": "~2.8|~3.0", - "symfony/http-foundation": "~2.8|~3.0", - "symfony/yaml": "~3.3" + "symfony/config": "^3.3.1|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/http-foundation": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -1957,7 +2020,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1990,20 +2053,20 @@ "uri", "url" ], - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-04-12T09:01:03+00:00" }, { "name": "symfony/translation", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "add53753d978f635492dfe8cd6953f6a7361ef90" + "reference": "d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/add53753d978f635492dfe8cd6953f6a7361ef90", - "reference": "add53753d978f635492dfe8cd6953f6a7361ef90", + "url": "https://api.github.com/repos/symfony/translation/zipball/d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c", + "reference": "d4af50f46cd8171fd5c1cdebdb9a8bbcd8078c6c", "shasum": "" }, "require": { @@ -2012,23 +2075,26 @@ }, "conflict": { "symfony/config": "<2.8", - "symfony/yaml": "<3.3" + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/intl": "^2.8.18|^3.2.5", - "symfony/yaml": "~3.3" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/intl": "^2.8.18|^3.2.5|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { - "psr/log": "To use logging capability in translator", + "psr/log-implementation": "To use logging capability in translator", "symfony/config": "", "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -2055,20 +2121,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-04-30T01:22:56+00:00" }, { "name": "symfony/var-dumper", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "89fcb5a73e0ede2be2512234c4e40457bb22b35f" + "reference": "0e6545672d8c9ce70dd472adc2f8b03155a46f73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89fcb5a73e0ede2be2512234c4e40457bb22b35f", - "reference": "89fcb5a73e0ede2be2512234c4e40457bb22b35f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e6545672d8c9ce70dd472adc2f8b03155a46f73", + "reference": "0e6545672d8c9ce70dd472adc2f8b03155a46f73", "shasum": "" }, "require": { @@ -2084,12 +2150,13 @@ }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", "ext-symfony_debug": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -2123,33 +2190,33 @@ "debug", "dump" ], - "time": "2017-08-27T14:52:21+00:00" + "time": "2018-04-26T12:42:15+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b" + "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b", - "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", "shasum": "" }, "require": { - "php": "^5.5 || ^7", - "symfony/css-selector": "^2.7|~3.0" + "php": "^5.5 || ^7.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" }, "require-dev": { - "phpunit/phpunit": "~4.8|5.1.*" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { @@ -2170,7 +2237,7 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2016-09-20T12:50:39+00:00" + "time": "2017-11-27T11:13:29+00:00" }, { "name": "typo3/class-alias-loader", @@ -2284,16 +2351,16 @@ "packages-dev": [ { "name": "beberlei/assert", - "version": "v2.7.6", + "version": "v2.9.5", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "8726e183ebbb0169cb6cb4832e22ebd355524563" + "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/8726e183ebbb0169cb6cb4832e22ebd355524563", - "reference": "8726e183ebbb0169cb6cb4832e22ebd355524563", + "url": "https://api.github.com/repos/beberlei/assert/zipball/c07fe163d6a3b3e4b1275981ec004397954afa89", + "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89", "shasum": "" }, "require": { @@ -2302,7 +2369,7 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.1.1", - "phpunit/phpunit": "^4|^5" + "phpunit/phpunit": "^4.8.35|^5.7" }, "type": "library", "autoload": { @@ -2335,40 +2402,41 @@ "assertion", "validation" ], - "time": "2017-05-04T02:00:24+00:00" + "time": "2018-04-16T11:18:27+00:00" }, { "name": "behat/behat", - "version": "v3.3.1", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "44a58c1480d6144b2dc2c2bf02b9cef73c83840d" + "reference": "d60b161bff1b95ec4bb80bb8cb210ccf890314c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/44a58c1480d6144b2dc2c2bf02b9cef73c83840d", - "reference": "44a58c1480d6144b2dc2c2bf02b9cef73c83840d", + "url": "https://api.github.com/repos/Behat/Behat/zipball/d60b161bff1b95ec4bb80bb8cb210ccf890314c2", + "reference": "d60b161bff1b95ec4bb80bb8cb210ccf890314c2", "shasum": "" }, "require": { - "behat/gherkin": "^4.4.4", + "behat/gherkin": "^4.5.1", "behat/transliterator": "^1.2", - "container-interop/container-interop": "^1.1", + "container-interop/container-interop": "^1.2", "ext-mbstring": "*", "php": ">=5.3.3", - "symfony/class-loader": "~2.1||~3.0", - "symfony/config": "~2.3||~3.0", - "symfony/console": "~2.5||~3.0", - "symfony/dependency-injection": "~2.1||~3.0", - "symfony/event-dispatcher": "~2.1||~3.0", - "symfony/translation": "~2.3||~3.0", - "symfony/yaml": "~2.1||~3.0" + "psr/container": "^1.0", + "symfony/class-loader": "~2.1||~3.0||~4.0", + "symfony/config": "~2.3||~3.0||~4.0", + "symfony/console": "~2.5||~3.0||~4.0", + "symfony/dependency-injection": "~2.1||~3.0||~4.0", + "symfony/event-dispatcher": "~2.1||~3.0||~4.0", + "symfony/translation": "~2.3||~3.0||~4.0", + "symfony/yaml": "~2.1||~3.0||~4.0" }, "require-dev": { "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "~4.5", - "symfony/process": "~2.5|~3.0" + "phpunit/phpunit": "^4.8.36|^6.3", + "symfony/process": "~2.5|~3.0|~4.0" }, "suggest": { "behat/mink-extension": "for integration with Mink testing framework", @@ -2417,7 +2485,7 @@ "symfony", "testing" ], - "time": "2017-05-15T16:49:16+00:00" + "time": "2017-11-27T10:37:56+00:00" }, { "name": "behat/gherkin", @@ -2773,30 +2841,33 @@ }, { "name": "facebook/webdriver", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "eadb0b7a7c3e6578185197fd40158b08c3164c83" + "reference": "86b5ca2f67173c9d34340845dd690149c886a605" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/eadb0b7a7c3e6578185197fd40158b08c3164c83", - "reference": "eadb0b7a7c3e6578185197fd40158b08c3164c83", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/86b5ca2f67173c9d34340845dd690149c886a605", + "reference": "86b5ca2f67173c9d34340845dd690149c886a605", "shasum": "" }, "require": { "ext-curl": "*", "ext-zip": "*", - "php": "^5.5 || ~7.0", - "symfony/process": "^2.8 || ^3.1" + "php": "^5.6 || ~7.0", + "symfony/process": "^2.8 || ^3.1 || ^4.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.0", + "guzzle/guzzle": "^3.4.1", + "php-coveralls/php-coveralls": "^1.0.2", "php-mock/php-mock-phpunit": "^1.1", - "phpunit/phpunit": "4.6.* || ~5.0", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "^2.6" + "phpunit/phpunit": "^5.7", + "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", + "squizlabs/php_codesniffer": "^2.6", + "symfony/var-dumper": "^3.3 || ^4.0" }, "type": "library", "extra": { @@ -2821,7 +2892,7 @@ "selenium", "webdriver" ], - "time": "2017-04-28T14:54:49+00:00" + "time": "2017-11-15T11:08:09+00:00" }, { "name": "florianwolters/component-core-stringutils", @@ -2996,7 +3067,7 @@ ], "authors": [ { - "name": "Christian L??ck", + "name": "Christian Lück", "email": "christian@lueck.tv" } ], @@ -3015,7 +3086,7 @@ }, { "name": "guzzle/guzzle", - "version": "3.1.2", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", @@ -3025,10 +3096,86 @@ "type": "zip", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7901ea7d27373d0cc85eac6f6694e4c2ced90a26", "reference": "7901ea7d27373d0cc85eac6f6694e4c2ced90a26", - "shasum": "25bc38119541c151c455c3140b4dc388d7ec4187" + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.2", + "symfony/event-dispatcher": ">=2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/common": "*", + "monolog/monolog": "1.*", + "phpunit/phpunit": "3.7.*", + "symfony/class-loader": "*", + "zend/zend-cache1": "1.12", + "zend/zend-log1": "1.12", + "zendframework/zend-cache": "2.0.*", + "zendframework/zend-log": "2.0.*" }, "type": "library", - "abandoned": "guzzlehttp/guzzle" + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle\\Tests": "tests/", + "Guzzle": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2013-01-28T00:07:40+00:00" }, { "name": "instaclick/php-webdriver", @@ -3091,16 +3238,16 @@ }, { "name": "lmc/steward", - "version": "2.2.1", + "version": "2.3.3", "source": { "type": "git", "url": "https://github.com/lmc-eu/steward.git", - "reference": "3d2b203a8576b074a829b639563322dcb53a2668" + "reference": "f40db91e7378a373ada4505932d8ba2d8a4ea04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lmc-eu/steward/zipball/3d2b203a8576b074a829b639563322dcb53a2668", - "reference": "3d2b203a8576b074a829b639563322dcb53a2668", + "url": "https://api.github.com/repos/lmc-eu/steward/zipball/f40db91e7378a373ada4505932d8ba2d8a4ea04a", + "reference": "f40db91e7378a373ada4505932d8ba2d8a4ea04a", "shasum": "" }, "require": { @@ -3112,10 +3259,10 @@ "facebook/webdriver": "^1.4.0", "florianwolters/component-util-singleton": "0.3.2", "graphp/algorithms": "^0.8.1", - "nette/reflection": "^2.3.2", + "nette/reflection": "^2.4.2", "ondram/ci-detector": "^2.1", "php": "^5.6 || ~7.0", - "phpunit/phpunit": "^5.7", + "phpunit/phpunit": "^5.7.11", "symfony/console": "^3.3.0", "symfony/event-dispatcher": "~3.0", "symfony/filesystem": "~3.0", @@ -3127,8 +3274,8 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.0", + "php-coveralls/php-coveralls": "^1.0.2", "php-mock/php-mock-phpunit": "~1.0", - "satooshi/php-coveralls": "^1.0", "squizlabs/php_codesniffer": "^2.4.1", "symfony/var-dumper": "^3.2" }, @@ -3155,6 +3302,12 @@ "license": [ "MIT" ], + "authors": [ + { + "name": "LMC s.r.o.", + "homepage": "https://github.com/lmc-eu" + } + ], "description": "Steward - makes Selenium WebDriver + PHPUnit testing easy and robust", "keywords": [ "phpunit", @@ -3162,41 +3315,44 @@ "testing", "webdriver" ], - "time": "2017-06-05T23:56:28+00:00" + "time": "2018-03-12T00:56:44+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.6.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" - } + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -3204,20 +3360,20 @@ "object", "object graph" ], - "time": "2017-04-12T18:52:22+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "nette/caching", - "version": "v2.5.5", + "version": "v2.5.8", "source": { "type": "git", "url": "https://github.com/nette/caching.git", - "reference": "997d3b9868840da8b51f27565bfe1a8210e94620" + "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/997d3b9868840da8b51f27565bfe1a8210e94620", - "reference": "997d3b9868840da8b51f27565bfe1a8210e94620", + "url": "https://api.github.com/repos/nette/caching/zipball/7fba7c7ab2585fafb7b31152f2595e1551120555", + "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555", "shasum": "" }, "require": { @@ -3264,7 +3420,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "??? Nette Caching: library with easy-to-use API and many cache backends.", + "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", "homepage": "https://nette.org", "keywords": [ "cache", @@ -3273,7 +3429,7 @@ "nette", "sqlite" ], - "time": "2017-08-18T15:20:18+00:00" + "time": "2018-03-21T11:04:32+00:00" }, { "name": "nette/finder", @@ -3397,16 +3553,16 @@ }, { "name": "nette/utils", - "version": "v2.4.8", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "f1584033b5af945b470533b466b81a789d532034" + "reference": "183069866dc477fcfbac393ed486aaa6d93d19a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/f1584033b5af945b470533b466b81a789d532034", - "reference": "f1584033b5af945b470533b466b81a789d532034", + "url": "https://api.github.com/repos/nette/utils/zipball/183069866dc477fcfbac393ed486aaa6d93d19a5", + "reference": "183069866dc477fcfbac393ed486aaa6d93d19a5", "shasum": "" }, "require": { @@ -3430,12 +3586,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.5-dev" } }, "autoload": { "classmap": [ "src/" + ], + "files": [ + "src/loader.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3454,7 +3613,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "???? Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", "homepage": "https://nette.org", "keywords": [ "array", @@ -3472,7 +3631,7 @@ "utility", "validation" ], - "time": "2017-08-20T17:32:29+00:00" + "time": "2018-05-02T17:16:08+00:00" }, { "name": "ondram/ci-detector", @@ -3507,7 +3666,7 @@ ], "authors": [ { - "name": "Ond??ej Machulda", + "name": "Ondřej Machulda", "email": "ondrej.machulda@gmail.com" } ], @@ -3529,16 +3688,16 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "1.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { @@ -3579,26 +3738,26 @@ "reflection", "static analysis" ], - "time": "2015-12-27T11:43:31+00:00" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.2.2", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157" + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157", - "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.3.0", + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { @@ -3624,20 +3783,20 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-08T06:39:58+00:00" + "time": "2017-11-10T14:09:06+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.3.0", + "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773" + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773", - "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { @@ -3671,32 +3830,32 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-06-03T08:32:36+00:00" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.7.2", + "version": "1.7.6", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6" + "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6", - "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8 || ^5.6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", "extra": { @@ -3734,7 +3893,7 @@ "spy", "stub" ], - "time": "2017-09-04T11:05:03+00:00" + "time": "2018-04-18T13:57:24+00:00" }, { "name": "phpunit/php-code-coverage", @@ -3801,16 +3960,16 @@ }, { "name": "phpunit/php-file-iterator", - "version": "1.4.2", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -3844,7 +4003,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03T07:40:28+00:00" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -3938,16 +4097,16 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.11", + "version": "1.4.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", - "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", "shasum": "" }, "require": { @@ -3983,20 +4142,20 @@ "keywords": [ "tokenizer" ], - "time": "2017-02-27T10:12:30+00:00" + "time": "2017-12-04T08:55:13+00:00" }, { "name": "phpunit/phpunit", - "version": "5.7.21", + "version": "5.7.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3b91adfb64264ddec5a2dee9851f354aa66327db" + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3b91adfb64264ddec5a2dee9851f354aa66327db", - "reference": "3b91adfb64264ddec5a2dee9851f354aa66327db", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", "shasum": "" }, "require": { @@ -4020,8 +4179,8 @@ "sebastian/global-state": "^1.1", "sebastian/object-enumerator": "~2.0", "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0.3|~2.0", - "symfony/yaml": "~2.1|~3.0" + "sebastian/version": "^1.0.6|^2.0.1", + "symfony/yaml": "~2.1|~3.0|~4.0" }, "conflict": { "phpdocumentor/reflection-docblock": "3.0.2" @@ -4065,7 +4224,7 @@ "testing", "xunit" ], - "time": "2017-06-21T08:11:54+00:00" + "time": "2018-02-01T05:50:59+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -4690,16 +4849,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.0.2", + "version": "3.2.3", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "c7594a88ae75401e8f8d0bd4deb8431b39045c51" + "reference": "4842476c434e375f9d3182ff7b89059583aa8b27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/c7594a88ae75401e8f8d0bd4deb8431b39045c51", - "reference": "c7594a88ae75401e8f8d0bd4deb8431b39045c51", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/4842476c434e375f9d3182ff7b89059583aa8b27", + "reference": "4842476c434e375f9d3182ff7b89059583aa8b27", "shasum": "" }, "require": { @@ -4709,7 +4868,7 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "bin": [ "bin/phpcs", @@ -4737,27 +4896,27 @@ "phpcs", "standards" ], - "time": "2017-07-18T01:12:32+00:00" + "time": "2018-02-20T21:35:23+00:00" }, { "name": "symfony/class-loader", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "9c69968ce57924e9e93550895cd2b0477edf0e19" + "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/9c69968ce57924e9e93550895cd2b0477edf0e19", - "reference": "9c69968ce57924e9e93550895cd2b0477edf0e19", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/e63c12699822bb3b667e7216ba07fbcc3a3e203e", + "reference": "e63c12699822bb3b667e7216ba07fbcc3a3e203e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, "require-dev": { - "symfony/finder": "~2.8|~3.0", + "symfony/finder": "~2.8|~3.0|~4.0", "symfony/polyfill-apcu": "~1.1" }, "suggest": { @@ -4766,7 +4925,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4793,34 +4952,35 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-01-03T07:37:34+00:00" }, { "name": "symfony/config", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6ac0cc1f047c1dbc058fc25b7a4d91b068ed4488" + "reference": "7c2a9d44f4433863e9bca682e7f03609234657f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6ac0cc1f047c1dbc058fc25b7a4d91b068ed4488", - "reference": "6ac0cc1f047c1dbc058fc25b7a4d91b068ed4488", + "url": "https://api.github.com/repos/symfony/config/zipball/7c2a9d44f4433863e9bca682e7f03609234657f9", + "reference": "7c2a9d44f4433863e9bca682e7f03609234657f9", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0" + "symfony/filesystem": "~2.8|~3.0|~4.0" }, "conflict": { "symfony/dependency-injection": "<3.3", "symfony/finder": "<3.3" }, "require-dev": { - "symfony/dependency-injection": "~3.3", - "symfony/finder": "~3.3", - "symfony/yaml": "~3.0" + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/event-dispatcher": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -4828,7 +4988,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4855,20 +5015,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2017-08-03T08:59:45+00:00" + "time": "2018-03-19T22:32:39+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "2ac658972626c75cbde7b0067c84b988170a6907" + "reference": "54ff9d78b56429f9a1ac12e60bfb6d169c0468e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2ac658972626c75cbde7b0067c84b988170a6907", - "reference": "2ac658972626c75cbde7b0067c84b988170a6907", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/54ff9d78b56429f9a1ac12e60bfb6d169c0468e3", + "reference": "54ff9d78b56429f9a1ac12e60bfb6d169c0468e3", "shasum": "" }, "require": { @@ -4876,17 +5036,18 @@ "psr/container": "^1.0" }, "conflict": { - "symfony/config": "<3.3.1", + "symfony/config": "<3.3.7", "symfony/finder": "<3.3", - "symfony/yaml": "<3.3" + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" }, "provide": { "psr/container-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3", - "symfony/expression-language": "~2.8|~3.0", - "symfony/yaml": "~3.3" + "symfony/config": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/config": "", @@ -4898,7 +5059,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4925,20 +5086,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2017-08-28T22:20:37+00:00" + "time": "2018-04-29T14:04:08+00:00" }, { "name": "symfony/filesystem", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b32a0e5f928d0fa3d1dd03c78d020777e50c10cb" + "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b32a0e5f928d0fa3d1dd03c78d020777e50c10cb", - "reference": "b32a0e5f928d0fa3d1dd03c78d020777e50c10cb", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/253a4490b528597aa14d2bf5aeded6f5e5e4a541", + "reference": "253a4490b528597aa14d2bf5aeded6f5e5e4a541", "shasum": "" }, "require": { @@ -4947,7 +5108,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -4974,20 +5135,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-02-22T10:48:49+00:00" }, { "name": "symfony/options-resolver", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "ee4e22978fe885b54ee5da8c7964f0a5301abfb6" + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ee4e22978fe885b54ee5da8c7964f0a5301abfb6", - "reference": "ee4e22978fe885b54ee5da8c7964f0a5301abfb6", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f3109a6aedd20e35c3a33190e932c2b063b7b50e", + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e", "shasum": "" }, "require": { @@ -4996,7 +5157,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5028,20 +5189,20 @@ "configuration", "options" ], - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-01-11T07:56:07+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "9a5610a8d6a50985a7be485c0ba745c22607beeb" + "reference": "eb17cfa072cab26537ac37e9c4ece6c0361369af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/9a5610a8d6a50985a7be485c0ba745c22607beeb", - "reference": "9a5610a8d6a50985a7be485c0ba745c22607beeb", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/eb17cfa072cab26537ac37e9c4ece6c0361369af", + "reference": "eb17cfa072cab26537ac37e9c4ece6c0361369af", "shasum": "" }, "require": { @@ -5050,7 +5211,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5077,27 +5238,30 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-02-17T14:55:25+00:00" }, { "name": "symfony/yaml", - "version": "v3.3.8", + "version": "v3.4.9", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "1d8c2a99c80862bdc3af94c1781bf70f86bccac0" + "reference": "033cfa61ef06ee0847e056e530201842b6e926c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/1d8c2a99c80862bdc3af94c1781bf70f86bccac0", - "reference": "1d8c2a99c80862bdc3af94c1781bf70f86bccac0", + "url": "https://api.github.com/repos/symfony/yaml/zipball/033cfa61ef06ee0847e056e530201842b6e926c3", + "reference": "033cfa61ef06ee0847e056e530201842b6e926c3", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8" }, + "conflict": { + "symfony/console": "<3.4" + }, "require-dev": { - "symfony/console": "~2.8|~3.0" + "symfony/console": "~3.4|~4.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -5105,7 +5269,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -5132,20 +5296,20 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2017-07-29T21:54:42+00:00" + "time": "2018-04-08T08:21:29+00:00" }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { @@ -5182,20 +5346,20 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2018-01-29T19:49:41+00:00" }, { "name": "wimg/php-compatibility", - "version": "8.0.1", + "version": "8.1.0", "source": { "type": "git", "url": "https://github.com/wimg/PHPCompatibility.git", - "reference": "4c4385fb891dff0501009670f988d4fe36785249" + "reference": "4ac01e4fe8faaa4f8d3b3cd06ea92e5418ce472e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wimg/PHPCompatibility/zipball/4c4385fb891dff0501009670f988d4fe36785249", - "reference": "4c4385fb891dff0501009670f988d4fe36785249", + "url": "https://api.github.com/repos/wimg/PHPCompatibility/zipball/4ac01e4fe8faaa4f8d3b3cd06ea92e5418ce472e", + "reference": "4ac01e4fe8faaa4f8d3b3cd06ea92e5418ce472e", "shasum": "" }, "require": { @@ -5209,7 +5373,7 @@ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0" }, "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1" + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.3" }, "type": "phpcodesniffer-standard", "autoload": { @@ -5234,7 +5398,7 @@ "phpcs", "standards" ], - "time": "2017-08-07T19:39:05+00:00" + "time": "2017-12-27T21:58:38+00:00" } ], "aliases": [], From 9bf735c56b71557faf4c8e3654a84304e25cb303 Mon Sep 17 00:00:00 2001 From: Fabio Guachalla Date: Wed, 16 May 2018 09:23:31 -0400 Subject: [PATCH 02/24] FBI-2401:RTL> Styles have been broken in 3.2.3 with an RTL language Icons Case --- workflow/engine/skinEngine/base/css/rtl.css | 3 +++ workflow/engine/skinEngine/base/css/sprite.css | 2 +- workflow/engine/skinEngine/neoclassic/css/rtl.css | 4 ++-- workflow/engine/skinEngine/neoclassic/css/sprite.css | 1 + workflow/engine/skinEngine/simplified/css/rtl.css | 3 +++ workflow/engine/skinEngine/uxmodern/css/rtl.css | 3 +++ workflow/engine/skinEngine/uxmodern/css/sprite.css | 2 +- workflow/engine/skinEngine/uxs/css/rtl.css | 3 +++ workflow/engine/skinEngine/uxs/css/sprite.css | 2 +- workflow/engine/templates/cases/casesStartCase.js | 2 +- workflow/engine/templates/cases/main.js | 2 +- workflow/engine/templates/cases/open.js | 2 +- workflow/engine/templates/processes/main.js | 2 -- 13 files changed, 21 insertions(+), 10 deletions(-) diff --git a/workflow/engine/skinEngine/base/css/rtl.css b/workflow/engine/skinEngine/base/css/rtl.css index 32c0aafb5..ebca179bb 100644 --- a/workflow/engine/skinEngine/base/css/rtl.css +++ b/workflow/engine/skinEngine/base/css/rtl.css @@ -398,3 +398,6 @@ td.x-date-mp-sep { right: 0x !important; } +#startCaseTreePanel span:after, font:after { + content: "\200E‎"; +} diff --git a/workflow/engine/skinEngine/base/css/sprite.css b/workflow/engine/skinEngine/base/css/sprite.css index 6fbc6fd75..515383ed0 100644 --- a/workflow/engine/skinEngine/base/css/sprite.css +++ b/workflow/engine/skinEngine/base/css/sprite.css @@ -28,7 +28,7 @@ Sprite modificado de http://ajaxbestiary.com/Labs/SilkSprite/ .panel_headerBar___processmaker{background:url("/images/ext/gray/toolbar/bg.gif") #F0F0F0 !important} -.button_menu_ext{height:18px !important;} +.button_menu_ext{padding-left:20px !important;height:18px !important;} .button_large_ext{padding-left:20px !important;height:32px !important;} .button_toolbar{padding-left:18px !important;height:18px !important;font-size:15px;cursor:pointer;margin:0 2px 1px 3px;line-height:25px} .ss_accept{background-position:0 0 !important} diff --git a/workflow/engine/skinEngine/neoclassic/css/rtl.css b/workflow/engine/skinEngine/neoclassic/css/rtl.css index fc927e70d..2211b8ffb 100644 --- a/workflow/engine/skinEngine/neoclassic/css/rtl.css +++ b/workflow/engine/skinEngine/neoclassic/css/rtl.css @@ -672,6 +672,6 @@ td.x-date-mp-sep { .ext-ie .x-menu-item-checked .x-menu-group-item .x-menu-item-icon { right: 0x !important; } -span:after, font:after { - content: "\200E‎"; +#startCaseTreePanel span:after, font:after { + content: "\200E‎"; } diff --git a/workflow/engine/skinEngine/neoclassic/css/sprite.css b/workflow/engine/skinEngine/neoclassic/css/sprite.css index ef65bb558..3bd763050 100644 --- a/workflow/engine/skinEngine/neoclassic/css/sprite.css +++ b/workflow/engine/skinEngine/neoclassic/css/sprite.css @@ -220,6 +220,7 @@ Sprite modificado de http://ajaxbestiary.com/Labs/SilkSprite/ background: url("/skins/neoclassic/images/ext/gray/toolbar/bg.gif") #f0f0f0 !important; } .button_menu_ext { + padding-left: 20px !important; height: 18px !important; } .button_large_ext { diff --git a/workflow/engine/skinEngine/simplified/css/rtl.css b/workflow/engine/skinEngine/simplified/css/rtl.css index cafa97902..e19531b5e 100644 --- a/workflow/engine/skinEngine/simplified/css/rtl.css +++ b/workflow/engine/skinEngine/simplified/css/rtl.css @@ -417,3 +417,6 @@ td.x-date-mp-sep { right: 0x !important; } +#startCaseTreePanel span:after, font:after { + content: "\200E‎"; +} diff --git a/workflow/engine/skinEngine/uxmodern/css/rtl.css b/workflow/engine/skinEngine/uxmodern/css/rtl.css index 2692070ef..a8ff20ff6 100644 --- a/workflow/engine/skinEngine/uxmodern/css/rtl.css +++ b/workflow/engine/skinEngine/uxmodern/css/rtl.css @@ -397,3 +397,6 @@ td.x-date-mp-sep { right: 0x !important; } +#startCaseTreePanel span:after, font:after { + content: "\200E‎"; +} diff --git a/workflow/engine/skinEngine/uxmodern/css/sprite.css b/workflow/engine/skinEngine/uxmodern/css/sprite.css index 6fbc6fd75..515383ed0 100644 --- a/workflow/engine/skinEngine/uxmodern/css/sprite.css +++ b/workflow/engine/skinEngine/uxmodern/css/sprite.css @@ -28,7 +28,7 @@ Sprite modificado de http://ajaxbestiary.com/Labs/SilkSprite/ .panel_headerBar___processmaker{background:url("/images/ext/gray/toolbar/bg.gif") #F0F0F0 !important} -.button_menu_ext{height:18px !important;} +.button_menu_ext{padding-left:20px !important;height:18px !important;} .button_large_ext{padding-left:20px !important;height:32px !important;} .button_toolbar{padding-left:18px !important;height:18px !important;font-size:15px;cursor:pointer;margin:0 2px 1px 3px;line-height:25px} .ss_accept{background-position:0 0 !important} diff --git a/workflow/engine/skinEngine/uxs/css/rtl.css b/workflow/engine/skinEngine/uxs/css/rtl.css index ece827ab0..b06541ec1 100644 --- a/workflow/engine/skinEngine/uxs/css/rtl.css +++ b/workflow/engine/skinEngine/uxs/css/rtl.css @@ -399,3 +399,6 @@ td.x-date-mp-sep { right: 0x !important; } +#startCaseTreePanel span:after, font:after { + content: "\200E‎"; +} diff --git a/workflow/engine/skinEngine/uxs/css/sprite.css b/workflow/engine/skinEngine/uxs/css/sprite.css index 6fbc6fd75..515383ed0 100644 --- a/workflow/engine/skinEngine/uxs/css/sprite.css +++ b/workflow/engine/skinEngine/uxs/css/sprite.css @@ -28,7 +28,7 @@ Sprite modificado de http://ajaxbestiary.com/Labs/SilkSprite/ .panel_headerBar___processmaker{background:url("/images/ext/gray/toolbar/bg.gif") #F0F0F0 !important} -.button_menu_ext{height:18px !important;} +.button_menu_ext{padding-left:20px !important;height:18px !important;} .button_large_ext{padding-left:20px !important;height:32px !important;} .button_toolbar{padding-left:18px !important;height:18px !important;font-size:15px;cursor:pointer;margin:0 2px 1px 3px;line-height:25px} .ss_accept{background-position:0 0 !important} diff --git a/workflow/engine/templates/cases/casesStartCase.js b/workflow/engine/templates/cases/casesStartCase.js index 9c8c77fef..c573f00ee 100644 --- a/workflow/engine/templates/cases/casesStartCase.js +++ b/workflow/engine/templates/cases/casesStartCase.js @@ -328,7 +328,7 @@ Ext.onReady(function() { xtype : 'button', id : 'starCaseButton', disabled : true, - iconCls : "ICON_CASES_START_CASE", + iconCls : "button_menu_ext ICON_CASES_START_CASE", text : TRANSLATIONS.ID_TITLE_START_CASE, autoWidth : true, handler : function() { diff --git a/workflow/engine/templates/cases/main.js b/workflow/engine/templates/cases/main.js index a025d78aa..d43e42d00 100644 --- a/workflow/engine/templates/cases/main.js +++ b/workflow/engine/templates/cases/main.js @@ -389,7 +389,7 @@ Ext.onReady(function(){ id: 'deatachAction', disabled: true, text: _('ID_OPEN_IN_A_NEW_WINDOW'), - iconCls: 'ss_sprite ss_application_form', + iconCls: 'button_menu_ext ss_sprite ss_application_form', handler: function(){ if( Ext.getCmp('debugPanelTabs').getActiveTab().id === 'debugVariables' ){ var i, diff --git a/workflow/engine/templates/cases/open.js b/workflow/engine/templates/cases/open.js index 3b7457f0f..47146b4a0 100644 --- a/workflow/engine/templates/cases/open.js +++ b/workflow/engine/templates/cases/open.js @@ -438,7 +438,7 @@ Ext.onReady(function(){ pressed: false, enableToggle:true, text: '  '+_('ID_CASES_NOTES'), - iconCls: 'ICON_CASES_NOTES', + iconCls: 'button_menu_ext ICON_CASES_NOTES', tooltip: { title: _('ID_CASES_NOTES'), text:_('ID_SHOW_CASES_NOTES') diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index 11fffc19d..09b2f3fa0 100644 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -703,7 +703,6 @@ Ext.onReady(function(){ var arrayContextMenuOption = [ { text: _("ID_EDIT"), - iconCls: "button_menu_ext", icon: "/images/pencil.png", handler: editProcess }, @@ -720,7 +719,6 @@ Ext.onReady(function(){ }, { text: _("ID_DELETE"), - iconCls: "button_menu_ext", icon: "/images/delete_16.png", handler: deleteProcess }, From 7bbce81e178c1eb8e13e3de21860714a7395828f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Wed, 16 May 2018 14:35:52 -0400 Subject: [PATCH 03/24] HOR-4572 --- workflow/engine/classes/PmDynaform.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index 28b063a4e..4e0aa58cc 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -252,6 +252,11 @@ class PmDynaform $dtFields = $json->queryInputData; } else { $dtFields = $this->getValuesDependentFields($json); + foreach ($dtFields as $keyF => $valueF) { + if (isset($this->fields["APP_DATA"][$keyF])) { + $dtFields[$keyF] = $this->fields["APP_DATA"][$keyF]; + } + } } $sql = G::replaceDataField($json->sql, $dtFields); if ($value === "suggest") { From 371970eb748f9cfef735f2dd829be13e3805d751 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 16 May 2018 21:48:52 -0400 Subject: [PATCH 04/24] HOR-4577 --- workflow/engine/classes/WsBase.php | 1 + 1 file changed, 1 insertion(+) diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php index d87a7e3df..0134c635f 100644 --- a/workflow/engine/classes/WsBase.php +++ b/workflow/engine/classes/WsBase.php @@ -2300,6 +2300,7 @@ class WsBase ); //Execute triggers after routing + $appFields = $oCase->loadCase($caseId); $varTriggers .= $this->executeTriggerFromDerivate($caseId, $appFields["APP_DATA"], $appdel['TAS_UID'], 'ASSIGN_TASK', -2, 'AFTER', "-= After Derivation =-"); $sFromName = ""; From f40431e703b07f121a9b33430dd8e87ee584f675 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 20 Apr 2018 08:57:55 -0400 Subject: [PATCH 05/24] HOR-4489 --- workflow/engine/classes/Cases.php | 258 ++++++++++-------- workflow/engine/classes/WsBase.php | 171 +++++++----- workflow/engine/classes/class.pmFunctions.php | 11 +- workflow/engine/classes/model/AppDelay.php | 208 +++++++++----- .../engine/classes/model/AppDelegation.php | 37 +-- workflow/engine/classes/model/AppThread.php | 18 +- workflow/engine/classes/model/Application.php | 3 +- .../engine/classes/model/ListCanceled.php | 32 +-- .../engine/classes/model/SubApplication.php | 17 ++ .../model/map/ListCanceledMapBuilder.php | 4 +- .../classes/model/om/BaseListCanceled.php | 206 +++++++------- .../classes/model/om/BaseListCanceledPeer.php | 88 +++--- workflow/engine/config/schema.xml | 2 +- workflow/engine/data/mysql/schema.sql | 4 +- 14 files changed, 603 insertions(+), 456 deletions(-) diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index 8dae33f5a..fdcf97fde 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -1856,14 +1856,16 @@ class Cases * This function updates a row in APP_DELEGATION * * @name closeAllDelegations - * @param string $sAppUid + * @param string $appUid + * * @return void + * @throws Exception */ - public function closeAllThreads($sAppUid) + public function closeAllThreads($appUid) { try { $c = new Criteria(); - $c->add(AppThreadPeer::APP_UID, $sAppUid); + $c->add(AppThreadPeer::APP_UID, $appUid); $c->add(AppThreadPeer::APP_THREAD_STATUS, 'OPEN'); $rowObj = AppThreadPeer::doSelect($c); foreach ($rowObj as $appThread) { @@ -1878,11 +1880,12 @@ class Cases throw (new PropelException('The row cannot be created!', new PropelException($msg))); } } - //update searchindex + + /** Update search index */ if ($this->appSolr != null) { - $this->appSolr->updateApplicationSearchIndex($sAppUid); + $this->appSolr->updateApplicationSearchIndex($appUid); } - } catch (exception $e) { + } catch (Exception $e) { throw ($e); } } @@ -1915,19 +1918,22 @@ class Cases /** * With this function we can change status to CLOSED in APP_DELEGATION * - * @name closeAllDelegations - * @param string $sAppUid - * @return + * @param string $appUid + * + * @return void + * @throws Exception */ - public function closeAllDelegations($sAppUid) + public function closeAllDelegations($appUid) { try { - $c = new Criteria(); - $c->add(AppDelegationPeer::APP_UID, $sAppUid); - $c->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); - $rowObj = AppDelegationPeer::doSelect($c); + $criteria = new Criteria(); + $criteria->add(AppDelegationPeer::APP_UID, $appUid); + $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); + $rowObj = AppDelegationPeer::doSelect($criteria); + $data = []; foreach ($rowObj as $appDel) { $appDel->setDelThreadStatus('CLOSED'); + $appDel->setDelFinishDate('now'); if ($appDel->Validate()) { $appDel->Save(); } else { @@ -1937,12 +1943,31 @@ class Cases } throw (new PropelException('The row cannot be created!', new PropelException($msg))); } + + /*----------------------------------********---------------------------------*/ + $delIndex = $appDel->getDelIndex(); + $inbox = new ListInbox(); + $inbox->remove($appUid, $delIndex); + $data['DEL_THREAD_STATUS'] = 'CLOSED'; + $data['APP_UID'] = $appUid; + $data['DEL_INDEX'] = $delIndex; + $data['USR_UID'] = $appDel->getUsrUid(); + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->refresh($data); + /*----------------------------------********---------------------------------*/ + + /** This case is subProcess? */ + if (SubApplication::isCaseSubProcess($appUid)) { + $route = new Derivation(); + $route->verifyIsCaseChild($appUid, $delIndex); + } } - //update searchindex + + /** Update search index */ if ($this->appSolr != null) { - $this->appSolr->updateApplicationSearchIndex($sAppUid); + $this->appSolr->updateApplicationSearchIndex($appUid); } - } catch (exception $e) { + } catch (Exception $e) { throw ($e); } } @@ -1950,18 +1975,19 @@ class Cases /** * With this we can change the status to CLOSED in APP_DELEGATION * - * @name CloseCurrentDelegation - * @param string $sAppUid - * @param string $iDelIndex - * @return Fields + * @param string $appUid + * @param string $delIndex + * + * @return void + * @throws Exception */ - public function CloseCurrentDelegation($sAppUid, $iDelIndex) + public function CloseCurrentDelegation($appUid, $delIndex) { try { - $c = new Criteria(); - $c->add(AppDelegationPeer::APP_UID, $sAppUid); - $c->add(AppDelegationPeer::DEL_INDEX, $iDelIndex); - $rowObj = AppDelegationPeer::doSelect($c); + $criteria = new Criteria(); + $criteria->add(AppDelegationPeer::APP_UID, $appUid); + $criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex); + $rowObj = AppDelegationPeer::doSelect($criteria); $user = ''; foreach ($rowObj as $appDel) { $appDel->setDelThreadStatus('CLOSED'); @@ -1977,17 +2003,30 @@ class Cases throw (new PropelException('The row cannot be created!', new PropelException($msg))); } } + /*----------------------------------********---------------------------------*/ $inbox = new ListInbox(); - $inbox->remove($sAppUid, $iDelIndex); + $data = []; + $inbox->remove($appUid, $delIndex); $data['DEL_THREAD_STATUS'] = 'CLOSED'; - $data['APP_UID'] = $sAppUid; - $data['DEL_INDEX'] = $iDelIndex; + $data['APP_UID'] = $appUid; + $data['DEL_INDEX'] = $delIndex; $data['USR_UID'] = $user; $listParticipatedLast = new ListParticipatedLast(); $listParticipatedLast->refresh($data); /*----------------------------------********---------------------------------*/ - } catch (exception $e) { + + /** This case is subProcess? */ + if (SubApplication::isCaseSubProcess($appUid)) { + $route = new Derivation(); + $route->verifyIsCaseChild($appUid, $delIndex); + } + + /** Update searchindex */ + if ($this->appSolr != null) { + $this->appSolr->updateApplicationSearchIndex($appUid); + } + } catch (Exception $e) { throw ($e); } } @@ -4125,103 +4164,94 @@ class Cases } /** - * cancel a case + * Cancel case without matter the threads + * if the force is true, we will cancel it does not matter the threads + * if the force is false, we will to cancel one thread * - * @name cancelCase - * @param string $sApplicationUID - * @param string $iIndex - * @param string $user_logged - * @return void - */ - public function cancelCase($sApplicationUID, $iIndex, $user_logged) + * @param string $appUid + * @param integer $delIndex + * @param string $usrUid + * + * @return boolean|string + */ + public function cancelCase($appUid, $delIndex = null, $usrUid = null) { - $this->getExecuteTriggerProcess($sApplicationUID, 'CANCELED'); + /** Execute a trigger when a case is cancelled */ + $this->getExecuteTriggerProcess($appUid, 'CANCELED'); - $oApplication = new Application(); - $aFields = $oApplication->load($sApplicationUID); + $caseFields = $this->loadCase($appUid); + $appStatusCurrent = $caseFields['APP_STATUS']; - $appData = self::unserializeData($aFields['APP_DATA']); - $appData = G::array_merges(G::getSystemConstants(), $appData); + /** Update the status CANCELLED in the tables related */ + $caseFields['APP_STATUS'] = Application::APP_STATUS_CANCELLED; + $this->updateCase($appUid, $caseFields); - $appStatusCurrent = $aFields['APP_STATUS']; - $oCriteria = new Criteria('workflow'); - $oCriteria->add(AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $resAppDel = AppDelegationPeer::doCount($oCriteria); - - $this->CloseCurrentDelegation($sApplicationUID, $iIndex); - if ($resAppDel == 1) { - $aFields['APP_STATUS'] = 'CANCELLED'; - $oApplication->update($aFields); - - require_once 'classes/model/AdditionalTables.php'; - $oReportTables = new ReportTables(); - $addtionalTables = new additionalTables(); - $oReportTables->updateTables($aFields['PRO_UID'], $aFields['APP_UID'], $aFields['APP_NUMBER'], $appData); - $addtionalTables->updateReportTables($aFields['PRO_UID'], $aFields['APP_UID'], $aFields['APP_NUMBER'], $appData, $aFields['APP_STATUS']); - } - $oAppDel = new AppDelegation(); - $oAppDel->Load($sApplicationUID, $iIndex); - $aAppDel = $oAppDel->toArray(BasePeer::TYPE_FIELDNAME); - $this->closeAppThread($sApplicationUID, $aAppDel['DEL_THREAD']); + /** Close the thread(s) in APP_DELEGATION and APP_THREAD */ + $indexesClosed = self::closeCaseThreads($appUid, $delIndex); + /** Create a register in APP_DELAY */ $delay = new AppDelay(); - $array['PRO_UID'] = $aFields['PRO_UID']; - $array['APP_UID'] = $sApplicationUID; - $c = new Criteria('workflow'); - $c->clearSelectColumns(); - $c->addSelectColumn(AppThreadPeer::APP_THREAD_INDEX); - $c->add(AppThreadPeer::APP_UID, $sApplicationUID); - $c->add(AppThreadPeer::DEL_INDEX, $iIndex); - $oDataset = AppThreadPeer::doSelectRS($c); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); - $array['APP_THREAD_INDEX'] = $aRow['APP_THREAD_INDEX']; - $array['APP_DEL_INDEX'] = $iIndex; - $array['APP_TYPE'] = 'CANCEL'; + foreach ($indexesClosed as $value){ + $dataList = []; + $rowDelay = AppDelay::buildAppDelayRow( + $caseFields['PRO_UID'], + $caseFields['PRO_ID'], + $appUid, + $caseFields['APP_NUMBER'], + $value['DEL_INDEX'], + $value['DEL_THREAD'], + AppDelay::APP_TYPE_CANCEL, + Application::APP_STATUS_CANCELLED, + is_null($usrUid) ? '' : $usrUid + ); + $delay->create($rowDelay); - $c = new Criteria('workflow'); - $c->clearSelectColumns(); - $c->addSelectColumn(ApplicationPeer::APP_STATUS); - $c->add(ApplicationPeer::APP_UID, $sApplicationUID); - $oDataset = ApplicationPeer::doSelectRS($c); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow1 = $oDataset->getRow(); - $array['APP_STATUS'] = $aRow1['APP_STATUS']; + /*----------------------------------********---------------------------------*/ + $dataList = [ + 'APP_UID' => $appUid, + 'DEL_INDEX' => $value['DEL_INDEX'], + 'USR_UID' => $rowDelay['APP_DELEGATION_USER'], + 'APP_STATUS_CURRENT' => $appStatusCurrent + ]; - $array['APP_DELEGATION_USER'] = $user_logged; - $array['APP_ENABLE_ACTION_USER'] = $user_logged; - $array['APP_ENABLE_ACTION_DATE'] = date('Y-m-d H:i:s'); - $array['APP_NUMBER'] = $oApplication->getAppNumber(); - $delay->create($array); + $dataList = array_merge($caseFields, $dataList); + $listCanceled = new ListCanceled(); + $listCanceled->create($dataList); + /*----------------------------------********---------------------------------*/ + } + } - //Before cancel a case verify if is a child case - $oCriteria2 = new Criteria('workflow'); - $oCriteria2->add(SubApplicationPeer::APP_UID, $sApplicationUID); - $oCriteria2->add(SubApplicationPeer::SA_STATUS, 'ACTIVE'); - if (SubApplicationPeer::doCount($oCriteria2) > 0) { - $oDerivation = new Derivation(); - $oDerivation->verifyIsCaseChild($sApplicationUID, $iIndex); + /** + * This function will be close the one or all threads + * + * @param string $appUid + * @param integer $delIndex, if is null we will to close all threads + * + * @return array + */ + private function closeCaseThreads($appUid, $delIndex = null) + { + $delegation = new AppDelegation(); + $result = []; + + /** Close all the threads in APP_DELEGATION and APP_THREAD */ + if (is_null($delIndex)) { + /*----------------------------------********---------------------------------*/ + $result = $delegation->LoadParallel($appUid); + $this->closeAllDelegations($appUid); + $this->closeAllThreads($appUid); + /*----------------------------------********---------------------------------*/ + + } else { + /** Close the specific delIndex in APP_DELEGATION and APP_THREAD */ + $this->CloseCurrentDelegation($appUid, $delIndex); + $resultDelegation = $delegation->Load($appUid, $delIndex); + $this->closeAppThread($appUid, $result['DEL_THREAD']); + $result[] = $resultDelegation; } - //update searchindex - if ($this->appSolr != null) { - $this->appSolr->updateApplicationSearchIndex($sApplicationUID); - } - /*----------------------------------********---------------------------------*/ - $data = array( - 'APP_UID' => $sApplicationUID, - 'DEL_INDEX' => $iIndex, - 'USR_UID' => $user_logged, - 'APP_STATUS_CURRENT' => $appStatusCurrent - ); - $data = array_merge($aFields, $data); - $oListCanceled = new ListCanceled(); - $oListCanceled->create($data); - /*----------------------------------********---------------------------------*/ + return $result; } /** diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php index e8bfade79..1a89fd6fa 100644 --- a/workflow/engine/classes/WsBase.php +++ b/workflow/engine/classes/WsBase.php @@ -2939,7 +2939,6 @@ class WsBase } $result = new WsResponse(0, G::loadTranslation('ID_COMMAND_EXECUTED_SUCCESSFULLY')); - $g->sessionVarRestore(); return $result; @@ -3066,14 +3065,7 @@ class WsBase $case->removeCase($caseUid); //Response - $res = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); - - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp - ); - + $result = self::messageExecuteSuccessfully(); $g->sessionVarRestore(); return $result; @@ -3093,7 +3085,7 @@ class WsBase * @param int delIndex : Delegation index of the case. * @param string userUid : The unique ID of the user who will cancel the case. * - * @return $result will return an object + * @return array | object */ public function cancelCase($caseUid, $delIndex, $userUid) { @@ -3107,62 +3099,68 @@ class WsBase $_SESSION["USER_LOGGED"] = $userUid; if (empty($caseUid)) { - $result = new WsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " caseUid"); - $g->sessionVarRestore(); - return $result; - } - - if (empty($delIndex)) { - $result = new WsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " delIndex"); - - $g->sessionVarRestore(); - - return $result; - } - - if (empty($userUid)) { - $result = new WsResponse(100, G::LoadTranslation("ID_REQUIRED_FIELD") . " userUid"); - - $g->sessionVarRestore(); - - return $result; - } - - $oApplication = new Application(); - $aFields = $oApplication->load($caseUid); - if ($aFields['APP_STATUS'] == 'DRAFT') { - $result = new WsResponse(100, G::LoadTranslation("ID_CASE_IN_STATUS") . " DRAFT"); - $g->sessionVarRestore(); - return $result; - } - $oAppThread = new AppThread(); - $cant = $oAppThread->countStatus($caseUid, 'OPEN'); - if ($cant > 1) { - $result = new WsResponse(100, G::LoadTranslation("ID_CASE_CANCELLED_PARALLEL")); - $g->sessionVarRestore(); - return $result; + return self::messageRequiredField('caseUid'); } $case = new Cases(); - $case->cancelCase($caseUid, $delIndex, $userUid); + $statusCase = $case->loadCase($caseUid)['APP_STATUS']; + if ($statusCase !== 'TO_DO') { + $g->sessionVarRestore(); - //Response - $res = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); + return self::messageIllegalValues('ID_CASE_IN_STATUS', ' ' . $statusCase); + } - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp - ); + /** If those parameters are null we will to force the cancelCase */ + if (is_null($delIndex) && is_null($userUid)) { + /*----------------------------------********---------------------------------*/ + $case->cancelCase($caseUid, null, null); + $result = self::messageExecuteSuccessfully(); + $g->sessionVarRestore(); + return $result; + /*----------------------------------********---------------------------------*/ + } + + /** We will to continue with review the threads */ + if (empty($delIndex)) { + $g->sessionVarRestore(); + + return self::messageRequiredField('delIndex'); + } + + $delegation = new AppDelegation(); + $indexOpen = $delegation->LoadParallel($caseUid, $delIndex); + if (empty($indexOpen)) { + $g->sessionVarRestore(); + + return self::messageIllegalValues('ID_CASE_DELEGATION_ALREADY_CLOSED'); + } + + if (empty($userUid)) { + $g->sessionVarRestore(); + + return self::messageRequiredField('userUid'); + } + + if (AppThread::countStatus($caseUid, 'OPEN') > 1) { + $g->sessionVarRestore(); + + return self::messageIllegalValues("ID_CASE_CANCELLED_PARALLEL"); + } + + + /** Cancel case */ + $case->cancelCase($caseUid, (int)$delIndex, $userUid); + + //Define the result of the cancelCase + $result = self::messageExecuteSuccessfully(); $g->sessionVarRestore(); return $result; } catch (Exception $e) { $result = new WsResponse(100, $e->getMessage()); - $g->sessionVarRestore(); return $result; @@ -3228,15 +3226,9 @@ class WsBase $case->pauseCase($caseUid, $delIndex, $userUid, $unpauseDate); //Response - $res = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); - - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp - ); - + $result = self::messageExecuteSuccessfully(); $g->sessionVarRestore(); + return $result; } catch (Exception $e) { $result = new WsResponse(100, $e->getMessage()); @@ -3295,14 +3287,7 @@ class WsBase $case->unpauseCase($caseUid, $delIndex, $userUid); //Response - $res = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); - - $result = array( - "status_code" => $res->status_code, - "message" => $res->message, - "timestamp" => $res->timestamp - ); - + $result = self::messageExecuteSuccessfully(); $g->sessionVarRestore(); return $result; @@ -3409,4 +3394,52 @@ class WsBase return $result; } } + + /** + * Define the message for the required fields + * + * @param string $field + * @param integer code + * + * @return object + */ + private function messageRequiredField($field, $code = 100) + { + $result = new WsResponse($code, G::LoadTranslation("ID_REQUIRED_FIELD") . ' ' . $field); + + return $result; + } + + /** + * Define the message for the required fields + * + * @param string $translationId + * @param string $field + * @param integer code + * + * @return object + */ + private function messageIllegalValues($translationId, $field = '', $code = 100) + { + $result = new WsResponse($code, G::LoadTranslation($translationId) . $field); + + return $result; + } + + /** + * Define the result when it's execute successfully + * + * @return object + */ + private function messageExecuteSuccessfully() + { + $res = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); + $result = [ + "status_code" => $res->status_code, + "message" => $res->message, + "timestamp" => $res->timestamp + ]; + + return $result; + } } diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index 67b9410c3..91aab7488 100644 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -2766,7 +2766,7 @@ function PMFDeleteCase ($caseUid) function PMFCancelCase ($caseUid, $delIndex, $userUid) { $ws = new WsBase(); - $result = $ws->cancelCase( $caseUid, $delIndex, $userUid ); + $result = $ws->cancelCase($caseUid, $delIndex, $userUid); if ($result->status_code == 0) { if (isset($_SESSION['APPLICATION']) && isset($_SESSION['INDEX'])) { @@ -2775,10 +2775,17 @@ function PMFCancelCase ($caseUid, $delIndex, $userUid) G::header('Location: ../cases/casesListExtJsRedirector'); die(); } else { - die(G::LoadTranslation('ID_PM_FUNCTION_CHANGE_CASE', SYS_LANG, array('PMFCancelCase', G::LoadTranslation('ID_CANCELLED')))); + die( + G::LoadTranslation( + 'ID_PM_FUNCTION_CHANGE_CASE', + SYS_LANG, + ['PMFCancelCase', G::LoadTranslation('ID_CANCELLED')] + ) + ); } } } + return 1; } else { return 0; diff --git a/workflow/engine/classes/model/AppDelay.php b/workflow/engine/classes/model/AppDelay.php index d2aa9dc85..ab249d325 100644 --- a/workflow/engine/classes/model/AppDelay.php +++ b/workflow/engine/classes/model/AppDelay.php @@ -1,12 +1,4 @@ fromArray($aData, BasePeer::TYPE_FIELDNAME); - if ($oAppDelay->validate()) { - $oConnection->begin(); - $iResult = $oAppDelay->save(); - $oConnection->commit(); - return $aData['APP_DELAY_UID']; + $appDelay = new AppDelay(); + $appDelay->fromArray($data, BasePeer::TYPE_FIELDNAME); + if ($appDelay->validate()) { + $connection->begin(); + $result = $appDelay->save(); + $connection->commit(); + + return $data['APP_DELAY_UID']; } else { - $sMessage = ''; - $aValidationFailures = $oAppDelay->getValidationFailures(); - foreach ($aValidationFailures as $oValidationFailure) { - $sMessage .= $oValidationFailure->getMessage() . '
'; + $message = ''; + $validationFailures = $appDelay->getValidationFailures(); + foreach ($validationFailures as $validationFailure) { + $message .= $validationFailure->getMessage() . '
'; } - throw(new Exception('The registry cannot be created!
'.$sMessage)); + throw(new Exception('The registry cannot be created!
' . $message)); } - } catch (Exception $oError) { - $oConnection->rollback(); - throw($oError); + } catch (Exception $error) { + $connection->rollback(); + throw($error); } } /** * Update the application delay registry - * @param array $aData + * + * @param array $data + * * @return string + * @throws Exception **/ - public function update($aData) + public function update($data) { - $oConnection = Propel::getConnection(AppDelayPeer::DATABASE_NAME); + $connection = Propel::getConnection(AppDelayPeer::DATABASE_NAME); try { - $oAppDelay = AppDelayPeer::retrieveByPK($aData['APP_DELAY_UID']); - if (!is_null($oAppDelay)) { - $oAppDelay->fromArray($aData, BasePeer::TYPE_FIELDNAME); - if ($oAppDelay->validate()) { - $oConnection->begin(); - $iResult = $oAppDelay->save(); - $oConnection->commit(); - return $iResult; + $appDelay = AppDelayPeer::retrieveByPK($data['APP_DELAY_UID']); + if (!is_null($appDelay)) { + $appDelay->fromArray($data, BasePeer::TYPE_FIELDNAME); + if ($appDelay->validate()) { + $connection->begin(); + $result = $appDelay->save(); + $connection->commit(); + return $result; } else { - $sMessage = ''; - $aValidationFailures = $oAppDelay->getValidationFailures(); - foreach ($aValidationFailures as $oValidationFailure) { - $sMessage .= $oValidationFailure->getMessage() . '
'; + $message = ''; + $validationFailures = $appDelay->getValidationFailures(); + foreach ($validationFailures as $validationFailure) { + $message .= $validationFailure->getMessage() . '
'; } - throw(new Exception('The registry cannot be updated!
'.$sMessage)); + throw(new Exception('The registry cannot be updated!
'.$message)); } } else { throw(new Exception('This row doesn\'t exist!')); } - } catch (Exception $oError) { - $oConnection->rollback(); - throw($oError); + } catch (Exception $error) { + $connection->rollback(); + throw($error); } } + /** + * Review if the application in a specific index is paused + * + * @param string $appUid + * @param integer $delIndex + * + * @return boolean + */ public function isPaused($appUid, $delIndex) { - $oCriteria = new Criteria('workflow'); - $oCriteria->add(AppDelayPeer::APP_UID, $appUid); - $oCriteria->add(AppDelayPeer::APP_DEL_INDEX, $delIndex); - $oCriteria->add(AppDelayPeer::APP_TYPE, 'PAUSE'); - $oCriteria->add( - $oCriteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, 0, Criteria::EQUAL)->addOr( - $oCriteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL)) + $criteria = new Criteria('workflow'); + $criteria->add(AppDelayPeer::APP_UID, $appUid); + $criteria->add(AppDelayPeer::APP_DEL_INDEX, $delIndex); + $criteria->add(AppDelayPeer::APP_TYPE, AppDelay::APP_TYPE_PAUSE); + $criteria->add( + $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, 0, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL)) ); - $oDataset = AppDelayPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - $aRow = $oDataset->getRow(); + $dataset = AppDelayPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $row = $dataset->getRow(); - if ($aRow) { + if ($row) { return true; } else { return false; @@ -117,20 +127,74 @@ class AppDelay extends BaseAppDelay * Verify if the case is Paused or cancelled * * @param $appUid string - * @return $oDataset array + * + * @return array|null */ public function getCasesCancelOrPaused($appUid) { - $oCriteria = new Criteria( 'workflow' ); - $oCriteria->addSelectColumn( AppDelayPeer::APP_UID ); - $oCriteria->addSelectColumn( AppDelayPeer::APP_DEL_INDEX ); - $oCriteria->add( AppDelayPeer::APP_UID, $appUid ); - $oCriteria->add( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'PAUSE' )->addOr( $oCriteria->getNewCriterion( AppDelayPeer::APP_TYPE, 'CANCEL' ) ) ); - $oCriteria->addAscendingOrderByColumn( AppDelayPeer::APP_ENABLE_ACTION_DATE ); - $oDataset = AppDelayPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - $oDataset->next(); - return $oDataset->getRow(); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(AppDelayPeer::APP_UID); + $criteria->addSelectColumn(AppDelayPeer::APP_DEL_INDEX); + $criteria->add(AppDelayPeer::APP_UID, $appUid); + $criteria->add( + $criteria->getNewCriterion(AppDelayPeer::APP_TYPE, AppDelay::APP_TYPE_PAUSE)->addOr( + $criteria->getNewCriterion(AppDelayPeer::APP_TYPE, AppDelay::APP_TYPE_CANCEL) + ) + ); + $criteria->addAscendingOrderByColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE); + $dataset = AppDelayPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + + return $dataset->getRow(); + } + + /** + * Build the row for the appDelay to be inserted + * + * @param string $proUid + * @param integer $proId + * @param string $appUid + * @param integer $appNumber + * @param integer $appThreadIndex + * @param integer $delIndex + * @param string $appType + * @param string $appStatus + * @param string $usrUid + * + * @return array + */ + public static function buildAppDelayRow( + $proUid = '', + $proId = 0, + $appUid = '', + $appNumber = 0, + $appThreadIndex = 0, + $delIndex = 0, + $appType = 'CANCEL', + $appStatus = 'CANCELLED', + $usrUid = '' + ) { + $row = []; + $row['PRO_UID'] = $proUid; + $row['PRO_ID'] = $proId; + $row['APP_UID'] = $appUid; + $row['APP_NUMBER'] = $appNumber; + $row['APP_THREAD_INDEX'] = $appThreadIndex; + $row['APP_DEL_INDEX'] = $delIndex; + $row['APP_TYPE'] = $appType; + $row['APP_STATUS'] = $appStatus; + $row['APP_ENABLE_ACTION_DATE'] = date('Y-m-d H:i:s'); + + //Define the user that execute the insert + if (empty($usrUid)) { + global $RBAC; + $usrUid = $RBAC->aUserInfo['USER_INFO']['USR_UID']; + } + $row['APP_DELEGATION_USER'] = $usrUid; + $row['APP_ENABLE_ACTION_USER'] = $usrUid; + + return $row; } } diff --git a/workflow/engine/classes/model/AppDelegation.php b/workflow/engine/classes/model/AppDelegation.php index 89e9d892a..25b3c708b 100644 --- a/workflow/engine/classes/model/AppDelegation.php +++ b/workflow/engine/classes/model/AppDelegation.php @@ -331,16 +331,17 @@ class AppDelegation extends BaseAppDelegation } } - /* Load the Application Delegation row specified in [app_id] column value. + /** + * Load the Application Delegation row specified in [app_id] column value. + * + * @param string $appUid the uid of the application + * @param integer $index the index of the delegation * - * @param string $AppUid the uid of the application - * @param string $index the index of the delegation * @return array $Fields the fields */ - - public function LoadParallel($AppUid, $index = "") + public function LoadParallel($appUid, $index = 0) { - $aCases = array(); + $cases = []; $c = new Criteria('workflow'); $c->addSelectColumn(AppDelegationPeer::APP_UID); @@ -348,41 +349,33 @@ class AppDelegation extends BaseAppDelegation $c->addSelectColumn(AppDelegationPeer::PRO_UID); $c->addSelectColumn(AppDelegationPeer::TAS_UID); $c->addSelectColumn(AppDelegationPeer::USR_UID); + $c->addSelectColumn(AppDelegationPeer::DEL_THREAD); $c->addSelectColumn(AppDelegationPeer::DEL_DELEGATE_DATE); $c->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); $c->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); $c->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); $c->addSelectColumn(AppDelegationPeer::DEL_PREVIOUS); - $c->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); - $c->add(AppDelegationPeer::APP_UID, $AppUid); - if (!empty($index)) { + $c->add(AppDelegationPeer::APP_UID, $appUid); + + if ($index > 0) { $c->add(AppDelegationPeer::DEL_INDEX, $index); } + $c->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); $rs = AppDelegationPeer::doSelectRS($c); - $row= $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $row = $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->next(); $row = $rs->getRow(); while (is_array($row)) { - $case = array(); - $case['TAS_UID'] = $row['TAS_UID']; - $case['USR_UID'] = $row['USR_UID']; - $case['DEL_INDEX'] = $row['DEL_INDEX']; - $case['TAS_UID'] = $row['TAS_UID']; - $case['DEL_DELEGATE_DATE'] = $row['DEL_DELEGATE_DATE']; - $case['DEL_INIT_DATE'] = $row['DEL_INIT_DATE']; - $case['DEL_TASK_DUE_DATE'] = $row['DEL_TASK_DUE_DATE']; - $case['DEL_FINISH_DATE'] = $row['DEL_FINISH_DATE']; - $case['DEL_PREVIOUS'] = $row['DEL_PREVIOUS']; - $aCases[] = $case; + $cases[] = $row; $rs->next(); $row = $rs->getRow(); } - return $aCases; + return $cases; } /** diff --git a/workflow/engine/classes/model/AppThread.php b/workflow/engine/classes/model/AppThread.php index fe9cf57ae..94fc2d7ee 100644 --- a/workflow/engine/classes/model/AppThread.php +++ b/workflow/engine/classes/model/AppThread.php @@ -115,13 +115,23 @@ class AppThread extends BaseAppThread } } - public function countStatus($appUid, $status='OPEN'){ + /** + * Count the open threads + * + * @param string $appUid + * @param string $status + * + * @return integer + */ + public static function countStatus($appUid, $status = 'OPEN') + { $c = new Criteria('workflow'); $c->clearSelectColumns(); - $c->addSelectColumn( AppThreadPeer::APP_THREAD_PARENT ); - $c->add(AppThreadPeer::APP_UID, $appUid ); - $c->add(AppThreadPeer::APP_THREAD_STATUS , $status ); + $c->addSelectColumn(AppThreadPeer::APP_THREAD_PARENT); + $c->add(AppThreadPeer::APP_UID, $appUid); + $c->add(AppThreadPeer::APP_THREAD_STATUS, $status); $cant = AppThreadPeer::doCount($c); + return $cant; } } diff --git a/workflow/engine/classes/model/Application.php b/workflow/engine/classes/model/Application.php index aca145a31..7f070355d 100644 --- a/workflow/engine/classes/model/Application.php +++ b/workflow/engine/classes/model/Application.php @@ -46,9 +46,10 @@ class Application extends BaseApplication * This value goes in the content table * @var string */ + const APP_STATUS_CANCELLED = 'CANCELLED'; + public static $app_status_values = ['DRAFT' => 1, 'TO_DO' => 2, 'COMPLETED' => 3, 'CANCELLED' => 4]; protected $app_title_content = ''; protected $app_description_content = ''; - public static $app_status_values = ['DRAFT' => 1, 'TO_DO' => 2, 'COMPLETED' => 3, 'CANCELLED' => 4]; /** * Get the [app_title_content] column value. diff --git a/workflow/engine/classes/model/ListCanceled.php b/workflow/engine/classes/model/ListCanceled.php index 317f6feb8..f3e318d0d 100644 --- a/workflow/engine/classes/model/ListCanceled.php +++ b/workflow/engine/classes/model/ListCanceled.php @@ -2,29 +2,17 @@ require_once 'classes/model/om/BaseListCanceled.php'; - -/** - * Skeleton subclass for representing a row from the 'LIST_CANCELED' table. - * - * - * - * You should add additional methods to this class to meet the - * application requirements. This class will only be generated as - * long as it does not already exist in the output directory. - * - * @package classes.model - */ -// @codingStandardsIgnoreStart class ListCanceled extends BaseListCanceled implements ListInterface { use ListBaseTrait; - // @codingStandardsIgnoreEnd /** * Create List Canceled Table * - * @param type $data - * @return type + * @param array $data + * + * @return void + * @throws Exception * */ public function create($data) @@ -182,16 +170,17 @@ class ListCanceled extends BaseListCanceled implements ListInterface /** * Remove List Canceled * - * @param type $seqName - * @return type - * @throws type + * @param string $appUid + * + * @return void + * @throws Exception * */ - public function remove($app_uid) + public function remove($appUid) { $con = Propel::getConnection(ListCanceledPeer::DATABASE_NAME); try { - $this->setAppUid($app_uid); + $this->setAppUid($appUid); $con->begin(); $this->delete(); $con->commit(); @@ -351,4 +340,5 @@ class ListCanceled extends BaseListCanceled implements ListInterface return $this->getCountListFromPeer (ListCanceledPeer::class, $usrUid, $filters); } + } // ListCanceled diff --git a/workflow/engine/classes/model/SubApplication.php b/workflow/engine/classes/model/SubApplication.php index 50d824472..5043fe883 100644 --- a/workflow/engine/classes/model/SubApplication.php +++ b/workflow/engine/classes/model/SubApplication.php @@ -111,5 +111,22 @@ class SubApplication extends BaseSubApplication } return false; } + + /** + * Verify if is a case related to the subProcess + * + * @param string $appUid + * + * @return boolean + */ + public static function isCaseSubProcess($appUid) + { + $criteria = new Criteria('workflow'); + $criteria->add(SubApplicationPeer::APP_UID, $appUid); + $criteria->add(SubApplicationPeer::SA_STATUS, 'ACTIVE'); + $dataset = SubApplicationPeer::doSelectOne($criteria); + + return !is_null($dataset); + } } diff --git a/workflow/engine/classes/model/map/ListCanceledMapBuilder.php b/workflow/engine/classes/model/map/ListCanceledMapBuilder.php index 27c1b357b..944cb4c1c 100644 --- a/workflow/engine/classes/model/map/ListCanceledMapBuilder.php +++ b/workflow/engine/classes/model/map/ListCanceledMapBuilder.php @@ -67,6 +67,8 @@ class ListCanceledMapBuilder $tMap->addPrimaryKey('APP_UID', 'AppUid', 'string', CreoleTypes::VARCHAR, true, 32); + $tMap->addPrimaryKey('DEL_INDEX', 'DelIndex', 'int', CreoleTypes::INTEGER, true, null); + $tMap->addColumn('USR_UID', 'UsrUid', 'string', CreoleTypes::VARCHAR, true, 32); $tMap->addColumn('TAS_UID', 'TasUid', 'string', CreoleTypes::VARCHAR, true, 32); @@ -83,8 +85,6 @@ class ListCanceledMapBuilder $tMap->addColumn('APP_CANCELED_DATE', 'AppCanceledDate', 'int', CreoleTypes::TIMESTAMP, false, null); - $tMap->addColumn('DEL_INDEX', 'DelIndex', 'int', CreoleTypes::INTEGER, true, null); - $tMap->addColumn('DEL_PREVIOUS_USR_UID', 'DelPreviousUsrUid', 'string', CreoleTypes::VARCHAR, false, 32); $tMap->addColumn('DEL_CURRENT_USR_USERNAME', 'DelCurrentUsrUsername', 'string', CreoleTypes::VARCHAR, false, 100); diff --git a/workflow/engine/classes/model/om/BaseListCanceled.php b/workflow/engine/classes/model/om/BaseListCanceled.php index 255a578cf..cd7557417 100644 --- a/workflow/engine/classes/model/om/BaseListCanceled.php +++ b/workflow/engine/classes/model/om/BaseListCanceled.php @@ -33,6 +33,12 @@ abstract class BaseListCanceled extends BaseObject implements Persistent */ protected $app_uid = ''; + /** + * The value for the del_index field. + * @var int + */ + protected $del_index = 0; + /** * The value for the usr_uid field. * @var string @@ -81,12 +87,6 @@ abstract class BaseListCanceled extends BaseObject implements Persistent */ protected $app_canceled_date; - /** - * The value for the del_index field. - * @var int - */ - protected $del_index = 0; - /** * The value for the del_previous_usr_uid field. * @var string @@ -178,6 +178,17 @@ abstract class BaseListCanceled extends BaseObject implements Persistent return $this->app_uid; } + /** + * Get the [del_index] column value. + * + * @return int + */ + public function getDelIndex() + { + + return $this->del_index; + } + /** * Get the [usr_uid] column value. * @@ -287,17 +298,6 @@ abstract class BaseListCanceled extends BaseObject implements Persistent } } - /** - * Get the [del_index] column value. - * - * @return int - */ - public function getDelIndex() - { - - return $this->del_index; - } - /** * Get the [del_previous_usr_uid] column value. * @@ -504,6 +504,28 @@ abstract class BaseListCanceled extends BaseObject implements Persistent } // setAppUid() + /** + * Set the value of [del_index] column. + * + * @param int $v new value + * @return void + */ + public function setDelIndex($v) + { + + // Since the native PHP type for this column is integer, + // we will cast the input value to an int (if it is not). + if ($v !== null && !is_int($v) && is_numeric($v)) { + $v = (int) $v; + } + + if ($this->del_index !== $v || $v === 0) { + $this->del_index = $v; + $this->modifiedColumns[] = ListCanceledPeer::DEL_INDEX; + } + + } // setDelIndex() + /** * Set the value of [usr_uid] column. * @@ -687,28 +709,6 @@ abstract class BaseListCanceled extends BaseObject implements Persistent } // setAppCanceledDate() - /** - * Set the value of [del_index] column. - * - * @param int $v new value - * @return void - */ - public function setDelIndex($v) - { - - // Since the native PHP type for this column is integer, - // we will cast the input value to an int (if it is not). - if ($v !== null && !is_int($v) && is_numeric($v)) { - $v = (int) $v; - } - - if ($this->del_index !== $v || $v === 0) { - $this->del_index = $v; - $this->modifiedColumns[] = ListCanceledPeer::DEL_INDEX; - } - - } // setDelIndex() - /** * Set the value of [del_previous_usr_uid] column. * @@ -991,23 +991,23 @@ abstract class BaseListCanceled extends BaseObject implements Persistent $this->app_uid = $rs->getString($startcol + 0); - $this->usr_uid = $rs->getString($startcol + 1); + $this->del_index = $rs->getInt($startcol + 1); - $this->tas_uid = $rs->getString($startcol + 2); + $this->usr_uid = $rs->getString($startcol + 2); - $this->pro_uid = $rs->getString($startcol + 3); + $this->tas_uid = $rs->getString($startcol + 3); - $this->app_number = $rs->getInt($startcol + 4); + $this->pro_uid = $rs->getString($startcol + 4); - $this->app_title = $rs->getString($startcol + 5); + $this->app_number = $rs->getInt($startcol + 5); - $this->app_pro_title = $rs->getString($startcol + 6); + $this->app_title = $rs->getString($startcol + 6); - $this->app_tas_title = $rs->getString($startcol + 7); + $this->app_pro_title = $rs->getString($startcol + 7); - $this->app_canceled_date = $rs->getTimestamp($startcol + 8, null); + $this->app_tas_title = $rs->getString($startcol + 8); - $this->del_index = $rs->getInt($startcol + 9); + $this->app_canceled_date = $rs->getTimestamp($startcol + 9, null); $this->del_previous_usr_uid = $rs->getString($startcol + 10); @@ -1244,31 +1244,31 @@ abstract class BaseListCanceled extends BaseObject implements Persistent return $this->getAppUid(); break; case 1: - return $this->getUsrUid(); + return $this->getDelIndex(); break; case 2: - return $this->getTasUid(); + return $this->getUsrUid(); break; case 3: - return $this->getProUid(); + return $this->getTasUid(); break; case 4: - return $this->getAppNumber(); + return $this->getProUid(); break; case 5: - return $this->getAppTitle(); + return $this->getAppNumber(); break; case 6: - return $this->getAppProTitle(); + return $this->getAppTitle(); break; case 7: - return $this->getAppTasTitle(); + return $this->getAppProTitle(); break; case 8: - return $this->getAppCanceledDate(); + return $this->getAppTasTitle(); break; case 9: - return $this->getDelIndex(); + return $this->getAppCanceledDate(); break; case 10: return $this->getDelPreviousUsrUid(); @@ -1324,15 +1324,15 @@ abstract class BaseListCanceled extends BaseObject implements Persistent $keys = ListCanceledPeer::getFieldNames($keyType); $result = array( $keys[0] => $this->getAppUid(), - $keys[1] => $this->getUsrUid(), - $keys[2] => $this->getTasUid(), - $keys[3] => $this->getProUid(), - $keys[4] => $this->getAppNumber(), - $keys[5] => $this->getAppTitle(), - $keys[6] => $this->getAppProTitle(), - $keys[7] => $this->getAppTasTitle(), - $keys[8] => $this->getAppCanceledDate(), - $keys[9] => $this->getDelIndex(), + $keys[1] => $this->getDelIndex(), + $keys[2] => $this->getUsrUid(), + $keys[3] => $this->getTasUid(), + $keys[4] => $this->getProUid(), + $keys[5] => $this->getAppNumber(), + $keys[6] => $this->getAppTitle(), + $keys[7] => $this->getAppProTitle(), + $keys[8] => $this->getAppTasTitle(), + $keys[9] => $this->getAppCanceledDate(), $keys[10] => $this->getDelPreviousUsrUid(), $keys[11] => $this->getDelCurrentUsrUsername(), $keys[12] => $this->getDelCurrentUsrFirstname(), @@ -1379,31 +1379,31 @@ abstract class BaseListCanceled extends BaseObject implements Persistent $this->setAppUid($value); break; case 1: - $this->setUsrUid($value); + $this->setDelIndex($value); break; case 2: - $this->setTasUid($value); + $this->setUsrUid($value); break; case 3: - $this->setProUid($value); + $this->setTasUid($value); break; case 4: - $this->setAppNumber($value); + $this->setProUid($value); break; case 5: - $this->setAppTitle($value); + $this->setAppNumber($value); break; case 6: - $this->setAppProTitle($value); + $this->setAppTitle($value); break; case 7: - $this->setAppTasTitle($value); + $this->setAppProTitle($value); break; case 8: - $this->setAppCanceledDate($value); + $this->setAppTasTitle($value); break; case 9: - $this->setDelIndex($value); + $this->setAppCanceledDate($value); break; case 10: $this->setDelPreviousUsrUid($value); @@ -1466,39 +1466,39 @@ abstract class BaseListCanceled extends BaseObject implements Persistent } if (array_key_exists($keys[1], $arr)) { - $this->setUsrUid($arr[$keys[1]]); + $this->setDelIndex($arr[$keys[1]]); } if (array_key_exists($keys[2], $arr)) { - $this->setTasUid($arr[$keys[2]]); + $this->setUsrUid($arr[$keys[2]]); } if (array_key_exists($keys[3], $arr)) { - $this->setProUid($arr[$keys[3]]); + $this->setTasUid($arr[$keys[3]]); } if (array_key_exists($keys[4], $arr)) { - $this->setAppNumber($arr[$keys[4]]); + $this->setProUid($arr[$keys[4]]); } if (array_key_exists($keys[5], $arr)) { - $this->setAppTitle($arr[$keys[5]]); + $this->setAppNumber($arr[$keys[5]]); } if (array_key_exists($keys[6], $arr)) { - $this->setAppProTitle($arr[$keys[6]]); + $this->setAppTitle($arr[$keys[6]]); } if (array_key_exists($keys[7], $arr)) { - $this->setAppTasTitle($arr[$keys[7]]); + $this->setAppProTitle($arr[$keys[7]]); } if (array_key_exists($keys[8], $arr)) { - $this->setAppCanceledDate($arr[$keys[8]]); + $this->setAppTasTitle($arr[$keys[8]]); } if (array_key_exists($keys[9], $arr)) { - $this->setDelIndex($arr[$keys[9]]); + $this->setAppCanceledDate($arr[$keys[9]]); } if (array_key_exists($keys[10], $arr)) { @@ -1560,6 +1560,10 @@ abstract class BaseListCanceled extends BaseObject implements Persistent $criteria->add(ListCanceledPeer::APP_UID, $this->app_uid); } + if ($this->isColumnModified(ListCanceledPeer::DEL_INDEX)) { + $criteria->add(ListCanceledPeer::DEL_INDEX, $this->del_index); + } + if ($this->isColumnModified(ListCanceledPeer::USR_UID)) { $criteria->add(ListCanceledPeer::USR_UID, $this->usr_uid); } @@ -1592,10 +1596,6 @@ abstract class BaseListCanceled extends BaseObject implements Persistent $criteria->add(ListCanceledPeer::APP_CANCELED_DATE, $this->app_canceled_date); } - if ($this->isColumnModified(ListCanceledPeer::DEL_INDEX)) { - $criteria->add(ListCanceledPeer::DEL_INDEX, $this->del_index); - } - if ($this->isColumnModified(ListCanceledPeer::DEL_PREVIOUS_USR_UID)) { $criteria->add(ListCanceledPeer::DEL_PREVIOUS_USR_UID, $this->del_previous_usr_uid); } @@ -1657,28 +1657,40 @@ abstract class BaseListCanceled extends BaseObject implements Persistent $criteria = new Criteria(ListCanceledPeer::DATABASE_NAME); $criteria->add(ListCanceledPeer::APP_UID, $this->app_uid); + $criteria->add(ListCanceledPeer::DEL_INDEX, $this->del_index); return $criteria; } /** - * Returns the primary key for this object (row). - * @return string + * Returns the composite primary key for this object. + * The array elements will be in same order as specified in XML. + * @return array */ public function getPrimaryKey() { - return $this->getAppUid(); + $pks = array(); + + $pks[0] = $this->getAppUid(); + + $pks[1] = $this->getDelIndex(); + + return $pks; } /** - * Generic method to set the primary key (app_uid column). + * Set the [composite] primary key. * - * @param string $key Primary key. + * @param array $keys The elements of the composite key (order must match the order in XML file). * @return void */ - public function setPrimaryKey($key) + public function setPrimaryKey($keys) { - $this->setAppUid($key); + + $this->setAppUid($keys[0]); + + $this->setDelIndex($keys[1]); + } /** @@ -1710,8 +1722,6 @@ abstract class BaseListCanceled extends BaseObject implements Persistent $copyObj->setAppCanceledDate($this->app_canceled_date); - $copyObj->setDelIndex($this->del_index); - $copyObj->setDelPreviousUsrUid($this->del_previous_usr_uid); $copyObj->setDelCurrentUsrUsername($this->del_current_usr_username); @@ -1739,6 +1749,8 @@ abstract class BaseListCanceled extends BaseObject implements Persistent $copyObj->setAppUid(''); // this is a pkey column, so set to default value + $copyObj->setDelIndex('0'); // this is a pkey column, so set to default value + } /** diff --git a/workflow/engine/classes/model/om/BaseListCanceledPeer.php b/workflow/engine/classes/model/om/BaseListCanceledPeer.php index 777713c3a..aeed53bad 100644 --- a/workflow/engine/classes/model/om/BaseListCanceledPeer.php +++ b/workflow/engine/classes/model/om/BaseListCanceledPeer.php @@ -34,6 +34,9 @@ abstract class BaseListCanceledPeer /** the column name for the APP_UID field */ const APP_UID = 'LIST_CANCELED.APP_UID'; + /** the column name for the DEL_INDEX field */ + const DEL_INDEX = 'LIST_CANCELED.DEL_INDEX'; + /** the column name for the USR_UID field */ const USR_UID = 'LIST_CANCELED.USR_UID'; @@ -58,9 +61,6 @@ abstract class BaseListCanceledPeer /** the column name for the APP_CANCELED_DATE field */ const APP_CANCELED_DATE = 'LIST_CANCELED.APP_CANCELED_DATE'; - /** the column name for the DEL_INDEX field */ - const DEL_INDEX = 'LIST_CANCELED.DEL_INDEX'; - /** the column name for the DEL_PREVIOUS_USR_UID field */ const DEL_PREVIOUS_USR_UID = 'LIST_CANCELED.DEL_PREVIOUS_USR_UID'; @@ -105,9 +105,9 @@ abstract class BaseListCanceledPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid', 'UsrUid', 'TasUid', 'ProUid', 'AppNumber', 'AppTitle', 'AppProTitle', 'AppTasTitle', 'AppCanceledDate', 'DelIndex', 'DelPreviousUsrUid', 'DelCurrentUsrUsername', 'DelCurrentUsrFirstname', 'DelCurrentUsrLastname', 'DelDelegateDate', 'DelInitDate', 'DelDueDate', 'DelPriority', 'ProId', 'UsrId', 'TasId', ), - BasePeer::TYPE_COLNAME => array (ListCanceledPeer::APP_UID, ListCanceledPeer::USR_UID, ListCanceledPeer::TAS_UID, ListCanceledPeer::PRO_UID, ListCanceledPeer::APP_NUMBER, ListCanceledPeer::APP_TITLE, ListCanceledPeer::APP_PRO_TITLE, ListCanceledPeer::APP_TAS_TITLE, ListCanceledPeer::APP_CANCELED_DATE, ListCanceledPeer::DEL_INDEX, ListCanceledPeer::DEL_PREVIOUS_USR_UID, ListCanceledPeer::DEL_CURRENT_USR_USERNAME, ListCanceledPeer::DEL_CURRENT_USR_FIRSTNAME, ListCanceledPeer::DEL_CURRENT_USR_LASTNAME, ListCanceledPeer::DEL_DELEGATE_DATE, ListCanceledPeer::DEL_INIT_DATE, ListCanceledPeer::DEL_DUE_DATE, ListCanceledPeer::DEL_PRIORITY, ListCanceledPeer::PRO_ID, ListCanceledPeer::USR_ID, ListCanceledPeer::TAS_ID, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'USR_UID', 'TAS_UID', 'PRO_UID', 'APP_NUMBER', 'APP_TITLE', 'APP_PRO_TITLE', 'APP_TAS_TITLE', 'APP_CANCELED_DATE', 'DEL_INDEX', 'DEL_PREVIOUS_USR_UID', 'DEL_CURRENT_USR_USERNAME', 'DEL_CURRENT_USR_FIRSTNAME', 'DEL_CURRENT_USR_LASTNAME', 'DEL_DELEGATE_DATE', 'DEL_INIT_DATE', 'DEL_DUE_DATE', 'DEL_PRIORITY', 'PRO_ID', 'USR_ID', 'TAS_ID', ), + BasePeer::TYPE_PHPNAME => array ('AppUid', 'DelIndex', 'UsrUid', 'TasUid', 'ProUid', 'AppNumber', 'AppTitle', 'AppProTitle', 'AppTasTitle', 'AppCanceledDate', 'DelPreviousUsrUid', 'DelCurrentUsrUsername', 'DelCurrentUsrFirstname', 'DelCurrentUsrLastname', 'DelDelegateDate', 'DelInitDate', 'DelDueDate', 'DelPriority', 'ProId', 'UsrId', 'TasId', ), + BasePeer::TYPE_COLNAME => array (ListCanceledPeer::APP_UID, ListCanceledPeer::DEL_INDEX, ListCanceledPeer::USR_UID, ListCanceledPeer::TAS_UID, ListCanceledPeer::PRO_UID, ListCanceledPeer::APP_NUMBER, ListCanceledPeer::APP_TITLE, ListCanceledPeer::APP_PRO_TITLE, ListCanceledPeer::APP_TAS_TITLE, ListCanceledPeer::APP_CANCELED_DATE, ListCanceledPeer::DEL_PREVIOUS_USR_UID, ListCanceledPeer::DEL_CURRENT_USR_USERNAME, ListCanceledPeer::DEL_CURRENT_USR_FIRSTNAME, ListCanceledPeer::DEL_CURRENT_USR_LASTNAME, ListCanceledPeer::DEL_DELEGATE_DATE, ListCanceledPeer::DEL_INIT_DATE, ListCanceledPeer::DEL_DUE_DATE, ListCanceledPeer::DEL_PRIORITY, ListCanceledPeer::PRO_ID, ListCanceledPeer::USR_ID, ListCanceledPeer::TAS_ID, ), + BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'DEL_INDEX', 'USR_UID', 'TAS_UID', 'PRO_UID', 'APP_NUMBER', 'APP_TITLE', 'APP_PRO_TITLE', 'APP_TAS_TITLE', 'APP_CANCELED_DATE', 'DEL_PREVIOUS_USR_UID', 'DEL_CURRENT_USR_USERNAME', 'DEL_CURRENT_USR_FIRSTNAME', 'DEL_CURRENT_USR_LASTNAME', 'DEL_DELEGATE_DATE', 'DEL_INIT_DATE', 'DEL_DUE_DATE', 'DEL_PRIORITY', 'PRO_ID', 'USR_ID', 'TAS_ID', ), BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ) ); @@ -118,9 +118,9 @@ abstract class BaseListCanceledPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'UsrUid' => 1, 'TasUid' => 2, 'ProUid' => 3, 'AppNumber' => 4, 'AppTitle' => 5, 'AppProTitle' => 6, 'AppTasTitle' => 7, 'AppCanceledDate' => 8, 'DelIndex' => 9, 'DelPreviousUsrUid' => 10, 'DelCurrentUsrUsername' => 11, 'DelCurrentUsrFirstname' => 12, 'DelCurrentUsrLastname' => 13, 'DelDelegateDate' => 14, 'DelInitDate' => 15, 'DelDueDate' => 16, 'DelPriority' => 17, 'ProId' => 18, 'UsrId' => 19, 'TasId' => 20, ), - BasePeer::TYPE_COLNAME => array (ListCanceledPeer::APP_UID => 0, ListCanceledPeer::USR_UID => 1, ListCanceledPeer::TAS_UID => 2, ListCanceledPeer::PRO_UID => 3, ListCanceledPeer::APP_NUMBER => 4, ListCanceledPeer::APP_TITLE => 5, ListCanceledPeer::APP_PRO_TITLE => 6, ListCanceledPeer::APP_TAS_TITLE => 7, ListCanceledPeer::APP_CANCELED_DATE => 8, ListCanceledPeer::DEL_INDEX => 9, ListCanceledPeer::DEL_PREVIOUS_USR_UID => 10, ListCanceledPeer::DEL_CURRENT_USR_USERNAME => 11, ListCanceledPeer::DEL_CURRENT_USR_FIRSTNAME => 12, ListCanceledPeer::DEL_CURRENT_USR_LASTNAME => 13, ListCanceledPeer::DEL_DELEGATE_DATE => 14, ListCanceledPeer::DEL_INIT_DATE => 15, ListCanceledPeer::DEL_DUE_DATE => 16, ListCanceledPeer::DEL_PRIORITY => 17, ListCanceledPeer::PRO_ID => 18, ListCanceledPeer::USR_ID => 19, ListCanceledPeer::TAS_ID => 20, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'USR_UID' => 1, 'TAS_UID' => 2, 'PRO_UID' => 3, 'APP_NUMBER' => 4, 'APP_TITLE' => 5, 'APP_PRO_TITLE' => 6, 'APP_TAS_TITLE' => 7, 'APP_CANCELED_DATE' => 8, 'DEL_INDEX' => 9, 'DEL_PREVIOUS_USR_UID' => 10, 'DEL_CURRENT_USR_USERNAME' => 11, 'DEL_CURRENT_USR_FIRSTNAME' => 12, 'DEL_CURRENT_USR_LASTNAME' => 13, 'DEL_DELEGATE_DATE' => 14, 'DEL_INIT_DATE' => 15, 'DEL_DUE_DATE' => 16, 'DEL_PRIORITY' => 17, 'PRO_ID' => 18, 'USR_ID' => 19, 'TAS_ID' => 20, ), + BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'DelIndex' => 1, 'UsrUid' => 2, 'TasUid' => 3, 'ProUid' => 4, 'AppNumber' => 5, 'AppTitle' => 6, 'AppProTitle' => 7, 'AppTasTitle' => 8, 'AppCanceledDate' => 9, 'DelPreviousUsrUid' => 10, 'DelCurrentUsrUsername' => 11, 'DelCurrentUsrFirstname' => 12, 'DelCurrentUsrLastname' => 13, 'DelDelegateDate' => 14, 'DelInitDate' => 15, 'DelDueDate' => 16, 'DelPriority' => 17, 'ProId' => 18, 'UsrId' => 19, 'TasId' => 20, ), + BasePeer::TYPE_COLNAME => array (ListCanceledPeer::APP_UID => 0, ListCanceledPeer::DEL_INDEX => 1, ListCanceledPeer::USR_UID => 2, ListCanceledPeer::TAS_UID => 3, ListCanceledPeer::PRO_UID => 4, ListCanceledPeer::APP_NUMBER => 5, ListCanceledPeer::APP_TITLE => 6, ListCanceledPeer::APP_PRO_TITLE => 7, ListCanceledPeer::APP_TAS_TITLE => 8, ListCanceledPeer::APP_CANCELED_DATE => 9, ListCanceledPeer::DEL_PREVIOUS_USR_UID => 10, ListCanceledPeer::DEL_CURRENT_USR_USERNAME => 11, ListCanceledPeer::DEL_CURRENT_USR_FIRSTNAME => 12, ListCanceledPeer::DEL_CURRENT_USR_LASTNAME => 13, ListCanceledPeer::DEL_DELEGATE_DATE => 14, ListCanceledPeer::DEL_INIT_DATE => 15, ListCanceledPeer::DEL_DUE_DATE => 16, ListCanceledPeer::DEL_PRIORITY => 17, ListCanceledPeer::PRO_ID => 18, ListCanceledPeer::USR_ID => 19, ListCanceledPeer::TAS_ID => 20, ), + BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'DEL_INDEX' => 1, 'USR_UID' => 2, 'TAS_UID' => 3, 'PRO_UID' => 4, 'APP_NUMBER' => 5, 'APP_TITLE' => 6, 'APP_PRO_TITLE' => 7, 'APP_TAS_TITLE' => 8, 'APP_CANCELED_DATE' => 9, 'DEL_PREVIOUS_USR_UID' => 10, 'DEL_CURRENT_USR_USERNAME' => 11, 'DEL_CURRENT_USR_FIRSTNAME' => 12, 'DEL_CURRENT_USR_LASTNAME' => 13, 'DEL_DELEGATE_DATE' => 14, 'DEL_INIT_DATE' => 15, 'DEL_DUE_DATE' => 16, 'DEL_PRIORITY' => 17, 'PRO_ID' => 18, 'USR_ID' => 19, 'TAS_ID' => 20, ), BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ) ); @@ -224,6 +224,8 @@ abstract class BaseListCanceledPeer $criteria->addSelectColumn(ListCanceledPeer::APP_UID); + $criteria->addSelectColumn(ListCanceledPeer::DEL_INDEX); + $criteria->addSelectColumn(ListCanceledPeer::USR_UID); $criteria->addSelectColumn(ListCanceledPeer::TAS_UID); @@ -240,8 +242,6 @@ abstract class BaseListCanceledPeer $criteria->addSelectColumn(ListCanceledPeer::APP_CANCELED_DATE); - $criteria->addSelectColumn(ListCanceledPeer::DEL_INDEX); - $criteria->addSelectColumn(ListCanceledPeer::DEL_PREVIOUS_USR_UID); $criteria->addSelectColumn(ListCanceledPeer::DEL_CURRENT_USR_USERNAME); @@ -479,6 +479,9 @@ abstract class BaseListCanceledPeer $comparison = $criteria->getComparison(ListCanceledPeer::APP_UID); $selectCriteria->add(ListCanceledPeer::APP_UID, $criteria->remove(ListCanceledPeer::APP_UID), $comparison); + $comparison = $criteria->getComparison(ListCanceledPeer::DEL_INDEX); + $selectCriteria->add(ListCanceledPeer::DEL_INDEX, $criteria->remove(ListCanceledPeer::DEL_INDEX), $comparison); + } else { $criteria = $values->buildCriteria(); // gets full criteria $selectCriteria = $values->buildPkeyCriteria(); // gets criteria w/ primary key(s) @@ -540,7 +543,22 @@ abstract class BaseListCanceledPeer } else { // it must be the primary key $criteria = new Criteria(self::DATABASE_NAME); - $criteria->add(ListCanceledPeer::APP_UID, (array) $values, Criteria::IN); + // primary key is composite; we therefore, expect + // the primary key passed to be an array of pkey + // values + if (count($values) == count($values, COUNT_RECURSIVE)) { + // array is not multi-dimensional + $values = array($values); + } + $vals = array(); + foreach ($values as $value) { + + $vals[0][] = $value[0]; + $vals[1][] = $value[1]; + } + + $criteria->add(ListCanceledPeer::APP_UID, $vals[0], Criteria::IN); + $criteria->add(ListCanceledPeer::DEL_INDEX, $vals[1], Criteria::IN); } // Set the correct dbName @@ -600,51 +618,23 @@ abstract class BaseListCanceledPeer } /** - * Retrieve a single object by pkey. - * - * @param mixed $pk the primary key. - * @param Connection $con the connection to use + * Retrieve object using using composite pkey values. + * @param string $app_uid + * @param int $del_index + * @param Connection $con * @return ListCanceled */ - public static function retrieveByPK($pk, $con = null) + public static function retrieveByPK($app_uid, $del_index, $con = null) { if ($con === null) { $con = Propel::getConnection(self::DATABASE_NAME); } - - $criteria = new Criteria(ListCanceledPeer::DATABASE_NAME); - - $criteria->add(ListCanceledPeer::APP_UID, $pk); - - + $criteria = new Criteria(); + $criteria->add(ListCanceledPeer::APP_UID, $app_uid); + $criteria->add(ListCanceledPeer::DEL_INDEX, $del_index); $v = ListCanceledPeer::doSelect($criteria, $con); - return !empty($v) > 0 ? $v[0] : null; - } - - /** - * Retrieve multiple objects by pkey. - * - * @param array $pks List of primary keys - * @param Connection $con the connection to use - * @throws PropelException Any exceptions caught during processing will be - * rethrown wrapped into a PropelException. - */ - public static function retrieveByPKs($pks, $con = null) - { - if ($con === null) { - $con = Propel::getConnection(self::DATABASE_NAME); - } - - $objs = null; - if (empty($pks)) { - $objs = array(); - } else { - $criteria = new Criteria(); - $criteria->add(ListCanceledPeer::APP_UID, $pks, Criteria::IN); - $objs = ListCanceledPeer::doSelect($criteria, $con); - } - return $objs; + return !empty($v) ? $v[0] : null; } } diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index eb8b6899f..2a269b656 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -4624,6 +4624,7 @@ + @@ -4632,7 +4633,6 @@ - diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 3804849f8..7be66fdb1 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -2569,6 +2569,7 @@ DROP TABLE IF EXISTS `LIST_CANCELED`; CREATE TABLE `LIST_CANCELED` ( `APP_UID` VARCHAR(32) default '' NOT NULL, + `DEL_INDEX` INTEGER default 0 NOT NULL, `USR_UID` VARCHAR(32) default '' NOT NULL, `TAS_UID` VARCHAR(32) default '' NOT NULL, `PRO_UID` VARCHAR(32) default '' NOT NULL, @@ -2577,7 +2578,6 @@ CREATE TABLE `LIST_CANCELED` `APP_PRO_TITLE` MEDIUMTEXT, `APP_TAS_TITLE` MEDIUMTEXT, `APP_CANCELED_DATE` DATETIME, - `DEL_INDEX` INTEGER default 0 NOT NULL, `DEL_PREVIOUS_USR_UID` VARCHAR(32) default '', `DEL_CURRENT_USR_USERNAME` VARCHAR(100) default '', `DEL_CURRENT_USR_FIRSTNAME` VARCHAR(50) default '', @@ -2589,7 +2589,7 @@ CREATE TABLE `LIST_CANCELED` `PRO_ID` INTEGER default 0, `USR_ID` INTEGER default 0, `TAS_ID` INTEGER default 0, - PRIMARY KEY (`APP_UID`), + PRIMARY KEY (`APP_UID`,`DEL_INDEX`), KEY `INDEX_PRO_ID`(`PRO_ID`), KEY `INDEX_USR_ID`(`USR_ID`), KEY `INDEX_TAS_ID`(`TAS_ID`), From aee7f2b9668b9c86feb5f0882e505dedaf48aad7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Fri, 18 May 2018 15:01:54 -0400 Subject: [PATCH 06/24] HOR-4575 --- workflow/engine/methods/login/login.php | 5 +++++ workflow/engine/methods/login/sysLoginVerify.php | 2 ++ 2 files changed, 7 insertions(+) diff --git a/workflow/engine/methods/login/login.php b/workflow/engine/methods/login/login.php index 58abe4dc6..24f3cf217 100644 --- a/workflow/engine/methods/login/login.php +++ b/workflow/engine/methods/login/login.php @@ -252,6 +252,11 @@ if ($timeZoneFailed) { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login' . PATH_SEP . 'TimeZoneAlert', '', $arrayData, SYS_URI . 'login/authentication.php'); G::RenderPage('publish'); + + // Destroy a significant value in session + global $G_FORM; + unset($_SESSION[$G_FORM->id]['USR_PASSWORD']); + exit(0); } /*----------------------------------********---------------------------------*/ diff --git a/workflow/engine/methods/login/sysLoginVerify.php b/workflow/engine/methods/login/sysLoginVerify.php index 0c8acd5c3..e12cf1fcf 100644 --- a/workflow/engine/methods/login/sysLoginVerify.php +++ b/workflow/engine/methods/login/sysLoginVerify.php @@ -36,6 +36,8 @@ if (!isset($_POST)) { } if (isset($_SESSION['sysLogin'])) { $_POST['form'] = $_SESSION['sysLogin']; + // Destroy variables already assigned to the global variable $_POST + unset($_SESSION['sysLogin']); } require_once 'authentication.php'; From 33b7672e57977ce9e089dcee3ae1c6f02a54d6fe Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Thu, 24 May 2018 09:10:04 -0400 Subject: [PATCH 07/24] HOR-4589 --- .../src/ProcessMaker/BusinessModel/Light.php | 33 ++++++++++--------- .../src/ProcessMaker/Services/Api/Light.php | 6 ++-- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php index 8b1c4ef9a..999fa8bfd 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php @@ -6,6 +6,7 @@ use ProcessMaker\BusinessModel\Lists; use G; use Criteria; use UsersPeer; +use AppDelegation; use AppDelegationPeer; use AppDelayPeer; use ProcessMaker\Core\System; @@ -1076,28 +1077,30 @@ class Light } /** - * claim case + * Claim case * - * @param $userUid - * @param $Fields - * @param $type + * @param string $userUid + * @param string $appUid + * @param integer $delIndex + * + * @return array * @throws Exception */ - public function claimCaseUser($userUid, $sAppUid) + public function claimCaseUser($userUid, $appUid, $delIndex = null) { - $response = array("status" => "fail"); - $oCase = new Cases(); - $iDelIndex = $oCase->getCurrentDelegation($sAppUid, '', true); + $response = ['status' => 'fail']; + $case = new Cases(); + $appDelegation = new AppDelegation(); + if (empty($delIndex)) { + $delIndex = $case->getCurrentDelegation($appUid, '', true); + } - $oAppDelegation = new \AppDelegation(); - $aDelegation = $oAppDelegation->load($sAppUid, $iDelIndex); + $delegation = $appDelegation->Load($appUid, $delIndex); //if there are no user in the delegation row, this case is still in selfservice - if ($aDelegation['USR_UID'] == "") { - $oCase->setCatchUser($sAppUid, $iDelIndex, $userUid); - $response = array("status" => "ok"); - } else { - //G::SendMessageText( G::LoadTranslation( 'ID_CASE_ALREADY_DERIVATED' ), 'error' ); + if (empty($delegation['USR_UID'])) { + $case->setCatchUser($appUid, $delIndex, $userUid); + $response['status'] = 'ok'; } return $response; diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light.php b/workflow/engine/src/ProcessMaker/Services/Api/Light.php index 1d5360d38..f958feeae 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Light.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Light.php @@ -1490,12 +1490,12 @@ class Light extends Api * @access protected * @class AccessControl {@permission PM_CASES} */ - public function claimCaseUser($app_uid) + public function claimCaseUser($app_uid, $del_index = null) { try { $userUid = $this->getUserId(); - $oMobile = new BusinessModelLight(); - $response = $oMobile->claimCaseUser($userUid, $app_uid); + $mobile = new BusinessModelLight(); + $response = $mobile->claimCaseUser($userUid, $app_uid, $del_index); } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } From a5c324f57b0874f0fd26d250dc0f4aa9f0085336 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 18 May 2018 16:54:37 -0400 Subject: [PATCH 08/24] HOR-4570 --- workflow/engine/classes/Cases.php | 198 +++++++++--------- workflow/engine/classes/class.pmFunctions.php | 1 + workflow/engine/classes/model/AppDelay.php | 47 ++++- workflow/engine/classes/model/Application.php | 1 + .../engine/classes/model/ListCanceled.php | 19 ++ 5 files changed, 166 insertions(+), 100 deletions(-) diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index fdcf97fde..10c9a0858 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -1,9 +1,11 @@ CloseCurrentDelegation($appUid, $delIndex); $resultDelegation = $delegation->Load($appUid, $delIndex); - $this->closeAppThread($appUid, $result['DEL_THREAD']); + $this->closeAppThread($appUid, $resultDelegation['DEL_THREAD']); $result[] = $resultDelegation; } @@ -4257,114 +4259,114 @@ class Cases /** * Un cancel case * - * @param string $caseUID - * @param string $userUID - * @return int + * @param string $appUid + * @param string $usrUid + * + * @return void + * @throws Exception */ - public function unCancelCase($appUID, $userUID) + public function unCancelCase($appUid, $usrUid) { try { - $oUser = new \ProcessMaker\BusinessModel\User(); - if (!$oUser->checkPermission($userUID, 'PM_UNCANCELCASE')) { + $user = new BusinessModelUser(); + /** Review if the user has the permission PM_UNCANCELCASE */ + if (!$user->checkPermission($usrUid, 'PM_UNCANCELCASE')) { throw new Exception(G::LoadTranslation('ID_YOU_DO_NOT_HAVE_PERMISSION')); } - $application = new Application(); - $rowApplication = $application->load($appUID); - if ($rowApplication["APP_STATUS"] !== "CANCELLED") { - throw new Exception(G::LoadTranslation('ID_THE_APPLICATION_IS_NOT_CANCELED', [$appUID])); + $caseFields = $this->loadCase($appUid); + /** Review if the case has the status CANCELLED */ + if ($caseFields["APP_STATUS"] !== Application::APP_STATUS_CANCELLED) { + throw new Exception(G::LoadTranslation('ID_THE_APPLICATION_IS_NOT_CANCELED', [$appUid])); } - $criteriaAppDelay = new Criteria('workflow'); - $criteriaAppDelay->add(AppDelayPeer::APP_UID, $appUID); - $criteriaAppDelay->add(AppDelayPeer::APP_STATUS, 'CANCELLED'); - $criteriaAppDelay->add(AppDelayPeer::PRO_UID, $rowApplication['PRO_UID']); - $criteriaAppDelay->addDescendingOrderByColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE); - $resultSetAppDelay = AppDelayPeer::doSelectRS($criteriaAppDelay); - $resultSetAppDelay->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $resultSetAppDelay->next(); - $rowAppDelay = $resultSetAppDelay->getRow(); - if (!isset($rowAppDelay['APP_STATUS'])) { - throw new Exception(G::LoadTranslation('ID_THREAD_STATUS_DOES_NOT_EXIST_FOR_THE_APPLICATION.', [$appUID])); - } + //Load the USR_ID + $u = new Users(); + $userId = $u->load($usrUid)['USR_ID']; - //Application - $rowApplication['APP_STATUS'] = 'TO_DO'; - $rowApplication['APP_UPDATE_DATE'] = date('Y-m-d H:i:s'); - $application->update($rowApplication); - - //AppDelegation - $appDelegation = new AppDelegation(); - $rowAppDelegation = $appDelegation->Load($appUID, $rowAppDelay['APP_DEL_INDEX']); - - $appDelegation = new AppDelegation(); - $delIndex = $appDelegation->createAppDelegation($rowAppDelegation['PRO_UID'], $rowAppDelegation['APP_UID'], $rowAppDelegation['TAS_UID'], $userUID, $rowAppDelay['APP_THREAD_INDEX']); - - //AppThread - $dataAppThread = [ - 'APP_UID' => $rowApplication['APP_UID'], - 'APP_THREAD_INDEX' => $rowAppDelay['APP_THREAD_INDEX'], - 'APP_THREAD_STATUS' => 'OPEN', - 'DEL_INDEX' => $delIndex - ]; - $appThread = new AppThread(); - $appThread->update($dataAppThread); - - //AppDelay - $dataAppDelay = [ - 'PRO_UID' => $rowApplication['PRO_UID'], - 'APP_UID' => $rowApplication['APP_UID'], - 'APP_THREAD_INDEX' => $rowAppDelay['APP_THREAD_INDEX'], - 'APP_DELINDEX' => $delIndex, - 'APP_TYPE' => 'UNCANCEL', - 'APP_STATUS' => $rowApplication['APP_STATUS'], - 'APP_NEXT_TASK' => 0, - 'APP_DELEGATION_USER' => $userUID, - 'APP_ENABLE_ACTION_USER' => $userUID, - 'APP_ENABLE_ACTION_DATE' => date('Y-m-d H:i:s'), - 'APP_DISABLE_ACTION_USER' => 0 - ]; + //Get the list of thread that close with the CancelCase $appDelay = new AppDelay(); - $appDelay->create($dataAppDelay); + $threadsCanceled = $appDelay->getThreadByStatus($appUid, Application::APP_STATUS_CANCELLED); - //ListCanceled - $criteriaListCanceled = new Criteria("workflow"); - $criteriaListCanceled->add(ListCanceledPeer::APP_UID, $appUID); - $resultSetListCanceled = ListCanceledPeer::doSelectRS($criteriaListCanceled); - $resultSetListCanceled->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $resultSetListCanceled->next(); - $rowListCanceled = $resultSetListCanceled->getRow(); - ListCanceledPeer::doDelete($criteriaListCanceled); + //Get all the threads in the AppDelay + foreach ($threadsCanceled as $row){ + //Load the thread CLOSED + $appDelegation = new AppDelegation(); + $delegationClosed = $appDelegation->Load($appUid, $row['APP_DEL_INDEX']); + //Create an appDelegation for each thread + $appDelegation = new AppDelegation(); + $delIndex = $appDelegation->createAppDelegation( + $delegationClosed['PRO_UID'], + $delegationClosed['APP_UID'], + $delegationClosed['TAS_UID'], + $usrUid, + $delegationClosed['DEL_THREAD'], + 3, + false, + $delegationClosed['DEL_PREVIOUS'], + null, + false, + false, + 0, + $delegationClosed['APP_NUMBER'], + $delegationClosed['TAS_ID'], + $userId, + $delegationClosed['PRO_ID'] + ); - //ListInbox - $rowListCanceled['DEL_PREVIOUS_USR_USERNAME'] = $rowListCanceled['DEL_CURRENT_USR_USERNAME']; - $rowListCanceled['DEL_PREVIOUS_USR_FIRSTNAME'] = $rowListCanceled['DEL_CURRENT_USR_FIRSTNAME']; - $rowListCanceled['DEL_PREVIOUS_USR_LASTNAME'] = $rowListCanceled['DEL_CURRENT_USR_LASTNAME']; - $rowListCanceled['APP_STATUS'] = 'TO_DO'; - $rowListCanceled['APP_UPDATE_DATE'] = date('Y-m-d H:i:s'); - $rowListCanceled['DEL_RISK_DATE'] = date('Y-m-d H:i:s'); - $rowListCanceled['DEL_INDEX'] = $delIndex; - unset($rowListCanceled['DEL_CURRENT_USR_USERNAME']); - unset($rowListCanceled['DEL_CURRENT_USR_FIRSTNAME']); - unset($rowListCanceled['DEL_CURRENT_USR_LASTNAME']); - unset($rowListCanceled['APP_CANCELED_DATE']); + //Update the appThread + $dataAppThread = [ + 'APP_UID' => $row['APP_UID'], + 'APP_THREAD_INDEX' => $delegationClosed['DEL_THREAD'], + 'APP_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => $delIndex + ]; + $appThread = new AppThread(); + $res = $appThread->update($dataAppThread); - $this->putCaseInInboxList($rowListCanceled, $userUID); + //New register in AppDelay + $newAppDelay = AppDelay::buildAppDelayRow( + $row['PRO_UID'], + $delegationClosed['PRO_ID'], + $row['APP_UID'], + $delegationClosed['APP_NUMBER'], + $row['APP_THREAD_INDEX'], + $delIndex, + AppDelay::APP_TYPE_UNCANCEL, + Application::APP_STATUS_TODO, + $usrUid, + $userId + ); + $appDelay->create($newAppDelay); - //ListParticipatedLast - $criteriaListParticipatedLast = new Criteria("workflow"); - $criteriaListParticipatedLast->add(ListParticipatedLastPeer::APP_UID, $appUID); - $resultSetListParticipatedLast = ListParticipatedLastPeer::doSelectRS($criteriaListParticipatedLast); - $resultSetListParticipatedLast->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $resultSetListParticipatedLast->next(); - $rowListParticipatedLast = $resultSetListParticipatedLast->getRow(); - $rowListParticipatedLast['APP_STATUS'] = 'TO_DO'; - $rowListParticipatedLast['DEL_THREAD_STATUS'] = 'OPEN'; - $rowListParticipatedLast['DEL_INIT_DATE'] = null; - $listParticipatedLast = new ListParticipatedLast(); - $listParticipatedLast->update($rowListParticipatedLast); - } catch (Exception $oException) { - throw $oException; + //New register in the listInbox + $newDelegation = array_merge($newAppDelay, $delegationClosed); + $newDelegation['USR_UID'] = $usrUid; + $newDelegation['DEL_INDEX'] = $delIndex; + $newDelegation['APP_STATUS'] = Application::APP_STATUS_TODO; + $inbox = new ListInbox(); + //Get the previous user + //When the status of the case is DRAFT we does not have a previous thread + $previousUser = ''; + if ($delegationClosed['DEL_PREVIOUS'] != 0){ + $appDelegation = new AppDelegation(); + $delegationPrevious = $appDelegation->Load($appUid, $delegationClosed['DEL_PREVIOUS']); + $previousUser = $delegationPrevious['USR_UID']; + } + + $inbox->newRow($newDelegation, $previousUser); + } + + //Update the status of the case + $caseFields['APP_STATUS'] = Application::APP_STATUS_TODO; + $this->updateCase($appUid, $caseFields); + + //Remove the case from the list Canceled + $listCanceled = new ListCanceled(); + $listCanceled->removeAll($appUid); + + } catch (Exception $exception) { + throw $exception; } } diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index 91aab7488..ac52fbd93 100644 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -2767,6 +2767,7 @@ function PMFCancelCase ($caseUid, $delIndex, $userUid) { $ws = new WsBase(); $result = $ws->cancelCase($caseUid, $delIndex, $userUid); + $result = (object)$result; if ($result->status_code == 0) { if (isset($_SESSION['APPLICATION']) && isset($_SESSION['INDEX'])) { diff --git a/workflow/engine/classes/model/AppDelay.php b/workflow/engine/classes/model/AppDelay.php index ab249d325..f8445c2e6 100644 --- a/workflow/engine/classes/model/AppDelay.php +++ b/workflow/engine/classes/model/AppDelay.php @@ -13,6 +13,7 @@ class AppDelay extends BaseAppDelay { const APP_TYPE_CANCEL = 'CANCEL'; + const APP_TYPE_UNCANCEL = 'UNCANCEL'; const APP_TYPE_PAUSE = 'PAUSE'; /** @@ -161,6 +162,7 @@ class AppDelay extends BaseAppDelay * @param string $appType * @param string $appStatus * @param string $usrUid + * @param integer $usrId * * @return array */ @@ -173,11 +175,11 @@ class AppDelay extends BaseAppDelay $delIndex = 0, $appType = 'CANCEL', $appStatus = 'CANCELLED', - $usrUid = '' + $usrUid = '', + $usrId = 0 ) { $row = []; $row['PRO_UID'] = $proUid; - $row['PRO_ID'] = $proId; $row['APP_UID'] = $appUid; $row['APP_NUMBER'] = $appNumber; $row['APP_THREAD_INDEX'] = $appThreadIndex; @@ -186,15 +188,56 @@ class AppDelay extends BaseAppDelay $row['APP_STATUS'] = $appStatus; $row['APP_ENABLE_ACTION_DATE'] = date('Y-m-d H:i:s'); + //Load the PRO_ID if does not exit + if (empty($proId) || $proId === 0) { + $u = new Process(); + $proId = $u->load($proUid)['PRO_ID']; + } + + $row['PRO_ID'] = $proId; //Define the user that execute the insert if (empty($usrUid)) { global $RBAC; $usrUid = $RBAC->aUserInfo['USER_INFO']['USR_UID']; + $u = new Users(); + $usrId = $u->load($usrUid)['USR_ID']; } $row['APP_DELEGATION_USER'] = $usrUid; $row['APP_ENABLE_ACTION_USER'] = $usrUid; + $row['APP_DELEGATION_USER_ID'] = $usrId; return $row; } + + /** + * Return all threads with the status canceled + * + * @param string $appUid + * @param string $status + * + * @return array + * @throws Exception + */ + public function getThreadByStatus($appUid, $status) + { + try { + $criteria = new Criteria('workflow'); + $criteria->add(AppDelayPeer::APP_UID, $appUid); + $criteria->add(AppDelayPeer::APP_STATUS, $status); + $criteria->addDescendingOrderByColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE); + $dataset = AppDelayPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $result = []; + while ($row = $dataset->getRow()) { + $result[] = $row; + $dataset->next(); + } + + return $result; + } catch (Exception $error) { + throw $error; + } + } } diff --git a/workflow/engine/classes/model/Application.php b/workflow/engine/classes/model/Application.php index 7f070355d..47742d219 100644 --- a/workflow/engine/classes/model/Application.php +++ b/workflow/engine/classes/model/Application.php @@ -47,6 +47,7 @@ class Application extends BaseApplication * @var string */ const APP_STATUS_CANCELLED = 'CANCELLED'; + const APP_STATUS_TODO = 'TO_DO'; public static $app_status_values = ['DRAFT' => 1, 'TO_DO' => 2, 'COMPLETED' => 3, 'CANCELLED' => 4]; protected $app_title_content = ''; protected $app_description_content = ''; diff --git a/workflow/engine/classes/model/ListCanceled.php b/workflow/engine/classes/model/ListCanceled.php index f3e318d0d..7796b74cb 100644 --- a/workflow/engine/classes/model/ListCanceled.php +++ b/workflow/engine/classes/model/ListCanceled.php @@ -190,6 +190,25 @@ class ListCanceled extends BaseListCanceled implements ListInterface } } + /** + * Remove all records related to the APP_UID + * + * @param string $appUid + * + * @return void + * @throws Exception + */ + public function removeAll($appUid) + { + try { + $criteria = new Criteria("workflow"); + $criteria->add(ListCanceledPeer::APP_UID, $appUid); + ListCanceledPeer::doDelete($criteria); + } catch (Exception $e) { + throw $e; + } + } + public function loadFilters(&$criteria, $filters) { $filter = isset($filters['filter']) ? $filters['filter'] : ""; From cbe047b604183d27a77a3e745156cf294c965b8a Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Fri, 25 May 2018 17:24:19 -0400 Subject: [PATCH 09/24] HOR-4573 --- workflow/engine/controllers/InstallerModule.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/engine/controllers/InstallerModule.php b/workflow/engine/controllers/InstallerModule.php index 4ca644af4..00b6c3f3c 100644 --- a/workflow/engine/controllers/InstallerModule.php +++ b/workflow/engine/controllers/InstallerModule.php @@ -140,7 +140,7 @@ class InstallerModule extends Controller $info->memory = new stdclass(); $info->php->version = phpversion(); - $info->php->result = (version_compare(phpversion(), '5.4', '>=') && version_compare(phpversion(), '7.0', '<')) ? true : false; + $info->php->result = (version_compare(phpversion(), '5.6', '>=') && version_compare(phpversion(), '7.0', '<')) ? true : false; // MYSQL info and verification $info->mysql->result = false; From c71b3f6e6c6a87133d00ca76f989027239c61584 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 28 May 2018 09:42:12 -0400 Subject: [PATCH 10/24] HOR-4576 --- .../engine/methods/cases/cases_Resume.php | 40 ++++++------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/workflow/engine/methods/cases/cases_Resume.php b/workflow/engine/methods/cases/cases_Resume.php index f985b671e..24a772edc 100644 --- a/workflow/engine/methods/cases/cases_Resume.php +++ b/workflow/engine/methods/cases/cases_Resume.php @@ -1,26 +1,7 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ + +use ProcessMaker\BusinessModel\Task as BusinessModelTask; + /* Permissions */ switch ($RBAC->userCanAccess( 'PM_CASES' )) { case - 2: @@ -155,14 +136,19 @@ if ($Fields['APP_STATUS'] != 'COMPLETED') { $FieldsPar = $Fields; foreach ($parallel as $row) { $FieldsPar['TAS_UID'] = $row['TAS_UID']; - $aTask = $objTask->load( $row['TAS_UID'] ); - $FieldsPar['TAS_TITLE'] = $aTask['TAS_TITLE']; + $task = $objTask->load($row['TAS_UID']); + $FieldsPar['TAS_TITLE'] = $task['TAS_TITLE']; $FieldsPar['USR_UID'] = $row['USR_UID']; if (isset($row['USR_UID']) && !empty($row['USR_UID'])) { - $aUser = $objUser->loadDetails ($row['USR_UID']); - $FieldsPar['CURRENT_USER'] = $aUser['USR_FULLNAME']; + $user = $objUser->loadDetails($row['USR_UID']); + $FieldsPar['CURRENT_USER'] = $user['USR_FULLNAME']; } else { - $FieldsPar['CURRENT_USER'] = ''; + $dummyTaskTypes = BusinessModelTask::getDummyTypes(); + if (!in_array($task["TAS_TYPE"], $dummyTaskTypes)) { + $FieldsPar['CURRENT_USER'] = G::LoadTranslation('ID_TITLE_UNASSIGNED'); + } else { + $FieldsPar['CURRENT_USER'] = ''; + } } $FieldsPar['DEL_DELEGATE_DATE'] = $row['DEL_DELEGATE_DATE']; $FieldsPar['DEL_INIT_DATE'] = $row['DEL_INIT_DATE']; From ffd449a9dda3ca678f4a5e1b09f46949c516a623 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Mon, 28 May 2018 15:18:28 -0400 Subject: [PATCH 11/24] HOR-4385: Capture Email credentials in clear text --- .../ProcessMaker/BusinessModel/EmailServer.php | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php index c4412f906..a4cdece46 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php @@ -1276,22 +1276,6 @@ class EmailServer while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); - - $passwd = $row["MESS_PASSWORD"]; - $passwdDec = G::decrypt($passwd, "EMAILENCRYPT"); - $auxPass = explode("hash:", $passwdDec); - - if (count($auxPass) > 1) { - if (count($auxPass) == 2) { - $passwd = $auxPass[1]; - } else { - array_shift($auxPass); - $passwd = implode("", $auxPass); - } - } - - $row["MESS_PASSWORD"] = $passwd; - $arrayEmailServer[] = $this->getEmailServerDataFromRecord($row); } From 363a63991cf4496878190d96b5747ce4b8256031 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Tue, 22 May 2018 15:15:16 -0400 Subject: [PATCH 12/24] HOR-4483 --- workflow/engine/classes/Cases.php | 72 ++++++++++------- workflow/engine/classes/WorkspaceTools.php | 30 ++++++- workflow/engine/classes/model/Task.php | 7 ++ .../translations/english/processmaker.en.po | 24 ++++++ workflow/engine/data/mysql/insert.sql | 4 + .../engine/methods/cases/caseHistory_Ajax.php | 6 +- .../methods/tracker/tracker_History.php | 2 +- .../BusinessModel/Light/Tracker.php | 46 +++++++---- .../Project/Adapter/BpmnWorkflow.php | 78 ++++++++++--------- 9 files changed, 180 insertions(+), 89 deletions(-) diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index 8dae33f5a..93355dcae 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -2533,10 +2533,11 @@ class Cases * Get the transfer History * * @name getTransferHistoryCriteria - * @param string $sAppUid - * @return array + * @param integer $appNumber + * + * @return object */ - public function getTransferHistoryCriteria($sAppUid) + public function getTransferHistoryCriteria($appNumber) { $c = new Criteria('workflow'); $c->addSelectColumn(UsersPeer::USR_FIRSTNAME); @@ -2546,41 +2547,52 @@ class Cases $c->addSelectColumn(AppDelegationPeer::TAS_UID); $c->addSelectColumn(AppDelegationPeer::APP_UID); $c->addSelectColumn(AppDelegationPeer::DEL_INDEX); - ///-- $c->addAsColumn('USR_NAME', "CONCAT(USR_LASTNAME, ' ', USR_FIRSTNAME)"); - $sDataBase = 'database_' . strtolower(DB_ADAPTER); - if (G::LoadSystemExist($sDataBase)) { - $oDataBase = new database(); - $c->addAsColumn('USR_NAME', $oDataBase->concatString("USR_LASTNAME", "' '", "USR_FIRSTNAME")); - $c->addAsColumn( - 'DEL_FINISH_DATE', $oDataBase->getCaseWhen("DEL_FINISH_DATE IS NULL", "'-'", AppDelegationPeer::DEL_FINISH_DATE) - ); - $c->addAsColumn( - 'APP_TYPE', $oDataBase->getCaseWhen("DEL_FINISH_DATE IS NULL", "'IN_PROGRESS'", AppDelayPeer::APP_TYPE) - ); - } $c->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); $c->addSelectColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE); $c->addSelectColumn(AppDelayPeer::APP_DISABLE_ACTION_DATE); - $c->addSelectColumn(TaskPeer::TAS_TITLE); - //APP_DELEGATION LEFT JOIN USERS - $c->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - //APP_DELAY FOR MORE DESCRIPTION - //$c->addJoin(AppDelegationPeer::DEL_INDEX, AppDelayPeer::APP_DEL_INDEX, Criteria::LEFT_JOIN); - //$c->addJoin(AppDelegationPeer::APP_UID, AppDelayPeer::APP_UID, Criteria::LEFT_JOIN); + //We added this custom query for the case tracker + $c->addAsColumn( + 'TAS_TITLE', + 'CASE WHEN TASK.TAS_TITLE = "INTERMEDIATE-THROW-EMAIL-EVENT" THEN "' . G::LoadTranslation('ID_INTERMEDIATE_THROW_EMAIL_EVENT') . '" + WHEN TASK.TAS_TITLE = "INTERMEDIATE-THROW-MESSAGE-EVENT" THEN "' . G::LoadTranslation('ID_INTERMEDIATE_THROW_MESSAGE_EVENT') . '" + WHEN TASK.TAS_TITLE = "INTERMEDIATE-CATCH-MESSAGE-EVENT" THEN "' . G::LoadTranslation('ID_INTERMEDIATE_CATCH_MESSAGE_EVENT') . '" + WHEN TASK.TAS_TITLE = "INTERMEDIATE-CATCH-TIMER-EVENT" THEN "' . G::LoadTranslation('ID_INTERMEDIATE_CATCH_TIMER_EVENT') . '" + ELSE TASK.TAS_TITLE + END' + ); + + $dbAdapter = 'database_' . strtolower(DB_ADAPTER); + if (G::LoadSystemExist($dbAdapter)) { + $dataBase = new database(); + $c->addAsColumn( + 'USR_NAME', + $dataBase->concatString("USR_LASTNAME", "' '", "USR_FIRSTNAME") + ); + $c->addAsColumn( + 'DEL_FINISH_DATE', + $dataBase->getCaseWhen("DEL_FINISH_DATE IS NULL", "'-'", AppDelegationPeer::DEL_FINISH_DATE) + ); + $c->addAsColumn( + 'APP_TYPE', + $dataBase->getCaseWhen("DEL_FINISH_DATE IS NULL", "'IN_PROGRESS'", AppDelayPeer::APP_TYPE) + ); + } + + //Define the joins + $c->addJoin(AppDelegationPeer::USR_ID, UsersPeer::USR_ID, Criteria::LEFT_JOIN); + $c->addJoin(AppDelegationPeer::TAS_ID, TaskPeer::TAS_ID, Criteria::LEFT_JOIN); + $del = DBAdapter::getStringDelimiter(); - $app = array(); - $app[] = array(AppDelegationPeer::DEL_INDEX, AppDelayPeer::APP_DEL_INDEX); - $app[] = array(AppDelegationPeer::APP_UID, AppDelayPeer::APP_UID); + $app = []; + $app[] = [AppDelegationPeer::DEL_INDEX, AppDelayPeer::APP_DEL_INDEX]; + $app[] = [AppDelegationPeer::APP_NUMBER, AppDelayPeer::APP_NUMBER]; $c->addJoinMC($app, Criteria::LEFT_JOIN); - //LEFT JOIN TASK TAS_TITLE - $c->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + //Define the where + $c->add(AppDelegationPeer::APP_NUMBER, $appNumber); - //WHERE - $c->add(AppDelegationPeer::APP_UID, $sAppUid); - - //ORDER BY + //Order by $c->clearOrderByColumns(); $c->addAscendingOrderByColumn(AppDelegationPeer::DEL_DELEGATE_DATE); diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 6af1ad085..0f4614cde 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -3932,7 +3932,7 @@ class WorkspaceTools WHERE AM.TAS_ID = 0 AND AM.PRO_ID = 0 AND AM.APP_NUMBER != 0 AND AM.DEL_INDEX != 0"); $con->commit(); - // Populating APP_MESSAGE.PRO_ID when does not exits DEL_INDEX + // Populating APP_MESSAGE.PRO_ID CLI::logging("-> Populating APP_MESSAGE.PRO_ID\n"); $con->begin(); $stmt = $con->createStatement(); @@ -3948,7 +3948,7 @@ class WorkspaceTools WHERE AM.PRO_ID = 0 AND AM.APP_NUMBER != 0"); $con->commit(); - // Populating APP_MESSAGE.PRO_ID + // Populating APP_MESSAGE.APP_MSG_STATUS_ID CLI::logging("-> Populating APP_MESSAGE.APP_MSG_STATUS_ID \n"); $con->begin(); $rs = $stmt->executeQuery("UPDATE APP_MESSAGE @@ -3961,8 +3961,8 @@ class WorkspaceTools APP_MSG_STATUS_ID = 0"); $con->commit(); - // Populating APP_MESSAGE.PRO_ID - CLI::logging("-> Populating APP_MESSAGE.APP_MSG_STATUS_ID \n"); + // Populating APP_MESSAGE.APP_MSG_TYPE_ID + CLI::logging("-> Populating APP_MESSAGE.APP_MSG_TYPE_ID \n"); $con->begin(); $rs = $stmt->executeQuery("UPDATE APP_MESSAGE SET APP_MSG_TYPE_ID = (case @@ -3975,6 +3975,28 @@ class WorkspaceTools APP_MSG_TYPE_ID = 0"); $con->commit(); + // Populating TAS.TAS_TITLE with BPMN_EVENT.EVN_NAME + /*----------------------------------********---------------------------------*/ + CLI::logging("-> Populating TASK.TAS_TITLE with BPMN_EVENT.EVN_NAME\n"); + $con->begin(); + $rs = $stmt->executeQuery("UPDATE TASK + INNER JOIN ( + SELECT ELEMENT_TASK_RELATION.TAS_UID, BPMN_EVENT.EVN_NAME + FROM ELEMENT_TASK_RELATION + JOIN BPMN_EVENT ON (BPMN_EVENT.EVN_UID = ELEMENT_TASK_RELATION.ELEMENT_UID) + ) AS EVENT + ON (TASK.TAS_UID = EVENT.TAS_UID) + SET TASK.TAS_TITLE = EVENT.EVN_NAME + WHERE TASK.TAS_TITLE IN ( + 'INTERMEDIATE-THROW-MESSAGE-EVENT', + 'INTERMEDIATE-THROW-EMAIL-EVENT', + 'INTERMEDIATE-CATCH-TIMER-EVENT', + 'INTERMEDIATE-CATCH-MESSAGE-EVENT' + ) + AND EVENT.EVN_NAME != ''"); + $con->commit(); + /*----------------------------------********---------------------------------*/ + CLI::logging("-> Migrating And Populating Indexing for avoiding the use of table APP_CACHE_VIEW Done \n"); // Populating PRO_ID, USR_ID diff --git a/workflow/engine/classes/model/Task.php b/workflow/engine/classes/model/Task.php index 75b613cd5..f6ddfc66b 100644 --- a/workflow/engine/classes/model/Task.php +++ b/workflow/engine/classes/model/Task.php @@ -16,12 +16,19 @@ */ class Task extends BaseTask { + const tas_type_events = [ + 'INTERMEDIATE-THROW-MESSAGE-EVENT', + 'INTERMEDIATE-THROW-EMAIL-EVENT', + 'INTERMEDIATE-CATCH-TIMER-EVENT', + 'INTERMEDIATE-CATCH-MESSAGE-EVENT' + ]; /** * This value goes in the content table * @var string */ protected $tas_title_content = ''; + /** * Get the tas_title column value. * @return string diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 4fc00efb0..702a8d3b3 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -9911,6 +9911,18 @@ msgstr "Insufficient privileges to execute this function" msgid "INT" msgstr "INT" +# TRANSLATION +# LABEL/ID_INTERMEDIATE_CATCH_MESSAGE_EVENT +#: LABEL/ID_INTERMEDIATE_CATCH_MESSAGE_EVENT +msgid "Untitled - Intermediate Send Message Event" +msgstr "Untitled - Intermediate Send Message Event" + +# TRANSLATION +# LABEL/ID_INTERMEDIATE_CATCH_TIMER_EVENT +#: LABEL/ID_INTERMEDIATE_CATCH_TIMER_EVENT +msgid "Untitled - Intermediate Timer Event" +msgstr "Untitled - Intermediate Timer Event" + # TRANSLATION # LABEL/ID_INTERMEDIATE_MESSAGE_EVENT #: LABEL/ID_INTERMEDIATE_MESSAGE_EVENT @@ -9935,6 +9947,18 @@ msgstr "Intermediate Timer Event (Multiple Event)" msgid "[LABEL/ID_INTERMEDIATE_TIMER_EVENTS] Intermediate Timer Event (Multiple Event)" msgstr "Intermediate Timer Event (Multiple Event)" +# TRANSLATION +# LABEL/ID_INTERMEDIATE_THROW_EMAIL_EVENT +#: LABEL/ID_INTERMEDIATE_THROW_EMAIL_EVENT +msgid "Untitled - Intermediate Email Event" +msgstr "Untitled - Intermediate Email Event" + +# TRANSLATION +# LABEL/ID_INTERMEDIATE_THROW_MESSAGE_EVENT +#: LABEL/ID_INTERMEDIATE_THROW_MESSAGE_EVENT +msgid "Untitled - Intermediate Receive Message Event" +msgstr "Untitled - Intermediate Receive Message Event" + # TRANSLATION # LABEL/ID_INTERNATIONAL #: LABEL/ID_INTERNATIONAL diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 66143c197..e18457c0a 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -58482,10 +58482,14 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_INSTRUCTIONS_TEXT','en','To assign a case, first select the case in the list. Then enter a user name in the ''Search'' field and select a user to whom the case will be reassigned.','2014-10-21') , ( 'LABEL','ID_INSUFFICIENT_PRIVILEGES_FUNCTION','en','Insufficient privileges to execute this function','2014-01-15') , ( 'LABEL','ID_INT','en','INT','2014-01-15') , +( 'LABEL','ID_INTERMEDIATE_CATCH_MESSAGE_EVENT','en','Untitled - Intermediate Send Message Event','2018-05-23') , +( 'LABEL','ID_INTERMEDIATE_CATCH_TIMER_EVENT','en','Untitled - Intermediate Timer Event','2018-05-23') , ( 'LABEL','ID_INTERMEDIATE_MESSAGE_EVENT','en','Intermediate Message Events (Task Notifications)','2014-01-15') , ( 'LABEL','ID_INTERMEDIATE_MESSAGE_EVENTS','en','Intermediate Message Events (Task Notifications)','2014-01-15') , ( 'LABEL','ID_INTERMEDIATE_TIMER_EVENT','en','Intermediate Timer Event (Multiple Event)','2014-01-15') , ( 'LABEL','ID_INTERMEDIATE_TIMER_EVENTS','en','Intermediate Timer Event (Multiple Event)','2014-01-15') , +( 'LABEL','ID_INTERMEDIATE_THROW_EMAIL_EVENT','en','Untitled - Intermediate Email Event','2018-05-23') , +( 'LABEL','ID_INTERMEDIATE_THROW_MESSAGE_EVENT','en','Untitled - Intermediate Receive Message Event','2018-05-23') , ( 'LABEL','ID_INTERNATIONAL','en','International','2014-01-15') , ( 'LABEL','ID_INVALID_APPLICATION_ID_MSG','en','An invalid application ID was stored for the session.
This could have happened if you opened another case in a new tab or window.
Please {0} the case.','2014-10-21') , ( 'LABEL','ID_INVALID_APPLICATION_NUMBER','en','You have set a invalid Application Number','2014-01-15') , diff --git a/workflow/engine/methods/cases/caseHistory_Ajax.php b/workflow/engine/methods/cases/caseHistory_Ajax.php index e3fc9d007..ae954d1ae 100644 --- a/workflow/engine/methods/cases/caseHistory_Ajax.php +++ b/workflow/engine/methods/cases/caseHistory_Ajax.php @@ -1,5 +1,6 @@ loadCase($appUid); + $criteria = Cases::getTransferHistoryCriteria($fields['APP_NUMBER']); $dataSet = GulliverBasePeer::doSelectRs($criteria); $totalCount = $dataSet->getRecordCount(); diff --git a/workflow/engine/methods/tracker/tracker_History.php b/workflow/engine/methods/tracker/tracker_History.php index db3a8367f..3039da355 100644 --- a/workflow/engine/methods/tracker/tracker_History.php +++ b/workflow/engine/methods/tracker/tracker_History.php @@ -60,7 +60,7 @@ $G_PUBLISH = new Publisher(); if ($noShowTitle == 0) { $G_PUBLISH->AddContent( 'smarty', 'cases/cases_title', '', '', $aFields ); } -$G_PUBLISH->AddContent( 'propeltable', 'paged-table', 'tracker/tracker_TransferHistory', Cases::getTransferHistoryCriteria( $_SESSION['APPLICATION'] ), array () ); +$G_PUBLISH->AddContent('propeltable', 'paged-table', 'tracker/tracker_TransferHistory', Cases::getTransferHistoryCriteria($aFields['APP_NUMBER']), []); $bpmn = new ProcessMaker\Project\Bpmn(); $flagIsBpmn = ($bpmn->exists($_SESSION["PROCESS"]))? true : false; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light/Tracker.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light/Tracker.php index 152aeb161..3aed5398d 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light/Tracker.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light/Tracker.php @@ -2,7 +2,12 @@ namespace ProcessMaker\BusinessModel\Light; +use AppDelegationPeer; +use Cases as ClassesCases; +use G; use PmDynaform; +use Process as ClassesProcess; +use ResultSet; class Tracker { @@ -73,37 +78,46 @@ class Tracker } + /** + * This function get the case history related to the case + * + * @param string $idProcess + * @param string $appUid + * + * @return array + */ public function history($idProcess, $appUid) { - $oCase = new \Cases(); - $aFields = $oCase->loadCase( $appUid ); + $case = new ClassesCases(); + $fields = $case->loadCase($appUid); - $oProcess = new \Process(); - $aProcessFieds = $oProcess->load( $idProcess ); + $process = new ClassesProcess(); + $processFields = $process->load($idProcess); $noShowTitle = 0; - if (isset( $aProcessFieds['PRO_SHOW_MESSAGE'] )) { - $noShowTitle = $aProcessFieds['PRO_SHOW_MESSAGE']; + if (isset($processFields['PRO_SHOW_MESSAGE'])) { + $noShowTitle = $processFields['PRO_SHOW_MESSAGE']; } - if (isset( $aFields['TITLE'] )) { - $aFields['APP_TITLE'] = $aFields['TITLE']; + if (isset($fields['TITLE'])) { + $fields['APP_TITLE'] = $fields['TITLE']; } - if ($aFields['APP_PROC_CODE'] != '') { - $aFields['APP_NUMBER'] = $aFields['APP_PROC_CODE']; + if ($fields['APP_PROC_CODE'] != '') { + $fields['APP_NUMBER'] = $fields['APP_PROC_CODE']; } - $aFields['CASE'] = \G::LoadTranslation( 'ID_CASE' ); - $aFields['TITLE'] = \G::LoadTranslation( 'ID_TITLE' ); + $fields['CASE'] = G::LoadTranslation('ID_CASE'); + $fields['TITLE'] = G::LoadTranslation('ID_TITLE'); - $c = \Cases::getTransferHistoryCriteria( $appUid ); - $dataset = \AppDelegationPeer::doSelectRS( $c ); - $dataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $c = ClassesCases::getTransferHistoryCriteria($fields['APP_NUMBER']); + $dataset = AppDelegationPeer::doSelectRS($c); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); - $history = array(); + $history = []; while ($row = $dataset->getRow()) { $history[] = $row; $dataset->next(); } $response = $this->parserHistory($history); + return $response; } diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php index df1476723..2de0c9596 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/BpmnWorkflow.php @@ -2,9 +2,14 @@ namespace ProcessMaker\Project\Adapter; +use BpmnFlow; +use BpmnFlowPeer; +use Exception; +use ProcessMaker\BusinessModel\ElementTaskRelation; use ProcessMaker\Plugins\PluginRegistry; use ProcessMaker\Project; use ProcessMaker\Util; +use ProcessMaker\Util\Common; /** * Class BpmnWorkflow @@ -777,39 +782,39 @@ class BpmnWorkflow extends Project\Bpmn } } - /* - public function updateEventStartObjects($eventUid, $taskUid) - { - $event = \BpmnEventPeer::retrieveByPK($eventUid); - - //Case-Scheduler - Update - if (!is_null($event) && $event->getEvnType() == "START" && $event->getEvnMarker() == "TIMER") { - $caseScheduler = new \CaseScheduler(); - - if ($caseScheduler->Exists($eventUid)) { - $this->wp->updateCaseScheduler($eventUid, array("TAS_UID" => $taskUid)); - } - } - - //Update web entry - //if (!is_null($event) && $event->getEvnType() == "START" && $event->getEvnMarker() == "MESSAGE") { - // $this->wp->updateWebEntry($eventUid, array("TAS_UID" => $taskUid)); - //} - } - */ - - private function __createTaskByElement($elementUid, $elementType, $key) + /** + * This function get the TAS_UID + * Create or just return the value + * + * @param string $elementUid + * @param string $elementType + * @param string $key + * @param string $eventName + * + * @return string + * @throws Exception + */ + private function __createTaskByElement($elementUid, $elementType, $key, $eventName = '') { try { + $taskTitle = $taskType = $this->arrayTaskAttribute[$key]["type"]; + /*----------------------------------********---------------------------------*/ + $taskTitle = empty($eventName) ? $taskType : $eventName; + /*----------------------------------********---------------------------------*/ + if (isset($this->arrayElementTaskRelation[$elementUid])) { $taskUid = $this->arrayElementTaskRelation[$elementUid]; + /*----------------------------------********---------------------------------*/ + $dataTask = ["TAS_TITLE" => $taskTitle]; + $this->wp->updateTask($taskUid, $dataTask); + /*----------------------------------********---------------------------------*/ } else { $taskPosX = 0; $taskPosY = 0; - $flow = \BpmnFlow::findOneBy(array( - \BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $elementUid, - \BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => $elementType + $flow = BpmnFlow::findOneBy(array( + BpmnFlowPeer::FLO_ELEMENT_ORIGIN => $elementUid, + BpmnFlowPeer::FLO_ELEMENT_ORIGIN_TYPE => $elementType )); if (!is_null($flow)) { @@ -818,9 +823,9 @@ class BpmnWorkflow extends Project\Bpmn $taskPosX = (int)($arrayFlowData["FLO_X1"]); $taskPosY = (int)($arrayFlowData["FLO_Y1"]); } else { - $flow = \BpmnFlow::findOneBy(array( - \BpmnFlowPeer::FLO_ELEMENT_DEST => $elementUid, - \BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE => $elementType + $flow = BpmnFlow::findOneBy(array( + BpmnFlowPeer::FLO_ELEMENT_DEST => $elementUid, + BpmnFlowPeer::FLO_ELEMENT_DEST_TYPE => $elementType )); if (!is_null($flow)) { @@ -832,18 +837,16 @@ class BpmnWorkflow extends Project\Bpmn } $prefix = $this->arrayTaskAttribute[$key]["prefix"]; - $taskType = $this->arrayTaskAttribute[$key]["type"]; - - $taskUid = $this->wp->addTask(array( - "TAS_UID" => $prefix . substr(Util\Common::generateUID(), (32 - strlen($prefix)) * -1), + $taskUid = $this->wp->addTask([ + "TAS_UID" => $prefix . substr(Common::generateUID(), (32 - strlen($prefix)) * -1), "TAS_TYPE" => $taskType, - "TAS_TITLE" => $taskType, + "TAS_TITLE" => $taskTitle, "TAS_POSX" => $taskPosX, "TAS_POSY" => $taskPosY - )); + ]); //Element-Task-Relation - Create - $elementTaskRelation = new \ProcessMaker\BusinessModel\ElementTaskRelation(); + $elementTaskRelation = new ElementTaskRelation(); $arrayResult = $elementTaskRelation->create( $this->wp->getUid(), @@ -860,7 +863,7 @@ class BpmnWorkflow extends Project\Bpmn //Return return $taskUid; - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } @@ -1026,7 +1029,8 @@ class BpmnWorkflow extends Project\Bpmn $taskUid = $this->__createTaskByElement( $eventUid, "bpmnEvent", - $arrayKey[$arrayEventData["EVN_MARKER"]] + $arrayKey[$arrayEventData["EVN_MARKER"]], + isset($arrayEventData["EVN_NAME"]) ? $arrayEventData["EVN_NAME"] : '' ); $result = $this->wp->addRoute($activityUid, $taskUid, $routeType, $routeCondition, $routeDefault); From 5c2a771954aa284e70ad942b40e50204172449d0 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Tue, 29 May 2018 16:34:42 -0400 Subject: [PATCH 13/24] HOR-4605: Ouput_Document > The documents are not being exported with their extensions --- workflow/engine/methods/cases/cases_ShowOutputDocument.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/workflow/engine/methods/cases/cases_ShowOutputDocument.php b/workflow/engine/methods/cases/cases_ShowOutputDocument.php index b786e3814..4d7927310 100644 --- a/workflow/engine/methods/cases/cases_ShowOutputDocument.php +++ b/workflow/engine/methods/cases/cases_ShowOutputDocument.php @@ -133,7 +133,7 @@ if (!$sw_file_exists) { $res['message'] = $info['basename'] . $ver . '.' . $ext; print G::json_encode( $res ); } else { - $nameFile = $info['basename'] . $ver . '.' . $ext; + $nameFile = G::inflect($info['basename'] . $ver) . '.' . $ext; $licensedFeatures = &PMLicensedFeatures::getSingleton(); $downloadStatus = false; /*----------------------------------********---------------------------------*/ @@ -159,7 +159,7 @@ if (!$sw_file_exists) { } /*----------------------------------********---------------------------------*/ if (!$downloadStatus) { - G::streamFile( $realPath, $download, G::inflect($nameFile)); //download + G::streamFile( $realPath, $download, $nameFile); //download } } } From d9ad9c3d77affd6ea048d49e0e88a00562999a28 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 30 May 2018 07:58:13 -0400 Subject: [PATCH 14/24] HOR-4599 --- workflow/engine/controllers/pmTablesProxy.php | 139 +++++++++--------- 1 file changed, 67 insertions(+), 72 deletions(-) diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index a0d1582fa..d9a802283 100644 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -910,108 +910,103 @@ class pmTablesProxy extends HttpProxyController /** * Export PM tables - * - * @author : Erik Amaru Ortiz + * + * @param object $httpData + * @return object */ - public function export ($httpData) + public function export($httpData) { - require_once 'classes/model/AdditionalTables.php'; - $at = new AdditionalTables(); - $tablesToExport = G::json_decode( stripslashes( $httpData->rows ) ); + $additionalTables = new AdditionalTables(); + $tablesToExport = G::json_decode(stripslashes($httpData->rows)); try { $result = new stdClass(); - $net = new Net( G::getIpAddress() ); - - $META = " \n-----== ProcessMaker Open Source Private Tables ==-----\n" . " @Ver: 1.0 Oct-2009\n" . " @Processmaker version: " . System::getVersion() . "\n" . " -------------------------------------------------------\n" . " @Export Date: " . date( "l jS \of F Y h:i:s A" ) . "\n" . " @Server address: " . getenv( 'SERVER_NAME' ) . " (" . getenv( 'SERVER_ADDR' ) . ")\n" . " @Client address: " . $net->hostname . "\n" . " @Workspace: " . config("system.workspace") . "\n" . " @Export trace back:\n\n"; - - $EXPORT_TRACEBACK = Array (); - $c = 0; + $net = new Net(G::getIpAddress()); + $metaInfo = " \n-----== ProcessMaker Open Source Private Tables ==-----\n" . " @Ver: 1.0 Oct-2009\n" . " @Processmaker version: " . System::getVersion() . "\n" . " -------------------------------------------------------\n" . " @Export Date: " . date("l jS \of F Y h:i:s A") . "\n" . " @Server address: " . getenv('SERVER_NAME') . " (" . getenv('SERVER_ADDR') . ")\n" . " @Client address: " . $net->hostname . "\n" . " @Workspace: " . config("system.workspace") . "\n" . " @Export trace back:\n\n"; + $exportTraceback = []; + foreach ($tablesToExport as $table) { - $tableRecord = $at->load( $table->ADD_TAB_UID ); - $tableData = $at->getAllData( $table->ADD_TAB_UID, null, null, false ); - $table->ADD_TAB_NAME = $tableRecord['ADD_TAB_NAME']; - $rows = $tableData['rows']; - $count = $tableData['count']; + if ($table->_DATA) { + $tableRecord = $additionalTables->load($table->ADD_TAB_UID); + $tableData = $additionalTables->getAllData($table->ADD_TAB_UID, null, null, false); + $table->ADD_TAB_NAME = $tableRecord['ADD_TAB_NAME']; - array_push( $EXPORT_TRACEBACK, Array ('uid' => $table->ADD_TAB_UID,'name' => $table->ADD_TAB_NAME,'num_regs' => $tableData['count'],'schema' => $table->_SCHEMA ? 'yes' : 'no','data' => $table->_DATA ? 'yes' : 'no' - ) ); + array_push($exportTraceback, [ + 'uid' => $table->ADD_TAB_UID, + 'name' => $table->ADD_TAB_NAME, + 'num_regs' => $tableData['count'], + 'schema' => $table->_SCHEMA ? 'yes' : 'no', + 'data' => $table->_DATA ? 'yes' : 'no' + ]); + } } - $sTrace = "TABLE UID TABLE NAME\tREGS\tSCHEMA\tDATA\n"; - - foreach ($EXPORT_TRACEBACK as $row) { - $sTrace .= "{$row['uid']}\t{$row['name']}\t\t{$row['num_regs']}\t{$row['schema']}\t{$row['data']}\n"; + $trace = "TABLE UID TABLE NAME\tREGS\tSCHEMA\tDATA\n"; + foreach ($exportTraceback as $row) { + $trace .= "{$row['uid']}\t{$row['name']}\t\t{$row['num_regs']}\t{$row['schema']}\t{$row['data']}\n"; } + $metaInfo .= $trace; - $META .= $sTrace; - - ///////////////EXPORT PROCESS - $PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . config("system.workspace") . PATH_SEP . 'public' . PATH_SEP; - - $filenameOnly = strtolower( 'SYS-' . config("system.workspace") . "_" . date( "Y-m-d" ) . '_' . date( "Hi" ) . ".pmt" ); - - $filename = $PUBLIC_ROOT_PATH . $filenameOnly; - $fp = fopen( $filename, "wb" ); - + //Export table + $publicPath = PATH_DATA . 'sites' . PATH_SEP . config("system.workspace") . PATH_SEP . 'public' . PATH_SEP; + $filenameOnly = strtolower('SYS-' . config("system.workspace") . "_" . date("Y-m-d") . '_' . date("Hi") . ".pmt"); + $filename = $publicPath . $filenameOnly; + $fp = fopen($filename, "wb"); $bytesSaved = 0; $bufferType = '@META'; - $fsData = sprintf( "%09d", strlen( $META ) ); - $fsbufferType = sprintf( "%09d", strlen( $bufferType ) ); - $bytesSaved += fwrite( $fp, $fsbufferType ); //writing the size of $oData - $bytesSaved += fwrite( $fp, $bufferType ); //writing the $oData - $bytesSaved += fwrite( $fp, $fsData ); //writing the size of $oData - $bytesSaved += fwrite( $fp, $META ); //writing the $oData + $fsData = sprintf("%09d", strlen($metaInfo)); + $fsbufferType = sprintf("%09d", strlen($bufferType)); + $bytesSaved += fwrite($fp, $fsbufferType); //writing the size of $oData + $bytesSaved += fwrite($fp, $bufferType); //writing the $oData + $bytesSaved += fwrite($fp, $fsData); //writing the size of $oData + $bytesSaved += fwrite($fp, $metaInfo); //writing the $oData foreach ($tablesToExport as $table) { if ($table->_SCHEMA) { - $oAdditionalTables = new AdditionalTables(); - $aData = $oAdditionalTables->load( $table->ADD_TAB_UID, true ); + //Export Schema + $pmTables = new AdditionalTables(); + $aData = $pmTables->load($table->ADD_TAB_UID, true); $bufferType = '@SCHEMA'; - $SDATA = serialize( $aData ); - $fsUid = sprintf( "%09d", strlen( $table->ADD_TAB_UID ) ); - $fsData = sprintf( "%09d", strlen( $SDATA ) ); - $fsbufferType = sprintf( "%09d", strlen( $bufferType ) ); - - $bytesSaved += fwrite( $fp, $fsbufferType ); //writing the size of $oData - $bytesSaved += fwrite( $fp, $bufferType ); //writing the $oData - $bytesSaved += fwrite( $fp, $fsUid ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $table->ADD_TAB_UID ); //writing the xmlfile - $bytesSaved += fwrite( $fp, $fsData ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $SDATA ); //writing the xmlfile + $dataTable = serialize($aData); + $fsUid = sprintf("%09d", strlen($table->ADD_TAB_UID)); + $fsData = sprintf("%09d", strlen($dataTable)); + $fsbufferType = sprintf("%09d", strlen($bufferType)); + $bytesSaved += fwrite($fp, $fsbufferType); //writing the size of $oData + $bytesSaved += fwrite($fp, $bufferType); //writing the $oData + $bytesSaved += fwrite($fp, $fsUid); //writing the size of xml file + $bytesSaved += fwrite($fp, $table->ADD_TAB_UID); //writing the xmlfile + $bytesSaved += fwrite($fp, $fsData); //writing the size of xml file + $bytesSaved += fwrite($fp, $dataTable); //writing the xmlfile } if ($table->_DATA) { - //export data - $oAdditionalTables = new additionalTables(); - $tableData = $oAdditionalTables->getAllData( $table->ADD_TAB_UID, null, null, false ); + //Export data + $pmTables = new additionalTables(); + $tableData = $pmTables->getAllData($table->ADD_TAB_UID, null, null, false); - $SDATA = serialize( $tableData['rows'] ); + $dataTable = serialize($tableData['rows']); $bufferType = '@DATA'; - - $fsbufferType = sprintf( "%09d", strlen( $bufferType ) ); - $fsTableName = sprintf( "%09d", strlen( $table->ADD_TAB_NAME ) ); - $fsData = sprintf( "%09d", strlen( $SDATA ) ); - - $bytesSaved += fwrite( $fp, $fsbufferType ); //writing type size - $bytesSaved += fwrite( $fp, $bufferType ); //writing type - $bytesSaved += fwrite( $fp, $fsTableName ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $table->ADD_TAB_NAME ); //writing the xmlfile - $bytesSaved += fwrite( $fp, $fsData ); //writing the size of xml file - $bytesSaved += fwrite( $fp, $SDATA ); //writing the xmlfile + $fsbufferType = sprintf("%09d", strlen($bufferType)); + $fsTableName = sprintf("%09d", strlen($table->ADD_TAB_NAME)); + $fsData = sprintf("%09d", strlen($dataTable)); + $bytesSaved += fwrite($fp, $fsbufferType); //writing type size + $bytesSaved += fwrite($fp, $bufferType); //writing type + $bytesSaved += fwrite($fp, $fsTableName); //writing the size of xml file + $bytesSaved += fwrite($fp, $table->ADD_TAB_NAME); //writing the xmlfile + $bytesSaved += fwrite($fp, $fsData); //writing the size of xml file + $bytesSaved += fwrite($fp, $dataTable); //writing the xmlfile } - G::auditLog("ExportTable", $table->ADD_TAB_NAME." (".$table->ADD_TAB_UID.") "); + + G::auditLog("ExportTable", $table->ADD_TAB_NAME . " (" . $table->ADD_TAB_UID . ") "); } - fclose( $fp ); + fclose($fp); $filenameLink = "pmTables/streamExported?f=$filenameOnly"; - $size = round( ($bytesSaved / 1024), 2 ) . " Kb"; - $meta = "
" . $META . "
"; - $filename = $filenameOnly; + $size = round(($bytesSaved / 1024), 2) . " Kb"; $link = $filenameLink; $result->success = true; From 223dd0e0026d0043cd21829e8e175cf17fdcd79c Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Wed, 30 May 2018 10:06:07 -0400 Subject: [PATCH 15/24] HOR-4606: Does check the permission PM_SETUP_EMAIL from GET endpoint --- .../ProcessMaker/Services/Api/EmailServer.php | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/Services/Api/EmailServer.php b/workflow/engine/src/ProcessMaker/Services/Api/EmailServer.php index 1e60496da..3e1842dc8 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/EmailServer.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/EmailServer.php @@ -30,12 +30,19 @@ class EmailServer extends Api } /** + * Get List of Emails Servers + * * @url GET * * @param string $filter - * @param int $start - * @param int $limit + * @param int $start + * @param int $limit * + * @return + * @throws RestException + * + * @access protected + * @class AccessControl {@permission PM_SETUP_EMAIL} */ public function index($filter = null, $start = null, $limit = null) { @@ -67,11 +74,19 @@ class EmailServer extends Api } /** + * Get List of Emails Servers + * * @url GET /paged * * @param string $filter - * @param int $start - * @param int $limit + * @param int $start + * @param int $limit + * + * @return array + * @throws RestException + * + * @access protected + * @class AccessControl {@permission PM_SETUP_EMAIL} */ public function doGetPaged($filter = null, $start = null, $limit = null) { From 61a10171f7d3a86888e3b5506bd51e59b32b1a38 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 1 Jun 2018 12:34:15 -0400 Subject: [PATCH 16/24] HOR-4612 --- .../engine/src/ProcessMaker/BusinessModel/FilesManager.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php index 1da6ec877..a46753f40 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php @@ -478,9 +478,10 @@ class FilesManager } else { $sMainDirectory = 'public'; } - $extention = end(explode(".", $sFile)); - if ($extention == 'docx' || $extention == 'doc' || $extention == 'html' || $extention == 'php' || $extention == 'jsp' || - $extention == 'xlsx' || $extention == 'xls' || $extention == 'js' || $extention == 'css' || $extention == 'txt') { + $explode = explode(".", $sFile); + $extension = end($explode); + if ($extension == 'docx' || $extension == 'doc' || $extension == 'html' || $extension == 'php' || $extension == 'jsp' || + $extension == 'xlsx' || $extension == 'xls' || $extension == 'js' || $extension == 'css' || $extension == 'txt') { $sEditable = true; } else { $sEditable = false; From 9f6bd766334069c819792fc1dd44d0179e70dddd Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 1 Jun 2018 14:59:45 -0400 Subject: [PATCH 17/24] HOR-4611 --- .../src/ProcessMaker/BusinessModel/EmailEvent.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php index 27cc67102..4bfddb041 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php @@ -107,12 +107,15 @@ class EmailEvent $row = $rsCriteria->getRow(); $emailServer = new EmailServer(); if ($row) { - $emailServerData = $emailServer->getEmailServer($row['EMAIL_SERVER_UID'], true); - $row['MESS_LABEL'] = EmailServer::getMessLabel( - $emailServerData['MESS_ENGINE'], - $emailServerData['MESS_ACCOUNT'], - $emailServerData['MESS_FROM_MAIL'] - ); + $row['MESS_LABEL'] = ""; + if (!empty($row['EMAIL_SERVER_UID'])) { + $emailServerData = $emailServer->getEmailServer($row['EMAIL_SERVER_UID'], true); + $row['MESS_LABEL'] = EmailServer::getMessLabel( + $emailServerData['MESS_ENGINE'], + $emailServerData['MESS_ACCOUNT'], + $emailServerData['MESS_FROM_MAIL'] + ); + } $row = array_change_key_case($row, CASE_LOWER); } return $row; From 3c49756d8dfebd942a48f99944c0607d4ae83f64 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 30 May 2018 09:19:46 -0400 Subject: [PATCH 18/24] HOR-4454 --- .../engine/classes/model/AppDelegation.php | 46 ++++++++++++ .../src/ProcessMaker/BusinessModel/Cases.php | 71 ++++++++++--------- .../src/ProcessMaker/Services/Api/Light.php | 4 +- 3 files changed, 84 insertions(+), 37 deletions(-) diff --git a/workflow/engine/classes/model/AppDelegation.php b/workflow/engine/classes/model/AppDelegation.php index 25b3c708b..d47790a7e 100644 --- a/workflow/engine/classes/model/AppDelegation.php +++ b/workflow/engine/classes/model/AppDelegation.php @@ -999,5 +999,51 @@ class AppDelegation extends BaseAppDelegation return $proId; } + /** + * Get the last index by a specific status + * + * @param integer $appNumber + * @param string $status + * + * @return integer + */ + public static function getLastIndexByStatus($appNumber, $status = 'OPEN') + { + $delIndex = 0; + $criteria = new Criteria(); + $criteria->add(AppDelegationPeer::APP_NUMBER, $appNumber); + $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, $status); + $criteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); + $dataset = AppDelegationPeer::doSelectOne($criteria); + if (!is_null($dataset)) { + $delIndex = $dataset->getDelIndex(); + } + return $delIndex; + } + + /** + * Get the last index assigned to the user by a specific status + * + * @param integer $appNumber + * @param integer $usrId + * @param string $status + * + * @return integer + */ + public static function getLastIndexByUserAndStatus($appNumber, $usrId, $status = 'OPEN') + { + $delIndex = 0; + $criteria = new Criteria(); + $criteria->add(AppDelegationPeer::APP_NUMBER, $appNumber); + $criteria->add(AppDelegationPeer::USR_ID, $usrId); + $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, $status); + $criteria->addDescendingOrderByColumn(AppDelegationPeer::DEL_INDEX); + $dataset = AppDelegationPeer::doSelectOne($criteria); + if (!is_null($dataset)) { + $delIndex = $dataset->getDelIndex(); + } + + return $delIndex; + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 6ca874fe6..de12c5e5b 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -865,51 +865,52 @@ class Cases * Put cancel case * * @access public - * @param string $app_uid, Uid for case - * @param string $usr_uid, Uid for user - * @param bool|string $del_index + * @param string $appUid, Uid for case + * @param string $usrUid, Uid for user + * @param bool|string $delIndex * * @return void * @throws Exception */ - public function putCancelCase($app_uid, $usr_uid, $del_index = false) + public function putCancelCase($appUid, $usrUid, $delIndex = false) { - Validator::isString($app_uid, '$app_uid'); - Validator::isString($usr_uid, '$usr_uid'); - - Validator::appUid($app_uid, '$app_uid'); - Validator::usrUid($usr_uid, '$usr_uid'); - - if ($del_index === false) { - $del_index = AppDelegation::getCurrentIndex($app_uid); - } - Validator::isInteger($del_index, '$del_index'); + Validator::isString($appUid, '$app_uid'); + Validator::appUid($appUid, '$app_uid'); + Validator::isString($usrUid, '$usr_uid'); + Validator::usrUid($usrUid, '$usr_uid'); $case = new ClassesCases(); - $fields = $case->loadCase($app_uid); - if ($fields['APP_STATUS'] == 'CANCELLED') { - throw (new Exception(G::LoadTranslation("ID_CASE_ALREADY_CANCELED", array($app_uid)))); + $fields = $case->loadCase($appUid); + $supervisor = new BmProcessSupervisor(); + $isSupervisor = $supervisor->isUserProcessSupervisor($fields['PRO_UID'], $usrUid); + + if ($delIndex === false) { + $u = new ModelUsers(); + $usrId = $u->load($usrUid)['USR_ID']; + + if ($isSupervisor) { + //Get the last index open + $delIndex = AppDelegation::getLastIndexByStatus($fields['APP_NUMBER']); + } else { + //Get the last index open related to the user + $delIndex = AppDelegation::getLastIndexByUserAndStatus($fields['APP_NUMBER'], $usrId); + } + + //We will to validate when the case is TO_DO and the user does not have a index OPEN + //The scenarios with COMPLETED, CANCELLED and DRAFT is considered in the WsBase::cancelCase + if ($fields['APP_STATUS'] === 'TO_DO' && $delIndex === 0) { + throw (new Exception(G::LoadTranslation("ID_CASE_USER_INVALID_CANCEL_CASE", [$usrUid]))); + } } + Validator::isInteger($delIndex, '$del_index'); - $processUser = new ProcessUser(); - $arrayProcess = $processUser->getProUidSupervisor($usr_uid); - - $criteria = new Criteria("workflow"); - - $criteria->addSelectColumn(AppDelegationPeer::APP_UID); - $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); - $criteria->add(AppDelegationPeer::DEL_INDEX, $del_index, Criteria::EQUAL); - $criteria->add( - $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $arrayProcess, Criteria::IN)) - ); - $rsCriteria = AppDelegationPeer::doSelectRS($criteria); - - if (!$rsCriteria->next()) { - throw (new Exception(G::LoadTranslation("ID_CASE_USER_INVALID_CANCEL_CASE", array($usr_uid)))); + /** Cancel case */ + $ws = new WsBase(); + $result = $ws->cancelCase($appUid, $delIndex, $usrUid); + $result = (object)$result; + if ($result->status_code !== 0) { + throw new Exception($result->message); } - - $case->cancelCase($app_uid, $del_index, $usr_uid); } /** diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light.php b/workflow/engine/src/ProcessMaker/Services/Api/Light.php index f958feeae..81074bb13 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Light.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Light.php @@ -1762,13 +1762,13 @@ class Light extends Api * * @url POST /cases/:app_uid/cancel * - * @param string $cas_uid {@min 1}{@max 32} + * @param string $app_uid {@min 1}{@max 32} * * @return array * @throws RestException * * @access protected - * @class AccessControl {@permission PM_CASES} + * @class AccessControl {@permission PM_CANCELCASE} */ public function doPutCancelCase($app_uid) { From 0dc59aa9191f50845887bc09e002e503f4b8eb0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 4 Jun 2018 14:39:57 -0400 Subject: [PATCH 19/24] HOR-4609 --- .../engine/methods/login/authentication.php | 48 +--------------- .../methods/login/authenticationSso.php | 49 +---------------- workflow/engine/methods/login/login.php | 55 ------------------- workflow/engine/methods/login/sysLogin.php | 3 - .../engine/methods/login/sysLoginVerify.php | 30 ---------- .../engine/methods/login/updateTimezone.php | 15 +++++ .../engine/skinEngine/neoclassic/layout.html | 4 +- workflow/engine/skinEngine/skinEngine.php | 1 + .../engine/xmlform/login/TimeZoneAlert.html | 7 --- .../engine/xmlform/login/TimeZoneAlert.xml | 6 -- workflow/public_html/sysGeneric.php | 41 ++++++++++++-- 11 files changed, 57 insertions(+), 202 deletions(-) create mode 100644 workflow/engine/methods/login/updateTimezone.php diff --git a/workflow/engine/methods/login/authentication.php b/workflow/engine/methods/login/authentication.php index 2ca7b693b..c0a488d1e 100644 --- a/workflow/engine/methods/login/authentication.php +++ b/workflow/engine/methods/login/authentication.php @@ -1,27 +1,4 @@ . - * - * 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\Plugins\PluginRegistry; @@ -229,16 +206,6 @@ try { } } - /*----------------------------------********---------------------------------*/ - if (PMLicensedFeatures::getSingleton()->verifyfeature('oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=')) { - //Update User Time Zone - if (isset($_POST['form']['BROWSER_TIME_ZONE'])) { - $user = new Users(); - $user->update(['USR_UID' => $_SESSION['USER_LOGGED'], 'USR_TIME_ZONE' => $_POST['form']['BROWSER_TIME_ZONE']]); - } - } - /*----------------------------------********---------------------------------*/ - //Set User Time Zone $user = UsersPeer::retrieveByPK($_SESSION['USER_LOGGED']); @@ -263,20 +230,7 @@ try { if ($timeZoneOffset === false || $timeZoneOffset != (int)($_POST['form']['BROWSER_TIME_ZONE_OFFSET'])) { $_SESSION['__TIME_ZONE_FAILED__'] = true; - $_SESSION['USR_USERNAME'] = $usr; - $_SESSION['USR_PASSWORD'] = $pwd; - - $_SESSION['BROWSER_TIME_ZONE'] = $dateTime->getTimeZoneIdByTimeZoneOffset((int)($_POST['form']['BROWSER_TIME_ZONE_OFFSET']), false); - $_SESSION['URL'] = (isset($_POST['form']['URL']))? $_POST['form']['URL'] : ((isset($_REQUEST['u']))? $_REQUEST['u'] : ''); - $_SESSION['USER_LANG'] = $lang; - - if (strpos($_SERVER['HTTP_REFERER'], 'home/login') !== false) { - $d = serialize(['u' => $usr, 'p' => $pwd, 'm' => '', 'timeZoneFailed' => 1, 'userTimeZone' => $_SESSION['USR_TIME_ZONE'], 'browserTimeZone' => $_SESSION['BROWSER_TIME_ZONE'],'USER_LANG' => $lang]); - $urlLogin = $urlLogin . '?d=' . base64_encode($d); - } - - G::header('Location: ' . $urlLogin); - exit(0); + $_SESSION['BROWSER_TIME_ZONE'] = $dateTime->getTimeZoneIdByTimeZoneOffset((int)$_POST['form']['BROWSER_TIME_ZONE_OFFSET'], false); } } } diff --git a/workflow/engine/methods/login/authenticationSso.php b/workflow/engine/methods/login/authenticationSso.php index 9ca668a9b..10a7b3c14 100644 --- a/workflow/engine/methods/login/authenticationSso.php +++ b/workflow/engine/methods/login/authenticationSso.php @@ -30,16 +30,6 @@ try { $userUid = (isset($_SESSION['USER_LOGGED']))? $_SESSION['USER_LOGGED'] : ((isset($_SESSION['__USER_LOGGED_SSO__']))? $_SESSION['__USER_LOGGED_SSO__'] : ''); - /*----------------------------------********---------------------------------*/ - if (PMLicensedFeatures::getSingleton()->verifyfeature('oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=')) { - //Update User Time Zone - if (isset($_POST['form']['BROWSER_TIME_ZONE'])) { - $user = new Users(); - $user->update(['USR_UID' => $userUid, 'USR_TIME_ZONE' => $_POST['form']['BROWSER_TIME_ZONE']]); - } - } - /*----------------------------------********---------------------------------*/ - $arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); //Set User Time Zone @@ -85,43 +75,8 @@ try { } if ($timeZoneOffset === false || $timeZoneOffset != $browserTimeZoneOffset) { - $userUtcOffset = $dateTime->getUtcOffsetByTimeZoneOffset($timeZoneOffset); - $browserUtcOffset = $dateTime->getUtcOffsetByTimeZoneOffset($browserTimeZoneOffset); - - $arrayTimeZoneId = $dateTime->getTimeZoneIdByTimeZoneOffset($browserTimeZoneOffset); - - array_unshift($arrayTimeZoneId, 'false'); - array_walk( - $arrayTimeZoneId, - function (&$value, $key, $parameter) - { - $value = ['TZ_UID' => $value, 'TZ_NAME' => '(UTC ' . $parameter . ') ' . $value]; - }, - $browserUtcOffset - ); - - $_SESSION['_DBArray'] = ['TIME_ZONE' => $arrayTimeZoneId]; - - $arrayData = [ - 'USR_USERNAME' => '', - 'USR_PASSWORD' => '', - 'USR_TIME_ZONE' => '(UTC ' . $userUtcOffset . ') ' . $_SESSION['USR_TIME_ZONE'], - 'BROWSER_TIME_ZONE' => $dateTime->getTimeZoneIdByTimeZoneOffset($browserTimeZoneOffset, false), - 'USER_LANG' => SYS_LANG, - 'URL' => $location - ]; - - $G_PUBLISH = new Publisher(); - $G_PUBLISH->AddContent( - 'xmlform', - 'xmlform', - 'login' . PATH_SEP . 'TimeZoneAlert', - '', - $arrayData, SYS_URI . 'login/authenticationSso.php' - ); - - G::RenderPage('publish'); - exit(0); + $_SESSION['__TIME_ZONE_FAILED__'] = true; + $_SESSION['BROWSER_TIME_ZONE'] = $dateTime->getTimeZoneIdByTimeZoneOffset((int)$_POST['form']['BROWSER_TIME_ZONE_OFFSET'], false); } } } diff --git a/workflow/engine/methods/login/login.php b/workflow/engine/methods/login/login.php index 24f3cf217..726e70369 100644 --- a/workflow/engine/methods/login/login.php +++ b/workflow/engine/methods/login/login.php @@ -163,25 +163,6 @@ if (isset ($_SESSION['USER_LOGGED'])) { } //end log -/*----------------------------------********---------------------------------*/ -$timeZoneFailed = false; - -if (isset($_SESSION['__TIME_ZONE_FAILED__']) && $_SESSION['__TIME_ZONE_FAILED__']) { - $timeZoneFailed = true; - $userUsername = $_SESSION['USR_USERNAME']; - $userPassword = $_SESSION['USR_PASSWORD']; - $userTimeZone = $_SESSION['USR_TIME_ZONE']; - $browserTimeZone = $_SESSION['BROWSER_TIME_ZONE']; - $url = $_SESSION['URL']; - - if(isset($_SESSION['USER_LANG'])){ - $lang = $_SESSION['USER_LANG']; - }else{ - $lang = SYS_LANG; - } -} -/*----------------------------------********---------------------------------*/ - //start new session @session_destroy(); session_start(); @@ -223,42 +204,6 @@ if (in_array(G::encryptOld($licenseManager->result), array('38afd7ae34bd5e3e6fc1 die(); } -if ($timeZoneFailed) { - $dateTime = new \ProcessMaker\Util\DateTime(); - - $userTimeZoneOffset = $dateTime->getTimeZoneOffsetByTimeZoneId($userTimeZone); - $browserTimeZoneOffset = $dateTime->getTimeZoneOffsetByTimeZoneId($browserTimeZone); - - $userUtcOffset = $dateTime->getUtcOffsetByTimeZoneOffset($userTimeZoneOffset); - $browserUtcOffset = $dateTime->getUtcOffsetByTimeZoneOffset($browserTimeZoneOffset); - - $arrayTimeZoneId = $dateTime->getTimeZoneIdByTimeZoneOffset($browserTimeZoneOffset); - - array_unshift($arrayTimeZoneId, 'false'); - array_walk($arrayTimeZoneId, function (&$value, $key, $parameter) { $value = ['TZ_UID' => $value, 'TZ_NAME' => '(UTC ' . $parameter . ') ' . $value]; }, $browserUtcOffset); - - $_SESSION['_DBArray'] = ['TIME_ZONE' => $arrayTimeZoneId]; - - $arrayData = [ - 'USR_USERNAME' => $userUsername, - 'USR_PASSWORD' => $userPassword, - 'USR_TIME_ZONE' => '(UTC ' . $userUtcOffset . ') ' . $userTimeZone, - 'BROWSER_TIME_ZONE' => $browserTimeZone, - 'USER_LANG' => $lang, - 'URL' => $url - ]; - - $G_PUBLISH = new Publisher(); - $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login' . PATH_SEP . 'TimeZoneAlert', '', $arrayData, SYS_URI . 'login/authentication.php'); - - G::RenderPage('publish'); - - // Destroy a significant value in session - global $G_FORM; - unset($_SESSION[$G_FORM->id]['USR_PASSWORD']); - - exit(0); -} /*----------------------------------********---------------------------------*/ //translation diff --git a/workflow/engine/methods/login/sysLogin.php b/workflow/engine/methods/login/sysLogin.php index 8fd4cd5c3..a26d082f3 100644 --- a/workflow/engine/methods/login/sysLogin.php +++ b/workflow/engine/methods/login/sysLogin.php @@ -32,9 +32,6 @@ if ($browserSupported==false){ } /*----------------------------------********---------------------------------*/ if (isset ($_POST['form']['USER_ENV'])) { - @session_destroy(); - session_start(); - $_SESSION['sysLogin'] = $_POST['form']; $data = base64_encode(serialize($_POST)); $url = sprintf('/sys%s/%s/%s/login/sysLoginVerify?d=%s', $_POST['form']['USER_ENV'], SYS_LANG, SYS_SKIN, $data); G::header("location: $url"); diff --git a/workflow/engine/methods/login/sysLoginVerify.php b/workflow/engine/methods/login/sysLoginVerify.php index e12cf1fcf..5627854cb 100644 --- a/workflow/engine/methods/login/sysLoginVerify.php +++ b/workflow/engine/methods/login/sysLoginVerify.php @@ -1,29 +1,5 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - * - */ - if (array_key_exists("d", $_GET)) { $str = base64_decode($_GET["d"]); if (preg_match('/^a:[0-9]+:{/', $str) && !preg_match('/(^|;|{|})O:\+?[0-9]+:"/', $str)) { @@ -34,11 +10,5 @@ if (array_key_exists("d", $_GET)) { if (!isset($_POST)) { G::header('location: /sys/' . $lang . '/' . SYS_SKIN . '/' . 'login/login'); } -if (isset($_SESSION['sysLogin'])) { - $_POST['form'] = $_SESSION['sysLogin']; - // Destroy variables already assigned to the global variable $_POST - unset($_SESSION['sysLogin']); -} require_once 'authentication.php'; - diff --git a/workflow/engine/methods/login/updateTimezone.php b/workflow/engine/methods/login/updateTimezone.php new file mode 100644 index 000000000..e83c65bd3 --- /dev/null +++ b/workflow/engine/methods/login/updateTimezone.php @@ -0,0 +1,15 @@ +verifyfeature('oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=')) { + // Update User Time Zone + if (isset($_POST['form']['BROWSER_TIME_ZONE'])) { + $user = new Users(); + $user->update(['USR_UID' => $_SESSION['USER_LOGGED'], 'USR_TIME_ZONE' => $_POST['form']['BROWSER_TIME_ZONE']]); + $_SESSION['USR_TIME_ZONE'] = $_POST['form']['BROWSER_TIME_ZONE']; + unset($_SESSION['__TIME_ZONE_FAILED__'], $_SESSION['BROWSER_TIME_ZONE']); + } + + // Redirect to origin page + G::header('Location: ' . $_SERVER['HTTP_REFERER']); +} diff --git a/workflow/engine/skinEngine/neoclassic/layout.html b/workflow/engine/skinEngine/neoclassic/layout.html index 658930ed8..8dee3a8e9 100644 --- a/workflow/engine/skinEngine/neoclassic/layout.html +++ b/workflow/engine/skinEngine/neoclassic/layout.html @@ -7,8 +7,8 @@ {$header} - {if $user_logged neq '' or $tracker neq ''} - + {if ($user_logged neq '' or $tracker neq '') and $timezone_status neq 'failed'} +
diff --git a/workflow/engine/skinEngine/skinEngine.php b/workflow/engine/skinEngine/skinEngine.php index a299596fe..5fc27857f 100644 --- a/workflow/engine/skinEngine/skinEngine.php +++ b/workflow/engine/skinEngine/skinEngine.php @@ -763,6 +763,7 @@ class SkinEngine $smarty->assign('tracker', (SYS_COLLECTION == 'tracker') ? (($G_PUBLISH->Parts[0]['File'] != 'tracker/login') ? true : '') : ''); } + $smarty->assign('timezone_status', (isset($_SESSION['__TIME_ZONE_FAILED__']) && $_SESSION['__TIME_ZONE_FAILED__']) ? 'failed' : 'ok'); $smarty->assign('switch_interface', $switch_interface); $smarty->assign('switch_interface_label', G::LoadTranslation('ID_SWITCH_INTERFACE')); $smarty->assign('rolename', isset($_SESSION['USR_ROLENAME']) ? $_SESSION['USR_ROLENAME'] . '' : ''); diff --git a/workflow/engine/xmlform/login/TimeZoneAlert.html b/workflow/engine/xmlform/login/TimeZoneAlert.html index f27a6d979..1893d3943 100644 --- a/workflow/engine/xmlform/login/TimeZoneAlert.html +++ b/workflow/engine/xmlform/login/TimeZoneAlert.html @@ -8,13 +8,7 @@