diff --git a/.github/workflows/test-and-lint-js.yml b/.github/workflows/test-and-lint-js.yml
index e6a05d3a..1b169b91 100644
--- a/.github/workflows/test-and-lint-js.yml
+++ b/.github/workflows/test-and-lint-js.yml
@@ -21,7 +21,7 @@ jobs:
- uses: actions/checkout@v4
- name: Cache dependencies
- uses: actions/cache@v2
+ uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-npm-dependencies-${{ hashFiles('package.lock') }}
diff --git a/.github/workflows/test-and-lint-php.yml b/.github/workflows/test-and-lint-php.yml
index da9a53b9..b6bc485b 100644
--- a/.github/workflows/test-and-lint-php.yml
+++ b/.github/workflows/test-and-lint-php.yml
@@ -40,7 +40,7 @@ jobs:
run: composer validate
- name: Cache dependencies
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: vendor
key: ${{ runner.os }}-composer-dependencies-${{ hashFiles('composer.lock') }}
diff --git a/api.json b/api.json
new file mode 100644
index 00000000..0ba4fdfa
--- /dev/null
+++ b/api.json
@@ -0,0 +1 @@
+{"openapi":"3.1.0","info":{"title":"Escooters","version":"0.0.1"},"servers":[{"url":"http:\/\/escooters.blumilk.localhost\/api"}],"paths":{"\/register":{"post":{"operationId":"register","tags":["Auth"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["name","email","password"]}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}}},"\/login":{"post":{"operationId":"login","tags":["Auth"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"anyOf":[{"type":"string"},{"type":"object","properties":{"":{"type":"array","items":{"type":"string"}},"access_token":{"type":"string"}},"required":[null,"access_token"]}]}}}},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}}},"\/logout":{"post":{"operationId":"logout","tags":["Auth"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}}}},"\/language\/{locale}":{"post":{"operationId":"changeLocale","tags":["ChangeLocale"],"parameters":[{"name":"locale","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}}}},"\/admin\/cities":{"get":{"operationId":"cities.index","tags":["City"],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"cities":{"type":"array","items":{"$ref":"#\/components\/schemas\/CityResource"}},"providers":{"type":"array","items":{"$ref":"#\/components\/schemas\/ProviderResource"}},"countries":{"type":"array","items":{"$ref":"#\/components\/schemas\/CountryResource"}},"citiesWithoutAssignedCountry":{"type":"array","items":{"$ref":"#\/components\/schemas\/CityWithoutAssignedCountryResource"}}},"required":["cities","providers","countries","citiesWithoutAssignedCountry"]}}}}}},"post":{"operationId":"cities.store","tags":["City"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"country_id":{"type":"integer"}},"required":["name","latitude","longitude"]}}}},"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}}},"\/admin\/cities\/create":{"get":{"operationId":"cities.create","tags":["City"]}},"\/admin\/cities\/{city}":{"get":{"operationId":"cities.show","tags":["City"],"parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"cities.update","tags":["City"],"parameters":[{"name":"city","in":"path","required":true,"description":"The city ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"country_id":{"type":"integer"}},"required":["name","latitude","longitude"]}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}},"delete":{"operationId":"cities.destroy","tags":["City"],"parameters":[{"name":"city","in":"path","required":true,"description":"The city ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"}}}},"\/admin\/cities\/{city}\/edit":{"get":{"operationId":"cities.edit","tags":["City"],"parameters":[{"name":"city","in":"path","required":true,"schema":{"type":"string"}}]}},"\/city-alternative-name":{"get":{"operationId":"city-alternative-name.index","tags":["CityAlternativeName"]},"post":{"operationId":"city-alternative-name.store","tags":["CityAlternativeName"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"city_id":{"type":"integer"}},"required":["name"]}}}},"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}}},"\/city-alternative-name\/create":{"get":{"operationId":"city-alternative-name.create","tags":["CityAlternativeName"]}},"\/city-alternative-name\/{city_alternative_name}":{"get":{"operationId":"city-alternative-name.show","tags":["CityAlternativeName"],"parameters":[{"name":"city_alternative_name","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"city-alternative-name.update","tags":["CityAlternativeName"],"parameters":[{"name":"city_alternative_name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}}}},"\/city-alternative-name\/{city_alternative_name}\/edit":{"get":{"operationId":"city-alternative-name.edit","tags":["CityAlternativeName"],"parameters":[{"name":"city_alternative_name","in":"path","required":true,"schema":{"type":"string"}}]}},"\/city-alternative-name\/{cityAlternativeName}":{"delete":{"operationId":"city-alternative-name.destroy","tags":["CityAlternativeName"],"parameters":[{"name":"cityAlternativeName","in":"path","required":true,"description":"The city alternative name ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"}}}},"\/opinions":{"post":{"operationId":"cityOpinion.store","tags":["CityOpinion"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"rating":{"type":"number","minimum":1,"maximum":5},"content":{"type":"string"},"city_id":{"type":"number"}},"required":["rating","content","city_id"]}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}}},"\/opinions\/{cityOpinion}":{"patch":{"operationId":"cityOpinion.update","tags":["CityOpinion"],"parameters":[{"name":"cityOpinion","in":"path","required":true,"description":"The city opinion ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"rating":{"type":"number","minimum":1,"maximum":5},"content":{"type":"string"},"city_id":{"type":"number"}},"required":["rating","content","city_id"]}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}},"delete":{"operationId":"cityOpinion.destroy","tags":["CityOpinion"],"parameters":[{"name":"cityOpinion","in":"path","required":true,"description":"The city opinion ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"}}}},"\/{country}\/{city}":{"get":{"operationId":"cityPage.index","tags":["CityPage"],"parameters":[{"name":"country","in":"path","required":true,"description":"The country slug","schema":{"type":"string"}},{"name":"city","in":"path","required":true,"description":"The city slug","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"city":{"$ref":"#\/components\/schemas\/CityResource"},"providers":{"type":"array","items":{"$ref":"#\/components\/schemas\/ProviderResource"}},"cityOpinions":{"type":"array","items":{"$ref":"#\/components\/schemas\/CityOpinionResource"}}},"required":["city","providers","cityOpinions"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"}}}},"\/providers":{"get":{"operationId":"cityProvider.index","tags":["CityProvider"],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"cities":{"type":"array","items":{"$ref":"#\/components\/schemas\/CityResource"}},"providers":{"type":"array","items":{"$ref":"#\/components\/schemas\/ProviderResource"}},"countries":{"type":"array","items":{"$ref":"#\/components\/schemas\/CountryResource"}}},"required":["cities","providers","countries"]}}}}}}},"\/update-city-providers\/{city}":{"patch":{"operationId":"cityProvider.update","tags":["CityProvider"],"parameters":[{"name":"city","in":"path","required":true,"description":"The city ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"providerNames":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}}},"\/run-importers":{"post":{"operationId":"cityProvider.runImporters","tags":["CityProvider"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}}}},"\/delete-city-without-assigned-country\/{city}":{"delete":{"operationId":"cityWithoutAssignedCountry.destroy","tags":["CityWithoutAssignedCountry"],"parameters":[{"name":"city","in":"path","required":true,"description":"The city ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"}}}},"\/delete-all-cities-without-assigned-country":{"post":{"operationId":"cityWithoutAssignedCountry.destroyAll","tags":["CityWithoutAssignedCountry"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}}}}},"\/admin\/countries":{"get":{"operationId":"countries.index","tags":["Country"],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"countries":{"type":"array","items":{"$ref":"#\/components\/schemas\/CountryResource"}}},"required":["countries"]}}}}}},"post":{"operationId":"countries.store","tags":["Country"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"alternative_name":{"type":["string","null"]},"latitude":{"type":"number"},"longitude":{"type":"number"},"iso":{"type":"string"}},"required":["name","latitude","longitude","iso"]}}}},"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}}},"\/admin\/countries\/create":{"get":{"operationId":"countries.create","tags":["Country"]}},"\/admin\/countries\/{country}":{"get":{"operationId":"countries.show","tags":["Country"],"parameters":[{"name":"country","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"countries.update","tags":["Country"],"parameters":[{"name":"country","in":"path","required":true,"description":"The country ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"alternative_name":{"type":["string","null"]},"latitude":{"type":"number"},"longitude":{"type":"number"},"iso":{"type":"string"}},"required":["name","latitude","longitude","iso"]}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}},"delete":{"operationId":"countries.destroy","tags":["Country"],"parameters":[{"name":"country","in":"path","required":true,"description":"The country ID","schema":{"type":"integer"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"}}}},"\/admin\/countries\/{country}\/edit":{"get":{"operationId":"countries.edit","tags":["Country"],"parameters":[{"name":"country","in":"path","required":true,"schema":{"type":"string"}}]}},"\/admin\/dashboard":{"get":{"operationId":"dashboard.index","tags":["Dashboard"],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"usersCount":{"type":"string"},"citiesWithProvidersCount":{"type":"string"},"countriesWithCitiesWithProvidersCount":{"type":"string"},"providersCount":{"type":"string"},"providerCitiesCount":{"type":"string"},"providers":{"type":"array","items":{"$ref":"#\/components\/schemas\/ProviderResource"}}},"required":["usersCount","citiesWithProvidersCount","countriesWithCitiesWithProvidersCount","providersCount","providerCitiesCount","providers"]}}}}}},"post":{"operationId":"dashboard.store","tags":["Dashboard"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}}}},"\/admin\/dashboard\/create":{"get":{"operationId":"dashboard.create","tags":["Dashboard"]}},"\/admin\/dashboard\/{dashboard}":{"get":{"operationId":"dashboard.show","tags":["Dashboard"],"parameters":[{"name":"dashboard","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"dashboard.update","tags":["Dashboard"],"parameters":[{"name":"dashboard","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}}},"delete":{"operationId":"dashboard.destroy","tags":["Dashboard"],"parameters":[{"name":"dashboard","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}}}},"\/admin\/dashboard\/{dashboard}\/edit":{"get":{"operationId":"dashboard.edit","tags":["Dashboard"],"parameters":[{"name":"dashboard","in":"path","required":true,"schema":{"type":"string"}}]}},"\/favorites":{"post":{"operationId":"favorites.store","tags":["Favorites"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"anyOf":[{"type":"object","properties":{"message":{"type":"string","example":"City removed from favorites."}},"required":["message"]},{"type":"object","properties":{"message":{"type":"string","example":"City added to favorites."}},"required":["message"]}]}}}}}}},"\/favorites\/{cityId}":{"get":{"operationId":"favorites.check","tags":["Favorites"],"parameters":[{"name":"cityId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"boolean"}}}}}}},"\/favorite-cities":{"get":{"operationId":"favorites.index","tags":["Favorites"],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"cities":{"type":"string"},"providers":{"type":"array","items":{"$ref":"#\/components\/schemas\/ProviderResource"}}},"required":["cities","providers"]}}}}}}},"\/admin\/importers":{"get":{"operationId":"importInfo.index","tags":["ImportInfo"],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"importInfo":{"type":"array","items":{"$ref":"#\/components\/schemas\/ImportInfoResource"}},"codes":{"type":"string"},"providers":{"type":"string"}},"required":["importInfo","codes","providers"]}}}}}}},"\/admin\/providers":{"get":{"operationId":"providers.index","tags":["Provider"],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"providers":{"type":"array","items":{"$ref":"#\/components\/schemas\/ProviderResource"}}},"required":["providers"]}}}}}},"post":{"operationId":"providers.store","tags":["Provider"],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"color":{"type":"string"},"file":{"type":"string"}},"required":["name","color","file"]}}}},"responses":{"201":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}}},"\/admin\/providers\/create":{"get":{"operationId":"providers.create","tags":["Provider"]}},"\/admin\/providers\/{provider}":{"get":{"operationId":"providers.show","tags":["Provider"],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"providers.update","tags":["Provider"],"parameters":[{"name":"provider","in":"path","required":true,"description":"The provider name","schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"color":{"type":"string"},"file":{"type":"string"}},"required":["name","color","file"]}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"},"422":{"$ref":"#\/components\/responses\/ValidationException"},"403":{"$ref":"#\/components\/responses\/AuthorizationException"}}},"delete":{"operationId":"providers.destroy","tags":["Provider"],"parameters":[{"name":"provider","in":"path","required":true,"description":"The provider name","schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"$ref":"#\/components\/responses\/ModelNotFoundException"}}}},"\/admin\/providers\/{provider}\/edit":{"get":{"operationId":"providers.edit","tags":["Provider"],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}}]}},"\/images\/providers\/{filename}":{"get":{"operationId":"provider.showLogo","tags":["Provider"],"parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application\/json":{"schema":{"type":"object","properties":{"image":{"type":"string"},"mime_type":{"type":"string","example":"image\/png"}},"required":["image","mime_type"]}}}}}}}},"components":{"schemas":{"CityAlternativeName":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"city_id":{"type":"integer"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}},"required":["id","name","city_id","created_at","updated_at"],"title":"CityAlternativeName"},"CityOpinion":{"type":"object","properties":{"id":{"type":"integer"},"content":{"type":"string"},"rating":{"type":"integer"},"city_id":{"type":"integer"},"user_id":{"type":"integer"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}},"required":["id","content","rating","city_id","user_id","created_at","updated_at"],"title":"CityOpinion"},"CityOpinionResource":{"type":"object","properties":{"id":{"type":"integer"},"rating":{"type":"integer"},"content":{"type":"string"},"updated_at":{"type":["string","null"],"format":"date-time"},"user":{"$ref":"#\/components\/schemas\/User"}},"required":["id","rating","content","updated_at","user"],"title":"CityOpinionResource"},"CityProvider":{"type":"object","properties":{"id":{"type":"integer"},"provider_name":{"type":"string"},"city_id":{"type":"integer"},"created_by":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}},"required":["id","provider_name","city_id","created_by","created_at","updated_at"],"title":"CityProvider"},"CityResource":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"latitude":{"type":["string","null"]},"longitude":{"type":["string","null"]},"city_alternative_names":{"type":"array","items":{"$ref":"#\/components\/schemas\/CityAlternativeName"}},"cityProviders":{"type":"array","items":{"$ref":"#\/components\/schemas\/CityProvider"}},"country":{"$ref":"#\/components\/schemas\/Country"},"cityOpinions":{"type":"array","items":{"$ref":"#\/components\/schemas\/CityOpinion"}}},"required":["id","name","slug","latitude","longitude","city_alternative_names","cityProviders","country","cityOpinions"],"title":"CityResource"},"CityWithoutAssignedCountryResource":{"type":"object","properties":{"id":{"type":"integer"},"city_name":{"type":"string"},"country_name":{"type":"string"}},"required":["id","city_name","country_name"],"title":"CityWithoutAssignedCountryResource"},"Country":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"alternative_name":{"type":["string","null"]},"latitude":{"type":["string","null"]},"longitude":{"type":["string","null"]},"iso":{"type":"string"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}},"required":["id","name","slug","alternative_name","latitude","longitude","iso","created_at","updated_at"],"title":"Country"},"CountryResource":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"alternative_name":{"type":["string","null"]},"latitude":{"type":["string","null"]},"longitude":{"type":["string","null"]},"iso":{"type":"string"}},"required":["id","name","slug","alternative_name","latitude","longitude","iso"],"title":"CountryResource"},"ImportInfoResource":{"type":"string","title":"ImportInfoResource"},"ProviderResource":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":["string","null"]},"android_url":{"type":["string","null"]},"ios_url":{"type":["string","null"]},"color":{"type":"string"}},"required":["name","url","android_url","ios_url","color"],"title":"ProviderResource"},"User":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string"},"email_verified_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}},"required":["id","name","email","email_verified_at","created_at","updated_at"],"title":"User"}},"responses":{"ValidationException":{"description":"Validation error","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Errors overview."},"errors":{"type":"object","description":"A detailed description of each field that failed validation.","additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["message","errors"]}}}},"AuthorizationException":{"description":"Authorization error","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error overview."}},"required":["message"]}}}},"ModelNotFoundException":{"description":"Not found","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"Error overview."}},"required":["message"]}}}}}}}
\ No newline at end of file
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 3e4d6ff7..bfe40033 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -16,6 +16,7 @@ protected function schedule(Schedule $schedule): void
$service = new DataImporterService();
$service->run("server");
})->monthly();
+ $schedule->command("sanctum:prune-expired --hours=24")->daily();
}
protected function commands(): void
diff --git a/app/Http/Controllers/Admin/ProviderController.php b/app/Http/Controllers/Admin/ProviderController.php
new file mode 100644
index 00000000..dc740e1d
--- /dev/null
+++ b/app/Http/Controllers/Admin/ProviderController.php
@@ -0,0 +1,84 @@
+search("name")
+ ->orderByName()
+ ->orderByTimeRange()
+ ->paginate(self::ITEMS_PER_PAGE)
+ ->withQueryString();
+
+ return Inertia::render("Providers/Index", [
+ "providers" => ProviderResource::collection($providers),
+ ]);
+ }
+
+ public function store(ProviderRequest $request): void
+ {
+ Provider::query()->create($request->validated());
+
+ $fileName = $this->getFilename($request);
+ $fileContents = $request->file("file")->get();
+
+ Storage::disk("public")->put("providers/" . $fileName, $fileContents);
+ }
+
+ public function update(ProviderRequest $request, Provider $provider): void
+ {
+ $provider->update($request->validated());
+
+ $imageName = $this->getFilename($request);
+ $storageImagePath = storage_path("app/public/providers/" . $imageName);
+ $resourceImagePath = resource_path("providers/" . $imageName);
+ $imageContents = $request->file("file")->get();
+
+ if (file_exists($resourceImagePath)) {
+ file_put_contents($resourceImagePath, $imageContents);
+ Storage::put($storageImagePath, file_get_contents($imageContents));
+ } else {
+ Storage::put($storageImagePath, file_get_contents($imageContents));
+ }
+ }
+
+ public function destroy(Provider $provider): void
+ {
+ $provider->delete();
+ $imagePath = storage_path("app/public/providers/" . strtolower($provider["name"]) . ".png");
+ File::delete($imagePath);
+ }
+
+ public function showLogo(string $filename): InertiaResponse
+ {
+ $imagePath = storage_path("app/public/providers/" . $filename);
+
+ if (!file_exists($imagePath)) {
+ $imagePath = storage_path("app/public/providers/unknown.png");
+ }
+
+ return response(file_get_contents($imagePath), 200, ["Content-Type" => "image/png"]);
+ }
+
+ public function getFilename(ProviderRequest $request): string
+ {
+ return strtolower($request["name"]) . "." . $request->file("file")->getClientOriginalExtension();
+ }
+}
diff --git a/app/Http/Controllers/Api/Admin/CityAlternativeNameController.php b/app/Http/Controllers/Api/Admin/CityAlternativeNameController.php
new file mode 100644
index 00000000..2f119649
--- /dev/null
+++ b/app/Http/Controllers/Api/Admin/CityAlternativeNameController.php
@@ -0,0 +1,27 @@
+create($request->validated());
+
+ return response()->json(["message" => __("City alternative name created successfully.")], 201);
+ }
+
+ public function destroy(CityAlternativeName $cityAlternativeName): JsonResponse
+ {
+ $cityAlternativeName->delete();
+
+ return response()->json(["message" => __("City alternative name deleted successfully.")]);
+ }
+}
diff --git a/app/Http/Controllers/Api/Admin/CityController.php b/app/Http/Controllers/Api/Admin/CityController.php
new file mode 100644
index 00000000..d12cf59f
--- /dev/null
+++ b/app/Http/Controllers/Api/Admin/CityController.php
@@ -0,0 +1,67 @@
+with("cityAlternativeNames", "cityProviders", "country")
+ ->orderByProvidersCount()
+ ->searchCityNames()
+ ->orderByName()
+ ->orderByCountry()
+ ->orderByTimeRange()
+ ->orderByEmptyCoordinates()
+ ->paginate(15)
+ ->withQueryString();
+
+ $providers = Provider::all();
+ $countries = Country::all();
+
+ $citiesWithoutAssignedCountry = CityWithoutAssignedCountry::all();
+
+ return response()->json([
+ "cities" => CityResource::collection($cities),
+ "providers" => ProviderResource::collection($providers),
+ "countries" => CountryResource::collection($countries),
+ "citiesWithoutAssignedCountry" => CityWithoutAssignedCountryResource::collection($citiesWithoutAssignedCountry),
+ ]);
+ }
+
+ public function store(CityRequest $request): JsonResponse
+ {
+ City::query()->create($request->validated());
+
+ return response()->json(["message" => __("City created successfully.")], 201);
+ }
+
+ public function update(CityRequest $request, City $city): JsonResponse
+ {
+ $city->update($request->validated());
+
+ return response()->json(["message" => __("City updated successfully.")]);
+ }
+
+ public function destroy(City $city): JsonResponse
+ {
+ $city->delete();
+
+ return response()->json(["message" => __("City deleted successfully.")]);
+ }
+}
diff --git a/app/Http/Controllers/Api/Admin/CountryController.php b/app/Http/Controllers/Api/Admin/CountryController.php
new file mode 100644
index 00000000..3b8246c9
--- /dev/null
+++ b/app/Http/Controllers/Api/Admin/CountryController.php
@@ -0,0 +1,49 @@
+search("name")
+ ->orderByName()
+ ->orderByTimeRange()
+ ->paginate(15)
+ ->withQueryString();
+
+ return response()->json([
+ "countries" => CountryResource::collection($countries),
+ ]);
+ }
+
+ public function store(CountryRequest $request): JsonResponse
+ {
+ Country::query()->create($request->validated());
+
+ return response()->json(["message" => __("Country created successfully.")], 201);
+ }
+
+ public function update(CountryRequest $request, Country $country): JsonResponse
+ {
+ $country->update($request->validated());
+
+ return response()->json(["message" => __("Country updated successfully.")]);
+ }
+
+ public function destroy(Country $country): JsonResponse
+ {
+ $country->delete();
+
+ return response()->json(["message" => __("Country deleted successfully.")]);
+ }
+}
diff --git a/app/Http/Controllers/Api/Admin/ImportInfoController.php b/app/Http/Controllers/Api/Admin/ImportInfoController.php
new file mode 100644
index 00000000..166cac0a
--- /dev/null
+++ b/app/Http/Controllers/Api/Admin/ImportInfoController.php
@@ -0,0 +1,32 @@
+with("importInfoDetails")
+ ->orderByDesc("created_at")
+ ->paginate(15)
+ ->withQueryString();
+ $codes = Code::all();
+ $providers = Provider::all();
+
+ return response()->json([
+ "importInfo" => ImportInfoResource::collection($importInfo),
+ "codes" => $codes,
+ "providers" => $providers,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Api/Admin/ProviderController.php b/app/Http/Controllers/Api/Admin/ProviderController.php
new file mode 100644
index 00000000..7f3f59a9
--- /dev/null
+++ b/app/Http/Controllers/Api/Admin/ProviderController.php
@@ -0,0 +1,94 @@
+search("name")
+ ->orderByName()
+ ->orderByTimeRange()
+ ->paginate(self::ITEMS_PER_PAGE)
+ ->withQueryString();
+
+ return response()->json([
+ "providers" => ProviderResource::collection($providers),
+ ]);
+ }
+
+ public function store(ProviderRequest $request): JsonResponse
+ {
+ Provider::query()->create($request->validated());
+
+ $fileName = $this->getFilename($request->name, $request->file("file"));
+ $fileContents = $request->file("file")->get();
+
+ Storage::disk("public")->put("providers/" . $fileName, $fileContents);
+
+ return response()->json(["message" => __("Provider created successfully.")], 201);
+ }
+
+ public function update(ProviderRequest $request, Provider $provider): JsonResponse
+ {
+ $provider->update($request->validated());
+
+ $imageName = $this->getFilename($request->name, $request->file("file"));
+ $storageImagePath = storage_path("app/public/providers/" . $imageName);
+ $resourceImagePath = resource_path("providers/" . $imageName);
+ $imageContents = $request->file("file")->get();
+
+ if (file_exists($resourceImagePath)) {
+ file_put_contents($resourceImagePath, $imageContents);
+ Storage::put($storageImagePath, file_get_contents($imageContents));
+ } else {
+ Storage::put($storageImagePath, file_get_contents($imageContents));
+ }
+
+ return response()->json(["message" => __("Provider updated successfully.")]);
+ }
+
+ public function destroy(Provider $provider): JsonResponse
+ {
+ $provider->delete();
+ $imagePath = storage_path("app/public/providers/" . strtolower($provider["name"]) . ".png");
+ File::delete($imagePath);
+
+ return response()->json(["message" => __("Provider deleted successfully.")]);
+ }
+
+ public function showLogo(string $filename): JsonResponse
+ {
+ $imagePath = storage_path("app/public/providers/" . $filename);
+
+ if (!file_exists($imagePath)) {
+ $imagePath = storage_path("app/public/providers/unknown.png");
+ }
+
+ $imageData = base64_encode(file_get_contents($imagePath));
+
+ return response()->json([
+ "image" => $imageData,
+ "mime_type" => "image/png",
+ ]);
+ }
+
+ private function getFilename(string $name, UploadedFile $file): string
+ {
+ return strtolower($name) . "." . $file->getClientOriginalExtension();
+ }
+}
diff --git a/app/Http/Controllers/Api/AuthController.php b/app/Http/Controllers/Api/AuthController.php
new file mode 100644
index 00000000..1225cc83
--- /dev/null
+++ b/app/Http/Controllers/Api/AuthController.php
@@ -0,0 +1,116 @@
+ $request->input("name"),
+ "email" => $request->input("email"),
+ "password" => Hash::make($request->input("password")),
+ ]);
+
+ return response()->json([
+ "message" => __("User created."),
+ ]);
+ }
+
+ public function login(LoginRequest $request): JsonResponse
+ {
+ $remember = $request->boolean("remember", false);
+
+ if (Auth::attempt([
+ "email" => $request->email,
+ "password" => $request->password,
+ ], $remember)) {
+ $user = Auth::user();
+ $user_id = (string)Auth::id();
+
+ $token_abilities = $this->getUserAbilities($user);
+
+ $token = $user->createToken($user_id, $token_abilities)->plainTextToken;
+
+ return response()->json([
+ $token_abilities,
+ "access_token" => $token,
+ ]);
+ }
+
+ return response()->json([
+ "message" => __("Invalid credentials."),
+ ], Response::HTTP_UNAUTHORIZED);
+ }
+
+ public function logout(Request $request): JsonResponse
+ {
+ $request->user()->currentAccessToken()->delete();
+
+ return response()->json([
+ "message" => __("Logged out."),
+ ]);
+ }
+
+ public function redirectToProvider(string $provider): JsonResponse
+ {
+ $redirect_url = Socialite::driver($provider)->stateless()->redirect()->getTargetUrl();
+
+ return response()->json([
+ "redirect_url" => $redirect_url,
+ ]);
+ }
+
+ public function handleProviderRedirect(string $provider): JsonResponse
+ {
+ try {
+ $user = Socialite::driver($provider)->user();
+
+ $user = User::firstOrCreate([
+ "email" => $user->getEmail(),
+ ], [
+ "name" => $user->getName(),
+ "password" => Hash::make(Str::password(8)),
+ ]);
+ $token_abilities = $this->getUserAbilities($user);
+
+ $user_id = $user->id->toString();
+ $token = $user->createToken($user_id, $token_abilities)->plainTextToken;
+
+ return response()->json([
+ "access_token" => $token,
+ ]);
+ } catch (Exception $e) {
+ return response()->json([
+ "message" => __("Login failed."),
+ ]);
+ }
+ }
+
+ private function getUserAbilities(Authenticatable $user): array
+ {
+ $abilities = [];
+
+ if ($user->isAdmin()) {
+ $abilities[] = "HasAdminRole";
+ }
+
+ return $abilities;
+ }
+}
diff --git a/app/Http/Controllers/Api/ChangeLocaleController.php b/app/Http/Controllers/Api/ChangeLocaleController.php
new file mode 100644
index 00000000..408970cb
--- /dev/null
+++ b/app/Http/Controllers/Api/ChangeLocaleController.php
@@ -0,0 +1,27 @@
+setLocale($locale);
+
+ return response()->json([
+ "message" => __("Language has been changed."),
+ ]);
+ }
+
+ return response()->json([
+ "message" => __("Error changing the language."),
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Api/CityOpinionController.php b/app/Http/Controllers/Api/CityOpinionController.php
new file mode 100644
index 00000000..7565e043
--- /dev/null
+++ b/app/Http/Controllers/Api/CityOpinionController.php
@@ -0,0 +1,45 @@
+user()
+ ->cityOpinions()
+ ->create($request->validated());
+
+ return response()->json([
+ "message" => __("Opinion added successfully."),
+ ]);
+ }
+
+ public function update(CityOpinionRequest $request, CityOpinion $cityOpinion): JsonResponse
+ {
+ $opinion = $request->validated();
+ $opinion["user_id"] = $request->user()->id;
+
+ $cityOpinion->update($opinion);
+
+ return response()->json([
+ "message" => __("Opinion edited successfully."),
+ ]);
+ }
+
+ public function destroy(CityOpinion $cityOpinion): JsonResponse
+ {
+ $cityOpinion->delete();
+
+ return response()->json([
+ "message" => __("Opinion removed successfully!"),
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Api/CityPageController.php b/app/Http/Controllers/Api/CityPageController.php
new file mode 100644
index 00000000..5e35f2e9
--- /dev/null
+++ b/app/Http/Controllers/Api/CityPageController.php
@@ -0,0 +1,36 @@
+whereBelongsTo($country)
+ ->where("id", $city->id)
+ ->with("cityProviders", "country")
+ ->firstOrFail();
+
+ $providers = Provider::all();
+
+ $cityOpinions = $selectedCity->cityOpinions()->with(["user"])->orderByDesc("updated_at")->paginate("4")->withQueryString();
+
+ return response()->json([
+ "city" => new CityResource($selectedCity),
+ "providers" => ProviderResource::collection($providers),
+ "cityOpinions" => CityOpinionResource::collection($cityOpinions),
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Api/CityProviderController.php b/app/Http/Controllers/Api/CityProviderController.php
new file mode 100644
index 00000000..d4990c6a
--- /dev/null
+++ b/app/Http/Controllers/Api/CityProviderController.php
@@ -0,0 +1,65 @@
+has("cityProviders")
+ ->whereHas("cityProviders", fn($query): Builder => $query->whereNotNull("latitude")->whereNotNull("longitude"))
+ ->get()
+ ->sortBy("name")
+ ->sortByDesc(fn(City $city): int => $city->cityProviders->count()),
+ );
+
+ $providers = ProviderResource::collection(Provider::all()->sortBy("name"));
+ $countries = Country::whereHas("cities.cityProviders")
+ ->with(["cities.cityAlternativeNames", "cities.cityProviders"])
+ ->get()
+ ->sortBy("name");
+
+ $countries = CountryResource::collection($countries);
+
+ return response()->json([
+ "cities" => $cities,
+ "providers" => $providers,
+ "countries" => $countries,
+ ]);
+ }
+
+ public function update(CityProviderService $service, CityProviderRequest $request, City $city): JsonResponse
+ {
+ $service->updateProvider($request->providerNames, $city);
+
+ return response()->json([
+ "message" => __("City providers updated successfully."),
+ ]);
+ }
+
+ public function runImporters(DataImporterService $service): JsonResponse
+ {
+ $service->run();
+
+ return response()->json([
+ "message" => __("Importers started."),
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Api/CityWithoutAssignedCountryController.php b/app/Http/Controllers/Api/CityWithoutAssignedCountryController.php
new file mode 100644
index 00000000..a3068ecd
--- /dev/null
+++ b/app/Http/Controllers/Api/CityWithoutAssignedCountryController.php
@@ -0,0 +1,30 @@
+delete();
+
+ return response()->json([
+ "message" => __("City removed successfully!"),
+ ]);
+ }
+
+ public function destroyAll(): JsonResponse
+ {
+ CityWithoutAssignedCountry::query()->delete();
+
+ return response()->json([
+ "message" => __("All cities removed successfully!"),
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Api/Controller.php b/app/Http/Controllers/Api/Controller.php
new file mode 100644
index 00000000..5029ee9f
--- /dev/null
+++ b/app/Http/Controllers/Api/Controller.php
@@ -0,0 +1,15 @@
+get();
+ $citiesWithProvidersCount = $citiesWithProviders->count();
+
+ $citiesWithProvidersIds = $citiesWithProviders->pluck("city_id");
+ $countriesWithCitiesWithProvidersIds = City::whereIn("id", $citiesWithProvidersIds)->distinct()->pluck("country_id");
+ $countriesWithCitiesWithProvidersCount = Country::whereIn("id", $countriesWithCitiesWithProvidersIds)->count();
+
+ $providersCount = Provider::count();
+
+ $providerCitiesCount = $citiesWithProviders
+ ->pluck("provider_name")
+ ->countBy()
+ ->map(function (int $count, string $name): array {
+ return [
+ "name" => $name,
+ "count" => $count,
+ ];
+ })
+ ->sortByDesc("count")
+ ->values()
+ ->all();
+
+ $providers = ProviderResource::collection(Provider::all());
+
+ return response()->json([
+ "usersCount" => $usersCount,
+ "citiesWithProvidersCount" => $citiesWithProvidersCount,
+ "countriesWithCitiesWithProvidersCount" => $countriesWithCitiesWithProvidersCount,
+ "providersCount" => $providersCount,
+ "providerCitiesCount" => $providerCitiesCount,
+ "providers" => $providers,
+ ]);
+ }
+}
diff --git a/app/Http/Controllers/Api/FavoritesController.php b/app/Http/Controllers/Api/FavoritesController.php
new file mode 100644
index 00000000..38b49116
--- /dev/null
+++ b/app/Http/Controllers/Api/FavoritesController.php
@@ -0,0 +1,63 @@
+user();
+
+ $favoriteCities = $user->favorites()->with(["city.country", "city.cityProviders"])->get();
+
+ $cities = $favoriteCities->map(fn($favorite) => CityResource::make($favorite->city));
+
+ $providers = Provider::all();
+
+ return response()->json([
+ "cities" => $cities,
+ "providers" => ProviderResource::collection($providers),
+ ]);
+ }
+
+ public function store(Request $request): JsonResponse
+ {
+ $cityId = $request->input("city_id");
+ $userId = $request->user()?->id;
+
+ $favorite = Favorites::firstOrCreate([
+ "user_id" => $userId,
+ "city_id" => $cityId,
+ ]);
+
+ if ($favorite->wasRecentlyCreated) {
+ return response()->json([
+ "message" => "City added to favorites.",
+ ]);
+ }
+ $favorite->delete();
+
+ return response()->json([
+ "message" => "City removed from favorites.",
+ ]);
+ }
+
+ public function check(Request $request, int $cityId): bool
+ {
+ $userId = $request->user()->id;
+
+ return Favorites::where("user_id", $userId)
+ ->where("city_id", $cityId)
+ ->exists();
+ }
+}
diff --git a/app/Http/Controllers/FavoritesController.php b/app/Http/Controllers/FavoritesController.php
index e3aa021d..8314b4ad 100644
--- a/app/Http/Controllers/FavoritesController.php
+++ b/app/Http/Controllers/FavoritesController.php
@@ -20,7 +20,10 @@ public function index(): Response
{
$user = Auth::user();
- $favoriteCities = $user->favorites()->with(["city.country", "city.cityProviders"])->get();
+ $favoriteCities = $user
+ ->favorites()
+ ->with(["city.country", "city.cityProviders"])
+ ->get();
$cities = $favoriteCities->map(fn($favorite) => CityResource::make($favorite->city));
@@ -37,9 +40,10 @@ public function store(Request $request, Session $session): void
$cityId = $request->input("city_id");
$userId = $request->user()?->id;
- $favorite = Favorites::firstOrCreate(
- ["user_id" => $userId, "city_id" => $cityId],
- );
+ $favorite = Favorites::firstOrCreate([
+ "user_id" => $userId,
+ "city_id" => $cityId,
+ ]);
if ($favorite->wasRecentlyCreated) {
$session->flash("message", "City added to favorites.");
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index f1e055a7..27b96873 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -29,6 +29,9 @@
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
+use Laravel\Sanctum\Http\Middleware\CheckAbilities;
+use Laravel\Sanctum\Http\Middleware\CheckForAnyAbility;
+use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;
use Spatie\Permission\Middleware\RoleMiddleware;
class Kernel extends HttpKernel
@@ -69,6 +72,7 @@ class Kernel extends HttpKernel
"api" => [
ThrottleRequests::class . ":api",
SubstituteBindings::class,
+ EnsureFrontendRequestsAreStateful::class,
],
];
@@ -91,5 +95,7 @@ class Kernel extends HttpKernel
"throttle" => ThrottleRequests::class,
"verified" => EnsureEmailIsVerified::class,
"role" => RoleMiddleware::class,
+ "ability" => CheckAbilities::class,
+ "any-ability" => CheckForAnyAbility::class,
];
}
diff --git a/app/Http/Requests/ProviderRequest.php b/app/Http/Requests/ProviderRequest.php
new file mode 100644
index 00000000..9c9855a5
--- /dev/null
+++ b/app/Http/Requests/ProviderRequest.php
@@ -0,0 +1,35 @@
+ ["required", "string", "regex:/^[A-Z\s]/", "max:100", $this->uniqueRuleForProvider("name")],
+ "color" => ["required", "string", "size:7"],
+ "file" => [
+ "required",
+ "mimes:png",
+ File::image()
+ ->max(config("app.provider_logo_size"))
+ ->dimensions(Rule::dimensions()->width(config("app.provider_logo_width"))->height(config("app.provider_logo_height"))),
+ ],
+ ];
+ }
+
+ protected function uniqueRuleForProvider(string $column): Unique
+ {
+ $currentProviderId = $this->route(param: "provider");
+
+ return Rule::unique(table: "providers", column: $column)->ignore($currentProviderId);
+ }
+}
diff --git a/app/Importers/BinBinDataImporter.php b/app/Importers/BinBinDataImporter.php
index 7c9b2803..85c6d5f5 100644
--- a/app/Importers/BinBinDataImporter.php
+++ b/app/Importers/BinBinDataImporter.php
@@ -65,7 +65,6 @@ public function transform(): void
$existingCityProviders[] = $provider;
}
}
-
$this->deleteMissingProviders(self::getProviderName(), $existingCityProviders);
}
}
diff --git a/app/Models/Provider.php b/app/Models/Provider.php
index cf5841b6..85011719 100644
--- a/app/Models/Provider.php
+++ b/app/Models/Provider.php
@@ -4,6 +4,8 @@
namespace App\Models;
+use App\QueryBuilders\SortQuery;
+use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
/**
@@ -16,9 +18,19 @@ class Provider extends Model
public $incrementing = false;
protected $primaryKey = "name";
protected $keyType = "string";
+ protected $fillable = [
+ "name",
+ "url",
+ "color",
+ ];
- public function cityProvider()
+ public static function query(): Builder
{
- return $this->belongsTo(CityProvider::class);
+ return parent::query();
+ }
+
+ public function newEloquentBuilder($query): SortQuery
+ {
+ return new SortQuery($query);
}
}
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index fffe88be..2d9544a4 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -6,6 +6,8 @@
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\ServiceProvider;
+use Laravel\Sanctum\PersonalAccessToken;
+use Laravel\Sanctum\Sanctum;
class AppServiceProvider extends ServiceProvider
{
@@ -26,5 +28,6 @@ public function register(): void
public function boot(): void
{
JsonResource::withoutWrapping();
+ Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
}
}
diff --git a/composer.json b/composer.json
index ffeda934..d80b50b7 100644
--- a/composer.json
+++ b/composer.json
@@ -9,6 +9,7 @@
"ext-dom": "*",
"ext-pdo": "*",
"guzzlehttp/guzzle": "^7.8",
+
"inertiajs/inertia-laravel": "^0.6.9",
"laravel/framework": "^10.13.0",
"laravel/sanctum": "^3.2.5",
diff --git a/composer.lock b/composer.lock
index f33ad918..1e0af277 100644
--- a/composer.lock
+++ b/composer.lock
@@ -5,6 +5,7 @@
"This file is @generated automatically"
],
"content-hash": "f81ee215369d6106663203f64d141543",
+
"packages": [
{
"name": "brick/math",
@@ -132,23 +133,23 @@
},
{
"name": "clue/stream-filter",
- "version": "v1.6.0",
+ "version": "v1.7.0",
"source": {
"type": "git",
"url": "https://github.com/clue/stream-filter.git",
- "reference": "d6169430c7731d8509da7aecd0af756a5747b78e"
+ "reference": "049509fef80032cb3f051595029ab75b49a3c2f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e",
- "reference": "d6169430c7731d8509da7aecd0af756a5747b78e",
+ "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7",
+ "reference": "049509fef80032cb3f051595029ab75b49a3c2f7",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
@@ -170,7 +171,7 @@
}
],
"description": "A simple and modern approach to stream filtering in PHP",
- "homepage": "https://github.com/clue/php-stream-filter",
+ "homepage": "https://github.com/clue/stream-filter",
"keywords": [
"bucket brigade",
"callback",
@@ -182,7 +183,7 @@
],
"support": {
"issues": "https://github.com/clue/stream-filter/issues",
- "source": "https://github.com/clue/stream-filter/tree/v1.6.0"
+ "source": "https://github.com/clue/stream-filter/tree/v1.7.0"
},
"funding": [
{
@@ -194,7 +195,81 @@
"type": "github"
}
],
- "time": "2022-02-21T13:15:14+00:00"
+ "time": "2023-12-20T15:40:13+00:00"
+ },
+ {
+ "name": "dedoc/scramble",
+ "version": "v0.9.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dedoc/scramble.git",
+ "reference": "6280da6809eecaa03243d726b957cc174b1ccb70"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dedoc/scramble/zipball/6280da6809eecaa03243d726b957cc174b1ccb70",
+ "reference": "6280da6809eecaa03243d726b957cc174b1ccb70",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^10.0|^11.0",
+ "nikic/php-parser": "^5.0",
+ "php": "^8.1",
+ "phpstan/phpdoc-parser": "^1.0",
+ "spatie/laravel-package-tools": "^1.9.2"
+ },
+ "require-dev": {
+ "laravel/pint": "^v1.1.0",
+ "nunomaduro/collision": "^7.0|^8.0",
+ "orchestra/testbench": "^8.0|^9.0",
+ "pestphp/pest": "^2.34",
+ "pestphp/pest-plugin-laravel": "^2.3",
+ "phpunit/phpunit": "^10.5",
+ "spatie/pest-plugin-snapshots": "^2.1"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Dedoc\\Scramble\\ScrambleServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dedoc\\Scramble\\": "src",
+ "Dedoc\\Scramble\\Database\\Factories\\": "database/factories"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Lytvynenko",
+ "email": "litvinenko95@gmail.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "Automatic generation of API documentation for Laravel applications.",
+ "homepage": "https://github.com/dedoc/scramble",
+ "keywords": [
+ "documentation",
+ "laravel",
+ "openapi"
+ ],
+ "support": {
+ "issues": "https://github.com/dedoc/scramble/issues",
+ "source": "https://github.com/dedoc/scramble/tree/v0.9.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/romalytvynenko",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-11T19:27:28+00:00"
},
{
"name": "dflydev/dot-access-data",
@@ -273,16 +348,16 @@
},
{
"name": "doctrine/inflector",
- "version": "2.0.8",
+ "version": "2.0.9",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff"
+ "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
- "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65",
+ "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65",
"shasum": ""
},
"require": {
@@ -344,7 +419,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.8"
+ "source": "https://github.com/doctrine/inflector/tree/2.0.9"
},
"funding": [
{
@@ -360,7 +435,7 @@
"type": "tidelift"
}
],
- "time": "2023-06-16T13:40:37+00:00"
+ "time": "2024-01-15T18:05:13+00:00"
},
{
"name": "doctrine/lexer",
@@ -1302,20 +1377,20 @@
},
{
"name": "laravel/framework",
- "version": "v10.39.0",
+ "version": "v10.43.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "114926b07bfb5fbf2545c03aa2ce5c8c37be650c"
+ "reference": "4f7802dfc9993cb57cf69615491ce1a7eb2e9529"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/114926b07bfb5fbf2545c03aa2ce5c8c37be650c",
- "reference": "114926b07bfb5fbf2545c03aa2ce5c8c37be650c",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/4f7802dfc9993cb57cf69615491ce1a7eb2e9529",
+ "reference": "4f7802dfc9993cb57cf69615491ce1a7eb2e9529",
"shasum": ""
},
"require": {
- "brick/math": "^0.9.3|^0.10.2|^0.11",
+ "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12",
"composer-runtime-api": "^2.2",
"doctrine/inflector": "^2.0.5",
"dragonmantank/cron-expression": "^3.3.2",
@@ -1503,20 +1578,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2023-12-27T14:26:28+00:00"
+ "time": "2024-01-30T16:25:02+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.1.14",
+ "version": "v0.1.15",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "2219fa9c4b944add1e825c3bdb8ecae8bc503bc6"
+ "reference": "d814a27514d99b03c85aa42b22cfd946568636c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/2219fa9c4b944add1e825c3bdb8ecae8bc503bc6",
- "reference": "2219fa9c4b944add1e825c3bdb8ecae8bc503bc6",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/d814a27514d99b03c85aa42b22cfd946568636c1",
+ "reference": "d814a27514d99b03c85aa42b22cfd946568636c1",
"shasum": ""
},
"require": {
@@ -1558,22 +1633,22 @@
],
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.1.14"
+ "source": "https://github.com/laravel/prompts/tree/v0.1.15"
},
- "time": "2023-12-27T04:18:09+00:00"
+ "time": "2023-12-29T22:37:42+00:00"
},
{
"name": "laravel/sanctum",
- "version": "v3.3.2",
+ "version": "v3.3.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/sanctum.git",
- "reference": "e1a272893bec13cf135627f7e156030b3afe1e60"
+ "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sanctum/zipball/e1a272893bec13cf135627f7e156030b3afe1e60",
- "reference": "e1a272893bec13cf135627f7e156030b3afe1e60",
+ "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5",
+ "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5",
"shasum": ""
},
"require": {
@@ -1626,7 +1701,7 @@
"issues": "https://github.com/laravel/sanctum/issues",
"source": "https://github.com/laravel/sanctum"
},
- "time": "2023-11-03T13:42:14+00:00"
+ "time": "2023-12-19T18:44:48+00:00"
},
{
"name": "laravel/serializable-closure",
@@ -1760,25 +1835,25 @@
},
{
"name": "laravel/tinker",
- "version": "v2.8.2",
+ "version": "v2.9.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/tinker.git",
- "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3"
+ "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/tinker/zipball/b936d415b252b499e8c3b1f795cd4fc20f57e1f3",
- "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe",
+ "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe",
"shasum": ""
},
"require": {
- "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0",
- "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0",
+ "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
+ "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
+ "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0",
"php": "^7.2.5|^8.0",
- "psy/psysh": "^0.10.4|^0.11.1",
- "symfony/var-dumper": "^4.3.4|^5.0|^6.0"
+ "psy/psysh": "^0.11.1|^0.12.0",
+ "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0"
},
"require-dev": {
"mockery/mockery": "~1.3.3|^1.4.2",
@@ -1786,13 +1861,10 @@
"phpunit/phpunit": "^8.5.8|^9.3.3"
},
"suggest": {
- "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)."
+ "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)."
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- },
"laravel": {
"providers": [
"Laravel\\Tinker\\TinkerServiceProvider"
@@ -1823,9 +1895,9 @@
],
"support": {
"issues": "https://github.com/laravel/tinker/issues",
- "source": "https://github.com/laravel/tinker/tree/v2.8.2"
+ "source": "https://github.com/laravel/tinker/tree/v2.9.0"
},
- "time": "2023-08-15T14:27:00+00:00"
+ "time": "2024-01-04T16:10:04+00:00"
},
{
"name": "league/commonmark",
@@ -2017,16 +2089,16 @@
},
{
"name": "league/flysystem",
- "version": "3.23.0",
+ "version": "3.23.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc"
+ "reference": "199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc",
- "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e",
+ "reference": "199e1aebbe3e62bd39f4d4fc8c61ce0b3786197e",
"shasum": ""
},
"require": {
@@ -2091,7 +2163,7 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.23.0"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.23.1"
},
"funding": [
{
@@ -2103,20 +2175,20 @@
"type": "github"
}
],
- "time": "2023-12-04T10:16:17+00:00"
+ "time": "2024-01-26T18:42:03+00:00"
},
{
"name": "league/flysystem-local",
- "version": "3.23.0",
+ "version": "3.23.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-local.git",
- "reference": "5cf046ba5f059460e86a997c504dd781a39a109b"
+ "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/5cf046ba5f059460e86a997c504dd781a39a109b",
- "reference": "5cf046ba5f059460e86a997c504dd781a39a109b",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/b884d2bf9b53bb4804a56d2df4902bb51e253f00",
+ "reference": "b884d2bf9b53bb4804a56d2df4902bb51e253f00",
"shasum": ""
},
"require": {
@@ -2151,7 +2223,7 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem-local/issues",
- "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.0"
+ "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.1"
},
"funding": [
{
@@ -2163,20 +2235,20 @@
"type": "github"
}
],
- "time": "2023-12-04T10:14:46+00:00"
+ "time": "2024-01-26T18:25:23+00:00"
},
{
"name": "league/mime-type-detection",
- "version": "1.14.0",
+ "version": "1.15.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
- "reference": "b6a5854368533df0295c5761a0253656a2e52d9e"
+ "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e",
- "reference": "b6a5854368533df0295c5761a0253656a2e52d9e",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
+ "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301",
"shasum": ""
},
"require": {
@@ -2207,7 +2279,7 @@
"description": "Mime-type detection for Flysystem",
"support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
- "source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0"
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0"
},
"funding": [
{
@@ -2219,7 +2291,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-17T14:13:20+00:00"
+ "time": "2024-01-28T23:22:08+00:00"
},
{
"name": "league/oauth1-client",
@@ -2467,16 +2539,16 @@
},
{
"name": "nesbot/carbon",
- "version": "2.72.1",
+ "version": "2.72.3",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78"
+ "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/2b3b3db0a2d0556a177392ff1a3bf5608fa09f78",
- "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83",
+ "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83",
"shasum": ""
},
"require": {
@@ -2570,35 +2642,35 @@
"type": "tidelift"
}
],
- "time": "2023-12-08T23:47:49+00:00"
+ "time": "2024-01-25T10:35:09+00:00"
},
{
"name": "nette/schema",
- "version": "v1.2.5",
+ "version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a"
+ "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a",
- "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a",
+ "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
+ "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
"shasum": ""
},
"require": {
- "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0",
- "php": "7.1 - 8.3"
+ "nette/utils": "^4.0",
+ "php": "8.1 - 8.3"
},
"require-dev": {
- "nette/tester": "^2.3 || ^2.4",
+ "nette/tester": "^2.4",
"phpstan/phpstan-nette": "^1.0",
- "tracy/tracy": "^2.7"
+ "tracy/tracy": "^2.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2-dev"
+ "dev-master": "1.3-dev"
}
},
"autoload": {
@@ -2630,22 +2702,22 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.2.5"
+ "source": "https://github.com/nette/schema/tree/v1.3.0"
},
- "time": "2023-10-05T20:37:59+00:00"
+ "time": "2023-12-11T11:54:22+00:00"
},
{
"name": "nette/utils",
- "version": "v4.0.3",
+ "version": "v4.0.4",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015"
+ "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015",
- "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015",
+ "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
+ "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
"shasum": ""
},
"require": {
@@ -2716,31 +2788,33 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.0.3"
+ "source": "https://github.com/nette/utils/tree/v4.0.4"
},
- "time": "2023-10-29T21:02:13+00:00"
+ "time": "2024-01-17T16:50:36+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v4.18.0",
+ "version": "v5.0.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999"
+ "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999",
- "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
+ "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
"shasum": ""
},
"require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
"ext-tokenizer": "*",
- "php": ">=7.0"
+ "php": ">=7.4"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
@@ -2748,7 +2822,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.9-dev"
+ "dev-master": "5.0-dev"
}
},
"autoload": {
@@ -2772,9 +2846,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0"
},
- "time": "2023-12-10T21:03:43+00:00"
+ "time": "2024-01-07T17:17:35+00:00"
},
{
"name": "nunomaduro/termwind",
@@ -3418,16 +3492,16 @@
},
{
"name": "php-http/promise",
- "version": "1.2.1",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
- "reference": "44a67cb59f708f826f3bec35f22030b3edb90119"
+ "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/promise/zipball/44a67cb59f708f826f3bec35f22030b3edb90119",
- "reference": "44a67cb59f708f826f3bec35f22030b3edb90119",
+ "url": "https://api.github.com/repos/php-http/promise/zipball/2916a606d3b390f4e9e8e2b8dd68581508be0f07",
+ "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07",
"shasum": ""
},
"require": {
@@ -3464,9 +3538,9 @@
],
"support": {
"issues": "https://github.com/php-http/promise/issues",
- "source": "https://github.com/php-http/promise/tree/1.2.1"
+ "source": "https://github.com/php-http/promise/tree/1.3.0"
},
- "time": "2023-11-08T12:57:08+00:00"
+ "time": "2024-01-04T18:49:48+00:00"
},
{
"name": "phpoption/phpoption",
@@ -3543,6 +3617,53 @@
],
"time": "2023-11-12T21:59:55+00:00"
},
+ {
+ "name": "phpstan/phpdoc-parser",
+ "version": "1.27.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpdoc-parser.git",
+ "reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/86e4d5a4b036f8f0be1464522f4c6b584c452757",
+ "reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^2.0",
+ "nikic/php-parser": "^4.15",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.5",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5",
+ "symfony/process": "^5.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\PhpDocParser\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPDoc parser with support for nullable, intersection and generic types",
+ "support": {
+ "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.27.0"
+ },
+ "time": "2024-03-21T13:14:53+00:00"
+ },
{
"name": "psr/clock",
"version": "1.0.0",
@@ -3957,25 +4078,25 @@
},
{
"name": "psy/psysh",
- "version": "v0.11.22",
+ "version": "v0.12.0",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b"
+ "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/128fa1b608be651999ed9789c95e6e2a31b5802b",
- "reference": "128fa1b608be651999ed9789c95e6e2a31b5802b",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/750bf031a48fd07c673dbe3f11f72362ea306d0d",
+ "reference": "750bf031a48fd07c673dbe3f11f72362ea306d0d",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-tokenizer": "*",
- "nikic/php-parser": "^4.0 || ^3.1",
- "php": "^8.0 || ^7.0.8",
- "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4",
- "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4"
+ "nikic/php-parser": "^5.0 || ^4.0",
+ "php": "^8.0 || ^7.4",
+ "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
+ "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
},
"conflict": {
"symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
@@ -3986,8 +4107,7 @@
"suggest": {
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
"ext-pdo-sqlite": "The doc command requires SQLite to work.",
- "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
- "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history."
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
},
"bin": [
"bin/psysh"
@@ -3995,7 +4115,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-0.11": "0.11.x-dev"
+ "dev-main": "0.12.x-dev"
},
"bamarni-bin": {
"bin-links": false,
@@ -4031,9 +4151,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.11.22"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.0"
},
- "time": "2023-10-14T21:56:36+00:00"
+ "time": "2023-12-20T15:28:09+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -4509,6 +4629,66 @@
],
"time": "2023-10-12T14:38:46+00:00"
},
+ {
+ "name": "spatie/laravel-package-tools",
+ "version": "1.16.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/laravel-package-tools.git",
+ "reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53",
+ "reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "^9.28|^10.0|^11.0",
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.5",
+ "orchestra/testbench": "^7.7|^8.0",
+ "pestphp/pest": "^1.22",
+ "phpunit/phpunit": "^9.5.24",
+ "spatie/pest-plugin-test-time": "^1.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\LaravelPackageTools\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "role": "Developer"
+ }
+ ],
+ "description": "Tools for creating Laravel packages",
+ "homepage": "https://github.com/spatie/laravel-package-tools",
+ "keywords": [
+ "laravel-package-tools",
+ "spatie"
+ ],
+ "support": {
+ "issues": "https://github.com/spatie/laravel-package-tools/issues",
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-20T07:29:11+00:00"
+ },
{
"name": "spatie/laravel-permission",
"version": "6.3.0",
@@ -4593,16 +4773,16 @@
},
{
"name": "stichoza/google-translate-php",
- "version": "v5.1.2",
+ "version": "v5.1.3",
"source": {
"type": "git",
"url": "https://github.com/Stichoza/google-translate-php.git",
- "reference": "e43089e0c6fcc366027e8bf593060bb4e9c2c839"
+ "reference": "0d3de083a4b286868c4456cc76448a439a5aae07"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Stichoza/google-translate-php/zipball/e43089e0c6fcc366027e8bf593060bb4e9c2c839",
- "reference": "e43089e0c6fcc366027e8bf593060bb4e9c2c839",
+ "url": "https://api.github.com/repos/Stichoza/google-translate-php/zipball/0d3de083a4b286868c4456cc76448a439a5aae07",
+ "reference": "0d3de083a4b286868c4456cc76448a439a5aae07",
"shasum": ""
},
"require": {
@@ -4641,7 +4821,7 @@
],
"support": {
"issues": "https://github.com/Stichoza/google-translate-php/issues",
- "source": "https://github.com/Stichoza/google-translate-php/tree/v5.1.2"
+ "source": "https://github.com/Stichoza/google-translate-php/tree/v5.1.3"
},
"funding": [
{
@@ -4669,20 +4849,20 @@
"type": "patreon"
}
],
- "time": "2023-08-04T01:11:03+00:00"
+ "time": "2023-12-18T21:40:16+00:00"
},
{
"name": "symfony/console",
- "version": "v6.4.2",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625"
+ "reference": "2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/0254811a143e6bc6c8deea08b589a7e68a37f625",
- "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625",
+ "url": "https://api.github.com/repos/symfony/console/zipball/2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e",
+ "reference": "2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e",
"shasum": ""
},
"require": {
@@ -4747,7 +4927,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.2"
+ "source": "https://github.com/symfony/console/tree/v6.4.3"
},
"funding": [
{
@@ -4763,20 +4943,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-10T16:15:48+00:00"
+ "time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v7.0.0",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e"
+ "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/bb51d46e53ef8d50d523f0c5faedba056a27943e",
- "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/ec60a4edf94e63b0556b6a0888548bb400a3a3be",
+ "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be",
"shasum": ""
},
"require": {
@@ -4812,7 +4992,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v7.0.0"
+ "source": "https://github.com/symfony/css-selector/tree/v7.0.3"
},
"funding": [
{
@@ -4828,7 +5008,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-31T17:59:56+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -4899,16 +5079,16 @@
},
{
"name": "symfony/dom-crawler",
- "version": "v6.4.0",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33"
+ "reference": "6db31849011fefe091e94d0bb10cba26f7919894"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33",
- "reference": "14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/6db31849011fefe091e94d0bb10cba26f7919894",
+ "reference": "6db31849011fefe091e94d0bb10cba26f7919894",
"shasum": ""
},
"require": {
@@ -4946,7 +5126,7 @@
"description": "Eases DOM navigation for HTML and XML documents",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/dom-crawler/tree/v6.4.0"
+ "source": "https://github.com/symfony/dom-crawler/tree/v6.4.3"
},
"funding": [
{
@@ -4962,20 +5142,20 @@
"type": "tidelift"
}
],
- "time": "2023-11-20T16:41:16+00:00"
+ "time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/error-handler",
- "version": "v6.4.0",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788"
+ "reference": "6dc3c76a278b77f01d864a6005d640822c6f26a6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788",
- "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/6dc3c76a278b77f01d864a6005d640822c6f26a6",
+ "reference": "6dc3c76a278b77f01d864a6005d640822c6f26a6",
"shasum": ""
},
"require": {
@@ -5021,7 +5201,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/v6.4.0"
+ "source": "https://github.com/symfony/error-handler/tree/v6.4.3"
},
"funding": [
{
@@ -5037,20 +5217,20 @@
"type": "tidelift"
}
],
- "time": "2023-10-18T09:43:34+00:00"
+ "time": "2024-01-29T15:40:36+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.0.2",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a"
+ "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/098b62ae81fdd6cbf941f355059f617db28f4f9a",
- "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e",
+ "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e",
"shasum": ""
},
"require": {
@@ -5101,7 +5281,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/v7.0.2"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3"
},
"funding": [
{
@@ -5117,7 +5297,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-27T22:24:19+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -5261,16 +5441,16 @@
},
{
"name": "symfony/http-client",
- "version": "v7.0.0",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "c3e90d09b3c45a5d47170e81a712d51c352cbc68"
+ "reference": "3d2605c07cd14aec294f72f5bf8147702f7a5ada"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/c3e90d09b3c45a5d47170e81a712d51c352cbc68",
- "reference": "c3e90d09b3c45a5d47170e81a712d51c352cbc68",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/3d2605c07cd14aec294f72f5bf8147702f7a5ada",
+ "reference": "3d2605c07cd14aec294f72f5bf8147702f7a5ada",
"shasum": ""
},
"require": {
@@ -5333,7 +5513,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v7.0.0"
+ "source": "https://github.com/symfony/http-client/tree/v7.0.3"
},
"funding": [
{
@@ -5349,7 +5529,7 @@
"type": "tidelift"
}
],
- "time": "2023-11-29T08:40:23+00:00"
+ "time": "2024-01-29T15:41:16+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -5431,16 +5611,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v6.4.2",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271"
+ "reference": "5677bdf7cade4619cb17fc9e1e7b31ec392244a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/172d807f9ef3fc3fbed8377cc57c20d389269271",
- "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5677bdf7cade4619cb17fc9e1e7b31ec392244a9",
+ "reference": "5677bdf7cade4619cb17fc9e1e7b31ec392244a9",
"shasum": ""
},
"require": {
@@ -5488,7 +5668,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.4.2"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.4.3"
},
"funding": [
{
@@ -5504,20 +5684,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-27T22:16:42+00:00"
+ "time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.4.2",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "13e8387320b5942d0dc408440c888e2d526efef4"
+ "reference": "9c6ec4e543044f7568a53a76ab1484ecd30637a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/13e8387320b5942d0dc408440c888e2d526efef4",
- "reference": "13e8387320b5942d0dc408440c888e2d526efef4",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9c6ec4e543044f7568a53a76ab1484ecd30637a2",
+ "reference": "9c6ec4e543044f7568a53a76ab1484ecd30637a2",
"shasum": ""
},
"require": {
@@ -5601,7 +5781,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/v6.4.2"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.4.3"
},
"funding": [
{
@@ -5617,20 +5797,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-30T15:31:44+00:00"
+ "time": "2024-01-31T07:21:29+00:00"
},
{
"name": "symfony/mailer",
- "version": "v6.4.2",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "6da89e5c9202f129717a770a03183fb140720168"
+ "reference": "74412c62f88a85a41b61f0b71ab0afcaad6f03ee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/6da89e5c9202f129717a770a03183fb140720168",
- "reference": "6da89e5c9202f129717a770a03183fb140720168",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/74412c62f88a85a41b61f0b71ab0afcaad6f03ee",
+ "reference": "74412c62f88a85a41b61f0b71ab0afcaad6f03ee",
"shasum": ""
},
"require": {
@@ -5681,7 +5861,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v6.4.2"
+ "source": "https://github.com/symfony/mailer/tree/v6.4.3"
},
"funding": [
{
@@ -5697,20 +5877,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-19T09:12:31+00:00"
+ "time": "2024-01-29T15:01:07+00:00"
},
{
"name": "symfony/mime",
- "version": "v6.4.0",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205"
+ "reference": "5017e0a9398c77090b7694be46f20eb796262a34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205",
- "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34",
+ "reference": "5017e0a9398c77090b7694be46f20eb796262a34",
"shasum": ""
},
"require": {
@@ -5765,7 +5945,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v6.4.0"
+ "source": "https://github.com/symfony/mime/tree/v6.4.3"
},
"funding": [
{
@@ -5781,7 +5961,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-17T11:49:05+00:00"
+ "time": "2024-01-30T08:32:12+00:00"
},
{
"name": "symfony/options-resolver",
@@ -6590,16 +6770,16 @@
},
{
"name": "symfony/process",
- "version": "v6.4.2",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241"
+ "reference": "31642b0818bfcff85930344ef93193f8c607e0a3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/c4b1ef0bc80533d87a2e969806172f1c2a980241",
- "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241",
+ "url": "https://api.github.com/repos/symfony/process/zipball/31642b0818bfcff85930344ef93193f8c607e0a3",
+ "reference": "31642b0818bfcff85930344ef93193f8c607e0a3",
"shasum": ""
},
"require": {
@@ -6631,7 +6811,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.2"
+ "source": "https://github.com/symfony/process/tree/v6.4.3"
},
"funding": [
{
@@ -6647,7 +6827,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-22T16:42:54+00:00"
+ "time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@@ -6740,16 +6920,16 @@
},
{
"name": "symfony/routing",
- "version": "v6.4.2",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "98eab13a07fddc85766f1756129c69f207ffbc21"
+ "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/98eab13a07fddc85766f1756129c69f207ffbc21",
- "reference": "98eab13a07fddc85766f1756129c69f207ffbc21",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/3b2957ad54902f0f544df83e3d58b38d7e8e5842",
+ "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842",
"shasum": ""
},
"require": {
@@ -6803,7 +6983,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v6.4.2"
+ "source": "https://github.com/symfony/routing/tree/v6.4.3"
},
"funding": [
{
@@ -6819,7 +6999,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-29T15:34:34+00:00"
+ "time": "2024-01-30T13:55:02+00:00"
},
{
"name": "symfony/service-contracts",
@@ -6905,16 +7085,16 @@
},
{
"name": "symfony/string",
- "version": "v7.0.2",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5"
+ "reference": "524aac4a280b90a4420d8d6a040718d0586505ac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/cc78f14f91f5e53b42044d0620961c48028ff9f5",
- "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5",
+ "url": "https://api.github.com/repos/symfony/string/zipball/524aac4a280b90a4420d8d6a040718d0586505ac",
+ "reference": "524aac4a280b90a4420d8d6a040718d0586505ac",
"shasum": ""
},
"require": {
@@ -6971,7 +7151,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.0.2"
+ "source": "https://github.com/symfony/string/tree/v7.0.3"
},
"funding": [
{
@@ -6987,20 +7167,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-10T16:54:46+00:00"
+ "time": "2024-01-29T15:41:16+00:00"
},
{
"name": "symfony/translation",
- "version": "v6.4.2",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681"
+ "reference": "637c51191b6b184184bbf98937702bcf554f7d04"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/a2ab2ec1a462e53016de8e8d5e8912bfd62ea681",
- "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/637c51191b6b184184bbf98937702bcf554f7d04",
+ "reference": "637c51191b6b184184bbf98937702bcf554f7d04",
"shasum": ""
},
"require": {
@@ -7023,7 +7203,7 @@
"symfony/translation-implementation": "2.3|3.0"
},
"require-dev": {
- "nikic/php-parser": "^4.13",
+ "nikic/php-parser": "^4.18|^5.0",
"psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/console": "^5.4|^6.0|^7.0",
@@ -7066,7 +7246,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.4.2"
+ "source": "https://github.com/symfony/translation/tree/v6.4.3"
},
"funding": [
{
@@ -7082,7 +7262,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-18T09:25:29+00:00"
+ "time": "2024-01-29T13:11:52+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -7164,16 +7344,16 @@
},
{
"name": "symfony/uid",
- "version": "v6.4.0",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92"
+ "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92",
- "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0",
+ "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0",
"shasum": ""
},
"require": {
@@ -7218,7 +7398,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v6.4.0"
+ "source": "https://github.com/symfony/uid/tree/v6.4.3"
},
"funding": [
{
@@ -7234,20 +7414,20 @@
"type": "tidelift"
}
],
- "time": "2023-10-31T08:18:17+00:00"
+ "time": "2024-01-23T14:51:35+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v6.4.2",
+ "version": "v6.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f"
+ "reference": "0435a08f69125535336177c29d56af3abc1f69da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/68d6573ec98715ddcae5a0a85bee3c1c27a4c33f",
- "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0435a08f69125535336177c29d56af3abc1f69da",
+ "reference": "0435a08f69125535336177c29d56af3abc1f69da",
"shasum": ""
},
"require": {
@@ -7303,7 +7483,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.4.2"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.4.3"
},
"funding": [
{
@@ -7319,7 +7499,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-28T19:16:56+00:00"
+ "time": "2024-01-23T14:53:30+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -7862,16 +8042,16 @@
},
{
"name": "fakerphp/faker",
- "version": "v1.23.0",
+ "version": "v1.23.1",
"source": {
"type": "git",
"url": "https://github.com/FakerPHP/Faker.git",
- "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01"
+ "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
- "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01",
+ "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b",
+ "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b",
"shasum": ""
},
"require": {
@@ -7897,11 +8077,6 @@
"ext-mbstring": "Required for multibyte Unicode string functionality."
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "v1.21-dev"
- }
- },
"autoload": {
"psr-4": {
"Faker\\": "src/Faker/"
@@ -7924,9 +8099,9 @@
],
"support": {
"issues": "https://github.com/FakerPHP/Faker/issues",
- "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0"
+ "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1"
},
- "time": "2023-06-12T08:44:38+00:00"
+ "time": "2024-01-02T13:46:09+00:00"
},
{
"name": "filp/whoops",
@@ -8001,21 +8176,22 @@
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.41.1",
+ "version": "v3.48.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "8b6ae8dcbaf23f09680643ab832a4a3a260265f6"
+ "reference": "a92472c6fb66349de25211f31c77eceae3df024e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/8b6ae8dcbaf23f09680643ab832a4a3a260265f6",
- "reference": "8b6ae8dcbaf23f09680643ab832a4a3a260265f6",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a92472c6fb66349de25211f31c77eceae3df024e",
+ "reference": "a92472c6fb66349de25211f31c77eceae3df024e",
"shasum": ""
},
"require": {
"composer/semver": "^3.4",
"composer/xdebug-handler": "^3.0.3",
+ "ext-filter": "*",
"ext-json": "*",
"ext-tokenizer": "*",
"php": "^7.4 || ^8.0",
@@ -8040,8 +8216,7 @@
"php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4",
- "phpunit/phpunit": "^9.6",
- "symfony/phpunit-bridge": "^6.3.8 || ^7.0",
+ "phpunit/phpunit": "^9.6 || ^10.5.5",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
},
"suggest": {
@@ -8080,7 +8255,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.41.1"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.48.0"
},
"funding": [
{
@@ -8088,7 +8263,7 @@
"type": "github"
}
],
- "time": "2023-12-10T19:59:27+00:00"
+ "time": "2024-01-19T21:44:39+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -8143,22 +8318,22 @@
},
{
"name": "kubawerlos/php-cs-fixer-custom-fixers",
- "version": "v3.17.0",
+ "version": "v3.19.2",
"source": {
"type": "git",
"url": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers.git",
- "reference": "bbfb4ff20d148ed9531b1cfc9c9a861faba72b9a"
+ "reference": "e17ffa5d25dafed7a8bcf545fc1b576a664c87e7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/bbfb4ff20d148ed9531b1cfc9c9a861faba72b9a",
- "reference": "bbfb4ff20d148ed9531b1cfc9c9a861faba72b9a",
+ "url": "https://api.github.com/repos/kubawerlos/php-cs-fixer-custom-fixers/zipball/e17ffa5d25dafed7a8bcf545fc1b576a664c87e7",
+ "reference": "e17ffa5d25dafed7a8bcf545fc1b576a664c87e7",
"shasum": ""
},
"require": {
"ext-filter": "*",
"ext-tokenizer": "*",
- "friendsofphp/php-cs-fixer": "^3.22",
+ "friendsofphp/php-cs-fixer": "^3.47",
"php": "^7.4 || ^8.0"
},
"require-dev": {
@@ -8183,22 +8358,22 @@
"description": "A set of custom fixers for PHP CS Fixer",
"support": {
"issues": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/issues",
- "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.17.0"
+ "source": "https://github.com/kubawerlos/php-cs-fixer-custom-fixers/tree/v3.19.2"
},
- "time": "2023-11-19T12:08:42+00:00"
+ "time": "2024-01-25T16:31:36+00:00"
},
{
"name": "laravel/telescope",
- "version": "v4.17.3",
+ "version": "v4.17.5",
"source": {
"type": "git",
"url": "https://github.com/laravel/telescope.git",
- "reference": "17a420d0121b03ea90648dd4484b62abe6d3e261"
+ "reference": "2c5295261d1459e4f9b157c407a663a6685f3ddf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/telescope/zipball/17a420d0121b03ea90648dd4484b62abe6d3e261",
- "reference": "17a420d0121b03ea90648dd4484b62abe6d3e261",
+ "url": "https://api.github.com/repos/laravel/telescope/zipball/2c5295261d1459e4f9b157c407a663a6685f3ddf",
+ "reference": "2c5295261d1459e4f9b157c407a663a6685f3ddf",
"shasum": ""
},
"require": {
@@ -8254,9 +8429,9 @@
],
"support": {
"issues": "https://github.com/laravel/telescope/issues",
- "source": "https://github.com/laravel/telescope/tree/v4.17.3"
+ "source": "https://github.com/laravel/telescope/tree/v4.17.5"
},
- "time": "2023-12-11T22:00:12+00:00"
+ "time": "2024-01-30T15:41:45+00:00"
},
{
"name": "mockery/mockery",
@@ -8609,23 +8784,23 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.10",
+ "version": "10.1.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "599109c8ca6bae97b23482d557d2874c25a65e59"
+ "reference": "78c3b7625965c2513ee96569a4dbb62601784145"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/599109c8ca6bae97b23482d557d2874c25a65e59",
- "reference": "599109c8ca6bae97b23482d557d2874c25a65e59",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145",
+ "reference": "78c3b7625965c2513ee96569a4dbb62601784145",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.15",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1",
"phpunit/php-file-iterator": "^4.0",
"phpunit/php-text-template": "^3.0",
@@ -8675,7 +8850,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.10"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11"
},
"funding": [
{
@@ -8683,7 +8858,7 @@
"type": "github"
}
],
- "time": "2023-12-11T06:28:43+00:00"
+ "time": "2023-12-21T15:38:30+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -8930,16 +9105,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.3",
+ "version": "10.5.9",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "6fce887c71076a73f32fd3e0774a6833fc5c7f19"
+ "reference": "0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6fce887c71076a73f32fd3e0774a6833fc5c7f19",
- "reference": "6fce887c71076a73f32fd3e0774a6833fc5c7f19",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe",
+ "reference": "0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe",
"shasum": ""
},
"require": {
@@ -9011,7 +9186,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.3"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.9"
},
"funding": [
{
@@ -9027,7 +9202,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-13T07:25:23+00:00"
+ "time": "2024-01-22T14:35:40+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -9275,20 +9450,20 @@
},
{
"name": "sebastian/complexity",
- "version": "3.1.0",
+ "version": "3.2.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "68cfb347a44871f01e33ab0ef8215966432f6957"
+ "reference": "68ff824baeae169ec9f2137158ee529584553799"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68cfb347a44871f01e33ab0ef8215966432f6957",
- "reference": "68cfb347a44871f01e33ab0ef8215966432f6957",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+ "reference": "68ff824baeae169ec9f2137158ee529584553799",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.10",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1"
},
"require-dev": {
@@ -9297,7 +9472,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.1-dev"
+ "dev-main": "3.2-dev"
}
},
"autoload": {
@@ -9321,7 +9496,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
"security": "https://github.com/sebastianbergmann/complexity/security/policy",
- "source": "https://github.com/sebastianbergmann/complexity/tree/3.1.0"
+ "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
},
"funding": [
{
@@ -9329,20 +9504,20 @@
"type": "github"
}
],
- "time": "2023-09-28T11:50:59+00:00"
+ "time": "2023-12-21T08:37:17+00:00"
},
{
"name": "sebastian/diff",
- "version": "5.0.3",
+ "version": "5.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b"
+ "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b",
- "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f",
+ "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f",
"shasum": ""
},
"require": {
@@ -9355,7 +9530,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "5.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -9388,7 +9563,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3"
+ "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0"
},
"funding": [
{
@@ -9396,7 +9571,7 @@
"type": "github"
}
],
- "time": "2023-05-01T07:48:21+00:00"
+ "time": "2023-12-22T10:55:06+00:00"
},
{
"name": "sebastian/environment",
@@ -9604,20 +9779,20 @@
},
{
"name": "sebastian/lines-of-code",
- "version": "2.0.1",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d"
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d",
- "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.10",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1"
},
"require-dev": {
@@ -9650,7 +9825,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
"security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1"
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
},
"funding": [
{
@@ -9658,7 +9833,7 @@
"type": "github"
}
],
- "time": "2023-08-31T09:25:50+00:00"
+ "time": "2023-12-21T08:38:20+00:00"
},
{
"name": "sebastian/object-enumerator",
@@ -10008,21 +10183,20 @@
},
{
"name": "spatie/flare-client-php",
- "version": "1.4.3",
+ "version": "1.4.4",
"source": {
"type": "git",
"url": "https://github.com/spatie/flare-client-php.git",
- "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec"
+ "reference": "17082e780752d346c2db12ef5d6bee8e835e399c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec",
- "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/17082e780752d346c2db12ef5d6bee8e835e399c",
+ "reference": "17082e780752d346c2db12ef5d6bee8e835e399c",
"shasum": ""
},
"require": {
"illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0",
- "nesbot/carbon": "^2.62.1",
"php": "^8.0",
"spatie/backtrace": "^1.5.2",
"symfony/http-foundation": "^5.2|^6.0|^7.0",
@@ -10066,7 +10240,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/1.4.3"
+ "source": "https://github.com/spatie/flare-client-php/tree/1.4.4"
},
"funding": [
{
@@ -10074,20 +10248,20 @@
"type": "github"
}
],
- "time": "2023-10-17T15:54:07+00:00"
+ "time": "2024-01-31T14:18:45+00:00"
},
{
"name": "spatie/ignition",
- "version": "1.11.3",
+ "version": "1.12.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/ignition.git",
- "reference": "3d886de644ff7a5b42e4d27c1e1f67c8b5f00044"
+ "reference": "5b6f801c605a593106b623e45ca41496a6e7d56d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/ignition/zipball/3d886de644ff7a5b42e4d27c1e1f67c8b5f00044",
- "reference": "3d886de644ff7a5b42e4d27c1e1f67c8b5f00044",
+ "url": "https://api.github.com/repos/spatie/ignition/zipball/5b6f801c605a593106b623e45ca41496a6e7d56d",
+ "reference": "5b6f801c605a593106b623e45ca41496a6e7d56d",
"shasum": ""
},
"require": {
@@ -10157,39 +10331,39 @@
"type": "github"
}
],
- "time": "2023-10-18T14:09:40+00:00"
+ "time": "2024-01-03T15:49:39+00:00"
},
{
"name": "spatie/laravel-ignition",
- "version": "2.3.2",
+ "version": "2.4.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
- "reference": "4800661a195e15783477d99f7f8f669a49793996"
+ "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/4800661a195e15783477d99f7f8f669a49793996",
- "reference": "4800661a195e15783477d99f7f8f669a49793996",
+ "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/005e1e7b1232f3b22d7e7be3f602693efc7dba67",
+ "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
- "illuminate/support": "^10.0",
+ "illuminate/support": "^10.0|^11.0",
"php": "^8.1",
"spatie/flare-client-php": "^1.3.5",
"spatie/ignition": "^1.9",
- "symfony/console": "^6.2.3",
- "symfony/var-dumper": "^6.2.3"
+ "symfony/console": "^6.2.3|^7.0",
+ "symfony/var-dumper": "^6.2.3|^7.0"
},
"require-dev": {
- "livewire/livewire": "^2.11",
+ "livewire/livewire": "^2.11|^3.3.5",
"mockery/mockery": "^1.5.1",
- "openai-php/client": "^0.3.4",
- "orchestra/testbench": "^8.0",
- "pestphp/pest": "^1.22.3",
+ "openai-php/client": "^0.8.1",
+ "orchestra/testbench": "^8.0|^9.0",
+ "pestphp/pest": "^2.30",
"phpstan/extension-installer": "^1.2",
"phpstan/phpstan-deprecation-rules": "^1.1.1",
"phpstan/phpstan-phpunit": "^1.3.3",
@@ -10249,20 +10423,20 @@
"type": "github"
}
],
- "time": "2023-12-15T13:44:49+00:00"
+ "time": "2024-01-12T13:14:58+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v7.0.0",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7"
+ "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7",
- "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12",
+ "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12",
"shasum": ""
},
"require": {
@@ -10296,7 +10470,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v7.0.0"
+ "source": "https://github.com/symfony/filesystem/tree/v7.0.3"
},
"funding": [
{
@@ -10312,7 +10486,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-27T06:33:22+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/polyfill-php81",
@@ -10395,16 +10569,16 @@
},
{
"name": "symfony/stopwatch",
- "version": "v7.0.0",
+ "version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "7bbfa3dd564a0ce12eb4acaaa46823c740f9cb7a"
+ "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/7bbfa3dd564a0ce12eb4acaaa46823c740f9cb7a",
- "reference": "7bbfa3dd564a0ce12eb4acaaa46823c740f9cb7a",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/983900d6fddf2b0cbaacacbbad07610854bd8112",
+ "reference": "983900d6fddf2b0cbaacacbbad07610854bd8112",
"shasum": ""
},
"require": {
@@ -10437,7 +10611,7 @@
"description": "Provides a way to profile code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/stopwatch/tree/v7.0.0"
+ "source": "https://github.com/symfony/stopwatch/tree/v7.0.3"
},
"funding": [
{
@@ -10453,7 +10627,7 @@
"type": "tidelift"
}
],
- "time": "2023-07-05T13:06:06+00:00"
+ "time": "2024-01-23T15:02:46+00:00"
},
{
"name": "theseer/tokenizer",
diff --git a/config/app.php b/config/app.php
index d2eed306..a5ea6c8f 100644
--- a/config/app.php
+++ b/config/app.php
@@ -45,4 +45,8 @@
"aliases" => Facade::defaultAliases()->merge([
])->toArray(),
+
+ "provider_logo_size" => 10 * 1024,
+ "provider_logo_width" => 150,
+ "provider_logo_height" => 100,
];
diff --git a/config/auth.php b/config/auth.php
index cf69f129..e0bdd12b 100644
--- a/config/auth.php
+++ b/config/auth.php
@@ -9,6 +9,10 @@
],
"guards" => [
+ "api" => [
+ "driver" => "sanctum",
+ "provider" => "users",
+ ],
"web" => [
"driver" => "session",
"provider" => "users",
diff --git a/config/sanctum.php b/config/sanctum.php
index 09cc519c..9c241d06 100644
--- a/config/sanctum.php
+++ b/config/sanctum.php
@@ -13,7 +13,7 @@
"guard" => ["web"],
- "expiration" => null,
+ "expiration" => 720,
"middleware" => [
"verify_csrf_token" => App\Http\Middleware\VerifyCsrfToken::class,
diff --git a/config/scramble.php b/config/scramble.php
new file mode 100644
index 00000000..9c9d14c0
--- /dev/null
+++ b/config/scramble.php
@@ -0,0 +1,27 @@
+ "api",
+ "api_domain" => null,
+ "export_path" => "api.json",
+ "theme" => "light",
+ "info" => [
+ "version" => env("API_VERSION", "0.0.1"),
+ "description" => "",
+ ],
+ "ui" => [
+ "hide_try_it" => false,
+ "logo" => "",
+ "try_it_credentials_policy" => "include",
+ ],
+ "servers" => null,
+ "middleware" => [
+ "web",
+ RestrictedDocsAccess::class,
+ ],
+ "extensions" => [],
+];
diff --git a/database/migrations/2023_06_21_134722_create_permission_tables.php b/database/migrations/2023_06_21_134722_create_permission_tables.php
index f7c3bc49..5c640d44 100644
--- a/database/migrations/2023_06_21_134722_create_permission_tables.php
+++ b/database/migrations/2023_06_21_134722_create_permission_tables.php
@@ -16,11 +16,11 @@ public function up(): void
$teams = config("permission.teams");
if (empty($tableNames)) {
- throw new \Exception("Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.");
+ throw new Exception("Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.");
}
if ($teams && empty($columnNames["team_foreign_key"] ?? null)) {
- throw new \Exception("Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.");
+ throw new Exception("Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.");
}
Schema::create($tableNames["permissions"], function (Blueprint $table): void {
@@ -133,7 +133,7 @@ public function down(): void
$tableNames = config("permission.table_names");
if (empty($tableNames)) {
- throw new \Exception("Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.");
+ throw new Exception("Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.");
}
Schema::drop($tableNames["role_has_permissions"]);
diff --git a/database/seeders/ProviderSeeder.php b/database/seeders/ProviderSeeder.php
index 4dd15985..a30efa2f 100644
--- a/database/seeders/ProviderSeeder.php
+++ b/database/seeders/ProviderSeeder.php
@@ -30,6 +30,7 @@
use App\Importers\ZwingsDataImporter;
use App\Models\Provider;
use Illuminate\Database\Seeder;
+use Illuminate\Support\Facades\Storage;
class ProviderSeeder extends Seeder
{
@@ -71,6 +72,18 @@ public function run(): void
"android_url" => $provider["android_url"] ?? null,
"ios_url" => $provider["ios_url"] ?? null,
]);
+
+ $imageName = strtolower($provider["name"]) . ".png";
+ $imagePath = resource_path("providers/" . $imageName);
+ $newImagePath = "public/providers/" . $imageName;
+
+ if (file_exists($imagePath) && !Storage::exists($newImagePath)) {
+ Storage::put($newImagePath, file_get_contents($imagePath));
+ }
+ }
+
+ if (file_exists(resource_path("providers/unknown.png")) && !Storage::exists( "public/providers/unknown.png")) {
+ Storage::put("public/providers/unknown.png", file_get_contents(resource_path("providers/unknown.png")));
}
}
}
diff --git a/environment/dev/app/Dockerfile b/environment/dev/app/Dockerfile
index 9cc0bc88..68ad7d7d 100644
--- a/environment/dev/app/Dockerfile
+++ b/environment/dev/app/Dockerfile
@@ -1,8 +1,8 @@
-FROM composer/composer:2.5.8-bin as composer-bin
+FROM composer/composer:2.6.6-bin as composer-bin
FROM node:21.4.0-bullseye-slim as node
-FROM php:8.3.1-fpm-bullseye
+FROM php:8.3.3-fpm-bullseye
COPY --from=composer-bin ./composer /usr/bin/composer
@@ -52,7 +52,7 @@ RUN apt-get update \
&& docker-php-ext-enable \
redis
-ARG XDEBUG_VERSION=3.2.1
+ARG XDEBUG_VERSION=3.3.1
ARG INSTALL_XDEBUG=true
RUN if [ ${INSTALL_XDEBUG} = true ]; then \
diff --git a/environment/staging/app/Dockerfile b/environment/staging/app/Dockerfile
index 78859e08..c68fc0b5 100644
--- a/environment/staging/app/Dockerfile
+++ b/environment/staging/app/Dockerfile
@@ -1,8 +1,8 @@
-FROM composer/composer:2.5.8-bin as composer-bin
+FROM composer/composer:2.6.6-bin as composer-bin
FROM node:20.4.0-bullseye-slim as node
-FROM php:8.3.1-fpm-bullseye
+FROM php:8.3.3-fpm-bullseye
COPY --from=composer-bin ./composer /usr/bin/composer
diff --git a/lang/pl.json b/lang/pl.json
index dbe9e592..917919d3 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -1,5 +1,6 @@
{
"Prices": "Ceny",
+ "Find a ride": "Znajdź przejazd",
"Favorite cities": "Ulubione miasta",
"Rules": "Zasady",
"Loading": "Ładowanie",
@@ -9,6 +10,8 @@
"Search city": "Szukaj miasta",
"Search country": "Szukaj kraju",
"Search provider": "Szukaj dostawcy",
+ "Browse": "Przeglądaj",
+ "No file selected.": "Nie wybrano pliku.",
"Register": "Zarejestruj",
"Name": "Nazwa",
"Email": "E-mail",
@@ -25,6 +28,10 @@
"Log in to add to favorites.": "Zaloguj się, aby dodać do ulubionych.",
"Sorry we couldn't find any cities.": "Przepraszamy, ale nie mogliśmy znaleźć żadnych miast.",
"Sorry we couldn't find any countries.": "Przepraszamy, ale nie mogliśmy znaleźć żadnych krajów.",
+ "Login to add to favorites.": "Zaloguj się, aby dodać do ulubionych.",
+ "Sorry we couldn`t find any cities.": "Przepraszamy, ale nie mogliśmy znaleźć żadnych miast.",
+ "Sorry we couldn`t find any countries.": "Przepraszamy, ale nie mogliśmy znaleźć żadnych krajów.",
+ "Sorry we couldn`t find any providers.": "Przepraszamy, ale nie mogliśmy znaleźć żadnych dostawców.",
"advert1": "Jest wielu dostawców hulajnóg elektrycznych, więc czasami można poczuć pewne niepewności co do tego, których aplikacji powinno się używać podczas swoich podróży.",
"advert2": "Ta aplikacja pomoże Ci z planowaniem Twoich wakacji lub podróży biznesowych.",
"Edit": "Edytuj",
@@ -33,7 +40,9 @@
"Add": "Dodaj",
"Create city": "Utwórz miasto",
"Create country": "Utwórz kraj",
+ "Create provider": "Utwórz dostawcę",
"Update city": "Aktualizuj miasto",
+ "Update provider": "Aktualizuj dostawcę",
"Save": "Zapisz",
"Add alternative name": "Dodaj alternatywną nazwę",
"Clear filters": "Wyczyść filtry",
@@ -44,6 +53,7 @@
"Choose provider": "Wybierz dostawcę",
"Latitude": "Szerokość geograficzna",
"Longitude": "Długość geograficzna",
+ "Color": "Kolor",
"Providers": "Dostawcy",
"Importers": "Importerzy",
"Country": "Kraj",
@@ -57,6 +67,8 @@
"of": "z",
"to": "do",
"results": "wyników",
+ "Language has been changed.": "Język został zmieniony.",
+ "Error changing language.": "Błąd podczas zmiany języka.",
"Alternative name": "Alternatywna nazwa",
"Filling map with providers...": "Wypełnianie mapy dostawcami...",
"Didn't find any providers.": "Nie znaleziono dostawców.",
@@ -79,18 +91,22 @@
"City removed from favorites.": "Miasto usunięte z ulubionych.",
"City updated successfully.": "Miasto zaktualizowane pomyślnie.",
"Country updated successfully.": "Kraj zaktualizowany pomyślnie.",
+ "Provider updated successfully.": "Dostawca zaktualizowany pomyślnie.",
"City created successfully.": "Miasto utworzone pomyślnie.",
+ "Provider created successfully.": "Dostawca utworzony pomyślnie.",
"Country created successfully.": "Kraj utworzony pomyślnie.",
"City deleted successfully.": "Miasto usunięte pomyślnie.",
+ "Provider deleted successfully.": "Dostawca usunięty pomyślnie.",
"Cities deleted successfully.": "Miasta usunięte pomyślnie.",
"Country deleted successfully.": "Kraj usunięty pomyślnie.",
"There was an error.": "Wystąpił błąd.",
"There was an error creating the city.": "Wystąpił błąd podczas tworzenia miasta.",
"There was an error deleting the city.": "Wystąpił błąd podczas usuwania miasta.",
"There was an error deleting cities.": "Wystąpił błąd podczas usuwania miast.",
-
"There was an error creating the country.": "Wystąpił błąd podczas tworzenia kraju.",
"There was an error adding alternative city name.": "Wystąpił błąd podczas dodawania alternatywnej nazwy miasta.",
+ "There was an error creating the provider.": "Wystąpił błąd podczas dodawania dostawcy.",
+ "There was an error updating the provider.": "Wystąpił błąd podczas aktualizowania dostawcy.",
"Alternative city name added successfully.": "Alternatywna nazwa miasta dodana pomyślnie.",
"Alternative city name deleted successfully.": "Alternatywna nazwa miasta usunięta pomyślnie.",
"City providers updated successfully.": "Dostawcy dostępni w mieście zaktualizowani pomyślnie.",
@@ -126,6 +142,9 @@
"Cities with no country assigned": "Miasta bez przypisanego kraju",
"Cities with no coordinates assigned": "Miasta bez przypisanych współrzędnych",
"Delete all cities with no country assigned": "Usuń wszystkie miasta bez przypisanego kraju",
+ "All cities removed successfully!" : "Wszystkie miasta usunięte pomyślnie!",
+ "City alternative name created successfully.": "Alternatywna nazwa miasta utworzona pomyślnie",
+ "City alternative name deleted successfully.": "Alternatywna nazwa miasta usunięta pomyślnie",
"Opinion added successfully.": "Opinia dodana pomyślnie.",
"There was an error adding your opinion.": "Wystąpił błąd podczas dodawania opinii.",
"Opinion edited successfully.": "Opinia zaktualizowana pomyślnie.",
@@ -139,12 +158,14 @@
"Opinion removed successfully!": "Opinia usunięta pomyślnie.",
"Delete city": "Usunąć miasto",
"Delete country": "Usunąć kraj",
+ "Delete provider": "Usunąć dostawcę",
"Delete that opinion": "Usunąć opinię",
"That opinion": "Ta opinia",
"This operation cannot be undone.": "Ta operacja nie może zostać cofnięta.",
"You have logged in successfully.": "Zalogowano pomyślnie.",
"You have logged out successfully.": "Wylogowano pomyślnie.",
"You have registered successfully.": "Zarejestrowano pomyślnie",
+ "Login failed.": "Logowanie nie powiodło się.",
"Please, rate that city": "Oceń miasto",
"You can also login by:": "Możesz również zalogować się przez:",
"Rules import started.": "Import zasad uruchomiony.",
diff --git a/package-lock.json b/package-lock.json
index a64436ef..6dcb2997 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,11 +11,11 @@
"@inertiajs/inertia-vue3": "^0.6.0",
"@inertiajs/progress": "^0.2.7",
"@inertiajs/vue3": "^1.0.9",
- "@tailwindcss/forms": "^0.5.4",
+ "@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.9",
"@vueuse/core": "^10.3.0",
"axios": "^1.6.2",
- "chart.js": "^4.4.0",
+ "chart.js": "^4.4.2",
"laravel-vite-plugin": "^0.8.1",
"leaflet-cascade-buttons": "^1.0.10",
"lodash": "^4.17.21",
@@ -659,9 +659,9 @@
}
},
"node_modules/@tailwindcss/forms": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.6.tgz",
- "integrity": "sha512-Fw+2BJ0tmAwK/w01tEFL5TiaJBX1NLT1/YbWgvm7ws3Qcn11kiXxzNTEQDMs5V3mQemhB56l3u0i9dwdzSQldA==",
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz",
+ "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==",
"dependencies": {
"mini-svg-data-uri": "^1.2.3"
},
@@ -1398,14 +1398,14 @@
}
},
"node_modules/chart.js": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz",
- "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==",
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.2.tgz",
+ "integrity": "sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg==",
"dependencies": {
"@kurkle/color": "^0.3.0"
},
"engines": {
- "pnpm": ">=7"
+ "pnpm": ">=8"
}
},
"node_modules/chokidar": {
diff --git a/package.json b/package.json
index 31d4bcaa..35a29306 100644
--- a/package.json
+++ b/package.json
@@ -13,11 +13,11 @@
"@inertiajs/inertia-vue3": "^0.6.0",
"@inertiajs/progress": "^0.2.7",
"@inertiajs/vue3": "^1.0.9",
- "@tailwindcss/forms": "^0.5.4",
+ "@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.9",
"@vueuse/core": "^10.3.0",
"axios": "^1.6.2",
- "chart.js": "^4.4.0",
+ "chart.js": "^4.4.2",
"laravel-vite-plugin": "^0.8.1",
"leaflet-cascade-buttons": "^1.0.10",
"lodash": "^4.17.21",
diff --git a/public/providers/quick.png b/public/providers/quick.png
deleted file mode 100644
index 274a2d0f..00000000
Binary files a/public/providers/quick.png and /dev/null differ
diff --git a/resources/js/Pages/Landing/SearchPanel.vue b/resources/js/Pages/Landing/SearchPanel.vue
index ffa74d2d..24df1bcd 100644
--- a/resources/js/Pages/Landing/SearchPanel.vue
+++ b/resources/js/Pages/Landing/SearchPanel.vue
@@ -35,7 +35,7 @@ const filteredCities = computed(() => {
} else {
return props.cities.filter(city =>
city.country.id === selectedCountryId &&
- city.cityProviders.some(cityProvider => cityProvider.provider_name === selectedProviderName),
+ city.cityProviders.some(cityProvider => cityProvider.provider_name === selectedProviderName),
)
}
})
@@ -48,9 +48,9 @@ const filteredProviders = computed(() => {
return props.providers.filter(provider =>
props.cities.some(city =>
city.country.id === selectedCountryId &&
- city.cityProviders.some(cityProvider =>
- cityProvider.provider_name === provider.name,
- ),
+ city.cityProviders.some(cityProvider =>
+ cityProvider.provider_name === provider.name,
+ ),
),
)
}
diff --git a/resources/js/Pages/Providers/Index.vue b/resources/js/Pages/Providers/Index.vue
new file mode 100644
index 00000000..ae910fc4
--- /dev/null
+++ b/resources/js/Pages/Providers/Index.vue
@@ -0,0 +1,216 @@
+
+
+
+
+ {{ __('Sorry we couldn`t find any providers.') }}
+
+ {{ __('Create provider') }}
+
+
+
+
+
+
+
+
+
+
+ {{ __('Name') }}
+
+
+ {{ __('Url') }}
+
+
+ {{ __('Color') }}
+
+
+
+
+
+ {{ provider.url }} +
++ - +
++ PNG, 150x100px, 10 kB +
+