Pages: Updated editor field to always be set

- Migration for setting on existing pages
- Added test to cover simple new page scenario

For #5117
This commit is contained in:
Dan Brown 2024-09-29 14:36:41 +01:00
parent 6103a22feb
commit 89f84c9a95
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 67 additions and 2 deletions

View File

@ -11,7 +11,6 @@ use BookStack\Entities\Models\PageRevision;
use BookStack\Entities\Queries\EntityQueries; use BookStack\Entities\Queries\EntityQueries;
use BookStack\Entities\Tools\BookContents; use BookStack\Entities\Tools\BookContents;
use BookStack\Entities\Tools\PageContent; use BookStack\Entities\Tools\PageContent;
use BookStack\Entities\Tools\PageEditorData;
use BookStack\Entities\Tools\PageEditorType; use BookStack\Entities\Tools\PageEditorType;
use BookStack\Entities\Tools\TrashCan; use BookStack\Entities\Tools\TrashCan;
use BookStack\Exceptions\MoveOperationException; use BookStack\Exceptions\MoveOperationException;
@ -44,6 +43,7 @@ class PageRepo
'owned_by' => user()->id, 'owned_by' => user()->id,
'updated_by' => user()->id, 'updated_by' => user()->id,
'draft' => true, 'draft' => true,
'editor' => PageEditorType::getSystemDefault()->value,
]); ]);
if ($parent instanceof Chapter) { if ($parent instanceof Chapter) {
@ -146,8 +146,10 @@ class PageRepo
$pageContent->setNewHTML($input['html'], user()); $pageContent->setNewHTML($input['html'], user());
} }
if ($newEditor !== $currentEditor && userCan('editor-change')) { if (($newEditor !== $currentEditor || empty($page->editor)) && userCan('editor-change')) {
$page->editor = $newEditor->value; $page->editor = $newEditor->value;
} elseif (empty($page->editor)) {
$page->editor = $defaultEditor->value;
} }
} }

View File

@ -0,0 +1,48 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
// Ensure we have an "editor" value set for pages
// Get default
$default = DB::table('settings')
->where('setting_key', '=', 'app-editor')
->first()
->value ?? 'wysiwyg';
$default = ($default === 'markdown') ? 'markdown' : 'wysiwyg';
// We set it to 'markdown' for pages currently with markdown content
DB::table('pages')
->where('editor', '=', '')
->where('markdown', '!=', '')
->update(['editor' => 'markdown']);
// We set it to 'wysiwyg' where we have HTML but no markdown
DB::table('pages')
->where('editor', '=', '')
->where('markdown', '=', '')
->where('html', '!=', '')
->update(['editor' => 'wysiwyg']);
// Otherwise, where still empty, set to the current default
DB::table('pages')
->where('editor', '=', '')
->update(['editor' => $default]);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
// Can't reverse due to not knowing what would have been empty before
}
};

View File

@ -24,6 +24,21 @@ class PageEditorTest extends TestCase
$this->withHtml($this->followRedirects($resp))->assertElementExists('#html-editor'); $this->withHtml($this->followRedirects($resp))->assertElementExists('#html-editor');
} }
public function test_editor_set_for_new_pages()
{
$book = $this->page->book;
$this->asEditor()->get($book->getUrl('/create-page'));
$newPage = $book->pages()->orderBy('id', 'desc')->first();
$this->assertEquals('wysiwyg', $newPage->editor);
$this->setSettings(['app-editor' => PageEditorType::Markdown->value]);
$this->asEditor()->get($book->getUrl('/create-page'));
$newPage = $book->pages()->orderBy('id', 'desc')->first();
$this->assertEquals('markdown', $newPage->editor);
}
public function test_markdown_setting_shows_markdown_editor_for_new_pages() public function test_markdown_setting_shows_markdown_editor_for_new_pages()
{ {
$this->setSettings(['app-editor' => PageEditorType::Markdown->value]); $this->setSettings(['app-editor' => PageEditorType::Markdown->value]);