From 9ddb87a6fd50d0bf47737c57d34a133e6f92b8a4 Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Tue, 6 Jul 2021 22:01:20 +0200 Subject: [PATCH] added project detail report (#2651) - avatars via css only - random colors for entities - improves print view - added colors for teams - added color to tag --- assets/sass/app.scss | 1 + assets/sass/avatar.scss | 78 ++ assets/sass/content.scss | 28 +- assets/sass/datatable-extensions.scss | 32 +- assets/sass/datatable.scss | 19 - assets/sass/navbar.scss | 8 + assets/sass/print.scss | 19 +- assets/sass/variables.scss | 1 + composer.json | 1 - composer.lock | 705 +----------------- phpunit.xml.dist | 2 +- .../{app.cf7b7f85.css => app.079fbef2.css} | 2 +- public/build/entrypoints.json | 2 +- public/build/manifest.json | 2 +- src/Configuration/SystemConfiguration.php | 15 +- src/Controller/DoctorController.php | 1 - src/Controller/ProfileController.php | 9 +- .../Reporting/ProjectDetailsController.php | 53 ++ .../SystemConfigurationController.php | 14 + .../Compiler/TwigContextCompilerPass.php | 5 +- src/DependencyInjection/Configuration.php | 6 + src/Entity/ColorTrait.php | 5 +- src/Entity/Team.php | 2 + src/Entity/User.php | 38 + .../Actions/ProjectSubscriber.php | 4 + src/Form/ActivityTeamPermissionForm.php | 2 - src/Form/ColorTrait.php | 51 ++ src/Form/CustomerTeamPermissionForm.php | 2 - src/Form/EntityFormTrait.php | 42 +- src/Form/ProjectTeamPermissionForm.php | 2 - src/Form/TagEditForm.php | 6 +- src/Form/TeamEditForm.php | 6 +- src/Form/Type/ProjectType.php | 4 + src/Form/UserEditType.php | 22 +- src/Migrations/Version20210704111542.php | 44 ++ src/Model/ActivityStatistic.php | 54 +- src/Model/Statistic/Day.php | 38 +- src/Model/Statistic/Month.php | 28 +- src/Model/Statistic/Timesheet.php | 87 +++ src/Model/Statistic/UserYear.php | 60 ++ src/Model/Statistic/Year.php | 12 +- src/Model/TimesheetCountedStatistic.php | 45 +- src/Model/UserStatistic.php | 40 + src/Project/ProjectStatisticService.php | 144 +++- .../ProjectDetails/ProjectDetailsForm.php | 53 ++ .../ProjectDetails/ProjectDetailsModel.php | 158 ++++ .../ProjectDetails/ProjectDetailsQuery.php | 56 ++ src/Reporting/ReportingService.php | 3 + src/Repository/ProjectRepository.php | 4 + src/Repository/Query/ProjectFormTypeQuery.php | 14 +- src/Twig/AvatarExtension.php | 59 -- src/Twig/Configuration.php | 67 ++ src/Twig/Extensions.php | 12 + src/Twig/LocaleFormatExtensions.php | 26 + src/Twig/Runtime/ThemeExtension.php | 26 + src/Twig/RuntimeExtensions.php | 1 + src/Utils/AvatarService.php | 170 ----- src/Utils/Color.php | 34 + symfony.lock | 33 - templates/activity/index.html.twig | 4 +- templates/base.html.twig | 12 +- templates/calendar/user.html.twig | 2 +- templates/customer/index.html.twig | 4 +- templates/export/pdf-layout.html.twig | 5 +- templates/invoice/index.html.twig | 3 +- templates/macros/charts.html.twig | 224 ++++++ templates/macros/widgets.html.twig | 101 ++- templates/partials/logo_login.html.twig | 10 +- templates/project/index.html.twig | 4 +- templates/reporting/project_details.html.twig | 488 ++++++++++++ templates/reporting/project_view.html.twig | 2 +- .../reporting/report_user_list.html.twig | 2 +- .../report_user_list_monthly.html.twig | 2 +- templates/tags/edit.html.twig | 17 +- templates/tags/index.html.twig | 2 +- templates/team/index.html.twig | 8 +- templates/user/form.html.twig | 22 +- templates/user/preferences.html.twig | 18 + templates/user/profile.html.twig | 8 + templates/user/stats.html.twig | 132 +--- .../widget-dailyworkingtimechart.html.twig | 8 +- templates/widget/widget-yearchart.html.twig | 10 +- tests/API/APIControllerBaseTest.php | 6 +- tests/API/TagControllerTest.php | 4 +- tests/API/TeamControllerTest.php | 4 +- tests/API/UserControllerTest.php | 8 +- .../Configuration/SystemConfigurationTest.php | 1 - tests/Controller/ProfileControllerTest.php | 14 +- .../ProjectDetailsControllerTest.php | 64 ++ tests/Controller/TimesheetControllerTest.php | 4 - tests/Controller/UserControllerTest.php | 3 - tests/DataFixtures/TimesheetFixtures.php | 24 +- .../DependencyInjection/AppExtensionTest.php | 4 +- .../DependencyInjection/ConfigurationTest.php | 4 +- tests/Entity/ActivityTest.php | 4 +- tests/Entity/CustomerTest.php | 4 +- tests/Entity/ProjectTest.php | 4 +- tests/Entity/TagTest.php | 2 +- tests/Entity/TeamTest.php | 16 + tests/Entity/UserTest.php | 17 + .../AbstractTimesheetCountedStatisticTest.php | 79 ++ tests/Model/ActivityStatisticTest.php | 43 +- tests/Model/CustomerStatisticTest.php | 36 +- tests/Model/ProjectStatisticTest.php | 28 +- tests/Model/TimesheetCountedStatisticTest.php | 34 +- tests/Model/UserStatisticTest.php | 38 + .../ProjectDetailsModelTest.php | 36 + .../ProjectDetailsQueryTest.php | 45 ++ tests/Reporting/ReportingServiceTest.php | 2 +- .../Query/ProjectFormTypeQueryTest.php | 5 + tests/Twig/AvatarExtensionTest.php | 67 -- tests/Twig/ExtensionsTest.php | 37 +- tests/Twig/LocaleFormatExtensionsTest.php | 13 +- tests/Twig/RuntimeExtensionsTest.php | 2 +- tests/Utils/AvatarServiceTest.php | 30 - tests/Utils/ColorTest.php | 18 + translations/messages.de.xlf | 8 + translations/messages.en.xlf | 8 + translations/reporting.de.xlf | 4 + translations/reporting.en.xlf | 4 + translations/system-configuration.de.xlf | 8 + translations/system-configuration.en.xlf | 8 + 122 files changed, 2736 insertions(+), 1549 deletions(-) create mode 100644 assets/sass/avatar.scss rename public/build/{app.cf7b7f85.css => app.079fbef2.css} (95%) create mode 100644 src/Controller/Reporting/ProjectDetailsController.php create mode 100644 src/Form/ColorTrait.php create mode 100644 src/Migrations/Version20210704111542.php create mode 100644 src/Model/Statistic/Timesheet.php create mode 100644 src/Model/Statistic/UserYear.php create mode 100644 src/Model/UserStatistic.php create mode 100644 src/Reporting/ProjectDetails/ProjectDetailsForm.php create mode 100644 src/Reporting/ProjectDetails/ProjectDetailsModel.php create mode 100644 src/Reporting/ProjectDetails/ProjectDetailsQuery.php delete mode 100644 src/Twig/AvatarExtension.php create mode 100644 src/Twig/Configuration.php delete mode 100644 src/Utils/AvatarService.php create mode 100644 templates/macros/charts.html.twig create mode 100644 templates/reporting/project_details.html.twig create mode 100644 templates/user/preferences.html.twig create mode 100644 tests/Controller/Reporting/ProjectDetailsControllerTest.php create mode 100644 tests/Model/AbstractTimesheetCountedStatisticTest.php create mode 100644 tests/Model/UserStatisticTest.php create mode 100644 tests/Reporting/ProjectDetails/ProjectDetailsModelTest.php create mode 100644 tests/Reporting/ProjectDetails/ProjectDetailsQueryTest.php delete mode 100644 tests/Twig/AvatarExtensionTest.php delete mode 100644 tests/Utils/AvatarServiceTest.php diff --git a/assets/sass/app.scss b/assets/sass/app.scss index a0746ae2..5192946b 100644 --- a/assets/sass/app.scss +++ b/assets/sass/app.scss @@ -29,3 +29,4 @@ @import 'forms'; @import 'modal'; @import 'progressbar'; +@import 'avatar'; diff --git a/assets/sass/avatar.scss b/assets/sass/avatar.scss new file mode 100644 index 00000000..1a251292 --- /dev/null +++ b/assets/sass/avatar.scss @@ -0,0 +1,78 @@ + +$avatar-base-size: 30; + +.avatar { + text-align: center; + background-color: #d2d6de; + border-radius: 50%; + display: inline-block; + height: ($avatar-base-size)+px; + width: ($avatar-base-size)+px; + vertical-align: middle; +} + +.initials { + line-height: 1; + position: relative; + font-weight: bold; + font-size: ($avatar-base-size / 2 - 2)+px; + top: ($avatar-base-size / 4 - 1)+px; +} + +.avatar-xs { + width: ($avatar-base-size * 0.75)+px; + height: ($avatar-base-size * 0.75)+px; + .initials { + font-size: ($avatar-base-size * .75 / 2 - 2)+px; + top: ($avatar-base-size * .75 / 4 - 1)+px; + } +} + +.avatar-sm { + width: ($avatar-base-size * 1.25)+px; + height: ($avatar-base-size * 1.25)+px; + .initials { + font-size: ($avatar-base-size * 1.25 / 2 - 2)+px; + top: ($avatar-base-size * 1.25 / 4 - 1)+px; + } +} + +.avatar-md { + width: ($avatar-base-size * 1.5)+px; + height: ($avatar-base-size * 1.5)+px; + .initials { + font-size: ($avatar-base-size * 1.5 / 2 - 2)+px; + top: ($avatar-base-size * 1.5 / 4 - 1)+px; + } +} + +.avatar-lg { + width: ($avatar-base-size * 2)+px; + height: ($avatar-base-size * 2)+px; + .initials { + font-size: ($avatar-base-size * 2 / 2 - 2)+px; + top: ($avatar-base-size * 2 / 4 - 1)+px; + } +} + +.widget-user-image { + border-radius: 50%; + border: 3px solid #fff; + .avatar { + width: ($avatar-base-size * 2.75)+px; + height: ($avatar-base-size * 2.75)+px; + .initials { + font-size: ($avatar-base-size * 2.75 / 2 - 2)+px; + top: ($avatar-base-size * 2.75 / 4 - 1)+px; + } + } +} + +/* Detail tables like my teams (Dashboard) or */ +table.dataTable.table > tbody > tr > td { + &.avatars { + .avatar { + margin: 1px; + } + } +} diff --git a/assets/sass/content.scss b/assets/sass/content.scss index e7546850..653b9773 100644 --- a/assets/sass/content.scss +++ b/assets/sass/content.scss @@ -36,23 +36,6 @@ td { margin-right: 15px; } -/* Profile */ -.avatar-xs { - width: 20px; - height: 20px; -} -.avatar-sm { - width: 25px; - height: 25px; -} -.avatar-md { - width: 30px; - height: 30px; -} -.avatar-lg { - width: 40px; - height: 40px; -} .box-profile { img.img-circle { width: 100px; @@ -64,6 +47,7 @@ td { .label-gray { background-color: $gray-lte; + color: #666; } /* Delete link in action dropdowns */ @@ -84,4 +68,14 @@ td.w-min { table.dataTable thead > tr > th.hw-min { width: 1%; white-space: normal; +} + +.badge { + font-weight: normal; + color: #000; + background-color: $kimai-default; +} + +.label { + font-weight: normal; } \ No newline at end of file diff --git a/assets/sass/datatable-extensions.scss b/assets/sass/datatable-extensions.scss index 37a324e5..a63ed4d1 100644 --- a/assets/sass/datatable-extensions.scss +++ b/assets/sass/datatable-extensions.scss @@ -5,9 +5,27 @@ * file that was distributed with this source code. */ + +/* custom extension to make the column wide enough to show the sortable icons */ +table.dataTable th.sortable { + padding-left: 22px; +} + +table.dataTable.table > tbody > tr > td { + vertical-align: middle; + .img-circle { + max-width: 30px; + margin-right: 0; + &.teamlead { + box-shadow: 0 0 5px 3px $gray-lte; + } + } +} + span.label-color, span.label-meta, span.label-tag, +span.label-user, span.label-activity, span.label-project, span.label-customer { @@ -37,6 +55,9 @@ table.dataTable { &.overlapping { border-top: 2px dotted red; } + &.exported { + opacity: 0.7; + } } td { /* @@ -48,7 +69,6 @@ table.dataTable { } .label { font-size: 85%; - font-weight: 500; padding: .3em .6em .3em; line-height: 24px; } @@ -69,3 +89,13 @@ table.dataTable { } } } + +table.table-hover { + tr { + &.exported { + &:hover { + opacity: 1.0; + } + } + } +} \ No newline at end of file diff --git a/assets/sass/datatable.scss b/assets/sass/datatable.scss index dd3d2cf2..38844796 100644 --- a/assets/sass/datatable.scss +++ b/assets/sass/datatable.scss @@ -266,22 +266,3 @@ div.dataTables_scrollHead table.table-bordered { .table-striped.dataTable tbody tr.active:nth-child(odd) th { background-color: #017ebc; } - -/* custom extension to make the column wide enough to show the sortable icons */ -table.dataTable th.sortable { - padding-left: 22px; -} - -table.dataTable.table > tbody > tr > td { - &.avatars { - line-height: 40px; - } - vertical-align: middle; - .img-circle { - max-width: 35px; - margin-right: 10px; - &.teamlead { - box-shadow: 0 0 5px 3px $gray-lte; - } - } -} diff --git a/assets/sass/navbar.scss b/assets/sass/navbar.scss index d145a702..836bfb4f 100644 --- a/assets/sass/navbar.scss +++ b/assets/sass/navbar.scss @@ -10,6 +10,14 @@ max-height: 26px; margin-top: -2px; } + .avatar { + max-height: 26px; + max-width: 26px; + margin-top: -2px; + .initials { + top: 4px; + } + } li>a.ddt-large { padding: 15px 12px 11px 10px; font-size: 10px; diff --git a/assets/sass/print.scss b/assets/sass/print.scss index 56597b4c..8fadf03c 100644 --- a/assets/sass/print.scss +++ b/assets/sass/print.scss @@ -6,6 +6,21 @@ */ @media print{ - .sf-toolbar, .control-sidebar {display: none !important;} - .col-print-12{width:100%;} + .sf-toolbar, .control-sidebar { + display: none !important; + } + .col-print-12{ + width:100%; + } + .sidebar-mini.sidebar-collapse .content-wrapper, .sidebar-mini.sidebar-collapse .main-footer, .sidebar-mini.sidebar-collapse .right-side { + margin: 0!important; + } + section.content { + margin: 0; + padding: 0; + } + span i.dot { + display: none; + margin-right: 0!important; + } } diff --git a/assets/sass/variables.scss b/assets/sass/variables.scss index c8fd8bb6..7cb1304a 100644 --- a/assets/sass/variables.scss +++ b/assets/sass/variables.scss @@ -37,6 +37,7 @@ $blue: #0073b7; //$maroon: #D81B60; //$black: #111; $gray-lte: #d2d6de; +$kimai-default: $gray-lte; // LAYOUT // -------------------------------------------------------- diff --git a/composer.json b/composer.json index 2de03e27..33d664c6 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,6 @@ "jms/metadata": "^2.0", "jms/serializer-bundle": "^3.9", "kevinpapst/adminlte-bundle": "dev-master", - "laravolt/avatar": "^4.0", "league/csv": "^9.4", "league/html-to-markdown": "^5.0", "mpdf/mpdf": "^8.0", diff --git a/composer.lock b/composer.lock index 2ede6935..8d4d2ea5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2e698a91ffa36afbce0e7ddd765edc00", + "content-hash": "d4fcb30ed5f1db78d4f32f09388ea0b3", "packages": [ { "name": "beberlei/doctrineextensions", @@ -2039,81 +2039,6 @@ }, "time": "2021-04-23T09:16:01+00:00" }, - { - "name": "guzzlehttp/psr7", - "version": "1.8.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-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" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.2" - }, - "time": "2021-04-26T09:17:50+00:00" - }, { "name": "handcraftedinthealps/rest-routing-bundle", "version": "1.0.2", @@ -2191,353 +2116,6 @@ }, "time": "2021-01-08T09:04:42+00:00" }, - { - "name": "illuminate/cache", - "version": "v8.45.1", - "source": { - "type": "git", - "url": "https://github.com/illuminate/cache.git", - "reference": "499d15db9b58b5701aa85a4790ae1404d79009aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/cache/zipball/499d15db9b58b5701aa85a4790ae1404d79009aa", - "reference": "499d15db9b58b5701aa85a4790ae1404d79009aa", - "shasum": "" - }, - "require": { - "illuminate/collections": "^8.0", - "illuminate/contracts": "^8.0", - "illuminate/macroable": "^8.0", - "illuminate/support": "^8.0", - "php": "^7.3|^8.0" - }, - "suggest": { - "ext-memcached": "Required to use the memcache cache driver.", - "illuminate/database": "Required to use the database cache driver (^8.0).", - "illuminate/filesystem": "Required to use the file cache driver (^8.0).", - "illuminate/redis": "Required to use the redis cache driver (^8.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Cache\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Cache package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2021-05-18T12:49:19+00:00" - }, - { - "name": "illuminate/collections", - "version": "v8.45.1", - "source": { - "type": "git", - "url": "https://github.com/illuminate/collections.git", - "reference": "deccb956d38710f3f8baf36dd876c3fa1585ec22" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/deccb956d38710f3f8baf36dd876c3fa1585ec22", - "reference": "deccb956d38710f3f8baf36dd876c3fa1585ec22", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.0", - "illuminate/macroable": "^8.0", - "php": "^7.3|^8.0" - }, - "suggest": { - "symfony/var-dumper": "Required to use the dump method (^5.1.4)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - }, - "files": [ - "helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Collections package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2021-04-22T21:08:09+00:00" - }, - { - "name": "illuminate/contracts", - "version": "v8.45.1", - "source": { - "type": "git", - "url": "https://github.com/illuminate/contracts.git", - "reference": "199fcedc161ba4a0b83feaddc4629f395dbf1641" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/199fcedc161ba4a0b83feaddc4629f395dbf1641", - "reference": "199fcedc161ba4a0b83feaddc4629f395dbf1641", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Contracts\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Contracts package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2021-06-01T14:53:38+00:00" - }, - { - "name": "illuminate/macroable", - "version": "v8.45.1", - "source": { - "type": "git", - "url": "https://github.com/illuminate/macroable.git", - "reference": "300aa13c086f25116b5f3cde3ca54ff5c822fb05" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/300aa13c086f25116b5f3cde3ca54ff5c822fb05", - "reference": "300aa13c086f25116b5f3cde3ca54ff5c822fb05", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Macroable package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2020-10-27T15:20:30+00:00" - }, - { - "name": "illuminate/support", - "version": "v8.45.1", - "source": { - "type": "git", - "url": "https://github.com/illuminate/support.git", - "reference": "3832c4a0ba0f0734de8689500164122f5f51c8ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/3832c4a0ba0f0734de8689500164122f5f51c8ab", - "reference": "3832c4a0ba0f0734de8689500164122f5f51c8ab", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.4|^2.0", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/collections": "^8.0", - "illuminate/contracts": "^8.0", - "illuminate/macroable": "^8.0", - "nesbot/carbon": "^2.31", - "php": "^7.3|^8.0", - "voku/portable-ascii": "^1.4.8" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "suggest": { - "illuminate/filesystem": "Required to use the composer class (^8.0).", - "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3).", - "ramsey/uuid": "Required to use Str::uuid() (^4.0).", - "symfony/process": "Required to use the composer class (^5.1.4).", - "symfony/var-dumper": "Required to use the dd function (^5.1.4).", - "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.2)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - }, - "files": [ - "helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Support package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2021-06-01T19:27:52+00:00" - }, - { - "name": "intervention/image", - "version": "2.5.1", - "source": { - "type": "git", - "url": "https://github.com/Intervention/image.git", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", - "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1", - "php": ">=5.4.0" - }, - "require-dev": { - "mockery/mockery": "~0.9.2", - "phpunit/phpunit": "^4.8 || ^5.7" - }, - "suggest": { - "ext-gd": "to use GD library based image processing.", - "ext-imagick": "to use Imagick based image processing.", - "intervention/imagecache": "Caching extension for the Intervention Image library" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - }, - "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], - "aliases": { - "Image": "Intervention\\Image\\Facades\\Image" - } - } - }, - "autoload": { - "psr-4": { - "Intervention\\Image\\": "src/Intervention/Image" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oliver Vogel", - "email": "oliver@olivervogel.com", - "homepage": "http://olivervogel.com/" - } - ], - "description": "Image handling and manipulation library with support for Laravel integration", - "homepage": "http://image.intervention.io/", - "keywords": [ - "gd", - "image", - "imagick", - "laravel", - "thumbnail", - "watermark" - ], - "support": { - "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/master" - }, - "time": "2019-11-02T09:15:47+00:00" - }, { "name": "jms/metadata", "version": "2.5.0", @@ -3123,76 +2701,6 @@ ], "time": "2021-02-25T21:54:58+00:00" }, - { - "name": "laravolt/avatar", - "version": "4.1.3", - "source": { - "type": "git", - "url": "https://github.com/laravolt/avatar.git", - "reference": "3ab66e32c1f7c84e7095adfa1de3cb20964e6a1e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravolt/avatar/zipball/3ab66e32c1f7c84e7095adfa1de3cb20964e6a1e", - "reference": "3ab66e32c1f7c84e7095adfa1de3cb20964e6a1e", - "shasum": "" - }, - "require": { - "illuminate/cache": "6.* | 7.*| 8.*", - "illuminate/support": "6.* | 7.* | 8.*", - "intervention/image": "^2.5", - "php": ">=7.3" - }, - "require-dev": { - "mockery/mockery": "~1.3", - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "~9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - }, - "laravel": { - "providers": [ - "Laravolt\\Avatar\\ServiceProvider" - ], - "aliases": { - "Avatar": "Laravolt\\Avatar\\Facade" - } - } - }, - "autoload": { - "psr-4": { - "Laravolt\\Avatar\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bayu Hendra Winata", - "email": "uyab.exe@gmail.com", - "homepage": "https://laravolt.dev", - "role": "Developer" - } - ], - "description": "Turn name, email, and any other string into initial-based avatar or gravatar.", - "homepage": "https://github.com/laravolt/avatar", - "keywords": [ - "avatar", - "gravatar", - "laravel", - "laravolt" - ], - "support": { - "issues": "https://github.com/laravolt/avatar/issues", - "source": "https://github.com/laravolt/avatar/tree/4.1.3" - }, - "time": "2021-03-25T01:43:03+00:00" - }, { "name": "league/csv", "version": "9.7.1", @@ -4093,99 +3601,6 @@ }, "time": "2021-04-20T08:27:05+00:00" }, - { - "name": "nesbot/carbon", - "version": "2.48.1", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8d1f50f1436fb4b05e7127360483dd9c6e73da16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8d1f50f1436fb4b05e7127360483dd9c6e73da16", - "reference": "8d1f50f1436fb4b05e7127360483dd9c6e73da16", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^3.4 || ^4.0 || ^5.0" - }, - "require-dev": { - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", - "kylekatarnls/multi-tester": "^2.0", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", - "squizlabs/php_codesniffer": "^3.4" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - }, - { - "name": "kylekatarnls", - "homepage": "http://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "http://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", - "type": "tidelift" - } - ], - "time": "2021-05-26T22:08:38+00:00" - }, { "name": "onelogin/php-saml", "version": "3.6.1", @@ -5166,50 +4581,6 @@ }, "time": "2017-10-23T01:57:42+00:00" }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "robrichards/xmlseclibs", "version": "3.1.1", @@ -11299,80 +10670,6 @@ ], "time": "2021-05-16T12:14:13+00:00" }, - { - "name": "voku/portable-ascii", - "version": "1.5.6", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2020-11-12T00:07:28+00:00" - }, { "name": "webmozart/assert", "version": "1.10.0", diff --git a/phpunit.xml.dist b/phpunit.xml.dist index afdafc7a..8da5d755 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -28,7 +28,7 @@