From 8896a667ce54b55555391aed130380dc9d3dc728 Mon Sep 17 00:00:00 2001 From: Regis Freyd Date: Fri, 4 Feb 2022 11:35:05 -0500 Subject: [PATCH] feat: manage contact addresses (monicahq/chandler#32) --- .editorconfig | 2 +- .eslintrc.js | 103 +-- .prettierignore | 6 + .prettierrc.json | 6 + .../Modules/PersonalizeModulesController.php | 5 +- .../PersonalizeModuleIndexViewHelper.php | 49 + app/Jobs/.SetupAccount.php.swp | Bin 49152 -> 0 bytes app/Jobs/SetupAccount.php | 313 +------ app/Models/.Module.php.swp | Bin 12288 -> 0 bytes app/Models/Account.php | 14 - app/Models/Address.php | 63 ++ app/Models/Attribute.php | 57 -- app/Models/AttributeDefaultValue.php | 31 - app/Models/Contact.php | 6 +- app/Models/Information.php | 66 -- app/Models/Module.php | 23 + .../{ContactAddress.php => ModuleRow.php} | 22 +- app/Models/ModuleRowField.php | 51 ++ app/Models/Place.php | 38 - app/Models/Template.php | 11 - .../Contact/AssignLabel/AssignLabel.php | 4 + .../Contact/AssignLabel/RemoveLabel.php | 4 + .../Contact/ManageContact/CreateContact.php | 2 + .../Contact/ManageContact/UpdateContact.php | 2 + .../ManageContact/UpdateContactTemplate.php | 2 + .../CreateContactAddress.php | 39 +- .../DestroyContactAddress.php | 24 +- .../UpdateContactAddress.php | 71 +- .../Contact/ManageNote/CreateNote.php | 4 + .../Contact/ManageNote/DestroyNote.php | 4 + .../Contact/ManageNote/UpdateNote.php | 4 + .../Contact/SetPronoun/SetPronoun.php | 2 + composer.json | 143 +-- composer.lock | 468 +++++----- .../{PlaceFactory.php => AddressFactory.php} | 10 +- database/factories/AttributeFactory.php | 31 - database/factories/ContactAddressFactory.php | 31 - database/factories/InformationFactory.php | 31 - ...tValueFactory.php => ModuleRowFactory.php} | 12 +- database/factories/ModuleRowFieldFactory.php | 33 + ...3_04_25_155842_create_attributes_table.php | 51 +- ..._20_213318_create_address_types_table.php} | 0 ...0_04_26_215133_create_addresses_table.php} | 22 +- jsconfig.json | 14 +- package.json | 118 +-- resources/css/app.css | 4 +- resources/js/Components/ApplicationLogo.vue | 4 +- resources/js/Components/Button.vue | 7 +- resources/js/Components/Checkbox.vue | 10 +- resources/js/Components/Dropdown.vue | 25 +- resources/js/Components/DropdownLink.vue | 9 +- resources/js/Components/Input.vue | 13 +- resources/js/Components/InputError.vue | 2 +- resources/js/Components/Label.vue | 2 +- resources/js/Components/NavLink.vue | 6 +- resources/js/Components/ResponsiveNavLink.vue | 6 +- resources/js/Components/ValidationErrors.vue | 12 +- resources/js/Pages/Auth/AcceptInvitation.vue | 55 +- resources/js/Pages/Auth/ConfirmPassword.vue | 19 +- resources/js/Pages/Auth/ForgotPassword.vue | 26 +- resources/js/Pages/Auth/Login.vue | 44 +- resources/js/Pages/Auth/Register.vue | 57 +- resources/js/Pages/Auth/ResetPassword.vue | 37 +- resources/js/Pages/Auth/VerifyEmail.vue | 19 +- .../js/Pages/Settings/CancelAccount/Index.vue | 74 +- resources/js/Pages/Settings/Index.vue | 35 +- .../Personalize/AddressTypes/Index.vue | 173 ++-- .../ContactInformationTypes/Index.vue | 233 +++-- .../Settings/Personalize/Genders/Index.vue | 168 ++-- .../js/Pages/Settings/Personalize/Index.vue | 93 +- .../Settings/Personalize/Labels/Index.vue | 161 ++-- .../Settings/Personalize/Modules/Index.vue | 398 +++++++++ .../Personalize/PetCategories/Index.vue | 178 ++-- .../Settings/Personalize/Pronouns/Index.vue | 173 ++-- .../Personalize/Relationships/Index.vue | 390 +++++--- .../Settings/Personalize/Templates/Index.vue | 199 +++-- .../Templates/Partials/Modules.vue | 82 +- .../Personalize/Templates/Partials/Pages.vue | 142 +-- .../Settings/Personalize/Templates/Show.vue | 100 ++- .../js/Pages/Settings/Preferences/Index.vue | 24 +- .../Preferences/Partials/NameOrder.vue | 175 ++-- resources/js/Pages/Settings/Users/Create.vue | 78 +- resources/js/Pages/Settings/Users/Index.vue | 69 +- resources/js/Pages/Vault/Contact/Blank.vue | 85 +- resources/js/Pages/Vault/Contact/Create.vue | 179 +++- resources/js/Pages/Vault/Contact/Index.vue | 37 +- .../js/Pages/Vault/Contact/Names/Edit.vue | 146 ++- .../js/Pages/Vault/Contact/Notes/Index.vue | 89 +- resources/js/Pages/Vault/Contact/Show.vue | 76 +- resources/js/Pages/Vault/Create.vue | 70 +- resources/js/Pages/Vault/Dashboard/Index.vue | 129 ++- .../Dashboard/Partials/Feed/Activity.vue | 67 +- .../Partials/Feed/CreateLifeEvent.vue | 162 ++-- .../Vault/Dashboard/Partials/Feed/Entry.vue | 117 ++- .../Dashboard/Partials/Feed/FeedItem.vue | 17 +- .../Vault/Dashboard/Partials/Feed/Goal.vue | 42 +- .../Vault/Dashboard/Partials/Feed/Mood.vue | 23 +- resources/js/Pages/Vault/Index.vue | 73 +- resources/js/Pages/Vault/Search/Index.vue | 81 +- .../Pages/Vault/Search/Partials/Contact.vue | 27 +- .../js/Pages/Vault/Search/Partials/Note.vue | 84 +- resources/js/Pages/Vault/Settings/Index.vue | 4 +- .../Settings/Partials/DefaultTemplate.vue | 59 +- .../Pages/Vault/Settings/Partials/Delete.vue | 47 +- .../Pages/Vault/Settings/Partials/Users.vue | 207 +++-- resources/js/Pages/Welcome.vue | 303 ++++--- resources/js/Shared/Form/Dropdown.vue | 37 +- resources/js/Shared/Form/Errors.vue | 18 +- resources/js/Shared/Form/PrettyButton.vue | 66 +- resources/js/Shared/Form/PrettyLink.vue | 49 +- resources/js/Shared/Form/PrettySpan.vue | 29 +- resources/js/Shared/Form/TextArea.vue | 47 +- resources/js/Shared/Form/TextInput.vue | 20 +- resources/js/Shared/Guest.vue | 9 +- resources/js/Shared/HoverMenu.vue | 15 +- resources/js/Shared/Layout.vue | 119 ++- resources/js/Shared/Loading.vue | 7 +- resources/js/Shared/Modules/Addresses.vue | 353 ++++++++ resources/js/Shared/Modules/Avatar.vue | 3 +- resources/js/Shared/Modules/ContactName.vue | 21 +- resources/js/Shared/Modules/GenderPronoun.vue | 52 +- resources/js/Shared/Modules/Notes.vue | 203 +++-- resources/js/Shared/SmallContact.vue | 23 +- resources/js/Shared/Toaster.vue | 16 +- resources/js/app.js | 20 +- resources/lang/en/app.php | 2 + resources/lang/en/log.php | 4 +- routes/web.php | 1 + .../PersonalizeModuleIndexViewHelperTest.php | 55 ++ tests/Unit/Helpers/AuditLogHelperTest.php | 4 +- tests/Unit/Jobs/.SetupAccountTest.php.swp | Bin 28672 -> 0 bytes tests/Unit/Jobs/SetupAccountTest.php | 176 ---- tests/Unit/Models/AccountTest.php | 12 - tests/Unit/Models/AddressTest.php | 28 + .../Unit/Models/AttributeDefaultValueTest.php | 20 - tests/Unit/Models/AttributeTest.php | 32 - tests/Unit/Models/ContactAddressTest.php | 20 - tests/Unit/Models/ContactTest.php | 8 +- tests/Unit/Models/InformationTest.php | 51 -- tests/Unit/Models/ModuleRowFieldTest.php | 20 + tests/Unit/Models/ModuleRowTest.php | 32 + tests/Unit/Models/ModuleTest.php | 12 + tests/Unit/Models/TemplateTest.php | 19 - .../AddDefaultValueToAttributeTest.php | 94 -- .../AssociateInformationToTemplateTest.php | 111 --- .../Account/Template/CreateAttributeTest.php | 93 -- .../Template/CreateInformationTest.php | 72 -- .../Account/Template/DestroyAttributeTest.php | 89 -- .../Template/DestroyInformationTest.php | 79 -- .../RemoveInformationFromTemplateTest.php | 110 --- .../CreateContactAddressTest.php | 15 +- .../DestroyContactAddressTest.php | 64 +- .../UpdateContactAddressTest.php | 39 +- webpack.mix.js | 3 +- yarn.lock | 836 ++++++++++-------- 155 files changed, 5934 insertions(+), 4692 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 app/Http/Controllers/Settings/Personalize/Modules/ViewHelpers/PersonalizeModuleIndexViewHelper.php delete mode 100644 app/Jobs/.SetupAccount.php.swp delete mode 100644 app/Models/.Module.php.swp create mode 100644 app/Models/Address.php delete mode 100644 app/Models/Attribute.php delete mode 100644 app/Models/AttributeDefaultValue.php delete mode 100644 app/Models/Information.php rename app/Models/{ContactAddress.php => ModuleRow.php} (50%) create mode 100644 app/Models/ModuleRowField.php delete mode 100644 app/Models/Place.php rename database/factories/{PlaceFactory.php => AddressFactory.php} (73%) delete mode 100644 database/factories/AttributeFactory.php delete mode 100644 database/factories/ContactAddressFactory.php delete mode 100644 database/factories/InformationFactory.php rename database/factories/{AttributeDefaultValueFactory.php => ModuleRowFactory.php} (58%) create mode 100644 database/factories/ModuleRowFieldFactory.php rename database/migrations/{2021_10_20_213318_create_address_types_table.php => 2020_03_20_213318_create_address_types_table.php} (100%) rename database/migrations/{2021_10_20_215133_create_places_table.php => 2020_04_26_215133_create_addresses_table.php} (64%) create mode 100644 resources/js/Shared/Modules/Addresses.vue create mode 100644 tests/Unit/Controllers/Settings/Personalize/Modules/ViewHelpers/PersonalizeModuleIndexViewHelperTest.php delete mode 100644 tests/Unit/Jobs/.SetupAccountTest.php.swp create mode 100644 tests/Unit/Models/AddressTest.php delete mode 100644 tests/Unit/Models/AttributeDefaultValueTest.php delete mode 100644 tests/Unit/Models/AttributeTest.php delete mode 100644 tests/Unit/Models/ContactAddressTest.php delete mode 100644 tests/Unit/Models/InformationTest.php create mode 100644 tests/Unit/Models/ModuleRowFieldTest.php create mode 100644 tests/Unit/Models/ModuleRowTest.php delete mode 100644 tests/Unit/Services/Account/Template/AddDefaultValueToAttributeTest.php delete mode 100644 tests/Unit/Services/Account/Template/AssociateInformationToTemplateTest.php delete mode 100644 tests/Unit/Services/Account/Template/CreateAttributeTest.php delete mode 100644 tests/Unit/Services/Account/Template/CreateInformationTest.php delete mode 100644 tests/Unit/Services/Account/Template/DestroyAttributeTest.php delete mode 100644 tests/Unit/Services/Account/Template/DestroyInformationTest.php delete mode 100644 tests/Unit/Services/Account/Template/RemoveInformationFromTemplateTest.php diff --git a/.editorconfig b/.editorconfig index 876136d0a0b..7751beb91a8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,7 +14,7 @@ indent_size = 4 [*.blade.php] indent_size = 2 -[*.{js,vue,scss}] +[*.{js,vue,scss,json}] indent_size = 2 [*.md] diff --git a/.eslintrc.js b/.eslintrc.js index a63d290dfbf..7b008e427bc 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,96 +1,49 @@ module.exports = { - 'env': { - 'browser': true, - 'es6': true + env: { + browser: true, + es6: true, }, - 'extends': [ - 'plugin:vue/recommended' - ], - 'parserOptions': { - 'ecmaVersion': 12, - 'sourceType': 'module' + extends: ['plugin:vue/recommended'], + parserOptions: { + ecmaVersion: 12, + sourceType: 'module', }, - 'plugins': [ - 'vue', - ], - 'rules': { - 'array-bracket-spacing': [ - 'error', - 'never' - ], - 'indent': [ - 'error', - 2 - ], - 'linebreak-style': [ - 'error', - 'unix' - ], + plugins: ['vue'], + rules: { + 'array-bracket-spacing': ['error', 'never'], + indent: ['error', 2], + 'linebreak-style': ['error', 'unix'], 'no-trailing-spaces': [ 'error', { - 'ignoreComments': true, - 'skipBlankLines': true - } - ], - 'quotes': [ - 'error', - 'single' - ], - 'semi': [ - 'error', - 'always' + ignoreComments: true, + skipBlankLines: true, + }, ], + quotes: ['error', 'single'], + semi: ['error', 'always'], 'semi-spacing': [ 'error', { - 'after': true, - 'before': false - } - ], - 'semi-style': [ - 'error', - 'last' + after: true, + before: false, + }, ], + 'semi-style': ['error', 'last'], // strongly recommended - 'vue/component-name-in-template-casing': [ - 'error', - 'kebab-case' - ], - 'vue/component-tags-order': [ - 'warn', - { - 'order': [['style', 'template'], 'script'] - } - ], + 'vue/component-name-in-template-casing': ['error', 'kebab-case'], 'vue/html-end-tags': 'error', 'vue/html-self-closing': [ 'error', { - 'html': { - 'normal': 'always', - 'void': 'never' - } - } + html: { + normal: 'always', + void: 'never', + }, + }, ], 'vue/no-v-model-argument': 0, 'vue/no-v-html': 0, - 'vue/max-attributes-per-line': [ - // https://vuejs.org/v2/style-guide/#Multi-attribute-elements-strongly-recommended - 'error', - { - 'singleline': 5, - 'multiline': { - 'max': 5, - 'allowFirstLine': true - } - } - ], - 'vue/singleline-html-element-content-newline': ['error', { - 'ignoreWhenNoAttributes': true, - 'ignoreWhenEmpty': true, - 'ignores': ['pre', 'textarea', 'inertia-link', 'a', 'p', 'li'] - }] - } + }, }; diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000000..3494783f098 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +public/js +public/css +storage +vendor +node_modules +composer.lock diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000000..f327f436464 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "trailingComma": "all", + "singleQuote": true +} diff --git a/app/Http/Controllers/Settings/Personalize/Modules/PersonalizeModulesController.php b/app/Http/Controllers/Settings/Personalize/Modules/PersonalizeModulesController.php index ed7cc28e7b1..2c76ef1decd 100644 --- a/app/Http/Controllers/Settings/Personalize/Modules/PersonalizeModulesController.php +++ b/app/Http/Controllers/Settings/Personalize/Modules/PersonalizeModulesController.php @@ -12,6 +12,7 @@ use App\Services\Account\ManageTemplate\DestroyTemplate; use Illuminate\Database\Eloquent\ModelNotFoundException; use App\Http\Controllers\Vault\ViewHelpers\VaultIndexViewHelper; +use App\Http\Controllers\Settings\Personalize\Modules\ViewHelpers\PersonalizeModuleIndexViewHelper; use App\Http\Controllers\Settings\Personalize\Templates\ViewHelpers\PersonalizeTemplateShowViewHelper; use App\Http\Controllers\Settings\Personalize\Templates\ViewHelpers\PersonalizeTemplateIndexViewHelper; @@ -19,9 +20,9 @@ class PersonalizeModulesController extends Controller { public function index() { - return Inertia::render('Settings/Personalize/Templates/Index', [ + return Inertia::render('Settings/Personalize/Modules/Index', [ 'layoutData' => VaultIndexViewHelper::layoutData(), - 'data' => PersonalizeTemplateIndexViewHelper::data(Auth::user()->account), + 'data' => PersonalizeModuleIndexViewHelper::data(Auth::user()->account), ]); } diff --git a/app/Http/Controllers/Settings/Personalize/Modules/ViewHelpers/PersonalizeModuleIndexViewHelper.php b/app/Http/Controllers/Settings/Personalize/Modules/ViewHelpers/PersonalizeModuleIndexViewHelper.php new file mode 100644 index 00000000000..8b8466ae4be --- /dev/null +++ b/app/Http/Controllers/Settings/Personalize/Modules/ViewHelpers/PersonalizeModuleIndexViewHelper.php @@ -0,0 +1,49 @@ +modules() + ->orderBy('name', 'asc') + ->get(); + + $collection = collect(); + foreach ($modules as $module) { + $collection->push(self::dtoModule($module)); + } + + return [ + 'modules' => $collection, + 'url' => [ + 'settings' => route('settings.index'), + 'personalize' => route('settings.personalize.index'), + 'module_store' => route('settings.personalize.module.store'), + ], + ]; + } + + public static function dtoModule(Module $module): array + { + return [ + 'id' => $module->id, + 'name' => $module->name, + 'type' => $module->type, + 'reserved_to_contact_information' => $module->reserved_to_contact_information, + 'can_be_deleted' => $module->can_be_deleted, + 'url' => [ + 'update' => route('settings.personalize.module.update', [ + 'module' => $module->id, + ]), + 'destroy' => route('settings.personalize.module.destroy', [ + 'module' => $module->id, + ]), + ], + ]; + } +} diff --git a/app/Jobs/.SetupAccount.php.swp b/app/Jobs/.SetupAccount.php.swp deleted file mode 100644 index d7e525eb948ccd09ab29e0e65307d5bfd179f2ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 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 diff --git a/app/Jobs/SetupAccount.php b/app/Jobs/SetupAccount.php index 8af78ee7b67..ac01c2b7381 100644 --- a/app/Jobs/SetupAccount.php +++ b/app/Jobs/SetupAccount.php @@ -5,7 +5,6 @@ use App\Models\User; use App\Models\Module; use App\Models\Template; -use App\Models\Attribute; use App\Models\Information; use App\Models\TemplatePage; use Illuminate\Bus\Queueable; @@ -18,14 +17,10 @@ use App\Services\Account\ManageTemplate\CreateModule; use App\Services\Account\ManagePronouns\CreatePronoun; use App\Services\Account\ManageTemplate\CreateTemplate; -use App\Services\Account\ManageTemplate\CreateAttribute; -use App\Services\Account\ManageTemplate\CreateInformation; use App\Services\Account\ManageTemplate\CreateTemplatePage; use App\Services\Account\ManageAddressTypes\CreateAddressType; use App\Services\Account\ManagePetCategories\CreatePetCategory; -use App\Services\Account\ManageTemplate\AddDefaultValueToAttribute; use App\Services\Account\ManageTemplate\AssociateModuleToTemplatePage; -use App\Services\Account\ManageTemplate\AssociateInformationToTemplate; use App\Services\Account\ManageRelationshipTypes\CreateRelationshipGroupType; use App\Services\Account\ManageContactInformationTypes\CreateContactInformationType; @@ -183,6 +178,7 @@ private function addTemplatePageSocial(): void 'name' => trans('app.module_notes'), 'type' => Module::TYPE_NOTES, 'can_be_deleted' => false, + 'pagination' => 3, ]); (new AssociateModuleToTemplatePage)->execute([ 'account_id' => $this->user->account_id, @@ -195,14 +191,6 @@ private function addTemplatePageSocial(): void private function addFirstInformation(): void { - $this->addDescriptionField(); - $this->addGenderInformation(); - $this->addBirthdateInformation(); - $this->addAddressField(); - $this->addPetField(); - $this->addContactInformationField(); - $this->addFoodPreferences(); - $this->addHowWeMet(); $this->addGenders(); $this->addPronouns(); $this->addGroupTypes(); @@ -212,305 +200,6 @@ private function addFirstInformation(): void $this->addPetCategories(); } - /** - * Add the description information. - */ - private function addDescriptionField(): void - { - $information = (new CreateInformation)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'name' => trans('app.default_description_information'), - 'allows_multiple_entries' => false, - ]); - - $this->associateToTemplate($information); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_description_information'), - 'type' => 'text', - ]); - } - - /** - * Add the gender information. - */ - private function addGenderInformation(): void - { - $information = (new CreateInformation)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'name' => trans('app.default_gender_information_name'), - 'allows_multiple_entries' => false, - ]); - - $this->associateToTemplate($information); - - $attribute = (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_gender_information_name'), - 'type' => 'dropdown', - 'has_default_value' => true, - ]); - - $this->addDefaultValue($attribute, trans('app.default_gender_man')); - $this->addDefaultValue($attribute, trans('app.default_gender_woman')); - $this->addDefaultValue($attribute, trans('app.default_gender_other')); - } - - /** - * Add the birthdate information. - */ - private function addBirthdateInformation(): void - { - $information = (new CreateInformation)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'name' => trans('app.default_birthdate_information'), - 'allows_multiple_entries' => false, - ]); - - $this->associateToTemplate($information); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_birthdate_information'), - 'type' => 'date', - 'has_default_value' => false, - ]); - } - - /** - * Add the address field information. - */ - private function addAddressField(): void - { - $information = (new CreateInformation)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'name' => trans('app.default_address_information'), - 'allows_multiple_entries' => true, - ]); - - $this->associateToTemplate($information); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_address_label'), - 'type' => 'text', - ]); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_address_city'), - 'type' => 'text', - ]); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_address_province'), - 'type' => 'text', - ]); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_address_postal_code'), - 'type' => 'text', - ]); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_address_country'), - 'type' => 'text', - ]); - } - - /** - * Add the pet field information. - */ - private function addPetField(): void - { - $information = (new CreateInformation)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'name' => trans('app.default_pet_information'), - 'allows_multiple_entries' => true, - ]); - - $this->associateToTemplate($information); - - $attribute = (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_pet_type'), - 'type' => 'dropdown', - 'has_default_value' => true, - ]); - - $this->addDefaultValue($attribute, trans('app.default_pet_type_dog')); - $this->addDefaultValue($attribute, trans('app.default_pet_type_cat')); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_pet_name'), - 'type' => 'text', - ]); - } - - /** - * Add the contact information panel. - */ - private function addContactInformationField(): void - { - $information = (new CreateInformation)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'name' => trans('app.default_contact_information_information'), - 'allows_multiple_entries' => true, - ]); - - $this->associateToTemplate($information); - - $attribute = (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_contact_information_type_attribute'), - 'type' => 'dropdown', - 'has_default_value' => true, - ]); - - $this->addDefaultValue($attribute, trans('app.default_contact_information_facebook')); - $this->addDefaultValue($attribute, trans('app.default_contact_information_email')); - $this->addDefaultValue($attribute, trans('app.default_contact_information_twitter')); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_contact_information_value'), - 'type' => 'text', - ]); - } - - /** - * Add the food preferences panel. - */ - private function addFoodPreferences(): void - { - $information = (new CreateInformation)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'name' => trans('app.default_food_preferences_information'), - 'allows_multiple_entries' => false, - ]); - - $this->associateToTemplate($information); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_food_preferences_information'), - 'type' => 'textarea', - ]); - } - - /** - * Add how you met panel. - */ - private function addHowWeMet(): void - { - $information = (new CreateInformation)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'name' => trans('app.default_how_we_met_information'), - 'allows_multiple_entries' => false, - ]); - - $this->associateToTemplate($information); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_how_we_met_description'), - 'type' => 'textarea', - ]); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_how_we_met_contact'), - 'type' => 'contact', - ]); - - (new CreateAttribute)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'information_id' => $information->id, - 'name' => trans('app.default_how_we_met_date'), - 'type' => 'date', - ]); - } - - /** - * Add a default value to an attribute. - * - * @param Attribute $attribute - * @param string $name - */ - private function addDefaultValue(Attribute $attribute, string $name): void - { - $request = [ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'attribute_id' => $attribute->id, - 'value' => $name, - ]; - - (new AddDefaultValueToAttribute)->execute($request); - } - - /** - * Associate the information to the template. - * - * @param Information $information - */ - private function associateToTemplate(Information $information): void - { - (new AssociateInformationToTemplate)->execute([ - 'account_id' => $this->user->account_id, - 'author_id' => $this->user->id, - 'template_id' => $this->template->id, - 'information_id' => $information->id, - 'position' => $this->position, - ]); - - $this->position++; - } - /** * Add the default genders in the account. */ diff --git a/app/Models/.Module.php.swp b/app/Models/.Module.php.swp deleted file mode 100644 index 746ebb2cad728e21a3ec51cf6b8eda97deb83649..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2&5P4O7>7qask4!1+hz*rqec(CNVQntEd;x zUIaxH1uy;sp1gV1gWyH4dQ!Xyf+&LiCP}5c>-uqAcmq$T$-Fc3zRx6w($u$}K3?X# z^V=DYRgAs={z*K)y=(EnGsYs>a#g+=$!^2+&U-Y@30JASC;WLsl8$SA6BeAHAq!EU zR6&Gcp^P(6nI`sRK5U17o{4(N02%l%1F>$7?H*)1wr|^N#%SYQKK3w{hR_658FufQX4AKU}C zz!^{lJHZ%O3YLI}sOv6B>RW*OLn)I1GC&5%02v?yWPl7TXaiRn$B}-TZ;{mTzg~-c zzFD_jHMYMly})lND<})UJ8a2L=m{;SL`&}3<9I@;Ej-srUZu5l)@g_6&5exhzv$|= z<#wdfq7$m&k#T17xRQK^aouwr-i&=myMfPpgU!qcO=9?HA#3?TlRdIJ)Sph)*^4zVYbtK?P#if1j*Fxl+$5BQq#5Uvk%iGwmVBA1>Ng68i;fe-zRoKDV?81b{fA2C zsUn-;x9Rs}%_?9z70hwu9O2t_Y2#IAiOO?Z(p5~4?uN4e+!vi0=h?!x+Zz=|ftHT( zx4G$ho~V10@8f6F8T+>Af{3_?BGJuyvW8pO6QOnF)?p{m#4cl%D^<#X3~ zOK&`G_CU=lI98G$6Y2<-38L;eyTX#^i>EKDb9qUlXk|{N$C!ye?s;*?^>J(0CQwIR zC|N6c!TDJFx|Yu4N>%Hh^smFJ63;gtNLBmwsEz-9u_UQ+#u7cDa3n8=VJ*3;aCz?m H^P2rn0wbb7 diff --git a/app/Models/Account.php b/app/Models/Account.php index b71f5f001be..5c7504f47f3 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -40,20 +40,6 @@ public function modules() return $this->hasMany(Module::class); } - /** - * Get the information associated with the account. - * - * Note to future reader of this code: i KNOW that information doesn't take - * an "S" at the end, but I needed to indicate that there were many pieces - * of information in a simple word. Deal with it. - * - * @return HasMany - */ - public function informations() - { - return $this->hasMany(Information::class); - } - /** * Get the information associated with the account. * diff --git a/app/Models/Address.php b/app/Models/Address.php new file mode 100644 index 00000000000..8d0bfa757bb --- /dev/null +++ b/app/Models/Address.php @@ -0,0 +1,63 @@ +belongsTo(Contact::class); + } + + /** + * Get the address type object associated with the address. + * + * @return BelongsTo + */ + public function addressType() + { + return $this->belongsTo(AddressType::class); + } +} diff --git a/app/Models/Attribute.php b/app/Models/Attribute.php deleted file mode 100644 index ab24e51adea..00000000000 --- a/app/Models/Attribute.php +++ /dev/null @@ -1,57 +0,0 @@ - 'boolean', - 'unit_placement_after' => 'boolean', - ]; - - /** - * Get the information associated with the attribute. - * - * @return BelongsTo - */ - public function information() - { - return $this->belongsTo(Information::class); - } - - /** - * Get the attribute default values associated with the attribute. - * - * @return HasMany - */ - public function defaultValues() - { - return $this->hasMany(AttributeDefaultValue::class); - } -} diff --git a/app/Models/AttributeDefaultValue.php b/app/Models/AttributeDefaultValue.php deleted file mode 100644 index e925c5a757d..00000000000 --- a/app/Models/AttributeDefaultValue.php +++ /dev/null @@ -1,31 +0,0 @@ - - */ - protected $fillable = [ - 'attribute_id', 'value', - ]; - - /** - * Get the attribute associated with the attribute default value. - * - * @return BelongsTo - */ - public function attribute() - { - return $this->belongsTo(Attribute::class); - } -} diff --git a/app/Models/Contact.php b/app/Models/Contact.php index cf5068f8cdf..3b0eae8d11a 100644 --- a/app/Models/Contact.php +++ b/app/Models/Contact.php @@ -162,13 +162,13 @@ public function contactInformation() } /** - * Get the contact address records associated with the contact. + * Get the address records associated with the contact. * * @return HasMany */ - public function contactAddresses() + public function addresses() { - return $this->hasMany(ContactAddress::class); + return $this->hasMany(Address::class); } /** diff --git a/app/Models/Information.php b/app/Models/Information.php deleted file mode 100644 index 4d33ce4719e..00000000000 --- a/app/Models/Information.php +++ /dev/null @@ -1,66 +0,0 @@ - 'boolean', - ]; - - /** - * Get the account associated with the information. - * - * @return BelongsTo - */ - public function account() - { - return $this->belongsTo(Account::class); - } - - /** - * Get the attribute values associated with the information. - * - * @return HasMany - */ - public function attributes() - { - return $this->hasMany(Attribute::class); - } - - /** - * Get the templates associated with the information. - * - * @return BelongsToMany - */ - public function templates() - { - return $this->belongsToMany(Template::class); - } -} diff --git a/app/Models/Module.php b/app/Models/Module.php index 23357d0e984..12af2d8b19c 100644 --- a/app/Models/Module.php +++ b/app/Models/Module.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Factories\HasFactory; @@ -29,6 +30,18 @@ class Module extends Model 'name', 'type', 'can_be_deleted', + 'reserved_to_contact_information', + 'pagination', + ]; + + /** + * The attributes that should be cast to native types. + * + * @var array + */ + protected $casts = [ + 'can_be_deleted' => 'boolean', + 'reserved_to_contact_information' => 'boolean', ]; /** @@ -41,6 +54,16 @@ public function account() return $this->belongsTo(Account::class); } + /** + * Get the module rows associated with the module. + * + * @return HasMany + */ + public function rows() + { + return $this->hasMany(ModuleRow::class); + } + /** * Get the template pages associated with the module. * diff --git a/app/Models/ContactAddress.php b/app/Models/ModuleRow.php similarity index 50% rename from app/Models/ContactAddress.php rename to app/Models/ModuleRow.php index 759e5ee1fee..44ce71672d9 100644 --- a/app/Models/ContactAddress.php +++ b/app/Models/ModuleRow.php @@ -6,11 +6,11 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Factories\HasFactory; -class ContactAddress extends Model +class ModuleRow extends Model { use HasFactory; - protected $table = 'contact_addresses'; + protected $table = 'module_rows'; /** * The attributes that are mass assignable. @@ -18,25 +18,27 @@ class ContactAddress extends Model * @var array */ protected $fillable = [ - 'contact_id', - 'address_type_id', + 'module_id', + 'position', ]; /** - * Get the contact associated with the address. + * Get the module associated with the module. * * @return BelongsTo */ - public function contact() + public function module() { - return $this->belongsTo(Contact::class); + return $this->belongsTo(Module::class); } /** - * Get the address's place. + * Get the module row fields associated with the module. + * + * @return HasMany */ - public function place() + public function fields() { - return $this->morphOne(Place::class, 'placeable'); + return $this->hasMany(ModuleRowField::class); } } diff --git a/app/Models/ModuleRowField.php b/app/Models/ModuleRowField.php new file mode 100644 index 00000000000..188c907557a --- /dev/null +++ b/app/Models/ModuleRowField.php @@ -0,0 +1,51 @@ + 'boolean', + ]; + + /** + * Get the module row associated with the module. + * + * @return BelongsTo + */ + public function row() + { + return $this->belongsTo(ModuleRow::class, 'module_row_id'); + } +} diff --git a/app/Models/Place.php b/app/Models/Place.php deleted file mode 100644 index f3db2129826..00000000000 --- a/app/Models/Place.php +++ /dev/null @@ -1,38 +0,0 @@ -morphTo(); - } -} diff --git a/app/Models/Template.php b/app/Models/Template.php index 6678b45b62f..cad7a88eac4 100644 --- a/app/Models/Template.php +++ b/app/Models/Template.php @@ -6,7 +6,6 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Template extends Model { @@ -51,14 +50,4 @@ public function contacts() { return $this->hasMany(Contact::class); } - - /** - * Get the information values associated with the template. - * - * @return BelongsToMany - */ - public function informations() - { - return $this->belongsToMany(Information::class); - } } diff --git a/app/Services/Contact/AssignLabel/AssignLabel.php b/app/Services/Contact/AssignLabel/AssignLabel.php index 1aac9b5eae1..90fd99571ad 100644 --- a/app/Services/Contact/AssignLabel/AssignLabel.php +++ b/app/Services/Contact/AssignLabel/AssignLabel.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\AssignLabel; +use Carbon\Carbon; use App\Models\Label; use App\Jobs\CreateAuditLog; use App\Services\BaseService; @@ -57,6 +58,9 @@ public function execute(array $data): void $this->contact->labels()->syncWithoutDetaching($this->label); + $this->contact->last_updated_at = Carbon::now(); + $this->contact->save(); + $this->log(); } diff --git a/app/Services/Contact/AssignLabel/RemoveLabel.php b/app/Services/Contact/AssignLabel/RemoveLabel.php index de8f5a9ab26..749024b1235 100644 --- a/app/Services/Contact/AssignLabel/RemoveLabel.php +++ b/app/Services/Contact/AssignLabel/RemoveLabel.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\AssignLabel; +use Carbon\Carbon; use App\Models\Label; use App\Jobs\CreateAuditLog; use App\Services\BaseService; @@ -57,6 +58,9 @@ public function execute(array $data): void $this->contact->labels()->detach($this->label); + $this->contact->last_updated_at = Carbon::now(); + $this->contact->save(); + $this->log(); } diff --git a/app/Services/Contact/ManageContact/CreateContact.php b/app/Services/Contact/ManageContact/CreateContact.php index 4d6c0c2c9a4..9d486e6ef1d 100644 --- a/app/Services/Contact/ManageContact/CreateContact.php +++ b/app/Services/Contact/ManageContact/CreateContact.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\ManageContact; +use Carbon\Carbon; use App\Models\Gender; use App\Models\Contact; use App\Models\Pronoun; @@ -107,6 +108,7 @@ private function create(): void 'gender_id' => $this->valueOrNull($this->data, 'gender_id'), 'pronoun_id' => $this->valueOrNull($this->data, 'pronoun_id'), 'template_id' => $templateId, + 'last_updated_at' => Carbon::now(), ]); } diff --git a/app/Services/Contact/ManageContact/UpdateContact.php b/app/Services/Contact/ManageContact/UpdateContact.php index 1de845171fb..9d09d0c7a5a 100644 --- a/app/Services/Contact/ManageContact/UpdateContact.php +++ b/app/Services/Contact/ManageContact/UpdateContact.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\ManageContact; +use Carbon\Carbon; use App\Models\Gender; use App\Models\Contact; use App\Models\Pronoun; @@ -79,6 +80,7 @@ public function execute(array $data): Contact } else { $this->contact->pronoun_id = null; } + $this->contact->last_updated_at = Carbon::now(); $this->contact->save(); $this->log(); diff --git a/app/Services/Contact/ManageContact/UpdateContactTemplate.php b/app/Services/Contact/ManageContact/UpdateContactTemplate.php index f9d4bbced6e..ded0dc8bfc8 100644 --- a/app/Services/Contact/ManageContact/UpdateContactTemplate.php +++ b/app/Services/Contact/ManageContact/UpdateContactTemplate.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\ManageContact; +use Carbon\Carbon; use App\Models\Contact; use App\Models\Template; use App\Jobs\CreateAuditLog; @@ -73,6 +74,7 @@ private function validate(): void private function update(): void { $this->contact->template_id = $this->data['template_id']; + $this->contact->last_updated_at = Carbon::now(); $this->contact->save(); } diff --git a/app/Services/Contact/ManageContactAddress/CreateContactAddress.php b/app/Services/Contact/ManageContactAddress/CreateContactAddress.php index 5ef98f7aaef..989dad5e2b5 100644 --- a/app/Services/Contact/ManageContactAddress/CreateContactAddress.php +++ b/app/Services/Contact/ManageContactAddress/CreateContactAddress.php @@ -2,17 +2,16 @@ namespace App\Services\Contact\ManageContactAddress; -use App\Models\Place; +use Carbon\Carbon; +use App\Models\Address; use App\Models\AddressType; use App\Jobs\CreateAuditLog; use App\Services\BaseService; use App\Jobs\CreateContactLog; -use App\Models\ContactAddress; use App\Interfaces\ServiceInterface; class CreateContactAddress extends BaseService implements ServiceInterface { - private ContactAddress $contactAddress; private AddressType $addressType; /** @@ -27,7 +26,7 @@ public function rules(): array 'vault_id' => 'required|integer|exists:vaults,id', 'author_id' => 'required|integer|exists:users,id', 'contact_id' => 'required|integer|exists:contacts,id', - 'address_type_id' => 'required|integer|exists:address_types,id', + 'address_type_id' => 'nullable|integer|exists:address_types,id', 'street' => 'nullable|string|max:255', 'city' => 'nullable|string|max:255', 'province' => 'nullable|string|max:255', @@ -35,6 +34,8 @@ public function rules(): array 'country' => 'nullable|string|max:3', 'latitude' => 'nullable|numeric', 'longitude' => 'nullable|numeric', + 'lived_from_at' => 'nullable|date_format:Y-m-d', + 'lived_until_at' => 'nullable|date_format:Y-m-d', ]; } @@ -57,16 +58,20 @@ public function permissions(): array * Create a contact address. * * @param array $data - * @return ContactAddress + * @return Address */ - public function execute(array $data): ContactAddress + public function execute(array $data): Address { $this->validateRules($data); - $this->addressType = AddressType::where('account_id', $data['account_id']) - ->findOrFail($data['address_type_id']); + if ($this->valueOrNull($data, 'address_type_id')) { + $this->addressType = AddressType::where('account_id', $data['account_id']) + ->findOrFail($data['address_type_id']); + } - $place = Place::create([ + $address = Address::create([ + 'contact_id' => $data['contact_id'], + 'address_type_id' => $this->valueOrNull($data, 'address_type_id'), 'street' => $this->valueOrNull($data, 'street'), 'city' => $this->valueOrNull($data, 'city'), 'province' => $this->valueOrNull($data, 'province'), @@ -74,18 +79,16 @@ public function execute(array $data): ContactAddress 'country' => $this->valueOrNull($data, 'country'), 'latitude' => $this->valueOrNull($data, 'latitude'), 'longitude' => $this->valueOrNull($data, 'longitude'), + 'lived_from_at' => $this->valueOrNull($data, 'lived_from_at'), + 'lived_until_at' => $this->valueOrNull($data, 'lived_until_at'), ]); - $this->contactAddress = ContactAddress::create([ - 'contact_id' => $this->contact->id, - 'address_type_id' => $this->addressType->id, - ]); - - $this->contactAddress->place()->save($place); + $this->contact->last_updated_at = Carbon::now(); + $this->contact->save(); $this->log(); - return $this->contactAddress; + return $address; } private function log(): void @@ -98,7 +101,7 @@ private function log(): void 'objects' => json_encode([ 'contact_id' => $this->contact->id, 'contact_name' => $this->contact->name, - 'address_type_name' => $this->addressType->name, + 'address_type_name' => isset($this->addressType) ? $this->addressType->name : null, ]), ]); @@ -108,7 +111,7 @@ private function log(): void 'author_name' => $this->author->name, 'action_name' => 'contact_address_created', 'objects' => json_encode([ - 'address_type_name' => $this->addressType->name, + 'address_type_name' => isset($this->addressType) ? $this->addressType->name : null, ]), ]); } diff --git a/app/Services/Contact/ManageContactAddress/DestroyContactAddress.php b/app/Services/Contact/ManageContactAddress/DestroyContactAddress.php index 90f501ddab3..b4289ecc7f8 100644 --- a/app/Services/Contact/ManageContactAddress/DestroyContactAddress.php +++ b/app/Services/Contact/ManageContactAddress/DestroyContactAddress.php @@ -2,16 +2,17 @@ namespace App\Services\Contact\ManageContactAddress; +use Carbon\Carbon; +use App\Models\Address; use App\Models\AddressType; use App\Jobs\CreateAuditLog; use App\Services\BaseService; use App\Jobs\CreateContactLog; -use App\Models\ContactAddress; use App\Interfaces\ServiceInterface; class DestroyContactAddress extends BaseService implements ServiceInterface { - private ContactAddress $contactAddress; + private Address $address; private AddressType $addressType; /** @@ -26,8 +27,7 @@ public function rules(): array 'vault_id' => 'required|integer|exists:vaults,id', 'author_id' => 'required|integer|exists:users,id', 'contact_id' => 'required|integer|exists:contacts,id', - 'address_type_id' => 'required|integer|exists:address_types,id', - 'contact_address_id' => 'required|integer|exists:contact_addresses,id', + 'address_id' => 'required|integer|exists:addresses,id', ]; } @@ -55,17 +55,13 @@ public function execute(array $data): void { $this->validateRules($data); - $this->addressType = AddressType::where('account_id', $data['account_id']) - ->findOrFail($data['address_type_id']); + $this->address = Address::where('contact_id', $this->contact->id) + ->findOrFail($data['address_id']); - $this->contactAddress = ContactAddress::where('contact_id', $this->contact->id) - ->where('address_type_id', $data['address_type_id']) - ->findOrFail($data['contact_address_id']); + $this->address->delete(); - $place = $this->contactAddress->place; - $place->delete(); - - $this->contactAddress->delete(); + $this->contact->last_updated_at = Carbon::now(); + $this->contact->save(); $this->log(); } @@ -80,7 +76,6 @@ private function log(): void 'objects' => json_encode([ 'contact_id' => $this->contact->id, 'contact_name' => $this->contact->name, - 'address_type_name' => $this->addressType->name, ]), ]); @@ -90,7 +85,6 @@ private function log(): void 'author_name' => $this->author->name, 'action_name' => 'contact_address_destroyed', 'objects' => json_encode([ - 'address_type_name' => $this->addressType->name, ]), ]); } diff --git a/app/Services/Contact/ManageContactAddress/UpdateContactAddress.php b/app/Services/Contact/ManageContactAddress/UpdateContactAddress.php index fad74223f89..d8da9133558 100644 --- a/app/Services/Contact/ManageContactAddress/UpdateContactAddress.php +++ b/app/Services/Contact/ManageContactAddress/UpdateContactAddress.php @@ -2,17 +2,19 @@ namespace App\Services\Contact\ManageContactAddress; +use Carbon\Carbon; +use App\Models\Address; use App\Models\AddressType; use App\Jobs\CreateAuditLog; use App\Services\BaseService; use App\Jobs\CreateContactLog; -use App\Models\ContactAddress; use App\Interfaces\ServiceInterface; class UpdateContactAddress extends BaseService implements ServiceInterface { - private ContactAddress $contactAddress; - private AddressType $addressType; + private Address $address; + private ?AddressType $addressType; + private array $data; /** * Get the validation rules that apply to the service. @@ -26,8 +28,8 @@ public function rules(): array 'vault_id' => 'required|integer|exists:vaults,id', 'author_id' => 'required|integer|exists:users,id', 'contact_id' => 'required|integer|exists:contacts,id', - 'address_type_id' => 'required|integer|exists:address_types,id', - 'contact_address_id' => 'required|integer|exists:contact_addresses,id', + 'address_id' => 'required|integer|exists:addresses,id', + 'address_type_id' => 'nullable|integer|exists:address_types,id', 'street' => 'nullable|string|max:255', 'city' => 'nullable|string|max:255', 'province' => 'nullable|string|max:255', @@ -35,6 +37,8 @@ public function rules(): array 'country' => 'nullable|string|max:3', 'latitude' => 'nullable|numeric', 'longitude' => 'nullable|numeric', + 'lived_from_at' => 'nullable|date_format:Y-m-d', + 'lived_until_at' => 'nullable|date_format:Y-m-d', ]; } @@ -57,32 +61,47 @@ public function permissions(): array * Update a contact address. * * @param array $data - * @return ContactAddress + * @return Address */ - public function execute(array $data): ContactAddress + public function execute(array $data): Address { - $this->validateRules($data); + $this->data = $data; + $this->validate(); + $this->update(); + $this->log(); - $this->addressType = AddressType::where('account_id', $data['account_id']) - ->findOrFail($data['address_type_id']); + return $this->address; + } - $this->contactAddress = ContactAddress::where('contact_id', $this->contact->id) - ->where('address_type_id', $data['address_type_id']) - ->findOrFail($data['contact_address_id']); + private function validate(): void + { + $this->validateRules($this->data); - $place = $this->contactAddress->place; - $place->street = $this->valueOrNull($data, 'street'); - $place->city = $this->valueOrNull($data, 'city'); - $place->province = $this->valueOrNull($data, 'province'); - $place->postal_code = $this->valueOrNull($data, 'postal_code'); - $place->country = $this->valueOrNull($data, 'country'); - $place->latitude = $this->valueOrNull($data, 'latitude'); - $place->longitude = $this->valueOrNull($data, 'longitude'); - $place->save(); + if ($this->valueOrNull($this->data, 'address_type_id')) { + $this->addressType = AddressType::where('account_id', $this->data['account_id']) + ->findOrFail($this->data['address_type_id']); + } - $this->log(); + $this->address = Address::where('contact_id', $this->contact->id) + ->findOrFail($this->data['address_id']); + } + + private function update(): void + { + $this->address->address_type_id = $this->valueOrNull($this->data, 'address_type_id'); + $this->address->street = $this->valueOrNull($this->data, 'street'); + $this->address->city = $this->valueOrNull($this->data, 'city'); + $this->address->province = $this->valueOrNull($this->data, 'province'); + $this->address->postal_code = $this->valueOrNull($this->data, 'postal_code'); + $this->address->country = $this->valueOrNull($this->data, 'country'); + $this->address->latitude = $this->valueOrNull($this->data, 'latitude'); + $this->address->longitude = $this->valueOrNull($this->data, 'longitude'); + $this->address->lived_from_at = $this->valueOrNull($this->data, 'lived_from_at'); + $this->address->lived_until_at = $this->valueOrNull($this->data, 'lived_until_at'); + $this->address->save(); - return $this->contactAddress; + $this->contact->last_updated_at = Carbon::now(); + $this->contact->save(); } private function log(): void @@ -95,7 +114,7 @@ private function log(): void 'objects' => json_encode([ 'contact_id' => $this->contact->id, 'contact_name' => $this->contact->name, - 'address_type_name' => $this->addressType->name, + 'address_type_name' => isset($this->addressType) ? $this->addressType->name : null, ]), ]); @@ -105,7 +124,7 @@ private function log(): void 'author_name' => $this->author->name, 'action_name' => 'contact_address_updated', 'objects' => json_encode([ - 'address_type_name' => $this->addressType->name, + 'address_type_name' => isset($this->addressType) ? $this->addressType->name : null, ]), ]); } diff --git a/app/Services/Contact/ManageNote/CreateNote.php b/app/Services/Contact/ManageNote/CreateNote.php index 3bb1357bc8e..af94aab0ee5 100644 --- a/app/Services/Contact/ManageNote/CreateNote.php +++ b/app/Services/Contact/ManageNote/CreateNote.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\ManageNote; +use Carbon\Carbon; use App\Models\Note; use App\Jobs\CreateAuditLog; use App\Services\BaseService; @@ -63,6 +64,9 @@ public function execute(array $data): Note 'body' => $data['body'], ]); + $this->contact->last_updated_at = Carbon::now(); + $this->contact->save(); + $this->log(); $this->createFeedItem(); diff --git a/app/Services/Contact/ManageNote/DestroyNote.php b/app/Services/Contact/ManageNote/DestroyNote.php index e3640847df4..5ba923759be 100644 --- a/app/Services/Contact/ManageNote/DestroyNote.php +++ b/app/Services/Contact/ManageNote/DestroyNote.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\ManageNote; +use Carbon\Carbon; use App\Models\Note; use App\Jobs\CreateAuditLog; use App\Services\BaseService; @@ -59,6 +60,9 @@ public function execute(array $data): void $this->note->delete(); + $this->contact->last_updated_at = Carbon::now(); + $this->contact->save(); + $this->log(); } diff --git a/app/Services/Contact/ManageNote/UpdateNote.php b/app/Services/Contact/ManageNote/UpdateNote.php index 4c8564c6146..6e043dd4dee 100644 --- a/app/Services/Contact/ManageNote/UpdateNote.php +++ b/app/Services/Contact/ManageNote/UpdateNote.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\ManageNote; +use Carbon\Carbon; use App\Models\Note; use App\Jobs\CreateAuditLog; use App\Services\BaseService; @@ -62,6 +63,9 @@ public function execute(array $data): Note $this->note->title = $this->valueOrNull($data, 'title'); $this->note->save(); + $this->contact->last_updated_at = Carbon::now(); + $this->contact->save(); + $this->log(); return $this->note; diff --git a/app/Services/Contact/SetPronoun/SetPronoun.php b/app/Services/Contact/SetPronoun/SetPronoun.php index b13fdc7424f..43c8f8286d0 100644 --- a/app/Services/Contact/SetPronoun/SetPronoun.php +++ b/app/Services/Contact/SetPronoun/SetPronoun.php @@ -2,6 +2,7 @@ namespace App\Services\Contact\SetPronoun; +use Carbon\Carbon; use App\Models\Pronoun; use App\Jobs\CreateAuditLog; use App\Services\BaseService; @@ -56,6 +57,7 @@ public function execute(array $data): void ->findOrFail($data['pronoun_id']); $this->contact->pronoun_id = $this->pronoun->id; + $this->contact->last_updated_at = Carbon::now(); $this->contact->save(); $this->log(); diff --git a/composer.json b/composer.json index 9768345877a..1dd9a2a81c5 100644 --- a/composer.json +++ b/composer.json @@ -1,72 +1,75 @@ { - "name": "laravel/laravel", - "type": "project", - "description": "The Laravel Framework.", - "keywords": ["framework", "laravel"], - "license": "MIT", - "require": { - "php": "^7.3|^8.0", - "fruitcake/laravel-cors": "^2.0", - "guzzlehttp/guzzle": "^7.0.1", - "http-interop/http-factory-guzzle": "^1.2", - "inertiajs/inertia-laravel": "^0.4.3", - "itsgoingd/clockwork": "^5.1", - "laravel/framework": "^8.65", - "laravel/sanctum": "^2.6", - "laravel/scout": "^9.4", - "laravel/tinker": "^2.5", - "meilisearch/meilisearch-php": "^0.21.0", - "tightenco/ziggy": "^1.0" - }, - "require-dev": { - "brianium/paratest": "^6.4", - "facade/ignition": "^2.5", - "fakerphp/faker": "^1.9.1", - "laravel/breeze": "^1.4", - "laravel/sail": "^1.0.1", - "mockery/mockery": "^1.4.4", - "nunomaduro/collision": "^5.10", - "phpunit/phpunit": "^9.5.10", - "psalm/plugin-laravel": "^1.5", - "vimeo/psalm": "^4.14" - }, - "autoload": { - "psr-4": { - "App\\": "app/", - "Database\\Factories\\": "database/factories/", - "Database\\Seeders\\": "database/seeders/" - } - }, - "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } - }, - "scripts": { - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover --ansi" - ], - "post-update-cmd": [ - "@php artisan vendor:publish --tag=laravel-assets --ansi" - ], - "post-root-package-install": [ - "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" - ], - "post-create-project-cmd": [ - "@php artisan key:generate --ansi" - ] - }, - "extra": { - "laravel": { - "dont-discover": [] - } - }, - "config": { - "optimize-autoloader": true, - "preferred-install": "dist", - "sort-packages": true - }, - "minimum-stability": "dev", - "prefer-stable": true + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": [ + "framework", + "laravel" + ], + "license": "MIT", + "require": { + "php": "^7.3|^8.0", + "fruitcake/laravel-cors": "^2.0", + "guzzlehttp/guzzle": "^7.0.1", + "http-interop/http-factory-guzzle": "^1.2", + "inertiajs/inertia-laravel": "^0.4.3", + "itsgoingd/clockwork": "^5.1", + "laravel/framework": "^8.65", + "laravel/sanctum": "^2.6", + "laravel/scout": "^9.4", + "laravel/tinker": "^2.5", + "meilisearch/meilisearch-php": "^0.21.0", + "tightenco/ziggy": "^1.0" + }, + "require-dev": { + "brianium/paratest": "^6.4", + "facade/ignition": "^2.5", + "fakerphp/faker": "^1.9.1", + "laravel/breeze": "^1.4", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^5.10", + "phpunit/phpunit": "^9.5.10", + "psalm/plugin-laravel": "^1.5", + "vimeo/psalm": "^4.14" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/composer.lock b/composer.lock index 9020d055356..b631433e1d5 100644 --- a/composer.lock +++ b/composer.lock @@ -1153,16 +1153,16 @@ }, { "name": "itsgoingd/clockwork", - "version": "v5.1.3", + "version": "v5.1.4", "source": { "type": "git", "url": "https://github.com/itsgoingd/clockwork.git", - "reference": "e03f8a7f4bcd99ec67e56428e4fc7424de4cefa8" + "reference": "7252aa771b77ac8678b44290fd7ec7577435cce6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/e03f8a7f4bcd99ec67e56428e4fc7424de4cefa8", - "reference": "e03f8a7f4bcd99ec67e56428e4fc7424de4cefa8", + "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/7252aa771b77ac8678b44290fd7ec7577435cce6", + "reference": "7252aa771b77ac8678b44290fd7ec7577435cce6", "shasum": "" }, "require": { @@ -1210,7 +1210,7 @@ ], "support": { "issues": "https://github.com/itsgoingd/clockwork/issues", - "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.3" + "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.4" }, "funding": [ { @@ -1218,20 +1218,20 @@ "type": "github" } ], - "time": "2021-12-24T12:24:20+00:00" + "time": "2022-01-30T12:36:18+00:00" }, { "name": "laravel/framework", - "version": "v8.80.0", + "version": "v8.82.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "8949a2e46b0f274f39c61eee8d5de1dc6a1f686b" + "reference": "411d5243c58cbf12b0fc89cab1ceb50088968c27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/8949a2e46b0f274f39c61eee8d5de1dc6a1f686b", - "reference": "8949a2e46b0f274f39c61eee8d5de1dc6a1f686b", + "url": "https://api.github.com/repos/laravel/framework/zipball/411d5243c58cbf12b0fc89cab1ceb50088968c27", + "reference": "411d5243c58cbf12b0fc89cab1ceb50088968c27", "shasum": "" }, "require": { @@ -1264,7 +1264,7 @@ "symfony/var-dumper": "^5.4", "tijsverkoyen/css-to-inline-styles": "^2.2.2", "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^1.4.8" + "voku/portable-ascii": "^1.6.1" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -1391,7 +1391,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-01-18T15:51:42+00:00" + "time": "2022-02-01T16:13:57+00:00" }, { "name": "laravel/sanctum", @@ -1531,16 +1531,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.0.5", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "25de3be1bca1b17d52ff0dc02b646c667ac7266c" + "reference": "65c9faf50d567b65d81764a44526545689e3fe63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/25de3be1bca1b17d52ff0dc02b646c667ac7266c", - "reference": "25de3be1bca1b17d52ff0dc02b646c667ac7266c", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/65c9faf50d567b65d81764a44526545689e3fe63", + "reference": "65c9faf50d567b65d81764a44526545689e3fe63", "shasum": "" }, "require": { @@ -1586,7 +1586,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2021-11-30T15:53:04+00:00" + "time": "2022-02-01T16:29:39+00:00" }, { "name": "laravel/tinker", @@ -1658,16 +1658,16 @@ }, { "name": "league/commonmark", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c5aadcc15548629787d02b86a7afef03b46271b5" + "reference": "f8afb78f087777b040e0ab8a6b6ca93f6fc3f18a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c5aadcc15548629787d02b86a7afef03b46271b5", - "reference": "c5aadcc15548629787d02b86a7afef03b46271b5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/f8afb78f087777b040e0ab8a6b6ca93f6fc3f18a", + "reference": "f8afb78f087777b040e0ab8a6b6ca93f6fc3f18a", "shasum": "" }, "require": { @@ -1675,7 +1675,7 @@ "league/config": "^1.1.1", "php": "^7.4 || ^8.0", "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^v2.1 || ^3.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", "symfony/polyfill-php80": "^1.15" }, "require-dev": { @@ -1758,7 +1758,7 @@ "type": "tidelift" } ], - "time": "2022-01-22T14:06:22+00:00" + "time": "2022-01-25T14:37:33+00:00" }, { "name": "league/config", @@ -2160,16 +2160,16 @@ }, { "name": "nesbot/carbon", - "version": "2.55.2", + "version": "2.56.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2" + "reference": "626ec8cbb724cd3c3400c3ed8f730545b744e3f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8c2a18ce3e67c34efc1b29f64fe61304368259a2", - "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/626ec8cbb724cd3c3400c3ed8f730545b744e3f4", + "reference": "626ec8cbb724cd3c3400c3ed8f730545b744e3f4", "shasum": "" }, "require": { @@ -2186,7 +2186,7 @@ "kylekatarnls/multi-tester": "^2.0", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan": "^0.12.54 || ^1.0", "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3.4" }, @@ -2252,7 +2252,7 @@ "type": "tidelift" } ], - "time": "2021-12-03T14:59:52+00:00" + "time": "2022-01-21T17:08:38+00:00" }, { "name": "nette/schema", @@ -2318,16 +2318,16 @@ }, { "name": "nette/utils", - "version": "v3.2.6", + "version": "v3.2.7", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "2f261e55bd6a12057442045bf2c249806abc1d02" + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/2f261e55bd6a12057442045bf2c249806abc1d02", - "reference": "2f261e55bd6a12057442045bf2c249806abc1d02", + "url": "https://api.github.com/repos/nette/utils/zipball/0af4e3de4df9f1543534beab255ccf459e7a2c99", + "reference": "0af4e3de4df9f1543534beab255ccf459e7a2c99", "shasum": "" }, "require": { @@ -2397,9 +2397,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.6" + "source": "https://github.com/nette/utils/tree/v3.2.7" }, - "time": "2021-11-24T15:47:23+00:00" + "time": "2022-01-24T11:29:14+00:00" }, { "name": "nikic/php-parser", @@ -2459,16 +2459,16 @@ }, { "name": "opis/closure", - "version": "3.6.2", + "version": "3.6.3", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", "shasum": "" }, "require": { @@ -2518,9 +2518,9 @@ ], "support": { "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" + "source": "https://github.com/opis/closure/tree/3.6.3" }, - "time": "2021-04-09T13:42:10+00:00" + "time": "2022-01-27T09:35:39+00:00" }, { "name": "php-http/client-common", @@ -3716,16 +3716,16 @@ }, { "name": "symfony/console", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e" + "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e", - "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e", + "url": "https://api.github.com/repos/symfony/console/zipball/a2a86ec353d825c75856c6fd14fac416a7bdb6b8", + "reference": "a2a86ec353d825c75856c6fd14fac416a7bdb6b8", "shasum": "" }, "require": { @@ -3795,7 +3795,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.2" + "source": "https://github.com/symfony/console/tree/v5.4.3" }, "funding": [ { @@ -3811,20 +3811,20 @@ "type": "tidelift" } ], - "time": "2021-12-20T16:11:12+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/css-selector", - "version": "v6.0.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "380f86c1a9830226f42a08b5926f18aed4195f25" + "reference": "1955d595c12c111629cc814d3f2a2ff13580508a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/380f86c1a9830226f42a08b5926f18aed4195f25", - "reference": "380f86c1a9830226f42a08b5926f18aed4195f25", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1955d595c12c111629cc814d3f2a2ff13580508a", + "reference": "1955d595c12c111629cc814d3f2a2ff13580508a", "shasum": "" }, "require": { @@ -3860,7 +3860,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.0.2" + "source": "https://github.com/symfony/css-selector/tree/v6.0.3" }, "funding": [ { @@ -3876,7 +3876,7 @@ "type": "tidelift" } ], - "time": "2021-12-16T22:13:01+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3947,16 +3947,16 @@ }, { "name": "symfony/error-handler", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "e0c0dd0f9d4120a20158fc9aec2367d07d38bc56" + "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/e0c0dd0f9d4120a20158fc9aec2367d07d38bc56", - "reference": "e0c0dd0f9d4120a20158fc9aec2367d07d38bc56", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", + "reference": "c4ffc2cd919950d13c8c9ce32a70c70214c3ffc5", "shasum": "" }, "require": { @@ -3998,7 +3998,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.2" + "source": "https://github.com/symfony/error-handler/tree/v5.4.3" }, "funding": [ { @@ -4014,20 +4014,20 @@ "type": "tidelift" } ], - "time": "2021-12-19T20:02:00+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "7093f25359e2750bfe86842c80c4e4a6a852d05c" + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7093f25359e2750bfe86842c80c4e4a6a852d05c", - "reference": "7093f25359e2750bfe86842c80c4e4a6a852d05c", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", "shasum": "" }, "require": { @@ -4081,7 +4081,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.3" }, "funding": [ { @@ -4097,7 +4097,7 @@ "type": "tidelift" } ], - "time": "2021-12-21T10:43:13+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4180,16 +4180,16 @@ }, { "name": "symfony/finder", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e77046c252be48c48a40816187ed527703c8f76c" + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c", - "reference": "e77046c252be48c48a40816187ed527703c8f76c", + "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", "shasum": "" }, "require": { @@ -4223,7 +4223,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.2" + "source": "https://github.com/symfony/finder/tree/v5.4.3" }, "funding": [ { @@ -4239,20 +4239,20 @@ "type": "tidelift" } ], - "time": "2021-12-15T11:06:13+00:00" + "time": "2022-01-26T16:34:36+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ce952af52877eaf3eab5d0c08cc0ea865ed37313" + "reference": "ef409ff341a565a3663157d4324536746d49a0c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce952af52877eaf3eab5d0c08cc0ea865ed37313", - "reference": "ce952af52877eaf3eab5d0c08cc0ea865ed37313", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ef409ff341a565a3663157d4324536746d49a0c7", + "reference": "ef409ff341a565a3663157d4324536746d49a0c7", "shasum": "" }, "require": { @@ -4296,7 +4296,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.2" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.3" }, "funding": [ { @@ -4312,20 +4312,20 @@ "type": "tidelift" } ], - "time": "2021-12-28T17:15:56+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.2", + "version": "v5.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "35b7e9868953e0d1df84320bb063543369e43ef5" + "reference": "49f40347228c773688a0488feea0175aa7f4d268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/35b7e9868953e0d1df84320bb063543369e43ef5", - "reference": "35b7e9868953e0d1df84320bb063543369e43ef5", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/49f40347228c773688a0488feea0175aa7f4d268", + "reference": "49f40347228c773688a0488feea0175aa7f4d268", "shasum": "" }, "require": { @@ -4408,7 +4408,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.4.2" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.4" }, "funding": [ { @@ -4424,20 +4424,20 @@ "type": "tidelift" } ], - "time": "2021-12-29T13:20:26+00:00" + "time": "2022-01-29T18:08:07+00:00" }, { "name": "symfony/mime", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "1bfd938cf9562822c05c4d00e8f92134d3c8e42d" + "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/1bfd938cf9562822c05c4d00e8f92134d3c8e42d", - "reference": "1bfd938cf9562822c05c4d00e8f92134d3c8e42d", + "url": "https://api.github.com/repos/symfony/mime/zipball/e1503cfb5c9a225350f549d3bb99296f4abfb80f", + "reference": "e1503cfb5c9a225350f549d3bb99296f4abfb80f", "shasum": "" }, "require": { @@ -4491,7 +4491,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.2" + "source": "https://github.com/symfony/mime/tree/v5.4.3" }, "funding": [ { @@ -4507,20 +4507,20 @@ "type": "tidelift" } ], - "time": "2021-12-28T17:15:56+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.0.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "be0facf48a42a232d6c0daadd76e4eb5657a4798" + "reference": "51f7006670febe4cbcbae177cbffe93ff833250d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/be0facf48a42a232d6c0daadd76e4eb5657a4798", - "reference": "be0facf48a42a232d6c0daadd76e4eb5657a4798", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/51f7006670febe4cbcbae177cbffe93ff833250d", + "reference": "51f7006670febe4cbcbae177cbffe93ff833250d", "shasum": "" }, "require": { @@ -4558,7 +4558,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.0.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.0.3" }, "funding": [ { @@ -4574,7 +4574,7 @@ "type": "tidelift" } ], - "time": "2021-11-23T19:05:29+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/polyfill-ctype", @@ -5395,16 +5395,16 @@ }, { "name": "symfony/process", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4" + "reference": "553f50487389a977eb31cf6b37faae56da00f753" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", - "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", + "url": "https://api.github.com/repos/symfony/process/zipball/553f50487389a977eb31cf6b37faae56da00f753", + "reference": "553f50487389a977eb31cf6b37faae56da00f753", "shasum": "" }, "require": { @@ -5437,7 +5437,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.2" + "source": "https://github.com/symfony/process/tree/v5.4.3" }, "funding": [ { @@ -5453,20 +5453,20 @@ "type": "tidelift" } ], - "time": "2021-12-27T21:01:00+00:00" + "time": "2022-01-26T16:28:35+00:00" }, { "name": "symfony/routing", - "version": "v5.4.0", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1" + "reference": "44b29c7a94e867ccde1da604792f11a469958981" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9eeae93c32ca86746e5d38f3679e9569981038b1", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1", + "url": "https://api.github.com/repos/symfony/routing/zipball/44b29c7a94e867ccde1da604792f11a469958981", + "reference": "44b29c7a94e867ccde1da604792f11a469958981", "shasum": "" }, "require": { @@ -5527,7 +5527,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.0" + "source": "https://github.com/symfony/routing/tree/v5.4.3" }, "funding": [ { @@ -5543,7 +5543,7 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/service-contracts", @@ -5629,16 +5629,16 @@ }, { "name": "symfony/string", - "version": "v6.0.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "bae261d0c3ac38a1f802b4dfed42094296100631" + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/bae261d0c3ac38a1f802b4dfed42094296100631", - "reference": "bae261d0c3ac38a1f802b4dfed42094296100631", + "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", "shasum": "" }, "require": { @@ -5694,7 +5694,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.2" + "source": "https://github.com/symfony/string/tree/v6.0.3" }, "funding": [ { @@ -5710,20 +5710,20 @@ "type": "tidelift" } ], - "time": "2021-12-16T22:13:01+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/translation", - "version": "v6.0.2", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a16c33f93e2fd62d259222aebf792158e9a28a77" + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a16c33f93e2fd62d259222aebf792158e9a28a77", - "reference": "a16c33f93e2fd62d259222aebf792158e9a28a77", + "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d", + "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d", "shasum": "" }, "require": { @@ -5789,7 +5789,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.2" + "source": "https://github.com/symfony/translation/tree/v6.0.3" }, "funding": [ { @@ -5805,7 +5805,7 @@ "type": "tidelift" } ], - "time": "2021-12-25T20:10:03+00:00" + "time": "2022-01-07T00:29:03+00:00" }, { "name": "symfony/translation-contracts", @@ -5887,16 +5887,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "1b56c32c3679002b3a42384a580e16e2600f41c1" + "reference": "970a01f208bf895c5f327ba40b72288da43adec4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1b56c32c3679002b3a42384a580e16e2600f41c1", - "reference": "1b56c32c3679002b3a42384a580e16e2600f41c1", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/970a01f208bf895c5f327ba40b72288da43adec4", + "reference": "970a01f208bf895c5f327ba40b72288da43adec4", "shasum": "" }, "require": { @@ -5956,7 +5956,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.2" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.3" }, "funding": [ { @@ -5972,28 +5972,28 @@ "type": "tidelift" } ], - "time": "2021-12-29T10:10:35+00:00" + "time": "2022-01-17T16:30:37+00:00" }, { "name": "tightenco/ziggy", - "version": "v1.4.2", + "version": "v1.4.3", "source": { "type": "git", "url": "https://github.com/tighten/ziggy.git", - "reference": "620c135281062b9f6b53a75b07f99a4339267277" + "reference": "ffeff44dba822cf45cd2239691526d67b76c3323" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tighten/ziggy/zipball/620c135281062b9f6b53a75b07f99a4339267277", - "reference": "620c135281062b9f6b53a75b07f99a4339267277", + "url": "https://api.github.com/repos/tighten/ziggy/zipball/ffeff44dba822cf45cd2239691526d67b76c3323", + "reference": "ffeff44dba822cf45cd2239691526d67b76c3323", "shasum": "" }, "require": { "laravel/framework": ">=5.4@dev" }, "require-dev": { - "orchestra/testbench": "^6.0", - "phpunit/phpunit": "^9.2" + "orchestra/testbench": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "phpunit/phpunit": "^6.0 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -6036,9 +6036,9 @@ ], "support": { "issues": "https://github.com/tighten/ziggy/issues", - "source": "https://github.com/tighten/ziggy/tree/v1.4.2" + "source": "https://github.com/tighten/ziggy/tree/v1.4.3" }, - "time": "2021-10-01T13:55:26+00:00" + "time": "2022-01-28T14:48:33+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -6175,16 +6175,16 @@ }, { "name": "voku/portable-ascii", - "version": "1.5.6", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", "shasum": "" }, "require": { @@ -6221,7 +6221,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" }, "funding": [ { @@ -6245,7 +6245,7 @@ "type": "tidelift" } ], - "time": "2020-11-12T00:07:28+00:00" + "time": "2022-01-24T18:55:24+00:00" }, { "name": "webmozart/assert", @@ -6429,12 +6429,12 @@ } }, "autoload": { - "psr-4": { - "Amp\\ByteStream\\": "lib" - }, "files": [ "lib/functions.php" - ] + ], + "psr-4": { + "Amp\\ByteStream\\": "lib" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6792,12 +6792,12 @@ "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "3ae111140facdba8ae82adcd1085e4adfc7d715c" + "reference": "ac8fb8cc574467cda36ab89f6a8930917276d972" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/3ae111140facdba8ae82adcd1085e4adfc7d715c", - "reference": "3ae111140facdba8ae82adcd1085e4adfc7d715c", + "url": "https://api.github.com/repos/composer/composer/zipball/ac8fb8cc574467cda36ab89f6a8930917276d972", + "reference": "ac8fb8cc574467cda36ab89f6a8930917276d972", "shasum": "" }, "require": { @@ -6887,7 +6887,7 @@ "type": "tidelift" } ], - "time": "2022-01-21T16:39:57+00:00" + "time": "2022-02-04T16:01:51+00:00" }, { "name": "composer/metadata-minifier", @@ -7104,23 +7104,23 @@ }, { "name": "composer/semver", - "version": "3.2.7", + "version": "3.2.9", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "deac27056b57e46faf136fae7b449eeaa71661ee" + "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/deac27056b57e46faf136fae7b449eeaa71661ee", - "reference": "deac27056b57e46faf136fae7b449eeaa71661ee", + "url": "https://api.github.com/repos/composer/semver/zipball/a951f614bd64dcd26137bc9b7b2637ddcfc57649", + "reference": "a951f614bd64dcd26137bc9b7b2637ddcfc57649", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan": "^1.4", "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", @@ -7165,7 +7165,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.7" + "source": "https://github.com/composer/semver/tree/3.2.9" }, "funding": [ { @@ -7181,7 +7181,7 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:57:54+00:00" + "time": "2022-02-04T13:58:43+00:00" }, { "name": "composer/spdx-licenses", @@ -7467,16 +7467,16 @@ }, { "name": "doctrine/dbal", - "version": "3.3.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "a4b37db6f186b6843474189b424aed6a7cc5de4b" + "reference": "5b6eb6c8ce65ebdc60b0c0960a676cf76758dbf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/a4b37db6f186b6843474189b424aed6a7cc5de4b", - "reference": "a4b37db6f186b6843474189b424aed6a7cc5de4b", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b6eb6c8ce65ebdc60b0c0960a676cf76758dbf2", + "reference": "5b6eb6c8ce65ebdc60b0c0960a676cf76758dbf2", "shasum": "" }, "require": { @@ -7558,7 +7558,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.0" + "source": "https://github.com/doctrine/dbal/tree/3.3.1" }, "funding": [ { @@ -7574,7 +7574,7 @@ "type": "tidelift" } ], - "time": "2022-01-18T00:13:52+00:00" + "time": "2022-01-30T17:50:59+00:00" }, { "name": "doctrine/deprecations", @@ -7980,16 +7980,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.17.0", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "b85e9d44eae8c52cca7aa0939483611f7232b669" + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/b85e9d44eae8c52cca7aa0939483611f7232b669", - "reference": "b85e9d44eae8c52cca7aa0939483611f7232b669", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/d7f08a622b3346766325488aa32ddc93ccdecc75", + "reference": "d7f08a622b3346766325488aa32ddc93ccdecc75", "shasum": "" }, "require": { @@ -8002,10 +8002,12 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", "symfony/phpunit-bridge": "^4.4 || ^5.2" }, "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", "ext-curl": "Required by Faker\\Provider\\Image to download images.", "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", @@ -8014,7 +8016,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.17-dev" + "dev-main": "v1.19-dev" } }, "autoload": { @@ -8039,9 +8041,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.17.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.19.0" }, - "time": "2021-12-05T17:14:47+00:00" + "time": "2022-02-02T17:38:57+00:00" }, { "name": "felixfbecker/advanced-json-rpc", @@ -8338,16 +8340,16 @@ }, { "name": "laravel/breeze", - "version": "v1.7.0", + "version": "v1.7.1", "source": { "type": "git", "url": "https://github.com/laravel/breeze.git", - "reference": "b64ed761df1d1572525d6bbed04c54e8309437b5" + "reference": "671c552ae193b3e712039a17a2d75f436a0a790a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/breeze/zipball/b64ed761df1d1572525d6bbed04c54e8309437b5", - "reference": "b64ed761df1d1572525d6bbed04c54e8309437b5", + "url": "https://api.github.com/repos/laravel/breeze/zipball/671c552ae193b3e712039a17a2d75f436a0a790a", + "reference": "671c552ae193b3e712039a17a2d75f436a0a790a", "shasum": "" }, "require": { @@ -8391,7 +8393,7 @@ "issues": "https://github.com/laravel/breeze/issues", "source": "https://github.com/laravel/breeze" }, - "time": "2022-01-12T18:02:04+00:00" + "time": "2022-01-25T15:13:03+00:00" }, { "name": "laravel/sail", @@ -8552,12 +8554,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8885,12 +8887,12 @@ } }, "autoload": { - "psr-4": { - "Orchestra\\Testbench\\": "src/" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Orchestra\\Testbench\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -9587,16 +9589,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.12", + "version": "9.5.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "93d4bf4c37aec6384bb9e5d390d9049a463a7256" + "reference": "597cb647654ede35e43b137926dfdfef0fb11743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/93d4bf4c37aec6384bb9e5d390d9049a463a7256", - "reference": "93d4bf4c37aec6384bb9e5d390d9049a463a7256", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/597cb647654ede35e43b137926dfdfef0fb11743", + "reference": "597cb647654ede35e43b137926dfdfef0fb11743", "shasum": "" }, "require": { @@ -9674,7 +9676,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.12" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.13" }, "funding": [ { @@ -9686,7 +9688,7 @@ "type": "github" } ], - "time": "2022-01-21T05:54:47+00:00" + "time": "2022-01-24T07:33:35+00:00" }, { "name": "pimple/pimple", @@ -9881,12 +9883,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "React\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "React\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -11179,16 +11181,16 @@ }, { "name": "spatie/ray", - "version": "1.33.1", + "version": "1.33.2", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "88719d6b48d36947fd3b3b0ffec5cc55d62cdb64" + "reference": "28f6bd88e2db0fada88a7999c8ee0aad69f56192" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/88719d6b48d36947fd3b3b0ffec5cc55d62cdb64", - "reference": "88719d6b48d36947fd3b3b0ffec5cc55d62cdb64", + "url": "https://api.github.com/repos/spatie/ray/zipball/28f6bd88e2db0fada88a7999c8ee0aad69f56192", + "reference": "28f6bd88e2db0fada88a7999c8ee0aad69f56192", "shasum": "" }, "require": { @@ -11211,12 +11213,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "Spatie\\Ray\\": "src" - }, "files": [ "src/helpers.php" - ] + ], + "psr-4": { + "Spatie\\Ray\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -11238,7 +11240,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.33.1" + "source": "https://github.com/spatie/ray/tree/1.33.2" }, "funding": [ { @@ -11250,20 +11252,20 @@ "type": "other" } ], - "time": "2022-01-17T09:26:20+00:00" + "time": "2022-02-02T15:16:13+00:00" }, { "name": "symfony/filesystem", - "version": "v6.0.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "52b3c9cce673b014915445a432339f282e002ce6" + "reference": "6ae49c4fda17322171a2b8dc5f70bc6edbc498e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/52b3c9cce673b014915445a432339f282e002ce6", - "reference": "52b3c9cce673b014915445a432339f282e002ce6", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6ae49c4fda17322171a2b8dc5f70bc6edbc498e1", + "reference": "6ae49c4fda17322171a2b8dc5f70bc6edbc498e1", "shasum": "" }, "require": { @@ -11297,7 +11299,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.0.0" + "source": "https://github.com/symfony/filesystem/tree/v6.0.3" }, "funding": [ { @@ -11313,20 +11315,20 @@ "type": "tidelift" } ], - "time": "2021-10-29T07:35:21+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.0.0", + "version": "v6.0.3", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "0e0ed55d1ffdfadd03af180443fbdca9876483b3" + "reference": "6835045bb9f00fa4486ea4f1bcaf623be761556f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0e0ed55d1ffdfadd03af180443fbdca9876483b3", - "reference": "0e0ed55d1ffdfadd03af180443fbdca9876483b3", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6835045bb9f00fa4486ea4f1bcaf623be761556f", + "reference": "6835045bb9f00fa4486ea4f1bcaf623be761556f", "shasum": "" }, "require": { @@ -11359,7 +11361,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.0.0" + "source": "https://github.com/symfony/stopwatch/tree/v6.0.3" }, "funding": [ { @@ -11375,20 +11377,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T19:05:29+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.2", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58" + "reference": "e80f87d2c9495966768310fc531b487ce64237a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/b9eb163846a61bb32dfc147f7859e274fab38b58", - "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2", + "reference": "e80f87d2c9495966768310fc531b487ce64237a2", "shasum": "" }, "require": { @@ -11434,7 +11436,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.2" + "source": "https://github.com/symfony/yaml/tree/v5.4.3" }, "funding": [ { @@ -11450,7 +11452,7 @@ "type": "tidelift" } ], - "time": "2021-12-16T21:58:21+00:00" + "time": "2022-01-26T16:32:32+00:00" }, { "name": "theseer/tokenizer", @@ -11504,16 +11506,16 @@ }, { "name": "vimeo/psalm", - "version": "4.18.1", + "version": "4.20.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "dda05fa913f4dc6eb3386f2f7ce5a45d37a71bcb" + "reference": "f82a70e7edfc6cf2705e9374c8a0b6a974a779ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/dda05fa913f4dc6eb3386f2f7ce5a45d37a71bcb", - "reference": "dda05fa913f4dc6eb3386f2f7ce5a45d37a71bcb", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/f82a70e7edfc6cf2705e9374c8a0b6a974a779ed", + "reference": "f82a70e7edfc6cf2705e9374c8a0b6a974a779ed", "shasum": "" }, "require": { @@ -11579,13 +11581,13 @@ } }, "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - }, "files": [ "src/functions.php", "src/spl_object_id.php" - ] + ], + "psr-4": { + "Psalm\\": "src/Psalm/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -11604,9 +11606,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.18.1" + "source": "https://github.com/vimeo/psalm/tree/4.20.0" }, - "time": "2022-01-08T21:21:26+00:00" + "time": "2022-02-03T17:03:47+00:00" }, { "name": "webmozart/path-util", @@ -11661,16 +11663,16 @@ }, { "name": "zbateson/mail-mime-parser", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "b969a8a72106dcdaa9ac4b19bb2e6b22d3fc5584" + "reference": "038d5043a54ee198ed96ab5fd39f16231272b32e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/b969a8a72106dcdaa9ac4b19bb2e6b22d3fc5584", - "reference": "b969a8a72106dcdaa9ac4b19bb2e6b22d3fc5584", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/038d5043a54ee198ed96ab5fd39f16231272b32e", + "reference": "038d5043a54ee198ed96ab5fd39f16231272b32e", "shasum": "" }, "require": { @@ -11730,7 +11732,7 @@ "type": "github" } ], - "time": "2021-12-08T20:21:28+00:00" + "time": "2022-01-25T18:18:17+00:00" }, { "name": "zbateson/mb-wrapper", diff --git a/database/factories/PlaceFactory.php b/database/factories/AddressFactory.php similarity index 73% rename from database/factories/PlaceFactory.php rename to database/factories/AddressFactory.php index 0c5e0290ef1..4960dce72ad 100644 --- a/database/factories/PlaceFactory.php +++ b/database/factories/AddressFactory.php @@ -2,17 +2,19 @@ namespace Database\Factories; -use App\Models\Place; +use App\Models\Address; +use App\Models\Contact; +use App\Models\AddressType; use Illuminate\Database\Eloquent\Factories\Factory; -class PlaceFactory extends Factory +class AddressFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ - protected $model = Place::class; + protected $model = Address::class; /** * Define the model's default state. @@ -22,6 +24,8 @@ class PlaceFactory extends Factory public function definition() { return [ + 'contact_id' => Contact::factory(), + 'address_type_id' => AddressType::factory(), 'street' => $this->faker->streetAddress(), 'city' => $this->faker->city(), 'province' => $this->faker->name(), diff --git a/database/factories/AttributeFactory.php b/database/factories/AttributeFactory.php deleted file mode 100644 index 13f2aa938ff..00000000000 --- a/database/factories/AttributeFactory.php +++ /dev/null @@ -1,31 +0,0 @@ - Information::factory(), - 'name' => 'Gender', - 'type' => 'text', - ]; - } -} diff --git a/database/factories/ContactAddressFactory.php b/database/factories/ContactAddressFactory.php deleted file mode 100644 index 4a47eb1d317..00000000000 --- a/database/factories/ContactAddressFactory.php +++ /dev/null @@ -1,31 +0,0 @@ - Contact::factory(), - 'address_type_id' => AddressType::factory(), - ]; - } -} diff --git a/database/factories/InformationFactory.php b/database/factories/InformationFactory.php deleted file mode 100644 index e0c40d43fc8..00000000000 --- a/database/factories/InformationFactory.php +++ /dev/null @@ -1,31 +0,0 @@ - Account::factory(), - 'name' => 'gender', - 'allows_multiple_entries' => false, - ]; - } -} diff --git a/database/factories/AttributeDefaultValueFactory.php b/database/factories/ModuleRowFactory.php similarity index 58% rename from database/factories/AttributeDefaultValueFactory.php rename to database/factories/ModuleRowFactory.php index 6a42c477eb5..543ac4b7270 100644 --- a/database/factories/AttributeDefaultValueFactory.php +++ b/database/factories/ModuleRowFactory.php @@ -2,18 +2,18 @@ namespace Database\Factories; -use App\Models\Attribute; -use App\Models\AttributeDefaultValue; +use App\Models\Module; +use App\Models\ModuleRow; use Illuminate\Database\Eloquent\Factories\Factory; -class AttributeDefaultValueFactory extends Factory +class ModuleRowFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ - protected $model = AttributeDefaultValue::class; + protected $model = ModuleRow::class; /** * Define the model's default state. @@ -23,8 +23,8 @@ class AttributeDefaultValueFactory extends Factory public function definition() { return [ - 'attribute_id' => Attribute::factory(), - 'value' => 'male', + 'module_id' => Module::factory(), + 'position' => 1, ]; } } diff --git a/database/factories/ModuleRowFieldFactory.php b/database/factories/ModuleRowFieldFactory.php new file mode 100644 index 00000000000..314ea846c9a --- /dev/null +++ b/database/factories/ModuleRowFieldFactory.php @@ -0,0 +1,33 @@ + ModuleRow::factory(), + 'label' => $this->faker->word, + 'module_field_type' => ModuleRowField::TYPE_INPUT_TEXT, + 'required' => false, + 'position' => 1, + ]; + } +} diff --git a/database/migrations/2013_04_25_155842_create_attributes_table.php b/database/migrations/2013_04_25_155842_create_attributes_table.php index b6d9941b2ff..1a9e59dfff3 100644 --- a/database/migrations/2013_04_25_155842_create_attributes_table.php +++ b/database/migrations/2013_04_25_155842_create_attributes_table.php @@ -39,7 +39,9 @@ public function up() $table->unsignedBigInteger('account_id'); $table->string('name'); $table->string('type')->nullable(); - $table->boolean('can_be_deleted'); + $table->boolean('reserved_to_contact_information')->default(false); + $table->boolean('can_be_deleted')->default(true); + $table->integer('pagination')->nullable(); $table->timestamps(); $table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade'); }); @@ -53,42 +55,23 @@ public function up() $table->foreign('module_id')->references('id')->on('modules')->onDelete('cascade'); }); - Schema::create('information', function (Blueprint $table) { + Schema::create('module_rows', function (Blueprint $table) { $table->id(); - $table->unsignedBigInteger('account_id'); - $table->string('name'); - $table->boolean('allows_multiple_entries')->default(false); - $table->timestamps(); - $table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade'); - }); - - Schema::create('attributes', function (Blueprint $table) { - $table->id(); - $table->unsignedBigInteger('information_id'); - $table->string('name'); - $table->string('unit')->nullable(); - $table->boolean('unit_placement_after')->default(true); - $table->string('type'); - $table->boolean('has_default_value')->default(false); + $table->unsignedBigInteger('module_id'); + $table->integer('position')->nullable(); $table->timestamps(); - $table->foreign('information_id')->references('id')->on('information')->onDelete('cascade'); + $table->foreign('module_id')->references('id')->on('modules')->onDelete('cascade'); }); - Schema::create('attribute_default_values', function (Blueprint $table) { + Schema::create('module_row_fields', function (Blueprint $table) { $table->id(); - $table->unsignedBigInteger('attribute_id'); - $table->string('value'); - $table->timestamps(); - $table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade'); - }); - - Schema::create('information_template', function (Blueprint $table) { - $table->unsignedBigInteger('template_id'); - $table->unsignedBigInteger('information_id'); - $table->integer('position'); + $table->unsignedBigInteger('module_row_id'); + $table->string('label'); + $table->string('module_field_type'); + $table->boolean('required')->default(false); + $table->integer('position')->nullable(); $table->timestamps(); - $table->foreign('information_id')->references('id')->on('information')->onDelete('cascade'); - $table->foreign('template_id')->references('id')->on('templates')->onDelete('cascade'); + $table->foreign('module_row_id')->references('id')->on('module_rows')->onDelete('cascade'); }); } @@ -99,9 +82,9 @@ public function down() { Schema::dropIfExists('templates'); Schema::dropIfExists('template_pages'); + Schema::dropIfExists('module_template_page'); Schema::dropIfExists('modules'); - Schema::dropIfExists('attributes'); - Schema::dropIfExists('attribute_default_values'); - Schema::dropIfExists('attribute_template'); + Schema::dropIfExists('module_rows'); + Schema::dropIfExists('module_row_fields'); } } diff --git a/database/migrations/2021_10_20_213318_create_address_types_table.php b/database/migrations/2020_03_20_213318_create_address_types_table.php similarity index 100% rename from database/migrations/2021_10_20_213318_create_address_types_table.php rename to database/migrations/2020_03_20_213318_create_address_types_table.php diff --git a/database/migrations/2021_10_20_215133_create_places_table.php b/database/migrations/2020_04_26_215133_create_addresses_table.php similarity index 64% rename from database/migrations/2021_10_20_215133_create_places_table.php rename to database/migrations/2020_04_26_215133_create_addresses_table.php index fc7f26af058..2ee072c9e12 100644 --- a/database/migrations/2021_10_20_215133_create_places_table.php +++ b/database/migrations/2020_04_26_215133_create_addresses_table.php @@ -4,7 +4,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreatePlacesTable extends Migration +class CreateAddressesTable extends Migration { /** * Run the migrations. @@ -14,10 +14,10 @@ public function up() // necessary for SQLlite Schema::enableForeignKeyConstraints(); - Schema::create('places', function (Blueprint $table) { + Schema::create('addresses', function (Blueprint $table) { $table->id(); - $table->unsignedBigInteger('placeable_id')->nullable(); - $table->string('placeable_type')->nullable(); + $table->unsignedBigInteger('contact_id'); + $table->unsignedBigInteger('address_type_id')->nullable(); $table->string('street')->nullable(); $table->string('city')->nullable(); $table->string('province')->nullable(); @@ -25,16 +25,11 @@ public function up() $table->char('country', 3)->nullable(); $table->double('latitude')->nullable(); $table->double('longitude')->nullable(); - $table->timestamps(); - }); - - Schema::create('contact_addresses', function (Blueprint $table) { - $table->id(); - $table->unsignedBigInteger('contact_id'); - $table->unsignedBigInteger('address_type_id'); + $table->datetime('lived_from_at')->nullable(); + $table->datetime('lived_until_at')->nullable(); $table->timestamps(); $table->foreign('contact_id')->references('id')->on('contacts')->onDelete('cascade'); - $table->foreign('address_type_id')->references('id')->on('address_types')->onDelete('cascade'); + $table->foreign('address_type_id')->references('id')->on('address_types')->onDelete('set null'); }); } @@ -43,7 +38,6 @@ public function up() */ public function down() { - Schema::dropIfExists('places'); - Schema::dropIfExists('contact_addresses'); + Schema::dropIfExists('addresses'); } } diff --git a/jsconfig.json b/jsconfig.json index 97921a98ec8..766de86096d 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -1,9 +1,9 @@ { - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@/*": ["resources/js/*"] - } - }, - "exclude": ["node_modules", "public"] + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["resources/js/*"] + } + }, + "exclude": ["node_modules", "public"] } diff --git a/package.json b/package.json index 4dc90c092a3..c713359f912 100644 --- a/package.json +++ b/package.json @@ -1,59 +1,65 @@ { - "private": true, - "scripts": { - "dev": "npm run development", - "development": "mix", - "watch": "mix watch", - "watch-poll": "mix watch -- --watch-options-poll=1000", - "hot": "mix watch --hot", - "lint": "eslint --ext .js,.vue *.js .*.js resources/js/", - "prod": "npm run production", - "production": "mix --production", - "pretest": "DB_CONNECTION=testing php artisan migrate:fresh && DB_CONNECTION=testing php artisan db:seed", - "posttest": "vendor/bin/phpstan analyse && vendor/bin/psalm", - "test": "vendor/bin/phpunit" - }, - "devDependencies": { - "@inertiajs/inertia": "^0.10.0", - "@inertiajs/inertia-vue3": "^0.5.1", - "@inertiajs/progress": "^0.2.6", - "@tailwindcss/forms": "^0.4.0", - "@vue/compiler-sfc": "^3.0.5", - "ant-design-vue": "^2.2.8", - "autoprefixer": "^10.4.0", - "axios": "^0.21", - "eslint": "^7.11.0", - "eslint-config-standard": "^16.0.3", - "eslint-plugin-cypress": ">=2.11.2", - "eslint-plugin-import": ">=2.22.1", - "eslint-plugin-node": ">=11.1.0", - "eslint-plugin-promise": ">=4.2.1", - "eslint-plugin-standard": ">=4.0.0", - "eslint-plugin-vue": "^7.0.1", - "husky": "^4.3.0", - "laravel-mix": "^6.0.6", - "lint-staged": "^8.2.1", - "lodash": "^4.17.19", - "postcss": "^8.4.4", - "postcss-import": "^14.0.1", - "sass": "^1.15.2", - "sass-loader": "^7.1.0", - "tailwindcss": "^3.0.0", - "tiny-emitter": "^2.1.0", - "vue": "^3.0.5", - "vue-loader": "^16.1.2", - "vuedraggable": "^4.1.0" - }, - "lint-staged": { - "linters": { - "*.js|.*.js|resources/js/**/*.{vue,js}": [ - "yarn lint --fix" - ] - } - }, - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } + "private": true, + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "lint": "eslint --ext .js,.vue *.js .*.js resources/js/", + "prod": "npm run production", + "production": "mix --production", + "pretest": "DB_CONNECTION=testing php artisan migrate:fresh && DB_CONNECTION=testing php artisan db:seed", + "posttest": "vendor/bin/phpstan analyse && vendor/bin/psalm", + "test": "vendor/bin/phpunit" + }, + "devDependencies": { + "@inertiajs/inertia": "^0.10.0", + "@inertiajs/inertia-vue3": "^0.5.1", + "@inertiajs/progress": "^0.2.6", + "@tailwindcss/forms": "^0.4.0", + "@vue/compiler-sfc": "^3.0.5", + "ant-design-vue": "^2.2.8", + "autoprefixer": "^10.4.0", + "axios": "^0.21", + "eslint": "^7.11.0", + "eslint-config-prettier": "^8.3.0", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-cypress": ">=2.11.2", + "eslint-plugin-import": ">=2.22.1", + "eslint-plugin-node": ">=11.1.0", + "eslint-plugin-promise": ">=4.2.1", + "eslint-plugin-standard": ">=4.0.0", + "eslint-plugin-vue": "^7.0.1", + "husky": "^4.3.0", + "laravel-mix": "^6.0.6", + "lint-staged": "^8.2.1", + "lodash": "^4.17.19", + "postcss": "^8.4.4", + "postcss-import": "^14.0.1", + "prettier": "^2.5.1", + "prettier-plugin-tailwindcss": "^0.1.4", + "sass": "^1.15.2", + "sass-loader": "^7.1.0", + "tailwindcss": "^3.0.0", + "tiny-emitter": "^2.1.0", + "vue": "^3.0.5", + "vue-loader": "^16.1.2", + "vuedraggable": "^4.1.0" + }, + "lint-staged": { + "linters": { + "*.js|.*.js|resources/js/**/*.{vue,js}": [ + "prettier --write --ignore-unknown" + ], + "resources/**/*.{css,scss}": [ + "prettier --write --ignore-unknown" + ] } + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + } } diff --git a/resources/css/app.css b/resources/css/app.css index f789d439a27..894fd27ec68 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -3,9 +3,9 @@ @import 'tailwindcss/utilities'; body { - color: #343a4b; + color: #343a4b; } .icon-breadcrumb { - top: -1px; + top: -1px; } diff --git a/resources/js/Components/ApplicationLogo.vue b/resources/js/Components/ApplicationLogo.vue index 6e0f4204ecd..cf873cf5295 100644 --- a/resources/js/Components/ApplicationLogo.vue +++ b/resources/js/Components/ApplicationLogo.vue @@ -1,5 +1,7 @@ diff --git a/resources/js/Components/Button.vue b/resources/js/Components/Button.vue index 324388520b8..a6777129839 100644 --- a/resources/js/Components/Button.vue +++ b/resources/js/Components/Button.vue @@ -1,5 +1,8 @@ @@ -11,6 +14,6 @@ export default { type: String, default: 'submit', }, - } + }, }; diff --git a/resources/js/Components/Checkbox.vue b/resources/js/Components/Checkbox.vue index 06d432a5152..f6b8e5e200b 100644 --- a/resources/js/Components/Checkbox.vue +++ b/resources/js/Components/Checkbox.vue @@ -1,12 +1,14 @@ diff --git a/resources/js/Components/DropdownLink.vue b/resources/js/Components/DropdownLink.vue index 6d0717cd8f1..65d537f0ecf 100644 --- a/resources/js/Components/DropdownLink.vue +++ b/resources/js/Components/DropdownLink.vue @@ -1,14 +1,13 @@ diff --git a/resources/js/Components/Input.vue b/resources/js/Components/Input.vue index 409677d875d..77677144de1 100644 --- a/resources/js/Components/Input.vue +++ b/resources/js/Components/Input.vue @@ -1,11 +1,16 @@ diff --git a/resources/js/Components/InputError.vue b/resources/js/Components/InputError.vue index 9aff22c0ef8..8fc6b127611 100644 --- a/resources/js/Components/InputError.vue +++ b/resources/js/Components/InputError.vue @@ -9,7 +9,7 @@ diff --git a/resources/js/Components/ResponsiveNavLink.vue b/resources/js/Components/ResponsiveNavLink.vue index 6c2c8426d1c..ac605d72525 100644 --- a/resources/js/Components/ResponsiveNavLink.vue +++ b/resources/js/Components/ResponsiveNavLink.vue @@ -5,8 +5,6 @@ diff --git a/resources/js/Components/ValidationErrors.vue b/resources/js/Components/ValidationErrors.vue index b92df2d08d6..04179f435a9 100644 --- a/resources/js/Components/ValidationErrors.vue +++ b/resources/js/Components/ValidationErrors.vue @@ -1,11 +1,11 @@ @@ -20,6 +20,6 @@ export default { hasErrors() { return Object.keys(this.errors).length > 0; }, - } + }, }; diff --git a/resources/js/Pages/Auth/AcceptInvitation.vue b/resources/js/Pages/Auth/AcceptInvitation.vue index 1562f8f2ae0..6c59137fcee 100644 --- a/resources/js/Pages/Auth/AcceptInvitation.vue +++ b/resources/js/Pages/Auth/AcceptInvitation.vue @@ -3,42 +3,59 @@
-

- - 👋 - Welcome to Monica. -

+

👋 Welcome to Monica.

Please complete this form to finalize your account.

-
-
-
-
-
+
Create account @@ -55,7 +72,6 @@ import BreezeLabel from '@/Components/Label.vue'; import BreezeValidationErrors from '@/Components/ValidationErrors.vue'; export default { - components: { BreezeButton, BreezeInput, @@ -91,15 +107,16 @@ export default { submit() { this.loadingState = 'loading'; - axios.post(this.data.url.store, this.form) - .then(response => { + axios + .post(this.data.url.store, this.form) + .then((response) => { localStorage.success = 'Your account has been created'; this.$inertia.visit(response.data.data); }) - .catch(error => { + .catch((error) => { this.loadingState = null; }); }, - } + }, }; diff --git a/resources/js/Pages/Auth/ConfirmPassword.vue b/resources/js/Pages/Auth/ConfirmPassword.vue index 48ed528dc9a..afa7314eef7 100644 --- a/resources/js/Pages/Auth/ConfirmPassword.vue +++ b/resources/js/Pages/Auth/ConfirmPassword.vue @@ -9,12 +9,18 @@
-
-
+
Confirm @@ -31,7 +37,6 @@ import BreezeLabel from '@/Components/Label.vue'; import BreezeValidationErrors from '@/Components/ValidationErrors.vue'; export default { - components: { BreezeButton, BreezeInput, @@ -44,7 +49,7 @@ export default { return { form: this.$inertia.form({ password: '', - }) + }), }; }, @@ -53,7 +58,7 @@ export default { this.form.post(this.route('password.confirm'), { onFinish: () => this.form.reset(), }); - } - } + }, + }, }; diff --git a/resources/js/Pages/Auth/ForgotPassword.vue b/resources/js/Pages/Auth/ForgotPassword.vue index 9439e7bad78..25465d18337 100644 --- a/resources/js/Pages/Auth/ForgotPassword.vue +++ b/resources/js/Pages/Auth/ForgotPassword.vue @@ -1,10 +1,11 @@