Skip to content

Commit

Permalink
feat: move to service
Browse files Browse the repository at this point in the history
  • Loading branch information
64knl committed Feb 2, 2024
1 parent 4b8d951 commit 2ecdb72
Show file tree
Hide file tree
Showing 14 changed files with 411 additions and 111 deletions.
2 changes: 1 addition & 1 deletion routes/cms/editor.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

// import/export
Route::post('table-export', [CmsEditorImportExportController::class, 'exportAllTables']);

Route::post('template-export', [CmsEditorImportExportController::class, 'exportAllTemplates']);
// table
Route::prefix('table')->group(function () {
Route::get('', [CmsEditorTableController::class, 'index']);
Expand Down
4 changes: 2 additions & 2 deletions routes/console.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
use NotFound\Framework\Helpers\CmsImportHelper;
use NotFound\Framework\Services\CmsExchange\ExchangeConsoleService;
use NotFound\Framework\Services\Indexer\IndexBuilderService;

Artisan::command('siteboss:index-site {--debug : Whether debug messages should be displayed} {--clean : Truncate search table}', function ($debug, $clean) {
Expand All @@ -15,7 +15,7 @@

Artisan::command('siteboss:cms-import {--debug : Whether debug messages should be displayed} {--dry : Dry Run}', function ($debug, $dry) {

$indexer = new CmsImportHelper($debug, $dry);
$indexer = new ExchangeConsoleService($debug, $dry);
$indexer->import();

return Command::SUCCESS;
Expand Down
18 changes: 18 additions & 0 deletions src/Http/Controllers/CmsEditor/CmsEditorImportExportController.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use NotFound\Framework\Http\Controllers\Controller;
use NotFound\Framework\Models\Table;
use NotFound\Framework\Models\Template;
use NotFound\Layout\LayoutResponse;
use NotFound\Layout\Responses\Toast;

Expand All @@ -25,4 +26,21 @@ public function exportAllTables()

return $response->build();
}

public function exportAllTemplates()
{
$response = new LayoutResponse();
$templates = Template::all();

foreach ($templates as $template) {
// TODO: catch exceptions
$template->exportToFile();
}

$response->addAction(
new Toast($templates->count().' templates exported successfully')
);

return $response->build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
use Illuminate\Http\Request as HttpRequest;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use NotFound\Framework\Helpers\CmsImportHelper;
use NotFound\Framework\Http\Requests\FormDataRequest;
use NotFound\Framework\Models\Table;
use NotFound\Framework\Services\CmsExchangeService;
use NotFound\Framework\Services\Editor\FieldsProperties;
use NotFound\Layout\Elements\LayoutBreadcrumb;
use NotFound\Layout\Elements\LayoutButton;
Expand Down
10 changes: 7 additions & 3 deletions src/Http/Controllers/CmsEditor/CmsEditorTemplateController.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,13 @@ public function index()
$form->addButton(new LayoutButton('Add new template'));
$widget2->addForm($form);

$form = new LayoutForm('/app/editor/template-export/');

$form->addInput((new LayoutInputCheckbox('name', 'I know this will overwrite the template files from my database'))->setRequired());

$form->addButton(new LayoutButton('Export all templates to files'));
$widget2->addForm($form);

$page->addWidget($widget2);

$response->addUIElement($page);
Expand Down Expand Up @@ -170,9 +177,6 @@ public function readOne(Template $table)

$page->addWidget($widget2);

$page->addWidget(CmsEditorImportExportController::getExport($tables));
$page->addWidget(CmsEditorImportExportController::getImport($table->id, 'page'));

$response->addUIElement($page);

return $response->build();
Expand Down
1 change: 0 additions & 1 deletion src/Models/Editor/AbstractEditor.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ abstract class AbstractEditor
{
public function __construct(protected TableService $ts)
{

}

public function getBar(): LayoutBar
Expand Down
4 changes: 2 additions & 2 deletions src/Models/Table.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Schema;
use NotFound\Framework\Services\Legacy\StatusColumn;
use NotFound\Framework\Traits\Exportable;
use NotFound\Framework\Traits\Exchangeable;

/**
* NotFound\Framework\Models\Table
Expand Down Expand Up @@ -56,7 +56,7 @@
*/
class Table extends AssetModel
{
use Exportable;
use Exchangeable;
use SoftDeletes;

protected $table = 'cms_table';
Expand Down
10 changes: 9 additions & 1 deletion src/Models/Template.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use NotFound\Framework\Traits\Exchangeable;

/**
* NotFound\Framework\Models\Template
Expand Down Expand Up @@ -50,7 +51,9 @@
*/
class Template extends AssetModel
{
use HasFactory, SoftDeletes;
use HasFactory;
use SoftDeletes;
use Exchangeable;

protected $table = 'cms_template';

Expand Down Expand Up @@ -79,4 +82,9 @@ public function getIdentifier()
{
return strtolower($this->attributes['filename']);
}

private function getSiteTableName()
{
return strtolower($this->filename);
}
}
36 changes: 36 additions & 0 deletions src/Services/CmsExchange/AbstractExchangeService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

namespace NotFound\Framework\Services\CmsExchange;

abstract class AbstractExchangeService
{
protected bool $debug ;
protected bool $dryRun ;

protected string $exportTypeName;

abstract public function runImport(): void;

abstract public function exportRetainIds(): bool;

abstract public function exportTypeName() : string;

public function exportTypeNamePlural() : string
{
return $this->exportTypeName().'s';
}

public function import(bool $debug = false, bool $dryRun = false): void {
$this->debug = $debug;
$this->dryRun = $dryRun;
$this->runImport();
}

protected function debug($text, $force = false)
{
if ($this->debug || $force) {
printf("\n - %s", $text);
}
}

}
39 changes: 39 additions & 0 deletions src/Services/CmsExchange/ExchangeConsoleService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

namespace NotFound\Framework\Services\CmsExchange;

use File;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use NotFound\Framework\Models\Table;
use NotFound\Framework\Models\TableItem;

class ExchangeConsoleService
{
public function __construct(
private bool $debug = false,
private bool $dryRun = false
) {
}
public function import(): void
{
$this->debug('Starting CMS Import');
if ($this->dryRun) {
$this->debug('Dry Run: true', force: true);
}

$tableExchangeService = new TableExchangeService();
$tableExchangeService->import($this->debug, $this->dryRun);
$templateExchangeService = new TemplateExchangeService();
$templateExchangeService->import($this->debug, $this->dryRun);

$this->debug('DONE');
}

private function debug($text, $force = false)
{
if ($this->debug || $force) {
printf("\n - %s", $text);
}
}
}
174 changes: 174 additions & 0 deletions src/Services/CmsExchange/TableExchangeService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
<?php

namespace NotFound\Framework\Services\CmsExchange;

use File;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use NotFound\Framework\Models\Table;
use NotFound\Framework\Models\TableItem;

class TableExchangeService extends AbstractExchangeService
{

protected string $exportTypeName = 'table';

public function runImport(): void
{
$this->debug('Starting CMS Import');
if ($this->dryRun) {
$this->debug('Dry Run: true', force: true);
}

$this->importTables('cms_users');
$this->debug('DONE');
}

public function hasChanges(Table $table): bool
{
$path = resource_path('siteboss/tables/'.$table->table.'.json');
if (! File::exists($path)) {
return false;
}
$data = $table->exportToObject();
$fileData = json_decode(file_get_contents($path));

return $data != $fileData;
}

private function importTables(string $tableName): object
{
$path = resource_path('siteboss/tables');
if (! File::exists($path)) {
$this->debug('No export files found in '.$path);

return (object) [];
}

// Create temp table to import into
$this->createImportTables();

$fileSources = [];
$files = File::files($path);
foreach ($files as $file) {
$index = str_replace('.json', '', $file->getFilename());
$fileSources[$index] = json_decode(file_get_contents($file->getPathname()));
}
$this->debug('== Read '.count($fileSources).' files from '.$path);

$order = 1;
foreach ($fileSources as $tableName => $fileSource) {
if ($this->dryRun) {
$this->debug('CREATE TABLE '.$tableName);
} else {

$table = new Table();
if (isset($fileSource->id)) {
$table->id = $fileSource->id;
}
$table->name = $fileSource->name;
$table->model = $fileSource->model ?? null;
$table->url = $fileSource->url;
$table->rights = $fileSource->rights;

$table->comments = $fileSource->comments;
$table->allow_create = $fileSource->allow_create;
$table->allow_delete = $fileSource->allow_delete;
$table->allow_sort = $fileSource->allow_sort;
$table->properties = $fileSource->properties;
$table->order = $order++;
$table->enabled = $fileSource->enabled;
$table->table = $tableName;
$table->save();

$tableId = $table->id;
}
$itemOrder = 1;
foreach ($fileSource->items as $item) {
if ($this->dryRun) {
$this->debug(' [x] '.$item->name);

continue;
}
$tableItem = new TableItem();
if (isset($item->id)) {
$tableItem->id = $item->id;
}
$tableItem->table_id = $tableId;
$tableItem->name = $item->name;
$tableItem->type = $item->type;
$tableItem->internal = $item->internal;
$tableItem->description = $item->description;
$tableItem->properties = $item->properties;
$tableItem->server_properties = $item->server_properties;
$tableItem->order = $itemOrder++;
$tableItem->enabled = $item->enabled;
$tableItem->rights = $item->rights;

$tableItem->save();

}

}

return (object) [];
}

private function createImportTables(): void
{
if ($this->dryRun) {
$this->debug('Dry run: skipping table creation');

return;
}
$this->debug('Creating import tables');
Schema::dropIfExists('cms_table_backup');
Schema::rename('cms_table', 'cms_table_backup');
Schema::create('cms_table', function (Blueprint $table) {
$table->id();
$table->string('name', 128)->nullable();
$table->string('table', 128)->nullable();
$table->string('model', 128)->nullable();
$table->string('url', 128)->nullable();
$table->string('rights', 128)->nullable();
$table->text('comments')->nullable();
$table->boolean('allow_create')->default(true);
$table->boolean('allow_delete')->default(true);
$table->boolean('allow_sort')->default(true);
$table->json('properties')->nullable();
$table->integer('order')->nullable();
$table->tinyInteger('enabled')->default(1);
$table->softDeletes();
$table->timestamps();
});

Schema::dropIfExists('cms_tableitem_backup');
Schema::rename('cms_tableitem', 'cms_tableitem_backup');
Schema::create('cms_tableitem', function (Blueprint $table) {
$table->id();
$table->string('rights', 128)->default('');
$table->foreignIdFor(Table::class, 'table_id')->nullable();
$table->string('type', 64)->nullable();
$table->string('internal', 64)->nullable();
$table->string('name', 128)->nullable();
$table->text('description')->nullable();
$table->json('properties')->nullable();
$table->json('server_properties')->nullable();
$table->integer('order')->nullable(); //TODO: FIX
$table->tinyInteger('enabled')->nullable()->default(1);
$table->softDeletes();
$table->timestamps();
});

}

public function exportTypeName() : string
{
return 'table';
}

public function exportRetainIds(): bool
{
return config('siteboss.export_retain_ids') ?? false;
}
}
Loading

0 comments on commit 2ecdb72

Please sign in to comment.