diff --git a/src/Flarum/Core/CoreServiceProvider.php b/src/Flarum/Core/CoreServiceProvider.php index 43cc86991..78976fcc3 100644 --- a/src/Flarum/Core/CoreServiceProvider.php +++ b/src/Flarum/Core/CoreServiceProvider.php @@ -5,6 +5,7 @@ use Config; use Event; use Flarum\Core\Formatter\FormatterManager; +use Flarum\Core\Posts\Post; 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\UserMetadataUpdater'); Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\RenamedPostCreator'); + + Post::addType('comment', 'Flarum\Core\Posts\CommentPost'); + Post::addType('renamed', 'Flarum\Core\Posts\RenamedPost'); } /** diff --git a/src/Flarum/Core/Posts/Post.php b/src/Flarum/Core/Posts/Post.php index cf7504b19..33699b1c5 100755 --- a/src/Flarum/Core/Posts/Post.php +++ b/src/Flarum/Core/Posts/Post.php @@ -27,6 +27,8 @@ class Post extends Entity 'hide_user_id' => 'integer', ]; + protected static $types = []; + public static function 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 = []) { if (!empty($attributes->type)) { - $class = 'Flarum\Core\Posts\\'.ucfirst($attributes->type).'Post'; - if (class_exists($class)) { - $instance = new $class; - $instance->exists = true; - $instance->setRawAttributes((array) $attributes, true); - return $instance; + $type = $attributes->type; + if (isset(static::$types[$type])) { + $class = static::$types[$type]; + if (class_exists($class)) { + $instance = new $class; + $instance->exists = true; + $instance->setRawAttributes((array) $attributes, true); + return $instance; + } } }