From ff33075228deaa165b9a57de6bd57bc148a21232 Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 13 May 2019 16:44:40 -0400 Subject: [PATCH 01/30] PMC-786 --- phpunit.xml | 5 + .../src/ProcessMaker/Model/DelegationTest.php | 514 ++++++++++++++++ .../src/ProcessMaker/Model/DelegationTest.php | 419 ++++++++++++- .../ProcessMaker/Model/ListUnassignedTest.php | 572 +++++++++--------- .../src/ProcessMaker/BusinessModel/Lists.php | 18 +- .../Model/AppAssignSelfServiceValue.php | 58 ++ .../Model/AppAssignSelfServiceValueGroup.php | 8 + .../src/ProcessMaker/Model/Delegation.php | 116 ++++ .../src/ProcessMaker/Model/GroupUser.php | 48 ++ .../engine/src/ProcessMaker/Model/Groupwf.php | 19 + .../src/ProcessMaker/Model/ListUnassigned.php | 88 +++ .../engine/src/ProcessMaker/Model/Task.php | 12 + .../src/ProcessMaker/Model/TaskUser.php | 60 ++ .../engine/src/ProcessMaker/Model/User.php | 21 + 14 files changed, 1655 insertions(+), 303 deletions(-) create mode 100644 tests/Performance/workflow/engine/src/ProcessMaker/Model/DelegationTest.php diff --git a/phpunit.xml b/phpunit.xml index 91b213c61..dad99dd69 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -17,6 +17,9 @@ ./tests/Unit + + ./tests/Performance/ + @@ -45,6 +48,8 @@ + + diff --git a/tests/Performance/workflow/engine/src/ProcessMaker/Model/DelegationTest.php b/tests/Performance/workflow/engine/src/ProcessMaker/Model/DelegationTest.php new file mode 100644 index 000000000..a0b5e7e65 --- /dev/null +++ b/tests/Performance/workflow/engine/src/ProcessMaker/Model/DelegationTest.php @@ -0,0 +1,514 @@ +markTestSkipped('Test related to the performance are disabled for this server configuration'); + } else { + $this->totalCases = (int)env('TOTAL_CASES', 120); + $this->maximumExecutionTime = (int)env('MAX_EXECUTION_TIME', 60); + } + } + + /** + * This checks the counters is working properly in self-service user assigned + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_user_assigned() + { + //Define the total of cases to create + $total = $this->totalCases; + //Define the maximum time of execution + $maximumTime = $this->maximumExecutionTime; + //Create process + $process = factory(Process::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Create a task self service + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + //Create the register in delegation relate to self-service + factory(Delegation::class, $total)->create([ + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $timeStart = microtime(true); + Delegation::countSelfService($user->USR_UID); + $timeEnd = microtime(true); + $time = $timeEnd - $timeStart; + //Compare if the time of execution is minor than the time defined in the .env + $this->assertLessThan($maximumTime, $time); + error_log('it_should_count_cases_by_user_with_self_service_user_assigned took [' . $total . ']--->' . $time); + } + + /** + * This checks the counters is working properly in self-service-value-based when the variable has a value related with the USR_UID + * When the value assigned in the variable @@ARRAY_OF_USERS = [USR_UID] + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_value_based_usr_uid() + { + //Define the total of cases to create + $total = $this->totalCases; + //Define the maximum time of execution + $maximumTime = $this->maximumExecutionTime; + //Create process + $process = factory(Process::class)->create(); + //Create a case + $application = factory(Application::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Create a task self service value based + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => 2, + 'TAS_ID' => $task->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 + ]); + //Create the register in self-service + factory(Delegation::class, $total)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $timeStart = microtime(true); + Delegation::countSelfService($user->USR_UID); + $timeEnd = microtime(true); + $time = $timeEnd - $timeStart; + //Compare if the time of execution is minor than the time defined in the .env + $this->assertLessThan($maximumTime, $time); + error_log('it_should_count_cases_by_user_with_self_service_value_based_usr_uid took [' . $total . ']--->' . $time); + } + + /** + * This checks the counters is working properly in self-service and self-service value based + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_mixed_with_self_service_value_based() + { + //Define the total of cases to create + $total = $this->totalCases; + //Define the maximum time of execution + $maximumTime = $this->maximumExecutionTime; + //Create process + $process = factory(Process::class)->create(); + //Create a case + $application = factory(Application::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Create a task self service + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + //Create the register in self service + factory(Delegation::class, $total / 2)->create([ + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create a task self service value based + $task1 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => 2, + 'TAS_ID' => $task1->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 + ]); + //Create the register in self service value based + factory(Delegation::class, $total / 2)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $timeStart = microtime(true); + Delegation::countSelfService($user->USR_UID); + $timeEnd = microtime(true); + $time = $timeEnd - $timeStart; + //Compare if the time of execution is minor than the time defined in the .env + $this->assertLessThan($maximumTime, $time); + error_log('it_should_count_cases_by_user_with_self_service_mixed_with_self_service_value_based took [' . $total . ']--->' . $time); + } + + /** + * This checks the counters is working properly in self-service group assigned + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_group_assigned() + { + //Define the total of cases to create + $total = $this->totalCases; + //Define the maximum time of execution + $maximumTime = $this->maximumExecutionTime; + //Create process + $process = factory(Process::class)->create(); + //Create group + $group = factory(Groupwf::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Assign a user in the group + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID + ]); + //Create a task self service + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 2, //Related to the group + 'TU_TYPE' => 1 + ]); + //Create the register in self-service + factory(Delegation::class, $total)->create([ + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $timeStart = microtime(true); + Delegation::countSelfService($user->USR_UID); + $timeEnd = microtime(true); + $time = $timeEnd - $timeStart; + //Compare if the time of execution is minor than the time defined in the .env + $this->assertLessThan($maximumTime, $time); + error_log('it_should_count_cases_by_user_with_self_service_group_assigned took [' . $total . ']--->' . $time); + } + + /** + * This checks the counters is working properly in self-service-value-based when the variable has a value related with the GRP_UID + * When the value assigned in the variable @@ARRAY_OF_USERS = [GRP_UID] + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_value_based_grp_uid() + { + //Define the total of cases to create + $total = $this->totalCases; + //Define the maximum time of execution + $maximumTime = $this->maximumExecutionTime; + //Create process + $process = factory(Process::class)->create(); + //Create a task self service value based + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create a case + $application = factory(Application::class)->create(); + //Create group + $group = factory(Groupwf::class)->create(); + //Create user + $user = factory(User::class)->create([ + 'USR_USERNAME' => 'gary', + 'USR_LASTNAME' => 'Gary', + 'USR_FIRSTNAME' => 'Bailey', + ]); + //Assign a user in the group + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID, + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'APP_UID' => $application->APP_UID, + 'DEL_INDEX' => 2, + 'TAS_ID' => $task->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $group->GRP_UID, + 'ASSIGNEE_ID' => $group->GRP_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 2 //Related to the user=1 related to the group=2 + ]); + //Create the register in self-service + factory(Delegation::class, $total)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => 2, + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $timeStart = microtime(true); + Delegation::countSelfService($user->USR_UID); + $timeEnd = microtime(true); + $time = $timeEnd - $timeStart; + //Compare if the time of execution is minor than the time defined in the .env + $this->assertLessThan($maximumTime, $time); + error_log('it_should_count_cases_by_user_with_self_service_value_based_grp_uid took [' . $total . ']--->' . $time); + } + + /** + * This checks the counters is working properly in self-service user and group assigned in parallel task + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_user_and_group_assigned_parallel_task() + { + //Define the total of cases to create + $total = $this->totalCases; + //Define the maximum time of execution + $maximumTime = $this->maximumExecutionTime; + //Create process + $process = factory(Process::class)->create(); + //Create group + $group = factory(Groupwf::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Assign a user in the group + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID + ]); + //Create a task self service + $task1 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task1 + factory(TaskUser::class)->create([ + 'TAS_UID' => $task1->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + //Create a task self service + $task2 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task2 + factory(TaskUser::class)->create([ + 'TAS_UID' => $task2->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + //Create a task self service + $task3 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task3->TAS_UID, + 'USR_UID' => $group->GRP_UID, + 'TU_RELATION' => 2, //Related to the group + 'TU_TYPE' => 1 + ]); + //Create a task self service + $task4 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task4->TAS_UID, + 'USR_UID' => $group->GRP_UID, + 'TU_RELATION' => 2, //Related to the group + 'TU_TYPE' => 1 + ]); + //Create the register in self-service related to the task1 + factory(Delegation::class, $total / 4)->create([ + 'TAS_ID' => $task1->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create the register in self-service related to the task2 + factory(Delegation::class, $total / 4)->create([ + 'TAS_ID' => $task2->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create the register in self-service related to the task3 + factory(Delegation::class, $total / 4)->create([ + 'TAS_ID' => $task3->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create the register in self-service related to the task4 + factory(Delegation::class, $total / 4)->create([ + 'TAS_ID' => $task4->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $timeStart = microtime(true); + Delegation::countSelfService($user->USR_UID); + $timeEnd = microtime(true); + $time = $timeEnd - $timeStart; + //Compare if the time of execution is minor than the time defined in the .env + $this->assertLessThan($maximumTime, $time); + error_log('it_should_count_cases_by_user_with_self_service_user_and_group_assigned_parallel_task took [' . $total . ']--->' . $time); + } + + /** + * This checks the counters is working properly in self-service-value-based with GRP_UID and USR_UID in parallel task + * When the value assigned in the variable @@ARRAY_OF_USERS = [GRP_UID, USR_UID] + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_value_based_usr_uid_and_grp_uid() + { + //Define the total of cases to create + $total = $this->totalCases; + //Define the maximum time of execution + $maximumTime = $this->maximumExecutionTime; + //Create process + $process = factory(Process::class)->create(); + //Create a case + $application = factory(Application::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Create a task1 self service value based + $task1 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task1->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 + ]); + //Create the register in self-service + factory(Delegation::class, $total / 2)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task1->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create a task2 self service value based + $task2 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task2->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 + ]); + //Create the register in self-service + factory(Delegation::class, $total / 2)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task2->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $timeStart = microtime(true); + Delegation::countSelfService($user->USR_UID); + $timeEnd = microtime(true); + $time = $timeEnd - $timeStart; + //Compare if the time of execution is minor than the time defined in the .env + $this->assertLessThan($maximumTime, $time); + error_log('it_should_count_cases_by_user_with_self_service_value_based_usr_uid_and_grp_uid took [' . $total . ']--->' . $time); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php index 686e857e9..3f56c0379 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php @@ -2,13 +2,17 @@ namespace Tests\unit\workflow\src\ProcessMaker\Model; use G; -use Faker; use Illuminate\Foundation\Testing\DatabaseTransactions; +use ProcessMaker\Model\AppAssignSelfServiceValue; +use ProcessMaker\Model\AppAssignSelfServiceValueGroup; use ProcessMaker\Model\Application; use ProcessMaker\Model\Delegation; +use ProcessMaker\Model\GroupUser; +use ProcessMaker\Model\Groupwf; use ProcessMaker\Model\Process; use ProcessMaker\Model\ProcessCategory; use ProcessMaker\Model\Task; +use ProcessMaker\Model\TaskUser; use ProcessMaker\Model\User; use Tests\TestCase; @@ -1136,4 +1140,417 @@ class DelegationTest extends TestCase // Check the information returned $this->assertEmpty($results); } + + /** + * This checks the counters is working properly in self-service user assigned + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_user_assigned() + { + //Create process + $process = factory(Process::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Create a task self service + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + //Create the register in delegation relate to self-service + factory(Delegation::class, 25)->create([ + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $result = Delegation::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); + } + + /** + * This checks the counters is working properly in self-service-value-based when the variable has a value related with the USR_UID + * When the value assigned in the variable @@ARRAY_OF_USERS = [USR_UID] + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_value_based_usr_uid() + { + //Create process + $process = factory(Process::class)->create(); + //Create a case + $application = factory(Application::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Create a task self service value based + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => 2, + 'TAS_ID' => $task->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 + ]); + //Create the register in self-service + factory(Delegation::class, 25)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $result = Delegation::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); + } + + /** + * This checks the counters is working properly in self-service and self-service value based + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_mixed_with_self_service_value_based() + { + //Create process + $process = factory(Process::class)->create(); + //Create a case + $application = factory(Application::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Create a task self service + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + //Create the register in self service + factory(Delegation::class, 15)->create([ + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create a task self service value based + $task1 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => 2, + 'TAS_ID' => $task1->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 + ]); + //Create the register in self service value based + factory(Delegation::class, 15)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $result = Delegation::countSelfService($user->USR_UID); + $this->assertEquals(30, $result); + } + + /** + * This checks the counters is working properly in self-service group assigned + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_group_assigned() + { + //Create process + $process = factory(Process::class)->create(); + //Create group + $group = factory(Groupwf::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Assign a user in the group + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID + ]); + //Create a task self service + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 2, //Related to the group + 'TU_TYPE' => 1 + ]); + //Create the register in self-service + factory(Delegation::class, 25)->create([ + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $result = Delegation::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); + } + + /** + * This checks the counters is working properly in self-service-value-based when the variable has a value related with the GRP_UID + * When the value assigned in the variable @@ARRAY_OF_USERS = [GRP_UID] + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_value_based_grp_uid() + { + //Create process + $process = factory(Process::class)->create(); + //Create a task self service value based + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create a case + $application = factory(Application::class)->create(); + //Create group + $group = factory(Groupwf::class)->create(); + //Create user + $user = factory(User::class)->create([ + 'USR_USERNAME' => 'gary', + 'USR_LASTNAME' => 'Gary', + 'USR_FIRSTNAME' => 'Bailey', + ]); + //Assign a user in the group + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID, + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'APP_UID' => $application->APP_UID, + 'DEL_INDEX' => 2, + 'TAS_ID' => $task->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $group->GRP_UID, + 'ASSIGNEE_ID' => $group->GRP_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 2 //Related to the user=1 related to the group=2 + ]); + //Create the register in self-service + factory(Delegation::class, 25)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => 2, + 'TAS_ID' => $task->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $result = Delegation::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); + } + + /** + * This checks the counters is working properly in self-service user and group assigned in parallel task + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_user_and_group_assigned_parallel_task() + { + //Create process + $process = factory(Process::class)->create(); + //Create group + $group = factory(Groupwf::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Assign a user in the group + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID + ]); + //Create a task self service + $task1 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task1 + factory(TaskUser::class)->create([ + 'TAS_UID' => $task1->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + //Create a task self service + $task2 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task2 + factory(TaskUser::class)->create([ + 'TAS_UID' => $task2->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + //Create a task self service + $task3 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task3->TAS_UID, + 'USR_UID' => $group->GRP_UID, + 'TU_RELATION' => 2, //Related to the group + 'TU_TYPE' => 1 + ]); + //Create a task self service + $task4 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + //Assign a user in the task + factory(TaskUser::class)->create([ + 'TAS_UID' => $task4->TAS_UID, + 'USR_UID' => $group->GRP_UID, + 'TU_RELATION' => 2, //Related to the group + 'TU_TYPE' => 1 + ]); + //Create the register in self-service related to the task1 + factory(Delegation::class, 10)->create([ + 'TAS_ID' => $task1->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create the register in self-service related to the task2 + factory(Delegation::class, 10)->create([ + 'TAS_ID' => $task2->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create the register in self-service related to the task3 + factory(Delegation::class, 10)->create([ + 'TAS_ID' => $task3->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create the register in self-service related to the task4 + factory(Delegation::class, 10)->create([ + 'TAS_ID' => $task4->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $result = Delegation::countSelfService($user->USR_UID); + $this->assertEquals(40, $result); + } + + /** + * This checks the counters is working properly in self-service-value-based with GRP_UID and USR_UID in parallel task + * When the value assigned in the variable @@ARRAY_OF_USERS = [GRP_UID, USR_UID] + * @covers Delegation::countSelfService + * @test + */ + public function it_should_count_cases_by_user_with_self_service_value_based_usr_uid_and_grp_uid() + { + //Create process + $process = factory(Process::class)->create(); + //Create a case + $application = factory(Application::class)->create(); + //Create user + $user = factory(User::class)->create(); + //Create a task1 self service value based + $task1 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task1->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 + ]); + //Create the register in self-service + factory(Delegation::class, 10)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task1->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Create a task2 self service value based + $task2 = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', + 'PRO_UID' => $process->PRO_UID + ]); + //Create the relation for the value assigned in the TAS_GROUP_VARIABLE + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task2->TAS_ID + ]); + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId + 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 + ]); + //Create the register in self-service + factory(Delegation::class, 15)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task2->TAS_ID, + 'DEL_THREAD_STATUS' => 'OPEN', + 'USR_ID' => 0, + ]); + //Review the count self-service + $result = Delegation::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); + } } \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/ListUnassignedTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/ListUnassignedTest.php index 6574caef7..8ceda84d6 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Model/ListUnassignedTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/ListUnassignedTest.php @@ -32,32 +32,29 @@ class ListUnassignedTest extends TestCase public function it_should_count_cases_by_user_with_self_service_user_assigned() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 15)->create([ - 'TAS_ID' => $task[0]->TAS_ID + factory(ListUnassigned::class, 25)->create([ + 'TAS_ID' => $task->TAS_ID ]); - $timeStart = microtime(true); - $result = ListUnassigned::doCount($user[0]->USR_UID); - $timeEnd = microtime(true); - $this->assertEquals(15, $result); - $time = $timeEnd - $timeStart; - error_log('it_should_count_cases_by_user_with_self_service_user_assigned took [15]--->' . $time); + //Review the count self-service + $result = ListUnassigned::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); } /** @@ -69,41 +66,38 @@ class ListUnassignedTest extends TestCase public function it_should_count_cases_by_user_with_self_service_value_based_usr_uid() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create a case - $application = factory(Application::class, 1)->create(); + $application = factory(Application::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create a task self service value based - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Create the relation for the value assigned in the TAS_GROUP_VARIABLE - $appSelfValue = factory(AppAssignSelfServiceValue::class, 1)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, 'DEL_INDEX' => 2, - 'TAS_ID' => $task[0]->TAS_ID + 'TAS_ID' => $task->TAS_ID ]); - factory(AppAssignSelfServiceValueGroup::class, 1)->create([ - 'ID' => $appSelfValue[0]->ID, - 'GRP_UID' => $user[0]->USR_UID, - 'ASSIGNEE_ID' => $user[0]->USR_ID, //The usrId or grpId + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 10)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'DEL_INDEX' => $appSelfValue[0]->DEL_INDEX, - 'TAS_ID' => $task[0]->TAS_ID, + factory(ListUnassigned::class, 25)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task->TAS_ID, ]); - $timeStart = microtime(true); - $result = ListUnassigned::doCount($user[0]->USR_UID); - $this->assertEquals(10, $result); - $timeEnd = microtime(true); - $time = $timeEnd - $timeStart; - error_log('it_should_count_cases_by_user_with_self_service_value_based_usr_uid took [10]--->' . $time); + //Review the count self-service + $result = ListUnassigned::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); } /** @@ -114,59 +108,55 @@ class ListUnassignedTest extends TestCase public function it_should_count_cases_by_user_with_self_service_mixed_with_self_service_value_based() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create a case - $application = factory(Application::class, 1)->create(); + $application = factory(Application::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create the register in self service factory(ListUnassigned::class, 15)->create([ - 'TAS_ID' => $task[0]->TAS_ID + 'TAS_ID' => $task->TAS_ID ]); //Create a task self service value based - $task1 = factory(Task::class, 1)->create([ + $task1 = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Create the relation for the value assigned in the TAS_GROUP_VARIABLE - $appSelfValue = factory(AppAssignSelfServiceValue::class, 1)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, 'DEL_INDEX' => 2, - 'TAS_ID' => $task1[0]->TAS_ID + 'TAS_ID' => $task1->TAS_ID ]); - factory(AppAssignSelfServiceValueGroup::class, 1)->create([ - 'ID' => $appSelfValue[0]->ID, - 'GRP_UID' => $user[0]->USR_UID, - 'ASSIGNEE_ID' => $user[0]->USR_ID, //The usrId or grpId + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 ]); //Create the register in self service value based - factory(ListUnassigned::class, 10)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'DEL_INDEX' => $appSelfValue[0]->DEL_INDEX, - 'TAS_ID' => $task[0]->TAS_ID, + factory(ListUnassigned::class, 15)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task->TAS_ID, ]); - - $timeStart = microtime(true); - $result = ListUnassigned::doCount($user[0]->USR_UID); - $timeEnd = microtime(true); - $this->assertEquals(25, $result); - $time = $timeEnd - $timeStart; - error_log('it_should_count_cases_by_user_with_self_service_mixed_with_self_service_value_based took [25]--->' . $time); + //Review the count self-service + $result = ListUnassigned::countSelfService($user->USR_UID); + $this->assertEquals(30, $result); } /** @@ -177,40 +167,37 @@ class ListUnassignedTest extends TestCase public function it_should_count_cases_by_user_with_self_service_group_assigned() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create group - $group = factory(Groupwf::class, 1)->create(); + $group = factory(Groupwf::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Assign a user in the group - factory(GroupUser::class, 1)->create([ - 'GRP_UID' => $group[0]->GRP_UID, - 'GRP_ID' => $group[0]->GRP_ID, - 'USR_UID' => $user[0]->USR_UID + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID ]); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 2, //Related to the group 'TU_TYPE' => 1 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 15)->create([ - 'TAS_ID' => $task[0]->TAS_ID + factory(ListUnassigned::class, 25)->create([ + 'TAS_ID' => $task->TAS_ID ]); - $timeStart = microtime(true); - $result = ListUnassigned::doCount($user[0]->USR_UID); - $timeEnd = microtime(true); - $this->assertEquals(15, $result); - $time = $timeEnd - $timeStart; - error_log('it_should_count_cases_by_user_with_self_service_group_assigned took [15]--->' . $time); + //Review the count self-service + $result = ListUnassigned::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); } /** @@ -222,54 +209,51 @@ class ListUnassignedTest extends TestCase public function it_should_count_cases_by_user_with_self_service_value_based_grp_uid() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create a task self service value based - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Create a case - $application = factory(Application::class, 1)->create(); + $application = factory(Application::class)->create(); //Create group - $group = factory(Groupwf::class, 1)->create(); + $group = factory(Groupwf::class)->create(); //Create user - $user = factory(User::class, 1)->create([ + $user = factory(User::class)->create([ 'USR_USERNAME' => 'gary', 'USR_LASTNAME' => 'Gary', 'USR_FIRSTNAME' => 'Bailey', ]); //Assign a user in the group - factory(GroupUser::class, 1)->create([ - 'GRP_UID' => $group[0]->GRP_UID, - 'GRP_ID' => $group[0]->GRP_ID, - 'USR_UID' => $user[0]->USR_UID, + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID, ]); //Create the relation for the value assigned in the TAS_GROUP_VARIABLE - $appSelfValue = factory(AppAssignSelfServiceValue::class, 1)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'APP_UID' => $application[0]->APP_UID, + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'APP_UID' => $application->APP_UID, 'DEL_INDEX' => 2, - 'TAS_ID' => $task[0]->TAS_ID + 'TAS_ID' => $task->TAS_ID ]); - factory(AppAssignSelfServiceValueGroup::class, 1)->create([ - 'ID' => $appSelfValue[0]->ID, - 'GRP_UID' => $group[0]->GRP_UID, - 'ASSIGNEE_ID' => $group[0]->GRP_ID, //The usrId or grpId + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $group->GRP_UID, + 'ASSIGNEE_ID' => $group->GRP_ID, //The usrId or grpId 'ASSIGNEE_TYPE' => 2 //Related to the user=1 related to the group=2 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 10)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, + factory(ListUnassigned::class, 25)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, 'DEL_INDEX' => 2, - 'TAS_ID' => $task[0]->TAS_ID, + 'TAS_ID' => $task->TAS_ID, ]); - $timeStart = microtime(true); - $result = ListUnassigned::doCount($user[0]->USR_UID); - $this->assertEquals(10, $result); - $timeEnd = microtime(true); - $time = $timeEnd - $timeStart; - error_log('it_should_count_cases_by_user_with_self_service_value_based_grp_uid took [10]--->' . $time); + //Review the count self-service + $result = ListUnassigned::countSelfService($user->USR_UID); + $this->assertEquals(25, $result); } /** @@ -280,91 +264,88 @@ class ListUnassignedTest extends TestCase public function it_should_count_cases_by_user_with_self_service_user_and_group_assigned_parallel_task() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create group - $group = factory(Groupwf::class, 1)->create(); + $group = factory(Groupwf::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Assign a user in the group - factory(GroupUser::class, 1)->create([ - 'GRP_UID' => $group[0]->GRP_UID, - 'GRP_ID' => $group[0]->GRP_ID, - 'USR_UID' => $user[0]->USR_UID + factory(GroupUser::class)->create([ + 'GRP_UID' => $group->GRP_UID, + 'GRP_ID' => $group->GRP_ID, + 'USR_UID' => $user->USR_UID ]); //Create a task self service - $task1 = factory(Task::class, 1)->create([ + $task1 = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task1 - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task1[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task1->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create a task self service - $task2 = factory(Task::class, 1)->create([ + $task2 = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task2 - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task2[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task2->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create a task self service - $task3 = factory(Task::class, 1)->create([ + $task3 = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task3[0]->TAS_UID, - 'USR_UID' => $group[0]->GRP_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task3->TAS_UID, + 'USR_UID' => $group->GRP_UID, 'TU_RELATION' => 2, //Related to the group 'TU_TYPE' => 1 ]); //Create a task self service - $task4 = factory(Task::class, 1)->create([ + $task4 = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task4[0]->TAS_UID, - 'USR_UID' => $group[0]->GRP_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task4->TAS_UID, + 'USR_UID' => $group->GRP_UID, 'TU_RELATION' => 2, //Related to the group 'TU_TYPE' => 1 ]); //Create the register in list unassigned related to the task1 - factory(ListUnassigned::class, 15)->create([ - 'TAS_ID' => $task1[0]->TAS_ID + factory(ListUnassigned::class, 10)->create([ + 'TAS_ID' => $task1->TAS_ID ]); //Create the register in list unassigned related to the task2 - factory(ListUnassigned::class, 15)->create([ - 'TAS_ID' => $task2[0]->TAS_ID + factory(ListUnassigned::class, 10)->create([ + 'TAS_ID' => $task2->TAS_ID ]); //Create the register in list unassigned related to the task3 - factory(ListUnassigned::class, 15)->create([ - 'TAS_ID' => $task3[0]->TAS_ID + factory(ListUnassigned::class, 10)->create([ + 'TAS_ID' => $task3->TAS_ID ]); //Create the register in list unassigned related to the task4 - factory(ListUnassigned::class, 15)->create([ - 'TAS_ID' => $task4[0]->TAS_ID + factory(ListUnassigned::class, 10)->create([ + 'TAS_ID' => $task4->TAS_ID ]); - $timeStart = microtime(true); - $result = ListUnassigned::doCount($user[0]->USR_UID); - $timeEnd = microtime(true); - $this->assertEquals(60, $result); - $time = $timeEnd - $timeStart; - error_log('it_should_count_cases_by_user_with_self_service_user_and_group_assigned_parallel_task took [60]--->' . $time); + //Review the count self-service + $result = ListUnassigned::countSelfService($user->USR_UID); + $this->assertEquals(40, $result); } /** @@ -376,63 +357,60 @@ class ListUnassignedTest extends TestCase public function it_should_count_cases_by_user_with_self_service_value_based_usr_uid_and_grp_uid() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create a case - $application = factory(Application::class, 1)->create(); + $application = factory(Application::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create a task1 self service value based - $task1 = factory(Task::class, 1)->create([ + $task1 = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Create the relation for the value assigned in the TAS_GROUP_VARIABLE - $appSelfValue = factory(AppAssignSelfServiceValue::class, 1)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'TAS_ID' => $task1[0]->TAS_ID + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task1->TAS_ID ]); - factory(AppAssignSelfServiceValueGroup::class, 1)->create([ - 'ID' => $appSelfValue[0]->ID, - 'GRP_UID' => $user[0]->USR_UID, - 'ASSIGNEE_ID' => $user[0]->USR_ID, //The usrId or grpId + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 10)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'DEL_INDEX' => $appSelfValue[0]->DEL_INDEX, - 'TAS_ID' => $task1[0]->TAS_ID, + factory(ListUnassigned::class, 15)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task1->TAS_ID, ]); //Create a task2 self service value based - $task2 = factory(Task::class, 1)->create([ + $task2 = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '@@ARRAY_OF_USERS', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Create the relation for the value assigned in the TAS_GROUP_VARIABLE - $appSelfValue = factory(AppAssignSelfServiceValue::class, 1)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'TAS_ID' => $task2[0]->TAS_ID + $appSelfValue = factory(AppAssignSelfServiceValue::class)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'TAS_ID' => $task2->TAS_ID ]); - factory(AppAssignSelfServiceValueGroup::class, 1)->create([ - 'ID' => $appSelfValue[0]->ID, - 'GRP_UID' => $user[0]->USR_UID, - 'ASSIGNEE_ID' => $user[0]->USR_ID, //The usrId or grpId + factory(AppAssignSelfServiceValueGroup::class)->create([ + 'ID' => $appSelfValue->ID, + 'GRP_UID' => $user->USR_UID, + 'ASSIGNEE_ID' => $user->USR_ID, //The usrId or grpId 'ASSIGNEE_TYPE' => 1 //Related to the user=1 related to the group=2 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 10)->create([ - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'DEL_INDEX' => $appSelfValue[0]->DEL_INDEX, - 'TAS_ID' => $task2[0]->TAS_ID, + factory(ListUnassigned::class, 15)->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'DEL_INDEX' => $appSelfValue->DEL_INDEX, + 'TAS_ID' => $task2->TAS_ID, ]); - $timeStart = microtime(true); - $result = ListUnassigned::doCount($user[0]->USR_UID); - $this->assertEquals(20, $result); - $timeEnd = microtime(true); - $time = $timeEnd - $timeStart; - error_log('it_should_count_cases_by_user_with_self_service_value_based_usr_uid_and_grp_uid took [20]--->' . $time); + //Review the count self-service + $result = ListUnassigned::countSelfService($user->USR_UID); + $this->assertEquals(30, $result); } /** @@ -443,38 +421,38 @@ class ListUnassignedTest extends TestCase public function it_should_return_pages_of_data() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create the register in list unassigned factory(ListUnassigned::class, 51)->create([ - 'TAS_ID' => $task[0]->TAS_ID + 'TAS_ID' => $task->TAS_ID ]); //Define the filters $filters = ['start' => 0, 'limit' => 25]; //Get data first page - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(25, $result); //Get data second page $filters = ['start' => 25, 'limit' => 25]; - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(25, $result); //Get data third page $filters = ['start' => 50, 'limit' => 25]; - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(1, $result); } @@ -486,44 +464,44 @@ class ListUnassignedTest extends TestCase public function it_should_sort_by_case_number() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create a case - $application = factory(Application::class, 1)->create([ + $application = factory(Application::class)->create([ 'APP_NUMBER' => 3000 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 1)->create([ - 'TAS_ID' => $task[0]->TAS_ID, - 'APP_NUMBER' => $application[0]->APP_NUMBER + factory(ListUnassigned::class)->create([ + 'TAS_ID' => $task->TAS_ID, + 'APP_NUMBER' => $application->APP_NUMBER ]); //Create a case - $application = factory(Application::class, 1)->create([ + $application = factory(Application::class)->create([ 'APP_NUMBER' => 2000 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 1)->create([ - 'TAS_ID' => $task[0]->TAS_ID, - 'APP_NUMBER' => $application[0]->APP_NUMBER + factory(ListUnassigned::class)->create([ + 'TAS_ID' => $task->TAS_ID, + 'APP_NUMBER' => $application->APP_NUMBER ]); //Define the filters $filters = ['sort' => 'APP_NUMBER', 'dir' => 'ASC']; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the minor case number first $this->assertEquals(2000, $result[0]['APP_NUMBER']); @@ -532,7 +510,7 @@ class ListUnassignedTest extends TestCase //Define the filters $filters = ['sort' => 'APP_NUMBER', 'dir' => 'DESC']; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the major case number first $this->assertEquals(3000, $result[0]['APP_NUMBER']); @@ -548,46 +526,46 @@ class ListUnassignedTest extends TestCase public function it_should_sort_by_case_title() { //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create a case - $application = factory(Application::class, 1)->create([ + $application = factory(Application::class)->create([ 'APP_NUMBER' => 3001 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 1)->create([ - 'TAS_ID' => $task[0]->TAS_ID, - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'APP_TITLE' => 'Request nro ' . $application[0]->APP_NUMBER, + factory(ListUnassigned::class)->create([ + 'TAS_ID' => $task->TAS_ID, + 'APP_NUMBER' => $application->APP_NUMBER, + 'APP_TITLE' => 'Request nro ' . $application->APP_NUMBER, ]); //Create a case - $application = factory(Application::class, 1)->create([ + $application = factory(Application::class)->create([ 'APP_NUMBER' => 2001 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 1)->create([ - 'TAS_ID' => $task[0]->TAS_ID, - 'APP_NUMBER' => $application[0]->APP_NUMBER, - 'APP_TITLE' => 'Request nro ' . $application[0]->APP_NUMBER, + factory(ListUnassigned::class)->create([ + 'TAS_ID' => $task->TAS_ID, + 'APP_NUMBER' => $application->APP_NUMBER, + 'APP_TITLE' => 'Request nro ' . $application->APP_NUMBER, ]); //Define the filters $filters = ['sort' => 'APP_TITLE', 'dir' => 'ASC']; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the minor case title first $this->assertEquals('Request nro 2001', $result[0]['APP_TITLE']); @@ -596,7 +574,7 @@ class ListUnassignedTest extends TestCase //Define the filters $filters = ['sort' => 'APP_TITLE', 'dir' => 'DESC']; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the major case title first $this->assertEquals('Request nro 3001', $result[0]['APP_TITLE']); @@ -612,37 +590,37 @@ class ListUnassignedTest extends TestCase public function it_should_sort_by_process() { //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 1)->create([ - 'TAS_ID' => $task[0]->TAS_ID, + factory(ListUnassigned::class)->create([ + 'TAS_ID' => $task->TAS_ID, 'APP_PRO_TITLE' => 'Egypt Supplier Payment Proposal', ]); //Create the register in list unassigned - factory(ListUnassigned::class, 1)->create([ - 'TAS_ID' => $task[0]->TAS_ID, + factory(ListUnassigned::class)->create([ + 'TAS_ID' => $task->TAS_ID, 'APP_PRO_TITLE' => 'Russia Supplier Payment Proposal', ]); //Define the filters $filters = ['sort' => 'APP_PRO_TITLE', 'dir' => 'ASC']; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the minor process name first $this->assertEquals('Egypt Supplier Payment Proposal', $result[0]['APP_PRO_TITLE']); @@ -651,7 +629,7 @@ class ListUnassignedTest extends TestCase //Define the filters $filters = ['sort' => 'APP_PRO_TITLE', 'dir' => 'DESC']; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the major process name first $this->assertEquals('Russia Supplier Payment Proposal', $result[0]['APP_PRO_TITLE']); @@ -667,36 +645,36 @@ class ListUnassignedTest extends TestCase public function it_should_sort_by_task() { //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create the register in list unassigned - factory(ListUnassigned::class, 1)->create([ - 'TAS_ID' => $task[0]->TAS_ID, + factory(ListUnassigned::class)->create([ + 'TAS_ID' => $task->TAS_ID, 'APP_TAS_TITLE' => 'Initiate Request', ]); //Create the register in list unassigned - factory(ListUnassigned::class, 1)->create([ - 'TAS_ID' => $task[0]->TAS_ID, + factory(ListUnassigned::class)->create([ + 'TAS_ID' => $task->TAS_ID, 'APP_TAS_TITLE' => 'Waiting for AP Manager Validation', ]); //Define the filters $filters = ['sort' => 'APP_TAS_TITLE', 'dir' => 'ASC']; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the minor task name first $this->assertEquals('Initiate Request', $result[0]['APP_TAS_TITLE']); @@ -705,7 +683,7 @@ class ListUnassignedTest extends TestCase //Define the filters $filters = ['sort' => 'APP_TAS_TITLE', 'dir' => 'DESC']; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the major task name first $this->assertEquals('Waiting for AP Manager Validation', $result[0]['APP_TAS_TITLE']); @@ -721,54 +699,54 @@ class ListUnassignedTest extends TestCase public function it_should_return_data_filtered_by_process_category() { //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create a category - $category = factory(ProcessCategory::class, 1)->create(); + $category = factory(ProcessCategory::class)->create(); //Create process - $process = factory(Process::class, 1)->create([ - 'PRO_CATEGORY' => $category[0]->CATEGORY_UID + $process = factory(Process::class)->create([ + 'PRO_CATEGORY' => $category->CATEGORY_UID ]); //Create a category - $category1 = factory(ProcessCategory::class, 1)->create(); + $category1 = factory(ProcessCategory::class)->create(); //Create process - $process1 = factory(Process::class, 1)->create([ - 'PRO_CATEGORY' => $category1[0]->CATEGORY_UID + $process1 = factory(Process::class)->create([ + 'PRO_CATEGORY' => $category1->CATEGORY_UID ]); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create the register in list unassigned factory(ListUnassigned::class, 2)->create([ - 'TAS_ID' => $task[0]->TAS_ID, - 'PRO_UID' => $process[0]->PRO_UID, + 'TAS_ID' => $task->TAS_ID, + 'PRO_UID' => $process->PRO_UID, ]); //Create the register in list unassigned factory(ListUnassigned::class, 5)->create([ - 'TAS_ID' => $task[0]->TAS_ID, - 'PRO_UID' => $process1[0]->PRO_UID, + 'TAS_ID' => $task->TAS_ID, + 'PRO_UID' => $process1->PRO_UID, ]); //Get all data - $result = ListUnassigned::loadList($user[0]->USR_UID); + $result = ListUnassigned::loadList($user->USR_UID); $this->assertCount(7, $result); //Define the filters - $filters = ['category' => $category[0]->CATEGORY_UID]; + $filters = ['category' => $category->CATEGORY_UID]; //Get data - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Get the minor case number first - $this->assertEquals($category[0]->CATEGORY_UID, $result[0]['PRO_CATEGORY']); + $this->assertEquals($category->CATEGORY_UID, $result[0]['PRO_CATEGORY']); //Get the major case number second - $this->assertEquals($category[0]->CATEGORY_UID, $result[1]['PRO_CATEGORY']); + $this->assertEquals($category->CATEGORY_UID, $result[1]['PRO_CATEGORY']); } /** @@ -779,55 +757,55 @@ class ListUnassignedTest extends TestCase public function it_should_return_data_filtered_by_generic_search() { //Create user - $user = factory(User::class, 1)->create(); + $user = factory(User::class)->create(); //Create process - $process = factory(Process::class, 1)->create(); + $process = factory(Process::class)->create(); //Create a task self service - $task = factory(Task::class, 1)->create([ + $task = factory(Task::class)->create([ 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', 'TAS_GROUP_VARIABLE' => '', - 'PRO_UID' => $process[0]->PRO_UID + 'PRO_UID' => $process->PRO_UID ]); //Assign a user in the task - factory(TaskUser::class, 1)->create([ - 'TAS_UID' => $task[0]->TAS_UID, - 'USR_UID' => $user[0]->USR_UID, + factory(TaskUser::class)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, 'TU_RELATION' => 1, //Related to the user 'TU_TYPE' => 1 ]); //Create the register in list unassigned factory(ListUnassigned::class, 2)->create([ - 'TAS_ID' => $task[0]->TAS_ID, + 'TAS_ID' => $task->TAS_ID, 'APP_TITLE' => 'This is a case name', ]); //Create the register in list unassigned factory(ListUnassigned::class, 2)->create([ - 'TAS_ID' => $task[0]->TAS_ID, + 'TAS_ID' => $task->TAS_ID, 'APP_PRO_TITLE' => 'This is a process name', ]); //Create the register in list unassigned factory(ListUnassigned::class, 2)->create([ - 'TAS_ID' => $task[0]->TAS_ID, + 'TAS_ID' => $task->TAS_ID, 'APP_TAS_TITLE' => 'This is a task name', ]); //Create other registers factory(ListUnassigned::class, 4)->create([ - 'TAS_ID' => $task[0]->TAS_ID + 'TAS_ID' => $task->TAS_ID ]); //Define the filters $filters = ['search' => 'case name']; //Get data related to the search - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Define the filters $filters = ['search' => 'process name']; //Get data related to the search - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); //Define the filters $filters = ['search' => 'task name']; //Get data related to the search - $result = ListUnassigned::loadList($user[0]->USR_UID, $filters); + $result = ListUnassigned::loadList($user->USR_UID, $filters); $this->assertCount(2, $result); } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php b/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php index f1a1ceb08..3944c5243 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Lists.php @@ -2,13 +2,13 @@ namespace ProcessMaker\BusinessModel; -use \G; -use \Criteria; -use \UsersPeer; -use \PMLicensedFeatures; +use G; +use Criteria; +use PMLicensedFeatures; +use ProcessMaker\Model\Delegation; +use UsersPeer; /** - * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia */ class Lists @@ -258,6 +258,7 @@ class Lists /** * Get counters for lists + * * @param $userId * @return array */ @@ -271,6 +272,13 @@ class Lists $total = $this->$listObject->getCountList($userId, array('action' => 'draft')); array_push($response, (array('count' => $total, 'item' => $item))); break; + case 'ListSelfService': + $total = Delegation::countSelfService($userId); + array_push($response, ([ + 'count' => $total, + 'item' => $item + ])); + break; /*----------------------------------********---------------------------------*/ case 'ListConsolidated': $licensedFeatures = PMLicensedFeatures::getSingleton(); diff --git a/workflow/engine/src/ProcessMaker/Model/AppAssignSelfServiceValue.php b/workflow/engine/src/ProcessMaker/Model/AppAssignSelfServiceValue.php index f2cf56c94..e6eb6796e 100644 --- a/workflow/engine/src/ProcessMaker/Model/AppAssignSelfServiceValue.php +++ b/workflow/engine/src/ProcessMaker/Model/AppAssignSelfServiceValue.php @@ -10,5 +10,63 @@ class AppAssignSelfServiceValue extends Model protected $primaryKey = 'ID'; // We do not have create/update timestamps for this table public $timestamps = false; + + /** + * Return the case number this belongs to + */ + public function appNumber() + { + return $this->belongsTo(Delegation::class, 'APP_NUMBER', 'APP_NUMBER'); + } + + /** + * Return the index this belongs to + */ + public function index() + { + return $this->belongsTo(Delegation::class, 'DEL_INDEX', 'DEL_INDEX'); + } + + /** + * Return the task this belongs to + */ + public function task() + { + return $this->belongsTo(Task::class, 'TAS_ID', 'TAS_ID'); + } + + /** + * Get cases with assignment Self-Service Value Based + * + * @param string $usrUid + * + * @return array + */ + public static function getSelfServiceCasesByEvaluatePerUser($usrUid) + { + //Get the groups related to the user + $groups = GroupUser::getGroups($usrUid); + + // Build query + $query = AppAssignSelfServiceValue::query()->select(); + $query->join('APP_ASSIGN_SELF_SERVICE_VALUE_GROUP', function ($join) { + $join->on('APP_ASSIGN_SELF_SERVICE_VALUE.ID', '=', 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP.ID'); + }); + $query->where(function ($query) use ($usrUid, $groups) { + //Filtering the user assigned in the task + $query->where('APP_ASSIGN_SELF_SERVICE_VALUE_GROUP.GRP_UID', '=', $usrUid); + if (!empty($groups)) { + //Consider the group related to the user + $query->orWhere(function ($query) use ($groups) { + $query->whereIn('APP_ASSIGN_SELF_SERVICE_VALUE_GROUP.ASSIGNEE_ID', $groups); + $query->where('APP_ASSIGN_SELF_SERVICE_VALUE_GROUP.ASSIGNEE_TYPE', '=', 2); + }); + } + }); + $query->distinct(); + $result = $query->get()->values()->toArray(); + + return $result; + } } diff --git a/workflow/engine/src/ProcessMaker/Model/AppAssignSelfServiceValueGroup.php b/workflow/engine/src/ProcessMaker/Model/AppAssignSelfServiceValueGroup.php index 44492e5cd..4b2a0696e 100644 --- a/workflow/engine/src/ProcessMaker/Model/AppAssignSelfServiceValueGroup.php +++ b/workflow/engine/src/ProcessMaker/Model/AppAssignSelfServiceValueGroup.php @@ -9,5 +9,13 @@ class AppAssignSelfServiceValueGroup extends Model protected $table = 'APP_ASSIGN_SELF_SERVICE_VALUE_GROUP'; // We do not have create/update timestamps for this table public $timestamps = false; + + /** + * Return the appSelfServiceValue this belongs to + */ + public function appSelfService() + { + return $this->belongsTo(AppAssignSelfServiceValue::class, 'ID', 'ID'); + } } diff --git a/workflow/engine/src/ProcessMaker/Model/Delegation.php b/workflow/engine/src/ProcessMaker/Model/Delegation.php index cd694908d..661c6dbc8 100644 --- a/workflow/engine/src/ProcessMaker/Model/Delegation.php +++ b/workflow/engine/src/ProcessMaker/Model/Delegation.php @@ -58,6 +58,79 @@ class Delegation extends Model return $query->where('APP_UID', '=', $appUid); } + /** + * Scope a query to only include open threads + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeIsThreadOpen($query) + { + return $query->where('DEL_THREAD_STATUS', '=', 'OPEN'); + } + + /** + * Scope a query to only include threads without user + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeNoUserInThread($query) + { + return $query->where('USR_ID', '=', 0); + } + + /** + * Scope a query to only include specific tasks + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param array $tasks + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeTasksIn($query, array $tasks) + { + return $query->whereIn('APP_DELEGATION.TAS_ID', $tasks); + } + + /** + * Scope a query to only include a specific case + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param integer $appNumber + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeCase($query, $appNumber) + { + return $query->where('APP_NUMBER', '=', $appNumber); + } + + /** + * Scope a query to only include a specific index + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param integer $index + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeIndex($query, $index) + { + return $query->where('DEL_INDEX', '=', $index); + } + + /** + * Scope a query to only include a specific task + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param integer $task + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeTask($query, $task) + { + return $query->where('APP_DELEGATION.TAS_ID', '=', $task); + } + /** * Searches for delegations which match certain criteria * @@ -389,4 +462,47 @@ class Delegation extends Model return $arrayData; } + /** + * Count the self-services cases by user + * + * @param string $usrUid + * + * @return integer + */ + public static function countSelfService($usrUid) + { + //Get the task self services related to the user + $taskSelfService = TaskUser::getSelfServicePerUser($usrUid); + //Get the task self services value based related to the user + $selfServiceValueBased = AppAssignSelfServiceValue::getSelfServiceCasesByEvaluatePerUser($usrUid); + + //Start the query for get the cases related to the user + $query = Delegation::query()->select('APP_NUMBER'); + //Add Join with task filtering only the type self-service + $query->join('TASK', function ($join) { + $join->on('APP_DELEGATION.TAS_ID', '=', 'TASK.TAS_ID') + ->where('TASK.TAS_ASSIGN_TYPE', '=', 'SELF_SERVICE'); + }); + //Filtering the open threads and without users + $query->isThreadOpen()->noUserInThread(); + + //Get the cases unassigned + if (!empty($selfServiceValueBased)) { + $query->where(function ($query) use ($selfServiceValueBased, $taskSelfService) { + //Get the cases related to the task self service + $query->tasksIn($taskSelfService); + foreach ($selfServiceValueBased as $case) { + //Get the cases related to the task self service value based + $query->orWhere(function ($query) use ($case) { + $query->case($case['APP_NUMBER'])->index($case['DEL_INDEX'])->task($case['TAS_ID']); + }); + } + }); + } else { + //Get the cases related to the task self service + $query->tasksIn($taskSelfService); + } + + return $query->count(); + } } diff --git a/workflow/engine/src/ProcessMaker/Model/GroupUser.php b/workflow/engine/src/ProcessMaker/Model/GroupUser.php index b20474e02..101ba5e92 100644 --- a/workflow/engine/src/ProcessMaker/Model/GroupUser.php +++ b/workflow/engine/src/ProcessMaker/Model/GroupUser.php @@ -9,5 +9,53 @@ class GroupUser extends Model protected $table = 'GROUP_USER'; // We do not have create/update timestamps for this table public $timestamps = false; + + /** + * Return the user this belongs to + */ + public function user() + { + return $this->belongsTo(User::class, 'USR_UID', 'USR_UID'); + } + + /** + * Return the group user this belongs to + */ + public function groupsWf() + { + return $this->belongsTo(Groupwf::class, 'GRP_ID', 'GRP_ID'); + } + + /** + * Scope a query to specific user + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string $user + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeUser($query, $user) + { + return $query->where('USR_UID', '=', $user); + } + + /** + * Return the groups from a user + * + * @param string $usrUid + * @param string $column + * + * @return array + */ + public static function getGroups($usrUid, $column = 'GRP_ID') + { + $groups = GroupUser::query()->select(['GROUP_USER.' . $column]) + ->join('GROUPWF', function ($join) use ($usrUid) { + $join->on('GROUPWF.GRP_ID', '=', 'GROUP_USER.GRP_ID') + ->where('GROUPWF.GRP_STATUS', 'ACTIVE') + ->where('GROUP_USER.USR_UID', $usrUid); + })->get()->values()->toArray(); + + return $groups; + } } diff --git a/workflow/engine/src/ProcessMaker/Model/Groupwf.php b/workflow/engine/src/ProcessMaker/Model/Groupwf.php index 3c6e306e2..5a383010b 100644 --- a/workflow/engine/src/ProcessMaker/Model/Groupwf.php +++ b/workflow/engine/src/ProcessMaker/Model/Groupwf.php @@ -10,5 +10,24 @@ class Groupwf extends Model protected $primaryKey = 'GRP_ID'; // We do not have create/update timestamps for this table public $timestamps = false; + + /** + * Scope a query to active groups + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeActive($query) + { + return $query->where('GRP_STATUS', '=', 'ACTIVE'); + } + + /** + * Return the user this belongs to + */ + public function groupUsers() + { + return $this->belongsTo(GroupUser::class, 'GRP_ID', 'GRP_ID'); + } } diff --git a/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php b/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php index 724d9912e..aa69c2f3c 100644 --- a/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php +++ b/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php @@ -35,6 +35,57 @@ class ListUnassigned extends Model return $this->belongsTo(Process::class, 'PRO_ID', 'PRO_ID'); } + /** + * Scope a query to only include specific tasks + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param array $tasks + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeTasksIn($query, array $tasks) + { + return $query->whereIn('TAS_ID', $tasks); + } + + /** + * Scope a query to only include a specific case + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param integer $appNumber + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeCase($query, $appNumber) + { + return $query->where('APP_NUMBER', '=', $appNumber); + } + + /** + * Scope a query to only include a specific index + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param integer $index + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeIndex($query, $index) + { + return $query->where('DEL_INDEX', '=', $index); + } + + /** + * Scope a query to only include a specific task + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param integer $task + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeTask($query, $task) + { + return $query->where('TAS_ID', '=', $task); + } + /** * Get count * @@ -51,6 +102,43 @@ class ListUnassigned extends Model return $result; } + /** + * Count the self-services cases by user + * + * @param string $usrUid + * + * @return integer + */ + public static function countSelfService($usrUid) + { + //Get the task self services related to the user + $taskSelfService = TaskUser::getSelfServicePerUser($usrUid); + //Get the task self services value based related to the user + $selfServiceValueBased = AppAssignSelfServiceValue::getSelfServiceCasesByEvaluatePerUser($usrUid); + + //Start the query for get the cases related to the user + $query = ListUnassigned::query()->select('APP_NUMBER'); + + //Get the cases unassigned + if (!empty($selfServiceValueBased)) { + $query->where(function ($query) use ($selfServiceValueBased, $taskSelfService) { + //Get the cases related to the task self service + $query->tasksIn($taskSelfService); + foreach ($selfServiceValueBased as $case) { + //Get the cases related to the task self service value based + $query->orWhere(function ($query) use ($case) { + $query->case($case['APP_NUMBER'])->index($case['DEL_INDEX'])->task($case['TAS_ID']); + }); + } + }); + } else { + //Get the cases related to the task self service + $query->tasksIn($taskSelfService); + } + + return $query->count(); + } + /** * Search data * diff --git a/workflow/engine/src/ProcessMaker/Model/Task.php b/workflow/engine/src/ProcessMaker/Model/Task.php index 89ab49222..3e78e3a33 100644 --- a/workflow/engine/src/ProcessMaker/Model/Task.php +++ b/workflow/engine/src/ProcessMaker/Model/Task.php @@ -20,4 +20,16 @@ class Task extends Model { return $this->hasMany(Delegation::class, 'TAS_ID', 'TAS_ID'); } + + /** + * Scope a query to only include self-service + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeIsSelfService($query) + { + return $query->where('TAS_ASSIGN_TYPE', '=', 'SELF_SERVICE') + ->where('TAS_GROUP_VARIABLE', '=', ''); + } } diff --git a/workflow/engine/src/ProcessMaker/Model/TaskUser.php b/workflow/engine/src/ProcessMaker/Model/TaskUser.php index 67549792b..b56897ff7 100644 --- a/workflow/engine/src/ProcessMaker/Model/TaskUser.php +++ b/workflow/engine/src/ProcessMaker/Model/TaskUser.php @@ -9,4 +9,64 @@ class TaskUser extends Model protected $table = 'TASK_USER'; public $timestamps = false; + + /** + * Return the task this belongs to + */ + public function task() + { + return $this->belongsTo(Task::class, 'TAS_UID', 'TAS_UID'); + } + + /** + * Return the user this belongs to + */ + public function user() + { + return $this->belongsTo(User::class, 'USR_UID', 'USR_UID'); + } + + /** + * Get the task self services related to the user + * + * @param string $usrUid + * + * @return array + */ + public static function getSelfServicePerUser($usrUid) + { + //Get the groups related to the user + $groups = GroupUser::getGroups($usrUid, 'GRP_UID'); + + // Build query + $query = Task::query()->select('TAS_ID'); + //Add Join with process filtering only the active process + $query->join('PROCESS', function ($join) { + $join->on('PROCESS.PRO_UID', '=', 'TASK.PRO_UID') + ->where('PROCESS.PRO_STATUS', 'ACTIVE'); + }); + //Add join with with the task users + $query->join('TASK_USER', function ($join) { + $join->on('TASK.TAS_UID', '=', 'TASK_USER.TAS_UID') + //We not considered the Ad-hoc + ->where('TASK_USER.TU_TYPE', '=', 1); + }); + //Filtering only the task self-service + $query->isSelfService(); + //Filtering the task related to the user + $query->where(function ($query) use ($usrUid, $groups) { + //Filtering the user assigned in the task + $query->where('TASK_USER.USR_UID', '=', $usrUid); + if (!empty($groups)) { + //Consider the group related to the user + $query->orWhere(function ($query) use ($groups) { + $query->whereIn('TASK_USER.USR_UID', $groups); + }); + } + }); + $query->distinct(); + $tasks = $query->get()->values()->toArray(); + + return $tasks; + } } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Model/User.php b/workflow/engine/src/ProcessMaker/Model/User.php index 7c6da958d..43e9ede32 100644 --- a/workflow/engine/src/ProcessMaker/Model/User.php +++ b/workflow/engine/src/ProcessMaker/Model/User.php @@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Model; class User extends Model { protected $table = "USERS"; + protected $primaryKey = 'USR_ID'; // Our custom timestamp columns const CREATED_AT = 'USR_CREATE_DATE'; const UPDATED_AT = 'USR_UPDATE_DATE'; @@ -18,4 +19,24 @@ class User extends Model { return $this->hasMany(Delegation::class, 'USR_ID', 'USR_ID'); } + + /** + * Return the user this belongs to + */ + public function groups() + { + return $this->belongsTo(GroupUser::class, 'USR_UID', 'USR_UID'); + } + + /** + * Return the groups from a user + * + * @param boolean $usrUid + * + * @return array + */ + public static function getGroups($usrUid) + { + return User::find($usrUid)->groups()->get(); + } } From 05d713c847099e82abefaefb6ec0ef624aaa29bd Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Wed, 29 May 2019 09:53:13 -0400 Subject: [PATCH 02/30] PMC-840 --- gulliver/system/class.bootstrap.php | 2 +- gulliver/system/class.rbac.php | 2 +- thirdparty/pear/Log.php | 4 ++-- workflow/engine/classes/Cases.php | 2 +- workflow/engine/classes/EnterpriseClass.php | 2 +- workflow/engine/classes/model/AppDelay.php | 2 +- workflow/engine/classes/model/AppDelegation.php | 2 +- workflow/engine/src/ProcessMaker/Core/System.php | 2 +- workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php index a192f0b27..547eb4ca7 100644 --- a/gulliver/system/class.bootstrap.php +++ b/gulliver/system/class.bootstrap.php @@ -1839,7 +1839,7 @@ class Bootstrap * * @return multitype:string mixed Ambigous */ - public function parseNormalUri($aRequestUri, array $arrayFriendlyUri = null) + public static function parseNormalUri($aRequestUri, array $arrayFriendlyUri = null) { if (substr($aRequestUri[1], 0, 3) == 'sys') { define('SYS_TEMP', substr($aRequestUri[1], 3)); diff --git a/gulliver/system/class.rbac.php b/gulliver/system/class.rbac.php index 79dad003c..bf78948bd 100644 --- a/gulliver/system/class.rbac.php +++ b/gulliver/system/class.rbac.php @@ -213,7 +213,7 @@ class RBAC * @access public * @return object */ - public function &getSingleton() + public static function &getSingleton() { if (self::$instance == null) { self::$instance = new RBAC(); diff --git a/thirdparty/pear/Log.php b/thirdparty/pear/Log.php index 0e21b5eff..b6d4d2805 100644 --- a/thirdparty/pear/Log.php +++ b/thirdparty/pear/Log.php @@ -126,7 +126,7 @@ class Log * @access public * @since Log 1.0 */ - function &factory($handler, $name = '', $ident = '', $conf = array(), + public static function &factory($handler, $name = '', $ident = '', $conf = array(), $level = PEAR_LOG_DEBUG) { $handler = strtolower($handler); @@ -188,7 +188,7 @@ class Log * @access public * @since Log 1.0 */ - function &singleton($handler, $name = '', $ident = '', $conf = array(), + public static function &singleton($handler, $name = '', $ident = '', $conf = array(), $level = PEAR_LOG_DEBUG) { static $instances; diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index 0718aa6bb..49da6d432 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -6976,7 +6976,7 @@ class Cases return isset($row['DEL_INDEX']) ? $row['DEL_INDEX'] : 0; } - public function clearCaseSessionData() + public static function clearCaseSessionData() { if (isset($_SESSION['APPLICATION'])) { unset($_SESSION['APPLICATION']); diff --git a/workflow/engine/classes/EnterpriseClass.php b/workflow/engine/classes/EnterpriseClass.php index 8f6bbc789..6e6a1633e 100644 --- a/workflow/engine/classes/EnterpriseClass.php +++ b/workflow/engine/classes/EnterpriseClass.php @@ -22,7 +22,7 @@ class EnterpriseClass extends PMPlugin { } - public function enterpriseSystemUpdate($data) //$data = $oData + public static function enterpriseSystemUpdate($data) //$data = $oData { if (count(glob(PATH_DATA_SITE . 'license/*.dat')) == 0) { return; diff --git a/workflow/engine/classes/model/AppDelay.php b/workflow/engine/classes/model/AppDelay.php index f8445c2e6..06d9d269c 100644 --- a/workflow/engine/classes/model/AppDelay.php +++ b/workflow/engine/classes/model/AppDelay.php @@ -101,7 +101,7 @@ class AppDelay extends BaseAppDelay * * @return boolean */ - public function isPaused($appUid, $delIndex) + public static function isPaused($appUid, $delIndex) { $criteria = new Criteria('workflow'); $criteria->add(AppDelayPeer::APP_UID, $appUid); diff --git a/workflow/engine/classes/model/AppDelegation.php b/workflow/engine/classes/model/AppDelegation.php index 39977faca..f6c0a5d47 100644 --- a/workflow/engine/classes/model/AppDelegation.php +++ b/workflow/engine/classes/model/AppDelegation.php @@ -797,7 +797,7 @@ class AppDelegation extends BaseAppDelegation * @param integer $index, Index to review * @return array */ - public function getCurrentUsers($appUid, $index) + public static function getCurrentUsers($appUid, $index) { $oCriteria = new Criteria(); $oCriteria->addSelectColumn(AppDelegationPeer::USR_UID); diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index ae37dea92..e0e469a32 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -1023,7 +1023,7 @@ class System * * @return array $skinListArray */ - public function getSkingList() + public static function getSkingList() { //Create Skins custom folder if it doesn't exists if (!is_dir(PATH_CUSTOM_SKINS)) { diff --git a/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php b/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php index 28fbc6a64..35c237003 100644 --- a/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php +++ b/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php @@ -409,7 +409,7 @@ class Server implements iAuthenticate return $this->server; } - public function getUserId() + public static function getUserId() { return self::$userId; } From b24a3eca66c940c9c9ed1556825368a0d89ae1f4 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 29 May 2019 11:07:49 -0400 Subject: [PATCH 03/30] PMC-476 --- workflow/engine/controllers/pmTablesProxy.php | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/workflow/engine/controllers/pmTablesProxy.php b/workflow/engine/controllers/pmTablesProxy.php index e55c7e852..d751effff 100644 --- a/workflow/engine/controllers/pmTablesProxy.php +++ b/workflow/engine/controllers/pmTablesProxy.php @@ -1,20 +1,9 @@ - * @inherits HttpProxyController - * @access public - */ use ProcessMaker\Core\System; use ProcessMaker\Validation\ExceptionRestApi; use ProcessMaker\Validation\ValidationUploadedFiles; -//We need to suppress the error for the unittest that use this function -@header("Content-type: text/html;charset=utf-8"); - - class pmTablesProxy extends HttpProxyController { From c83988d5ac6cf994d6875066f769a763804d5dde Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Mon, 27 May 2019 16:00:45 -0400 Subject: [PATCH 04/30] PMC-815 --- config/deprecatedFiles.lst | 1 + .../engine/bin/tasks/CliWorkspacesTest.php | 137 ++++++++++++++++++ workflow/engine/bin/tasks/cliWorkspaces.php | 25 ++++ .../engine/methods/users/data_usersList.php | 67 --------- 4 files changed, 163 insertions(+), 67 deletions(-) create mode 100644 tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php delete mode 100644 workflow/engine/methods/users/data_usersList.php diff --git a/config/deprecatedFiles.lst b/config/deprecatedFiles.lst index 43cb64059..87b738b31 100644 --- a/config/deprecatedFiles.lst +++ b/config/deprecatedFiles.lst @@ -70,6 +70,7 @@ workflow/engine/methods/setup/jasper.php workflow/engine/methods/setup/webServices.php workflow/engine/methods/setup/webServicesAjax.php workflow/engine/methods/setup/webServicesList.php +workflow/engine/methods/users/data_usersList.php workflow/engine/plugins/openFlash.php workflow/engine/plugins/openFlash/chart-data.php workflow/engine/plugins/openFlash/chart.php diff --git a/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php b/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php new file mode 100644 index 000000000..061f78549 --- /dev/null +++ b/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php @@ -0,0 +1,137 @@ +assertTrue(file_exists(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/data_usersList.php')); + + $path = PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/'; + + if (getmyuid() == fileowner($path)) { + if (substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/data_usersList.php'), + 1, 2) == 'rw' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/'), 2, 1) == 'w' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/'), 3, 1) == 'x' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/'), 3, 1) == 'x' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/'), 3, 1) == 'x' + ) { + remove_deprecated_files(); + } else { + dd("Could not delete the file. Please, make sure the file have write permission for the direct parent directory and + execute permission for all parent directories."); + } + } else { + if (getmygid() == filegroup($path)) { + if (substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/data_usersList.php'), + 4, 2) == 'rw' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/'), 5, + 1) == 'w' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/'), 6, 1) == 'x' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/'), 6, 1) == 'x' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/'), 6, 1) == 'x' + ) { + remove_deprecated_files(); + } else { + dd("Could not delete the file. Please, make sure the file have write permission for the direct parent directory and + execute permission for all parent directories."); + } + + } else { + if (substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/data_usersList.php'), + 7, 2) == 'rw' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/'), 8, + 1) == 'w' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/'), 9, 1) == 'x' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/engine/'), 9, 1) == 'x' && + substr($this->getPermissions(PATH_TRUNK . PATH_SEP . 'workflow/'), 9, 1) == 'x' + ) { + remove_deprecated_files(); + } else { + dd("Could not delete the file. Please, make sure the file have write permission for the direct parent directory and + execute permission for all parent directories."); + } + } + } + + // This assert the data_usersList.php does not exist anymore + $this->assertFalse(file_exists(PATH_TRUNK . PATH_SEP . 'workflow/engine/methods/users/data_usersList.php')); + } + + /** + * Get the permissions of a file or directory + * + * @param string $path + * @return string + */ + public function getPermissions($path) + { + $per = fileperms($path); + switch ($per & 0xF000) { + case 0xC000: // socket + $permissions = 's'; + break; + case 0xA000: // symbolic link + $permissions = 'l'; + break; + case 0x8000: // regular + $permissions = '-'; + break; + case 0x6000: // block special + $permissions = 'b'; + break; + case 0x4000: // directory + $permissions = 'd'; + break; + case 0x2000: // character special + $permissions = 'c'; + break; + case 0x1000: // FIFO pipe + $permissions = 'p'; + break; + default: // unknown + $permissions = 'u'; + } + + // Owner + $permissions .= (($per & 0x0100) ? 'r' : '-'); + $permissions .= (($per & 0x0080) ? 'w' : '-'); + $permissions .= (($per & 0x0040) ? + (($per & 0x0800) ? 's' : 'x') : + (($per & 0x0800) ? 'S' : '-')); + + // Group + $permissions .= (($per & 0x0020) ? 'r' : '-'); + $permissions .= (($per & 0x0010) ? 'w' : '-'); + $permissions .= (($per & 0x0008) ? + (($per & 0x0400) ? 's' : 'x') : + (($per & 0x0400) ? 'S' : '-')); + + // Others + $permissions .= (($per & 0x0004) ? 'r' : '-'); + $permissions .= (($per & 0x0002) ? 'w' : '-'); + $permissions .= (($per & 0x0001) ? + (($per & 0x0200) ? 't' : 'x') : + (($per & 0x0200) ? 'T' : '-')); + + return $permissions; + } +} \ No newline at end of file diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index b6bb6cba4..7455ee574 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -362,6 +362,16 @@ EOT CLI::taskArg('workspace'); CLI::taskRun("run_sync_forms_with_info_from_input_documents"); +/** + * Remove the deprecated files + */ +CLI::taskName('remove-unused-files'); +CLI::taskDescription(<<removeDeprecatedFiles(); + CLI::logging("<*> The deprecated files has been removed. \n"); +} diff --git a/workflow/engine/methods/users/data_usersList.php b/workflow/engine/methods/users/data_usersList.php deleted file mode 100644 index d651a9933..000000000 --- a/workflow/engine/methods/users/data_usersList.php +++ /dev/null @@ -1,67 +0,0 @@ -. - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ - -isset( $_POST['textFilter'] ) ? $filter = $_POST['textFilter'] : $filter = ''; - -$sDelimiter = DBAdapter::getStringDelimiter(); - -$oCriteria = new Criteria( 'workflow' ); -$oCriteria->addSelectColumn( UsersPeer::USR_UID ); - -$sDataBase = 'database_' . strtolower( DB_ADAPTER ); -if (G::LoadSystemExist( $sDataBase )) { - $oDataBase = new database(); - $oCriteria->addAsColumn( 'USR_COMPLETENAME', $oDataBase->concatString( "USR_LASTNAME", "' '", "USR_FIRSTNAME" ) ); - //$oCriteria->addAsColumn('USR_PHOTO', $oDataBase->concatString("'".PATH_IMAGES_ENVIRONMENT_USERS."'", "USR_UID","'.gif'")); -} - -$oCriteria->addSelectColumn( UsersPeer::USR_USERNAME ); -$oCriteria->addSelectColumn( UsersPeer::USR_EMAIL ); -$oCriteria->addSelectColumn( UsersPeer::USR_ROLE ); -$oCriteria->addSelectColumn( UsersPeer::USR_DUE_DATE ); -//$oCriteria->addAsColumn('USR_VIEW', $sDelimiter . G::LoadTranslation('ID_DETAIL') . $sDelimiter); -//$oCriteria->addAsColumn('USR_EDIT', $sDelimiter . G::LoadTranslation('ID_EDIT') . $sDelimiter); -//$oCriteria->addAsColumn('USR_DELETE', $sDelimiter . G::LoadTranslation('ID_DELETE') . $sDelimiter); -//$oCriteria->addAsColumn('USR_AUTH', $sDelimiter . G::LoadTranslation('ID_AUTHENTICATION') . $sDelimiter); -//$oCriteria->addAsColumn('USR_REASSIGN', $sDelimiter . G::LoadTranslation('ID_REASSIGN_CASES') . $sDelimiter); -$oCriteria->add( UsersPeer::USR_STATUS, array ('CLOSED' -), Criteria::NOT_IN ); - -if ($filter != '') { - $cc = $oCriteria->getNewCriterion( UsersPeer::USR_USERNAME, '%' . $filter . '%', Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( UsersPeer::USR_FIRSTNAME, '%' . $filter . '%', Criteria::LIKE )->addOr( $oCriteria->getNewCriterion( UsersPeer::USR_LASTNAME, '%' . $filter . '%', Criteria::LIKE ) ) ); - $oCriteria->add( $cc ); - //echo $oCriteria->toString(); -} - -$rs = UsersPeer::DoSelectRS( $oCriteria, Propel::getDbConnection('workflow_ro') ); -$rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); - -$rows = Array (); -while ($rs->next()) { - $rows[] = $rs->getRow(); - // if (!file_exists($aux['USR_PHOTO'])) $aux['USR_PHOTO'] = 'public_html/images/user.gif'; - // $rows[] = $aux; -} -echo '{users: ' . G::json_encode( $rows ) . '}'; - From e4e65ccb140c9772d60027cfbef7657c4c24da3b Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 3 Jun 2019 10:04:38 -0400 Subject: [PATCH 05/30] PMC-167 --- .../engine/content/translations/english/processmaker.en.po | 6 ++++++ workflow/engine/data/mysql/insert.sql | 1 + workflow/engine/templates/cases/casesListConsolidated.js | 4 ++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 06a50eda2..05fe609f5 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -2743,6 +2743,12 @@ msgstr "Base DN" msgid "Batch Routing" msgstr "Batch Routing" +# TRANSLATION +# LABEL/ID_BATCH_ROUTING_APPLY_CHANGES +#: LABEL/ID_BATCH_ROUTING_APPLY_CHANGES +msgid "The modification will be applied to all rows" +msgstr "The modification will be applied to all rows" + # TRANSLATION # LABEL/ID_BATCH_ROUTING_TABLE_ALREADY_EXISTS #: LABEL/ID_BATCH_ROUTING_TABLE_ALREADY_EXISTS diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index e24455372..5a78ecbf5 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -57259,6 +57259,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_BARS','en','Bars','2015-03-09') , ( 'LABEL','ID_BASE_DN','en','Base DN','2014-01-15') , ( 'LABEL','ID_BATCH_ROUTING','en','Batch Routing','2016-02-29') , +( 'LABEL','ID_BATCH_ROUTING_APPLY_CHANGES','en','The modification will be applied to all rows','2019-06-03') , ( 'LABEL','ID_BATCH_ROUTING_TABLE_ALREADY_EXISTS','en','The specified batch routing table already exists. The existing table will be used to store the batch routing information. Please be sure that the table has the correct batch routing configuration.','2017-03-27') , ( 'LABEL','ID_BEFORE','en','Before','2014-01-15') , ( 'LABEL','ID_BEFORE_ASSIGNMENT','en','Before Assignment','2014-01-15') , diff --git a/workflow/engine/templates/cases/casesListConsolidated.js b/workflow/engine/templates/cases/casesListConsolidated.js index 00bf2fdee..ee0241071 100644 --- a/workflow/engine/templates/cases/casesListConsolidated.js +++ b/workflow/engine/templates/cases/casesListConsolidated.js @@ -793,7 +793,7 @@ function generateGridClassic(proUid, tasUid, dynUid) { if (Ext.getCmp("chk_allColumn").checked) { Ext.Msg.show({ title: "", - msg: "The modification will be applied to all rows in your selection.", + msg: _("ID_BATCH_ROUTING_APPLY_CHANGES"), buttons: Ext.Msg.YESNO, fn: function (btn) { if (btn == "yes") { @@ -1027,7 +1027,7 @@ function generateGrid(proUid, tasUid, dynUid) { if (Ext.getCmp("chk_allColumn").checked) { Ext.Msg.show({ title: "", - msg: "The modification will be applied to all rows in your selection.", + msg: _("ID_BATCH_ROUTING_APPLY_CHANGES"), buttons: Ext.Msg.YESNO, fn: function (btn) { if (btn == "yes") { From cf4dbf50df47e838236ededd436a1a1c736edd32 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 5 Jun 2019 07:56:10 -0400 Subject: [PATCH 06/30] PMC-834 --- workflow/engine/methods/cases/proxyCasesList.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflow/engine/methods/cases/proxyCasesList.php b/workflow/engine/methods/cases/proxyCasesList.php index 0be7607f4..6a07e02ce 100644 --- a/workflow/engine/methods/cases/proxyCasesList.php +++ b/workflow/engine/methods/cases/proxyCasesList.php @@ -116,7 +116,9 @@ try { $columnSearch ); } else { - $data = Delegation::search( + //This section is used by the community version + $apps = new Applications(); + $data = $apps->getAll( $userUid, $start, $limit, From 4c116946ad5c8ef73f398e4473a4bfed2f23c373 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 6 Jun 2019 12:16:50 -0400 Subject: [PATCH 07/30] PMC-558 --- workflow/engine/classes/WorkspaceTools.php | 8 -------- workflow/engine/data/mysql/insert.sql | 3 +-- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/workflow/engine/classes/WorkspaceTools.php b/workflow/engine/classes/WorkspaceTools.php index 2f37b70d2..62a3713a5 100644 --- a/workflow/engine/classes/WorkspaceTools.php +++ b/workflow/engine/classes/WorkspaceTools.php @@ -1074,7 +1074,6 @@ class WorkspaceTools $this->checkRbacPermissions();//check or add new permissions $this->checkSequenceNumber(); $this->migrateIteeToDummytask($this->name); - $this->upgradeConfiguration(); /*----------------------------------********---------------------------------*/ $this->upgradeAuditLog($this->name); /*----------------------------------********---------------------------------*/ @@ -3739,13 +3738,6 @@ class WorkspaceTools CLI::logging($message); } - public function upgradeConfiguration() - { - $conf = new Configurations(); - $conf->aConfig = 'neoclassic'; - $conf->saveConfig('SKIN_CRON', ''); - } - public function upgradeAuditLog($workspace) { $conf = new Configurations(); diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 5a78ecbf5..cfc1dc4d2 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -61616,8 +61616,7 @@ INSERT INTO CONFIGURATION (CFG_UID,OBJ_UID,CFG_VALUE,PRO_UID,USR_UID,APP_UID) VA ('MIGRATED_APP_HISTORY', 'history', 'a:1:{s:7:\"updated\";b:1;}', '', '', ''), ('MIGRATED_CONTENT','content','a:12:{i:0;s:7:"Groupwf";i:1;s:7:"Process";i:2;s:10:"Department";i:3;s:4:"Task";i:4;s:13:"InputDocument";i:5;s:11:"Application";i:6;s:11:"AppDocument";i:7;s:8:"Dynaform";i:8;s:14:"OutputDocument";i:9;s:11:"ReportTable";i:10;s:8:"Triggers";i:11;s:41:"\\ProcessMaker\\BusinessModel\\WebEntryEvent";}','','',''), ('MIGRATED_LIST','list','true','list','list','list'), -('MIGRATED_LIST_UNASSIGNED','list','true','list','list','list'), -('SKIN_CRON','','s:10:\"neoclassic\";','','',''); +('MIGRATED_LIST_UNASSIGNED','list','true','list','list','list'); INSERT INTO CATALOG (CAT_UID,CAT_LABEL_ID,CAT_TYPE,CAT_FLAG,CAT_OBSERVATION,CAT_CREATE_DATE,CAT_UPDATE_DATE) VALUES ('10','ID_BARS','GRAPHIC','','','2015-03-04 00:00:00','2015-03-04 00:00:00'), From f3c81598cb35a7b254758b8f9dcb863a25dd1cb1 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 6 Jun 2019 16:43:42 -0400 Subject: [PATCH 08/30] PMC-809 --- phpunit.xml | 4 + tests/bootstrap.php | 43 ++- .../ProcessMaker/Services/Api/LightTest.php | 355 ++++++++++++++++++ .../src/ProcessMaker/Model/ListUnassigned.php | 11 +- .../src/ProcessMaker/Services/Api/Light.php | 6 +- 5 files changed, 407 insertions(+), 12 deletions(-) create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php diff --git a/phpunit.xml b/phpunit.xml index dad99dd69..5ec9092ee 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -36,6 +36,10 @@ + + + + diff --git a/tests/bootstrap.php b/tests/bootstrap.php index fdee3691a..148d060d1 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -14,26 +14,46 @@ use Illuminate\Support\Facades\Schema; /** * @todo Migrate to configuration parameters */ - define('PATH_TRUNK', dirname(__DIR__)); -define('PATH_CORE', PATH_TRUNK.'/workflow/engine/'); +define('PATH_CORE', PATH_TRUNK . '/workflow/engine/'); define('PATH_CONFIG', PATH_CORE . 'config/'); -define('PATH_RBAC_CORE',dirname(__DIR__).'/rbac/engine/'); -define('PATH_DB', dirname(__DIR__).'/shared/sites/'); -define('PATH_DATA', dirname(__DIR__).'/shared/rbac/'); +$pathData = PATH_CONFIG . 'paths_installed.php'; +if (file_exists($pathData)) { + require_once $pathData; +} else { + define('PATH_DATA', dirname(__DIR__) . '/shared/rbac/'); +} +define('PATH_RBAC_CORE', dirname(__DIR__) . '/rbac/engine/'); +define('PATH_DB', dirname(__DIR__) . '/shared/sites/'); define('PATH_SEP', '/'); -define('PATH_METHODS', dirname(__DIR__).'/workflow/engine/methods/'); +define('PATH_METHODS', dirname(__DIR__) . '/workflow/engine/methods/'); define('SYS_LANG', 'en'); define('DB_ADAPTER', 'mysql'); define('SYS_SKIN', 'neoclassic'); -define('SYS_SYS', 'workflow'); -define('PATH_WORKSPACE',PATH_TRUNK.'/shared/sites/' . SYS_SYS . '/'); -define('PMTABLE_KEY','pmtable'); +define('SYS_SYS', env('MAIN_SYS_SYS', 'workflow')); +define('PATH_WORKSPACE', PATH_TRUNK . '/shared/sites/' . SYS_SYS . '/'); +define('PMTABLE_KEY', 'pmtable'); +define('PATH_WORKFLOW_MYSQL_DATA', PATH_TRUNK . '/workflow/engine/data/mysql/'); +define('PATH_RBAC_MYSQL_DATA', PATH_TRUNK . '/rbac/engine/data/mysql/'); +define('PATH_LANGUAGECONT', PATH_DATA . '/META-INF/'); + +//timezone +$_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', 'workflow')) == 1; + +//Set Time Zone +ini_set('date.timezone', $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] ? 'UTC' : env('MAIN_TIME_ZONE', 'America/New_York')); +define('TIME_ZONE', ini_get('date.timezone')); // Setup basic app services $app = require __DIR__ . '/../bootstrap/app.php'; $app->make(Kernel::class)->bootstrap(); +//Overwrite with the Processmaker env.ini configuration used in production environments +//@todo: move env.ini configuration to .env +ini_set('date.timezone', TIME_ZONE); //Set Time Zone +date_default_timezone_set(TIME_ZONE); +config(['app.timezone' => TIME_ZONE]); + // Setup our testexternal database config(['database.connections.testexternal' => [ 'driver' => 'mysql', @@ -49,6 +69,11 @@ config(['database.connections.testexternal' => [ 'engine' => null ]]); +//configuration values +config([ + "system.workspace" => SYS_SYS +]); + // Now, drop all test tables and repopulate with schema Schema::connection('testexternal')->dropIfExists('test'); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php new file mode 100644 index 000000000..c24d476cc --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php @@ -0,0 +1,355 @@ +timezone = config('app.timezone'); + $_SESSION['USR_TIME_ZONE'] = $this->timezone; + $this->baseUri = $this->getBaseUri(); + $this->workspace = env("DB_DATABASE", "test"); + $this->clientId = config("oauthClients.pm.clientId"); + $this->clientSecret = config("oauthClients.pm.clientSecret"); + $this->user = "admin"; + $this->password = "admin"; + $this->createTestSite(); + $this->http = new Client([ + "base_uri" => $this->baseUri + ]); + $this->optionsForConvertDatetime = [ + 'newerThan', + 'oldestthan', + 'date', + 'delegateDate', + 'dueDate', + 'delRiskDate' + ]; + } + + /** + * Get base uri for rest applications. + * @return string + */ + private function getBaseUri() + { + $_SERVER = $this->getServerInformation(); + $baseUri = System::getServerProtocolHost(); + + return $baseUri; + } + + /** + * Get server information. + * @return object + */ + private function getServerInformation() + { + $pathData = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . ".server_info"; + $content = file_get_contents($pathData); + $serverInfo = unserialize($content); + + return $serverInfo; + } + + /** + * This method creates a test workspace so that the endpoints can be functional, + * it is necessary to change the permissions of the directory so that other + * users can access and write to the directory, these users can be for + * example: apache2, www-data, httpd, etc... + * This method finds the license file of the active site and uses it to register + * this license in the LICENSE_MANAGER table. If there is no license file in + * the active workspace, an asersion failure will be notified. + */ + private function createTestSite() + { + //We copy the license, otherwise you will not be able to lift the site + $pathTest = PATH_DATA . "sites" . PATH_SEP . $this->workspace; + File::copyDirectory(PATH_DATA . "sites" . PATH_SEP . config("system.workspace"), $pathTest); + + //Write permission for other users for example: apache2, www-data, httpd. + passthru('chmod 777 -R ' . $pathTest . ' >> .log 2>&1'); + + $installer = new Installer(); + $options = [ + 'isset' => true, + 'name' => $this->workspace, + 'admin' => [ + 'username' => $this->user, + 'password' => $this->password + ], + 'advanced' => [ + 'ao_db_drop' => true, + 'ao_db_wf' => $this->workspace, + 'ao_db_rb' => $this->workspace, + 'ao_db_rp' => $this->workspace + ] + ]; + //The false option creates a connection to the database, necessary to create a site. + $installer->create_site($options, false); + //Now create site + $installer->create_site($options, true); + + //Important so that the dates are stored in the same timezone + file_put_contents($pathTest . "/env.ini", "time_zone ='{$this->timezone}'", FILE_APPEND); + + $matchingFiles = File::glob("{$pathTest}/*.dat"); + $this->assertNotEmpty($matchingFiles); + + //set license + $licensePath = array_pop($matchingFiles); + DB::Table("LICENSE_MANAGER")->insert([ + "LICENSE_UID" => G::generateUniqueID(), + "LICENSE_USER" => "ProcessMaker Inc", + "LICENSE_START" => "1490932800", + "LICENSE_END" => 0, + "LICENSE_SPAN" => 0, + "LICENSE_STATUS" => "ACTIVE", + "LICENSE_DATA" => file_get_contents($licensePath), + "LICENSE_PATH" => $licensePath, + "LICENSE_WORKSPACE" => $this->workspace, + "LICENSE_TYPE" => "" + ]); + } + + /** + * Get authorization values. + */ + private function getAuthorization() + { + $request = $this->http->request("POST", "{$this->workspace}/oauth2/token", [ + "form_params" => [ + "grant_type" => "password", + "scope" => "*", + "client_id" => $this->clientId, + "client_secret" => $this->clientSecret, + "username" => $this->user, + "password" => $this->password + ] + ]); + + //Here is to verify if the connection to the endpoint was satisfactory, + //so the connection status should be 200. + $statusCode = $request->getStatusCode(); + $this->assertEquals(200, $statusCode); + + //If the endpoint has responded we can obtain the data and verify if it + //is what we expected. + $contents = $request->getBody()->getContents(); + $credentials = json_decode($contents); + + $this->assertNotNull($credentials); + $this->assertObjectHasAttribute('access_token', $credentials); + $this->assertObjectHasAttribute('expires_in', $credentials); + $this->assertObjectHasAttribute('refresh_token', $credentials); + $this->assertObjectHasAttribute('scope', $credentials); + $this->assertObjectHasAttribute('token_type', $credentials); + + $this->authorization = ucwords($credentials->token_type) . " {$credentials->access_token}"; + } + + /** + * Get current collection list unassigned. + * @return collection + */ + private function getCollectionListUnassigned() + { + //Create process + $process = factory(Process::class)->create(); + + //Get user + $user = User::select() + ->where('USR_USERNAME', '=', $this->user) + ->first(); + + //Create a task self service + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + + //Assign a user in the task + factory(TaskUser::class, 1)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + + //Create a record in list unassigned + $listUnassigned = factory(ListUnassigned::class, 15)->create([ + 'TAS_ID' => $task->TAS_ID, + 'DEL_PREVIOUS_USR_UID' => $user->USR_UID + ]); + + $result = $listUnassigned->sortByDesc('DEL_DELEGATE_DATE'); + + return $result; + } + + /** + * Changes the data to the format returned by REST API. + * @param array $collection + * @return array + */ + private function normalizeData($collection) + { + $result = []; + $collection->transform(function ($item, $key) use (&$result) { + $value = [ + 'caseId' => $item->APP_UID, + //The current EndPoint returns this value as a string, an Eloquent + //collection takes into account the string and numeric types. + 'delIndex' => (string) $item->DEL_INDEX, + 'task' => [ + 'taskId' => $item->TAS_UID, + 'name' => $item->APP_TAS_TITLE + ], + 'process' => [ + 'processId' => $item->PRO_UID, + 'name' => $item->APP_PRO_TITLE + ], + //The current EndPoint returns this value as a string, an Eloquent + //collection takes into account the string and numeric types. + 'caseNumber' => (string) $item->APP_NUMBER, + 'caseTitle' => $item->APP_TITLE, + 'date' => $item->APP_UPDATE_DATE->format('Y-m-d H:i:s'), + 'delegateDate' => $item->DEL_DELEGATE_DATE->format('Y-m-d H:i:s'), + 'prevUser' => [ + 'userId' => $item->DEL_PREVIOUS_USR_UID, + 'userName' => $item->DEL_PREVIOUS_USR_USERNAME, + 'firstName' => $item->DEL_PREVIOUS_USR_FIRSTNAME, + 'lastName' => $item->DEL_PREVIOUS_USR_LASTNAME + ], + 'dueDate' => $item->DEL_DUE_DATE->format('Y-m-d H:i:s'), + ]; + $result[] = $value; + }); + + $converted = DateTime::convertUtcToIso8601($result, $this->optionsForConvertDatetime); + + //Convert the elements to an object + $object = json_decode(json_encode($converted)); + + return $object; + } + + /** + * This returns an array of arrays to test the $start and $limit parameters. + * The values correspond to the following structure: + * [ + * [$page, $size, $start, $limit], + * [$page, $size, $start, $limit], + * [$page, $size, $start, $limit], + * ] + * $page and $size are necessary to test the pages we expect to have from the + * model collection. + * @return array + */ + public function pagesProvider() + { + return [ + [1, 5, 0, 5], + [2, 5, 5, 5], + [3, 5, 10, 5], + [4, 5, 15, 5], + [5, 5, 20, 5], + [6, 5, 25, 5] + ]; + } + + /** + * This check if the endpoint {workspace}/light/unassigned, is returning all data. + * @test + * @covers ProcessMaker\Services\Api\Light::doGetCasesListUnassigned + */ + public function it_should_get_all_data_without_start_and_limit_values() + { + $listUnassigned = $this->getCollectionListUnassigned(); + + $this->getAuthorization(); + $request = $this->http->request("GET", "api/1.0/{$this->workspace}/light/unassigned", [ + "headers" => [ + "Authorization" => $this->authorization + ] + ]); + + //Here is to verify if the connection to the endpoint was satisfactory, + //so the connection status should be 200. + $statusCode = $request->getStatusCode(); + $this->assertEquals(200, $statusCode); + + //If the endpoint has responded we can obtain the data and verify if it + //is what we expected. + $expected = $this->normalizeData($listUnassigned); + $contents = $request->getBody()->getContents(); + $content = json_decode($contents); + + $this->assertEquals($expected, $content); + } + + /** + * This check if the endpoint {workspace}/light/unassigned, is returning the + * requested data set according to the start and limit parameters. The $start + * and $limit test values are obtained from the data provider pagesProvider(). + * @test + * @covers ProcessMaker\Services\Api\Light::doGetCasesListUnassigned + * @dataProvider pagesProvider + */ + public function it_should_get_data_with_start_and_limit($page, $size, $start, $limit) + { + $listUnassigned = $this->getCollectionListUnassigned(); + $result = $listUnassigned->forPage($page, $size); + + $this->getAuthorization(); + $request = $this->http->request("GET", "api/1.0/{$this->workspace}/light/unassigned?start={$start}&limit={$limit}", [ + "headers" => [ + "Authorization" => $this->authorization + ] + ]); + + //Here is to verify if the connection to the endpoint was satisfactory, + //so the connection status should be 200. + $statusCode = $request->getStatusCode(); + $this->assertEquals(200, $statusCode); + + //If the endpoint has responded we can obtain the data and verify if it + //is what we expected. + $expected = $this->normalizeData($result); + $contents = $request->getBody()->getContents(); + $content = json_decode($contents); + + $this->assertEquals($expected, $content); + } +} diff --git a/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php b/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php index aa69c2f3c..7dab112f8 100644 --- a/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php +++ b/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php @@ -35,6 +35,14 @@ class ListUnassigned extends Model return $this->belongsTo(Process::class, 'PRO_ID', 'PRO_ID'); } + /** + * Return the user this belongs to + */ + public function previousUser() + { + return $this->belongsTo(User::class, 'DEL_PREVIOUS_USR_UID', 'USR_UID'); + } + /** * Scope a query to only include specific tasks * @@ -93,7 +101,7 @@ class ListUnassigned extends Model * @param array $filters * * @return array - */ + */ public static function doCount($userUid, $filters = []) { $list = new PropelListUnassigned(); @@ -155,4 +163,3 @@ class ListUnassigned extends Model return $result; } } - diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light.php b/workflow/engine/src/ProcessMaker/Services/Api/Light.php index a1f6a80a3..f59ae6bc5 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Light.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Light.php @@ -652,10 +652,11 @@ class Light extends Api if (preg_match($this->regexNull, $newerThan)) { return []; } + $paged = ($start === 0 && $limit === 0) ? false : true; $dataList['userId'] = $this->getUserId(); $dataList['action'] = 'unassigned'; - $dataList['paged'] = false; + $dataList['paged'] = $paged; $dataList['start'] = $start; $dataList['limit'] = $limit; @@ -682,6 +683,9 @@ class Light extends Api /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ + if ($paged === true) { + $response = $response['data']; + } $result = $this->parserDataUnassigned($response); return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601); From 239eef80e67d2b2ca4fe47588745006c63e24c24 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 7 Jun 2019 10:21:13 -0400 Subject: [PATCH 09/30] PMC-809-A --- phpunit.xml | 4 + tests/bootstrap.php | 43 ++- .../ProcessMaker/Services/Api/LightTest.php | 355 ++++++++++++++++++ .../src/ProcessMaker/Model/ListUnassigned.php | 11 +- .../src/ProcessMaker/Services/Api/Light.php | 6 +- 5 files changed, 407 insertions(+), 12 deletions(-) create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php diff --git a/phpunit.xml b/phpunit.xml index dad99dd69..5ec9092ee 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -36,6 +36,10 @@ + + + + diff --git a/tests/bootstrap.php b/tests/bootstrap.php index fdee3691a..148d060d1 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -14,26 +14,46 @@ use Illuminate\Support\Facades\Schema; /** * @todo Migrate to configuration parameters */ - define('PATH_TRUNK', dirname(__DIR__)); -define('PATH_CORE', PATH_TRUNK.'/workflow/engine/'); +define('PATH_CORE', PATH_TRUNK . '/workflow/engine/'); define('PATH_CONFIG', PATH_CORE . 'config/'); -define('PATH_RBAC_CORE',dirname(__DIR__).'/rbac/engine/'); -define('PATH_DB', dirname(__DIR__).'/shared/sites/'); -define('PATH_DATA', dirname(__DIR__).'/shared/rbac/'); +$pathData = PATH_CONFIG . 'paths_installed.php'; +if (file_exists($pathData)) { + require_once $pathData; +} else { + define('PATH_DATA', dirname(__DIR__) . '/shared/rbac/'); +} +define('PATH_RBAC_CORE', dirname(__DIR__) . '/rbac/engine/'); +define('PATH_DB', dirname(__DIR__) . '/shared/sites/'); define('PATH_SEP', '/'); -define('PATH_METHODS', dirname(__DIR__).'/workflow/engine/methods/'); +define('PATH_METHODS', dirname(__DIR__) . '/workflow/engine/methods/'); define('SYS_LANG', 'en'); define('DB_ADAPTER', 'mysql'); define('SYS_SKIN', 'neoclassic'); -define('SYS_SYS', 'workflow'); -define('PATH_WORKSPACE',PATH_TRUNK.'/shared/sites/' . SYS_SYS . '/'); -define('PMTABLE_KEY','pmtable'); +define('SYS_SYS', env('MAIN_SYS_SYS', 'workflow')); +define('PATH_WORKSPACE', PATH_TRUNK . '/shared/sites/' . SYS_SYS . '/'); +define('PMTABLE_KEY', 'pmtable'); +define('PATH_WORKFLOW_MYSQL_DATA', PATH_TRUNK . '/workflow/engine/data/mysql/'); +define('PATH_RBAC_MYSQL_DATA', PATH_TRUNK . '/rbac/engine/data/mysql/'); +define('PATH_LANGUAGECONT', PATH_DATA . '/META-INF/'); + +//timezone +$_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', 'workflow')) == 1; + +//Set Time Zone +ini_set('date.timezone', $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] ? 'UTC' : env('MAIN_TIME_ZONE', 'America/New_York')); +define('TIME_ZONE', ini_get('date.timezone')); // Setup basic app services $app = require __DIR__ . '/../bootstrap/app.php'; $app->make(Kernel::class)->bootstrap(); +//Overwrite with the Processmaker env.ini configuration used in production environments +//@todo: move env.ini configuration to .env +ini_set('date.timezone', TIME_ZONE); //Set Time Zone +date_default_timezone_set(TIME_ZONE); +config(['app.timezone' => TIME_ZONE]); + // Setup our testexternal database config(['database.connections.testexternal' => [ 'driver' => 'mysql', @@ -49,6 +69,11 @@ config(['database.connections.testexternal' => [ 'engine' => null ]]); +//configuration values +config([ + "system.workspace" => SYS_SYS +]); + // Now, drop all test tables and repopulate with schema Schema::connection('testexternal')->dropIfExists('test'); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php new file mode 100644 index 000000000..c24d476cc --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php @@ -0,0 +1,355 @@ +timezone = config('app.timezone'); + $_SESSION['USR_TIME_ZONE'] = $this->timezone; + $this->baseUri = $this->getBaseUri(); + $this->workspace = env("DB_DATABASE", "test"); + $this->clientId = config("oauthClients.pm.clientId"); + $this->clientSecret = config("oauthClients.pm.clientSecret"); + $this->user = "admin"; + $this->password = "admin"; + $this->createTestSite(); + $this->http = new Client([ + "base_uri" => $this->baseUri + ]); + $this->optionsForConvertDatetime = [ + 'newerThan', + 'oldestthan', + 'date', + 'delegateDate', + 'dueDate', + 'delRiskDate' + ]; + } + + /** + * Get base uri for rest applications. + * @return string + */ + private function getBaseUri() + { + $_SERVER = $this->getServerInformation(); + $baseUri = System::getServerProtocolHost(); + + return $baseUri; + } + + /** + * Get server information. + * @return object + */ + private function getServerInformation() + { + $pathData = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . ".server_info"; + $content = file_get_contents($pathData); + $serverInfo = unserialize($content); + + return $serverInfo; + } + + /** + * This method creates a test workspace so that the endpoints can be functional, + * it is necessary to change the permissions of the directory so that other + * users can access and write to the directory, these users can be for + * example: apache2, www-data, httpd, etc... + * This method finds the license file of the active site and uses it to register + * this license in the LICENSE_MANAGER table. If there is no license file in + * the active workspace, an asersion failure will be notified. + */ + private function createTestSite() + { + //We copy the license, otherwise you will not be able to lift the site + $pathTest = PATH_DATA . "sites" . PATH_SEP . $this->workspace; + File::copyDirectory(PATH_DATA . "sites" . PATH_SEP . config("system.workspace"), $pathTest); + + //Write permission for other users for example: apache2, www-data, httpd. + passthru('chmod 777 -R ' . $pathTest . ' >> .log 2>&1'); + + $installer = new Installer(); + $options = [ + 'isset' => true, + 'name' => $this->workspace, + 'admin' => [ + 'username' => $this->user, + 'password' => $this->password + ], + 'advanced' => [ + 'ao_db_drop' => true, + 'ao_db_wf' => $this->workspace, + 'ao_db_rb' => $this->workspace, + 'ao_db_rp' => $this->workspace + ] + ]; + //The false option creates a connection to the database, necessary to create a site. + $installer->create_site($options, false); + //Now create site + $installer->create_site($options, true); + + //Important so that the dates are stored in the same timezone + file_put_contents($pathTest . "/env.ini", "time_zone ='{$this->timezone}'", FILE_APPEND); + + $matchingFiles = File::glob("{$pathTest}/*.dat"); + $this->assertNotEmpty($matchingFiles); + + //set license + $licensePath = array_pop($matchingFiles); + DB::Table("LICENSE_MANAGER")->insert([ + "LICENSE_UID" => G::generateUniqueID(), + "LICENSE_USER" => "ProcessMaker Inc", + "LICENSE_START" => "1490932800", + "LICENSE_END" => 0, + "LICENSE_SPAN" => 0, + "LICENSE_STATUS" => "ACTIVE", + "LICENSE_DATA" => file_get_contents($licensePath), + "LICENSE_PATH" => $licensePath, + "LICENSE_WORKSPACE" => $this->workspace, + "LICENSE_TYPE" => "" + ]); + } + + /** + * Get authorization values. + */ + private function getAuthorization() + { + $request = $this->http->request("POST", "{$this->workspace}/oauth2/token", [ + "form_params" => [ + "grant_type" => "password", + "scope" => "*", + "client_id" => $this->clientId, + "client_secret" => $this->clientSecret, + "username" => $this->user, + "password" => $this->password + ] + ]); + + //Here is to verify if the connection to the endpoint was satisfactory, + //so the connection status should be 200. + $statusCode = $request->getStatusCode(); + $this->assertEquals(200, $statusCode); + + //If the endpoint has responded we can obtain the data and verify if it + //is what we expected. + $contents = $request->getBody()->getContents(); + $credentials = json_decode($contents); + + $this->assertNotNull($credentials); + $this->assertObjectHasAttribute('access_token', $credentials); + $this->assertObjectHasAttribute('expires_in', $credentials); + $this->assertObjectHasAttribute('refresh_token', $credentials); + $this->assertObjectHasAttribute('scope', $credentials); + $this->assertObjectHasAttribute('token_type', $credentials); + + $this->authorization = ucwords($credentials->token_type) . " {$credentials->access_token}"; + } + + /** + * Get current collection list unassigned. + * @return collection + */ + private function getCollectionListUnassigned() + { + //Create process + $process = factory(Process::class)->create(); + + //Get user + $user = User::select() + ->where('USR_USERNAME', '=', $this->user) + ->first(); + + //Create a task self service + $task = factory(Task::class)->create([ + 'TAS_ASSIGN_TYPE' => 'SELF_SERVICE', + 'TAS_GROUP_VARIABLE' => '', + 'PRO_UID' => $process->PRO_UID + ]); + + //Assign a user in the task + factory(TaskUser::class, 1)->create([ + 'TAS_UID' => $task->TAS_UID, + 'USR_UID' => $user->USR_UID, + 'TU_RELATION' => 1, //Related to the user + 'TU_TYPE' => 1 + ]); + + //Create a record in list unassigned + $listUnassigned = factory(ListUnassigned::class, 15)->create([ + 'TAS_ID' => $task->TAS_ID, + 'DEL_PREVIOUS_USR_UID' => $user->USR_UID + ]); + + $result = $listUnassigned->sortByDesc('DEL_DELEGATE_DATE'); + + return $result; + } + + /** + * Changes the data to the format returned by REST API. + * @param array $collection + * @return array + */ + private function normalizeData($collection) + { + $result = []; + $collection->transform(function ($item, $key) use (&$result) { + $value = [ + 'caseId' => $item->APP_UID, + //The current EndPoint returns this value as a string, an Eloquent + //collection takes into account the string and numeric types. + 'delIndex' => (string) $item->DEL_INDEX, + 'task' => [ + 'taskId' => $item->TAS_UID, + 'name' => $item->APP_TAS_TITLE + ], + 'process' => [ + 'processId' => $item->PRO_UID, + 'name' => $item->APP_PRO_TITLE + ], + //The current EndPoint returns this value as a string, an Eloquent + //collection takes into account the string and numeric types. + 'caseNumber' => (string) $item->APP_NUMBER, + 'caseTitle' => $item->APP_TITLE, + 'date' => $item->APP_UPDATE_DATE->format('Y-m-d H:i:s'), + 'delegateDate' => $item->DEL_DELEGATE_DATE->format('Y-m-d H:i:s'), + 'prevUser' => [ + 'userId' => $item->DEL_PREVIOUS_USR_UID, + 'userName' => $item->DEL_PREVIOUS_USR_USERNAME, + 'firstName' => $item->DEL_PREVIOUS_USR_FIRSTNAME, + 'lastName' => $item->DEL_PREVIOUS_USR_LASTNAME + ], + 'dueDate' => $item->DEL_DUE_DATE->format('Y-m-d H:i:s'), + ]; + $result[] = $value; + }); + + $converted = DateTime::convertUtcToIso8601($result, $this->optionsForConvertDatetime); + + //Convert the elements to an object + $object = json_decode(json_encode($converted)); + + return $object; + } + + /** + * This returns an array of arrays to test the $start and $limit parameters. + * The values correspond to the following structure: + * [ + * [$page, $size, $start, $limit], + * [$page, $size, $start, $limit], + * [$page, $size, $start, $limit], + * ] + * $page and $size are necessary to test the pages we expect to have from the + * model collection. + * @return array + */ + public function pagesProvider() + { + return [ + [1, 5, 0, 5], + [2, 5, 5, 5], + [3, 5, 10, 5], + [4, 5, 15, 5], + [5, 5, 20, 5], + [6, 5, 25, 5] + ]; + } + + /** + * This check if the endpoint {workspace}/light/unassigned, is returning all data. + * @test + * @covers ProcessMaker\Services\Api\Light::doGetCasesListUnassigned + */ + public function it_should_get_all_data_without_start_and_limit_values() + { + $listUnassigned = $this->getCollectionListUnassigned(); + + $this->getAuthorization(); + $request = $this->http->request("GET", "api/1.0/{$this->workspace}/light/unassigned", [ + "headers" => [ + "Authorization" => $this->authorization + ] + ]); + + //Here is to verify if the connection to the endpoint was satisfactory, + //so the connection status should be 200. + $statusCode = $request->getStatusCode(); + $this->assertEquals(200, $statusCode); + + //If the endpoint has responded we can obtain the data and verify if it + //is what we expected. + $expected = $this->normalizeData($listUnassigned); + $contents = $request->getBody()->getContents(); + $content = json_decode($contents); + + $this->assertEquals($expected, $content); + } + + /** + * This check if the endpoint {workspace}/light/unassigned, is returning the + * requested data set according to the start and limit parameters. The $start + * and $limit test values are obtained from the data provider pagesProvider(). + * @test + * @covers ProcessMaker\Services\Api\Light::doGetCasesListUnassigned + * @dataProvider pagesProvider + */ + public function it_should_get_data_with_start_and_limit($page, $size, $start, $limit) + { + $listUnassigned = $this->getCollectionListUnassigned(); + $result = $listUnassigned->forPage($page, $size); + + $this->getAuthorization(); + $request = $this->http->request("GET", "api/1.0/{$this->workspace}/light/unassigned?start={$start}&limit={$limit}", [ + "headers" => [ + "Authorization" => $this->authorization + ] + ]); + + //Here is to verify if the connection to the endpoint was satisfactory, + //so the connection status should be 200. + $statusCode = $request->getStatusCode(); + $this->assertEquals(200, $statusCode); + + //If the endpoint has responded we can obtain the data and verify if it + //is what we expected. + $expected = $this->normalizeData($result); + $contents = $request->getBody()->getContents(); + $content = json_decode($contents); + + $this->assertEquals($expected, $content); + } +} diff --git a/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php b/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php index aa69c2f3c..7dab112f8 100644 --- a/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php +++ b/workflow/engine/src/ProcessMaker/Model/ListUnassigned.php @@ -35,6 +35,14 @@ class ListUnassigned extends Model return $this->belongsTo(Process::class, 'PRO_ID', 'PRO_ID'); } + /** + * Return the user this belongs to + */ + public function previousUser() + { + return $this->belongsTo(User::class, 'DEL_PREVIOUS_USR_UID', 'USR_UID'); + } + /** * Scope a query to only include specific tasks * @@ -93,7 +101,7 @@ class ListUnassigned extends Model * @param array $filters * * @return array - */ + */ public static function doCount($userUid, $filters = []) { $list = new PropelListUnassigned(); @@ -155,4 +163,3 @@ class ListUnassigned extends Model return $result; } } - diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light.php b/workflow/engine/src/ProcessMaker/Services/Api/Light.php index a1f6a80a3..f59ae6bc5 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Light.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Light.php @@ -652,10 +652,11 @@ class Light extends Api if (preg_match($this->regexNull, $newerThan)) { return []; } + $paged = ($start === 0 && $limit === 0) ? false : true; $dataList['userId'] = $this->getUserId(); $dataList['action'] = 'unassigned'; - $dataList['paged'] = false; + $dataList['paged'] = $paged; $dataList['start'] = $start; $dataList['limit'] = $limit; @@ -682,6 +683,9 @@ class Light extends Api /*----------------------------------********---------------------------------*/ } /*----------------------------------********---------------------------------*/ + if ($paged === true) { + $response = $response['data']; + } $result = $this->parserDataUnassigned($response); return DateTime::convertUtcToIso8601($result, $this->arrayFieldIso8601); From cc51c76b1297182cbf8b4246ba55877554ed263e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Tue, 11 Jun 2019 10:14:02 -0400 Subject: [PATCH 10/30] Revert PMC-602 --- gulliver/system/class.g.php | 113 +++---- tests/bootstrap.php | 1 - .../gulliver/system/ReplaceDataFieldTest.php | 280 ------------------ workflow/engine/classes/Cases.php | 32 +- workflow/engine/classes/WsBase.php | 2 +- .../engine/classes/model/OutputDocument.php | 102 +++---- .../BusinessModel/Cases/OutputDocument.php | 98 +++--- .../engine/src/ProcessMaker/Util/helpers.php | 27 -- 8 files changed, 143 insertions(+), 512 deletions(-) delete mode 100644 tests/unit/gulliver/system/ReplaceDataFieldTest.php diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index a00bdc624..60207b1be 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -1636,16 +1636,13 @@ class G /** * Escapes special characters in a string for use in a SQL statement - * @param string $sqlString The string to be escaped - * @param string $dbEngine Target DBMS - * - * @return string - */ - public static function sqlEscape($sqlString, $dbEngine = DB_ADAPTER) + * @param string $sqlString The string to be escaped + * @param string $DBEngine Target DBMS + */ + public function sqlEscape($sqlString, $DBEngine = DB_ADAPTER) { - // @todo: Research why always this value is set with the same constant? - $dbEngine = DB_ADAPTER; - switch ($dbEngine) { + $DBEngine = DB_ADAPTER; + switch ($DBEngine) { case 'mysql': $con = Propel::getConnection('workflow'); return mysqli_real_escape_string($con->getResource(), stripslashes($sqlString)); @@ -1692,15 +1689,9 @@ class G * @# Non-quoted parameter * @! Evaluate string : Replace the parameters in value and then in the sql string * @fn() Evaluate string with the function "fn" - * - * @param string $sqlString - * @param array $result - * @param string $dbEngine - * @param bool $applyHtmlEntities - * - * @return string + * @author David Callizaya */ - public static function replaceDataField($sqlString, $result, $dbEngine = 'mysql', $applyHtmlEntities = false) + public static function replaceDataField($sqlString, $result, $DBEngine = 'mysql') { if (!is_array($result)) { $result = array(); @@ -1719,12 +1710,7 @@ class G $u = $match[0][$r][1] + strlen($match[0][$r][0]); //Mysql quotes scape if (($match[1][$r][0] == '@') && (isset($result[$match[2][$r][0]]))) { - $text = ($applyHtmlEntities && !stringIsValidHtml($result[$match[2][$r][0]])) ? - htmlentities(G::unhtmlentities($result[$match[2][$r][0]]), ENT_COMPAT, 'UTF-8') : - $result[$match[2][$r][0]]; - // Replenish the tag
because is valid - $text = str_replace('<br />', '
', $text); - $__textoEval .= "\"" . G::sqlEscape($text, $dbEngine) . "\""; + $__textoEval .= "\"" . G::sqlEscape($result[$match[2][$r][0]], $DBEngine) . "\""; continue; } //URL encode @@ -1744,7 +1730,7 @@ class G } //Substring (Sub replaceDataField) if (($match[1][$r][0] == '!') && (isset($result[$match[2][$r][0]]))) { - $__textoEval .= G::replaceDataField($result[$match[2][$r][0]], $result, $dbEngine, $applyHtmlEntities); + $__textoEval .= G::replaceDataField($result[$match[2][$r][0]], $result); continue; } //Call function @@ -1762,33 +1748,18 @@ class G } //Non-quoted if (($match[1][$r][0] == '#') && (isset($result[$match[2][$r][0]]))) { - $text = ($applyHtmlEntities && !stringIsValidHtml($result[$match[2][$r][0]]) && $match[2][$r][0] !== '__ABE__') ? - htmlentities(G::unhtmlentities($result[$match[2][$r][0]]), ENT_COMPAT, 'UTF-8') : - $result[$match[2][$r][0]]; - // Replenish the tag
because is valid - $text = str_replace('<br />', '
', $text); - $__textoEval .= G::replaceDataField($text, $result); + $__textoEval .= G::replaceDataField($result[$match[2][$r][0]], $result); continue; } //Non-quoted = if (($match[1][$r][0] == '=') && (isset($result[$match[2][$r][0]]))) { - $text = ($applyHtmlEntities && !stringIsValidHtml($result[$match[2][$r][0]]) && $match[2][$r][0] !== '__ABE__') ? - htmlentities(G::unhtmlentities($result[$match[2][$r][0]]), ENT_COMPAT, 'UTF-8') : - $result[$match[2][$r][0]]; - // Replenish the tag
because is valid - $text = str_replace('<br />', '
', $text); - $__textoEval .= G::replaceDataField($text, $result); + $__textoEval .= G::replaceDataField($result[$match[2][$r][0]], $result); continue; } //Objects attributes if (($match[1][$r][0] == '&') && (isset($result[$match[2][$r][0]]))) { if (isset($result[$match[2][$r][0]]->{$match[6][$r][0]})) { - $text = ($applyHtmlEntities && !stringIsValidHtml($result[$match[2][$r][0]]->{$match[6][$r][0]})) ? - htmlentities(G::unhtmlentities($result[$match[2][$r][0]]->{$match[6][$r][0]}), ENT_COMPAT, 'UTF-8') : - $result[$match[2][$r][0]]->{$match[6][$r][0]}; - // Replenish the tag
because is valid - $text = str_replace('<br />', '
', $text); - $__textoEval .= $text; + $__textoEval .= $result[$match[2][$r][0]]->{$match[6][$r][0]}; } continue; } @@ -1800,35 +1771,27 @@ class G } /** - * Replace Grid Values in a string. - * The tag @>GRID-NAME to open the grid and @sendMessage() - * @see \WsBase->sendMessage() - * @see \OutputDocument->generate() - * @see \ProcessMaker\BusinessModel\Cases\OutputDocument->generate() - */ - public static function replaceDataGridField($content, $fields, $nl2brRecursive = true, $applyHtmlEntities = false) + * Replace Grid Values + * The tag @>GRID-NAME to open the grid and @])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', - $strContentAux, $arrayMatch1, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); + $iOcurrences = preg_match_all('/\@(?:([\>])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*(?:[\\\\][\w\W])?)*)\))((?:\s*\[[\'"]?\w+[\'"]?\])+)?/', $strContentAux, $arrayMatch1, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE); - if ($occurrences) { + if ($iOcurrences) { $arrayGrid = array(); - for ($i = 0; $i <= $occurrences - 1; $i++) { + for ($i = 0; $i <= $iOcurrences - 1; $i++) { $arrayGrid[] = $arrayMatch1[2][$i][0]; } @@ -1854,16 +1817,16 @@ class G while (preg_match($ereg, $strContentAux1, $arrayMatch2)) { $strData = null; - if (isset($fields[$grdName]) && is_array($fields[$grdName])) { - foreach ($fields[$grdName] as $aRow) { + if (isset($aFields[$grdName]) && is_array($aFields[$grdName])) { + foreach ($aFields[$grdName] as $aRow) { if ($nl2brRecursive) { - foreach ($aRow as $key => $item) { - if (!is_array($item)) { - $aRow[$key] = str_replace($nrt, $nrthtml, nl2br($aRow[$key])); + foreach ($aRow as $sKey => $vValue) { + if (!is_array($vValue)) { + $aRow[$sKey] = str_replace($nrt, $nrthtml, nl2br($aRow[$sKey])); } } } - $strData = $strData . G::replaceDataField($arrayMatch2[2], $aRow, 'mysql', $applyHtmlEntities); + $strData = $strData . G::replaceDataField($arrayMatch2[2], $aRow); } } @@ -1878,19 +1841,19 @@ class G $strContentAux = str_replace($nrthtml, $nrt, $strContentAux); - $content = $strContentAux; + $sContent = $strContentAux; if ($nl2brRecursive) { - foreach ($fields as $key => $item) { - if (!is_array($item) && !is_object($item)) { - $fields[$key] = nl2br($fields[$key]); + foreach ($aFields as $sKey => $vValue) { + if (!is_array($vValue) && !is_object($vValue)) { + $aFields[$sKey] = nl2br($aFields[$sKey]); } } } - $content = G::replaceDataField($content, $fields, 'mysql', $applyHtmlEntities); + $sContent = G::replaceDataField($sContent, $aFields); - return $content; + return $sContent; } /** diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 148d060d1..895c470da 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -28,7 +28,6 @@ define('PATH_DB', dirname(__DIR__) . '/shared/sites/'); define('PATH_SEP', '/'); define('PATH_METHODS', dirname(__DIR__) . '/workflow/engine/methods/'); define('SYS_LANG', 'en'); -define('DB_ADAPTER', 'mysql'); define('SYS_SKIN', 'neoclassic'); define('SYS_SYS', env('MAIN_SYS_SYS', 'workflow')); define('PATH_WORKSPACE', PATH_TRUNK . '/shared/sites/' . SYS_SYS . '/'); diff --git a/tests/unit/gulliver/system/ReplaceDataFieldTest.php b/tests/unit/gulliver/system/ReplaceDataFieldTest.php deleted file mode 100644 index c1081304e..000000000 --- a/tests/unit/gulliver/system/ReplaceDataFieldTest.php +++ /dev/null @@ -1,280 +0,0 @@ -value'; - $dbEngine = 'mysql'; // This only affects the way to escape the variables with "@@" prefix - $applyEntities = true; // If a value to replace is a not valid HTML and have HTML reserved characters, entities should be applied - - // Initializing variables to test the assertions, entities should be applied in variable with @@ - $var4 = new stdClass(); - $var4->value = $faker->words(1, true); - $valuesToReplace = [ - 'var1' => 'Java < PHP & Python', - 'var2' => $faker->words(1, true), - 'var3' => $faker->words(1, true), - 'var4' => $var4 - ]; - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('/</', $stringToCheck); - $this->assertRegExp('/&/', $stringToCheck); - - // Initializing variables to test the assertions, entities should be applied in variable with @# - $var4 = new stdClass(); - $var4->value = $faker->words(1, true); - $valuesToReplace = [ - 'var1' => $faker->words(1, true), - 'var2' => 'Java < PHP & Python', - 'var3' => $faker->words(1, true), - 'var4' => $var4 - ]; - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('/</', $stringToCheck); - $this->assertRegExp('/&/', $stringToCheck); - - // Initializing variables to test the assertions, entities should be applied in variable with @= - $var4 = new stdClass(); - $var4->value = $faker->words(1, true); - $valuesToReplace = [ - 'var1' => $faker->words(1, true), - 'var2' => $faker->words(1, true), - 'var3' => 'Java < PHP & Python', - 'var4' => $var4 - ]; - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('/</', $stringToCheck); - $this->assertRegExp('/&/', $stringToCheck); - - // Initializing variables to test the assertions, entities should be applied in variable with @& - $var4 = new stdClass(); - $var4->value = 'Java < PHP & Python'; - $valuesToReplace = [ - 'var1' => $faker->words(1, true), - 'var2' => $faker->words(1, true), - 'var3' => $faker->words(1, true), - 'var4' => $var4 - ]; - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('/</', $stringToCheck); - $this->assertRegExp('/&/', $stringToCheck); - } - - /** - * This checks that strings with HTML reserved characters are NOT replaced with entities - * @test - * @covers G::replaceDataField - */ - public function it_should_no_replace_entities() - { - // Initializing Faker instance - $faker = Faker\Factory::create(); - - // Initializing variables to use that will not change - $stringWithVariablesToReplace = 'Hello @@var1 the @#var2 is @=var3 not @&var4->value'; - $dbEngine = 'mysql'; // This only affects the way to escape the variables with "@@" prefix - $applyEntities = false; // The values should not be replaced with entities - - // Initializing variables to test the assertions, entities should be applied in variable with @@ - $var4 = new stdClass(); - $var4->value = $faker->words(1, true); - $valuesToReplace = [ - 'var1' => 'Java < PHP & Python', - 'var2' => $faker->words(1, true), - 'var3' => $faker->words(1, true), - 'var4' => $var4 - ]; - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('/assertRegExp('/&/', $stringToCheck); - - // Initializing variables to test the assertions, entities should be applied in variable with @# - $var4 = new stdClass(); - $var4->value = $faker->words(1, true); - $valuesToReplace = [ - 'var1' => $faker->words(1, true), - 'var2' => 'Java < PHP & Python', - 'var3' => $faker->words(1, true), - 'var4' => $var4 - ]; - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('/assertRegExp('/&/', $stringToCheck); - - // Initializing variables to test the assertions, entities should be applied in variable with @= - $var4 = new stdClass(); - $var4->value = $faker->words(1, true); - $valuesToReplace = [ - 'var1' => $faker->words(1, true), - 'var2' => $faker->words(1, true), - 'var3' => 'Java < PHP & Python', - 'var4' => $var4 - ]; - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('/assertRegExp('/&/', $stringToCheck); - - // Initializing variables to test the assertions, entities should be applied in variable with @& - $var4 = new stdClass(); - $var4->value = 'Java < PHP & Python'; - $valuesToReplace = [ - 'var1' => $faker->words(1, true), - 'var2' => $faker->words(1, true), - 'var3' => $faker->words(1, true), - 'var4' => $var4 - ]; - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('/assertRegExp('/&/', $stringToCheck); - } - - /** - * This checks that strings with HTML reserved characters are NOT replaced with entities if is a valid HTML, because - * PS team sometimes build a HTML string to insert in templates (output documents or emails), Ex.- A table to list - * users or results from a query - * @test - * @covers G::replaceDataField - */ - public function it_should_no_replace_entities_if_exists_valid_html() - { - // Initializing Faker instance - $faker = Faker\Factory::create(); - - // Initializing variables to use - $stringWithVariablesToReplace = 'bla @#var1 bla @=listHtml bla @@var2 bla'; - $valuesToReplace = [ - 'var1' => $faker->words(1, true), - 'listHtml' => ' - - - - - - - - - - - - - - - - -
t1t2t3t4t5t6
c1c2c3c4c5c6
', - 'var2' => $faker->words(1, true) - ]; - $dbEngine = 'mysql'; // This only affects the way to escape the variables with "@@" prefix - $applyEntities = true; // Is true because the string will b used in a output document or a email template - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithVariablesToReplace, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp('//', $stringToCheck); - $this->assertRegExp('//', $stringToCheck); - $this->assertRegExp('/
/', $stringToCheck); - $this->assertRegExp('//', $stringToCheck); - } - - /** - * This checks that strings with tag
should not be replaced, because is a valid tag - * @test - * @covers G::replaceDataField - */ - public function it_should_no_replace_tag_br() - { - // Initializing variables to use - $stringWithTagBr = nl2br("prospection auprès d'entreprises de CA < 10 M euros -test -a -&a -\"a -'a -¢a -£a -¥a -€a -©a -®a -test"); - $valuesToReplace = []; - $dbEngine = 'mysql'; // This only affects the way to escape the variables with "@@" prefix - $applyEntities = true; // Is true because the string will be used in a output document or a email template - - // Replace variables in the string - $stringToCheck = G::replaceDataField($stringWithTagBr, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp("/
/", $stringToCheck); - } - - /** - * Check that the value for the System variable "__ABE__" should not be replaced never - * @test - * @covers G::replaceDataField - */ - public function it_should_no_replace_entities_for_var_abe() - { - // Initializing variables to use - $string = "bla @#__ABE__ bla @#anotherVar bla"; - $valuesToReplace = [// Add a value for reserved system variable "__ABE__" used in Actions By Email feature - '__ABE__' => 'Java < PHP', // The value for System variable "__ABE__" shouldn't be changed never - 'anotherVar' => '.NET < Java' // The value for another variables should be validated/replaced normally - ]; - $dbEngine = 'mysql'; // This only affects the way to escape the variables with "@@" prefix - $applyEntities = true; // Is true because the string will be used in a output document or a email template - - // Replace variables in the string - $stringToCheck = G::replaceDataField($string, $valuesToReplace, $dbEngine, $applyEntities); - - // Assertions - $this->assertRegExp("/Java < PHP/", $stringToCheck); - $this->assertRegExp("/.NET < Java/", $stringToCheck); - } -} diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index 0718aa6bb..85f17b524 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -5612,30 +5612,30 @@ class Cases /** * This function send an email for each task in $arrayTask if $to is definded * - * @param array $dataLastEmail - * @param array $arrayData - * @param array $arrayTask + * @param $dataLastEmail + * @param $arrayData + * @param $arrayTask * @return void * * @see \Cases->sendNotifications() */ public function sendMessage($dataLastEmail, $arrayData, $arrayTask) { - foreach ($arrayTask as $theTask) { + foreach ($arrayTask as $aTask) { //Check and fix if Task Id is complex - if (strpos($theTask['TAS_UID'], "/") !== false) { - $aux = explode("/", $theTask['TAS_UID']); + if (strpos($aTask['TAS_UID'], "/") !== false) { + $aux = explode("/", $aTask['TAS_UID']); if (isset($aux[1])) { - $theTask['TAS_UID'] = $aux[1]; + $aTask['TAS_UID'] = $aux[1]; } } //if the next is EOP dont send notification and continue with the next - if ($theTask['TAS_UID'] === '-1') { + if ($aTask['TAS_UID'] === '-1') { continue; } - if (isset($theTask['DEL_INDEX'])) { + if (isset($aTask['DEL_INDEX'])) { $arrayData2 = $arrayData; - $appDelegation = AppDelegationPeer::retrieveByPK($dataLastEmail['applicationUid'], $theTask['DEL_INDEX']); + $appDelegation = AppDelegationPeer::retrieveByPK($dataLastEmail['applicationUid'], $aTask['DEL_INDEX']); if (!is_null($appDelegation)) { $oTaskUpd = new Task(); $aTaskUpdate = $oTaskUpd->load($appDelegation->getTasUid()); @@ -5646,25 +5646,25 @@ class Cases $arrayData2 = $arrayData; } - if (isset($theTask['USR_UID']) && !empty($theTask['USR_UID'])) { + if (isset($aTask['USR_UID']) && !empty($aTask['USR_UID'])) { $user = new \ProcessMaker\BusinessModel\User(); - $arrayUserData = $user->getUser($theTask['USR_UID'], true); + $arrayUserData = $user->getUser($aTask['USR_UID'], true); $arrayData2 = \ProcessMaker\Util\DateTime::convertUtcToTimeZone($arrayData2, (trim($arrayUserData['USR_TIME_ZONE']) != '') ? trim($arrayUserData['USR_TIME_ZONE']) : \ProcessMaker\Util\System::getTimeZone()); } else { $arrayData2 = \ProcessMaker\Util\DateTime::convertUtcToTimeZone($arrayData2); } - $body2 = G::replaceDataGridField($dataLastEmail['body'], $arrayData2, false, true); + $body2 = G::replaceDataGridField($dataLastEmail['body'], $arrayData2, false); $to = null; $cc = ''; - if ($theTask['TAS_UID'] != '-1') { - $respTo = $this->getTo($theTask['TAS_UID'], $theTask['USR_UID'], $arrayData); + if ($aTask['TAS_UID'] != '-1') { + $respTo = $this->getTo($aTask['TAS_UID'], $aTask['USR_UID'], $arrayData); $to = $respTo['to']; $cc = $respTo['cc']; } - if ($theTask["TAS_ASSIGN_TYPE"] === "SELF_SERVICE") { + if ($aTask ["TAS_ASSIGN_TYPE"] === "SELF_SERVICE") { if ($dataLastEmail['swtplDefault'] == 1) { G::verifyPath($dataLastEmail['pathEmail'], true); // Create if it does not exist $fileTemplate = $dataLastEmail['pathEmail'] . G::LoadTranslation('ID_UNASSIGNED_MESSAGE'); diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php index ebea4bbe4..afedb88ec 100644 --- a/workflow/engine/classes/WsBase.php +++ b/workflow/engine/classes/WsBase.php @@ -990,7 +990,7 @@ class WsBase $subject, G::buildFrom($setup, $from), $to, - G::replaceDataGridField(file_get_contents($fileTemplate), $fieldsCase, false, true), + G::replaceDataGridField(file_get_contents($fileTemplate), $fieldsCase, false), $cc, $bcc, '', diff --git a/workflow/engine/classes/model/OutputDocument.php b/workflow/engine/classes/model/OutputDocument.php index 3d8f393e4..37da4fbf9 100644 --- a/workflow/engine/classes/model/OutputDocument.php +++ b/workflow/engine/classes/model/OutputDocument.php @@ -508,29 +508,20 @@ class OutputDocument extends BaseOutputDocument } } - /** + /* * Generate the output document - * - * @param string $outDocUid - * @param array $caseFields - * @param string $path - * @param string $filename - * @param string $content - * @param bool $landscape - * @param string $typeDocsToGen - * @param array $properties - * - * @return mixed - * - * @see workflow/engine/methods/cases/cases_Step.php - * @see workflow/engine/classes/class.pmFunctions.php:PMFGenerateOutputDocument() + * @param string $sUID + * @param array $aFields + * @param string $sPath + * @return variant */ - public function generate($outDocUid, $caseFields, $path, $filename, $content, $landscape = false, $typeDocsToGen = 'BOTH', $properties = []) - { - if (($outDocUid != '') && is_array($caseFields) && ($path != '')) { - $content = G::replaceDataGridField($content, $caseFields, true, true); - if (strpos($content, ''; - $fp = fopen($path . $filename . '_smarty.html', 'wb'); - fwrite($fp, $content); - fclose($fp); - $template->templateFile = $path . $filename . '_smarty.html'; + $oFile = fopen($sPath . $sFilename . '_smarty.html', 'wb'); + fwrite($oFile, $sContent); + fclose($oFile); + $template->templateFile = $sPath . $sFilename . '_smarty.html'; //assign the variables and use the template $template - $template->assign($caseFields); - $content = $template->fetch($template->templateFile); + $template->assign($aFields); + $sContent = $template->fetch($template->templateFile); unlink($template->templateFile); } - G::verifyPath($path, true); + G::verifyPath($sPath, true); //Start - Create .doc - $fp = fopen($path . $filename . '.doc', 'wb'); + $oFile = fopen($sPath . $sFilename . '.doc', 'wb'); $size = []; $size["Letter"] = "216mm 279mm"; @@ -575,7 +566,6 @@ class OutputDocument extends BaseOutputDocument $size["Screenshot800"] = "800mm 600mm"; $size["Screenshot1024"] = "1024mm 768mm"; - $sizeLandscape = []; $sizeLandscape["Letter"] = "279mm 216mm"; $sizeLandscape["Legal"] = "357mm 216mm"; $sizeLandscape["Executive"] = "267mm 184mm"; @@ -597,41 +587,41 @@ class OutputDocument extends BaseOutputDocument $sizeLandscape["Screenshot800"] = "600mm 800mm"; $sizeLandscape["Screenshot1024"] = "768mm 1024mm"; - if (!isset($properties['media'])) { - $properties['media'] = 'Letter'; + if (!isset($aProperties['media'])) { + $aProperties['media'] = 'Letter'; } - if ($landscape) { - $media = $sizeLandscape[$properties['media']]; + if ($sLandscape) { + $media = $sizeLandscape[$aProperties['media']]; } else { - $media = $size[$properties['media']]; + $media = $size[$aProperties['media']]; } $marginLeft = '15'; - if (isset($properties['margins']['left'])) { - $marginLeft = $properties['margins']['left']; + if (isset($aProperties['margins']['left'])) { + $marginLeft = $aProperties['margins']['left']; } $marginRight = '15'; - if (isset($properties['margins']['right'])) { - $marginRight = $properties['margins']['right']; + if (isset($aProperties['margins']['right'])) { + $marginRight = $aProperties['margins']['right']; } $marginTop = '15'; - if (isset($properties['margins']['top'])) { - $marginTop = $properties['margins']['top']; + if (isset($aProperties['margins']['top'])) { + $marginTop = $aProperties['margins']['top']; } $marginBottom = '15'; - if (isset($properties['margins']['bottom'])) { - $marginBottom = $properties['margins']['bottom']; + if (isset($aProperties['margins']['bottom'])) { + $marginBottom = $aProperties['margins']['bottom']; } - fwrite($fp, ' @@ -677,31 +667,31 @@ class OutputDocument extends BaseOutputDocument
'); - fwrite($fp, $content); - fwrite($fp, "\n
\n\n"); - fclose($fp); + fwrite($oFile, $sContent); + fwrite($oFile, "\n\n\n"); + fclose($oFile); /* End - Create .doc */ - if ($typeDocsToGen == 'BOTH' || $typeDocsToGen == 'PDF') { - $fp = fopen($path . $filename . '.html', 'wb'); - fwrite($fp, $content); - fclose($fp); + if ($sTypeDocToGener == 'BOTH' || $sTypeDocToGener == 'PDF') { + $oFile = fopen($sPath . $sFilename . '.html', 'wb'); + fwrite($oFile, $sContent); + fclose($oFile); /* Start - Create .pdf */ - if (isset($properties['report_generator'])) { - switch ($properties['report_generator']) { + if (isset($aProperties['report_generator'])) { + switch ($aProperties['report_generator']) { case 'TCPDF': - $this->generateTcpdf($outDocUid, $caseFields, $path, $filename, $content, $landscape, $properties); + $this->generateTcpdf($sUID, $aFields, $sPath, $sFilename, $sContent, $sLandscape, $aProperties); break; case 'HTML2PDF': default: - $this->generateHtml2ps_pdf($outDocUid, $caseFields, $path, $filename, $content, $landscape, $properties); + $this->generateHtml2ps_pdf($sUID, $aFields, $sPath, $sFilename, $sContent, $sLandscape, $aProperties); break; } } else { - $this->generateHtml2ps_pdf($outDocUid, $caseFields, $path, $filename, $content, $landscape, $properties); + $this->generateHtml2ps_pdf($sUID, $aFields, $sPath, $sFilename, $sContent, $sLandscape, $aProperties); } } - //end if $typeDocsToGen + //end if $sTypeDocToGener /* End - Create .pdf */ } else { return PEAR::raiseError( diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php index 553dd35e5..01652bfd9 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php @@ -1,9 +1,6 @@ addCasesOutputDocument() + * @param string $sUID + * @param array $aFields + * @param string $sPath + * @return variant */ - public function generate($outDocUid, $caseFields, $path, $filename, $content, $landscape = false, $typeDocsToGen = 'BOTH', $properties = [], $application = '') + public function generate($sUID, $aFields, $sPath, $sFilename, $sContent, $sLandscape = false, $sTypeDocToGener = 'BOTH', $aProperties = array(), $sApplication) { - if (($outDocUid != '') && is_array($caseFields) && ($path != '')) { - $content = G::replaceDataGridField($content, $caseFields, true, true); - G::verifyPath($path, true); + if (($sUID != '') && is_array($aFields) && ($sPath != '')) { + $sContent = \G::replaceDataGridField($sContent, $aFields); + \G::verifyPath($sPath, true); //Start - Create .doc - $fp = fopen($path . $filename . '.doc', 'wb'); - $size = []; + $oFile = fopen($sPath . $sFilename . '.doc', 'wb'); + $size = array(); $size["Letter"] = "216mm 279mm"; $size["Legal"] = "216mm 357mm"; $size["Executive"] = "184mm 267mm"; @@ -640,7 +627,6 @@ class OutputDocument $size["Screenshot640"] = "640mm 480mm"; $size["Screenshot800"] = "800mm 600mm"; $size["Screenshot1024"] = "1024mm 768mm"; - $sizeLandscape = []; $sizeLandscape["Letter"] = "279mm 216mm"; $sizeLandscape["Legal"] = "357mm 216mm"; $sizeLandscape["Executive"] = "267mm 184mm"; @@ -661,31 +647,31 @@ class OutputDocument $sizeLandscape["Screenshot640"] = "480mm 640mm"; $sizeLandscape["Screenshot800"] = "600mm 800mm"; $sizeLandscape["Screenshot1024"] = "768mm 1024mm"; - if (!isset($properties['media'])) { - $properties['media'] = 'Letter'; + if (!isset($aProperties['media'])) { + $aProperties['media'] = 'Letter'; } - if ($landscape) { - $media = $sizeLandscape[$properties['media']]; + if ($sLandscape) { + $media = $sizeLandscape[$aProperties['media']]; } else { - $media = $size[$properties['media']]; + $media = $size[$aProperties['media']]; } $marginLeft = '15'; - if (isset($properties['margins']['left'])) { - $marginLeft = $properties['margins']['left']; + if (isset($aProperties['margins']['left'])) { + $marginLeft = $aProperties['margins']['left']; } $marginRight = '15'; - if (isset($properties['margins']['right'])) { - $marginRight = $properties['margins']['right']; + if (isset($aProperties['margins']['right'])) { + $marginRight = $aProperties['margins']['right']; } $marginTop = '15'; - if (isset($properties['margins']['top'])) { - $marginTop = $properties['margins']['top']; + if (isset($aProperties['margins']['top'])) { + $marginTop = $aProperties['margins']['top']; } $marginBottom = '15'; - if (isset($properties['margins']['bottom'])) { - $marginBottom = $properties['margins']['bottom']; + if (isset($aProperties['margins']['bottom'])) { + $marginBottom = $aProperties['margins']['bottom']; } - fwrite($fp, ' @@ -730,40 +716,40 @@ class OutputDocument
'); - fwrite($fp, $content); - fwrite($fp, "\n
\n\n"); - fclose($fp); + fwrite($oFile, $sContent); + fwrite($oFile, "\n\n\n"); + fclose($oFile); /* End - Create .doc */ - if ($typeDocsToGen == 'BOTH' || $typeDocsToGen == 'PDF') { - $fp = fopen($path . $filename . '.html', 'wb'); - fwrite($fp, $content); - fclose($fp); + if ($sTypeDocToGener == 'BOTH' || $sTypeDocToGener == 'PDF') { + $oFile = fopen($sPath . $sFilename . '.html', 'wb'); + fwrite($oFile, $sContent); + fclose($oFile); /* Start - Create .pdf */ - if (isset($properties['report_generator'])) { - switch ($properties['report_generator']) { + if (isset($aProperties['report_generator'])) { + switch ($aProperties['report_generator']) { case 'TCPDF': - $o = new ClassesOutputDocument(); - if (strlen($content) == 0) { + $o = new \OutputDocument(); + if (strlen($sContent) == 0) { libxml_use_internal_errors(true); - $o->generateTcpdf($outDocUid, $caseFields, $path, $filename, ' ', $landscape, $properties); + $o->generateTcpdf($sUID, $aFields, $sPath, $sFilename, ' ', $sLandscape, $aProperties); libxml_use_internal_errors(false); } else { - $o->generateTcpdf($outDocUid, $caseFields, $path, $filename, $content, $landscape, $properties); + $o->generateTcpdf($sUID, $aFields, $sPath, $sFilename, $sContent, $sLandscape, $aProperties); } break; case 'HTML2PDF': default: - $this->generateHtml2ps_pdf($outDocUid, $caseFields, $path, $filename, $content, $landscape, $properties, $application); + $this->generateHtml2ps_pdf($sUID, $aFields, $sPath, $sFilename, $sContent, $sLandscape, $aProperties, $sApplication); break; } } else { - $this->generateHtml2ps_pdf($outDocUid, $caseFields, $path, $filename, $content, $landscape, $properties); + $this->generateHtml2ps_pdf($sUID, $aFields, $sPath, $sFilename, $sContent, $sLandscape, $aProperties); } } - //end if $typeDocsToGen + //end if $sTypeDocToGener /* End - Create .pdf */ } else { - return PEAR::raiseError( + return \PEAR::raiseError( null, G_ERROR_USER_UID, null, diff --git a/workflow/engine/src/ProcessMaker/Util/helpers.php b/workflow/engine/src/ProcessMaker/Util/helpers.php index 684569b0f..b3d93a2ae 100644 --- a/workflow/engine/src/ProcessMaker/Util/helpers.php +++ b/workflow/engine/src/ProcessMaker/Util/helpers.php @@ -485,33 +485,6 @@ function csrfToken() return isset($_SESSION['USR_CSRF_TOKEN']) ? $_SESSION['USR_CSRF_TOKEN'] : ''; } -/** - * Check if a string is a valid HTML code - * - * @param string $string - * - * @return bool - * - * @see G::replaceDataField() - */ -function stringIsValidHtml($string) -{ - // To validate we use the DOMDocument class - $doc = new DOMDocument('1.0', 'UTF-8'); - - // Clean previous errors - libxml_clear_errors(); - - // This line have to be silenced because if the string is not an HTML a Warning is displayed - @$doc->loadHTML($string); - - // Get last error parsing the HTML - $libXmlError = libxml_get_last_error(); - - // If the attribute "textContent" is empty or exists libxml errors, is not a valid HTML - return $doc->textContent !== '' && empty($libXmlError); -} - // Methods deleted in PHP 7.x, added in this file in order to keep compatibility with old libraries included/used in ProcessMaker if (!function_exists('set_magic_quotes_runtime')) { function set_magic_quotes_runtime($value) { From e2cf0a95abe215172645fb47646c29b7d1ebe7d8 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Mon, 17 Jun 2019 09:33:30 -0400 Subject: [PATCH 11/30] PMC-552-A --- gulliver/system/class.g.php | 6 +- .../gulliver/system/ReplaceDataFieldTest.php | 96 +++++++++++++++++++ 2 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 tests/unit/gulliver/system/ReplaceDataFieldTest.php diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 60207b1be..319fe85f7 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -1639,7 +1639,7 @@ class G * @param string $sqlString The string to be escaped * @param string $DBEngine Target DBMS */ - public function sqlEscape($sqlString, $DBEngine = DB_ADAPTER) + public static function sqlEscape($sqlString, $DBEngine = DB_ADAPTER) { $DBEngine = DB_ADAPTER; switch ($DBEngine) { @@ -1748,12 +1748,12 @@ class G } //Non-quoted if (($match[1][$r][0] == '#') && (isset($result[$match[2][$r][0]]))) { - $__textoEval .= G::replaceDataField($result[$match[2][$r][0]], $result); + $__textoEval .= $result[$match[2][$r][0]]; continue; } //Non-quoted = if (($match[1][$r][0] == '=') && (isset($result[$match[2][$r][0]]))) { - $__textoEval .= G::replaceDataField($result[$match[2][$r][0]], $result); + $__textoEval .= $result[$match[2][$r][0]]; continue; } //Objects attributes diff --git a/tests/unit/gulliver/system/ReplaceDataFieldTest.php b/tests/unit/gulliver/system/ReplaceDataFieldTest.php new file mode 100644 index 000000000..231859f93 --- /dev/null +++ b/tests/unit/gulliver/system/ReplaceDataFieldTest.php @@ -0,0 +1,96 @@ + + + + + +

THIS IS ONLY A TEST OF THE VARIABLE             @#var_supplierEmail           

+ + '; + + $result = [ + 'var_supplierEmail' => 'asa@qq.fds', + 'var_supplierEmail_label' => 'asa@qq.fds', + ]; + + $dbEngine = 'mysql'; + + // Replace variables in the string + $stringToCheck = G::replaceDataField($string, $result, $dbEngine); + + // Assert the @qq is not being set as an empty value + $this->assertRegExp("/asa@qq.fds/", $stringToCheck); + + // Testing with a "@qstring" value + $result = [ + 'var_supplierEmail' => '@qstring', + 'var_supplierEmail_label' => '@qstring', + ]; + + $dbEngine = 'mysql'; + + // Replace variables in the string + $stringToCheck = G::replaceDataField($string, $result, $dbEngine); + + // Assert the @qstring is not being set as an empty value + $this->assertRegExp("/@qstring/", $stringToCheck); + } + + /** + * Check that the value of "@q" followed by a string is not being set as empty when using "@=" to identify a variable + * + * @test + * @covers G::replaceDataField + */ + public function it_should_not_set_empty_when_calling_a_variable_with_equals_symbol() + { + $string = ' + + + + +

THIS IS ONLY A TEST OF THE VARIABLE             @=var_supplierEmail           

+ + '; + + $result = [ + 'var_supplierEmail' => 'asa@qq.fds', + 'var_supplierEmail_label' => 'asa@qq.fds', + ]; + + $dbEngine = 'mysql'; + + // Replace variables in the string + $stringToCheck = G::replaceDataField($string, $result, $dbEngine); + + // Assert the @qq is not being set as an empty value + $this->assertRegExp("/asa@qq.fds/", $stringToCheck); + + // Testing with a "@qstring" value + $result = [ + 'var_supplierEmail' => '@qstring', + 'var_supplierEmail_label' => '@qstring', + ]; + + $dbEngine = 'mysql'; + + // Replace variables in the string + $stringToCheck = G::replaceDataField($string, $result, $dbEngine); + + // Assert the @qstring is not being set as an empty value + $this->assertRegExp("/@qstring/", $stringToCheck); + } +} From 782aece22c0254ba587b25bd9f49eff59782b46b Mon Sep 17 00:00:00 2001 From: Paula Quispe Date: Mon, 17 Jun 2019 11:11:57 -0400 Subject: [PATCH 12/30] PMC-849 --- .../translations/english/processmaker.en.po | 4 +-- workflow/engine/data/mysql/insert.sql | 2 +- workflow/engine/menus/processmaker.php | 27 ++----------------- 3 files changed, 5 insertions(+), 28 deletions(-) diff --git a/workflow/engine/content/translations/english/processmaker.en.po b/workflow/engine/content/translations/english/processmaker.en.po index 05fe609f5..edc9b4484 100644 --- a/workflow/engine/content/translations/english/processmaker.en.po +++ b/workflow/engine/content/translations/english/processmaker.en.po @@ -23660,8 +23660,8 @@ msgstr "Setting SUPER privilege" # TRANSLATION # LABEL/ID_SETUP #: LABEL/ID_SETUP -msgid "ADMIN" -msgstr "ADMIN" +msgid "Admin" +msgstr "Admin" # TRANSLATION # LABEL/ID_SETUP_MAILCONF_TITLE diff --git a/workflow/engine/data/mysql/insert.sql b/workflow/engine/data/mysql/insert.sql index 5a78ecbf5..e0f7d2f59 100644 --- a/workflow/engine/data/mysql/insert.sql +++ b/workflow/engine/data/mysql/insert.sql @@ -60832,7 +60832,7 @@ INSERT INTO TRANSLATION (TRN_CATEGORY,TRN_ID,TRN_LANG,TRN_VALUE,TRN_UPDATE_DATE ( 'LABEL','ID_SETTINGS_HEARTBEAT_TITLE','en','Display Setting','2014-01-15') , ( 'LABEL','ID_SETTING_MESSAGE','en','The Settings tool was clicked','2014-01-15') , ( 'LABEL','ID_SETTING_SUPER','en','Setting SUPER privilege','2014-01-28') , -( 'LABEL','ID_SETUP','en','ADMIN','2014-01-15') , +( 'LABEL','ID_SETUP','en','Admin','2014-01-15') , ( 'LABEL','ID_SETUP_MAILCONF_TITLE','en','Test SMTP Connection','2014-01-15') , ( 'LABEL','ID_SETUP_WEBSERVICES','en','Setup','2014-01-15') , ( 'LABEL','ID_SET_A_TABLE_NAME','en','Set a Table Name','2014-01-15') , diff --git a/workflow/engine/menus/processmaker.php b/workflow/engine/menus/processmaker.php index 95e40e09f..dc37285f0 100644 --- a/workflow/engine/menus/processmaker.php +++ b/workflow/engine/menus/processmaker.php @@ -2,32 +2,9 @@ /** * processmaker.php * - * ProcessMaker Open Source Edition - * Copyright (C) 2004 - 2008 Colosa Inc.23 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - * + * ProcessMaker main menu */ - -/************************************* - * ---= Processmaker main menu=--- - *************************************/ - global $G_TMP_MENU; global $RBAC; @@ -57,7 +34,7 @@ if ($RBAC->userCanAccess('PM_DASHBOARD') == 1) { // ADMIN MODULE if ($RBAC->userCanAccess('PM_SETUP') == 1 || $RBAC->userCanAccess('PM_USERS') == 1) { - $G_TMP_MENU->AddIdRawOption('SETUP', 'setup/main', strtolower(G::LoadTranslation('ID_SETUP')), '', '', '', 'x-pm-setup'); + $G_TMP_MENU->AddIdRawOption('SETUP', 'setup/main', G::LoadTranslation('ID_SETUP'), '', '', '', 'x-pm-setup'); } From af55e4653962d7c9d5634c4ea74290f721ccf86e Mon Sep 17 00:00:00 2001 From: Fabio Guachalla Date: Mon, 17 Jun 2019 14:46:12 -0400 Subject: [PATCH 13/30] PMC-774:[Mantis - 27541] PM_USERS permission removes System and System Information options correction Correction CR --- workflow/engine/menus/setup.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/workflow/engine/menus/setup.php b/workflow/engine/menus/setup.php index 1b2c69ad4..03acd845c 100644 --- a/workflow/engine/menus/setup.php +++ b/workflow/engine/menus/setup.php @@ -162,14 +162,16 @@ if ($RBAC->userCanAccess('PM_USERS') === 1) { ); } -if ($RBAC->userCanAccess('PM_SETUP_ADVANCE') === 1 && $RBAC->userCanAccess('PM_USERS') === 1 && $RBAC->userCanAccess - ('PM_SETUP_USERS_AUTHENTICATION_SOURCES') === 1) { +if ($RBAC->userCanAccess('PM_USERS') === 1 && $RBAC->userCanAccess('PM_SETUP_USERS_AUTHENTICATION_SOURCES') === 1) { $G_TMP_MENU->AddIdRawOption( 'AUTHSOURCES', '../authSources/authSources_List', G::LoadTranslation('ID_AUTH_SOURCES'), '', '', 'users' ); $G_TMP_MENU->AddIdRawOption('UX', '../admin/uxList', G::LoadTranslation('ID_USER_EXPERIENCE'), '', '', 'users'); +} + +if ($RBAC->userCanAccess('PM_SETUP_ADVANCE') === 1) { $G_TMP_MENU->AddIdRawOption('SYSTEM', '../admin/system', G::LoadTranslation('ID_SYSTEM'), '', '', 'settings'); $G_TMP_MENU->AddIdRawOption( 'INFORMATION', '../setup/systemInfo?option=processInfo', From f1b77aafcf2f98c907a5bb48075be7b88ec1ad26 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 19 Jun 2019 15:20:05 -0400 Subject: [PATCH 14/30] PMC-885 --- database/factories/DynaformFactory.php | 12 +- database/factories/InputDocumentFactory.php | 30 ++ database/factories/OutputDocumentFactory.php | 43 ++ .../workflow/engine/classes/ProcessesTest.php | 419 ++++++++++++++++++ workflow/engine/classes/Processes.php | 85 +++- .../src/ProcessMaker/Importer/Importer.php | 121 ++++- .../src/ProcessMaker/Model/Dynaform.php | 5 + .../src/ProcessMaker/Model/InputDocument.php | 45 ++ .../src/ProcessMaker/Model/OutputDocument.php | 45 ++ 9 files changed, 777 insertions(+), 28 deletions(-) create mode 100644 database/factories/InputDocumentFactory.php create mode 100644 database/factories/OutputDocumentFactory.php create mode 100644 tests/unit/workflow/engine/classes/ProcessesTest.php create mode 100644 workflow/engine/src/ProcessMaker/Model/InputDocument.php create mode 100644 workflow/engine/src/ProcessMaker/Model/OutputDocument.php diff --git a/database/factories/DynaformFactory.php b/database/factories/DynaformFactory.php index c790e5fda..a229a3db5 100644 --- a/database/factories/DynaformFactory.php +++ b/database/factories/DynaformFactory.php @@ -4,16 +4,18 @@ * Model factory for a dynaform. */ use Faker\Generator as Faker; +use ProcessMaker\Model\Dynaform; +use ProcessMaker\Model\Process; -$factory->define(\ProcessMaker\Model\Dynaform::class, function(Faker $faker) { +$factory->define(Dynaform::class, function(Faker $faker) { $date = $faker->dateTime(); return [ 'DYN_UID' => G::generateUniqueID(), - 'DYN_ID' => '', - 'DYN_TITLE' => '', - 'DYN_DESCRIPTION' => '', + 'DYN_ID' => $faker->unique()->numberBetween(1, 10000), + 'DYN_TITLE' => $faker->sentence(2), + 'DYN_DESCRIPTION' => $faker->sentence(5), 'PRO_UID' => function() { - $process = factory(\ProcessMaker\Model\Process::class)->create(); + $process = factory(Process::class)->create(); return $process->PRO_UID; }, 'DYN_TYPE' => 'xmlform', diff --git a/database/factories/InputDocumentFactory.php b/database/factories/InputDocumentFactory.php new file mode 100644 index 000000000..54481b00b --- /dev/null +++ b/database/factories/InputDocumentFactory.php @@ -0,0 +1,30 @@ +define(InputDocument::class, function(Faker $faker) { + return [ + 'INP_DOC_UID' => G::generateUniqueID(), + 'INP_DOC_ID' => $faker->unique()->numberBetween(1, 10000), + 'PRO_UID' => function() { + $process = factory(Process::class)->create(); + return $process->PRO_UID; + }, + 'INP_DOC_TITLE' => $faker->sentence(2), + 'INP_DOC_DESCRIPTION' => $faker->sentence(10), + 'INP_DOC_FORM_NEEDED' => 'VIRTUAL', + 'INP_DOC_ORIGINAL' => 'ORIGINAL', + 'INP_DOC_PUBLISHED' => 'PRIVATE', + 'INP_DOC_VERSIONING' => 0, + 'INP_DOC_DESTINATION_PATH' => '', + 'INP_DOC_TAGS' => 'INPUT', + 'INP_DOC_TYPE_FILE' => '.*', + 'INP_DOC_MAX_FILESIZE' => 0, + 'INP_DOC_MAX_FILESIZE_UNIT' => 'KB' + ]; +}); diff --git a/database/factories/OutputDocumentFactory.php b/database/factories/OutputDocumentFactory.php new file mode 100644 index 000000000..65efb66ea --- /dev/null +++ b/database/factories/OutputDocumentFactory.php @@ -0,0 +1,43 @@ +define(OutputDocument::class, function(Faker $faker) { + $date = $faker->dateTime(); + return [ + 'OUT_DOC_UID' => G::generateUniqueID(), + 'OUT_DOC_ID' => $faker->unique()->numberBetween(1, 10000), + 'OUT_DOC_TITLE' => $faker->sentence(2), + 'OUT_DOC_DESCRIPTION' => $faker->sentence(10), + 'OUT_DOC_FILENAME' => $faker->sentence(2), + 'OUT_DOC_TEMPLATE' => '', + 'PRO_UID' => function() { + $process = factory(Process::class)->create(); + return $process->PRO_UID; + }, + 'OUT_DOC_REPORT_GENERATOR' => 'TCPDF', + 'OUT_DOC_LANDSCAPE' => 0, + 'OUT_DOC_MEDIA' => 'Letter', + 'OUT_DOC_LEFT_MARGIN' => 20, + 'OUT_DOC_RIGHT_MARGIN' => 20, + 'OUT_DOC_TOP_MARGIN' => 20, + 'OUT_DOC_BOTTOM_MARGIN' => 20, + 'OUT_DOC_GENERATE' => 'BOTH', + 'OUT_DOC_TYPE' => 'HTML', + 'OUT_DOC_CURRENT_REVISION' => 0, + 'OUT_DOC_FIELD_MAPPING' => '', + 'OUT_DOC_VERSIONING' => 1, + 'OUT_DOC_DESTINATION_PATH' => '', + 'OUT_DOC_TAGS' => '', + 'OUT_DOC_PDF_SECURITY_ENABLED' => 0, + 'OUT_DOC_PDF_SECURITY_OPEN_PASSWORD' => '', + 'OUT_DOC_PDF_SECURITY_OWNER_PASSWORD' => '', + 'OUT_DOC_PDF_SECURITY_PERMISSIONS' => '', + 'OUT_DOC_OPEN_TYPE' => 1 + ]; +}); diff --git a/tests/unit/workflow/engine/classes/ProcessesTest.php b/tests/unit/workflow/engine/classes/ProcessesTest.php new file mode 100644 index 000000000..52882c952 --- /dev/null +++ b/tests/unit/workflow/engine/classes/ProcessesTest.php @@ -0,0 +1,419 @@ +create()->first(); + $proUid = $process->PRO_UID; + + $dynaforms = factory(Dynaform::class, 6) + ->create([ + 'PRO_UID' => $proUid + ]) + ->sortBy('DYN_UID') + ->values(); + + //test with parameter false + $expected = $dynaforms->toArray(); + + $processes = new Processes(); + $actual = $processes->getDynaformRows($proUid, false); + $this->sortArrayByColumn($actual, 'DYN_UID'); + + $this->assertEquals($expected, $actual); + + //by default the method getDynaformRows removed DYN_ID column + $dynaforms->transform(function($item, $key) { + unset($item->DYN_ID); + return $item; + }); + + //test with parameter default + $expected = $dynaforms->toArray(); + + $processes = new Processes(); + $actual = $processes->getDynaformRows($proUid); + $this->sortArrayByColumn($actual, 'DYN_UID'); + + $this->assertEquals($expected, $actual); + + //test with parameter true + $expected = $dynaforms->toArray(); + + $processes = new Processes(); + $actual = $processes->getDynaformRows($proUid, true); + $this->sortArrayByColumn($actual, 'DYN_UID'); + + $this->assertEquals($expected, $actual); + } + + /** + * This check if the returned input documents are correct with the different + * parameters. + * @test + * @covers \Processes::getInputRows() + */ + public function it_should_return_input_documents() + { + $process = factory(Process::class)->create()->first(); + $proUid = $process->PRO_UID; + + $inputDocument = factory(InputDocument::class, 6) + ->create([ + 'PRO_UID' => $proUid + ]) + ->sortBy('INP_DOC_UID') + ->values(); + + //test with parameter false + $expected = $inputDocument->toArray(); + + $processes = new Processes(); + $actual = $processes->getInputRows($proUid, false); + $this->sortArrayByColumn($actual, 'INP_DOC_UID'); + + $this->assertEquals($expected, $actual); + + //by default the mnethod getInputRows removed INP_DOC_ID column + $inputDocument->transform(function($item, $key) { + unset($item->INP_DOC_ID); + return $item; + }); + + //test with parameter default + $expected = $inputDocument->toArray(); + + $processes = new Processes(); + $actual = $processes->getInputRows($proUid); + $this->sortArrayByColumn($actual, 'INP_DOC_UID'); + + $this->assertEquals($expected, $actual); + + //test with the parameter true + $expected = $inputDocument->toArray(); + + $processes = new Processes(); + $actual = $processes->getInputRows($proUid, true); + $this->sortArrayByColumn($actual, 'INP_DOC_UID'); + + $this->assertEquals($expected, $actual); + } + + /** + * This checks fi the returned output documents are correct with the differect + * parameters. + * @test + * @covers Processes::getOutputRows() + */ + public function it_should_return_output_documents() + { + $process = factory(Process::class)->create()->first(); + $proUid = $process->PRO_UID; + + $outputDocument = factory(OutputDocument::class, 6) + ->create([ + 'PRO_UID' => $proUid + ]) + ->sortBy('OUT_DOC_UID') + ->values(); + + //test with parameter false + $expected = $outputDocument->toArray(); + + $processes = new Processes(); + $actual = $processes->getOutputRows($proUid, false); + $this->sortArrayByColumn($actual, 'OUT_DOC_UID'); + + $this->assertEquals($expected, $actual); + + //by default the method getOutoutRows removed OUT_DOC_ID column + $outputDocument->transform(function($item, $key) { + unset($item->OUT_DOC_ID); + return $item; + }); + + //test with parameter default + $expected = $outputDocument->toArray(); + + $processes = new Processes(); + $actual = $processes->getOutputRows($proUid); + $this->sortArrayByColumn($actual, 'OUT_DOC_UID'); + + $this->assertEquals($expected, $actual); + + //test with parameter true + $expected = $outputDocument->toArray(); + + $processes = new Processes(); + $actual = $processes->getOutputRows($proUid, true); + $this->sortArrayByColumn($actual, 'OUT_DOC_UID'); + + $this->assertEquals($expected, $actual); + } + + /** + * This checks if the dynaforms structure is saved with the different parameters. + * @test + * @covers Processes::createDynaformRows() + */ + public function it_sholud_create_dynaform() + { + $faker = Factory::create(); + $date = $faker->datetime(); + $proUid = G::generateUniqueID(); + $expected = [ + [ + 'DYN_ID' => $faker->unique()->numberBetween(1, 10000000), + 'DYN_UID' => G::generateUniqueID(), + 'DYN_TITLE' => $faker->sentence(2), + 'DYN_DESCRIPTION' => $faker->sentence(5), + 'PRO_UID' => $proUid, + 'DYN_TYPE' => 'xmlform', + 'DYN_FILENAME' => '', + 'DYN_CONTENT' => '', + 'DYN_LABEL' => '', + 'DYN_VERSION' => 2, + 'DYN_UPDATE_DATE' => $date->format('Y-m-d H:i:s'), + '__DYN_ID_UPDATE__' => false, + ], + [ + 'DYN_ID' => $faker->unique()->numberBetween(1, 10000000), + 'DYN_UID' => G::generateUniqueID(), + 'DYN_TITLE' => $faker->sentence(2), + 'DYN_DESCRIPTION' => $faker->sentence(5), + 'PRO_UID' => $proUid, + 'DYN_TYPE' => 'xmlform', + 'DYN_FILENAME' => '', + 'DYN_CONTENT' => '', + 'DYN_LABEL' => '', + 'DYN_VERSION' => 2, + 'DYN_UPDATE_DATE' => $date->format('Y-m-d H:i:s'), + '__DYN_ID_UPDATE__' => false, + ], + ]; + $this->sortArrayByColumn($expected, 'DYN_UID'); + + $processes = new Processes(); + $processes->createDynaformRows($expected); + foreach ($expected as &$value) { + ksort($value); + unset($value['__DYN_ID_UPDATE__']); + } + + $dynaforms = Dynaform::getByProUid($proUid) + ->sortBy('DYN_UID') + ->values(); + $dynaforms->transform(function($item, $key) { + return (array) $item; + }); + $actual = $dynaforms->toArray(); + foreach ($actual as $value) { + ksort($value); + } + + $this->assertEquals($expected, $actual); + } + + /** + * This checks if the input documents structure is saved with the different + * parameters. + * @test + * @covers Processes::createInputRows() + */ + public function it_should_create_input_document() + { + $faker = Factory::create(); + $date = $faker->datetime(); + $proUid = G::generateUniqueID(); + $expected = [ + [ + 'INP_DOC_UID' => G::generateUniqueID(), + 'INP_DOC_ID' => $faker->unique()->numberBetween(1, 10000), + 'PRO_UID' => $proUid, + 'INP_DOC_TITLE' => $faker->sentence(2), + 'INP_DOC_DESCRIPTION' => $faker->sentence(10), + 'INP_DOC_FORM_NEEDED' => 'VIRTUAL', + 'INP_DOC_ORIGINAL' => 'ORIGINAL', + 'INP_DOC_PUBLISHED' => 'PRIVATE', + 'INP_DOC_VERSIONING' => 0, + 'INP_DOC_DESTINATION_PATH' => '', + 'INP_DOC_TAGS' => 'INPUT', + 'INP_DOC_TYPE_FILE' => '.*', + 'INP_DOC_MAX_FILESIZE' => 0, + 'INP_DOC_MAX_FILESIZE_UNIT' => 'KB', + '__INP_DOC_ID_UPDATE__' => false, + ], + [ + 'INP_DOC_UID' => G::generateUniqueID(), + 'INP_DOC_ID' => $faker->unique()->numberBetween(1, 10000), + 'PRO_UID' => $proUid, + 'INP_DOC_TITLE' => $faker->sentence(2), + 'INP_DOC_DESCRIPTION' => $faker->sentence(10), + 'INP_DOC_FORM_NEEDED' => 'VIRTUAL', + 'INP_DOC_ORIGINAL' => 'ORIGINAL', + 'INP_DOC_PUBLISHED' => 'PRIVATE', + 'INP_DOC_VERSIONING' => 0, + 'INP_DOC_DESTINATION_PATH' => '', + 'INP_DOC_TAGS' => 'INPUT', + 'INP_DOC_TYPE_FILE' => '.*', + 'INP_DOC_MAX_FILESIZE' => 0, + 'INP_DOC_MAX_FILESIZE_UNIT' => 'KB', + '__INP_DOC_ID_UPDATE__' => false, + ], + ]; + $this->sortArrayByColumn($expected, 'INP_DOC_UID'); + + $processes = new Processes(); + $processes->createInputRows($expected); + foreach ($expected as &$value) { + ksort($value); + unset($value['__INP_DOC_ID_UPDATE__']); + } + + $inputDocuments = InputDocument::getByProUid($proUid) + ->sortBy('INP_DOC_UID') + ->values(); + $inputDocuments->transform(function($item, $key) { + return $item->attributesToArray(); + }); + $actual = $inputDocuments->toArray(); + foreach ($actual as &$value) { + ksort($value); + } + + $this->assertEquals($expected, $actual); + } + + /** + * This checks if the output documents structure is saved with the different + * parameters. + * @test + * @covers Processes::createOutputRows() + */ + public function it_should_create_output_document() + { + $faker = Factory::create(); + $date = $faker->datetime(); + $proUid = G::generateUniqueID(); + $expected = [ + [ + 'OUT_DOC_UID' => G::generateUniqueID(), + 'OUT_DOC_ID' => $faker->unique()->numberBetween(1, 10000), + 'OUT_DOC_TITLE' => $faker->sentence(2), + 'OUT_DOC_DESCRIPTION' => $faker->sentence(10), + 'OUT_DOC_FILENAME' => $faker->sentence(2), + 'OUT_DOC_TEMPLATE' => '', + 'PRO_UID' => $proUid, + 'OUT_DOC_REPORT_GENERATOR' => 'TCPDF', + 'OUT_DOC_LANDSCAPE' => 0, + 'OUT_DOC_MEDIA' => 'Letter', + 'OUT_DOC_LEFT_MARGIN' => 20, + 'OUT_DOC_RIGHT_MARGIN' => 20, + 'OUT_DOC_TOP_MARGIN' => 20, + 'OUT_DOC_BOTTOM_MARGIN' => 20, + 'OUT_DOC_GENERATE' => 'BOTH', + 'OUT_DOC_TYPE' => 'HTML', + 'OUT_DOC_CURRENT_REVISION' => 0, + 'OUT_DOC_FIELD_MAPPING' => '', + 'OUT_DOC_VERSIONING' => 1, + 'OUT_DOC_DESTINATION_PATH' => '', + 'OUT_DOC_TAGS' => '', + 'OUT_DOC_PDF_SECURITY_ENABLED' => 0, + 'OUT_DOC_PDF_SECURITY_OPEN_PASSWORD' => '', + 'OUT_DOC_PDF_SECURITY_OWNER_PASSWORD' => '', + 'OUT_DOC_PDF_SECURITY_PERMISSIONS' => '', + 'OUT_DOC_OPEN_TYPE' => 1, + '__OUT_DOC_ID_UPDATE__' => false, + ], + [ + 'OUT_DOC_UID' => G::generateUniqueID(), + 'OUT_DOC_ID' => $faker->unique()->numberBetween(1, 10000), + 'OUT_DOC_TITLE' => $faker->sentence(2), + 'OUT_DOC_DESCRIPTION' => $faker->sentence(10), + 'OUT_DOC_FILENAME' => $faker->sentence(2), + 'OUT_DOC_TEMPLATE' => '', + 'PRO_UID' => $proUid, + 'OUT_DOC_REPORT_GENERATOR' => 'TCPDF', + 'OUT_DOC_LANDSCAPE' => 0, + 'OUT_DOC_MEDIA' => 'Letter', + 'OUT_DOC_LEFT_MARGIN' => 20, + 'OUT_DOC_RIGHT_MARGIN' => 20, + 'OUT_DOC_TOP_MARGIN' => 20, + 'OUT_DOC_BOTTOM_MARGIN' => 20, + 'OUT_DOC_GENERATE' => 'BOTH', + 'OUT_DOC_TYPE' => 'HTML', + 'OUT_DOC_CURRENT_REVISION' => 0, + 'OUT_DOC_FIELD_MAPPING' => '', + 'OUT_DOC_VERSIONING' => 1, + 'OUT_DOC_DESTINATION_PATH' => '', + 'OUT_DOC_TAGS' => '', + 'OUT_DOC_PDF_SECURITY_ENABLED' => 0, + 'OUT_DOC_PDF_SECURITY_OPEN_PASSWORD' => '', + 'OUT_DOC_PDF_SECURITY_OWNER_PASSWORD' => '', + 'OUT_DOC_PDF_SECURITY_PERMISSIONS' => '', + 'OUT_DOC_OPEN_TYPE' => 1, + '__OUT_DOC_ID_UPDATE__' => false, + ] + ]; + $this->sortArrayByColumn($expected, 'OUT_DOC_UID'); + + $processes = new Processes(); + $processes->createOutputRows($expected); + foreach ($expected as &$value) { + ksort($value); + unset($value['__OUT_DOC_ID_UPDATE__']); + } + + $outputDocuments = OutputDocument::getByProUid($proUid) + ->sortBy('OUT_DOC_UID') + ->values(); + $outputDocuments->transform(function($item, $key) { + return $item->attributestoArray(); + }); + $actual = $outputDocuments->toArray(); + foreach ($actual as &$value) { + ksort($value); + } + + $this->assertEquals($expected, $actual); + } +} diff --git a/workflow/engine/classes/Processes.php b/workflow/engine/classes/Processes.php index 43cdc8ce9..6811c6546 100644 --- a/workflow/engine/classes/Processes.php +++ b/workflow/engine/classes/Processes.php @@ -1919,14 +1919,19 @@ class Processes /** - * Gets Input Documents Rows from aProcess. + * Gets Input Documents Rows from process. * * @param string $proUid + * @param boolean $unsetInpDocId * * @return array * @throws Exception + * + * @see Processes::getWorkflowData() + * @see ProcessMaker\BusinessModel\Migrator\InputDocumentsMigrator::export() + * @see ProcessMaker\Importer\Importer::saveCurrentProcess() */ - public function getInputRows($proUid) + public function getInputRows($proUid, $unsetInpDocId = true) { try { $inputList = []; @@ -1938,7 +1943,9 @@ class Processes while ($row = $dataset->getRow()) { $input = new InputDocument(); $infoInput = $input->load($row['INP_DOC_UID']); - unset($infoInput['INP_DOC_ID']); + if ($unsetInpDocId === true) { + unset($infoInput['INP_DOC_ID']); + } $inputList[] = $infoInput; $dataset->next(); } @@ -1956,6 +1963,10 @@ class Processes * * @return void * @throws Exception + * + * @see Processes::createProcessPropertiesFromData() + * @see Processes::updateProcessFromData() + * @see ProcessMaker\BusinessModel\Migrator\InputDocumentsMigrator::import() */ public function createInputRows($input) { @@ -1970,11 +1981,15 @@ class Processes //Get the INP_DOC_ID column $dataSet = BasePeer::doSelect($criteria, $con); $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); - if ($dataSet->next()) { - $inputInfo = $dataSet->getRow(); - $row['INP_DOC_ID'] = $inputInfo['INP_DOC_ID']; + if (isset($row["__INP_DOC_ID_UPDATE__"]) && $row["__INP_DOC_ID_UPDATE__"] === false) { + unset($row["__INP_DOC_ID_UPDATE__"]); } else { - $row['INP_DOC_ID'] = null; + if ($dataSet->next()) { + $inputInfo = $dataSet->getRow(); + $row['INP_DOC_ID'] = $inputInfo['INP_DOC_ID']; + } else { + $row['INP_DOC_ID'] = null; + } } BasePeer::doDelete($criteria, $con); //Prepare the insert @@ -2102,11 +2117,16 @@ class Processes * Gets the Output Documents Rows from a Process. * * @param string $proUid + * @param boolean $unsetOutDocId * * @return array * @throws Exception + * + * @see Processes::getWorkflowData() + * @see ProcessMaker\BusinessModel\Migrator\OutputDocumentsMigrator::export() + * @see ProcessMaker\Importer\Importer::saveCurrentProcess() */ - public function getOutputRows($proUid) + public function getOutputRows($proUid, $unsetOutDocId = true) { try { $outputList = []; @@ -2118,7 +2138,9 @@ class Processes while ($row = $dataset->getRow()) { $output = new OutputDocument(); $infoOutput = $output->Load($row['OUT_DOC_UID']); - unset($infoOutput['OUT_DOC_ID']); + if ($unsetOutDocId === true) { + unset($infoOutput['OUT_DOC_ID']); + } $outputList[] = $infoOutput; $dataset->next(); } @@ -2136,6 +2158,10 @@ class Processes * * @return void * @throws Exception + * + * @see Processes::createProcessPropertiesFromData() + * @see Processes::updateProcessFromData() + * @see ProcessMaker\BusinessModel\Migrator\OutputDocumentsMigrator::import() */ public function createOutputRows($output) { @@ -2150,11 +2176,15 @@ class Processes //Get the OUT_DOC_ID column $dataSet = BasePeer::doSelect($criteria, $con); $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); - if ($dataSet->next()) { - $outputInfo = $dataSet->getRow(); - $row['OUT_DOC_ID'] = $outputInfo['OUT_DOC_ID']; + if (isset($row["__OUT_DOC_ID_UPDATE__"]) && $row["__OUT_DOC_ID_UPDATE__"] === false) { + unset($row["__OUT_DOC_ID_UPDATE__"]); } else { - $row['OUT_DOC_ID'] = null; + if ($dataSet->next()) { + $outputInfo = $dataSet->getRow(); + $row['OUT_DOC_ID'] = $outputInfo['OUT_DOC_ID']; + } else { + $row['OUT_DOC_ID'] = null; + } } BasePeer::doDelete($criteria, $con); //Prepare the insert @@ -2931,11 +2961,16 @@ class Processes * Get Dynaform Rows from a Process * * @param string $proUid + * @param boolean $unsetDynId * * @return array * @throws Exception + * + * @see Processes::getWorkflowData() + * @see ProcessMaker\BusinessModel\Migrator\DynaformsMigrator::export() + * @see ProcessMaker\Importer\Importer::saveCurrentProcess() */ - public function getDynaformRows($proUid) + public function getDynaformRows($proUid, $unsetDynId = true) { try { $dynaformList = []; @@ -2947,7 +2982,9 @@ class Processes while ($row = $dataset->getRow()) { $dynaform = new Dynaform(); $infoDyn = $dynaform->Load($row['DYN_UID']); - unset($infoDyn['DYN_ID']); + if ($unsetDynId === true) { + unset($infoDyn['DYN_ID']); + } $dynaformList[] = $infoDyn; $dataset->next(); } @@ -3077,12 +3114,16 @@ class Processes } /** - * Create dynaforms for a process + * Create dynaforms for a process. * * @param array $dynaforms * * @return void * @throws Exception + * + * @see Processes::createProcessPropertiesFromData() + * @see Processes::updateProcessFromData() + * @see ProcessMaker\BusinessModel\Migrator\DynaformsMigrator::import() */ public function createDynaformRows($dynaforms) { @@ -3097,11 +3138,15 @@ class Processes //Get the DYN_ID column $dataSet = BasePeer::doSelect($criteria, $con); $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); - if ($dataSet->next()) { - $dynInfo = $dataSet->getRow(); - $row['DYN_ID'] = $dynInfo['DYN_ID']; + if (isset($row["__DYN_ID_UPDATE__"]) && $row["__DYN_ID_UPDATE__"] === false) { + unset($row["__DYN_ID_UPDATE__"]); } else { - $row['DYN_ID'] = null; + if ($dataSet->next()) { + $dynInfo = $dataSet->getRow(); + $row['DYN_ID'] = $dynInfo['DYN_ID']; + } else { + $row['DYN_ID'] = null; + } } BasePeer::doDelete($criteria, $con); //Prepare the insert diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index 77264f3be..4d8cb2af2 100644 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -300,6 +300,24 @@ abstract class Importer $this->preserveEmailEventConfiguration($emailEvent); } } + + if (isset($this->importData["tables"]["workflow"]["dynaforms"])) { + foreach ($this->importData["tables"]["workflow"]["dynaforms"] as &$dynaform) { + $this->preserveDynaformId($dynaform); + } + } + + if (isset($this->importData["tables"]["workflow"]["inputs"])) { + foreach ($this->importData["tables"]["workflow"]["inputs"] as &$input) { + $this->preserveInputDocumentId($input); + } + } + + if (isset($this->importData["tables"]["workflow"]["outputs"])) { + foreach ($this->importData["tables"]["workflow"]["outputs"] as &$output) { + $this->preserveOutputDocumentId($output); + } + } $objectList = $granularObj->loadObjectsListSelected($this->importData, $newObjectArray); if (sizeof($objectList) > 0 && $processGranulate) { @@ -602,6 +620,18 @@ abstract class Importer foreach ($arrayWorkflowTables["emailEvent"] as &$emailEvent) { $this->preserveEmailEventConfiguration($emailEvent); } + + foreach ($arrayWorkflowTables["dynaforms"] as &$dynaform) { + $this->preserveDynaformId($dynaform); + } + + foreach ($arrayWorkflowTables["inputs"] as &$input) { + $this->preserveInputDocumentId($input); + } + + foreach ($arrayWorkflowTables["outputs"] as &$output) { + $this->preserveOutputDocumentId($output); + } $this->importWfTables($arrayWorkflowTables); @@ -862,6 +892,8 @@ abstract class Importer * Saves the current objects before import. * * @param string $proUid + * + * @see ProcessMaker\Importer\Importer::import() */ public function saveCurrentProcess($proUid) { @@ -873,9 +905,9 @@ abstract class Importer $result->tasks = $processes->getTaskRows($proUid); $result->abeConfigurations = $processes->getActionsByEmail($proUid); $result->emailEvents = $processes->getEmailEvent($proUid); - $result->dynaforms = $processes->getDynaformRows($proUid); - $result->inputs = $processes->getInputRows($proUid); - $result->outputs = $processes->getOutputRows($proUid); + $result->dynaforms = $processes->getDynaformRows($proUid, false); + $result->inputs = $processes->getInputRows($proUid, false); + $result->outputs = $processes->getOutputRows($proUid, false); $this->setCurrentProcess($result); } @@ -948,4 +980,87 @@ abstract class Importer } } + /** + * Restore DYN_ID value for specific dynaform. + * The value of __DYN_ID_UPDATE__ only used like a reference. + * + * @param array $data + * + * @see ProcessMaker\Importer\Importer::import() + * @see ProcessMaker\Importer\Importer::doImport() + * @link https://wiki.processmaker.com/3.1/Importing_and_Exporting_Projects#Importing_a_Project + */ + public function preserveDynaformId(&$data) + { + $currentProccess = $this->getCurrentProcess(); + if (!is_object($currentProccess)) { + return; + } + if (!is_array($currentProccess->dynaforms)) { + return; + } + foreach ($currentProccess->dynaforms as $dynaform) { + if ($data["DYN_UID"] === $dynaform["DYN_UID"]) { + $data["DYN_ID"] = $dynaform["DYN_ID"]; + $data["__DYN_ID_UPDATE__"] = false; + break; + } + } + } + + /** + * Restore INP_DOC_ID value for specific input document. + * The value of __INP_DOC_ID_UPDATE__ only used like a reference. + * + * @param array $data + * + * @see ProcessMaker\Importer\Importer::import() + * @see ProcessMaker\Importer\Importer::doImport() + * @link https://wiki.processmaker.com/3.1/Importing_and_Exporting_Projects#Importing_a_Project + */ + public function preserveInputDocumentId(&$data) + { + $currentProccess = $this->getCurrentProcess(); + if (!is_object($currentProccess)) { + return; + } + if (!is_array($currentProccess->inputs)) { + return; + } + foreach ($currentProccess->inputs as $inputDocument) { + if ($data["INP_DOC_UID"] === $inputDocument["INP_DOC_UID"]) { + $data["INP_DOC_ID"] = $inputDocument["INP_DOC_ID"]; + $data["__INP_DOC_ID_UPDATE__"] = false; + break; + } + } + } + + /** + * Restore OUT_DOC_ID value for specific output document. + * The value of __OUT_DOC_ID_UPDATE__ only used like a reference. + * + * @param array $data + * + * @see ProcessMaker\Importer\Importer::import() + * @see ProcessMaker\Importer\Importer::doImport() + * @link https://wiki.processmaker.com/3.1/Importing_and_Exporting_Projects#Importing_a_Project + */ + public function preserveOutputDocumentId(&$data) + { + $currentProccess = $this->getCurrentProcess(); + if (!is_object($currentProccess)) { + return; + } + if (!is_array($currentProccess->outputs)) { + return; + } + foreach ($currentProccess->outputs as $outputDocument) { + if ($data["OUT_DOC_UID"] === $outputDocument["OUT_DOC_UID"]) { + $data["OUT_DOC_ID"] = $outputDocument["OUT_DOC_ID"]; + $data["__OUT_DOC_ID_UPDATE__"] = false; + break; + } + } + } } diff --git a/workflow/engine/src/ProcessMaker/Model/Dynaform.php b/workflow/engine/src/ProcessMaker/Model/Dynaform.php index 4d270b2dc..550d3c2e5 100644 --- a/workflow/engine/src/ProcessMaker/Model/Dynaform.php +++ b/workflow/engine/src/ProcessMaker/Model/Dynaform.php @@ -14,8 +14,13 @@ use Illuminate\Support\Facades\DB; class Dynaform extends Model { protected $table = 'DYNAFORM'; + protected $primaryKey = "DYN_ID"; public $timestamps = false; + /** + * Return relation process. + * @return object + */ public function process() { return $this->belongsTo(Process::class, 'PRO_UID', 'PRO_UID'); diff --git a/workflow/engine/src/ProcessMaker/Model/InputDocument.php b/workflow/engine/src/ProcessMaker/Model/InputDocument.php new file mode 100644 index 000000000..b7b38f443 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/InputDocument.php @@ -0,0 +1,45 @@ +belongsTo(Process::class, 'PRO_UID', 'PRO_UID'); + } + + /** + * Get input documents by PRO_UID + * @param string $proUid + * @return \Illuminate\Database\Eloquent\Collection + */ + public static function getByProUid($proUid) + { + return InputDocument::where('PRO_UID', '=', $proUid)->get(); + } + + /** + * Get input document by INP_DOC_UID + * @param type $inpDocUid + * @return Model + */ + public static function getByInpDocUid($inpDocUid) + { + return InputDocument::where('INP_DOC_UID', '=', $inpDocUid)->first(); + } +} diff --git a/workflow/engine/src/ProcessMaker/Model/OutputDocument.php b/workflow/engine/src/ProcessMaker/Model/OutputDocument.php new file mode 100644 index 000000000..7bae462f4 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/OutputDocument.php @@ -0,0 +1,45 @@ +belongsTo(Process::class, 'PRO_UID', 'PRO_UID'); + } + + /** + * Get output documents by PRO_UID. + * @param string $proUid + * @return \Illuminate\Database\Eloquent\Collection + */ + public static function getByProUid($proUid) + { + return OutputDocument::where('PRO_UID', '=', $proUid)->get(); + } + + /** + * Get output document by OUT_DOC_UID. + * @param string $outDocUid + * @return Model + */ + public static function getByOutDocUid($outDocUid) + { + return OutputDocument::where('OUT_DOC_UID', '=', $outDocUid)->first(); + } +} From 21fd974d41e6650d4aec0a9107bff8a4d2a4f599 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 25 Jun 2019 08:17:57 -0400 Subject: [PATCH 15/30] PMC-878 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.4 to v5.5.0) --- app/Console/Kernel.php | 3 +- composer.json | 13 +- composer.lock | 1531 +++++++++++++++++++--------- thirdparty/pake/pakeYaml.class.php | 2 +- 4 files changed, 1074 insertions(+), 475 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 5012ffaf8..c4f873ff5 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -13,7 +13,6 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ - Commands\PMTranslationsPlugins::class ]; /** @@ -34,6 +33,6 @@ class Kernel extends ConsoleKernel */ protected function commands() { - + $this->load(__DIR__ . '/Commands'); } } diff --git a/composer.json b/composer.json index 144aaa1ba..c5aee9a92 100644 --- a/composer.json +++ b/composer.json @@ -27,8 +27,8 @@ "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": ">=5.6", - "laravel/framework": "5.4.*", + "php": ">=7.1", + "laravel/framework": "5.5.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", @@ -43,7 +43,7 @@ "phpmailer/phpmailer": "5.2.27", "pear/archive_tar": "1.4.*", "pear/console_getopt": "1.4.*", - "TYPO3/class-alias-loader": "^1.0", + "typo3/class-alias-loader": "^1.0", "ralouphie/getallheaders": "^2.0", "smarty/smarty": "2.6.30", "pdepend/pdepend": "@stable", @@ -55,6 +55,7 @@ "fzaninotto/faker": "^1.7", "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", + "filp/whoops": "~2.0", "lmc/steward": "^2.2", "behat/behat": "^3.3", "behat/mink-selenium2-driver": "^1.3", @@ -101,7 +102,11 @@ }, "scripts": { "post-install-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility", - "post-update-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility" + "post-update-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility", + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover" + ] }, "extra": { "typo3/class-alias-loader": { diff --git a/composer.lock b/composer.lock index c56712f71..af6b03908 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "a9ba65f7fb68be7c36dd45b62216b2c6", + "content-hash": "4475480aaf9f89aefd4ec4bf9c009e71", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -115,7 +115,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "4ac7ac3ebd1863c258c3f0e048fd3fff668f0184" + "reference": "0b4c4cd6cea4f3eaa10452423d293ed6aac0d5ab" }, "require": { "colosa/pmui": "release/3.3.1-dev" @@ -126,7 +126,7 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2018-11-29T15:23:08+00:00" + "time": "2018-12-18T17:10:59+00:00" }, { "name": "colosa/pmDynaform", @@ -134,7 +134,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "e4176c9772842904552997702e549035b6ba641d" + "reference": "42281f63761d18a6dcaf63ff5c612eeb0c6dfa1b" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -142,7 +142,7 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2018-11-28T17:54:53+00:00" + "time": "2018-12-10T15:33:17+00:00" }, { "name": "colosa/pmUI", @@ -150,7 +150,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", - "reference": "711b9796c7b5ad4363b9177d0969ec4abecc8d2e" + "reference": "4449e02225bc1d351907ceee79b2411b428df517" }, "type": "library", "description": "JS UI Library", @@ -158,7 +158,7 @@ "keywords": [ "js lib ProcessMaker UI" ], - "time": "2018-11-16T14:26:15+00:00" + "time": "2018-12-18T17:11:02+00:00" }, { "name": "dapphp/securimage", @@ -244,33 +244,33 @@ }, { "name": "doctrine/inflector", - "version": "v1.1.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -307,20 +307,137 @@ "singularize", "string" ], - "time": "2015-11-06T14:35:42+00:00" + "time": "2018-01-09T20:05:19+00:00" }, { - "name": "erusev/parsedown", - "version": "1.7.1", + "name": "doctrine/lexer", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2019-06-08T11:03:04+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.9", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">= 5.5" + }, + "require-dev": { + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2019-06-23T10:14:27+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", "shasum": "" }, "require": { @@ -353,7 +470,7 @@ "markdown", "parser" ], - "time": "2018-03-08T01:11:30+00:00" + "time": "2019-03-17T18:48:37+00:00" }, { "name": "geshi/geshi", @@ -427,7 +544,7 @@ "src/" ] }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], @@ -527,40 +644,86 @@ "time": "2018-09-29T18:48:56+00:00" }, { - "name": "laravel/framework", - "version": "v5.4.36", + "name": "kylekatarnls/update-helper", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9" + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/1062a22232071c3e8636487c86ec1ae75681bbf9", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0", + "php": ">=5.3.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "^2.0.x-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "UpdateHelper\\ComposerPlugin" + }, + "autoload": { + "psr-0": { + "UpdateHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Update helper", + "time": "2019-06-05T08:34:23+00:00" + }, + { + "name": "laravel/framework", + "version": "v5.5.45", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/52c79ecf54b6168a54730ccb6c4c9f3561732a80", + "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", - "erusev/parsedown": "~1.6", + "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", - "league/flysystem": "~1.0", - "monolog/monolog": "~1.11", + "league/flysystem": "^1.0.8", + "monolog/monolog": "~1.12", "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.4|~2.0", - "php": ">=5.6.4", + "nesbot/carbon": "^1.26.0", + "php": ">=7.0", + "psr/container": "~1.0", + "psr/simple-cache": "^1.0", "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~5.4", - "symfony/console": "~3.2", - "symfony/debug": "~3.2", - "symfony/finder": "~3.2", - "symfony/http-foundation": "~3.2", - "symfony/http-kernel": "~3.2", - "symfony/process": "~3.2", - "symfony/routing": "~3.2", - "symfony/var-dumper": "~3.2", + "swiftmailer/swiftmailer": "~6.0", + "symfony/console": "~3.3", + "symfony/debug": "~3.3", + "symfony/finder": "~3.3", + "symfony/http-foundation": "~3.3", + "symfony/http-kernel": "~3.3", + "symfony/process": "~3.3", + "symfony/routing": "~3.3", + "symfony/var-dumper": "~3.3", "tijsverkoyen/css-to-inline-styles": "~2.2", "vlucas/phpdotenv": "~2.2" }, @@ -577,7 +740,6 @@ "illuminate/database": "self.version", "illuminate/encryption": "self.version", "illuminate/events": "self.version", - "illuminate/exception": "self.version", "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", @@ -594,38 +756,43 @@ "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version", - "tightenco/collect": "self.version" + "tightenco/collect": "<5.5.33" }, "require-dev": { "aws/aws-sdk-php": "~3.0", "doctrine/dbal": "~2.5", - "mockery/mockery": "~0.9.4", + "filp/whoops": "^2.1.4", + "mockery/mockery": "~1.0", + "orchestra/testbench-core": "3.5.*", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.7", - "predis/predis": "~1.0", - "symfony/css-selector": "~3.2", - "symfony/dom-crawler": "~3.2" + "phpunit/phpunit": "~6.0", + "predis/predis": "^1.1.1", + "symfony/css-selector": "~3.3", + "symfony/dom-crawler": "~3.3" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.5-dev" } }, "autoload": { @@ -653,7 +820,7 @@ "framework", "laravel" ], - "time": "2017-08-30T09:26:16+00:00" + "time": "2019-01-28T20:53:19+00:00" }, { "name": "laravel/tinker", @@ -720,16 +887,16 @@ }, { "name": "league/flysystem", - "version": "1.0.49", + "version": "1.0.53", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", "shasum": "" }, "require": { @@ -800,7 +967,7 @@ "sftp", "storage" ], - "time": "2018-11-23T23:41:29+00:00" + "time": "2019-06-18T20:09:29+00:00" }, { "name": "libchart/libchart", @@ -828,7 +995,7 @@ ], "authors": [ { - "name": "Jean-Marc Trémeaux", + "name": "Jean-Marc Tr??meaux", "homepage": "http://naku.dohcrew.com/", "role": "Developer" }, @@ -854,12 +1021,12 @@ "source": { "type": "git", "url": "https://github.com/Luracast/Restler.git", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8" + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Luracast/Restler/zipball/188968f6a15796077350f1be9c461f8d02c559a8", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8", + "url": "https://api.github.com/repos/Luracast/Restler/zipball/87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", "shasum": "" }, "require": { @@ -1051,31 +1218,34 @@ }, { "name": "nesbot/carbon", - "version": "1.36.1", + "version": "1.38.4", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" + "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", "shasum": "" }, "require": { + "kylekatarnls/update-helper": "^1.1", "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { + "composer/composer": "^1.2", + "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, - "suggest": { - "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", - "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." - }, + "bin": [ + "bin/upgrade-carbon" + ], "type": "library", "extra": { + "update-helper": "Carbon\\Upgrade", "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -1105,7 +1275,7 @@ "datetime", "time" ], - "time": "2018-11-22T18:23:02+00:00" + "time": "2019-06-03T15:41:40+00:00" }, { "name": "nikic/php-parser", @@ -1160,33 +1330,29 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.17", + "version": "v9.99.99", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d" + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": "^7" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -1205,7 +1371,7 @@ "pseudorandom", "random" ], - "time": "2018-07-04T16:31:37+00:00" + "time": "2018-07-02T15:55:56+00:00" }, { "name": "pdepend/pdepend", @@ -1249,16 +1415,16 @@ }, { "name": "pear/archive_tar", - "version": "1.4.3", + "version": "1.4.7", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/7e48add6f8edc3027dd98ad15964b1a28fd0c845", + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845", "shasum": "" }, "require": { @@ -1269,8 +1435,8 @@ "phpunit/phpunit": "*" }, "suggest": { - "ext-bz2": "bz2 compression support.", - "ext-xz": "lzma2 compression support.", + "ext-bz2": "Bz2 compression support.", + "ext-xz": "Lzma2 compression support.", "ext-zlib": "Gzip compression support." }, "type": "library", @@ -1305,26 +1471,26 @@ "email": "mrook@php.net" } ], - "description": "Tar file management class", + "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", "homepage": "https://github.com/pear/Archive_Tar", "keywords": [ "archive", "tar" ], - "time": "2017-06-11T17:28:11+00:00" + "time": "2019-04-08T13:15:55+00:00" }, { "name": "pear/console_getopt", - "version": "v1.4.1", + "version": "v1.4.2", "source": { "type": "git", "url": "https://github.com/pear/Console_Getopt.git", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0", + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0", "shasum": "" }, "type": "library", @@ -1358,24 +1524,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2015-07-20T20:28:12+00:00" + "time": "2019-02-06T16:52:33+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.6", + "version": "v1.10.9", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "052868b244d31f822796e7e9981f62557eb256d4" + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/052868b244d31f822796e7e9981f62557eb256d4", - "reference": "052868b244d31f822796e7e9981f62557eb256d4", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f", + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f", "shasum": "" }, "require": { - "pear/console_getopt": "~1.3", + "pear/console_getopt": "~1.4", "pear/pear_exception": "~1.0" }, "replace": { @@ -1402,7 +1568,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2018-08-22T19:28:09+00:00" + "time": "2019-03-13T18:15:44+00:00" }, { "name": "pear/pear_exception", @@ -1478,27 +1644,27 @@ "php": ">=5.0.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", - "jms/serializer": "0.16.*", - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "4.8.*", - "symfony/debug": "2.8.*", - "symfony/filesystem": "2.8.*", - "symfony/translation": "2.8.*", - "symfony/yaml": "2.8.*", - "zendframework/zend-cache": "2.5.1", - "zendframework/zend-config": "2.5.1", - "zendframework/zend-eventmanager": "2.5.1", - "zendframework/zend-filter": "2.5.1", - "zendframework/zend-i18n": "2.5.1", - "zendframework/zend-json": "2.5.1", - "zendframework/zend-math": "2.5.1", - "zendframework/zend-serializer": "2.5.*", - "zendframework/zend-servicemanager": "2.5.*", - "zendframework/zend-stdlib": "2.5.1" + "doctrine/annotations": "1.2.*", + "jms/serializer": "0.16.*", + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "4.8.*", + "symfony/debug": "2.8.*", + "symfony/filesystem": "2.8.*", + "symfony/translation": "2.8.*", + "symfony/yaml": "2.8.*", + "zendframework/zend-cache": "2.5.1", + "zendframework/zend-config": "2.5.1", + "zendframework/zend-eventmanager": "2.5.1", + "zendframework/zend-filter": "2.5.1", + "zendframework/zend-i18n": "2.5.1", + "zendframework/zend-json": "2.5.1", + "zendframework/zend-math": "2.5.1", + "zendframework/zend-serializer": "2.5.*", + "zendframework/zend-servicemanager": "2.5.*", + "zendframework/zend-stdlib": "2.5.1" }, "suggest": { - "league/oauth2-google": "Needed for Google XOAUTH2 authentication" + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -1534,7 +1700,7 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2017-11-04T09:26:05+00:00" + "time": "2018-11-15T22:32:31+00:00" }, { "name": "psr/container", @@ -1623,6 +1789,54 @@ ], "time": "2012-12-21T11:40:51+00:00" }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, { "name": "psy/psysh", "version": "v0.9.9", @@ -1872,29 +2086,37 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -1922,36 +2144,36 @@ "mail", "mailer" ], - "time": "2018-07-31T09:26:32+00:00" + "time": "2019-04-21T09:21:45+00:00" }, { "name": "symfony/config", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081" + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/8a660daeb65dedbe0b099529f65e61866c055081", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081", + "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "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" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/messenger": "~4.1", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -1959,7 +2181,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -1986,20 +2208,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/console", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" + "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "url": "https://api.github.com/repos/symfony/console/zipball/8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", + "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", "shasum": "" }, "require": { @@ -2011,6 +2233,9 @@ "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.3|~4.0", @@ -2020,7 +2245,7 @@ "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -2055,29 +2280,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-11-26T12:48:07+00:00" + "time": "2019-05-09T08:42:51+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2108,20 +2333,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T21:53:39+00:00" }, { "name": "symfony/debug", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" + "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", + "url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c", + "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c", "shasum": "" }, "require": { @@ -2164,38 +2389,40 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-05-18T13:32:47+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5" + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/622b330ced1bdf29d240bd1c364c038f647eb0f5", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/config": "^4.3", + "symfony/expression-language": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2208,7 +2435,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2235,20 +2462,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:14:23+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" + "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", + "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", "shasum": "" }, "require": { @@ -2298,20 +2525,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-04-02T08:51:52+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d" + "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b49b1ca166bd109900e6a1683d9bb1115727ef2d", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", + "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", "shasum": "" }, "require": { @@ -2348,20 +2575,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-02-04T21:34:32+00:00" }, { "name": "symfony/finder", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" + "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c", + "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c", "shasum": "" }, "require": { @@ -2397,20 +2624,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-05-24T12:25:55+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38" + "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/677ae5e892b081e71a665bfa7dd90fe61800c00e", + "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e", "shasum": "" }, "require": { @@ -2451,26 +2678,26 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-05-27T05:50:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa" + "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/78528325d90e5ad54a6e9eca750fe176932bc4fa", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ddde6547880914f2e41b0b29e585b8c939a1e39e", + "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/debug": "^3.3.3|~4.0", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", "symfony/polyfill-ctype": "~1.8" @@ -2540,20 +2767,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-11-26T14:04:48+00:00" + "time": "2019-05-28T09:24:42+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + "reference": "82ebae02209c21113908c229e9883c419720738a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", "shasum": "" }, "require": { @@ -2565,7 +2792,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2598,20 +2825,141 @@ "polyfill", "portable" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.10.0", + "name": "symfony/polyfill-iconv", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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 for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2019-03-04T13:44:35+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", "shasum": "" }, "require": { @@ -2623,7 +2971,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2657,20 +3005,20 @@ "portable", "shim" ], - "time": "2018-09-21T13:07:52+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" + "reference": "bc4858fb611bda58719124ca079baff854149c89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", + "reference": "bc4858fb611bda58719124ca079baff854149c89", "shasum": "" }, "require": { @@ -2680,7 +3028,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2716,20 +3064,75 @@ "portable", "shim" ], - "time": "2018-09-21T06:26:08+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/process", - "version": "v3.4.19", + "name": "symfony/polyfill-php72", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/process", + "version": "v3.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/afe411c2a6084f25cff55a01d0d4e1474c97ff13", + "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13", "shasum": "" }, "require": { @@ -2765,20 +3168,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-22T12:54:11+00:00" }, { "name": "symfony/routing", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" + "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "url": "https://api.github.com/repos/symfony/routing/zipball/3458f90c2c17dfbb3260dbbfca19a0c415576ce0", + "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0", "shasum": "" }, "require": { @@ -2801,7 +3204,6 @@ "suggest": { "doctrine/annotations": "For using the annotation loader", "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", "symfony/expression-language": "For using expression matching", "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" @@ -2842,37 +3244,103 @@ "uri", "url" ], - "time": "2018-11-26T08:40:22+00:00" + "time": "2019-05-18T16:36:47+00:00" }, { - "name": "symfony/translation", - "version": "v3.4.19", + "name": "symfony/service-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bdbe940ed3ef4179f86032086c32d3a858becc0f", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<2.8", + "symfony/config": "<3.4", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, + "provide": { + "symfony/translation-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~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/http-kernel": "~3.4|~4.0", + "symfony/intl": "~3.4|~4.0", + "symfony/service-contracts": "^1.1.2", + "symfony/var-dumper": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2883,7 +3351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2910,20 +3378,77 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-06-03T20:27:40+00:00" }, { - "name": "symfony/var-dumper", - "version": "v3.4.19", + "name": "symfony/translation-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v3.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a", + "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a", "shasum": "" }, "require": { @@ -2979,7 +3504,7 @@ "debug", "dump" ], - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-01T09:52:10+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3088,20 +3613,21 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -3109,7 +3635,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -3134,22 +3660,22 @@ "env", "environment" ], - "time": "2018-07-29T20:33:41+00:00" + "time": "2019-01-29T11:11:52+00:00" } ], "packages-dev": [ { "name": "beberlei/assert", - "version": "v2.9.6", + "version": "v2.9.9", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" + "reference": "124317de301b7c91d5fce34c98bba2c6925bec95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", + "url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95", + "reference": "124317de301b7c91d5fce34c98bba2c6925bec95", "shasum": "" }, "require": { @@ -3191,7 +3717,7 @@ "assertion", "validation" ], - "time": "2018-06-11T17:15:25+00:00" + "time": "2019-05-28T15:27:37+00:00" }, { "name": "behat/behat", @@ -3273,16 +3799,16 @@ }, { "name": "behat/gherkin", - "version": "v4.5.1", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", "shasum": "" }, "require": { @@ -3290,8 +3816,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -3328,34 +3854,35 @@ "gherkin", "parser" ], - "time": "2017-08-30T11:04:43+00:00" + "time": "2019-01-16T14:22:17+00:00" }, { "name": "behat/mink", - "version": "v1.7.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea", + "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "symfony/css-selector": "^2.7|^3.0|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "symfony/phpunit-bridge": "^3.3|^4.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", + "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" }, "type": "library", "extra": { @@ -3386,7 +3913,7 @@ "testing", "web" ], - "time": "2016-03-05T08:26:18+00:00" + "time": "2019-05-14T09:56:49+00:00" }, { "name": "behat/mink-selenium2-driver", @@ -3571,32 +4098,34 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "a2c590166b2133a4633738648b6b064edae0814a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^6.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -3616,25 +4145,25 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2019-03-17T17:37:11+00:00" }, { "name": "facebook/webdriver", - "version": "1.6.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + "reference": "e43de70f3c7166169d0f14a374505392734160e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", "shasum": "" }, "require": { @@ -3681,7 +4210,67 @@ "selenium", "webdriver" ], - "time": "2018-05-16T17:37:13+00:00" + "time": "2019-06-13T08:02:18+00:00" + }, + { + "name": "filp/whoops", + "version": "2.1.6", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/92bdc6800ac6e233c9e161a1768e082389a73530", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^4.8 || ^5.0", + "symfony/var-dumper": "^2.6 || ^3.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "whoops", + "zf2" + ], + "time": "2017-02-18T14:22:27+00:00" }, { "name": "florianwolters/component-core-stringutils", @@ -3906,7 +4495,7 @@ ], "authors": [ { - "name": "Christian Lück", + "name": "Christian Lück", "email": "christian@lueck.tv" } ], @@ -4041,32 +4630,33 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "9f83dded91781a01c63574e387eaa769be769115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -4096,13 +4686,14 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2018-12-04T20:46:45+00:00" }, { "name": "instaclick/php-webdriver", @@ -4246,25 +4837,28 @@ }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -4287,33 +4881,33 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2019-04-07T13:18:21+00:00" }, { "name": "nette/caching", - "version": "v2.5.8", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/nette/caching.git", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555" + "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/7fba7c7ab2585fafb7b31152f2595e1551120555", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555", + "url": "https://api.github.com/repos/nette/caching/zipball/d1abc4216f1cd42263c266af1907bbcbda4094c9", + "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9", "shasum": "" }, "require": { - "nette/finder": "^2.2 || ~3.0.0", + "nette/finder": "^2.4 || ~3.0.0", "nette/utils": "^2.4 || ~3.0.0", - "php": ">=5.6.0" + "php": ">=7.1" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "latte/latte": "^2.4", - "nette/di": "^2.4 || ~3.0.0", + "nette/di": "^v3.0.0-beta2", "nette/tester": "^2.0", "tracy/tracy": "^2.4" }, @@ -4321,6 +4915,69 @@ "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", + "homepage": "https://nette.org", + "keywords": [ + "cache", + "journal", + "memcached", + "nette", + "sqlite" + ], + "time": "2019-02-05T21:28:16+00:00" + }, + { + "name": "nette/finder", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4 || ~3.0.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", "extra": { "branch-alias": { "dev-master": "2.5-dev" @@ -4347,70 +5004,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "? Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2018-03-21T11:04:32+00:00" - }, - { - "name": "nette/finder", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", - "shasum": "" - }, - "require": { - "nette/utils": "~2.4", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "description": "? Nette Finder: find files and directories with an intuitive API.", "homepage": "https://nette.org", "keywords": [ "filesystem", @@ -4418,7 +5012,7 @@ "iterator", "nette" ], - "time": "2018-06-28T11:49:23+00:00" + "time": "2019-02-28T18:13:25+00:00" }, { "name": "nette/reflection", @@ -4486,23 +5080,20 @@ }, { "name": "nette/utils", - "version": "v2.5.3", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce" + "reference": "bd961f49b211997202bda1d0fbc410905be370d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/17b9f76f2abd0c943adfb556e56f2165460b15ce", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce", + "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", + "reference": "bd961f49b211997202bda1d0fbc410905be370d4", "shasum": "" }, "require": { - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" + "php": ">=7.1" }, "require-dev": { "nette/tester": "~2.0", @@ -4511,7 +5102,7 @@ "suggest": { "ext-gd": "to use Image", "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", "ext-xml": "to use Strings::length() etc. when mbstring is not available" @@ -4519,15 +5110,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" - ], - "files": [ - "src/loader.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4564,7 +5152,7 @@ "utility", "validation" ], - "time": "2018-09-18T10:22:16+00:00" + "time": "2019-03-22T01:00:30+00:00" }, { "name": "ondram/ci-detector", @@ -4599,7 +5187,7 @@ ], "authors": [ { - "name": "OndÅ™ej Machulda", + "name": "Ondřej Machulda", "email": "ondrej.machulda@gmail.com" } ], @@ -4675,29 +5263,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", + "php": "^7.0", "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -4716,7 +5310,7 @@ } ], "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-11-10T14:09:06+00:00" + "time": "2019-04-30T17:48:53+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4767,16 +5361,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { @@ -4797,8 +5391,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -4826,7 +5420,7 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { "name": "phpunit/php-code-coverage", @@ -5030,29 +5624,29 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.12", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5075,7 +5669,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-12-04T08:55:13+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", @@ -5784,16 +6378,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.3.2", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", "shasum": "" }, "require": { @@ -5826,25 +6420,25 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", "standards" ], - "time": "2018-09-23T23:08:17+00:00" + "time": "2019-04-10T23:49:02+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "420458095cf60025eb0841276717e0da7f75e50e" + "reference": "4459eef5298dedfb69f771186a580062b8516497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e", - "reference": "420458095cf60025eb0841276717e0da7f75e50e", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497", + "reference": "4459eef5298dedfb69f771186a580062b8516497", "shasum": "" }, "require": { @@ -5887,20 +6481,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/options-resolver", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953" + "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2cf5aa084338c1f67166013aebe87e2026bbe953", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", + "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", "shasum": "" }, "require": { @@ -5941,20 +6535,20 @@ "configuration", "options" ], - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-04-10T16:00:48+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "0f43969ab2718de55c1c1158dce046668079788d" + "reference": "2a651c2645c10bbedd21170771f122d935e0dd58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f43969ab2718de55c1c1158dce046668079788d", - "reference": "0f43969ab2718de55c1c1158dce046668079788d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58", + "reference": "2a651c2645c10bbedd21170771f122d935e0dd58", "shasum": "" }, "require": { @@ -5990,20 +6584,20 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603" + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603", + "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", "shasum": "" }, "require": { @@ -6049,24 +6643,25 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-03-25T07:48:46+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -6099,20 +6694,20 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" }, { "name": "wimg/php-compatibility", - "version": "9.0.0", + "version": "9.1.1", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25" + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/e9f4047e5edf53c88f36f1dafc0d49454ce13e25", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", "shasum": "" }, "require": { @@ -6158,7 +6753,7 @@ "standards" ], "abandoned": "phpcompatibility/php-compatibility", - "time": "2018-10-07T17:38:02+00:00" + "time": "2018-12-30T23:16:27+00:00" } ], "aliases": [], @@ -6173,7 +6768,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=5.6" + "php": ">=7.1" }, "platform-dev": [] } diff --git a/thirdparty/pake/pakeYaml.class.php b/thirdparty/pake/pakeYaml.class.php index 55c4fa30b..3c50bfddf 100644 --- a/thirdparty/pake/pakeYaml.class.php +++ b/thirdparty/pake/pakeYaml.class.php @@ -80,7 +80,7 @@ * @access public * @return void */ - public function pakeYAMLNode() { + public function __construct() { $this->id = uniqid(''); } } From 8c1bad32d7f93cd899a34093b03b9738364ff593 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Tue, 25 Jun 2019 15:53:38 -0400 Subject: [PATCH 16/30] PMC-897 --- gulliver/system/class.g.php | 307 +++++++++++++++++++++++++++++++++++- 1 file changed, 302 insertions(+), 5 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 60207b1be..7994e8d88 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5060,11 +5060,308 @@ class G public static function reservedWordsSql() { //Reserved words SQL - $reservedWordsSql = array("ACCESSIBLE","ACTION","ADD","ALL","ALTER","ANALYZE","AND","ANY","AS","ASC","ASENSITIVE","AUTHORIZATION","BACKUP","BEFORE","BEGIN","BETWEEN","BIGINT","BINARY","BIT","BLOB","BOTH","BREAK","BROWSE","BULK","BY","CALL","CASCADE","CASE","CHANGE","CHAR","CHARACTER","CHECK","CHECKPOINT","CLOSE","CLUSTERED","COALESCE","COLLATE","COLUMN","COMMIT","COMPUTE","CONDITION","CONSTRAINT","CONTAINS","CONTAINSTABLE","CONTINUE","CONVERT","CREATE","CROSS","CURRENT","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURSOR","DATABASE","DATABASES","DATE","DAY_HOUR","DAY_MICROSECOND","DAY_MINUTE","DAY_SECOND","DBCC","DEALLOCATE","DEC","DECIMAL","DECLARE","DEFAULT","DELAYED","DELETE","DENY","DESC","DESCRIBE","DETERMINISTIC","DISK","DISTINCT","DISTINCTROW", - "DISTRIBUTED","DIV","DOUBLE","DROP","DUAL","DUMMY","DUMP","EACH","ELSE","ELSEIF","ENCLOSED","END","ENUM","ERRLVL","ESCAPE","ESCAPED","EXCEPT","EXEC","EXECUTE","EXISTS","EXIT","EXPLAIN","FALSE","FETCH","FILE","FILLFACTOR","FLOAT","FLOAT4","FLOAT8","FOR","FORCE","FOREIGN","FREETEXT","FREETEXTTABLE","FROM","FULL","FULLTEXT","FUNCTION","GENERAL","GOTO","GRANT","GROUP","HAVING","HIGH_PRIORITY","HOLDLOCK","HOUR_MICROSECOND","HOUR_MINUTE","HOUR_SECOND","IDENTITY","IDENTITYCOL","IDENTITY_INSERT","IF","IGNORE","IGNORE_SERVER_IDS","IN","INDEX","INFILE","INNER","INOUT","INSENSITIVE","INSERT","INT","INT1","INT2","INT3","INT4","INT8","INTEGER","INTERSECT","INTERVAL","INTO","IS","ITERATE","JOIN","KEY","KEYS","KILL","LEADING","LEAVE","LEFT","LIKE","LIMIT","LINEAR","LINENO","LINES", - "LOAD","LOCALTIME","LOCALTIMESTAMP","LOCK","LONG","LONGBLOB","LONGTEXT","LOOP","LOW_PRIORITY","MASTER_HEARTBEAT_PERIOD","MASTER_SSL_VERIFY_SERVER_CERT","MATCH","MAXVALUE","MEDIUMBLOB","MEDIUMINT","MEDIUMTEXT","MIDDLEINT","MINUTE_MICROSECOND","MINUTE_SECOND","MOD","MODIFIES","NATIONAL","NATURAL","NO","NOCHECK","NONCLUSTERED","NOT","NO_WRITE_TO_BINLOG","NULL","NULLIF","NUMERIC","OF","OFF","OFFSETS","ON","OPEN","OPENDATASOURCE","OPENQUERY","OPENROWSET","OPENXML","OPTIMIZE","OPTION","OPTIONALLY","OR","ORDER","OUT","OUTER","OUTFILE","OVER","PERCENT","PLAN","PRECISION","PRIMARY","PRINT","PROC","PROCEDURE","PUBLIC","PURGE","RAISERROR","RANGE","READ","READS","READTEXT","READ_WRITE","REAL","RECONFIGURE","REFERENCES","REGEXP","RELEASE","RENAME","REPEAT","REPLACE", - "REPLICATION","REQUIRE","RESIGNAL","RESTORE","RESTRICT","RETURN","REVOKE","RIGHT","RLIKE","ROLLBACK","ROWCOUNT","ROWGUIDCOL","RULE","SAVE","SCHEMA","SCHEMAS","SECOND_MICROSECOND","SELECT","SENSITIVE","SEPARATOR","SESSION_USER","SET","SETUSER","SHOW","SHUTDOWN","SIGNAL","SLOW","SMALLINT","SOME","SPATIAL","SPECIFIC","SQL","SQLEXCEPTION","SQLSTATE","SQLWARNING","SQL_BIG_RESULT","SQL_CALC_FOUND_ROWS","SQL_SMALL_RESULT","SSL","STARTING","STATISTICS","STRAIGHT_JOIN","SYSTEM_USER","TABLE","TERMINATED","TEXT","TEXTSIZE","THEN","TIME","TIMESTAMP","TINYBLOB","TINYINT","TINYTEXT","TO","TOP","TRAILING","TRAN","TRANSACTION","TRIGGER","TRUE","TRUNCATE","TSEQUAL","UNDO","UNION","UNIQUE","UNLOCK","UNSIGNED","UPDATE","UPDATETEXT","USAGE","USE","USER","USING","UTC_DATE","UTC_TIME", - "UTC_TIMESTAMP","VALUES","VARBINARY","VARCHAR","VARCHARACTER","VARYING","VIEW","WAITFOR","WHEN","WHERE","WHILE","WITH","WRITE","WRITETEXT","XOR","YEAR_MONTH","ZEROFILL"); + $reservedWordsSql = [ + "ACCESSIBLE", + "ADD", + "ALL", + "ALTER", + "ANALYZE", + "AND", + "AS", + "ASC", + "ASENSITIVE", + "AUTHORIZATION", + "BEFORE", + "BETWEEN", + "BIGINT", + "BINARY", + "BLOB", + "BOTH", + "BREAK", + "BROWSE", + "BULK", + "BY", + "CALL", + "CASCADE", + "CASE", + "CHANGE", + "CHAR", + "CHARACTER", + "CHECK", + "CHECKPOINT", + "CLUSTERED", + "COLLATE", + "COLUMN", + "COMPUTE", + "CONDITION", + "CONSTRAINT", + "CONTAINSTABLE", + "CONTINUE", + "CONVERT", + "CREATE", + "CROSS", + "CURRENT_DATE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "CURSOR", + "DATABASE", + "DATABASES", + "DAY_HOUR", + "DAY_MICROSECOND", + "DAY_MINUTE", + "DAY_SECOND", + "DBCC", + "DEC", + "DECIMAL", + "DECLARE", + "DEFAULT", + "DELAYED", + "DELETE", + "DENY", + "DESC", + "DESCRIBE", + "DETERMINISTIC", + "DISTINCT", + "DISTINCTROW", + "DISTRIBUTED", + "DIV", + "DOUBLE", + "DROP", + "DUAL", + "DUMMY", + "DUMP", + "EACH", + "ELSE", + "ELSEIF", + "ENCLOSED", + "ERRLVL", + "ESCAPED", + "EXCEPT", + "EXEC", + "EXISTS", + "EXIT", + "EXPLAIN", + "FALSE", + "FETCH", + "FILLFACTOR", + "FLOAT", + "FLOAT4", + "FLOAT8", + "FOR", + "FORCE", + "FOREIGN", + "FREETEXT", + "FREETEXTTABLE", + "FROM", + "FULLTEXT", + "GENERATED", + "GET", + "GOTO", + "GRANT", + "GROUP", + "HAVING", + "HIGH_PRIORITY", + "HOLDLOCK", + "HOUR_MICROSECOND", + "HOUR_MINUTE", + "HOUR_SECOND", + "IDENTITY", + "IDENTITYCOL", + "IDENTITY_INSERT", + "IF", + "IGNORE", + "IN", + "INDEX", + "INFILE", + "INNER", + "INOUT", + "INSENSITIVE", + "INSERT", + "INT", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", + "INTEGER", + "INTERSECT", + "INTERVAL", + "INTO", + "IO_AFTER_GTIDS", + "IO_BEFORE_GTIDS", + "IS", + "ITERATE", + "JOIN", + "KEY", + "KEYS", + "KILL", + "LEADING", + "LEAVE", + "LEFT", + "LIKE", + "LIMIT", + "LINEAR", + "LINENO", + "LINES", + "LOAD", + "LOCALTIME", + "LOCALTIMESTAMP", + "LOCK", + "LONG", + "LONGBLOB", + "LONGTEXT", + "LOOP", + "LOW_PRIORITY", + "MASTER_BIND", + "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", + "MAXVALUE", + "MEDIUMBLOB", + "MEDIUMINT", + "MEDIUMTEXT", + "MIDDLEINT", + "MINUTE_MICROSECOND", + "MINUTE_SECOND", + "MOD", + "MODIFIES", + "NATURAL", + "NOCHECK", + "NONCLUSTERED", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NULLIF", + "NUMERIC", + "OF", + "OFF", + "OFFSETS", + "ON", + "OPENDATASOURCE", + "OPENQUERY", + "OPENROWSET", + "OPENXML", + "OPTIMIZE", + "OPTIMIZER_COSTS", + "OPTION", + "OPTIONALLY", + "OR", + "ORDER", + "OUT", + "OUTER", + "OUTFILE", + "OVER", + "PARTITION", + "PARSE_GCOL_EXPR", + "PERCENT", + "PLAN", + "PRECISION", + "PRIMARY", + "PRINT", + "PROC", + "PROCEDURE", + "PUBLIC", + "PURGE", + "RAISERROR", + "RANGE", + "READ", + "READS", + "READTEXT", + "READ_WRITE", + "REAL", + "RECONFIGURE", + "REFERENCES", + "REGEXP", + "RELEASE", + "RENAME", + "REPEAT", + "REPLACE", + "REQUIRE", + "RESIGNAL", + "RESTRICT", + "RETURN", + "REVOKE", + "RIGHT", + "RLIKE", + "ROWCOUNT", + "ROWGUIDCOL", + "RULE", + "SAVE", + "SCHEMA", + "SCHEMAS", + "SECOND_MICROSECOND", + "SELECT", + "SENSITIVE", + "SEPARATOR", + "SESSION_USER", + "SET", + "SETUSER", + "SHOW", + "SIGNAL", + "SMALLINT", + "SPATIAL", + "SPECIFIC", + "SQL", + "SQLEXCEPTION", + "SQLSTATE", + "SQLWARNING", + "SQL_AFTER_GTIDS", + "SQL_BEFORE_GTIDS", + "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", + "SSL", + "STARTING", + "STATISTICS", + "STORED", + "STRAIGHT_JOIN", + "SYSTEM_USER", + "TABLE", + "TERMINATED", + "TEXTSIZE", + "THEN", + "TINYBLOB", + "TINYINT", + "TINYTEXT", + "TO", + "TOP", + "TRAILING", + "TRAN", + "TRIGGER", + "TRUE", + "TSEQUAL", + "UNDO", + "UNION", + "UNIQUE", + "UNLOCK", + "UNSIGNED", + "UPDATE", + "UPDATETEXT", + "USAGE", + "USE", + "USING", + "UTC_DATE", + "UTC_TIME", + "UTC_TIMESTAMP", + "VALUES", + "VARBINARY", + "VARCHAR", + "VARCHARACTER", + "VARYING", + "VIRTUAL", + "WAITFOR", + "WHEN", + "WHERE", + "WHILE", + "WITH", + "WRITE", + "WRITETEXT", + "XOR", + "YEAR_MONTH", + "ZEROFILL", + "_FILENAME" + ]; + return $reservedWordsSql; } From 150b6d9ab5d709741cb860d382a7103082a6935c Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 26 Jun 2019 12:25:53 -0400 Subject: [PATCH 17/30] PMC-880 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.5.42 to v5.6.0) --- app/Logging/CustomizeFormatter.php | 22 + bootstrap/app.php | 11 - composer.json | 3 +- composer.lock | 1584 ++++++++-------------------- config/app.php | 2 - config/logging.php | 85 ++ 6 files changed, 544 insertions(+), 1163 deletions(-) create mode 100644 app/Logging/CustomizeFormatter.php create mode 100644 config/logging.php diff --git a/app/Logging/CustomizeFormatter.php b/app/Logging/CustomizeFormatter.php new file mode 100644 index 000000000..f9846ac5f --- /dev/null +++ b/app/Logging/CustomizeFormatter.php @@ -0,0 +1,22 @@ +getHandlers() as $handler) { + $handler->setFormatter(new LineFormatter(null, null, true, true)); + } + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index a5e730432..e1cbf9613 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -50,17 +50,6 @@ $app->singleton( Handler::class ); -$app->configureMonologUsing(function ($monolog) use ($app) { - $monolog->pushHandler( - (new RotatingFileHandler( - // Set the log path - $app->storagePath() . '/logs/processmaker.log', - // Set the number of daily files you want to keep - $app->make('config')->get('app.log_max_files', 5) - ))->setFormatter(new LineFormatter(null, null, true, true)) - ); -}); - /* |-------------------------------------------------------------------------- | Return The Application diff --git a/composer.json b/composer.json index c5aee9a92..c5520ae40 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "prefer-stable": true, "require": { "php": ">=7.1", - "laravel/framework": "5.5.*", + "laravel/framework": "5.6.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", @@ -56,7 +56,6 @@ "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", "filp/whoops": "~2.0", - "lmc/steward": "^2.2", "behat/behat": "^3.3", "behat/mink-selenium2-driver": "^1.3", "squizlabs/php_codesniffer": "^2.2 || ^3.0.2", diff --git a/composer.lock b/composer.lock index af6b03908..03459229e 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": "4475480aaf9f89aefd4ec4bf9c009e71", + "content-hash": "d081c4d39988f562487dbfe81bb9e856", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -369,6 +369,60 @@ ], "time": "2019-06-08T11:03:04+00:00" }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2019-03-31T00:38:28+00:00" + }, { "name": "egulias/email-validator", "version": "2.1.9", @@ -690,43 +744,46 @@ }, { "name": "laravel/framework", - "version": "v5.5.45", + "version": "v5.6.39", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80" + "reference": "37bb306f516669ab4f888c16003f694313ab299e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/52c79ecf54b6168a54730ccb6c4c9f3561732a80", - "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80", + "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", + "reference": "37bb306f516669ab4f888c16003f694313ab299e", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", + "dragonmantank/cron-expression": "~2.0", "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", "league/flysystem": "^1.0.8", "monolog/monolog": "~1.12", - "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "^1.26.0", - "php": ">=7.0", + "nesbot/carbon": "1.25.*", + "php": "^7.1.3", "psr/container": "~1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "~3.0", + "ramsey/uuid": "^3.7", "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~3.3", - "symfony/debug": "~3.3", - "symfony/finder": "~3.3", - "symfony/http-foundation": "~3.3", - "symfony/http-kernel": "~3.3", - "symfony/process": "~3.3", - "symfony/routing": "~3.3", - "symfony/var-dumper": "~3.3", - "tijsverkoyen/css-to-inline-styles": "~2.2", + "symfony/console": "~4.0", + "symfony/debug": "~4.0", + "symfony/finder": "~4.0", + "symfony/http-foundation": "~4.0", + "symfony/http-kernel": "~4.0", + "symfony/process": "~4.0", + "symfony/routing": "~4.0", + "symfony/var-dumper": "~4.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", "vlucas/phpdotenv": "~2.2" }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -755,44 +812,46 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "tightenco/collect": "<5.5.33" + "illuminate/view": "self.version" }, "require-dev": { "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.5", + "doctrine/dbal": "~2.6", "filp/whoops": "^2.1.4", + "league/flysystem-cached-adapter": "~1.0", "mockery/mockery": "~1.0", - "orchestra/testbench-core": "3.5.*", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "3.6.*", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~6.0", + "phpunit/phpunit": "~7.0", "predis/predis": "^1.1.1", - "symfony/css-selector": "~3.3", - "symfony/dom-crawler": "~3.3" + "symfony/css-selector": "~4.0", + "symfony/dom-crawler": "~4.0" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -820,7 +879,7 @@ "framework", "laravel" ], - "time": "2019-01-28T20:53:19+00:00" + "time": "2018-10-04T14:50:41+00:00" }, { "name": "laravel/tinker", @@ -1172,62 +1231,18 @@ ], "time": "2016-04-12T18:29:35+00:00" }, - { - "name": "mtdowling/cron-expression", - "version": "v1.2.1", - "source": { - "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "time": "2017-01-23T04:29:33+00:00" - }, { "name": "nesbot/carbon", - "version": "1.38.4", + "version": "1.25.3", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" + "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", + "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", "shasum": "" }, "require": { @@ -1245,16 +1260,11 @@ ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade", - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - } + "update-helper": "Carbon\\Upgrade" }, "autoload": { "psr-4": { - "": "src/" + "Carbon\\": "src/Carbon/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1275,7 +1285,7 @@ "datetime", "time" ], - "time": "2019-06-03T15:41:40+00:00" + "time": "2019-06-03T17:56:44+00:00" }, { "name": "nikic/php-parser", @@ -2212,25 +2222,27 @@ }, { "name": "symfony/console", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6" + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", - "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", + "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" }, "conflict": { "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, "provide": { @@ -2238,11 +2250,12 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", + "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "^4.3", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" }, "suggest": { "psr/log": "For using the console logger", @@ -2253,7 +2266,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2280,29 +2293,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-05-09T08:42:51+00:00" + "time": "2019-06-05T13:25:51+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.1", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -2333,36 +2346,36 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/debug", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c" + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c", - "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c", + "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0" }, "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "symfony/http-kernel": "<3.4" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "symfony/http-kernel": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2389,7 +2402,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-05-18T13:32:47+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/dependency-injection", @@ -2466,30 +2479,37 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", - "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.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" + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", + "symfony/stopwatch": "~3.4|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2498,7 +2518,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2525,30 +2545,88 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-04-02T08:51:52+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.4.28", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-20T06:46:26+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "shasum": "" + }, + "require": { + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2575,29 +2653,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-02-04T21:34:32+00:00" + "time": "2019-06-03T20:27:40+00:00" }, { "name": "symfony/finder", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c" + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c", - "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c", + "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2624,34 +2702,35 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-24T12:25:55+00:00" + "time": "2019-05-26T20:47:49+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e" + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/677ae5e892b081e71a665bfa7dd90fe61800c00e", - "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "php": "^7.1.3", + "symfony/mime": "^4.3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2678,34 +2757,37 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-05-27T05:50:24+00:00" + "time": "2019-06-06T10:05:02+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e" + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ddde6547880914f2e41b0b29e585b8c939a1e39e", - "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php73": "^1.9" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -2713,34 +2795,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "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.10|^4.0.10", - "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/browser-kit": "^4.3", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.3", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~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" + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/translation-contracts": "^1.1", + "symfony/var-dumper": "^4.1.1", + "twig/twig": "^1.34|^2.4" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", - "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2767,7 +2849,66 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-05-28T09:24:42+00:00" + "time": "2019-06-06T13:23:34+00:00" + }, + { + "name": "symfony/mime", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "egulias/email-validator": "^2.0", + "symfony/dependency-injection": "~3.4|^4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2019-06-04T09:22:54+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3007,65 +3148,6 @@ ], "time": "2019-02-06T07:57:58+00:00" }, - { - "name": "symfony/polyfill-php70", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "bc4858fb611bda58719124ca079baff854149c89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", - "reference": "bc4858fb611bda58719124ca079baff854149c89", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-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": "2019-02-06T07:57:58+00:00" - }, { "name": "symfony/polyfill-php72", "version": "v1.11.0", @@ -3122,26 +3204,84 @@ "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/process", - "version": "v3.4.28", + "name": "symfony/polyfill-php73", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/afe411c2a6084f25cff55a01d0d4e1474c97ff13", - "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "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.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/process", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" } }, "autoload": { @@ -3168,37 +3308,37 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-05-22T12:54:11+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/routing", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0" + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3458f90c2c17dfbb3260dbbfca19a0c415576ce0", - "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0", + "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "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/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -3211,7 +3351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3244,7 +3384,7 @@ "uri", "url" ], - "time": "2019-05-18T16:36:47+00:00" + "time": "2019-06-05T09:16:20+00:00" }, { "name": "symfony/service-contracts", @@ -3439,38 +3579,45 @@ }, { "name": "symfony/var-dumper", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a" + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a", - "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" }, "require-dev": { "ext-iconv": "*", + "symfony/console": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "twig/twig": "~1.34|~2.4" }, "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": "" + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3504,7 +3651,7 @@ "debug", "dump" ], - "time": "2019-05-01T09:52:10+00:00" + "time": "2019-06-05T02:08:12+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3664,61 +3811,6 @@ } ], "packages-dev": [ - { - "name": "beberlei/assert", - "version": "v2.9.9", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "124317de301b7c91d5fce34c98bba2c6925bec95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95", - "reference": "124317de301b7c91d5fce34c98bba2c6925bec95", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1.1", - "phpunit/phpunit": "^4.8.35|^5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, - "files": [ - "lib/Assert/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "time": "2019-05-28T15:27:37+00:00" - }, { "name": "behat/behat", "version": "v3.5.0", @@ -3858,31 +3950,30 @@ }, { "name": "behat/mink", - "version": "dev-master", + "version": "v1.7.1", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea" + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea", - "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "^2.7|^3.0|^4.0" + "symfony/css-selector": "~2.1|~3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.3|^4.0" + "symfony/phpunit-bridge": "~2.7|~3.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", - "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" }, "type": "library", "extra": { @@ -3913,7 +4004,7 @@ "testing", "web" ], - "time": "2019-05-14T09:56:49+00:00" + "time": "2016-03-05T08:26:18+00:00" }, { "name": "behat/mink-selenium2-driver", @@ -4020,51 +4111,6 @@ ], "time": "2017-04-04T11:38:05+00:00" }, - { - "name": "clue/graph", - "version": "v0.9.0", - "source": { - "type": "git", - "url": "https://github.com/clue/graph.git", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/graph/zipball/0336a4d5229fa61a20ccceaeab25e52ac9542700", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "graphp/algorithms": "Common graph algorithms, such as Dijkstra and Moore-Bellman-Ford (shortest path), minimum spanning tree (MST), Kruskal, Prim and many more..", - "graphp/graphviz": "GraphViz graph drawing / DOT output" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fhaculty\\Graph\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A mathematical graph/network library written in PHP", - "homepage": "https://github.com/clue/graph", - "keywords": [ - "edge", - "graph", - "mathematical", - "network", - "vertex" - ], - "time": "2015-03-07T18:11:31+00:00" - }, { "name": "container-interop/container-interop", "version": "1.2.0", @@ -4152,66 +4198,6 @@ ], "time": "2019-03-17T17:37:11+00:00" }, - { - "name": "facebook/webdriver", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "e43de70f3c7166169d0f14a374505392734160e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", - "reference": "e43de70f3c7166169d0f14a374505392734160e5", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "php-coveralls/php-coveralls": "^2.0", - "php-mock/php-mock-phpunit": "^1.1", - "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" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-community": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" - ], - "time": "2019-06-13T08:02:18+00:00" - }, { "name": "filp/whoops", "version": "2.1.6", @@ -4272,146 +4258,6 @@ ], "time": "2017-02-18T14:22:27+00:00" }, - { - "name": "florianwolters/component-core-stringutils", - "version": "v0.3.1", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Core-StringUtils.git", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Core-StringUtils/zipball/51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Offers operations on the data type string as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Core-StringUtils", - "keywords": [ - "helper", - "language", - "string", - "wrapper" - ], - "time": "2013-07-01T10:24:07+00:00" - }, - { - "name": "florianwolters/component-util-reflection", - "version": "v0.2.0", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Reflection.git", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Reflection/zipball/ffc94b62e2834d7d0306374d952eda7a5abd1844", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": ">=0.2-beta", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Provides operations for the PHP Reflection API as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Reflection", - "keywords": [ - "reflection", - "utility" - ], - "time": "2013-03-19T16:42:41+00:00" - }, - { - "name": "florianwolters/component-util-singleton", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Singleton.git", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Singleton/zipball/ab39ba531a38c3b76b4babb0035ce840cde7f443", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": "0.3.*", - "florianwolters/component-util-reflection": "0.2.*", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": [ - "src/php", - "src/tests/unit-tests/php", - "src/tests/mocks/php" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "The Singleton (and Registry of Singletons a.k.a. Multiton) design pattern as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Singleton", - "keywords": [ - "creation", - "pattern", - "singleton", - "utility" - ], - "time": "2013-06-29T12:35:22+00:00" - }, { "name": "fzaninotto/faker", "version": "v1.8.0", @@ -4462,56 +4308,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "graphp/algorithms", - "version": "v0.8.1", - "source": { - "type": "git", - "url": "https://github.com/graphp/algorithms.git", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/graphp/algorithms/zipball/81db4049c35730767ec8f97fb5c4844234b86cef", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef", - "shasum": "" - }, - "require": { - "clue/graph": "~0.9.0|~0.8.0", - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Graphp\\Algorithms\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@lueck.tv" - } - ], - "description": "Common mathematical graph algorithms", - "homepage": "https://github.com/graphp/algorithms", - "keywords": [ - "Graph algorithms", - "dijkstra", - "kruskal", - "minimum spanning tree", - "moore-bellman-ford", - "prim", - "shortest path" - ], - "time": "2015-03-08T10:12:01+00:00" - }, { "name": "guzzlehttp/guzzle", "version": "6.3.3", @@ -4754,87 +4550,6 @@ ], "time": "2017-06-30T04:02:48+00:00" }, - { - "name": "lmc/steward", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/lmc-eu/steward.git", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lmc-eu/steward/zipball/a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "shasum": "" - }, - "require": { - "beberlei/assert": "^2.7", - "clue/graph": "~0.9.0", - "doctrine/inflector": "~1.0", - "ext-curl": "*", - "ext-zip": "*", - "facebook/webdriver": "^1.4.0", - "florianwolters/component-util-singleton": "0.3.2", - "graphp/algorithms": "^0.8.1", - "nette/reflection": "^2.4.2", - "ondram/ci-detector": "^2.1", - "php": "^5.6 || ~7.0", - "phpunit/phpunit": "^5.7.11", - "symfony/console": "^3.3.0", - "symfony/event-dispatcher": "~3.0", - "symfony/filesystem": "~3.0", - "symfony/finder": "~3.0", - "symfony/options-resolver": "^3.2", - "symfony/process": "^3.2.0", - "symfony/stopwatch": "^3.0", - "symfony/yaml": "^3.2" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "php-coveralls/php-coveralls": "^1.0.2", - "php-mock/php-mock-phpunit": "~1.0", - "squizlabs/php_codesniffer": "^2.4.1", - "symfony/var-dumper": "^3.2" - }, - "suggest": { - "ext-posix": "For colored output", - "ext-xdebug": "For remote tests debugging" - }, - "bin": [ - "bin/steward", - "bin/steward.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "Lmc\\Steward\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "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", - "selenium", - "testing", - "webdriver" - ], - "time": "2018-07-26T22:03:36+00:00" - }, { "name": "myclabs/deep-copy", "version": "1.9.1", @@ -4883,330 +4598,6 @@ ], "time": "2019-04-07T13:18:21+00:00" }, - { - "name": "nette/caching", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/d1abc4216f1cd42263c266af1907bbcbda4094c9", - "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9", - "shasum": "" - }, - "require": { - "nette/finder": "^2.4 || ~3.0.0", - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "^2.4", - "nette/di": "^v3.0.0-beta2", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "suggest": { - "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2019-02-05T21:28:16+00:00" - }, - { - "name": "nette/finder", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", - "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", - "shasum": "" - }, - "require": { - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "^2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "? Nette Finder: find files and directories with an intuitive API.", - "homepage": "https://nette.org", - "keywords": [ - "filesystem", - "glob", - "iterator", - "nette" - ], - "time": "2019-02-28T18:13:25+00:00" - }, - { - "name": "nette/reflection", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/reflection.git", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/reflection/zipball/b12327e98ead74e87a1315e0d48182a702adf901", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "nette/caching": "^2.2 || ^3.0", - "nette/utils": "^2.4 || ^3.0", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "^2.4 || ^3.0", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Reflection: docblock annotations parser and common reflection classes", - "homepage": "https://nette.org", - "keywords": [ - "annotation", - "nette", - "reflection" - ], - "time": "2017-07-11T19:28:57+00:00" - }, - { - "name": "nette/utils", - "version": "v3.0.1", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "bd961f49b211997202bda1d0fbc410905be370d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", - "reference": "bd961f49b211997202bda1d0fbc410905be370d4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "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.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "time": "2019-03-22T01:00:30+00:00" - }, - { - "name": "ondram/ci-detector", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/OndraM/ci-detector.git", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/be3410cb14443796122ca051f4224b5eae06aa76", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.12", - "phpunit/phpunit": "^5.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "OndraM\\CiDetector\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ondřej Machulda", - "email": "ondrej.machulda@gmail.com" - } - ], - "description": "Detect current continuous integration server and provide unified access to properties of current build", - "keywords": [ - "CircleCI", - "Codeship", - "adapter", - "appveyor", - "bamboo", - "continuous integration", - "gitlab", - "interface", - "jenkins", - "teamcity", - "travis" - ], - "time": "2017-05-26T16:39:57+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "1.0.1", @@ -6483,125 +5874,22 @@ "homepage": "https://symfony.com", "time": "2019-01-16T09:39:14+00:00" }, - { - "name": "symfony/options-resolver", - "version": "v3.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", - "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "time": "2019-04-10T16:00:48+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v3.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "2a651c2645c10bbedd21170771f122d935e0dd58" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58", - "reference": "2a651c2645c10bbedd21170771f122d935e0dd58", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" - }, { "name": "symfony/yaml", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99", + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -6616,7 +5904,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -6643,7 +5931,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-03-25T07:48:46+00:00" + "time": "2019-04-06T14:04:46+00:00" }, { "name": "webmozart/assert", diff --git a/config/app.php b/config/app.php index 651ebfc6a..d6a80bd28 100644 --- a/config/app.php +++ b/config/app.php @@ -9,8 +9,6 @@ return [ 'url' => env('APP_URL', 'http://localhost'), 'env' => env('APP_ENV', 'production'), 'debug' => env('APP_DEBUG', false), - 'log' => env('APP_LOG', 'single'), - 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'cache_lifetime' => env('APP_CACHE_LIFETIME', 60), 'timezone' => 'UTC', 'providers' => [ diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 000000000..e8863a3f8 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,85 @@ + env('APP_LOG', env('LOG_CHANNEL', 'daily')), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/processmaker.log'), + 'level' => 'debug', + ], + + 'daily' => [ + 'driver' => 'daily', + 'tap' => [ + App\Logging\CustomizeFormatter::class + ], + 'path' => storage_path('logs/processmaker.log'), + 'level' => env('APP_LOG_LEVEL', 'debug'), + 'days' => $app->make('config')->get('app.log_max_files', 5), + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + + ], + +]; \ No newline at end of file From e36a3844218fe779fa662b5283e75cb53bcc7557 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 26 Jun 2019 13:56:49 -0400 Subject: [PATCH 18/30] PMC-882 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.6.30 to v5.7) --- composer.json | 2 +- composer.lock | 1280 +++++++++++++++++++++++++++++++++++------------- config/app.php | 1 + 3 files changed, 929 insertions(+), 354 deletions(-) diff --git a/composer.json b/composer.json index c5520ae40..989da13b4 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "prefer-stable": true, "require": { "php": ">=7.1", - "laravel/framework": "5.6.*", + "laravel/framework": "5.7.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", diff --git a/composer.lock b/composer.lock index 03459229e..aa753f4cb 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": "d081c4d39988f562487dbfe81bb9e856", + "content-hash": "f548a9edab2774eff09bb261eb05c6d0", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -609,6 +609,189 @@ ], "time": "2015-10-16T22:11:08+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, { "name": "jakub-onderka/php-console-color", "version": "v0.2", @@ -744,42 +927,45 @@ }, { "name": "laravel/framework", - "version": "v5.6.39", + "version": "v5.7.28", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "37bb306f516669ab4f888c16003f694313ab299e" + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", - "reference": "37bb306f516669ab4f888c16003f694313ab299e", + "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192", + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192", "shasum": "" }, "require": { - "doctrine/inflector": "~1.1", - "dragonmantank/cron-expression": "~2.0", - "erusev/parsedown": "~1.7", + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "erusev/parsedown": "^1.7", "ext-mbstring": "*", "ext-openssl": "*", + "laravel/nexmo-notification-channel": "^1.0", + "laravel/slack-notification-channel": "^1.0", "league/flysystem": "^1.0.8", - "monolog/monolog": "~1.12", - "nesbot/carbon": "1.25.*", + "monolog/monolog": "^1.12", + "nesbot/carbon": "^1.26.3", + "opis/closure": "^3.1", "php": "^7.1.3", - "psr/container": "~1.0", + "psr/container": "^1.0", "psr/simple-cache": "^1.0", "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~4.0", - "symfony/debug": "~4.0", - "symfony/finder": "~4.0", - "symfony/http-foundation": "~4.0", - "symfony/http-kernel": "~4.0", - "symfony/process": "~4.0", - "symfony/routing": "~4.0", - "symfony/var-dumper": "~4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.1", + "symfony/debug": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.1", + "symfony/http-kernel": "^4.1", + "symfony/process": "^4.1", + "symfony/routing": "^4.1", + "symfony/var-dumper": "^4.1", "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "~2.2" + "vlucas/phpdotenv": "^2.2" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -815,43 +1001,47 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.6", + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", "filp/whoops": "^2.1.4", - "league/flysystem-cached-adapter": "~1.0", - "mockery/mockery": "~1.0", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.0", "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.6.*", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~7.0", + "orchestra/testbench-core": "3.7.*", + "pda/pheanstalk": "^3.0|^4.0", + "phpunit/phpunit": "^7.5", "predis/predis": "^1.1.1", - "symfony/css-selector": "~4.0", - "symfony/dom-crawler": "~4.0" + "symfony/css-selector": "^4.1", + "symfony/dom-crawler": "^4.1", + "true/punycode": "^2.1" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", - "laravel/tinker": "Required to use the tinker console command (~1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", - "nexmo/client": "Required to use the Nexmo transport (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", + "laravel/tinker": "Required to use the tinker console command (^1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", + "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6-dev" + "dev-master": "5.7-dev" } }, "autoload": { @@ -879,7 +1069,121 @@ "framework", "laravel" ], - "time": "2018-10-04T14:50:41+00:00" + "time": "2019-02-26T15:41:34+00:00" + }, + { + "name": "laravel/nexmo-notification-channel", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/nexmo-notification-channel.git", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", + "shasum": "" + }, + "require": { + "nexmo/client": "^1.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\NexmoChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Nexmo Notification Channel for laravel.", + "keywords": [ + "laravel", + "nexmo", + "notifications" + ], + "time": "2018-12-04T12:57:08+00:00" + }, + { + "name": "laravel/slack-notification-channel", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\SlackChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Slack Notification Channel for laravel.", + "keywords": [ + "laravel", + "notifications", + "slack" + ], + "time": "2018-12-12T13:12:06+00:00" }, { "name": "laravel/tinker", @@ -944,6 +1248,61 @@ ], "time": "2018-10-12T19:39:35+00:00" }, + { + "name": "lcobucci/jwt", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2019-05-24T18:30:49+00:00" + }, { "name": "league/flysystem", "version": "1.0.53", @@ -1233,16 +1592,16 @@ }, { "name": "nesbot/carbon", - "version": "1.25.3", + "version": "1.39.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8" + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", - "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", "shasum": "" }, "require": { @@ -1260,11 +1619,16 @@ ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade" + "update-helper": "Carbon\\Upgrade", + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } }, "autoload": { "psr-4": { - "Carbon\\": "src/Carbon/" + "": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1285,7 +1649,55 @@ "datetime", "time" ], - "time": "2019-06-03T17:56:44+00:00" + "time": "2019-06-11T09:07:59+00:00" + }, + { + "name": "nexmo/client", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/Nexmo/nexmo-php.git", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", + "shasum": "" + }, + "require": { + "lcobucci/jwt": "^3.2", + "php": ">=5.6", + "php-http/client-implementation": "^1.0", + "php-http/guzzle6-adapter": "^1.0", + "zendframework/zend-diactoros": "^1.8.4 || ^2.0" + }, + "require-dev": { + "estahn/phpunit-json-assertions": "^1.0.0", + "php-http/mock-client": "^0.3.0", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Nexmo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Lytle", + "email": "tim@nexmo.com", + "homepage": "http://twitter.com/tjlytle", + "role": "Developer" + } + ], + "description": "PHP Client for using Nexmo's API.", + "time": "2019-05-13T20:27:43+00:00" }, { "name": "nikic/php-parser", @@ -1338,6 +1750,67 @@ ], "time": "2018-02-28T20:30:58+00:00" }, + { + "name": "opis/closure", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "f846725591203098246276b2e7b9e8b7814c4965" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", + "reference": "f846725591203098246276b2e7b9e8b7814c4965", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2019-05-31T20:04:32+00:00" + }, { "name": "paragonie/random_compat", "version": "v9.99.99", @@ -1635,6 +2108,172 @@ ], "time": "2015-02-10T20:07:52+00:00" }, + { + "name": "php-http/guzzle6-adapter", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": ">=5.5.0", + "php-http/httplug": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/adapter-integration-tests": "^0.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle6\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2016-05-10T06:13:32+00:00" + }, + { + "name": "php-http/httplug", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "time": "2016-08-31T08:30:17+00:00" + }, + { + "name": "php-http/promise", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "shasum": "" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" + }, { "name": "phpmailer/phpmailer", "version": "v5.2.27", @@ -1761,6 +2400,108 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.0.0", @@ -2158,16 +2899,16 @@ }, { "name": "symfony/config", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", - "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "url": "https://api.github.com/repos/symfony/config/zipball/9198eea354be75794a7b1064de00d9ae9ae5090f", + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f", "shasum": "" }, "require": { @@ -2218,20 +2959,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-08T06:33:08+00:00" }, { "name": "symfony/console", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "url": "https://api.github.com/repos/symfony/console/zipball/b592b26a24265a35172d8a2094d8b10f22b7cc39", + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39", "shasum": "" }, "require": { @@ -2293,11 +3034,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-06-05T13:25:51+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.28", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -2350,16 +3091,16 @@ }, { "name": "symfony/debug", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "url": "https://api.github.com/repos/symfony/debug/zipball/d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", "shasum": "" }, "require": { @@ -2402,20 +3143,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-19T15:27:09+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" + "reference": "b851928be349c065197fdc0832f78d85139e3903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", - "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b851928be349c065197fdc0832f78d85139e3903", + "reference": "b851928be349c065197fdc0832f78d85139e3903", "shasum": "" }, "require": { @@ -2475,20 +3216,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-15T04:08:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d257021c1ab28d48d24a16de79dfab445ce93398", + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398", "shasum": "" }, "require": { @@ -2545,7 +3286,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -2607,16 +3348,16 @@ }, { "name": "symfony/filesystem", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d", "shasum": "" }, "require": { @@ -2653,20 +3394,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "time": "2019-06-23T08:51:25+00:00" }, { "name": "symfony/finder", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "url": "https://api.github.com/repos/symfony/finder/zipball/33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", "shasum": "" }, "require": { @@ -2702,20 +3443,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-26T20:47:49+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e1b507fcfa4e87d192281774b5ecd4265370180d", + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d", "shasum": "" }, "require": { @@ -2757,20 +3498,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-06-06T10:05:02+00:00" + "time": "2019-06-26T09:25:00+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4150f71e27ed37a74700561b77e3dbd754cbb44d", + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d", "shasum": "" }, "require": { @@ -2849,11 +3590,11 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-06-06T13:23:34+00:00" + "time": "2019-06-26T14:26:16+00:00" }, { "name": "symfony/mime", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -3263,7 +4004,7 @@ }, { "name": "symfony/process", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -3312,16 +4053,16 @@ }, { "name": "symfony/routing", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "url": "https://api.github.com/repos/symfony/routing/zipball/2ef809021d72071c611b218c47a3bf3b17b7325e", + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e", "shasum": "" }, "require": { @@ -3384,7 +4125,7 @@ "uri", "url" ], - "time": "2019-06-05T09:16:20+00:00" + "time": "2019-06-26T13:54:39+00:00" }, { "name": "symfony/service-contracts", @@ -3446,16 +4187,16 @@ }, { "name": "symfony/translation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "url": "https://api.github.com/repos/symfony/translation/zipball/934ab1d18545149e012aa898cf02e9f23790f7a0", + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0", "shasum": "" }, "require": { @@ -3518,7 +4259,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/translation-contracts", @@ -3579,16 +4320,16 @@ }, { "name": "symfony/var-dumper", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/45d6ef73671995aca565a1aa3d9a432a3ea63f91", + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91", "shasum": "" }, "require": { @@ -3651,7 +4392,7 @@ "debug", "dump" ], - "time": "2019-06-05T02:08:12+00:00" + "time": "2019-06-17T17:37:00+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3808,6 +4549,72 @@ "environment" ], "time": "2019-01-29T11:11:52+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^7.0.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.8": "1.8.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2019-04-29T21:11:00+00:00" } ], "packages-dev": [ @@ -4308,189 +5115,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2018-04-22T15:46:56+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2018-12-04T20:46:45+00:00" - }, { "name": "instaclick/php-webdriver", "version": "1.4.5", @@ -5204,56 +5828,6 @@ "abandoned": true, "time": "2017-06-30T09:13:00+00:00" }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -5820,7 +6394,7 @@ }, { "name": "symfony/class-loader", - "version": "v3.4.28", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", @@ -5876,7 +6450,7 @@ }, { "name": "symfony/yaml", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", diff --git a/config/app.php b/config/app.php index d6a80bd28..f031ca9ac 100644 --- a/config/app.php +++ b/config/app.php @@ -20,6 +20,7 @@ return [ Illuminate\Queue\QueueServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Laravel\Tinker\TinkerServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, ], 'aliases' => [ From 4207ec18c5d70a7f7adf1d244a0f832074f9199e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Thu, 27 Jun 2019 11:29:48 -0400 Subject: [PATCH 19/30] PMC-909 --- .../workflow/engine/classes/SpoolRunTest.php | 68 ++++++++++++++++ workflow/engine/classes/SpoolRun.php | 80 ++++++++++++++----- 2 files changed, 127 insertions(+), 21 deletions(-) create mode 100644 tests/unit/workflow/engine/classes/SpoolRunTest.php diff --git a/tests/unit/workflow/engine/classes/SpoolRunTest.php b/tests/unit/workflow/engine/classes/SpoolRunTest.php new file mode 100644 index 000000000..6f3f728c1 --- /dev/null +++ b/tests/unit/workflow/engine/classes/SpoolRunTest.php @@ -0,0 +1,68 @@ +setData( + G::generateUniqueID(), + $faker->words(3, true), + $faker->companyEmail, + $faker->freeEmail, + $faker->text(), + $faker->dateTime()->format('Y-m-d H:i:s'), + $faker->companyEmail, + $faker->freeEmail + ); + + // Build the "to", "cc" an "bcc" values + $spoolRun->runHandleEnvelopeTo(); + + // Set a second set of data + $spoolRun->setData( + G::generateUniqueID(), + $faker->words(3, true), + $faker->companyEmail, + $faker->freeEmail, + $faker->text(), + $faker->dateTime()->format('Y-m-d H:i:s'), + $faker->companyEmail, + $faker->freeEmail + ); + + // Build the "to", "cc" an "bcc" values + $spoolRun->runHandleEnvelopeTo(); + + // Get data to check + $fileData = $spoolRun->getFileData(); + + // Asserts + $this->assertCount(1, $fileData['envelope_to']); + $this->assertCount(1, $fileData['envelope_cc']); + $this->assertCount(1, $fileData['envelope_bcc']); + } +} diff --git a/workflow/engine/classes/SpoolRun.php b/workflow/engine/classes/SpoolRun.php index 7ef0547a5..1b5ac211c 100644 --- a/workflow/engine/classes/SpoolRun.php +++ b/workflow/engine/classes/SpoolRun.php @@ -91,6 +91,16 @@ class SpoolRun $this->appMsgUid = $v; } + /** + * Get the fileData property + * + * @return array + */ + public function getFileData() + { + return $this->fileData; + } + /** * get all files into spool in a list * @@ -212,32 +222,52 @@ class SpoolRun } /** - * set email parameters + * Set email parameters * - * @param string $sAppMsgUid , $sSubject, $sFrom, $sTo, $sBody, $sDate, $sCC, $sBCC, $sTemplate - * @return none + * @param string $appMsgUid + * @param string $subject + * @param string $from + * @param string $to + * @param string $body + * @param string $date + * @param string $cc + * @param string $bcc + * @param string $template + * @param array $attachments + * @param bool $contentTypeIsHtml + * @param string $error + * + * @see SpoolRun->create() + * @see SpoolRun->resendEmails() */ - public function setData($sAppMsgUid, $sSubject, $sFrom, $sTo, $sBody, $sDate = "", $sCC = "", $sBCC = "", $sTemplate = "", $aAttachment = array(), $bContentTypeIsHtml = true, $sError = "") + public function setData($appMsgUid, $subject, $from, $to, $body, $date = '', $cc = '', $bcc = '', $template = '', $attachments = [], + $contentTypeIsHtml = true, $error = '') { - $this->spoolId = $sAppMsgUid; - $this->fileData['subject'] = $sSubject; - $this->fileData['from'] = $sFrom; - $this->fileData['to'] = $sTo; - $this->fileData['body'] = $sBody; - $this->fileData['date'] = ($sDate != '' ? $sDate : date('Y-m-d H:i:s')); - $this->fileData['cc'] = $sCC; - $this->fileData['bcc'] = $sBCC; - $this->fileData['template'] = $sTemplate; - $this->fileData['attachments'] = $aAttachment; - $this->fileData['envelope_to'] = array(); - $this->fileData["contentTypeIsHtml"] = $bContentTypeIsHtml; - $this->fileData["error"] = $sError; + // Fill "fileData" property + $this->spoolId = $appMsgUid; + $this->fileData['subject'] = $subject; + $this->fileData['from'] = $from; + $this->fileData['to'] = $to; + $this->fileData['body'] = $body; + $this->fileData['date'] = (!empty($date) ? $date : date('Y-m-d H:i:s')); + $this->fileData['cc'] = $cc; + $this->fileData['bcc'] = $bcc; + $this->fileData['template'] = $template; + $this->fileData['attachments'] = $attachments; + $this->fileData["contentTypeIsHtml"] = $contentTypeIsHtml; + $this->fileData["error"] = $error; + // Initialize some values used internally + $this->fileData['envelope_to'] = []; + $this->fileData['envelope_cc'] = []; + $this->fileData['envelope_bcc'] = []; + + // Domain validation when the email engine is "OpenMail" if (array_key_exists('MESS_ENGINE', $this->config)) { - if ($this->config['MESS_ENGINE'] == 'OPENMAIL') { - if ($this->config['MESS_SERVER'] != '') { - if (($sAux = @gethostbyaddr($this->config['MESS_SERVER']))) { - $this->fileData['domain'] = $sAux; + if ($this->config['MESS_ENGINE'] === 'OPENMAIL') { + if (!empty($this->config['MESS_SERVER'])) { + if (($domain = @gethostbyaddr($this->config['MESS_SERVER']))) { + $this->fileData['domain'] = $domain; } else { $this->fileData['domain'] = $this->config['MESS_SERVER']; } @@ -818,4 +848,12 @@ class SpoolRun return $appMsgUid; } + + /** + * Run the private method "handleEnvelopeTo", this method was created in order to use in the unit tests + */ + public function runHandleEnvelopeTo() + { + $this->handleEnvelopeTo(); + } } From 6de0b830a9f696ba3a775c88d1f54a250ea00542 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Fri, 28 Jun 2019 14:24:59 -0400 Subject: [PATCH 20/30] PMC-913 All existing Unit Tests are running correctly? --- phpunit.xml | 2 +- tests/Feature/DBQueryTest.php | 55 +++++++++++------ tests/WorkflowTestCase.php | 29 ++++++--- tests/bootstrap.php | 23 ++++++-- .../engine/classes/ReportTablesTest.php | 4 +- .../ProcessMaker/BusinessModel/GroupTest.php | 7 --- .../BusinessModel/LanguageTest.php | 43 ++++++++++---- .../ProcessMaker/BusinessModel/SkinsTest.php | 20 +++---- .../BusinessModel/WebEntryEventTest.php | 59 ++++++++++++++----- workflow/engine/classes/model/Process.php | 8 ++- 10 files changed, 166 insertions(+), 84 deletions(-) diff --git a/phpunit.xml b/phpunit.xml index 5ec9092ee..a5a5f121f 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -15,7 +15,7 @@ ./tests/workflow/engine/src/ - ./tests/Unit + ./tests/unit ./tests/Performance/ diff --git a/tests/Feature/DBQueryTest.php b/tests/Feature/DBQueryTest.php index f851feafb..1af3c613d 100644 --- a/tests/Feature/DBQueryTest.php +++ b/tests/Feature/DBQueryTest.php @@ -1,43 +1,56 @@ assertCount(1, $results); // Note, we check index 1 because results from executeQuery are 1 indexed, not 0 indexed. - $this->assertArraySubset([ + $expected = [ 'USR_UID' => '00000000000000000000000000000001', 'USR_USERNAME' => 'admin' - ], $results[1]); + ]; + $this->assertArraySubset($expected, $results[1]); } + /** + * Verify the existence of the admin user. + * @test + */ public function testDBFacadeQuery() { - $record = DB::table('USERS')->where([ - 'USR_UID' => '00000000000000000000000000000001' - ])->first(); + $record = DB::table('USERS')->where('USR_UID', '=', '00000000000000000000000000000001')->first(); $this->assertEquals('admin', $record->USR_USERNAME); } + /** + * Verify the execution of a SQL statement common to an MySQL external database. + * @test + */ public function testStandardExecuteQueryWithExternalMySQLDatabase() { // Our test external database is created in our tests/bootstrap.php file @@ -45,12 +58,12 @@ class DBQueryTest extends TestCase $process = factory(Process::class)->create(); // Let's create an external DB to ourselves $externalDB = factory(DbSource::class)->create([ - 'DBS_SERVER' => 'localhost', + 'DBS_SERVER' => config('database.connections.testexternal.host'), 'DBS_PORT' => '3306', - 'DBS_USERNAME' => env('DB_USERNAME'), + 'DBS_USERNAME' => config('database.connections.testexternal.username'), // Remember, we have to do some encryption here @see DbSourceFactory.php - 'DBS_PASSWORD' => \G::encrypt( env('DB_PASSWORD'), 'testexternal') . "_2NnV3ujj3w", - 'DBS_DATABASE_NAME' => 'testexternal', + 'DBS_PASSWORD' => \G::encrypt(env('DB_PASSWORD'), config('database.connections.testexternal.database')) . "_2NnV3ujj3w", + 'DBS_DATABASE_NAME' => config('database.connections.testexternal.database'), 'PRO_UID' => $process->PRO_UID ]); @@ -65,9 +78,13 @@ class DBQueryTest extends TestCase $this->assertEquals('testvalue', $results[1]['value']); } + /** + * Verify the execution of a SQL statement common to an MSSQL external database. + * @test + */ public function testStandardExecuteQueryWithExternalMSSqlDatabase() { - if(!env('RUN_MSSQL_TESTS')) { + if (!env('RUN_MSSQL_TESTS')) { $this->markTestSkipped('MSSQL Related Test Skipped'); } // Our test external database is created in our tests/bootstrap.php file @@ -80,8 +97,8 @@ class DBQueryTest extends TestCase 'DBS_TYPE' => 'mssql', 'DBS_USERNAME' => env('MSSQL_USERNAME'), // Remember, we have to do some encryption here @see DbSourceFactory.php - 'DBS_PASSWORD' => \G::encrypt( env('MSSQL_PASSWORD'), 'testexternal') . "_2NnV3ujj3w", - 'DBS_DATABASE_NAME' => 'testexternal', + 'DBS_PASSWORD' => \G::encrypt(env('MSSQL_PASSWORD'), env('MSSQL_DATABASE')) . "_2NnV3ujj3w", + 'DBS_DATABASE_NAME' => env('MSSQL_DATABASE'), 'PRO_UID' => $process->PRO_UID ]); // Now set our process ID @@ -94,4 +111,4 @@ class DBQueryTest extends TestCase $this->assertCount(1, $results); $this->assertEquals('testvalue', $results[1]['value']); } -} \ No newline at end of file +} diff --git a/tests/WorkflowTestCase.php b/tests/WorkflowTestCase.php index 6e7969149..a2b90118d 100644 --- a/tests/WorkflowTestCase.php +++ b/tests/WorkflowTestCase.php @@ -1,26 +1,37 @@ host = env("DB_HOST"); + $this->user = env("DB_USERNAME"); + $this->password = env("DB_PASSWORD"); + $this->database = env("DB_DATABASE"); //Install Database - $pdo0 = new PDO("mysql:host=".DB_HOST, DB_USER, DB_PASS); - $pdo0->query('DROP DATABASE IF EXISTS '.DB_NAME); - $pdo0->query('CREATE DATABASE '.DB_NAME); - $pdo = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, - DB_PASS); + $pdo0 = new PDO("mysql:host=".$this->host, $this->user, $this->password); + $pdo0->query('DROP DATABASE IF EXISTS '.$this->database); + $pdo0->query('CREATE DATABASE '.$this->database); + $pdo = new PDO("mysql:host=".$this->host.";dbname=".$this->database, $this->user, + $this->password); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); $pdo->exec(file_get_contents(PATH_CORE.'data/mysql/schema.sql')); $pdo->exec(file_get_contents(PATH_RBAC_CORE.'data/mysql/schema.sql')); @@ -39,8 +50,8 @@ class WorkflowTestCase extends TestCase protected function dropDB() { //Install Database - $pdo0 = new PDO("mysql:host=".DB_HOST, DB_USER, DB_PASS); - $pdo0->query('DROP DATABASE IF EXISTS '.DB_NAME); + $pdo0 = new PDO("mysql:host=".$this->host, $this->user, $this->password); + $pdo0->query('DROP DATABASE IF EXISTS '.$this->database); } /** diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 895c470da..fa0608493 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -35,6 +35,11 @@ define('PMTABLE_KEY', 'pmtable'); define('PATH_WORKFLOW_MYSQL_DATA', PATH_TRUNK . '/workflow/engine/data/mysql/'); define('PATH_RBAC_MYSQL_DATA', PATH_TRUNK . '/rbac/engine/data/mysql/'); define('PATH_LANGUAGECONT', PATH_DATA . '/META-INF/'); +define('DB_ADAPTER', 'mysql'); +define('PATH_RBAC_HOME', PATH_TRUNK . '/rbac/'); +define('PATH_RBAC', PATH_RBAC_HOME . 'engine/classes/'); +define("PATH_CUSTOM_SKINS", PATH_DATA . "skins/"); +define("PATH_TPL", PATH_CORE . "templates/"); //timezone $_SESSION['__SYSTEM_UTC_TIME_ZONE__'] = (int) (env('MAIN_SYSTEM_UTC_TIME_ZONE', 'workflow')) == 1; @@ -53,11 +58,22 @@ ini_set('date.timezone', TIME_ZONE); //Set Time Zone date_default_timezone_set(TIME_ZONE); config(['app.timezone' => TIME_ZONE]); +//configuration values +config([ + "system.workspace" => SYS_SYS +]); +define("PATH_DATA_SITE", PATH_DATA . "sites/" . config("system.workspace") . "/"); +define("PATH_DYNAFORM", PATH_DATA_SITE . "xmlForms/"); +define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates/"); +define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public/"); + +G::defineConstants(); + // Setup our testexternal database config(['database.connections.testexternal' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), - 'database' => env('DB_DATABASE', 'testexternal'), + 'database' => 'testexternal', 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', 'password'), 'unix_socket' => env('DB_SOCKET', ''), @@ -68,11 +84,6 @@ config(['database.connections.testexternal' => [ 'engine' => null ]]); -//configuration values -config([ - "system.workspace" => SYS_SYS -]); - // Now, drop all test tables and repopulate with schema Schema::connection('testexternal')->dropIfExists('test'); diff --git a/tests/unit/workflow/engine/classes/ReportTablesTest.php b/tests/unit/workflow/engine/classes/ReportTablesTest.php index c48ed8191..2dc0b4f3d 100644 --- a/tests/unit/workflow/engine/classes/ReportTablesTest.php +++ b/tests/unit/workflow/engine/classes/ReportTablesTest.php @@ -9,13 +9,13 @@ use ProcessMaker\Model\Task; use ProcessMaker\Model\User; use Tests\TestCase; -class PmDynaformTest extends TestCase +class ReportTablesTest extends TestCase { use DatabaseTransactions; /** - * Constructor of the class. + * Sets up the unit tests. */ protected function setUp() { diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php index d502ce5a1..38311b826 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/GroupTest.php @@ -37,13 +37,6 @@ class GroupTest extends TestCase */ protected function setUp() { - parent::setUp(); - - //Move section - global $RBAC; - $RBAC->initRBAC(); - $RBAC->loadUserRolePermission($RBAC->sSystem, '00000000000000000000000000000001'); - $this->setInstanceGroup(new Group()); } diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php index 625a06a72..4e6bb14f9 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php @@ -1,11 +1,15 @@ setupDB(); + $this->getBaseUri(); $this->object = new Language; - $this->translationEnv = PATH_DATA."META-INF".PATH_SEP."translations.env"; + $this->translationEnv = PATH_DATA . "META-INF" . PATH_SEP . "translations.env"; file_exists($this->translationEnv) ? unlink($this->translationEnv) : false; } /** - * Tears down the unit tests. + * Get base uri for rest applications. + * @return string */ - protected function tearDown() + private function getBaseUri() { - $this->dropDB(); + $_SERVER = $this->getServerInformation(); + $baseUri = System::getServerProtocolHost(); + + return $baseUri; + } + + /** + * Get server information. + * @return object + */ + private function getServerInformation() + { + $pathData = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . ".server_info"; + $content = file_get_contents($pathData); + $serverInfo = unserialize($content); + + return $serverInfo; } /** @@ -54,14 +75,14 @@ class LanguageTest extends \WorkflowTestCase */ public function testGetLanguageListInstalled() { - $this->installLanguage('es', __DIR__.'/processmaker.es.po'); + $this->installLanguage('es', __DIR__ . '/processmaker.es.po'); $list = $this->object->getLanguageList(); $this->assertCount(2, $list); $this->assertEquals('en', $list[0]['LANG_ID']); $this->assertEquals('English', $list[0]['LANG_NAME']); $this->assertEquals('es-ES', $list[1]['LANG_ID']); $this->assertEquals('Spanish (Spain)', $list[1]['LANG_NAME']); - $this->uninstallLanguage('es', __DIR__.'/processmaker.es.po'); + $this->uninstallLanguage('es', __DIR__ . '/processmaker.es.po'); $list2 = $this->object->getLanguageList(); $this->assertCount(1, $list2); } @@ -74,7 +95,7 @@ class LanguageTest extends \WorkflowTestCase */ private function installLanguage($lanId, $filename) { - copy($filename, PATH_CORE.'content/translations/'.basename($filename)); + copy($filename, PATH_CORE . 'content/translations/' . basename($filename)); $language = \LanguagePeer::retrieveByPK($lanId); $language->setLanEnabled(1); $language->save(); @@ -89,7 +110,7 @@ class LanguageTest extends \WorkflowTestCase */ private function uninstallLanguage($lanId, $filename) { - unlink(PATH_CORE.'content/translations/'.basename($filename)); + unlink(PATH_CORE . 'content/translations/' . basename($filename)); $language = \LanguagePeer::retrieveByPK($lanId); $language->setLanEnabled(0); $language->save(); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php index 2e95aa342..d4fb18758 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/SkinsTest.php @@ -2,10 +2,13 @@ namespace ProcessMaker\BusinessModel; +use G; +use Tests\TestCase; + /** * Skins Tests */ -class SkinsTest extends \WorkflowTestCase +class SkinsTest extends TestCase { /** * @var Skins @@ -17,9 +20,7 @@ class SkinsTest extends \WorkflowTestCase */ protected function setUp() { - $this->cleanShared(); - $this->setupDB(); - $this->object = new Skins; + $this->object = new Skins(); } /** @@ -27,8 +28,8 @@ class SkinsTest extends \WorkflowTestCase */ protected function tearDown() { - $this->cleanShared(); - $this->dropDB(); + G::rm_dir(PATH_DATA . 'skins'); + mkdir(PATH_DATA . 'skins'); } /** @@ -61,12 +62,7 @@ class SkinsTest extends \WorkflowTestCase { $this->object->createSkin('test', 'test'); $this->object->createSkin( - 'test2', - 'test2', - 'Second skin', - 'ProcessMaker Team', - 'current', - 'neoclassic' + 'test2', 'test2', 'Second skin', 'ProcessMaker Team', 'current', 'neoclassic' ); $skins = $this->object->getSkins(); $this->assertCount(4, $skins); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php index a4f025cad..6d1e55623 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEventTest.php @@ -1,13 +1,17 @@ markTestIncomplete(); + + $this->getBaseUri(); $this->setupDB(); - $this->processUid = $this->import(__DIR__.'/WebEntryEventTest.pmx'); - $this->processUid2 = $this->import(__DIR__.'/WebEntryEventTest2.pmx'); - $this->object = new WebEntryEvent; - $this->setTranslation('ID_INVALID_VALUE_CAN_NOT_BE_EMPTY', - 'ID_INVALID_VALUE_CAN_NOT_BE_EMPTY({0})'); - $this->setTranslation('ID_UNDEFINED_VALUE_IS_REQUIRED', - 'ID_UNDEFINED_VALUE_IS_REQUIRED({0})'); - $this->setTranslation('ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST', - 'ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST({0})'); - $this->setTranslation('ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES', - 'ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES({0},{1})'); - $this->setTranslation('ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY', - 'ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY({0},{1})'); + $this->processUid = $this->import(__DIR__ . '/WebEntryEventTest.pmx'); + $this->processUid2 = $this->import(__DIR__ . '/WebEntryEventTest2.pmx'); + $this->object = new WebEntryEvent(); + $this->setTranslation('ID_INVALID_VALUE_CAN_NOT_BE_EMPTY', 'ID_INVALID_VALUE_CAN_NOT_BE_EMPTY({0})'); + $this->setTranslation('ID_UNDEFINED_VALUE_IS_REQUIRED', 'ID_UNDEFINED_VALUE_IS_REQUIRED({0})'); + $this->setTranslation('ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST', 'ID_WEB_ENTRY_EVENT_DOES_NOT_EXIST({0})'); + $this->setTranslation('ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES', 'ID_INVALID_VALUE_ONLY_ACCEPTS_VALUES({0},{1})'); + $this->setTranslation('ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY', 'ID_DYNAFORM_IS_NOT_ASSIGNED_TO_ACTIVITY({0},{1})'); } /** @@ -47,10 +50,34 @@ class WebEntryEventTest extends \WorkflowTestCase */ protected function tearDown() { - $this->dropDB(); $this->clearTranslations(); } + /** + * Get base uri for rest applications. + * @return string + */ + private function getBaseUri() + { + $_SERVER = $this->getServerInformation(); + $baseUri = System::getServerProtocolHost(); + + return $baseUri; + } + + /** + * Get server information. + * @return object + */ + private function getServerInformation() + { + $pathData = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . ".server_info"; + $content = file_get_contents($pathData); + $serverInfo = unserialize($content); + + return $serverInfo; + } + /** * @covers ProcessMaker\BusinessModel\WebEntryEvent::getWebEntryEvents * @category HOR-3207:5 diff --git a/workflow/engine/classes/model/Process.php b/workflow/engine/classes/model/Process.php index 69c59feec..5c97dc6a8 100644 --- a/workflow/engine/classes/model/Process.php +++ b/workflow/engine/classes/model/Process.php @@ -746,7 +746,13 @@ class Process extends BaseProcess return $aProcesses; } - public function getCasesCountForProcess($pro_uid) + /** + * This returns the number of cases for the process. + * @param string $pro_uid + * @return integer + * @see ProcessMaker\Project\Bpmn::canRemove() + */ + public static function getCasesCountForProcess($pro_uid) { $oCriteria = new Criteria('workflow'); $oCriteria->addSelectColumn('COUNT(*) AS TOTAL_CASES'); From 2e8f252b55ff2a9e879da1e910d6916519f37a88 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Mon, 1 Jul 2019 09:07:33 -0400 Subject: [PATCH 21/30] PMC-911 Add unit tests for the feature. --- tests/unit/app/CustomizeFormatterTest.php | 72 +++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 tests/unit/app/CustomizeFormatterTest.php diff --git a/tests/unit/app/CustomizeFormatterTest.php b/tests/unit/app/CustomizeFormatterTest.php new file mode 100644 index 000000000..8a742e750 --- /dev/null +++ b/tests/unit/app/CustomizeFormatterTest.php @@ -0,0 +1,72 @@ +cleanDirectory(self::$directory); + } + + /** + * This is done after the last test. + */ + public static function tearDownAfterClass() + { + $file = new Filesystem(); + $file->cleanDirectory(self::$directory); + } + + /** + * Return all of the log levels defined in the RFC 5424 specification. + * @return array + */ + public function levelProviders() + { + return [ + ['emergency', 'production.EMERGENCY'], + ['alert', 'production.ALERT'], + ['critical', 'production.CRITICAL'], + ['error', 'production.ERROR'], + ['warning', 'production.WARNING'], + ['notice', 'production.NOTICE'], + ['info', 'production.INFO'], + ['debug', 'production.DEBUG'], + ]; + } + + /** + * This check the creation of a record with the emergency level. + * @test + * @dataProvider levelProviders + */ + public function it_should_create_log_file_levels($level, $message) + { + Log::{$level}($level); + $files = File::allFiles(self::$directory); + $this->assertCount(1, $files); + + $string = File::get($files[0]); + $this->assertRegExp("/{$message}/", $string); + } +} From e486b40906c45806448c3f40b375ede55253f963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julio=20Cesar=20Laura=20Avenda=C3=B1o?= Date: Mon, 1 Jul 2019 11:49:26 -0400 Subject: [PATCH 22/30] PMC-916 --- gulliver/system/class.g.php | 10 +-- .../gulliver/system/ReplaceDataFieldTest.php | 88 +++++++++++++++++-- .../classes/ActionsByEmailCoreClass.php | 2 +- workflow/engine/classes/Cases.php | 12 +-- workflow/engine/classes/PmDynaform.php | 4 +- workflow/engine/classes/class.pmFunctions.php | 2 +- workflow/engine/classes/class.pmScript.php | 2 +- .../engine/classes/model/AppCacheView.php | 2 +- workflow/engine/classes/model/AppFolder.php | 6 +- workflow/engine/classes/model/AppNotes.php | 4 +- workflow/engine/classes/model/ListInbox.php | 4 +- .../methods/cases/proxyDataCombobox.php | 2 +- .../BusinessModel/Consolidated.php | 2 +- .../ProcessMaker/BusinessModel/EmailEvent.php | 2 +- 14 files changed, 106 insertions(+), 36 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 319fe85f7..7df1fd296 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -1691,7 +1691,7 @@ class G * @fn() Evaluate string with the function "fn" * @author David Callizaya */ - public static function replaceDataField($sqlString, $result, $DBEngine = 'mysql') + public static function replaceDataField($sqlString, $result, $DBEngine = 'mysql', $recursive = true) { if (!is_array($result)) { $result = array(); @@ -1748,12 +1748,12 @@ class G } //Non-quoted if (($match[1][$r][0] == '#') && (isset($result[$match[2][$r][0]]))) { - $__textoEval .= $result[$match[2][$r][0]]; + $__textoEval .= $recursive ? G::replaceDataField($result[$match[2][$r][0]], $result) : $result[$match[2][$r][0]]; continue; } //Non-quoted = if (($match[1][$r][0] == '=') && (isset($result[$match[2][$r][0]]))) { - $__textoEval .= $result[$match[2][$r][0]]; + $__textoEval .= $recursive ? G::replaceDataField($result[$match[2][$r][0]], $result) : $result[$match[2][$r][0]]; continue; } //Objects attributes @@ -1826,7 +1826,7 @@ class G } } } - $strData = $strData . G::replaceDataField($arrayMatch2[2], $aRow); + $strData = $strData . G::replaceDataField($arrayMatch2[2], $aRow, 'mysql', false); } } @@ -1851,7 +1851,7 @@ class G } } - $sContent = G::replaceDataField($sContent, $aFields); + $sContent = G::replaceDataField($sContent, $aFields, 'mysql', false); return $sContent; } diff --git a/tests/unit/gulliver/system/ReplaceDataFieldTest.php b/tests/unit/gulliver/system/ReplaceDataFieldTest.php index 231859f93..f0653c86c 100644 --- a/tests/unit/gulliver/system/ReplaceDataFieldTest.php +++ b/tests/unit/gulliver/system/ReplaceDataFieldTest.php @@ -27,9 +27,10 @@ class ReplaceDataFieldTest extends TestCase ]; $dbEngine = 'mysql'; + $recursive = false; - // Replace variables in the string - $stringToCheck = G::replaceDataField($string, $result, $dbEngine); + // Replace variables in the string, $recursive is false because is don't needed replace recursively the same value + $stringToCheck = G::replaceDataField($string, $result, $dbEngine, $recursive); // Assert the @qq is not being set as an empty value $this->assertRegExp("/asa@qq.fds/", $stringToCheck); @@ -41,9 +42,10 @@ class ReplaceDataFieldTest extends TestCase ]; $dbEngine = 'mysql'; + $recursive = false; - // Replace variables in the string - $stringToCheck = G::replaceDataField($string, $result, $dbEngine); + // Replace variables in the string, $recursive is false because is don't needed replace recursively the same value + $stringToCheck = G::replaceDataField($string, $result, $dbEngine, $recursive); // Assert the @qstring is not being set as an empty value $this->assertRegExp("/@qstring/", $stringToCheck); @@ -72,9 +74,10 @@ class ReplaceDataFieldTest extends TestCase ]; $dbEngine = 'mysql'; + $recursive = false; - // Replace variables in the string - $stringToCheck = G::replaceDataField($string, $result, $dbEngine); + // Replace variables in the string, $recursive is false because is don't needed replace recursively the same value + $stringToCheck = G::replaceDataField($string, $result, $dbEngine, $recursive); // Assert the @qq is not being set as an empty value $this->assertRegExp("/asa@qq.fds/", $stringToCheck); @@ -86,11 +89,80 @@ class ReplaceDataFieldTest extends TestCase ]; $dbEngine = 'mysql'; + $recursive = false; - // Replace variables in the string - $stringToCheck = G::replaceDataField($string, $result, $dbEngine); + // Replace variables in the string, $recursive is false because is don't needed replace recursively the same value + $stringToCheck = G::replaceDataField($string, $result, $dbEngine, $recursive); // Assert the @qstring is not being set as an empty value $this->assertRegExp("/@qstring/", $stringToCheck); } + + /** + * Check that the variable using "@#" will be replaced recursively or not according to the parameters sent + * + * @test + * @covers G::replaceDataField + */ + public function it_should_replace_recursively_a_variable_inside_another_variable_with_hashtag_symbol() + { + // Initialize variables + $string = '@#upload_New'; + $variables = ['upload_New' => "javascript:uploadInputDocument('@#DOC_UID');", + 'DOC_UID' => '1988828025cc89aba0cd2b8079038028']; + + // Set parameters to test the method + $dbEngine = 'mysql'; + $recursive = false; + + // Replace variables in the string, $recursive is false because is don't needed replace recursively the same value + $stringToCheck = G::replaceDataField($string, $variables, $dbEngine, $recursive); + + // The variable @#DOC_UID inside in the variable "@#upload_New" shouldn't be replaced + $this->assertRegExp("/@#DOC_UID/", $stringToCheck); + + // Set parameters to test the method + $dbEngine = 'mysql'; + $recursive = true; + + // Replace variables in the string, $recursive is true because is required replace recursively the same value + $stringToCheck = G::replaceDataField($string, $variables, $dbEngine, $recursive); + + // The variable @#DOC_UID inside in the variable "@#upload_New" should be replaced correctly + $this->assertRegExp("/1988828025cc89aba0cd2b8079038028/", $stringToCheck); + } + + /** + * Check that the variable using "@=" will be replaced recursively or not according to the parameters sent + * + * @test + * @covers G::replaceDataField + */ + public function it_should_replace_recursively_a_variable_inside_another_variable_with_equals_symbol() + { + // Initialize variables + $string = '@=upload_New'; + $variables = ['upload_New' => "javascript:uploadInputDocument('@=DOC_UID');", + 'DOC_UID' => '1988828025cc89aba0cd2b8079038028']; + + // Set parameters to test the method + $dbEngine = 'mysql'; + $recursive = false; + + // Replace variables in the string, $recursive is false because is don't needed replace recursively the same value + $stringToCheck = G::replaceDataField($string, $variables, $dbEngine, $recursive); + + // The variable @=DOC_UID inside in the variable "@=upload_New" shouldn't be replaced + $this->assertRegExp("/@=DOC_UID/", $stringToCheck); + + // Set parameters to test the method + $dbEngine = 'mysql'; + $recursive = true; + + // Replace variables in the string, $recursive is true because is required replace recursively the same value + $stringToCheck = G::replaceDataField($string, $variables, $dbEngine, $recursive); + + // The variable @=DOC_UID inside in the variable "@=upload_New" should be replaced correctly + $this->assertRegExp("/1988828025cc89aba0cd2b8079038028/", $stringToCheck); + } } diff --git a/workflow/engine/classes/ActionsByEmailCoreClass.php b/workflow/engine/classes/ActionsByEmailCoreClass.php index a52f45e44..f013b02f9 100644 --- a/workflow/engine/classes/ActionsByEmailCoreClass.php +++ b/workflow/engine/classes/ActionsByEmailCoreClass.php @@ -110,7 +110,7 @@ class ActionsByEmailCoreClass extends PMPlugin } if ($email != '') { - $subject = G::replaceDataField( $configuration['ABE_SUBJECT_FIELD'], $caseFields['APP_DATA'] ); + $subject = G::replaceDataField( $configuration['ABE_SUBJECT_FIELD'], $caseFields['APP_DATA'], 'mysql', false ); if($subject == ''){ $subject = $caseFields['APP_TITLE']; } diff --git a/workflow/engine/classes/Cases.php b/workflow/engine/classes/Cases.php index 02b69a8c5..0f0fe232d 100644 --- a/workflow/engine/classes/Cases.php +++ b/workflow/engine/classes/Cases.php @@ -628,7 +628,7 @@ class Cases $task = TaskPeer::retrieveByPk($currentDelegations[$r]->getTasUid()); $caseLabel = $task->$getTasDef(); if ($caseLabel != '') { - $appLabel = G::replaceDataField($caseLabel, $aAppData); + $appLabel = G::replaceDataField($caseLabel, $aAppData, 'mysql', false); break; } } @@ -686,7 +686,7 @@ class Cases //Get the case title $tasDefTitle = trim($row['TAS_DEF_TITLE']); if (!empty($tasDefTitle) && !$flagTitle) { - $newAppProperty = G::replaceDataField($tasDefTitle, $lastFieldsCase); + $newAppProperty = G::replaceDataField($tasDefTitle, $lastFieldsCase, 'mysql', false); $res['APP_TITLE'] = $newAppProperty; if (!(isset($currentValue) && ($currentValue == $tasDefTitle))) { $newValues['APP_TITLE'] = $newAppProperty; @@ -696,7 +696,7 @@ class Cases //Get the case description $tasDefDescription = trim($row['TAS_DEF_DESCRIPTION']); if (!empty($tasDefDescription) && !$flagDescription) { - $newAppProperty = G::replaceDataField($tasDefDescription, $lastFieldsCase); + $newAppProperty = G::replaceDataField($tasDefDescription, $lastFieldsCase, 'mysql', false); $res['APP_DESCRIPTION'] = $newAppProperty; if (!(isset($currentValue) && ($currentValue == $tasDefDescription))) { $newValues['APP_DESCRIPTION'] = $newAppProperty; @@ -5441,7 +5441,7 @@ class Cases switch ($typeSend) { case 'LAST': if (isset($aTaskInfo['TAS_DEF_SUBJECT_MESSAGE']) && $aTaskInfo['TAS_DEF_SUBJECT_MESSAGE'] != '') { - $sSubject = G::replaceDataField($aTaskInfo['TAS_DEF_SUBJECT_MESSAGE'], $arrayData); + $sSubject = G::replaceDataField($aTaskInfo['TAS_DEF_SUBJECT_MESSAGE'], $arrayData, 'mysql', false); } else { $sSubject = G::LoadTranslation('ID_MESSAGE_SUBJECT_DERIVATION'); } @@ -5526,7 +5526,7 @@ class Cases break; case 'RECEIVE': if (isset($aTaskInfo['TAS_RECEIVE_SUBJECT_MESSAGE']) && $aTaskInfo['TAS_RECEIVE_SUBJECT_MESSAGE'] != '') { - $sSubject = G::replaceDataField($aTaskInfo['TAS_RECEIVE_SUBJECT_MESSAGE'], $arrayData); + $sSubject = G::replaceDataField($aTaskInfo['TAS_RECEIVE_SUBJECT_MESSAGE'], $arrayData, 'mysql', false); } else { $sSubject = G::LoadTranslation('ID_MESSAGE_SUBJECT_DERIVATION'); } @@ -5674,7 +5674,7 @@ class Cases ) { @copy(PATH_TPL . "mails" . PATH_SEP . G::LoadTranslation('ID_UNASSIGNED_MESSAGE'), $fileTemplate); } - $body2 = G::replaceDataField(file_get_contents($fileTemplate), $arrayData2); + $body2 = G::replaceDataField(file_get_contents($fileTemplate), $arrayData2, 'mysql', false); } } diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index a4b8d5262..a0e52da02 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -253,7 +253,7 @@ class PmDynaform } } } - $sql = G::replaceDataField($json->sql, $dtFields); + $sql = G::replaceDataField($json->sql, $dtFields, 'mysql', false); if ($value === "suggest") { $sql = $this->prepareSuggestSql($sql, $json); } @@ -715,7 +715,7 @@ class PmDynaform } } if ($json->dbConnection !== "" && $json->dbConnection !== "none" && $json->sql !== "") { - $sql = G::replaceDataField($json->sql, $data); + $sql = G::replaceDataField($json->sql, $data, 'mysql', false); $dt = $this->getCacheQueryData($json->dbConnection, $sql, $json->type); $row = isset($dt[0]) ? $dt[0] : []; $index = $json->variable === "" ? $json->id : $json->variable; diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index 31cf411a4..c6c80cf65 100644 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -1750,7 +1750,7 @@ function PMFGenerateOutputDocument ($outputID, $sApplication = null, $index = nu //The $_GET['UID'] variable is used when a process executes. //$_GET['UID']=($aOD['OUT_DOC_VERSIONING'])?$_GET['UID']:$aOD['OUT_DOC_UID']; //$sUID = ($aOD['OUT_DOC_VERSIONING'])?$_GET['UID']:$aOD['OUT_DOC_UID']; - $sFilename = preg_replace( '[^A-Za-z0-9_]', '_', G::replaceDataField( $aOD['OUT_DOC_FILENAME'], $Fields['APP_DATA'] ) ); + $sFilename = preg_replace( '[^A-Za-z0-9_]', '_', G::replaceDataField( $aOD['OUT_DOC_FILENAME'], $Fields['APP_DATA'], 'mysql', false ) ); require_once 'classes/model/AppFolder.php'; require_once 'classes/model/AppDocument.php'; diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index cd4cf8631..e5e301c13 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -706,7 +706,7 @@ class PMScript try { $cnn = Propel::getConnection($varInfo["VAR_DBCONNECTION"]); $stmt = $cnn->createStatement(); - $sql = G::replaceDataField($varInfo["VAR_SQL"], $this->aFields); + $sql = G::replaceDataField($varInfo["VAR_SQL"], $this->aFields, 'mysql', false); $rs = $stmt->executeQuery($sql, \ResultSet::FETCHMODE_NUM); while ($rs->next()) { $row = $rs->getRow(); diff --git a/workflow/engine/classes/model/AppCacheView.php b/workflow/engine/classes/model/AppCacheView.php index c2fea04ce..45a669b02 100644 --- a/workflow/engine/classes/model/AppCacheView.php +++ b/workflow/engine/classes/model/AppCacheView.php @@ -1735,7 +1735,7 @@ class AppCacheView extends BaseAppCacheView $arrayAppField = $app->Load($appcvAppUid); $appTitle = (!empty($appTitle))? $appTitle : "#" . $arrayAppField["APP_NUMBER"]; - $appTitleNew = G::replaceDataField($appTitle, unserialize($arrayAppField["APP_DATA"])); + $appTitleNew = G::replaceDataField($appTitle, unserialize($arrayAppField["APP_DATA"]), 'mysql', false); if (isset($arrayAppField["APP_TITLE"]) && $arrayAppField["APP_TITLE"] != $appTitleNew) { //Updating the value in content, where... diff --git a/workflow/engine/classes/model/AppFolder.php b/workflow/engine/classes/model/AppFolder.php index 2fdba2748..3a0acb45a 100644 --- a/workflow/engine/classes/model/AppFolder.php +++ b/workflow/engine/classes/model/AppFolder.php @@ -145,8 +145,7 @@ class AppFolder extends BaseAppFolder $oApplication = new Application(); $appFields = $oApplication->Load( $sessionID ); - $folderPathParsed = G::replaceDataField( $folderPath, $appFields ); - $folderPathParsed = G::replaceDataField( $folderPath, unserialize( $appFields['APP_DATA'] ) ); + $folderPathParsed = G::replaceDataField( $folderPath, unserialize( $appFields['APP_DATA'] ), 'mysql', false ); $folderPathParsedArray = explode( "/", $folderPathParsed ); $folderRoot = "/"; //Always starting from Root foreach ($folderPathParsedArray as $folderName) { @@ -174,8 +173,7 @@ class AppFolder extends BaseAppFolder $oApplication = new Application(); $appFields = $oApplication->Load( $sessionID ); - $fileTagsParsed = G::replaceDataField( $fileTags, $appFields ); - $fileTagsParsed = G::replaceDataField( $fileTags, unserialize( $appFields['APP_DATA'] ) ); + $fileTagsParsed = G::replaceDataField( $fileTags, unserialize( $appFields['APP_DATA'] ), 'mysql', false ); return $fileTagsParsed; } diff --git a/workflow/engine/classes/model/AppNotes.php b/workflow/engine/classes/model/AppNotes.php index a36b13681..6e99dc408 100644 --- a/workflow/engine/classes/model/AppNotes.php +++ b/workflow/engine/classes/model/AppNotes.php @@ -213,7 +213,7 @@ class AppNotes extends BaseAppNotes $configNoteNotification['subject'] = G::LoadTranslation('ID_MESSAGE_SUBJECT_NOTE_NOTIFICATION') . " @#APP_TITLE "; //Define the body for the notification $configNoteNotification['body'] = $this->getBodyCaseNote($authorName, $noteContent); - $body = nl2br(G::replaceDataField($configNoteNotification['body'], $fieldCase)); + $body = nl2br(G::replaceDataField($configNoteNotification['body'], $fieldCase, 'mysql', false)); $users = new Users(); $recipientsArray = explode(",", $noteRecipients); @@ -229,7 +229,7 @@ class AppNotes extends BaseAppNotes $appUid, $delIndex, WsBase::MESSAGE_TYPE_CASE_NOTE, - G::replaceDataField($configNoteNotification['subject'], $fieldCase), + G::replaceDataField($configNoteNotification['subject'], $fieldCase, 'mysql', false), G::buildFrom($configuration, $from), $to, $body, diff --git a/workflow/engine/classes/model/ListInbox.php b/workflow/engine/classes/model/ListInbox.php index 97e21e018..b8e00ace6 100644 --- a/workflow/engine/classes/model/ListInbox.php +++ b/workflow/engine/classes/model/ListInbox.php @@ -34,7 +34,7 @@ class ListInbox extends BaseListInbox implements ListInterface if (isset($data['APP_TITLE'])) { $oCase = new Cases(); $aData = $oCase->loadCase($data["APP_UID"]); - $data['APP_TITLE'] = G::replaceDataField($data['APP_TITLE'], $aData['APP_DATA']); + $data['APP_TITLE'] = G::replaceDataField($data['APP_TITLE'], $aData['APP_DATA'], 'mysql', false); } if (!empty($data['PRO_UID']) && empty($data['PRO_ID'])) { $p = new Process(); @@ -124,7 +124,7 @@ class ListInbox extends BaseListInbox implements ListInterface if (isset($data['APP_TITLE'])) { $oCase = new Cases(); $aData = $oCase->loadCase($data["APP_UID"]); - $data['APP_TITLE'] = G::replaceDataField($data['APP_TITLE'], $aData['APP_DATA']); + $data['APP_TITLE'] = G::replaceDataField($data['APP_TITLE'], $aData['APP_DATA'], 'mysql', false); } if ($isSelfService) { $listParticipatedLast = new ListParticipatedLast(); diff --git a/workflow/engine/methods/cases/proxyDataCombobox.php b/workflow/engine/methods/cases/proxyDataCombobox.php index f35befa5a..44d5aeb61 100644 --- a/workflow/engine/methods/cases/proxyDataCombobox.php +++ b/workflow/engine/methods/cases/proxyDataCombobox.php @@ -23,7 +23,7 @@ $aFields = $oCase->loadCase($appUid); foreach ($G_FORM->fields as $key => $val) { if ($fieldName == $val->name) { if ($G_FORM->fields[$key]->sql != null) { - $sqlQuery = G::replaceDataField($G_FORM->fields[$key]->sql, $aFields ["APP_DATA"]); + $sqlQuery = G::replaceDataField($G_FORM->fields[$key]->sql, $aFields ["APP_DATA"], 'mysql', false); } //$coma = ""; //$data1 = ""; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php index 45b7b5713..dc867df42 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php @@ -1108,7 +1108,7 @@ class Consolidated foreach ($G_FORM->fields as $key => $val) { if ($fieldName == $val->name) { if ($G_FORM->fields[$key]->sql != "") { - $sqlQuery = G::replaceDataField($G_FORM->fields[$key]->sql, $aFields ["APP_DATA"]); + $sqlQuery = G::replaceDataField($G_FORM->fields[$key]->sql, $aFields ["APP_DATA"], 'mysql', false); } if ((is_array($val->options)) && (!empty($val->options))) { foreach ($val->options as $key1 => $val1) { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php index 1ecf359ea..a2dc6f92f 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php @@ -522,7 +522,7 @@ class EmailEvent $emailTo, '', '', - G::replaceDataField($arrayData[5], $arrayApplicationData['APP_DATA']), + G::replaceDataField($arrayData[5], $arrayApplicationData['APP_DATA'], 'mysql', false), $contentFile['prf_filename'], [], [], From efc38c940057d024551b33abf89f234fd149b89b Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Tue, 25 Jun 2019 08:17:57 -0400 Subject: [PATCH 23/30] PMC-878 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.4 to v5.5.0) --- app/Console/Kernel.php | 3 +- composer.json | 13 +- composer.lock | 1531 +++++++++++++++++++--------- thirdparty/pake/pakeYaml.class.php | 2 +- 4 files changed, 1074 insertions(+), 475 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 5012ffaf8..c4f873ff5 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -13,7 +13,6 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ - Commands\PMTranslationsPlugins::class ]; /** @@ -34,6 +33,6 @@ class Kernel extends ConsoleKernel */ protected function commands() { - + $this->load(__DIR__ . '/Commands'); } } diff --git a/composer.json b/composer.json index 144aaa1ba..c5aee9a92 100644 --- a/composer.json +++ b/composer.json @@ -27,8 +27,8 @@ "minimum-stability": "dev", "prefer-stable": true, "require": { - "php": ">=5.6", - "laravel/framework": "5.4.*", + "php": ">=7.1", + "laravel/framework": "5.5.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", @@ -43,7 +43,7 @@ "phpmailer/phpmailer": "5.2.27", "pear/archive_tar": "1.4.*", "pear/console_getopt": "1.4.*", - "TYPO3/class-alias-loader": "^1.0", + "typo3/class-alias-loader": "^1.0", "ralouphie/getallheaders": "^2.0", "smarty/smarty": "2.6.30", "pdepend/pdepend": "@stable", @@ -55,6 +55,7 @@ "fzaninotto/faker": "^1.7", "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", + "filp/whoops": "~2.0", "lmc/steward": "^2.2", "behat/behat": "^3.3", "behat/mink-selenium2-driver": "^1.3", @@ -101,7 +102,11 @@ }, "scripts": { "post-install-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility", - "post-update-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility" + "post-update-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/wimg/php-compatibility", + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover" + ] }, "extra": { "typo3/class-alias-loader": { diff --git a/composer.lock b/composer.lock index c56712f71..af6b03908 100644 --- a/composer.lock +++ b/composer.lock @@ -1,10 +1,10 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "a9ba65f7fb68be7c36dd45b62216b2c6", + "content-hash": "4475480aaf9f89aefd4ec4bf9c009e71", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -115,7 +115,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/michelangelofe.git", - "reference": "4ac7ac3ebd1863c258c3f0e048fd3fff668f0184" + "reference": "0b4c4cd6cea4f3eaa10452423d293ed6aac0d5ab" }, "require": { "colosa/pmui": "release/3.3.1-dev" @@ -126,7 +126,7 @@ "keywords": [ "js app ProcessMaker" ], - "time": "2018-11-29T15:23:08+00:00" + "time": "2018-12-18T17:10:59+00:00" }, { "name": "colosa/pmDynaform", @@ -134,7 +134,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmdynaform.git", - "reference": "e4176c9772842904552997702e549035b6ba641d" + "reference": "42281f63761d18a6dcaf63ff5c612eeb0c6dfa1b" }, "type": "library", "description": "JS Library to render ProcessMaker Dynaforms", @@ -142,7 +142,7 @@ "keywords": [ "js lib ProcessMaker Dynaforms" ], - "time": "2018-11-28T17:54:53+00:00" + "time": "2018-12-10T15:33:17+00:00" }, { "name": "colosa/pmUI", @@ -150,7 +150,7 @@ "source": { "type": "git", "url": "git@bitbucket.org:colosa/pmui.git", - "reference": "711b9796c7b5ad4363b9177d0969ec4abecc8d2e" + "reference": "4449e02225bc1d351907ceee79b2411b428df517" }, "type": "library", "description": "JS UI Library", @@ -158,7 +158,7 @@ "keywords": [ "js lib ProcessMaker UI" ], - "time": "2018-11-16T14:26:15+00:00" + "time": "2018-12-18T17:11:02+00:00" }, { "name": "dapphp/securimage", @@ -244,33 +244,33 @@ }, { "name": "doctrine/inflector", - "version": "v1.1.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -307,20 +307,137 @@ "singularize", "string" ], - "time": "2015-11-06T14:35:42+00:00" + "time": "2018-01-09T20:05:19+00:00" }, { - "name": "erusev/parsedown", - "version": "1.7.1", + "name": "doctrine/lexer", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + "url": "https://github.com/doctrine/lexer.git", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "time": "2019-06-08T11:03:04+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.9", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/128cc721d771ec2c46ce59698f4ca42b73f71b25", + "reference": "128cc721d771ec2c46ce59698f4ca42b73f71b25", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">= 5.5" + }, + "require-dev": { + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2019-06-23T10:14:27+00:00" + }, + { + "name": "erusev/parsedown", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", "shasum": "" }, "require": { @@ -353,7 +470,7 @@ "markdown", "parser" ], - "time": "2018-03-08T01:11:30+00:00" + "time": "2019-03-17T18:48:37+00:00" }, { "name": "geshi/geshi", @@ -427,7 +544,7 @@ "src/" ] }, - "notification-url": "http://packagist.org/downloads/", + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], @@ -527,40 +644,86 @@ "time": "2018-09-29T18:48:56+00:00" }, { - "name": "laravel/framework", - "version": "v5.4.36", + "name": "kylekatarnls/update-helper", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9" + "url": "https://github.com/kylekatarnls/update-helper.git", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/1062a22232071c3e8636487c86ec1ae75681bbf9", - "reference": "1062a22232071c3e8636487c86ec1ae75681bbf9", + "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "reference": "b34a46d7f5ec1795b4a15ac9d46b884377262df9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0", + "php": ">=5.3.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "dev-master", + "composer/composer": "^2.0.x-dev", + "phpunit/phpunit": ">=4.8.35 <6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "UpdateHelper\\ComposerPlugin" + }, + "autoload": { + "psr-0": { + "UpdateHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Update helper", + "time": "2019-06-05T08:34:23+00:00" + }, + { + "name": "laravel/framework", + "version": "v5.5.45", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/52c79ecf54b6168a54730ccb6c4c9f3561732a80", + "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", - "erusev/parsedown": "~1.6", + "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", - "league/flysystem": "~1.0", - "monolog/monolog": "~1.11", + "league/flysystem": "^1.0.8", + "monolog/monolog": "~1.12", "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.4|~2.0", - "php": ">=5.6.4", + "nesbot/carbon": "^1.26.0", + "php": ">=7.0", + "psr/container": "~1.0", + "psr/simple-cache": "^1.0", "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~5.4", - "symfony/console": "~3.2", - "symfony/debug": "~3.2", - "symfony/finder": "~3.2", - "symfony/http-foundation": "~3.2", - "symfony/http-kernel": "~3.2", - "symfony/process": "~3.2", - "symfony/routing": "~3.2", - "symfony/var-dumper": "~3.2", + "swiftmailer/swiftmailer": "~6.0", + "symfony/console": "~3.3", + "symfony/debug": "~3.3", + "symfony/finder": "~3.3", + "symfony/http-foundation": "~3.3", + "symfony/http-kernel": "~3.3", + "symfony/process": "~3.3", + "symfony/routing": "~3.3", + "symfony/var-dumper": "~3.3", "tijsverkoyen/css-to-inline-styles": "~2.2", "vlucas/phpdotenv": "~2.2" }, @@ -577,7 +740,6 @@ "illuminate/database": "self.version", "illuminate/encryption": "self.version", "illuminate/events": "self.version", - "illuminate/exception": "self.version", "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", @@ -594,38 +756,43 @@ "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version", - "tightenco/collect": "self.version" + "tightenco/collect": "<5.5.33" }, "require-dev": { "aws/aws-sdk-php": "~3.0", "doctrine/dbal": "~2.5", - "mockery/mockery": "~0.9.4", + "filp/whoops": "^2.1.4", + "mockery/mockery": "~1.0", + "orchestra/testbench-core": "3.5.*", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.7", - "predis/predis": "~1.0", - "symfony/css-selector": "~3.2", - "symfony/dom-crawler": "~3.2" + "phpunit/phpunit": "~6.0", + "predis/predis": "^1.1.1", + "symfony/css-selector": "~3.3", + "symfony/dom-crawler": "~3.3" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.2).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.5-dev" } }, "autoload": { @@ -653,7 +820,7 @@ "framework", "laravel" ], - "time": "2017-08-30T09:26:16+00:00" + "time": "2019-01-28T20:53:19+00:00" }, { "name": "laravel/tinker", @@ -720,16 +887,16 @@ }, { "name": "league/flysystem", - "version": "1.0.49", + "version": "1.0.53", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd" + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd", - "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674", + "reference": "08e12b7628f035600634a5e76d95b5eb66cea674", "shasum": "" }, "require": { @@ -800,7 +967,7 @@ "sftp", "storage" ], - "time": "2018-11-23T23:41:29+00:00" + "time": "2019-06-18T20:09:29+00:00" }, { "name": "libchart/libchart", @@ -828,7 +995,7 @@ ], "authors": [ { - "name": "Jean-Marc Trémeaux", + "name": "Jean-Marc Tr??meaux", "homepage": "http://naku.dohcrew.com/", "role": "Developer" }, @@ -854,12 +1021,12 @@ "source": { "type": "git", "url": "https://github.com/Luracast/Restler.git", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8" + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Luracast/Restler/zipball/188968f6a15796077350f1be9c461f8d02c559a8", - "reference": "188968f6a15796077350f1be9c461f8d02c559a8", + "url": "https://api.github.com/repos/Luracast/Restler/zipball/87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", + "reference": "87197eb53b2e429288e9a94d1f0ca9a03d5fbd6c", "shasum": "" }, "require": { @@ -1051,31 +1218,34 @@ }, { "name": "nesbot/carbon", - "version": "1.36.1", + "version": "1.38.4", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983" + "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983", - "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", "shasum": "" }, "require": { + "kylekatarnls/update-helper": "^1.1", "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { + "composer/composer": "^1.2", + "friendsofphp/php-cs-fixer": "~2", "phpunit/phpunit": "^4.8.35 || ^5.7" }, - "suggest": { - "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.", - "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors." - }, + "bin": [ + "bin/upgrade-carbon" + ], "type": "library", "extra": { + "update-helper": "Carbon\\Upgrade", "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -1105,7 +1275,7 @@ "datetime", "time" ], - "time": "2018-11-22T18:23:02+00:00" + "time": "2019-06-03T15:41:40+00:00" }, { "name": "nikic/php-parser", @@ -1160,33 +1330,29 @@ }, { "name": "paragonie/random_compat", - "version": "v2.0.17", + "version": "v9.99.99", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d" + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/29af24f25bab834fcbb38ad2a69fa93b867e070d", - "reference": "29af24f25bab834fcbb38ad2a69fa93b867e070d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", "shasum": "" }, "require": { - "php": ">=5.2.0" + "php": "^7" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" @@ -1205,7 +1371,7 @@ "pseudorandom", "random" ], - "time": "2018-07-04T16:31:37+00:00" + "time": "2018-07-02T15:55:56+00:00" }, { "name": "pdepend/pdepend", @@ -1249,16 +1415,16 @@ }, { "name": "pear/archive_tar", - "version": "1.4.3", + "version": "1.4.7", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", - "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/7e48add6f8edc3027dd98ad15964b1a28fd0c845", + "reference": "7e48add6f8edc3027dd98ad15964b1a28fd0c845", "shasum": "" }, "require": { @@ -1269,8 +1435,8 @@ "phpunit/phpunit": "*" }, "suggest": { - "ext-bz2": "bz2 compression support.", - "ext-xz": "lzma2 compression support.", + "ext-bz2": "Bz2 compression support.", + "ext-xz": "Lzma2 compression support.", "ext-zlib": "Gzip compression support." }, "type": "library", @@ -1305,26 +1471,26 @@ "email": "mrook@php.net" } ], - "description": "Tar file management class", + "description": "Tar file management class with compression support (gzip, bzip2, lzma2)", "homepage": "https://github.com/pear/Archive_Tar", "keywords": [ "archive", "tar" ], - "time": "2017-06-11T17:28:11+00:00" + "time": "2019-04-08T13:15:55+00:00" }, { "name": "pear/console_getopt", - "version": "v1.4.1", + "version": "v1.4.2", "source": { "type": "git", "url": "https://github.com/pear/Console_Getopt.git", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", - "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/6c77aeb625b32bd752e89ee17972d103588b90c0", + "reference": "6c77aeb625b32bd752e89ee17972d103588b90c0", "shasum": "" }, "type": "library", @@ -1358,24 +1524,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2015-07-20T20:28:12+00:00" + "time": "2019-02-06T16:52:33+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.6", + "version": "v1.10.9", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "052868b244d31f822796e7e9981f62557eb256d4" + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/052868b244d31f822796e7e9981f62557eb256d4", - "reference": "052868b244d31f822796e7e9981f62557eb256d4", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/742be8dd68c746a01e4b0a422258e9c9cae1c37f", + "reference": "742be8dd68c746a01e4b0a422258e9c9cae1c37f", "shasum": "" }, "require": { - "pear/console_getopt": "~1.3", + "pear/console_getopt": "~1.4", "pear/pear_exception": "~1.0" }, "replace": { @@ -1402,7 +1568,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2018-08-22T19:28:09+00:00" + "time": "2019-03-13T18:15:44+00:00" }, { "name": "pear/pear_exception", @@ -1478,27 +1644,27 @@ "php": ">=5.0.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", - "jms/serializer": "0.16.*", - "phpdocumentor/phpdocumentor": "2.*", - "phpunit/phpunit": "4.8.*", - "symfony/debug": "2.8.*", - "symfony/filesystem": "2.8.*", - "symfony/translation": "2.8.*", - "symfony/yaml": "2.8.*", - "zendframework/zend-cache": "2.5.1", - "zendframework/zend-config": "2.5.1", - "zendframework/zend-eventmanager": "2.5.1", - "zendframework/zend-filter": "2.5.1", - "zendframework/zend-i18n": "2.5.1", - "zendframework/zend-json": "2.5.1", - "zendframework/zend-math": "2.5.1", - "zendframework/zend-serializer": "2.5.*", - "zendframework/zend-servicemanager": "2.5.*", - "zendframework/zend-stdlib": "2.5.1" + "doctrine/annotations": "1.2.*", + "jms/serializer": "0.16.*", + "phpdocumentor/phpdocumentor": "2.*", + "phpunit/phpunit": "4.8.*", + "symfony/debug": "2.8.*", + "symfony/filesystem": "2.8.*", + "symfony/translation": "2.8.*", + "symfony/yaml": "2.8.*", + "zendframework/zend-cache": "2.5.1", + "zendframework/zend-config": "2.5.1", + "zendframework/zend-eventmanager": "2.5.1", + "zendframework/zend-filter": "2.5.1", + "zendframework/zend-i18n": "2.5.1", + "zendframework/zend-json": "2.5.1", + "zendframework/zend-math": "2.5.1", + "zendframework/zend-serializer": "2.5.*", + "zendframework/zend-servicemanager": "2.5.*", + "zendframework/zend-stdlib": "2.5.1" }, "suggest": { - "league/oauth2-google": "Needed for Google XOAUTH2 authentication" + "league/oauth2-google": "Needed for Google XOAUTH2 authentication" }, "type": "library", "autoload": { @@ -1534,7 +1700,7 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2017-11-04T09:26:05+00:00" + "time": "2018-11-15T22:32:31+00:00" }, { "name": "psr/container", @@ -1623,6 +1789,54 @@ ], "time": "2012-12-21T11:40:51+00:00" }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, { "name": "psy/psysh", "version": "v0.9.9", @@ -1872,29 +2086,37 @@ }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", "shasum": "" }, "require": { - "php": ">=5.3.3" + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -1922,36 +2144,36 @@ "mail", "mailer" ], - "time": "2018-07-31T09:26:32+00:00" + "time": "2019-04-21T09:21:45+00:00" }, { "name": "symfony/config", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081" + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/8a660daeb65dedbe0b099529f65e61866c055081", - "reference": "8a660daeb65dedbe0b099529f65e61866c055081", + "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/filesystem": "~2.8|~3.0|~4.0", + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/dependency-injection": "<3.3", - "symfony/finder": "<3.3" + "symfony/finder": "<3.4" }, "require-dev": { - "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" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/messenger": "~4.1", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -1959,7 +2181,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -1986,20 +2208,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/console", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb" + "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", - "reference": "8f80fc39bbc3b7c47ee54ba7aa2653521ace94bb", + "url": "https://api.github.com/repos/symfony/console/zipball/8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", + "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", "shasum": "" }, "require": { @@ -2011,6 +2233,9 @@ "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.3|~4.0", @@ -2020,7 +2245,7 @@ "symfony/process": "~3.3|~4.0" }, "suggest": { - "psr/log-implementation": "For using the console logger", + "psr/log": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" @@ -2055,29 +2280,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-11-26T12:48:07+00:00" + "time": "2019-05-09T08:42:51+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8" + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/345b9a48595d1ab9630db791dbc3e721bf0233e8", - "reference": "345b9a48595d1ab9630db791dbc3e721bf0233e8", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", + "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2108,20 +2333,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T21:53:39+00:00" }, { "name": "symfony/debug", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d" + "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/2016b3eec2e49c127dd02d0ef44a35c53181560d", - "reference": "2016b3eec2e49c127dd02d0ef44a35c53181560d", + "url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c", + "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c", "shasum": "" }, "require": { @@ -2164,38 +2389,40 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-05-18T13:32:47+00:00" }, { "name": "symfony/dependency-injection", - "version": "v3.4.19", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5" + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/622b330ced1bdf29d240bd1c364c038f647eb0f5", - "reference": "622b330ced1bdf29d240bd1c364c038f647eb0f5", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", + "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "psr/container": "^1.0" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<3.3.7", - "symfony/finder": "<3.3", + "symfony/config": "<4.3", + "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" }, "require-dev": { - "symfony/config": "~3.3|~4.0", - "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/config": "^4.3", + "symfony/expression-language": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2208,7 +2435,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2235,20 +2462,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:14:23+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a" + "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d365fc4416ec4980825873962ea5d1b1bca46f1a", - "reference": "d365fc4416ec4980825873962ea5d1b1bca46f1a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", + "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", "shasum": "" }, "require": { @@ -2298,20 +2525,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-04-02T08:51:52+00:00" }, { "name": "symfony/filesystem", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d" + "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b49b1ca166bd109900e6a1683d9bb1115727ef2d", - "reference": "b49b1ca166bd109900e6a1683d9bb1115727ef2d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", + "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", "shasum": "" }, "require": { @@ -2348,20 +2575,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-02-04T21:34:32+00:00" }, { "name": "symfony/finder", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442" + "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", - "reference": "6cf2be5cbd0e87aa35c01f80ae0bf40b6798e442", + "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c", + "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c", "shasum": "" }, "require": { @@ -2397,20 +2624,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-05-24T12:25:55+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38" + "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ea61dd57c4399b0b2a4162e1820cd9d0783acd38", - "reference": "ea61dd57c4399b0b2a4162e1820cd9d0783acd38", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/677ae5e892b081e71a665bfa7dd90fe61800c00e", + "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e", "shasum": "" }, "require": { @@ -2451,26 +2678,26 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-05-27T05:50:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa" + "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/78528325d90e5ad54a6e9eca750fe176932bc4fa", - "reference": "78528325d90e5ad54a6e9eca750fe176932bc4fa", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ddde6547880914f2e41b0b29e585b8c939a1e39e", + "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/debug": "^3.3.3|~4.0", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", "symfony/polyfill-ctype": "~1.8" @@ -2540,20 +2767,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-11-26T14:04:48+00:00" + "time": "2019-05-28T09:24:42+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + "reference": "82ebae02209c21113908c229e9883c419720738a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", + "reference": "82ebae02209c21113908c229e9883c419720738a", "shasum": "" }, "require": { @@ -2565,7 +2792,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2598,20 +2825,141 @@ "polyfill", "portable" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.10.0", + "name": "symfony/polyfill-iconv", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", - "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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 for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "reference": "c766e95bec706cdd89903b1eda8afab7d7a6b7af", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2019-03-04T13:44:35+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.11.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", + "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", "shasum": "" }, "require": { @@ -2623,7 +2971,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2657,20 +3005,20 @@ "portable", "shim" ], - "time": "2018-09-21T13:07:52+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.10.0", + "version": "v1.11.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224" + "reference": "bc4858fb611bda58719124ca079baff854149c89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/6b88000cdd431cd2e940caa2cb569201f3f84224", - "reference": "6b88000cdd431cd2e940caa2cb569201f3f84224", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", + "reference": "bc4858fb611bda58719124ca079baff854149c89", "shasum": "" }, "require": { @@ -2680,7 +3028,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -2716,20 +3064,75 @@ "portable", "shim" ], - "time": "2018-09-21T06:26:08+00:00" + "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/process", - "version": "v3.4.19", + "name": "symfony/polyfill-php72", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", - "reference": "abb46b909dd6ba0b50e10d4c10ffe6ee96dd70f2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/process", + "version": "v3.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/afe411c2a6084f25cff55a01d0d4e1474c97ff13", + "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13", "shasum": "" }, "require": { @@ -2765,20 +3168,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-22T12:54:11+00:00" }, { "name": "symfony/routing", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c" + "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/86eb1a581279b5e40ca280a4f63a15e37d51d16c", - "reference": "86eb1a581279b5e40ca280a4f63a15e37d51d16c", + "url": "https://api.github.com/repos/symfony/routing/zipball/3458f90c2c17dfbb3260dbbfca19a0c415576ce0", + "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0", "shasum": "" }, "require": { @@ -2801,7 +3204,6 @@ "suggest": { "doctrine/annotations": "For using the annotation loader", "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", "symfony/expression-language": "For using expression matching", "symfony/http-foundation": "For using a Symfony Request object", "symfony/yaml": "For using the YAML loader" @@ -2842,37 +3244,103 @@ "uri", "url" ], - "time": "2018-11-26T08:40:22+00:00" + "time": "2019-05-18T16:36:47+00:00" }, { - "name": "symfony/translation", - "version": "v3.4.19", + "name": "symfony/service-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bdbe940ed3ef4179f86032086c32d3a858becc0f", - "reference": "bdbe940ed3ef4179f86032086c32d3a858becc0f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.2" }, "conflict": { - "symfony/config": "<2.8", + "symfony/config": "<3.4", "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, + "provide": { + "symfony/translation-implementation": "1.0" + }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0|~4.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~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/http-kernel": "~3.4|~4.0", + "symfony/intl": "~3.4|~4.0", + "symfony/service-contracts": "^1.1.2", + "symfony/var-dumper": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -2883,7 +3351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2910,20 +3378,77 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-11-26T10:17:44+00:00" + "time": "2019-06-03T20:27:40+00:00" }, { - "name": "symfony/var-dumper", - "version": "v3.4.19", + "name": "symfony/translation-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6867713afe6c50ade2f34ed6435563b065a52145", - "reference": "6867713afe6c50ade2f34ed6435563b065a52145", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v3.4.28", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a", + "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a", "shasum": "" }, "require": { @@ -2979,7 +3504,7 @@ "debug", "dump" ], - "time": "2018-11-20T16:10:26+00:00" + "time": "2019-05-01T09:52:10+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3088,20 +3613,21 @@ }, { "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2a7dcf7e3e02dc5e701004e51a6f304b713107d5", + "reference": "2a7dcf7e3e02dc5e701004e51a6f304b713107d5", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": ">=5.3.9", + "symfony/polyfill-ctype": "^1.9" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.0" @@ -3109,7 +3635,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -3134,22 +3660,22 @@ "env", "environment" ], - "time": "2018-07-29T20:33:41+00:00" + "time": "2019-01-29T11:11:52+00:00" } ], "packages-dev": [ { "name": "beberlei/assert", - "version": "v2.9.6", + "version": "v2.9.9", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936" + "reference": "124317de301b7c91d5fce34c98bba2c6925bec95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/ec9e4cf0b63890edce844ee3922e2b95a526e936", - "reference": "ec9e4cf0b63890edce844ee3922e2b95a526e936", + "url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95", + "reference": "124317de301b7c91d5fce34c98bba2c6925bec95", "shasum": "" }, "require": { @@ -3191,7 +3717,7 @@ "assertion", "validation" ], - "time": "2018-06-11T17:15:25+00:00" + "time": "2019-05-28T15:27:37+00:00" }, { "name": "behat/behat", @@ -3273,16 +3799,16 @@ }, { "name": "behat/gherkin", - "version": "v4.5.1", + "version": "v4.6.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", - "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", + "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", "shasum": "" }, "require": { @@ -3290,8 +3816,8 @@ }, "require-dev": { "phpunit/phpunit": "~4.5|~5", - "symfony/phpunit-bridge": "~2.7|~3", - "symfony/yaml": "~2.3|~3" + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -3328,34 +3854,35 @@ "gherkin", "parser" ], - "time": "2017-08-30T11:04:43+00:00" + "time": "2019-01-16T14:22:17+00:00" }, { "name": "behat/mink", - "version": "v1.7.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea", + "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "symfony/css-selector": "^2.7|^3.0|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "symfony/phpunit-bridge": "^3.3|^4.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", + "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" }, "type": "library", "extra": { @@ -3386,7 +3913,7 @@ "testing", "web" ], - "time": "2016-03-05T08:26:18+00:00" + "time": "2019-05-14T09:56:49+00:00" }, { "name": "behat/mink-selenium2-driver", @@ -3571,32 +4098,34 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "a2c590166b2133a4633738648b6b064edae0814a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^6.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -3616,25 +4145,25 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2019-03-17T17:37:11+00:00" }, { "name": "facebook/webdriver", - "version": "1.6.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + "reference": "e43de70f3c7166169d0f14a374505392734160e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", + "reference": "e43de70f3c7166169d0f14a374505392734160e5", "shasum": "" }, "require": { @@ -3681,7 +4210,67 @@ "selenium", "webdriver" ], - "time": "2018-05-16T17:37:13+00:00" + "time": "2019-06-13T08:02:18+00:00" + }, + { + "name": "filp/whoops", + "version": "2.1.6", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/92bdc6800ac6e233c9e161a1768e082389a73530", + "reference": "92bdc6800ac6e233c9e161a1768e082389a73530", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^4.8 || ^5.0", + "symfony/var-dumper": "^2.6 || ^3.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "whoops", + "zf2" + ], + "time": "2017-02-18T14:22:27+00:00" }, { "name": "florianwolters/component-core-stringutils", @@ -3906,7 +4495,7 @@ ], "authors": [ { - "name": "Christian Lück", + "name": "Christian Lück", "email": "christian@lueck.tv" } ], @@ -4041,32 +4630,33 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "9f83dded91781a01c63574e387eaa769be769115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -4096,13 +4686,14 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2018-12-04T20:46:45+00:00" }, { "name": "instaclick/php-webdriver", @@ -4246,25 +4837,28 @@ }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -4287,33 +4881,33 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2019-04-07T13:18:21+00:00" }, { "name": "nette/caching", - "version": "v2.5.8", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/nette/caching.git", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555" + "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/7fba7c7ab2585fafb7b31152f2595e1551120555", - "reference": "7fba7c7ab2585fafb7b31152f2595e1551120555", + "url": "https://api.github.com/repos/nette/caching/zipball/d1abc4216f1cd42263c266af1907bbcbda4094c9", + "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9", "shasum": "" }, "require": { - "nette/finder": "^2.2 || ~3.0.0", + "nette/finder": "^2.4 || ~3.0.0", "nette/utils": "^2.4 || ~3.0.0", - "php": ">=5.6.0" + "php": ">=7.1" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "latte/latte": "^2.4", - "nette/di": "^2.4 || ~3.0.0", + "nette/di": "^v3.0.0-beta2", "nette/tester": "^2.0", "tracy/tracy": "^2.4" }, @@ -4321,6 +4915,69 @@ "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", + "homepage": "https://nette.org", + "keywords": [ + "cache", + "journal", + "memcached", + "nette", + "sqlite" + ], + "time": "2019-02-05T21:28:16+00:00" + }, + { + "name": "nette/finder", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4 || ~3.0.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", "extra": { "branch-alias": { "dev-master": "2.5-dev" @@ -4347,70 +5004,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "? Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2018-03-21T11:04:32+00:00" - }, - { - "name": "nette/finder", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", - "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", - "shasum": "" - }, - "require": { - "nette/utils": "~2.4", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "description": "? Nette Finder: find files and directories with an intuitive API.", "homepage": "https://nette.org", "keywords": [ "filesystem", @@ -4418,7 +5012,7 @@ "iterator", "nette" ], - "time": "2018-06-28T11:49:23+00:00" + "time": "2019-02-28T18:13:25+00:00" }, { "name": "nette/reflection", @@ -4486,23 +5080,20 @@ }, { "name": "nette/utils", - "version": "v2.5.3", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce" + "reference": "bd961f49b211997202bda1d0fbc410905be370d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/17b9f76f2abd0c943adfb556e56f2165460b15ce", - "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce", + "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", + "reference": "bd961f49b211997202bda1d0fbc410905be370d4", "shasum": "" }, "require": { - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" + "php": ">=7.1" }, "require-dev": { "nette/tester": "~2.0", @@ -4511,7 +5102,7 @@ "suggest": { "ext-gd": "to use Image", "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", "ext-xml": "to use Strings::length() etc. when mbstring is not available" @@ -4519,15 +5110,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" - ], - "files": [ - "src/loader.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4564,7 +5152,7 @@ "utility", "validation" ], - "time": "2018-09-18T10:22:16+00:00" + "time": "2019-03-22T01:00:30+00:00" }, { "name": "ondram/ci-detector", @@ -4599,7 +5187,7 @@ ], "authors": [ { - "name": "OndÅ™ej Machulda", + "name": "Ondřej Machulda", "email": "ondrej.machulda@gmail.com" } ], @@ -4675,29 +5263,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", + "php": "^7.0", "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -4716,7 +5310,7 @@ } ], "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-11-10T14:09:06+00:00" + "time": "2019-04-30T17:48:53+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4767,16 +5361,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { @@ -4797,8 +5391,8 @@ } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -4826,7 +5420,7 @@ "spy", "stub" ], - "time": "2018-08-05T17:53:17+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { "name": "phpunit/php-code-coverage", @@ -5030,29 +5624,29 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.12", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5075,7 +5669,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-12-04T08:55:13+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", @@ -5784,16 +6378,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.3.2", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e" + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e", - "reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", "shasum": "" }, "require": { @@ -5826,25 +6420,25 @@ } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "http://www.squizlabs.com/php-codesniffer", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", "standards" ], - "time": "2018-09-23T23:08:17+00:00" + "time": "2019-04-10T23:49:02+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "420458095cf60025eb0841276717e0da7f75e50e" + "reference": "4459eef5298dedfb69f771186a580062b8516497" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/420458095cf60025eb0841276717e0da7f75e50e", - "reference": "420458095cf60025eb0841276717e0da7f75e50e", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497", + "reference": "4459eef5298dedfb69f771186a580062b8516497", "shasum": "" }, "require": { @@ -5887,20 +6481,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/options-resolver", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953" + "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2cf5aa084338c1f67166013aebe87e2026bbe953", - "reference": "2cf5aa084338c1f67166013aebe87e2026bbe953", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", + "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", "shasum": "" }, "require": { @@ -5941,20 +6535,20 @@ "configuration", "options" ], - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-04-10T16:00:48+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "0f43969ab2718de55c1c1158dce046668079788d" + "reference": "2a651c2645c10bbedd21170771f122d935e0dd58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f43969ab2718de55c1c1158dce046668079788d", - "reference": "0f43969ab2718de55c1c1158dce046668079788d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58", + "reference": "2a651c2645c10bbedd21170771f122d935e0dd58", "shasum": "" }, "require": { @@ -5990,20 +6584,20 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/yaml", - "version": "v3.4.19", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603" + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/291e13d808bec481eab83f301f7bff3e699ef603", - "reference": "291e13d808bec481eab83f301f7bff3e699ef603", + "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", "shasum": "" }, "require": { @@ -6049,24 +6643,25 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2018-11-11T19:48:54+00:00" + "time": "2019-03-25T07:48:46+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { "phpunit/phpunit": "^4.6", @@ -6099,20 +6694,20 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2018-12-25T11:19:39+00:00" }, { "name": "wimg/php-compatibility", - "version": "9.0.0", + "version": "9.1.1", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25" + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/e9f4047e5edf53c88f36f1dafc0d49454ce13e25", - "reference": "e9f4047e5edf53c88f36f1dafc0d49454ce13e25", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", + "reference": "2b63c5d284ab8857f7b1d5c240ddb507a6b2293c", "shasum": "" }, "require": { @@ -6158,7 +6753,7 @@ "standards" ], "abandoned": "phpcompatibility/php-compatibility", - "time": "2018-10-07T17:38:02+00:00" + "time": "2018-12-30T23:16:27+00:00" } ], "aliases": [], @@ -6173,7 +6768,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=5.6" + "php": ">=7.1" }, "platform-dev": [] } diff --git a/thirdparty/pake/pakeYaml.class.php b/thirdparty/pake/pakeYaml.class.php index 55c4fa30b..3c50bfddf 100644 --- a/thirdparty/pake/pakeYaml.class.php +++ b/thirdparty/pake/pakeYaml.class.php @@ -80,7 +80,7 @@ * @access public * @return void */ - public function pakeYAMLNode() { + public function __construct() { $this->id = uniqid(''); } } From 9953c196c966e2b0372a3ad9d53649d0b0dc0013 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 26 Jun 2019 12:25:53 -0400 Subject: [PATCH 24/30] PMC-880 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.5.42 to v5.6.0) --- app/Logging/CustomizeFormatter.php | 22 + bootstrap/app.php | 11 - composer.json | 3 +- composer.lock | 1584 ++++++++-------------------- config/app.php | 2 - config/logging.php | 85 ++ 6 files changed, 544 insertions(+), 1163 deletions(-) create mode 100644 app/Logging/CustomizeFormatter.php create mode 100644 config/logging.php diff --git a/app/Logging/CustomizeFormatter.php b/app/Logging/CustomizeFormatter.php new file mode 100644 index 000000000..f9846ac5f --- /dev/null +++ b/app/Logging/CustomizeFormatter.php @@ -0,0 +1,22 @@ +getHandlers() as $handler) { + $handler->setFormatter(new LineFormatter(null, null, true, true)); + } + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index a5e730432..e1cbf9613 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -50,17 +50,6 @@ $app->singleton( Handler::class ); -$app->configureMonologUsing(function ($monolog) use ($app) { - $monolog->pushHandler( - (new RotatingFileHandler( - // Set the log path - $app->storagePath() . '/logs/processmaker.log', - // Set the number of daily files you want to keep - $app->make('config')->get('app.log_max_files', 5) - ))->setFormatter(new LineFormatter(null, null, true, true)) - ); -}); - /* |-------------------------------------------------------------------------- | Return The Application diff --git a/composer.json b/composer.json index c5aee9a92..c5520ae40 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "prefer-stable": true, "require": { "php": ">=7.1", - "laravel/framework": "5.5.*", + "laravel/framework": "5.6.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", @@ -56,7 +56,6 @@ "guzzlehttp/guzzle": "^6.3", "phpunit/phpunit": "~5.7", "filp/whoops": "~2.0", - "lmc/steward": "^2.2", "behat/behat": "^3.3", "behat/mink-selenium2-driver": "^1.3", "squizlabs/php_codesniffer": "^2.2 || ^3.0.2", diff --git a/composer.lock b/composer.lock index af6b03908..03459229e 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": "4475480aaf9f89aefd4ec4bf9c009e71", + "content-hash": "d081c4d39988f562487dbfe81bb9e856", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -369,6 +369,60 @@ ], "time": "2019-06-08T11:03:04+00:00" }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2019-03-31T00:38:28+00:00" + }, { "name": "egulias/email-validator", "version": "2.1.9", @@ -690,43 +744,46 @@ }, { "name": "laravel/framework", - "version": "v5.5.45", + "version": "v5.6.39", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80" + "reference": "37bb306f516669ab4f888c16003f694313ab299e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/52c79ecf54b6168a54730ccb6c4c9f3561732a80", - "reference": "52c79ecf54b6168a54730ccb6c4c9f3561732a80", + "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", + "reference": "37bb306f516669ab4f888c16003f694313ab299e", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", + "dragonmantank/cron-expression": "~2.0", "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", "league/flysystem": "^1.0.8", "monolog/monolog": "~1.12", - "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "^1.26.0", - "php": ">=7.0", + "nesbot/carbon": "1.25.*", + "php": "^7.1.3", "psr/container": "~1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "~3.0", + "ramsey/uuid": "^3.7", "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~3.3", - "symfony/debug": "~3.3", - "symfony/finder": "~3.3", - "symfony/http-foundation": "~3.3", - "symfony/http-kernel": "~3.3", - "symfony/process": "~3.3", - "symfony/routing": "~3.3", - "symfony/var-dumper": "~3.3", - "tijsverkoyen/css-to-inline-styles": "~2.2", + "symfony/console": "~4.0", + "symfony/debug": "~4.0", + "symfony/finder": "~4.0", + "symfony/http-foundation": "~4.0", + "symfony/http-kernel": "~4.0", + "symfony/process": "~4.0", + "symfony/routing": "~4.0", + "symfony/var-dumper": "~4.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.1", "vlucas/phpdotenv": "~2.2" }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -755,44 +812,46 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "tightenco/collect": "<5.5.33" + "illuminate/view": "self.version" }, "require-dev": { "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.5", + "doctrine/dbal": "~2.6", "filp/whoops": "^2.1.4", + "league/flysystem-cached-adapter": "~1.0", "mockery/mockery": "~1.0", - "orchestra/testbench-core": "3.5.*", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "3.6.*", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~6.0", + "phpunit/phpunit": "~7.0", "predis/predis": "^1.1.1", - "symfony/css-selector": "~3.3", - "symfony/dom-crawler": "~3.3" + "symfony/css-selector": "~4.0", + "symfony/dom-crawler": "~4.0" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -820,7 +879,7 @@ "framework", "laravel" ], - "time": "2019-01-28T20:53:19+00:00" + "time": "2018-10-04T14:50:41+00:00" }, { "name": "laravel/tinker", @@ -1172,62 +1231,18 @@ ], "time": "2016-04-12T18:29:35+00:00" }, - { - "name": "mtdowling/cron-expression", - "version": "v1.2.1", - "source": { - "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "time": "2017-01-23T04:29:33+00:00" - }, { "name": "nesbot/carbon", - "version": "1.38.4", + "version": "1.25.3", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad" + "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8dd4172bfe1784952c4d58c4db725d183b1c23ad", - "reference": "8dd4172bfe1784952c4d58c4db725d183b1c23ad", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", + "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", "shasum": "" }, "require": { @@ -1245,16 +1260,11 @@ ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade", - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - } + "update-helper": "Carbon\\Upgrade" }, "autoload": { "psr-4": { - "": "src/" + "Carbon\\": "src/Carbon/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1275,7 +1285,7 @@ "datetime", "time" ], - "time": "2019-06-03T15:41:40+00:00" + "time": "2019-06-03T17:56:44+00:00" }, { "name": "nikic/php-parser", @@ -2212,25 +2222,27 @@ }, { "name": "symfony/console", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6" + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", - "reference": "8e1d1e406dd31727fa70cd5a99cda202e9d6a5c6", + "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/debug": "~2.8|~3.0|~4.0", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" }, "conflict": { "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", "symfony/process": "<3.3" }, "provide": { @@ -2238,11 +2250,12 @@ }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3|~4.0", + "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/event-dispatcher": "^4.3", "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.3|~4.0" + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" }, "suggest": { "psr/log": "For using the console logger", @@ -2253,7 +2266,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2280,29 +2293,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-05-09T08:42:51+00:00" + "time": "2019-06-05T13:25:51+00:00" }, { "name": "symfony/css-selector", - "version": "v4.3.1", + "version": "v3.4.28", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -2333,36 +2346,36 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" + "time": "2019-01-16T09:39:14+00:00" }, { "name": "symfony/debug", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c" + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/671fc55bd14800668b1d0a3708c3714940e30a8c", - "reference": "671fc55bd14800668b1d0a3708c3714940e30a8c", + "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0" }, "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "symfony/http-kernel": "<3.4" }, "require-dev": { - "symfony/http-kernel": "~2.8|~3.0|~4.0" + "symfony/http-kernel": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2389,7 +2402,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-05-18T13:32:47+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/dependency-injection", @@ -2466,30 +2479,37 @@ }, { "name": "symfony/event-dispatcher", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", - "reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.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" + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", + "symfony/stopwatch": "~3.4|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2498,7 +2518,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2525,30 +2545,88 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-04-02T08:51:52+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.4.28", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", - "reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-20T06:46:26+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "shasum": "" + }, + "require": { + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2575,29 +2653,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-02-04T21:34:32+00:00" + "time": "2019-06-03T20:27:40+00:00" }, { "name": "symfony/finder", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c" + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fa5d962a71f2169dfe1cbae217fa5a2799859f6c", - "reference": "fa5d962a71f2169dfe1cbae217fa5a2799859f6c", + "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2624,34 +2702,35 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-24T12:25:55+00:00" + "time": "2019-05-26T20:47:49+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e" + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/677ae5e892b081e71a665bfa7dd90fe61800c00e", - "reference": "677ae5e892b081e71a665bfa7dd90fe61800c00e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", + "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php70": "~1.6" + "php": "^7.1.3", + "symfony/mime": "^4.3", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "symfony/expression-language": "~2.8|~3.0|~4.0" + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2678,34 +2757,37 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-05-27T05:50:24+00:00" + "time": "2019-06-06T10:05:02+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e" + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ddde6547880914f2e41b0b29e585b8c939a1e39e", - "reference": "ddde6547880914f2e41b0b29e585b8c939a1e39e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", + "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "psr/log": "~1.0", - "symfony/debug": "^3.3.3|~4.0", - "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php73": "^1.9" }, "conflict": { - "symfony/config": "<2.8", - "symfony/dependency-injection": "<3.4.10|<4.0.10,>=4", - "symfony/var-dumper": "<3.3", + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -2713,34 +2795,34 @@ }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "~2.8|~3.0|~4.0", - "symfony/class-loader": "~2.8|~3.0", - "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.10|^4.0.10", - "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/browser-kit": "^4.3", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.3", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~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" + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/translation-contracts": "^1.1", + "symfony/var-dumper": "^4.1.1", + "twig/twig": "^1.34|^2.4" }, "suggest": { "symfony/browser-kit": "", "symfony/config": "", "symfony/console": "", "symfony/dependency-injection": "", - "symfony/finder": "", "symfony/var-dumper": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -2767,7 +2849,66 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-05-28T09:24:42+00:00" + "time": "2019-06-06T13:23:34+00:00" + }, + { + "name": "symfony/mime", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "reference": "ec2c5565de60e03f33d4296a655e3273f0ad1f8b", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "egulias/email-validator": "^2.0", + "symfony/dependency-injection": "~3.4|^4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2019-06-04T09:22:54+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3007,65 +3148,6 @@ ], "time": "2019-02-06T07:57:58+00:00" }, - { - "name": "symfony/polyfill-php70", - "version": "v1.11.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "bc4858fb611bda58719124ca079baff854149c89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", - "reference": "bc4858fb611bda58719124ca079baff854149c89", - "shasum": "" - }, - "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-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": "2019-02-06T07:57:58+00:00" - }, { "name": "symfony/polyfill-php72", "version": "v1.11.0", @@ -3122,26 +3204,84 @@ "time": "2019-02-06T07:57:58+00:00" }, { - "name": "symfony/process", - "version": "v3.4.28", + "name": "symfony/polyfill-php73", + "version": "v1.11.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/afe411c2a6084f25cff55a01d0d4e1474c97ff13", - "reference": "afe411c2a6084f25cff55a01d0d4e1474c97ff13", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "1.11-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "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.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-02-06T07:57:58+00:00" + }, + { + "name": "symfony/process", + "version": "v4.3.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", + "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" } }, "autoload": { @@ -3168,37 +3308,37 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-05-22T12:54:11+00:00" + "time": "2019-05-30T16:10:05+00:00" }, { "name": "symfony/routing", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0" + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3458f90c2c17dfbb3260dbbfca19a0c415576ce0", - "reference": "3458f90c2c17dfbb3260dbbfca19a0c415576ce0", + "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "conflict": { - "symfony/config": "<3.3.1", - "symfony/dependency-injection": "<3.3", + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", "symfony/yaml": "<3.4" }, "require-dev": { - "doctrine/annotations": "~1.0", + "doctrine/annotations": "~1.2", "psr/log": "~1.0", - "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/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0" }, "suggest": { @@ -3211,7 +3351,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3244,7 +3384,7 @@ "uri", "url" ], - "time": "2019-05-18T16:36:47+00:00" + "time": "2019-06-05T09:16:20+00:00" }, { "name": "symfony/service-contracts", @@ -3439,38 +3579,45 @@ }, { "name": "symfony/var-dumper", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a" + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ca5fef348a0440411bbca0f9ec14e9a11625bd6a", - "reference": "ca5fef348a0440411bbca0f9ec14e9a11625bd6a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", + "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.0" + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" }, "require-dev": { "ext-iconv": "*", + "symfony/console": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", "twig/twig": "~1.34|~2.4" }, "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": "" + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -3504,7 +3651,7 @@ "debug", "dump" ], - "time": "2019-05-01T09:52:10+00:00" + "time": "2019-06-05T02:08:12+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3664,61 +3811,6 @@ } ], "packages-dev": [ - { - "name": "beberlei/assert", - "version": "v2.9.9", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "124317de301b7c91d5fce34c98bba2c6925bec95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95", - "reference": "124317de301b7c91d5fce34c98bba2c6925bec95", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1.1", - "phpunit/phpunit": "^4.8.35|^5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, - "files": [ - "lib/Assert/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "time": "2019-05-28T15:27:37+00:00" - }, { "name": "behat/behat", "version": "v3.5.0", @@ -3858,31 +3950,30 @@ }, { "name": "behat/mink", - "version": "dev-master", + "version": "v1.7.1", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea" + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/6d637f7af4816c26ad8a943da2e3f7eef1231bea", - "reference": "6d637f7af4816c26ad8a943da2e3f7eef1231bea", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "^2.7|^3.0|^4.0" + "symfony/css-selector": "~2.1|~3.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.3|^4.0" + "symfony/phpunit-bridge": "~2.7|~3.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", - "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" }, "type": "library", "extra": { @@ -3913,7 +4004,7 @@ "testing", "web" ], - "time": "2019-05-14T09:56:49+00:00" + "time": "2016-03-05T08:26:18+00:00" }, { "name": "behat/mink-selenium2-driver", @@ -4020,51 +4111,6 @@ ], "time": "2017-04-04T11:38:05+00:00" }, - { - "name": "clue/graph", - "version": "v0.9.0", - "source": { - "type": "git", - "url": "https://github.com/clue/graph.git", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/graph/zipball/0336a4d5229fa61a20ccceaeab25e52ac9542700", - "reference": "0336a4d5229fa61a20ccceaeab25e52ac9542700", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "graphp/algorithms": "Common graph algorithms, such as Dijkstra and Moore-Bellman-Ford (shortest path), minimum spanning tree (MST), Kruskal, Prim and many more..", - "graphp/graphviz": "GraphViz graph drawing / DOT output" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fhaculty\\Graph\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A mathematical graph/network library written in PHP", - "homepage": "https://github.com/clue/graph", - "keywords": [ - "edge", - "graph", - "mathematical", - "network", - "vertex" - ], - "time": "2015-03-07T18:11:31+00:00" - }, { "name": "container-interop/container-interop", "version": "1.2.0", @@ -4152,66 +4198,6 @@ ], "time": "2019-03-17T17:37:11+00:00" }, - { - "name": "facebook/webdriver", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "e43de70f3c7166169d0f14a374505392734160e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", - "reference": "e43de70f3c7166169d0f14a374505392734160e5", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "php-coveralls/php-coveralls": "^2.0", - "php-mock/php-mock-phpunit": "^1.1", - "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" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-community": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "Facebook\\WebDriver\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" - ], - "time": "2019-06-13T08:02:18+00:00" - }, { "name": "filp/whoops", "version": "2.1.6", @@ -4272,146 +4258,6 @@ ], "time": "2017-02-18T14:22:27+00:00" }, - { - "name": "florianwolters/component-core-stringutils", - "version": "v0.3.1", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Core-StringUtils.git", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Core-StringUtils/zipball/51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "reference": "51978fa9a4d30104192036f0b1f11fc1c3bc4667", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Offers operations on the data type string as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Core-StringUtils", - "keywords": [ - "helper", - "language", - "string", - "wrapper" - ], - "time": "2013-07-01T10:24:07+00:00" - }, - { - "name": "florianwolters/component-util-reflection", - "version": "v0.2.0", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Reflection.git", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Reflection/zipball/ffc94b62e2834d7d0306374d952eda7a5abd1844", - "reference": "ffc94b62e2834d7d0306374d952eda7a5abd1844", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": ">=0.2-beta", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": "src/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "Provides operations for the PHP Reflection API as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Reflection", - "keywords": [ - "reflection", - "utility" - ], - "time": "2013-03-19T16:42:41+00:00" - }, - { - "name": "florianwolters/component-util-singleton", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/FlorianWolters/PHP-Component-Util-Singleton.git", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FlorianWolters/PHP-Component-Util-Singleton/zipball/ab39ba531a38c3b76b4babb0035ce840cde7f443", - "reference": "ab39ba531a38c3b76b4babb0035ce840cde7f443", - "shasum": "" - }, - "require": { - "florianwolters/component-core-stringutils": "0.3.*", - "florianwolters/component-util-reflection": "0.2.*", - "php": ">=5.4" - }, - "type": "library", - "autoload": { - "psr-0": { - "FlorianWolters": [ - "src/php", - "src/tests/unit-tests/php", - "src/tests/mocks/php" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0+" - ], - "authors": [ - { - "name": "Florian Wolters", - "email": "wolters.fl@gmail.com", - "homepage": "http://blog.florianwolters.de", - "role": "Developer" - } - ], - "description": "The Singleton (and Registry of Singletons a.k.a. Multiton) design pattern as a PHP component.", - "homepage": "http://github.com/FlorianWolters/PHP-Component-Util-Singleton", - "keywords": [ - "creation", - "pattern", - "singleton", - "utility" - ], - "time": "2013-06-29T12:35:22+00:00" - }, { "name": "fzaninotto/faker", "version": "v1.8.0", @@ -4462,56 +4308,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "graphp/algorithms", - "version": "v0.8.1", - "source": { - "type": "git", - "url": "https://github.com/graphp/algorithms.git", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/graphp/algorithms/zipball/81db4049c35730767ec8f97fb5c4844234b86cef", - "reference": "81db4049c35730767ec8f97fb5c4844234b86cef", - "shasum": "" - }, - "require": { - "clue/graph": "~0.9.0|~0.8.0", - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Graphp\\Algorithms\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@lueck.tv" - } - ], - "description": "Common mathematical graph algorithms", - "homepage": "https://github.com/graphp/algorithms", - "keywords": [ - "Graph algorithms", - "dijkstra", - "kruskal", - "minimum spanning tree", - "moore-bellman-ford", - "prim", - "shortest path" - ], - "time": "2015-03-08T10:12:01+00:00" - }, { "name": "guzzlehttp/guzzle", "version": "6.3.3", @@ -4754,87 +4550,6 @@ ], "time": "2017-06-30T04:02:48+00:00" }, - { - "name": "lmc/steward", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/lmc-eu/steward.git", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lmc-eu/steward/zipball/a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "reference": "a4738179a6f3ccee72fa20957c8546c4c53c9ab9", - "shasum": "" - }, - "require": { - "beberlei/assert": "^2.7", - "clue/graph": "~0.9.0", - "doctrine/inflector": "~1.0", - "ext-curl": "*", - "ext-zip": "*", - "facebook/webdriver": "^1.4.0", - "florianwolters/component-util-singleton": "0.3.2", - "graphp/algorithms": "^0.8.1", - "nette/reflection": "^2.4.2", - "ondram/ci-detector": "^2.1", - "php": "^5.6 || ~7.0", - "phpunit/phpunit": "^5.7.11", - "symfony/console": "^3.3.0", - "symfony/event-dispatcher": "~3.0", - "symfony/filesystem": "~3.0", - "symfony/finder": "~3.0", - "symfony/options-resolver": "^3.2", - "symfony/process": "^3.2.0", - "symfony/stopwatch": "^3.0", - "symfony/yaml": "^3.2" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "php-coveralls/php-coveralls": "^1.0.2", - "php-mock/php-mock-phpunit": "~1.0", - "squizlabs/php_codesniffer": "^2.4.1", - "symfony/var-dumper": "^3.2" - }, - "suggest": { - "ext-posix": "For colored output", - "ext-xdebug": "For remote tests debugging" - }, - "bin": [ - "bin/steward", - "bin/steward.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-4": { - "Lmc\\Steward\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "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", - "selenium", - "testing", - "webdriver" - ], - "time": "2018-07-26T22:03:36+00:00" - }, { "name": "myclabs/deep-copy", "version": "1.9.1", @@ -4883,330 +4598,6 @@ ], "time": "2019-04-07T13:18:21+00:00" }, - { - "name": "nette/caching", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/nette/caching.git", - "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/caching/zipball/d1abc4216f1cd42263c266af1907bbcbda4094c9", - "reference": "d1abc4216f1cd42263c266af1907bbcbda4094c9", - "shasum": "" - }, - "require": { - "nette/finder": "^2.4 || ~3.0.0", - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "latte/latte": "^2.4", - "nette/di": "^v3.0.0-beta2", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "suggest": { - "ext-pdo_sqlite": "to use SQLiteStorage or SQLiteJournal" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "⏱ Nette Caching: library with easy-to-use API and many cache backends.", - "homepage": "https://nette.org", - "keywords": [ - "cache", - "journal", - "memcached", - "nette", - "sqlite" - ], - "time": "2019-02-05T21:28:16+00:00" - }, - { - "name": "nette/finder", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/nette/finder.git", - "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", - "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", - "shasum": "" - }, - "require": { - "nette/utils": "^2.4 || ~3.0.0", - "php": ">=7.1" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/tester": "^2.0", - "tracy/tracy": "^2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "? Nette Finder: find files and directories with an intuitive API.", - "homepage": "https://nette.org", - "keywords": [ - "filesystem", - "glob", - "iterator", - "nette" - ], - "time": "2019-02-28T18:13:25+00:00" - }, - { - "name": "nette/reflection", - "version": "v2.4.2", - "source": { - "type": "git", - "url": "https://github.com/nette/reflection.git", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/reflection/zipball/b12327e98ead74e87a1315e0d48182a702adf901", - "reference": "b12327e98ead74e87a1315e0d48182a702adf901", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "nette/caching": "^2.2 || ^3.0", - "nette/utils": "^2.4 || ^3.0", - "php": ">=5.6.0" - }, - "conflict": { - "nette/nette": "<2.2" - }, - "require-dev": { - "nette/di": "^2.4 || ^3.0", - "nette/tester": "^2.0", - "tracy/tracy": "^2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "Nette Reflection: docblock annotations parser and common reflection classes", - "homepage": "https://nette.org", - "keywords": [ - "annotation", - "nette", - "reflection" - ], - "time": "2017-07-11T19:28:57+00:00" - }, - { - "name": "nette/utils", - "version": "v3.0.1", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "bd961f49b211997202bda1d0fbc410905be370d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", - "reference": "bd961f49b211997202bda1d0fbc410905be370d4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "nette/tester": "~2.0", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize() and toAscii()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0", - "GPL-3.0" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "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.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "time": "2019-03-22T01:00:30+00:00" - }, - { - "name": "ondram/ci-detector", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/OndraM/ci-detector.git", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/be3410cb14443796122ca051f4224b5eae06aa76", - "reference": "be3410cb14443796122ca051f4224b5eae06aa76", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.12", - "phpunit/phpunit": "^5.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "OndraM\\CiDetector\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ondřej Machulda", - "email": "ondrej.machulda@gmail.com" - } - ], - "description": "Detect current continuous integration server and provide unified access to properties of current build", - "keywords": [ - "CircleCI", - "Codeship", - "adapter", - "appveyor", - "bamboo", - "continuous integration", - "gitlab", - "interface", - "jenkins", - "teamcity", - "travis" - ], - "time": "2017-05-26T16:39:57+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "1.0.1", @@ -6483,125 +5874,22 @@ "homepage": "https://symfony.com", "time": "2019-01-16T09:39:14+00:00" }, - { - "name": "symfony/options-resolver", - "version": "v3.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", - "reference": "ed3b397f9c07c8ca388b2a1ef744403b4d4ecc44", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "time": "2019-04-10T16:00:48+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v3.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "2a651c2645c10bbedd21170771f122d935e0dd58" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/2a651c2645c10bbedd21170771f122d935e0dd58", - "reference": "2a651c2645c10bbedd21170771f122d935e0dd58", - "shasum": "" - }, - "require": { - "php": "^5.5.9|>=7.0.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" - }, { "name": "symfony/yaml", - "version": "v3.4.28", + "version": "v4.3.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996" + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/212a27b731e5bfb735679d1ffaac82bd6a1dc996", - "reference": "212a27b731e5bfb735679d1ffaac82bd6a1dc996", + "url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99", + "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", + "php": "^7.1.3", "symfony/polyfill-ctype": "~1.8" }, "conflict": { @@ -6616,7 +5904,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -6643,7 +5931,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-03-25T07:48:46+00:00" + "time": "2019-04-06T14:04:46+00:00" }, { "name": "webmozart/assert", diff --git a/config/app.php b/config/app.php index 651ebfc6a..d6a80bd28 100644 --- a/config/app.php +++ b/config/app.php @@ -9,8 +9,6 @@ return [ 'url' => env('APP_URL', 'http://localhost'), 'env' => env('APP_ENV', 'production'), 'debug' => env('APP_DEBUG', false), - 'log' => env('APP_LOG', 'single'), - 'log_level' => env('APP_LOG_LEVEL', 'debug'), 'cache_lifetime' => env('APP_CACHE_LIFETIME', 60), 'timezone' => 'UTC', 'providers' => [ diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 000000000..e8863a3f8 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,85 @@ + env('APP_LOG', env('LOG_CHANNEL', 'daily')), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/processmaker.log'), + 'level' => 'debug', + ], + + 'daily' => [ + 'driver' => 'daily', + 'tap' => [ + App\Logging\CustomizeFormatter::class + ], + 'path' => storage_path('logs/processmaker.log'), + 'level' => env('APP_LOG_LEVEL', 'debug'), + 'days' => $app->make('config')->get('app.log_max_files', 5), + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + + ], + +]; \ No newline at end of file From 2d87cec8dd316ddc8c47569f3803dac9aa1f789d Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 26 Jun 2019 13:56:49 -0400 Subject: [PATCH 25/30] PMC-882 Make the necessary changes in the core according to the "Laravel" upgrade guide (From v5.6.30 to v5.7) --- composer.json | 2 +- composer.lock | 1280 +++++++++++++++++++++++++++++++++++------------- config/app.php | 1 + 3 files changed, 929 insertions(+), 354 deletions(-) diff --git a/composer.json b/composer.json index c5520ae40..989da13b4 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ "prefer-stable": true, "require": { "php": ">=7.1", - "laravel/framework": "5.6.*", + "laravel/framework": "5.7.*", "luracast/restler": "^3.0", "bshaffer/oauth2-server-php": "v1.0", "colosa/pmUI": "release/3.3.1-dev", diff --git a/composer.lock b/composer.lock index 03459229e..aa753f4cb 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": "d081c4d39988f562487dbfe81bb9e856", + "content-hash": "f548a9edab2774eff09bb261eb05c6d0", "packages": [ { "name": "bshaffer/oauth2-server-php", @@ -609,6 +609,189 @@ ], "time": "2015-10-16T22:11:08+00:00" }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.3-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2018-04-22T15:46:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "9f83dded91781a01c63574e387eaa769be769115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", + "reference": "9f83dded91781a01c63574e387eaa769be769115", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2018-12-04T20:46:45+00:00" + }, { "name": "jakub-onderka/php-console-color", "version": "v0.2", @@ -744,42 +927,45 @@ }, { "name": "laravel/framework", - "version": "v5.6.39", + "version": "v5.7.28", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "37bb306f516669ab4f888c16003f694313ab299e" + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/37bb306f516669ab4f888c16003f694313ab299e", - "reference": "37bb306f516669ab4f888c16003f694313ab299e", + "url": "https://api.github.com/repos/laravel/framework/zipball/8e69728f1c80a024588adbd24c65c4fcf9aa9192", + "reference": "8e69728f1c80a024588adbd24c65c4fcf9aa9192", "shasum": "" }, "require": { - "doctrine/inflector": "~1.1", - "dragonmantank/cron-expression": "~2.0", - "erusev/parsedown": "~1.7", + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "erusev/parsedown": "^1.7", "ext-mbstring": "*", "ext-openssl": "*", + "laravel/nexmo-notification-channel": "^1.0", + "laravel/slack-notification-channel": "^1.0", "league/flysystem": "^1.0.8", - "monolog/monolog": "~1.12", - "nesbot/carbon": "1.25.*", + "monolog/monolog": "^1.12", + "nesbot/carbon": "^1.26.3", + "opis/closure": "^3.1", "php": "^7.1.3", - "psr/container": "~1.0", + "psr/container": "^1.0", "psr/simple-cache": "^1.0", "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~4.0", - "symfony/debug": "~4.0", - "symfony/finder": "~4.0", - "symfony/http-foundation": "~4.0", - "symfony/http-kernel": "~4.0", - "symfony/process": "~4.0", - "symfony/routing": "~4.0", - "symfony/var-dumper": "~4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.1", + "symfony/debug": "^4.1", + "symfony/finder": "^4.1", + "symfony/http-foundation": "^4.1", + "symfony/http-kernel": "^4.1", + "symfony/process": "^4.1", + "symfony/routing": "^4.1", + "symfony/var-dumper": "^4.1", "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "~2.2" + "vlucas/phpdotenv": "^2.2" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -815,43 +1001,47 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.6", + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", "filp/whoops": "^2.1.4", - "league/flysystem-cached-adapter": "~1.0", - "mockery/mockery": "~1.0", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.0", "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.6.*", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~7.0", + "orchestra/testbench-core": "3.7.*", + "pda/pheanstalk": "^3.0|^4.0", + "phpunit/phpunit": "^7.5", "predis/predis": "^1.1.1", - "symfony/css-selector": "~4.0", - "symfony/dom-crawler": "~4.0" + "symfony/css-selector": "^4.1", + "symfony/dom-crawler": "^4.1", + "true/punycode": "^2.1" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", - "laravel/tinker": "Required to use the tinker console command (~1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", - "nexmo/client": "Required to use the Nexmo transport (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", + "laravel/tinker": "Required to use the tinker console command (^1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0|^4.0).", + "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).", + "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6-dev" + "dev-master": "5.7-dev" } }, "autoload": { @@ -879,7 +1069,121 @@ "framework", "laravel" ], - "time": "2018-10-04T14:50:41+00:00" + "time": "2019-02-26T15:41:34+00:00" + }, + { + "name": "laravel/nexmo-notification-channel", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/nexmo-notification-channel.git", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/nexmo-notification-channel/zipball/03edd42a55b306ff980c9950899d5a2b03260d48", + "reference": "03edd42a55b306ff980c9950899d5a2b03260d48", + "shasum": "" + }, + "require": { + "nexmo/client": "^1.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\NexmoChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Nexmo Notification Channel for laravel.", + "keywords": [ + "laravel", + "nexmo", + "notifications" + ], + "time": "2018-12-04T12:57:08+00:00" + }, + { + "name": "laravel/slack-notification-channel", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/slack-notification-channel.git", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/6e164293b754a95f246faf50ab2bbea3e4923cc9", + "reference": "6e164293b754a95f246faf50ab2bbea3e4923cc9", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": "^7.1.3" + }, + "require-dev": { + "illuminate/notifications": "~5.7", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "Illuminate\\Notifications\\SlackChannelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Notifications\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Slack Notification Channel for laravel.", + "keywords": [ + "laravel", + "notifications", + "slack" + ], + "time": "2018-12-12T13:12:06+00:00" }, { "name": "laravel/tinker", @@ -944,6 +1248,61 @@ ], "time": "2018-10-12T19:39:35+00:00" }, + { + "name": "lcobucci/jwt", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-openssl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2019-05-24T18:30:49+00:00" + }, { "name": "league/flysystem", "version": "1.0.53", @@ -1233,16 +1592,16 @@ }, { "name": "nesbot/carbon", - "version": "1.25.3", + "version": "1.39.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8" + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", - "reference": "ad6afecd38ce2d7f7bd1b5d47ffd8e93ebbd3ed8", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", + "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0", "shasum": "" }, "require": { @@ -1260,11 +1619,16 @@ ], "type": "library", "extra": { - "update-helper": "Carbon\\Upgrade" + "update-helper": "Carbon\\Upgrade", + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + } }, "autoload": { "psr-4": { - "Carbon\\": "src/Carbon/" + "": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1285,7 +1649,55 @@ "datetime", "time" ], - "time": "2019-06-03T17:56:44+00:00" + "time": "2019-06-11T09:07:59+00:00" + }, + { + "name": "nexmo/client", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/Nexmo/nexmo-php.git", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nexmo/nexmo-php/zipball/182d41a02ebd3e4be147baea45458ccfe2f528c4", + "reference": "182d41a02ebd3e4be147baea45458ccfe2f528c4", + "shasum": "" + }, + "require": { + "lcobucci/jwt": "^3.2", + "php": ">=5.6", + "php-http/client-implementation": "^1.0", + "php-http/guzzle6-adapter": "^1.0", + "zendframework/zend-diactoros": "^1.8.4 || ^2.0" + }, + "require-dev": { + "estahn/phpunit-json-assertions": "^1.0.0", + "php-http/mock-client": "^0.3.0", + "phpunit/phpunit": "^5.7", + "squizlabs/php_codesniffer": "^3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Nexmo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tim Lytle", + "email": "tim@nexmo.com", + "homepage": "http://twitter.com/tjlytle", + "role": "Developer" + } + ], + "description": "PHP Client for using Nexmo's API.", + "time": "2019-05-13T20:27:43+00:00" }, { "name": "nikic/php-parser", @@ -1338,6 +1750,67 @@ ], "time": "2018-02-28T20:30:58+00:00" }, + { + "name": "opis/closure", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "f846725591203098246276b2e7b9e8b7814c4965" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/f846725591203098246276b2e7b9e8b7814c4965", + "reference": "f846725591203098246276b2e7b9e8b7814c4965", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2019-05-31T20:04:32+00:00" + }, { "name": "paragonie/random_compat", "version": "v9.99.99", @@ -1635,6 +2108,172 @@ ], "time": "2015-02-10T20:07:52+00:00" }, + { + "name": "php-http/guzzle6-adapter", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle6-adapter.git", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab", + "reference": "a56941f9dc6110409cfcddc91546ee97039277ab", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0", + "php": ">=5.5.0", + "php-http/httplug": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/adapter-integration-tests": "^0.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle6\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Guzzle 6 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "time": "2016-05-10T06:13:32+00:00" + }, + { + "name": "php-http/httplug", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "php-http/promise": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "time": "2016-08-31T08:30:17+00:00" + }, + { + "name": "php-http/promise", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", + "shasum": "" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "time": "2016-01-26T13:27:02+00:00" + }, { "name": "phpmailer/phpmailer", "version": "v5.2.27", @@ -1761,6 +2400,108 @@ ], "time": "2017-02-14T16:28:37+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, { "name": "psr/log", "version": "1.0.0", @@ -2158,16 +2899,16 @@ }, { "name": "symfony/config", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", - "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", + "url": "https://api.github.com/repos/symfony/config/zipball/9198eea354be75794a7b1064de00d9ae9ae5090f", + "reference": "9198eea354be75794a7b1064de00d9ae9ae5090f", "shasum": "" }, "require": { @@ -2218,20 +2959,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-08T06:33:08+00:00" }, { "name": "symfony/console", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", - "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", + "url": "https://api.github.com/repos/symfony/console/zipball/b592b26a24265a35172d8a2094d8b10f22b7cc39", + "reference": "b592b26a24265a35172d8a2094d8b10f22b7cc39", "shasum": "" }, "require": { @@ -2293,11 +3034,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-06-05T13:25:51+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.28", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -2350,16 +3091,16 @@ }, { "name": "symfony/debug", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6" + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", - "reference": "4e025104f1f9adb1f7a2d14fb102c9986d6e97c6", + "url": "https://api.github.com/repos/symfony/debug/zipball/d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", + "reference": "d8f4fb38152e0eb6a433705e5f661d25b32c5fcd", "shasum": "" }, "require": { @@ -2402,20 +3143,20 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-19T15:27:09+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3" + "reference": "b851928be349c065197fdc0832f78d85139e3903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/fea7f73e278ee0337349a5a68b867fc656bb33f3", - "reference": "fea7f73e278ee0337349a5a68b867fc656bb33f3", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b851928be349c065197fdc0832f78d85139e3903", + "reference": "b851928be349c065197fdc0832f78d85139e3903", "shasum": "" }, "require": { @@ -2475,20 +3216,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-15T04:08:07+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", - "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d257021c1ab28d48d24a16de79dfab445ce93398", + "reference": "d257021c1ab28d48d24a16de79dfab445ce93398", "shasum": "" }, "require": { @@ -2545,7 +3286,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -2607,16 +3348,16 @@ }, { "name": "symfony/filesystem", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", - "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d", "shasum": "" }, "require": { @@ -2653,20 +3394,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "time": "2019-06-23T08:51:25+00:00" }, { "name": "symfony/finder", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", - "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", + "url": "https://api.github.com/repos/symfony/finder/zipball/33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", + "reference": "33c21f7d5d3dc8a140c282854a7e13aeb5d0f91a", "shasum": "" }, "require": { @@ -2702,20 +3443,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-05-26T20:47:49+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9" + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b7e4945dd9b277cd24e93566e4da0a87956392a9", - "reference": "b7e4945dd9b277cd24e93566e4da0a87956392a9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e1b507fcfa4e87d192281774b5ecd4265370180d", + "reference": "e1b507fcfa4e87d192281774b5ecd4265370180d", "shasum": "" }, "require": { @@ -2757,20 +3498,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-06-06T10:05:02+00:00" + "time": "2019-06-26T09:25:00+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429" + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/738ad561cd6a8d1c44ee1da941b2e628e264c429", - "reference": "738ad561cd6a8d1c44ee1da941b2e628e264c429", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/4150f71e27ed37a74700561b77e3dbd754cbb44d", + "reference": "4150f71e27ed37a74700561b77e3dbd754cbb44d", "shasum": "" }, "require": { @@ -2849,11 +3590,11 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-06-06T13:23:34+00:00" + "time": "2019-06-26T14:26:16+00:00" }, { "name": "symfony/mime", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", @@ -3263,7 +4004,7 @@ }, { "name": "symfony/process", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -3312,16 +4053,16 @@ }, { "name": "symfony/routing", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465" + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", - "reference": "9b31cd24f6ad2cebde6845f6daa9c6d69efe2465", + "url": "https://api.github.com/repos/symfony/routing/zipball/2ef809021d72071c611b218c47a3bf3b17b7325e", + "reference": "2ef809021d72071c611b218c47a3bf3b17b7325e", "shasum": "" }, "require": { @@ -3384,7 +4125,7 @@ "uri", "url" ], - "time": "2019-06-05T09:16:20+00:00" + "time": "2019-06-26T13:54:39+00:00" }, { "name": "symfony/service-contracts", @@ -3446,16 +4187,16 @@ }, { "name": "symfony/translation", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa" + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/5dda505e5f65d759741dfaf4e54b36010a4b57aa", - "reference": "5dda505e5f65d759741dfaf4e54b36010a4b57aa", + "url": "https://api.github.com/repos/symfony/translation/zipball/934ab1d18545149e012aa898cf02e9f23790f7a0", + "reference": "934ab1d18545149e012aa898cf02e9f23790f7a0", "shasum": "" }, "require": { @@ -3518,7 +4259,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-06-03T20:27:40+00:00" + "time": "2019-06-13T11:03:18+00:00" }, { "name": "symfony/translation-contracts", @@ -3579,16 +4320,16 @@ }, { "name": "symfony/var-dumper", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b" + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f974f448154928d2b5fb7c412bd23b81d063f34b", - "reference": "f974f448154928d2b5fb7c412bd23b81d063f34b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/45d6ef73671995aca565a1aa3d9a432a3ea63f91", + "reference": "45d6ef73671995aca565a1aa3d9a432a3ea63f91", "shasum": "" }, "require": { @@ -3651,7 +4392,7 @@ "debug", "dump" ], - "time": "2019-06-05T02:08:12+00:00" + "time": "2019-06-17T17:37:00+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3808,6 +4549,72 @@ "environment" ], "time": "2019-01-29T11:11:52+00:00" + }, + { + "name": "zendframework/zend-diactoros", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "reference": "37bf68b428850ee26ed7c3be6c26236dd95a95f1", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^7.0.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.8": "1.8.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2019-04-29T21:11:00+00:00" } ], "packages-dev": [ @@ -4308,189 +5115,6 @@ ], "time": "2018-07-12T10:23:15+00:00" }, - { - "name": "guzzlehttp/guzzle", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "shasum": "" - }, - "require": { - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", - "php": ">=5.5" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.3-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2018-04-22T15:46:56+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "time": "2016-12-20T10:07:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.5.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "9f83dded91781a01c63574e387eaa769be769115" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", - "reference": "9f83dded91781a01c63574e387eaa769be769115", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "time": "2018-12-04T20:46:45+00:00" - }, { "name": "instaclick/php-webdriver", "version": "1.4.5", @@ -5204,56 +5828,6 @@ "abandoned": true, "time": "2017-06-30T09:13:00+00:00" }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "time": "2016-08-06T14:39:51+00:00" - }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", @@ -5820,7 +6394,7 @@ }, { "name": "symfony/class-loader", - "version": "v3.4.28", + "version": "v3.4.29", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", @@ -5876,7 +6450,7 @@ }, { "name": "symfony/yaml", - "version": "v4.3.1", + "version": "v4.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", diff --git a/config/app.php b/config/app.php index d6a80bd28..f031ca9ac 100644 --- a/config/app.php +++ b/config/app.php @@ -20,6 +20,7 @@ return [ Illuminate\Queue\QueueServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Laravel\Tinker\TinkerServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, ], 'aliases' => [ From 725a949769b9772295e79d70f25cb5bb26e4b807 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Tue, 25 Jun 2019 15:53:38 -0400 Subject: [PATCH 26/30] PMC-897 --- gulliver/system/class.g.php | 307 +++++++++++++++++++++++++++++++++++- 1 file changed, 302 insertions(+), 5 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 7df1fd296..0aceb2881 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5060,11 +5060,308 @@ class G public static function reservedWordsSql() { //Reserved words SQL - $reservedWordsSql = array("ACCESSIBLE","ACTION","ADD","ALL","ALTER","ANALYZE","AND","ANY","AS","ASC","ASENSITIVE","AUTHORIZATION","BACKUP","BEFORE","BEGIN","BETWEEN","BIGINT","BINARY","BIT","BLOB","BOTH","BREAK","BROWSE","BULK","BY","CALL","CASCADE","CASE","CHANGE","CHAR","CHARACTER","CHECK","CHECKPOINT","CLOSE","CLUSTERED","COALESCE","COLLATE","COLUMN","COMMIT","COMPUTE","CONDITION","CONSTRAINT","CONTAINS","CONTAINSTABLE","CONTINUE","CONVERT","CREATE","CROSS","CURRENT","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP","CURRENT_USER","CURSOR","DATABASE","DATABASES","DATE","DAY_HOUR","DAY_MICROSECOND","DAY_MINUTE","DAY_SECOND","DBCC","DEALLOCATE","DEC","DECIMAL","DECLARE","DEFAULT","DELAYED","DELETE","DENY","DESC","DESCRIBE","DETERMINISTIC","DISK","DISTINCT","DISTINCTROW", - "DISTRIBUTED","DIV","DOUBLE","DROP","DUAL","DUMMY","DUMP","EACH","ELSE","ELSEIF","ENCLOSED","END","ENUM","ERRLVL","ESCAPE","ESCAPED","EXCEPT","EXEC","EXECUTE","EXISTS","EXIT","EXPLAIN","FALSE","FETCH","FILE","FILLFACTOR","FLOAT","FLOAT4","FLOAT8","FOR","FORCE","FOREIGN","FREETEXT","FREETEXTTABLE","FROM","FULL","FULLTEXT","FUNCTION","GENERAL","GOTO","GRANT","GROUP","HAVING","HIGH_PRIORITY","HOLDLOCK","HOUR_MICROSECOND","HOUR_MINUTE","HOUR_SECOND","IDENTITY","IDENTITYCOL","IDENTITY_INSERT","IF","IGNORE","IGNORE_SERVER_IDS","IN","INDEX","INFILE","INNER","INOUT","INSENSITIVE","INSERT","INT","INT1","INT2","INT3","INT4","INT8","INTEGER","INTERSECT","INTERVAL","INTO","IS","ITERATE","JOIN","KEY","KEYS","KILL","LEADING","LEAVE","LEFT","LIKE","LIMIT","LINEAR","LINENO","LINES", - "LOAD","LOCALTIME","LOCALTIMESTAMP","LOCK","LONG","LONGBLOB","LONGTEXT","LOOP","LOW_PRIORITY","MASTER_HEARTBEAT_PERIOD","MASTER_SSL_VERIFY_SERVER_CERT","MATCH","MAXVALUE","MEDIUMBLOB","MEDIUMINT","MEDIUMTEXT","MIDDLEINT","MINUTE_MICROSECOND","MINUTE_SECOND","MOD","MODIFIES","NATIONAL","NATURAL","NO","NOCHECK","NONCLUSTERED","NOT","NO_WRITE_TO_BINLOG","NULL","NULLIF","NUMERIC","OF","OFF","OFFSETS","ON","OPEN","OPENDATASOURCE","OPENQUERY","OPENROWSET","OPENXML","OPTIMIZE","OPTION","OPTIONALLY","OR","ORDER","OUT","OUTER","OUTFILE","OVER","PERCENT","PLAN","PRECISION","PRIMARY","PRINT","PROC","PROCEDURE","PUBLIC","PURGE","RAISERROR","RANGE","READ","READS","READTEXT","READ_WRITE","REAL","RECONFIGURE","REFERENCES","REGEXP","RELEASE","RENAME","REPEAT","REPLACE", - "REPLICATION","REQUIRE","RESIGNAL","RESTORE","RESTRICT","RETURN","REVOKE","RIGHT","RLIKE","ROLLBACK","ROWCOUNT","ROWGUIDCOL","RULE","SAVE","SCHEMA","SCHEMAS","SECOND_MICROSECOND","SELECT","SENSITIVE","SEPARATOR","SESSION_USER","SET","SETUSER","SHOW","SHUTDOWN","SIGNAL","SLOW","SMALLINT","SOME","SPATIAL","SPECIFIC","SQL","SQLEXCEPTION","SQLSTATE","SQLWARNING","SQL_BIG_RESULT","SQL_CALC_FOUND_ROWS","SQL_SMALL_RESULT","SSL","STARTING","STATISTICS","STRAIGHT_JOIN","SYSTEM_USER","TABLE","TERMINATED","TEXT","TEXTSIZE","THEN","TIME","TIMESTAMP","TINYBLOB","TINYINT","TINYTEXT","TO","TOP","TRAILING","TRAN","TRANSACTION","TRIGGER","TRUE","TRUNCATE","TSEQUAL","UNDO","UNION","UNIQUE","UNLOCK","UNSIGNED","UPDATE","UPDATETEXT","USAGE","USE","USER","USING","UTC_DATE","UTC_TIME", - "UTC_TIMESTAMP","VALUES","VARBINARY","VARCHAR","VARCHARACTER","VARYING","VIEW","WAITFOR","WHEN","WHERE","WHILE","WITH","WRITE","WRITETEXT","XOR","YEAR_MONTH","ZEROFILL"); + $reservedWordsSql = [ + "ACCESSIBLE", + "ADD", + "ALL", + "ALTER", + "ANALYZE", + "AND", + "AS", + "ASC", + "ASENSITIVE", + "AUTHORIZATION", + "BEFORE", + "BETWEEN", + "BIGINT", + "BINARY", + "BLOB", + "BOTH", + "BREAK", + "BROWSE", + "BULK", + "BY", + "CALL", + "CASCADE", + "CASE", + "CHANGE", + "CHAR", + "CHARACTER", + "CHECK", + "CHECKPOINT", + "CLUSTERED", + "COLLATE", + "COLUMN", + "COMPUTE", + "CONDITION", + "CONSTRAINT", + "CONTAINSTABLE", + "CONTINUE", + "CONVERT", + "CREATE", + "CROSS", + "CURRENT_DATE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "CURSOR", + "DATABASE", + "DATABASES", + "DAY_HOUR", + "DAY_MICROSECOND", + "DAY_MINUTE", + "DAY_SECOND", + "DBCC", + "DEC", + "DECIMAL", + "DECLARE", + "DEFAULT", + "DELAYED", + "DELETE", + "DENY", + "DESC", + "DESCRIBE", + "DETERMINISTIC", + "DISTINCT", + "DISTINCTROW", + "DISTRIBUTED", + "DIV", + "DOUBLE", + "DROP", + "DUAL", + "DUMMY", + "DUMP", + "EACH", + "ELSE", + "ELSEIF", + "ENCLOSED", + "ERRLVL", + "ESCAPED", + "EXCEPT", + "EXEC", + "EXISTS", + "EXIT", + "EXPLAIN", + "FALSE", + "FETCH", + "FILLFACTOR", + "FLOAT", + "FLOAT4", + "FLOAT8", + "FOR", + "FORCE", + "FOREIGN", + "FREETEXT", + "FREETEXTTABLE", + "FROM", + "FULLTEXT", + "GENERATED", + "GET", + "GOTO", + "GRANT", + "GROUP", + "HAVING", + "HIGH_PRIORITY", + "HOLDLOCK", + "HOUR_MICROSECOND", + "HOUR_MINUTE", + "HOUR_SECOND", + "IDENTITY", + "IDENTITYCOL", + "IDENTITY_INSERT", + "IF", + "IGNORE", + "IN", + "INDEX", + "INFILE", + "INNER", + "INOUT", + "INSENSITIVE", + "INSERT", + "INT", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", + "INTEGER", + "INTERSECT", + "INTERVAL", + "INTO", + "IO_AFTER_GTIDS", + "IO_BEFORE_GTIDS", + "IS", + "ITERATE", + "JOIN", + "KEY", + "KEYS", + "KILL", + "LEADING", + "LEAVE", + "LEFT", + "LIKE", + "LIMIT", + "LINEAR", + "LINENO", + "LINES", + "LOAD", + "LOCALTIME", + "LOCALTIMESTAMP", + "LOCK", + "LONG", + "LONGBLOB", + "LONGTEXT", + "LOOP", + "LOW_PRIORITY", + "MASTER_BIND", + "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", + "MAXVALUE", + "MEDIUMBLOB", + "MEDIUMINT", + "MEDIUMTEXT", + "MIDDLEINT", + "MINUTE_MICROSECOND", + "MINUTE_SECOND", + "MOD", + "MODIFIES", + "NATURAL", + "NOCHECK", + "NONCLUSTERED", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NULLIF", + "NUMERIC", + "OF", + "OFF", + "OFFSETS", + "ON", + "OPENDATASOURCE", + "OPENQUERY", + "OPENROWSET", + "OPENXML", + "OPTIMIZE", + "OPTIMIZER_COSTS", + "OPTION", + "OPTIONALLY", + "OR", + "ORDER", + "OUT", + "OUTER", + "OUTFILE", + "OVER", + "PARTITION", + "PARSE_GCOL_EXPR", + "PERCENT", + "PLAN", + "PRECISION", + "PRIMARY", + "PRINT", + "PROC", + "PROCEDURE", + "PUBLIC", + "PURGE", + "RAISERROR", + "RANGE", + "READ", + "READS", + "READTEXT", + "READ_WRITE", + "REAL", + "RECONFIGURE", + "REFERENCES", + "REGEXP", + "RELEASE", + "RENAME", + "REPEAT", + "REPLACE", + "REQUIRE", + "RESIGNAL", + "RESTRICT", + "RETURN", + "REVOKE", + "RIGHT", + "RLIKE", + "ROWCOUNT", + "ROWGUIDCOL", + "RULE", + "SAVE", + "SCHEMA", + "SCHEMAS", + "SECOND_MICROSECOND", + "SELECT", + "SENSITIVE", + "SEPARATOR", + "SESSION_USER", + "SET", + "SETUSER", + "SHOW", + "SIGNAL", + "SMALLINT", + "SPATIAL", + "SPECIFIC", + "SQL", + "SQLEXCEPTION", + "SQLSTATE", + "SQLWARNING", + "SQL_AFTER_GTIDS", + "SQL_BEFORE_GTIDS", + "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", + "SSL", + "STARTING", + "STATISTICS", + "STORED", + "STRAIGHT_JOIN", + "SYSTEM_USER", + "TABLE", + "TERMINATED", + "TEXTSIZE", + "THEN", + "TINYBLOB", + "TINYINT", + "TINYTEXT", + "TO", + "TOP", + "TRAILING", + "TRAN", + "TRIGGER", + "TRUE", + "TSEQUAL", + "UNDO", + "UNION", + "UNIQUE", + "UNLOCK", + "UNSIGNED", + "UPDATE", + "UPDATETEXT", + "USAGE", + "USE", + "USING", + "UTC_DATE", + "UTC_TIME", + "UTC_TIMESTAMP", + "VALUES", + "VARBINARY", + "VARCHAR", + "VARCHARACTER", + "VARYING", + "VIRTUAL", + "WAITFOR", + "WHEN", + "WHERE", + "WHILE", + "WITH", + "WRITE", + "WRITETEXT", + "XOR", + "YEAR_MONTH", + "ZEROFILL", + "_FILENAME" + ]; + return $reservedWordsSql; } From 43cc784eded3821225927606e4d3f510daf4ae29 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Fri, 28 Jun 2019 15:20:51 -0400 Subject: [PATCH 27/30] PMC-898 --- workflow/engine/bin/tasks/cliWorkspaces.php | 90 ++++++++++++++ .../engine/src/ProcessMaker/Core/System.php | 17 +++ .../src/ProcessMaker/Model/Dynaform.php | 12 ++ .../ProcessMaker/Model/ProcessVariables.php | 27 +++++ .../src/ProcessMaker/Model/Triggers.php | 27 +++++ .../src/ProcessMaker/Validation/MySQL57.php | 110 ++++++++++++++++++ 6 files changed, 283 insertions(+) create mode 100644 workflow/engine/src/ProcessMaker/Model/ProcessVariables.php create mode 100644 workflow/engine/src/ProcessMaker/Model/Triggers.php create mode 100644 workflow/engine/src/ProcessMaker/Validation/MySQL57.php diff --git a/workflow/engine/bin/tasks/cliWorkspaces.php b/workflow/engine/bin/tasks/cliWorkspaces.php index 7455ee574..13df97e38 100644 --- a/workflow/engine/bin/tasks/cliWorkspaces.php +++ b/workflow/engine/bin/tasks/cliWorkspaces.php @@ -1,5 +1,8 @@ removeDeprecatedFiles(); CLI::logging("<*> The deprecated files has been removed. \n"); } + +/** + * This function review the queries for each workspace or for an specific workspace + * + * @param array $args + * + * @return void + */ +function run_check_queries_incompatibilities($args) +{ + try { + $workspaces = get_workspaces_from_args($args); + if (count($args) === 1) { + CLI::logging("> Workspace: " . $workspaces[0]->name . PHP_EOL); + check_queries_incompatibilities($workspaces[0]->name); + } else { + foreach ($workspaces as $workspace) { + passthru(PHP_BINARY . " processmaker check-queries-incompatibilities " . $workspace->name); + } + } + echo "Done!\n\n"; + } catch (Exception $e) { + G::outRes(CLI::error($e->getMessage()) . "\n"); + } +} + +/** + * Check for the incompatibilities in the queries for the specific workspace + * + * @param string $wsName + */ +function check_queries_incompatibilities($wsName) +{ + Bootstrap::setConstantsRelatedWs($wsName); + require_once(PATH_DB . $wsName . '/db.php'); + System::initLaravel(); + + $query = Process::query()->select('PRO_UID', 'PRO_TITLE'); + $processesToCheck = $query->get()->values()->toArray(); + + $obj = new MySQL57(); + $resTriggers = $obj->checkIncompatibilityTriggers($processesToCheck); + + if (!empty($resTriggers)) { + foreach ($resTriggers as $trigger) { + echo ">> The \"" . $trigger['PRO_TITLE'] . "\" process has a trigger called: \"" . $trigger['TRI_TITLE'] . "\" that contains UNION queries. Review the code to discard incompatibilities with MySQL5.7." . PHP_EOL; + } + } else { + echo ">> No MySQL 5.7 incompatibilities in triggers found for this workspace." . PHP_EOL; + } + + $resDynaforms = $obj->checkIncompatibilityDynaforms($processesToCheck); + + if (!empty($resDynaforms)) { + foreach ($resDynaforms as $dynaform) { + echo ">> The \"" . $dynaform['PRO_TITLE'] . "\" process has a dynaform called: \"" . $dynaform['DYN_TITLE'] . "\" that contains UNION queries. Review the code to discard incompatibilities with MySQL5.7." . PHP_EOL; + } + } else { + echo ">> No MySQL 5.7 incompatibilities in dynaforms found for this workspace." . PHP_EOL; + } + + $resVariables = $obj->checkIncompatibilityVariables($processesToCheck); + + if (!empty($resVariables)) { + foreach ($resVariables as $variable) { + echo ">> The \"" . $variable['PRO_TITLE'] . "\" process has a variable called: \"" . $variable['VAR_NAME'] . "\" that contains UNION queries. Review the code to discard incompatibilities with MySQL5.7." . PHP_EOL; + } + } else { + echo ">> No MySQL 5.7 incompatibilities in variables found for this workspace." . PHP_EOL; + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index e0e469a32..36e3061ed 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -9,6 +9,7 @@ use Faker; use G; use GzipFile; use Illuminate\Database\QueryException; +use Illuminate\Foundation\Http\Kernel; use Illuminate\Support\Facades\DB; use InputFilter; use InstallerModule; @@ -1629,5 +1630,21 @@ class System { return !empty(self::getServerHostname()) ? self::getServerHostname() : 'processmaker.com'; } + + /** + * Initialize laravel database configuration + * @see workflow/engine/bin/tasks/cliWorkspaces.php->check_queries_incompatibilities() + */ + public static function initLaravel() + { + config(['database.connections.workflow.host' => DB_HOST]); + config(['database.connections.workflow.database' => DB_NAME]); + config(['database.connections.workflow.username' => DB_USER]); + config(['database.connections.workflow.password' => DB_PASS]); + + app()->useStoragePath(realpath(PATH_DATA)); + app()->make(Kernel::class)->bootstrap(); + restore_error_handler(); + } } // end System class diff --git a/workflow/engine/src/ProcessMaker/Model/Dynaform.php b/workflow/engine/src/ProcessMaker/Model/Dynaform.php index 4d270b2dc..1147c6e5d 100644 --- a/workflow/engine/src/ProcessMaker/Model/Dynaform.php +++ b/workflow/engine/src/ProcessMaker/Model/Dynaform.php @@ -61,4 +61,16 @@ class Dynaform extends Model ->where('DYNAFORM.DYN_UID', '!=', $dynUid) ->get(); } + + /** + * Scope a query to filter an specific process + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string $columns + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeProcess($query, string $proUID) + { + return $query->where('PRO_UID', $proUID); + } } diff --git a/workflow/engine/src/ProcessMaker/Model/ProcessVariables.php b/workflow/engine/src/ProcessMaker/Model/ProcessVariables.php new file mode 100644 index 000000000..9170390a7 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/ProcessVariables.php @@ -0,0 +1,27 @@ +where('PRJ_UID', $proUID); + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Model/Triggers.php b/workflow/engine/src/ProcessMaker/Model/Triggers.php new file mode 100644 index 000000000..88947dee8 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/Triggers.php @@ -0,0 +1,27 @@ +where('PRO_UID', $proUID); + } +} \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Validation/MySQL57.php b/workflow/engine/src/ProcessMaker/Validation/MySQL57.php new file mode 100644 index 000000000..a6a2f3be0 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Validation/MySQL57.php @@ -0,0 +1,110 @@ +check_queries_incompatibilities() + * @param array $processes + * @return array + */ + public function checkIncompatibilityTriggers($processes) + { + $result = []; + + foreach ($processes as $process) { + $triggerQuery = Triggers::query()->select(); + //Call the scope method to filter by process + $triggerQuery->process($process['PRO_UID']); + $triggers = $triggerQuery->get()->values()->toArray(); + foreach ($triggers as $trigger) { + $resultIncompatibility = $this->analyzeQuery($trigger['TRI_WEBBOT']); + if ($resultIncompatibility) { + $aux = array_merge($process, $trigger); + array_push($result, $aux); + } + } + } + + return $result; + } + + /** + * Checks the queries inside dynaforms that could have possible incompatibilities with MySQL 5.7 + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php->check_queries_incompatibilities() + * @param array $processes + * @return array + */ + public function checkIncompatibilityDynaforms($processes) + { + $result = []; + + foreach ($processes as $process) { + $dynaformQuery = Dynaform::query()->select(); + //Call the scope method to filter by process + $dynaformQuery->process($process['PRO_UID']); + $dynaforms = $dynaformQuery->get()->values()->toArray(); + foreach ($dynaforms as $dynaform) { + $resultIncompatibility = $this->analyzeQuery($dynaform['DYN_CONTENT']); + if ($resultIncompatibility) { + $aux = array_merge($process, $dynaform); + array_push($result, $aux); + } + } + } + + return $result; + } + + /** + * Checks the queries inside variables that could have possible incompatibilities with MySQL 5.7 + * + * @see workflow/engine/bin/tasks/cliWorkspaces.php->check_queries_incompatibilities() + * @param array $processes + * @return array + */ + public function checkIncompatibilityVariables($processes) + { + $result = []; + + foreach ($processes as $process) { + $variablesQuery = ProcessVariables::query()->select(); + //Call the scope method to filter by process + $variablesQuery->process($process['PRO_UID']); + $variables = $variablesQuery->get()->values()->toArray(); + foreach ($variables as $variable) { + $resultIncompatibility = $this->analyzeQuery($variable['VAR_SQL']); + if ($resultIncompatibility) { + $aux = array_merge($process, $variable); + array_push($result, $aux); + } + } + } + + return $result; + } + + /** + * Analyze the query using the regular expression + * + * @param string $query + * @return bool + */ + public function analyzeQuery($query) + { + preg_match_all($this::REGEX, $query, $matches, PREG_SET_ORDER, 0); + + return !empty($matches); + } +} \ No newline at end of file From c99216e41e0c822072405268b2f244017440f5d3 Mon Sep 17 00:00:00 2001 From: Andrea Adamczyk Date: Mon, 1 Jul 2019 12:47:43 -0400 Subject: [PATCH 28/30] PMC-910 --- .../factories/ProcessVariablesFactory.php | 21 ++ database/factories/TriggerFactory.php | 16 + tests/unit/gulliver/system/gTest.php | 353 ++++++++++++++++++ .../engine/bin/tasks/CliWorkspacesTest.php | 137 +++++++ .../src/ProcessMaker/Core/SystemTest.php | 38 ++ .../src/ProcessMaker/Model/DynaformTest.php | 50 +++ .../Model/ProcessVariablesTest.php | 51 +++ .../src/ProcessMaker/Model/TriggersTest.php | 77 ++++ .../ProcessMaker/Validation/MySQL57Test.php | 219 +++++++++++ 9 files changed, 962 insertions(+) create mode 100644 database/factories/ProcessVariablesFactory.php create mode 100644 database/factories/TriggerFactory.php create mode 100755 tests/unit/gulliver/system/gTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Model/DynaformTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Model/ProcessVariablesTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Model/TriggersTest.php create mode 100644 tests/unit/workflow/engine/src/ProcessMaker/Validation/MySQL57Test.php diff --git a/database/factories/ProcessVariablesFactory.php b/database/factories/ProcessVariablesFactory.php new file mode 100644 index 000000000..6892de0b9 --- /dev/null +++ b/database/factories/ProcessVariablesFactory.php @@ -0,0 +1,21 @@ +define(ProcessVariables::class, function (Faker $faker) { + return [ + 'VAR_UID' => G::generateUniqueID(), + 'PRJ_UID' => G::generateUniqueID(), + 'VAR_NAME' => $faker->word, + 'VAR_FIELD_TYPE' => G::generateUniqueID(), + 'VAR_FIELD_SIZE' => 10, + 'VAR_LABEL' => 'string', + 'VAR_DBCONNECTION' => 'workflow', + 'VAR_SQL' => '', + 'VAR_NULL' => 0, + 'VAR_DEFAULT' => '', + 'VAR_ACCEPTED_VALUES' => '', + 'INP_DOC_UID' => '' + ]; +}); \ No newline at end of file diff --git a/database/factories/TriggerFactory.php b/database/factories/TriggerFactory.php new file mode 100644 index 000000000..e0b9adfe6 --- /dev/null +++ b/database/factories/TriggerFactory.php @@ -0,0 +1,16 @@ +define(Triggers::class, function (Faker $faker) { + return [ + 'TRI_UID' => G::generateUniqueID(), + 'TRI_TITLE' => $faker->sentence(5), + 'TRI_DESCRIPTION' => $faker->text, + 'PRO_UID' => G::generateUniqueID(), + 'TRI_TYPE' => 'SCRIPT', + 'TRI_WEBBOT' => $faker->text, + 'TRI_PARAM' => '', + ]; +}); \ No newline at end of file diff --git a/tests/unit/gulliver/system/gTest.php b/tests/unit/gulliver/system/gTest.php new file mode 100755 index 000000000..eec38b7e3 --- /dev/null +++ b/tests/unit/gulliver/system/gTest.php @@ -0,0 +1,353 @@ +assertContains($word, $res); + } + } + + /** + * It tests that all the reserved words in MySQL 5.6 and MySQL 5.7 are present + * + * @test + */ + public function it_should_match_all_reserved_words_in_mysql_57() + { + $res = G::reservedWordsSql(); + $words = [ + "ACCESSIBLE", + "ADD", + "ALL", + "ALTER", + "ANALYZE", + "AND", + "AS", + "ASC", + "ASENSITIVE", + "AUTHORIZATION", + "BEFORE", + "BETWEEN", + "BIGINT", + "BINARY", + "BLOB", + "BOTH", + "BREAK", + "BROWSE", + "BULK", + "BY", + "CALL", + "CASCADE", + "CASE", + "CHANGE", + "CHAR", + "CHARACTER", + "CHECK", + "CHECKPOINT", + "CLUSTERED", + "COLLATE", + "COLUMN", + "COMPUTE", + "CONDITION", + "CONSTRAINT", + "CONTAINSTABLE", + "CONTINUE", + "CONVERT", + "CREATE", + "CROSS", + "CURRENT_DATE", + "CURRENT_TIME", + "CURRENT_TIMESTAMP", + "CURRENT_USER", + "CURSOR", + "DATABASE", + "DATABASES", + "DAY_HOUR", + "DAY_MICROSECOND", + "DAY_MINUTE", + "DAY_SECOND", + "DBCC", + "DEC", + "DECIMAL", + "DECLARE", + "DEFAULT", + "DELAYED", + "DELETE", + "DENY", + "DESC", + "DESCRIBE", + "DETERMINISTIC", + "DISTINCT", + "DISTINCTROW", + "DISTRIBUTED", + "DIV", + "DOUBLE", + "DROP", + "DUAL", + "DUMMY", + "DUMP", + "EACH", + "ELSE", + "ELSEIF", + "ENCLOSED", + "ERRLVL", + "ESCAPED", + "EXCEPT", + "EXEC", + "EXISTS", + "EXIT", + "EXPLAIN", + "FALSE", + "FETCH", + "FILLFACTOR", + "FLOAT", + "FLOAT4", + "FLOAT8", + "FOR", + "FORCE", + "FOREIGN", + "FREETEXT", + "FREETEXTTABLE", + "FROM", + "FULLTEXT", + "GENERATED", + "GET", + "GOTO", + "GRANT", + "GROUP", + "HAVING", + "HIGH_PRIORITY", + "HOLDLOCK", + "HOUR_MICROSECOND", + "HOUR_MINUTE", + "HOUR_SECOND", + "IDENTITY", + "IDENTITYCOL", + "IDENTITY_INSERT", + "IF", + "IGNORE", + "IN", + "INDEX", + "INFILE", + "INNER", + "INOUT", + "INSENSITIVE", + "INSERT", + "INT", + "INT1", + "INT2", + "INT3", + "INT4", + "INT8", + "INTEGER", + "INTERSECT", + "INTERVAL", + "INTO", + "IO_AFTER_GTIDS", + "IO_BEFORE_GTIDS", + "IS", + "ITERATE", + "JOIN", + "KEY", + "KEYS", + "KILL", + "LEADING", + "LEAVE", + "LEFT", + "LIKE", + "LIMIT", + "LINEAR", + "LINENO", + "LINES", + "LOAD", + "LOCALTIME", + "LOCALTIMESTAMP", + "LOCK", + "LONG", + "LONGBLOB", + "LONGTEXT", + "LOOP", + "LOW_PRIORITY", + "MASTER_BIND", + "MASTER_SSL_VERIFY_SERVER_CERT", + "MATCH", + "MAXVALUE", + "MEDIUMBLOB", + "MEDIUMINT", + "MEDIUMTEXT", + "MIDDLEINT", + "MINUTE_MICROSECOND", + "MINUTE_SECOND", + "MOD", + "MODIFIES", + "NATURAL", + "NOCHECK", + "NONCLUSTERED", + "NOT", + "NO_WRITE_TO_BINLOG", + "NULL", + "NULLIF", + "NUMERIC", + "OF", + "OFF", + "OFFSETS", + "ON", + "OPENDATASOURCE", + "OPENQUERY", + "OPENROWSET", + "OPENXML", + "OPTIMIZE", + "OPTIMIZER_COSTS", + "OPTION", + "OPTIONALLY", + "OR", + "ORDER", + "OUT", + "OUTER", + "OUTFILE", + "OVER", + "PARTITION", + "PARSE_GCOL_EXPR", + "PERCENT", + "PLAN", + "PRECISION", + "PRIMARY", + "PRINT", + "PROC", + "PROCEDURE", + "PUBLIC", + "PURGE", + "RAISERROR", + "RANGE", + "READ", + "READS", + "READTEXT", + "READ_WRITE", + "REAL", + "RECONFIGURE", + "REFERENCES", + "REGEXP", + "RELEASE", + "RENAME", + "REPEAT", + "REPLACE", + "REQUIRE", + "RESIGNAL", + "RESTRICT", + "RETURN", + "REVOKE", + "RIGHT", + "RLIKE", + "ROWCOUNT", + "ROWGUIDCOL", + "RULE", + "SAVE", + "SCHEMA", + "SCHEMAS", + "SECOND_MICROSECOND", + "SELECT", + "SENSITIVE", + "SEPARATOR", + "SESSION_USER", + "SET", + "SETUSER", + "SHOW", + "SIGNAL", + "SMALLINT", + "SPATIAL", + "SPECIFIC", + "SQL", + "SQLEXCEPTION", + "SQLSTATE", + "SQLWARNING", + "SQL_AFTER_GTIDS", + "SQL_BEFORE_GTIDS", + "SQL_BIG_RESULT", + "SQL_CALC_FOUND_ROWS", + "SQL_SMALL_RESULT", + "SSL", + "STARTING", + "STATISTICS", + "STORED", + "STRAIGHT_JOIN", + "SYSTEM_USER", + "TABLE", + "TERMINATED", + "TEXTSIZE", + "THEN", + "TINYBLOB", + "TINYINT", + "TINYTEXT", + "TO", + "TOP", + "TRAILING", + "TRAN", + "TRIGGER", + "TRUE", + "TSEQUAL", + "UNDO", + "UNION", + "UNIQUE", + "UNLOCK", + "UNSIGNED", + "UPDATE", + "UPDATETEXT", + "USAGE", + "USE", + "USING", + "UTC_DATE", + "UTC_TIME", + "UTC_TIMESTAMP", + "VALUES", + "VARBINARY", + "VARCHAR", + "VARCHARACTER", + "VARYING", + "VIRTUAL", + "WAITFOR", + "WHEN", + "WHERE", + "WHILE", + "WITH", + "WRITE", + "WRITETEXT", + "XOR", + "YEAR_MONTH", + "ZEROFILL", + "_FILENAME" + ]; + foreach ($words as $word) { + //This assert the array contains all the reserved words in MySQL 5.6 and MySQL 5.7 + $this->assertContains($word, $res); + } + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php b/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php index 061f78549..cedb86d6c 100644 --- a/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php +++ b/tests/unit/workflow/engine/bin/tasks/CliWorkspacesTest.php @@ -2,10 +2,17 @@ namespace Tests\unit\workflow\engine\bin\tasks; +use Illuminate\Foundation\Testing\DatabaseTransactions; +use ProcessMaker\Model\Dynaform; +use ProcessMaker\Model\Process; +use ProcessMaker\Model\ProcessVariables; +use ProcessMaker\Model\Triggers; use Tests\TestCase; class CliWorkspacesTest extends TestCase { + use DatabaseTransactions; + /** * Test that the deprecated files are removed successfully * @@ -134,4 +141,134 @@ class CliWorkspacesTest extends TestCase return $permissions; } + + /** + * Test the queries incompatibilities in dynaforms + * @test + */ + public function it_should_test_the_incompatibilities_in_the_dynaforms_queries() + { + config(["system.workspace" => 'workflow']); + + $process = factory(Process::class, 2)->create(); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"2","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6170264265d1b544bebdbd5098250194","name":"2","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"title","id":"title0000000001","label":"title_1","colSpan":12}],[{"type":"text","variable":"textVar002","var_uid":"9778460595d1b545088dd69091601043","dataType":"string","protectedValue":false,"id":"textVar002","name":"textVar002","label":"text_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","textTransform":"none","validate":"","validateMessage":"","maxLength":1000,"formula":"","mode":"parent","operation":"","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","var_name":"textVar002","colSpan":12}],[{"type":"textarea","variable":"textareaVar001","var_uid":"2934510045d1b5453f21373072798412","dataType":"string","protectedValue":false,"id":"textareaVar001","name":"textareaVar001","label":"textarea_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","validate":"","validateMessage":"","mode":"parent","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","rows":"5","var_name":"textareaVar001","colSpan":12}],[{"type":"datetime","variable":"datetimeVar001","var_uid":"9780823375d1b5455e9c3a2064729484","dataType":"datetime","protectedValue":false,"id":"datetimeVar001","name":"datetimeVar001","label":"datetime_1","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","mode":"parent","format":"YYYY-MM-DD","dayViewHeaderFormat":"MMMM YYYY","extraFormats":false,"stepping":1,"minDate":"","maxDate":"","useCurrent":"false","collapse":true,"locale":"","defaultDate":"","disabledDates":false,"enabledDates":false,"icons":{"time":"glyphicon glyphicon-time","date":"glyphicon glyphicon-calendar","up":"glyphicon glyphicon-chevron-up","down":"glyphicon glyphicon-chevron-down","previous":"glyphicon glyphicon-chevron-left","next":"glyphicon glyphicon-chevron-right","today":"glyphicon glyphicon-screenshot","clear":"glyphicon glyphicon-trash"},"useStrict":false,"sideBySide":false,"daysOfWeekDisabled":false,"calendarWeeks":false,"viewMode":"days","toolbarPlacement":"default","showTodayButton":false,"showClear":"false","widgetPositioning":{"horizontal":"auto","vertical":"auto"},"widgetParent":null,"keepOpen":false,"var_name":"datetimeVar001","colSpan":12}],[{"type":"submit","id":"submit0000000001","name":"submit0000000001","label":"submit_1","colSpan":12}]],"variables":[{"var_uid":"9778460595d1b545088dd69091601043","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar002","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""},{"var_uid":"2934510045d1b5453f21373072798412","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textareaVar001","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""},{"var_uid":"9780823375d1b5455e9c3a2064729484","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"datetimeVar001","var_field_type":"datetime","var_field_size":10,"var_label":"datetime","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + $dynaform = factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"1","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6817532755d16225629cb05061521548","name":"1","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"text","variable":"textVar001","var_uid":"4746221155d1622658943d1014840579","dataType":"string","protectedValue":false,"id":"textVar001","name":"textVar001","label":"text_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","textTransform":"none","validate":"","validateMessage":"","maxLength":1000,"formula":"","mode":"parent","operation":"","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"SELECT * FROM USERS WHERE \nUSR_UID=\'$UID\' UNION SELECT * from PROCESS","var_name":"textVar001","colSpan":12}]],"variables":[{"var_uid":"4746221155d1622658943d1014840579","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar001","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + check_queries_incompatibilities('workflow'); + + $result = ob_get_contents(); + + // This assert that the message contains the second process name + $this->assertRegExp('/'.$process[1]['PRO_TITLE'].'/',$result); + + // This assert that the message contains the second dynaform with the UNION query + $this->assertRegExp('/'.$dynaform['DYN_TITLE'].'/',$result); + } + + /** + * Test the queries incompatibilities in variables + * @test + */ + public function it_should_test_the_incompatibilities_in_the_variables_queries() + { + config(["system.workspace" => 'workflow']); + + $process = factory(Process::class, 2)->create(); + + $variables = factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[0]['PRO_UID'], + 'VAR_SQL' => 'SELECT * FROM USERS WHERE USR_UID="213" UNION SELECT * from PROCESS' + ] + ); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[1]['PRO_UID'], + 'VAR_SQL' => '' + ] + ); + + check_queries_incompatibilities('workflow'); + + $result = ob_get_contents(); + + // This assert that the message contains the first process name + $this->assertRegExp('/'.$process[0]['PRO_TITLE'].'/',$result); + + // This assert that the message contains the first dynaform with the UNION query + $this->assertRegExp('/'.$variables['VAR_TITLE'].'/',$result); + } + + /** + * Test the queries incompatibilities in triggers + * @test + */ + public function it_should_test_the_incompatibilities_in_the_triggers_queries() + { + config(["system.workspace" => 'workflow']); + + $process = factory(Process::class, 3)->create(); + $trigger = factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'TRI_WEBBOT' => '$text=222; + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $query = "SELECT * FROM USERS UNION + + SELECT * FROM TASKS"; + + $QUERY2 = "select * from USERS union SELECT * from GROUPS"; + + $s1 = "select * from USER"; + $s2 = "select * from TASK"; + + $query3 = $s1. " UNION " . $s2; + + executeQuery($query3);' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'TRI_WEBBOT' => 'die();' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'TRI_WEBBOT' => 'executeQuery("select * from USERS");' + ] + ); + + check_queries_incompatibilities('workflow'); + $result = ob_get_contents(); + + // This assert that the message contains the first process name + $this->assertRegExp('/'.$process[0]['PRO_TITLE'].'/',$result); + + // This assert that the message contains the first trigger with the UNION query + $this->assertRegExp('/'.$trigger['TRI_TITLE'].'/',$result); + } } \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php new file mode 100644 index 000000000..e27d5b9dc --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Core/SystemTest.php @@ -0,0 +1,38 @@ +initLaravel(); + + // Assert that the configurations were set successfully + $this->assertEquals(DB_HOST, config('database.connections.workflow.host')); + $this->assertEquals(DB_NAME, config('database.connections.workflow.database')); + $this->assertEquals(DB_USER, config('database.connections.workflow.username')); + $this->assertEquals(DB_PASS, config('database.connections.workflow.password')); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DynaformTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DynaformTest.php new file mode 100644 index 000000000..154ff9b96 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DynaformTest.php @@ -0,0 +1,50 @@ +create(); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"2","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6170264265d1b544bebdbd5098250194","name":"2","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"title","id":"title0000000001","label":"title_1","colSpan":12}],[{"type":"text","variable":"textVar002","var_uid":"9778460595d1b545088dd69091601043","dataType":"string","protectedValue":false,"id":"textVar002","name":"textVar002","label":"text_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","textTransform":"none","validate":"","validateMessage":"","maxLength":1000,"formula":"","mode":"parent","operation":"","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","var_name":"textVar002","colSpan":12}],[{"type":"textarea","variable":"textareaVar001","var_uid":"2934510045d1b5453f21373072798412","dataType":"string","protectedValue":false,"id":"textareaVar001","name":"textareaVar001","label":"textarea_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","validate":"","validateMessage":"","mode":"parent","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","rows":"5","var_name":"textareaVar001","colSpan":12}],[{"type":"datetime","variable":"datetimeVar001","var_uid":"9780823375d1b5455e9c3a2064729484","dataType":"datetime","protectedValue":false,"id":"datetimeVar001","name":"datetimeVar001","label":"datetime_1","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","mode":"parent","format":"YYYY-MM-DD","dayViewHeaderFormat":"MMMM YYYY","extraFormats":false,"stepping":1,"minDate":"","maxDate":"","useCurrent":"false","collapse":true,"locale":"","defaultDate":"","disabledDates":false,"enabledDates":false,"icons":{"time":"glyphicon glyphicon-time","date":"glyphicon glyphicon-calendar","up":"glyphicon glyphicon-chevron-up","down":"glyphicon glyphicon-chevron-down","previous":"glyphicon glyphicon-chevron-left","next":"glyphicon glyphicon-chevron-right","today":"glyphicon glyphicon-screenshot","clear":"glyphicon glyphicon-trash"},"useStrict":false,"sideBySide":false,"daysOfWeekDisabled":false,"calendarWeeks":false,"viewMode":"days","toolbarPlacement":"default","showTodayButton":false,"showClear":"false","widgetPositioning":{"horizontal":"auto","vertical":"auto"},"widgetParent":null,"keepOpen":false,"var_name":"datetimeVar001","colSpan":12}],[{"type":"submit","id":"submit0000000001","name":"submit0000000001","label":"submit_1","colSpan":12}]],"variables":[{"var_uid":"9778460595d1b545088dd69091601043","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar002","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""},{"var_uid":"2934510045d1b5453f21373072798412","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textareaVar001","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""},{"var_uid":"9780823375d1b5455e9c3a2064729484","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"datetimeVar001","var_field_type":"datetime","var_field_size":10,"var_label":"datetime","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"1","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6817532755d16225629cb05061521548","name":"1","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"text","variable":"textVar001","var_uid":"4746221155d1622658943d1014840579","dataType":"string","protectedValue":false,"id":"textVar001","name":"textVar001","label":"text_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","textTransform":"none","validate":"","validateMessage":"","maxLength":1000,"formula":"","mode":"parent","operation":"","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"SELECT * FROM USERS WHERE \nUSR_UID=\'$UID\' UNION SELECT * from PROCESS","var_name":"textVar001","colSpan":12}]],"variables":[{"var_uid":"4746221155d1622658943d1014840579","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar001","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"1","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6817532755d16225629cb05061521548","name":"1","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"text","variable":"textVar001","var_uid":"4746221155d1622658943d1014840579","dataType":"string","protectedValue":false,"id":"textVar001","name":"textVar001","label":"text_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","textTransform":"none","validate":"","validateMessage":"","maxLength":1000,"formula":"","mode":"parent","operation":"","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"SELECT * FROM USERS WHERE \nUSR_UID=\'$UID\' UNION SELECT * from PROCESS","var_name":"textVar001","colSpan":12}]],"variables":[{"var_uid":"4746221155d1622658943d1014840579","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar001","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + $dynaformQuery = Dynaform::query()->select(); + $dynaformQuery->process($process[0]['PRO_UID']); + $result = $dynaformQuery->get()->values()->toArray(); + + // Assert there is a dynaform for the specific process + $this->assertCount(1, $result); + + // Assert that the result has the correct filtered process + $this->assertEquals($process[0]['PRO_UID'], $result[0]['PRO_UID']); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/ProcessVariablesTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/ProcessVariablesTest.php new file mode 100644 index 000000000..b5da806a9 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/ProcessVariablesTest.php @@ -0,0 +1,51 @@ +create(); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[0]['PRO_UID'], + 'VAR_SQL' => 'SELECT * FROM USERS WHERE USR_UID="213" UNION SELECT * from PROCESS' + ] + ); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[1]['PRO_UID'], + 'VAR_SQL' => '' + ] + ); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[0]['PRO_UID'], + 'VAR_SQL' => '' + ] + ); + + $variablesQuery = ProcessVariables::query()->select(); + $variablesQuery->process($process[0]['PRO_UID']); + $result = $variablesQuery->get()->values()->toArray(); + + // Assert there are two process variables for the specific process + $this->assertCount(2, $result); + + // Assert that the result has the correct filtered process + $this->assertEquals($process[0]['PRO_UID'], $result[0]['PRJ_UID']); + $this->assertEquals($process[0]['PRO_UID'], $result[1]['PRJ_UID']); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/TriggersTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/TriggersTest.php new file mode 100644 index 000000000..36b4239d9 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/TriggersTest.php @@ -0,0 +1,77 @@ +create(); + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'TRI_WEBBOT' => '$text=222; + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $query = "SELECT * FROM USERS UNION + + SELECT * FROM TASKS"; + + $QUERY2 = "select * from USERS union SELECT * from GROUPS"; + + $s1 = "select * from USER"; + $s2 = "select * from TASK"; + + $query3 = $s1. " UNION " . $s2; + + executeQuery($query3);' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'TRI_WEBBOT' => 'die();' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'TRI_WEBBOT' => 'executeQuery("select * from USERS");' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'TRI_WEBBOT' => 'executeQuery();' + ] + ); + + $triggerQuery = Triggers::query()->select(); + $triggerQuery->process($process[2]['PRO_UID']); + $result = $triggerQuery->get()->values()->toArray(); + + // Assert there are two triggers for the specific process + $this->assertCount(2, $result); + + // Assert that the result has the correct filtered process + $this->assertEquals($process[2]['PRO_UID'], $result[0]['PRO_UID']); + $this->assertEquals($process[2]['PRO_UID'], $result[1]['PRO_UID']); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Validation/MySQL57Test.php b/tests/unit/workflow/engine/src/ProcessMaker/Validation/MySQL57Test.php new file mode 100644 index 000000000..cd0a35877 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Validation/MySQL57Test.php @@ -0,0 +1,219 @@ +create(); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"2","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6170264265d1b544bebdbd5098250194","name":"2","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"title","id":"title0000000001","label":"title_1","colSpan":12}],[{"type":"text","variable":"textVar002","var_uid":"9778460595d1b545088dd69091601043","dataType":"string","protectedValue":false,"id":"textVar002","name":"textVar002","label":"text_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","textTransform":"none","validate":"","validateMessage":"","maxLength":1000,"formula":"","mode":"parent","operation":"","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","var_name":"textVar002","colSpan":12}],[{"type":"textarea","variable":"textareaVar001","var_uid":"2934510045d1b5453f21373072798412","dataType":"string","protectedValue":false,"id":"textareaVar001","name":"textareaVar001","label":"textarea_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","validate":"","validateMessage":"","mode":"parent","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"","rows":"5","var_name":"textareaVar001","colSpan":12}],[{"type":"datetime","variable":"datetimeVar001","var_uid":"9780823375d1b5455e9c3a2064729484","dataType":"datetime","protectedValue":false,"id":"datetimeVar001","name":"datetimeVar001","label":"datetime_1","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","mode":"parent","format":"YYYY-MM-DD","dayViewHeaderFormat":"MMMM YYYY","extraFormats":false,"stepping":1,"minDate":"","maxDate":"","useCurrent":"false","collapse":true,"locale":"","defaultDate":"","disabledDates":false,"enabledDates":false,"icons":{"time":"glyphicon glyphicon-time","date":"glyphicon glyphicon-calendar","up":"glyphicon glyphicon-chevron-up","down":"glyphicon glyphicon-chevron-down","previous":"glyphicon glyphicon-chevron-left","next":"glyphicon glyphicon-chevron-right","today":"glyphicon glyphicon-screenshot","clear":"glyphicon glyphicon-trash"},"useStrict":false,"sideBySide":false,"daysOfWeekDisabled":false,"calendarWeeks":false,"viewMode":"days","toolbarPlacement":"default","showTodayButton":false,"showClear":"false","widgetPositioning":{"horizontal":"auto","vertical":"auto"},"widgetParent":null,"keepOpen":false,"var_name":"datetimeVar001","colSpan":12}],[{"type":"submit","id":"submit0000000001","name":"submit0000000001","label":"submit_1","colSpan":12}]],"variables":[{"var_uid":"9778460595d1b545088dd69091601043","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar002","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""},{"var_uid":"2934510045d1b5453f21373072798412","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textareaVar001","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""},{"var_uid":"9780823375d1b5455e9c3a2064729484","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"datetimeVar001","var_field_type":"datetime","var_field_size":10,"var_label":"datetime","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + factory(Dynaform::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'DYN_CONTENT' => '{"name":"1","description":"","items":[{"type":"form","variable":"","var_uid":"","dataType":"","id":"6817532755d16225629cb05061521548","name":"1","description":"","mode":"edit","script":"","language":"en","externalLibs":"","printable":false,"items":[[{"type":"text","variable":"textVar001","var_uid":"4746221155d1622658943d1014840579","dataType":"string","protectedValue":false,"id":"textVar001","name":"textVar001","label":"text_1","defaultValue":"","placeholder":"","hint":"","required":false,"requiredFieldErrorMessage":"","textTransform":"none","validate":"","validateMessage":"","maxLength":1000,"formula":"","mode":"parent","operation":"","dbConnection":"workflow","dbConnectionLabel":"PM Database","sql":"SELECT * FROM USERS WHERE \nUSR_UID=\'$UID\' UNION SELECT * from PROCESS","var_name":"textVar001","colSpan":12}]],"variables":[{"var_uid":"4746221155d1622658943d1014840579","prj_uid":"5139642915ccb3fca429a36061714972","var_name":"textVar001","var_field_type":"string","var_field_size":10,"var_label":"string","var_dbconnection":"workflow","var_dbconnection_label":"PM Database","var_sql":"","var_null":0,"var_default":"","var_accepted_values":"[]","inp_doc_uid":""}]}]}' + ] + ); + + $processes = [ + [ + "PRO_UID" => $process[0]['PRO_UID'], + "PRO_TITLE" => $process[0]['PRO_TITLE'] + ], + [ + "PRO_UID" => $process[1]['PRO_UID'], + "PRO_TITLE" => $process[1]['PRO_TITLE'] + ] + ]; + + $object = new MySQL57(); + $result = $object->checkIncompatibilityDynaforms($processes); + + // This asserts that there is a result + $this->assertNotEmpty($result); + + // This asserts that there is a process that contains an UNION query inside a dynaform + $this->assertCount(1, $result); + + // This asserts that the process containing the UNION queries inside a dynaform, is the first one + $this->assertEquals($result[0]['PRO_UID'], $process[1]['PRO_UID']); + } + + /** + * Test the MySQL 5.7 incompatibilities in variables + * + * @test + */ + public function it_should_test_incompatibilities_with_variables() + { + $process = factory(Process::class, 2)->create(); + + factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[0]['PRO_UID'], + 'VAR_SQL' => 'SELECT * FROM USERS WHERE USR_UID="213" UNION SELECT * from PROCESS', + ] + ); + + $variables = factory(ProcessVariables::class)->create( + [ + 'PRJ_UID' => $process[1]['PRO_UID'], + 'VAR_SQL' => '', + ] + ); + + + $processes = [ + [ + "PRO_UID" => $process[0]['PRO_UID'], + "PRO_TITLE" => $process[0]['PRO_TITLE'] + ], + [ + "PRO_UID" => $process[1]['PRO_UID'], + "PRO_TITLE" => $process[1]['PRO_TITLE'] + ] + ]; + + $object = new MySQL57(); + $result = $object->checkIncompatibilityVariables($processes); + + // This asserts that there is a result + $this->assertNotEmpty($result); + + // This asserts that there is a process that contains an UNION query in a variable + $this->assertCount(1, $result); + + // This asserts that the process containing the UNION query in a variable, is the first one + $this->assertEquals($result[0]['PRO_UID'], $process[0]['PRO_UID']); + + // This asserts that the result does not contain a variable that does not have a UNION query + $this->assertNotEquals($result[0]['VAR_UID'], $variables['VAR_UID']); + } + + /** + * Test the MySQL 5.7 incompatibilities in triggers + * + * @test + */ + public function it_should_test_incompatibilities_with_triggers() + { + $process = factory(Process::class, 3)->create(); + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[0]['PRO_UID'], + 'TRI_WEBBOT' => '$text=222; + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $var1= executeQuery("SELECT * + FROM USERS WHERE + USR_UID=\'$UID\' UNION SELECT * from PROCESS"); + + $query = "SELECT * FROM USERS UNION + + SELECT * FROM TASKS"; + + $QUERY2 = "select * from USERS union SELECT * from GROUPS"; + + $s1 = "select * from USER"; + $s2 = "select * from TASK"; + + $query3 = $s1. " UNION " . $s2; + + executeQuery($query3);' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[1]['PRO_UID'], + 'TRI_WEBBOT' => 'die();' + ] + ); + + factory(Triggers::class)->create( + [ + 'PRO_UID' => $process[2]['PRO_UID'], + 'TRI_WEBBOT' => 'executeQuery("select * from USERS");' + ] + ); + + $processes = [ + [ + "PRO_UID" => $process[0]['PRO_UID'], + "PRO_TITLE" => $process[0]['PRO_TITLE'] + ], + [ + "PRO_UID" => $process[1]['PRO_UID'], + "PRO_TITLE" => $process[1]['PRO_TITLE'] + ], + [ + "PRO_UID" => $process[2]['PRO_UID'], + "PRO_TITLE" => $process[2]['PRO_TITLE'] + ] + ]; + + $object = new MySQL57(); + $result = $object->checkIncompatibilityTriggers($processes); + + // This asserts that there is a result + $this->assertNotEmpty($result); + + // This asserts that there is a process that contains an UNION query + $this->assertCount(1, $result); + + // This asserts that the process containing the UNION queries is the first one + $this->assertEquals($result[0]['PRO_UID'], $process[0]['PRO_UID']); + } + + /** + * Test the query analyzer method + * + * @test + */ + public function it_should_test_the_query_analyzer() + { + $query = ""; + + $object = new MySQL57(); + $result = $object->analyzeQuery($query); + + // This asserts that there is not a UNION query + $this->assertFalse($result); + + $query = "select * from USERS UNION select '1241412515'"; + $result = $object->analyzeQuery($query); + + // This asserts that there is a UNION query + $this->assertTrue($result); + + $query = "select * from USERS LEFT JOIN TASKS ON 'USERS.USR_UID = TASKS.USR_UID '"; + $result = $object->analyzeQuery($query); + + // This asserts that there is not a UNION query + $this->assertFalse($result); + } +} \ No newline at end of file From f80324f519825ba2e31f0bf1a96f28887509e6b7 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Wed, 3 Jul 2019 18:03:59 -0400 Subject: [PATCH 29/30] PMC-913 All existing Unit Tests are running correctly --- .../BusinessModel/LanguageTest.php | 27 ++++++++++++------- .../src/ProcessMaker/Model/DelegationTest.php | 8 +++--- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php index 4e6bb14f9..6d2bf9bd8 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php @@ -62,9 +62,11 @@ class LanguageTest extends TestCase public function testGetLanguageList() { $list = $this->object->getLanguageList(); - $this->assertCount(1, $list); - $this->assertEquals('en', $list[0]['LANG_ID']); - $this->assertEquals('English', $list[0]['LANG_NAME']); + $expected = [ + 'LANG_ID' => 'en', + 'LANG_NAME' => 'English', + ]; + $this->assertContains($expected, $list); } /** @@ -77,14 +79,21 @@ class LanguageTest extends TestCase { $this->installLanguage('es', __DIR__ . '/processmaker.es.po'); $list = $this->object->getLanguageList(); - $this->assertCount(2, $list); - $this->assertEquals('en', $list[0]['LANG_ID']); - $this->assertEquals('English', $list[0]['LANG_NAME']); - $this->assertEquals('es-ES', $list[1]['LANG_ID']); - $this->assertEquals('Spanish (Spain)', $list[1]['LANG_NAME']); + $english = [ + 'LANG_ID' => 'en', + 'LANG_NAME' => 'English', + ]; + $this->assertContains($english, $list); + + $spanish = [ + 'LANG_ID' => 'es-ES', + 'LANG_NAME' => 'Spanish (Spain)', + ]; + $this->assertContains($spanish, $list); + $this->uninstallLanguage('es', __DIR__ . '/processmaker.es.po'); $list2 = $this->object->getLanguageList(); - $this->assertCount(1, $list2); + $this->assertContains($english, $list2); } /** diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php index 3f56c0379..d2e21d8a6 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php @@ -220,10 +220,10 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); // Now fetch results, and assume delegation count is 1 and the user points to our user - $results = Delegation::search($user->id); + $results = Delegation::search($user->USR_ID); $this->assertCount(1, $results['data']); $this->assertEquals('testcaseuser', $results['data'][0]['USRCR_USR_USERNAME']); } @@ -644,7 +644,7 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); $user = factory(User::class)->create([ 'USR_USERNAME' => 'paul', @@ -654,7 +654,7 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); // Now fetch results, and assume delegation count is 2 and the ordering ascending return Gary $results = Delegation::search(null, 0, 25, null, null, null, 'ASC', 'APP_CURRENT_USER'); From f2e45cb2daf21b41e077d2438e80be6d01ca4d56 Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 4 Jul 2019 09:18:28 -0400 Subject: [PATCH 30/30] PMC-913 All existing Unit Tests are running correctly --- .../BusinessModel/LanguageTest.php | 27 ++++++++++++------- .../src/ProcessMaker/Model/DelegationTest.php | 8 +++--- .../ProcessMaker/Services/Api/LightTest.php | 6 +++++ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php index 4e6bb14f9..6d2bf9bd8 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/LanguageTest.php @@ -62,9 +62,11 @@ class LanguageTest extends TestCase public function testGetLanguageList() { $list = $this->object->getLanguageList(); - $this->assertCount(1, $list); - $this->assertEquals('en', $list[0]['LANG_ID']); - $this->assertEquals('English', $list[0]['LANG_NAME']); + $expected = [ + 'LANG_ID' => 'en', + 'LANG_NAME' => 'English', + ]; + $this->assertContains($expected, $list); } /** @@ -77,14 +79,21 @@ class LanguageTest extends TestCase { $this->installLanguage('es', __DIR__ . '/processmaker.es.po'); $list = $this->object->getLanguageList(); - $this->assertCount(2, $list); - $this->assertEquals('en', $list[0]['LANG_ID']); - $this->assertEquals('English', $list[0]['LANG_NAME']); - $this->assertEquals('es-ES', $list[1]['LANG_ID']); - $this->assertEquals('Spanish (Spain)', $list[1]['LANG_NAME']); + $english = [ + 'LANG_ID' => 'en', + 'LANG_NAME' => 'English', + ]; + $this->assertContains($english, $list); + + $spanish = [ + 'LANG_ID' => 'es-ES', + 'LANG_NAME' => 'Spanish (Spain)', + ]; + $this->assertContains($spanish, $list); + $this->uninstallLanguage('es', __DIR__ . '/processmaker.es.po'); $list2 = $this->object->getLanguageList(); - $this->assertCount(1, $list2); + $this->assertContains($english, $list2); } /** diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php index 3f56c0379..d2e21d8a6 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DelegationTest.php @@ -220,10 +220,10 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); // Now fetch results, and assume delegation count is 1 and the user points to our user - $results = Delegation::search($user->id); + $results = Delegation::search($user->USR_ID); $this->assertCount(1, $results['data']); $this->assertEquals('testcaseuser', $results['data'][0]['USRCR_USR_USERNAME']); } @@ -644,7 +644,7 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); $user = factory(User::class)->create([ 'USR_USERNAME' => 'paul', @@ -654,7 +654,7 @@ class DelegationTest extends TestCase // Create a new delegation, but for this specific user factory(Delegation::class)->create([ 'USR_UID' => $user->USR_UID, - 'USR_ID' => $user->id + 'USR_ID' => $user->USR_ID ]); // Now fetch results, and assume delegation count is 2 and the ordering ascending return Gary $results = Delegation::search(null, 0, 25, null, null, null, 'ASC', 'APP_CURRENT_USER'); diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php index c24d476cc..b3c343a9b 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/Services/Api/LightTest.php @@ -16,6 +16,12 @@ use ProcessMaker\Model\User; use ProcessMaker\Util\DateTime; use Tests\TestCase; +/** + * To do: This only works if the test database is the same where ProcessMaker is + * installed, improvements must be made so that the method "Installer::create_site()" + * can create the connection file (/processmaker/shared/sites/{workspace}/db.php) + * to different instances of MySql. + */ class LightTest extends TestCase { private $http;