1
0
mirror of https://github.com/flarum/core.git synced 2025-08-08 09:26:34 +02:00

Use Repositories instead of models

This commit is contained in:
Matthew Kilgore
2020-11-30 18:03:25 -05:00
parent 92a5b98b77
commit 8fb65e9de7
4 changed files with 44 additions and 7 deletions

View File

@@ -15,6 +15,17 @@ use Flarum\User\User;
class IdWithTransliteratedSlugDriver implements SlugDriverInterface
{
/**
* @var $discussions DiscussionRepository
*/
protected $discussions;
public function __construct(DiscussionRepository $discussions)
{
$this->discussions = $discussions;
}
public function toSlug(AbstractModel $instance): string
{
return $instance->id.(trim($instance->slug) ? '-'.$instance->slug : '');
@@ -27,6 +38,6 @@ class IdWithTransliteratedSlugDriver implements SlugDriverInterface
$slug = $slug_array[0];
}
return Discussion::where('id', $slug)->whereVisibleTo($actor)->firstOrFail();
return $this->discussions->findOrFail($slug, $actor);
}
}

View File

@@ -51,11 +51,9 @@ class HttpServiceProvider extends AbstractServiceProvider
foreach ($this->app->make('flarum.http.slugDrivers') as $resourceClass => $resourceDrivers) {
$driverKey = $settings->get("slug_driver_$resourceClass", 'default');
if (array_key_exists($driverKey, $resourceDrivers)) {
$driverClass = $resourceDrivers[$driverKey];
} else {
$driverClass = $resourceDrivers['default'];
}
$driverClass = array_key_exists($driverKey, $resourceDrivers) ? $resourceDrivers[$driverKey] : $resourceDrivers['default'];
$compiledDrivers[$resourceClass] = $this->app->make($driverClass);
}

View File

@@ -40,6 +40,23 @@ class UserRepository
return $this->scopeVisibleTo($query, $actor)->firstOrFail();
}
/**
* Find a user by username, optionally making sure it is visible to a certain
* user, or throw an exception.
*
* @param int $id
* @param User $actor
* @return User
*
* @throws \Illuminate\Database\Eloquent\ModelNotFoundException
*/
public function findOrFailByUsername($username, User $actor = null)
{
$query = User::where('id', $username);
return $this->scopeVisibleTo($query, $actor)->firstOrFail();
}
/**
* Find a user by an identification (username or email).
*

View File

@@ -14,6 +14,17 @@ use Flarum\Http\SlugDriverInterface;
class UsernameSlugDriver implements SlugDriverInterface
{
/**
* @var $users UserRepository
*/
protected $users;
public function __construct(UserRepository $users)
{
$this->users = $users;
}
public function toSlug(AbstractModel $instance): string
{
return $instance->username;
@@ -21,6 +32,6 @@ class UsernameSlugDriver implements SlugDriverInterface
public function fromSlug(string $slug, User $actor): AbstractModel
{
return User::where('username', $slug)->whereVisibleTo($actor)->firstOrFail();
return $this->users->findOrFailByUsername($slug, $actor);
}
}