Comments: Added back-end content reference handling
Also added archived property, to be added.
This commit is contained in:
parent
add238fe9f
commit
5e3c3ad634
|
@ -20,7 +20,7 @@ class CommentRepo
|
|||
/**
|
||||
* Create a new comment on an entity.
|
||||
*/
|
||||
public function create(Entity $entity, string $html, ?int $parent_id): Comment
|
||||
public function create(Entity $entity, string $html, ?int $parent_id, string $content_ref): Comment
|
||||
{
|
||||
$userId = user()->id;
|
||||
$comment = new Comment();
|
||||
|
@ -30,6 +30,7 @@ class CommentRepo
|
|||
$comment->updated_by = $userId;
|
||||
$comment->local_id = $this->getNextLocalId($entity);
|
||||
$comment->parent_id = $parent_id;
|
||||
$comment->content_ref = preg_match('/^bkmrk-(.*?):\d+:(\d*-\d*)?$/', $content_ref) === 1 ? $content_ref : '';
|
||||
|
||||
$entity->comments()->save($comment);
|
||||
ActivityService::add(ActivityType::COMMENT_CREATE, $comment);
|
||||
|
|
|
@ -26,6 +26,7 @@ class CommentController extends Controller
|
|||
$input = $this->validate($request, [
|
||||
'html' => ['required', 'string'],
|
||||
'parent_id' => ['nullable', 'integer'],
|
||||
'content_ref' => ['string'],
|
||||
]);
|
||||
|
||||
$page = $this->pageQueries->findVisibleById($pageId);
|
||||
|
@ -40,7 +41,7 @@ class CommentController extends Controller
|
|||
|
||||
// Create a new comment.
|
||||
$this->checkPermission('comment-create-all');
|
||||
$comment = $this->commentRepo->create($page, $input['html'], $input['parent_id'] ?? null);
|
||||
$comment = $this->commentRepo->create($page, $input['html'], $input['parent_id'] ?? null, $input['content_ref']);
|
||||
|
||||
return view('comments.comment-branch', [
|
||||
'readOnly' => false,
|
||||
|
|
|
@ -19,6 +19,8 @@ use Illuminate\Database\Eloquent\Relations\MorphTo;
|
|||
* @property int $entity_id
|
||||
* @property int $created_by
|
||||
* @property int $updated_by
|
||||
* @property string $content_ref
|
||||
* @property bool $archived
|
||||
*/
|
||||
class Comment extends Model implements Loggable
|
||||
{
|
||||
|
|
|
@ -27,6 +27,8 @@ class CommentFactory extends Factory
|
|||
'html' => $html,
|
||||
'parent_id' => null,
|
||||
'local_id' => 1,
|
||||
'content_ref' => '',
|
||||
'archived' => false,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('comments', function (Blueprint $table) {
|
||||
$table->string('content_ref');
|
||||
$table->boolean('archived')->index();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('comments', function (Blueprint $table) {
|
||||
$table->dropColumn('content_ref');
|
||||
$table->dropColumn('archived');
|
||||
});
|
||||
}
|
||||
};
|
|
@ -95,7 +95,7 @@ export class PageComments extends Component {
|
|||
const reqData = {
|
||||
html: this.wysiwygEditor.getContent(),
|
||||
parent_id: this.parentId || null,
|
||||
content_reference: this.contentReference || '',
|
||||
content_ref: this.contentReference || '',
|
||||
};
|
||||
|
||||
window.$http.post(`/comment/${this.pageId}`, reqData).then(resp => {
|
||||
|
|
|
@ -33,6 +33,32 @@ class CommentTest extends TestCase
|
|||
|
||||
$this->assertActivityExists(ActivityType::COMMENT_CREATE);
|
||||
}
|
||||
public function test_add_comment_stores_content_reference_only_if_format_valid()
|
||||
{
|
||||
$validityByRefs = [
|
||||
'bkmrk-my-title:4589284922:4-3' => true,
|
||||
'bkmrk-my-title:4589284922:' => true,
|
||||
'bkmrk-my-title:4589284922:abc' => false,
|
||||
'my-title:4589284922:' => false,
|
||||
'bkmrk-my-title-4589284922:' => false,
|
||||
];
|
||||
|
||||
$page = $this->entities->page();
|
||||
|
||||
foreach ($validityByRefs as $ref => $valid) {
|
||||
$this->asAdmin()->postJson("/comment/$page->id", [
|
||||
'html' => '<p>My comment</p>',
|
||||
'parent_id' => null,
|
||||
'content_ref' => $ref,
|
||||
]);
|
||||
|
||||
if ($valid) {
|
||||
$this->assertDatabaseHas('comments', ['entity_id' => $page->id, 'content_ref' => $ref]);
|
||||
} else {
|
||||
$this->assertDatabaseMissing('comments', ['entity_id' => $page->id, 'content_ref' => $ref]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function test_comment_edit()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue