Initial commit

This commit is contained in:
Ronald Huynen
2026-03-23 21:37:59 +01:00
commit 2547717edb
2193 changed files with 972171 additions and 0 deletions

View File

@@ -0,0 +1,174 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class DatabaseUpdate extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'database:update';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Apply database updates for schema changes and data migrations';
/**
* Execute the console command.
*/
public function handle()
{
$this->info('Starting database updates...');
// Apply all update methods
$this->renameAssociationToPlatformOrganization();
$this->addLocationNotSpecifiedCountry();
$this->info('Database updates completed successfully!');
return 0;
}
/**
* Rename 'Association' to 'Timebank Organization' across the database
* Updates categories table from Association/PlatformOrganization to TimebankOrganization
* Updates category_translations table with proper translations
*/
private function renameAssociationToPlatformOrganization()
{
$this->info('Renaming Association to Timebank Organization...');
try {
DB::beginTransaction();
// Update categories table: change type from Association to TimebankOrganization
$categoriesUpdated = DB::table('categories')
->where('type', 'SiteContents\\Static\\Association')
->update(['type' => 'SiteContents\\Static\\TimebankOrganization']);
if ($categoriesUpdated > 0) {
$this->info(" ✓ Updated {$categoriesUpdated} category record(s) from Association");
}
// Also update any PlatformOrganization entries to TimebankOrganization
$platformUpdated = DB::table('categories')
->where('type', 'SiteContents\\Static\\PlatformOrganization')
->update(['type' => 'SiteContents\\Static\\TimebankOrganization']);
if ($platformUpdated > 0) {
$this->info(" ✓ Updated {$platformUpdated} category record(s) from PlatformOrganization");
}
if ($categoriesUpdated === 0 && $platformUpdated === 0) {
$this->warn(' No categories found to update');
}
// Update category_translations table
// Get the category ID for TimebankOrganization
$category = DB::table('categories')
->where('type', 'SiteContents\\Static\\TimebankOrganization')
->first();
if ($category) {
$translations = [
'en' => [
'name' => 'Timebank organization page',
'slug' => 'timebank-organization-page',
],
'nl' => [
'name' => 'Timebank organisatie pagina',
'slug' => 'timebank-organisatie-pagina',
],
'de' => [
'name' => 'Timebank-Organisation Seite',
'slug' => 'timebank-organisation-seite',
],
'es' => [
'name' => 'Organización de Timebank página',
'slug' => 'organizacion-de-timebank-pagina',
],
'fr' => [
'name' => 'Organisation de Timebank page',
'slug' => 'organisation-de-timebank-page',
],
];
$translationsUpdated = 0;
foreach ($translations as $locale => $data) {
$updated = DB::table('category_translations')
->where('category_id', $category->id)
->where('locale', $locale)
->update([
'name' => $data['name'],
'slug' => $data['slug'],
]);
$translationsUpdated += $updated;
}
if ($translationsUpdated > 0) {
$this->info(" ✓ Updated {$translationsUpdated} category translation(s) (name and slug)");
} else {
$this->warn(' No category translations found to update');
}
}
DB::commit();
$this->info(' ✓ Renamed to Timebank Organization successfully');
} catch (\Exception $e) {
DB::rollBack();
$this->error(' ✗ Failed to rename: ' . $e->getMessage());
}
}
/**
* Add the "Location not specified" placeholder country (id=10, code=XX) with translations.
* Used for profiles whose Cyclos country was unmapped (code 863).
*/
private function addLocationNotSpecifiedCountry()
{
$this->info('Adding "Location not specified" placeholder country...');
try {
DB::beginTransaction();
DB::table('countries')->upsert(
[['id' => 10, 'code' => 'XX', 'flag' => '🌐', 'phonecode' => '']],
['id']
);
$locales = [
['id' => 37, 'locale' => 'en', 'name' => '~ Location not specified'],
['id' => 38, 'locale' => 'nl', 'name' => '~ Locatie niet opgegeven'],
['id' => 39, 'locale' => 'fr', 'name' => '~ Emplacement non précisé'],
['id' => 40, 'locale' => 'es', 'name' => '~ Ubicación no especificada'],
['id' => 41, 'locale' => 'de', 'name' => '~ Standort nicht angegeben'],
];
foreach ($locales as $locale) {
DB::table('country_locales')->upsert(
[['id' => $locale['id'], 'country_id' => 10, 'name' => $locale['name'], 'alias' => null, 'locale' => $locale['locale']]],
['id']
);
}
DB::commit();
$this->info(' ✓ "Location not specified" country added/updated');
} catch (\Exception $e) {
DB::rollBack();
$this->error(' ✗ Failed to add location not specified country: ' . $e->getMessage());
}
}
}