mirror of
https://github.com/flarum/core.git
synced 2025-07-28 20:20:34 +02:00
Explicit mapping of post type to class
This commit is contained in:
@@ -5,6 +5,7 @@ use Config;
|
|||||||
use Event;
|
use Event;
|
||||||
|
|
||||||
use Flarum\Core\Formatter\FormatterManager;
|
use Flarum\Core\Formatter\FormatterManager;
|
||||||
|
use Flarum\Core\Posts\Post;
|
||||||
|
|
||||||
class CoreServiceProvider extends ServiceProvider
|
class CoreServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
@@ -31,6 +32,9 @@ class CoreServiceProvider extends ServiceProvider
|
|||||||
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\DiscussionMetadataUpdater');
|
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\DiscussionMetadataUpdater');
|
||||||
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\UserMetadataUpdater');
|
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\UserMetadataUpdater');
|
||||||
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\RenamedPostCreator');
|
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\RenamedPostCreator');
|
||||||
|
|
||||||
|
Post::addType('comment', 'Flarum\Core\Posts\CommentPost');
|
||||||
|
Post::addType('renamed', 'Flarum\Core\Posts\RenamedPost');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -27,6 +27,8 @@ class Post extends Entity
|
|||||||
'hide_user_id' => 'integer',
|
'hide_user_id' => 'integer',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
protected static $types = [];
|
||||||
|
|
||||||
public static function boot()
|
public static function boot()
|
||||||
{
|
{
|
||||||
parent::boot();
|
parent::boot();
|
||||||
@@ -111,15 +113,23 @@ class Post extends Entity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function addType($type, $class)
|
||||||
|
{
|
||||||
|
static::$types[$type] = $class;
|
||||||
|
}
|
||||||
|
|
||||||
public function newFromBuilder($attributes = [])
|
public function newFromBuilder($attributes = [])
|
||||||
{
|
{
|
||||||
if (!empty($attributes->type)) {
|
if (!empty($attributes->type)) {
|
||||||
$class = 'Flarum\Core\Posts\\'.ucfirst($attributes->type).'Post';
|
$type = $attributes->type;
|
||||||
if (class_exists($class)) {
|
if (isset(static::$types[$type])) {
|
||||||
$instance = new $class;
|
$class = static::$types[$type];
|
||||||
$instance->exists = true;
|
if (class_exists($class)) {
|
||||||
$instance->setRawAttributes((array) $attributes, true);
|
$instance = new $class;
|
||||||
return $instance;
|
$instance->exists = true;
|
||||||
|
$instance->setRawAttributes((array) $attributes, true);
|
||||||
|
return $instance;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user