diff --git a/src/Admin/AdminServiceProvider.php b/src/Admin/AdminServiceProvider.php index e9de037dc..75aea1d71 100644 --- a/src/Admin/AdminServiceProvider.php +++ b/src/Admin/AdminServiceProvider.php @@ -11,7 +11,7 @@ namespace Flarum\Admin; use Flarum\Http\RouteCollection; -use Flarum\Http\UrlGenerator; +use Flarum\Admin\UrlGenerator; use Illuminate\Support\ServiceProvider; use Psr\Http\Message\ServerRequestInterface; use Zend\Diactoros\Response\RedirectResponse; @@ -26,7 +26,7 @@ class AdminServiceProvider extends ServiceProvider public function register() { $this->app->singleton( - 'Flarum\Http\UrlGeneratorInterface', + UrlGenerator::class, function () { return new UrlGenerator($this->app->make('flarum.admin.routes')); } @@ -57,7 +57,7 @@ class AdminServiceProvider extends ServiceProvider $routes->get( '/', - 'flarum.admin.index', + 'index', $this->action('Flarum\Admin\Actions\ClientAction') ); } diff --git a/src/Admin/UrlGenerator.php b/src/Admin/UrlGenerator.php new file mode 100644 index 000000000..58e47de28 --- /dev/null +++ b/src/Admin/UrlGenerator.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Flarum\Admin; + +use Flarum\Http\UrlGenerator as BaseUrlGenerator; + +class UrlGenerator extends BaseUrlGenerator +{ + protected $prefix = 'admin'; +} diff --git a/src/Api/Actions/Discussions/IndexAction.php b/src/Api/Actions/Discussions/IndexAction.php index c2c2f962a..489267425 100644 --- a/src/Api/Actions/Discussions/IndexAction.php +++ b/src/Api/Actions/Discussions/IndexAction.php @@ -14,7 +14,7 @@ use Flarum\Core\Search\SearchCriteria; use Flarum\Core\Discussions\Search\DiscussionSearcher; use Flarum\Api\Actions\SerializeCollectionAction; use Flarum\Api\JsonApiRequest; -use Flarum\Http\UrlGeneratorInterface; +use Flarum\Api\UrlGenerator; use Tobscure\JsonApi\Document; class IndexAction extends SerializeCollectionAction @@ -25,7 +25,7 @@ class IndexAction extends SerializeCollectionAction protected $searcher; /** - * @var UrlGeneratorInterface + * @var UrlGenerator */ protected $url; @@ -74,9 +74,9 @@ class IndexAction extends SerializeCollectionAction /** * @param DiscussionSearcher $searcher - * @param UrlGeneratorInterface $url + * @param UrlGenerator $url */ - public function __construct(DiscussionSearcher $searcher, UrlGeneratorInterface $url) + public function __construct(DiscussionSearcher $searcher, UrlGenerator $url) { $this->searcher = $searcher; $this->url = $url; @@ -106,7 +106,7 @@ class IndexAction extends SerializeCollectionAction $this->addPaginationLinks( $document, $request, - $request->http ? $this->url->toRoute('flarum.api.discussions.index') : '', + $request->http ? $this->url->toRoute('discussions.index') : '', $results->areMoreResults() ); diff --git a/src/Api/Actions/Users/IndexAction.php b/src/Api/Actions/Users/IndexAction.php index 4b433fc8f..f28e34824 100644 --- a/src/Api/Actions/Users/IndexAction.php +++ b/src/Api/Actions/Users/IndexAction.php @@ -14,7 +14,7 @@ use Flarum\Core\Search\SearchCriteria; use Flarum\Core\Users\Search\UserSearcher; use Flarum\Api\Actions\SerializeCollectionAction; use Flarum\Api\JsonApiRequest; -use Flarum\Http\UrlGeneratorInterface; +use Flarum\Api\UrlGenerator; use Tobscure\JsonApi\Document; class IndexAction extends SerializeCollectionAction @@ -25,7 +25,7 @@ class IndexAction extends SerializeCollectionAction protected $searcher; /** - * @var UrlGeneratorInterface + * @var UrlGenerator */ protected $url; @@ -68,9 +68,9 @@ class IndexAction extends SerializeCollectionAction /** * @param UserSearcher $searcher - * @param UrlGeneratorInterface $url + * @param UrlGenerator $url */ - public function __construct(UserSearcher $searcher, UrlGeneratorInterface $url) + public function __construct(UserSearcher $searcher, UrlGenerator $url) { $this->searcher = $searcher; $this->url = $url; @@ -97,7 +97,7 @@ class IndexAction extends SerializeCollectionAction $this->addPaginationLinks( $document, $request, - $this->url->toRoute('flarum.api.users.index'), + $this->url->toRoute('users.index'), $results->areMoreResults() ); diff --git a/src/Api/ApiServiceProvider.php b/src/Api/ApiServiceProvider.php index 6c5dc3004..f72817c02 100644 --- a/src/Api/ApiServiceProvider.php +++ b/src/Api/ApiServiceProvider.php @@ -17,7 +17,7 @@ use Flarum\Events\RegisterApiRoutes; use Flarum\Events\RegisterActivityTypes; use Flarum\Events\RegisterNotificationTypes; use Flarum\Http\RouteCollection; -use Flarum\Http\UrlGenerator; +use Flarum\Api\UrlGenerator; use Illuminate\Support\ServiceProvider; use Psr\Http\Message\ServerRequestInterface; @@ -35,7 +35,7 @@ class ApiServiceProvider extends ServiceProvider }); $this->app->singleton( - 'Flarum\Http\UrlGeneratorInterface', + UrlGenerator::class, function () { return new UrlGenerator($this->app->make('flarum.api.routes')); } @@ -78,28 +78,28 @@ class ApiServiceProvider extends ServiceProvider // Get forum information $routes->get( '/forum', - 'flarum.api.forum.show', + 'forum.show', $this->action('Flarum\Api\Actions\Forum\ShowAction') ); // Save forum information $routes->patch( '/forum', - 'flarum.api.forum.update', + 'forum.update', $this->action('Flarum\Api\Actions\Forum\UpdateAction') ); // Retrieve authentication token $routes->post( '/token', - 'flarum.api.token', + 'token', $this->action('Flarum\Api\Actions\TokenAction') ); // Send forgot password email $routes->post( '/forgot', - 'flarum.api.forgot', + 'forgot', $this->action('Flarum\Api\Actions\ForgotAction') ); @@ -112,49 +112,49 @@ class ApiServiceProvider extends ServiceProvider // List users $routes->get( '/users', - 'flarum.api.users.index', + 'users.index', $this->action('Flarum\Api\Actions\Users\IndexAction') ); // Register a user $routes->post( '/users', - 'flarum.api.users.create', + 'users.create', $this->action('Flarum\Api\Actions\Users\CreateAction') ); // Get a single user $routes->get( '/users/{id}', - 'flarum.api.users.show', + 'users.show', $this->action('Flarum\Api\Actions\Users\ShowAction') ); // Edit a user $routes->patch( '/users/{id}', - 'flarum.api.users.update', + 'users.update', $this->action('Flarum\Api\Actions\Users\UpdateAction') ); // Delete a user $routes->delete( '/users/{id}', - 'flarum.api.users.delete', + 'users.delete', $this->action('Flarum\Api\Actions\Users\DeleteAction') ); // Upload avatar $routes->post( '/users/{id}/avatar', - 'flarum.api.users.avatar.upload', + 'users.avatar.upload', $this->action('Flarum\Api\Actions\Users\UploadAvatarAction') ); // Remove avatar $routes->delete( '/users/{id}/avatar', - 'flarum.api.users.avatar.delete', + 'users.avatar.delete', $this->action('Flarum\Api\Actions\Users\DeleteAvatarAction') ); @@ -167,28 +167,28 @@ class ApiServiceProvider extends ServiceProvider // List activity $routes->get( '/activity', - 'flarum.api.activity.index', + 'activity.index', $this->action('Flarum\Api\Actions\Activity\IndexAction') ); // List notifications for the current user $routes->get( '/notifications', - 'flarum.api.notifications.index', + 'notifications.index', $this->action('Flarum\Api\Actions\Notifications\IndexAction') ); // Mark all notifications as read $routes->post( '/notifications/read', - 'flarum.api.notifications.readAll', + 'notifications.readAll', $this->action('Flarum\Api\Actions\Notifications\ReadAllAction') ); // Mark a single notification as read $routes->patch( '/notifications/{id}', - 'flarum.api.notifications.update', + 'notifications.update', $this->action('Flarum\Api\Actions\Notifications\UpdateAction') ); @@ -201,35 +201,35 @@ class ApiServiceProvider extends ServiceProvider // List discussions $routes->get( '/discussions', - 'flarum.api.discussions.index', + 'discussions.index', $this->action('Flarum\Api\Actions\Discussions\IndexAction') ); // Create a discussion $routes->post( '/discussions', - 'flarum.api.discussions.create', + 'discussions.create', $this->action('Flarum\Api\Actions\Discussions\CreateAction') ); // Show a single discussion $routes->get( '/discussions/{id}', - 'flarum.api.discussions.show', + 'discussions.show', $this->action('Flarum\Api\Actions\Discussions\ShowAction') ); // Edit a discussion $routes->patch( '/discussions/{id}', - 'flarum.api.discussions.update', + 'discussions.update', $this->action('Flarum\Api\Actions\Discussions\UpdateAction') ); // Delete a discussion $routes->delete( '/discussions/{id}', - 'flarum.api.discussions.delete', + 'discussions.delete', $this->action('Flarum\Api\Actions\Discussions\DeleteAction') ); @@ -242,35 +242,35 @@ class ApiServiceProvider extends ServiceProvider // List posts, usually for a discussion $routes->get( '/posts', - 'flarum.api.posts.index', + 'posts.index', $this->action('Flarum\Api\Actions\Posts\IndexAction') ); // Create a post $routes->post( '/posts', - 'flarum.api.posts.create', + 'posts.create', $this->action('Flarum\Api\Actions\Posts\CreateAction') ); // Show a single or multiple posts by ID $routes->get( '/posts/{id}', - 'flarum.api.posts.show', + 'posts.show', $this->action('Flarum\Api\Actions\Posts\ShowAction') ); // Edit a post $routes->patch( '/posts/{id}', - 'flarum.api.posts.update', + 'posts.update', $this->action('Flarum\Api\Actions\Posts\UpdateAction') ); // Delete a post $routes->delete( '/posts/{id}', - 'flarum.api.posts.delete', + 'posts.delete', $this->action('Flarum\Api\Actions\Posts\DeleteAction') ); @@ -283,28 +283,28 @@ class ApiServiceProvider extends ServiceProvider // List groups $routes->get( '/groups', - 'flarum.api.groups.index', + 'groups.index', $this->action('Flarum\Api\Actions\Groups\IndexAction') ); // Create a group $routes->post( '/groups', - 'flarum.api.groups.create', + 'groups.create', $this->action('Flarum\Api\Actions\Groups\CreateAction') ); // Edit a group $routes->patch( '/groups/{id}', - 'flarum.api.groups.update', + 'groups.update', $this->action('Flarum\Api\Actions\Groups\UpdateAction') ); // Delete a group $routes->delete( '/groups/{id}', - 'flarum.api.groups.delete', + 'groups.delete', $this->action('Flarum\Api\Actions\Groups\DeleteAction') ); @@ -317,28 +317,28 @@ class ApiServiceProvider extends ServiceProvider // Toggle an extension $routes->patch( '/extensions/{name}', - 'flarum.api.extensions.update', + 'extensions.update', $this->action('Flarum\Api\Actions\Extensions\UpdateAction') ); // Uninstall an extension $routes->delete( '/extensions/{name}', - 'flarum.api.extensions.delete', + 'extensions.delete', $this->action('Flarum\Api\Actions\Extensions\DeleteAction') ); // Update config settings $routes->post( '/config', - 'flarum.api.config', + 'config', $this->action('Flarum\Api\Actions\ConfigAction') ); // Update a permission $routes->post( '/permission', - 'flarum.api.permission', + 'permission', $this->action('Flarum\Api\Actions\PermissionAction') ); diff --git a/src/Api/UrlGenerator.php b/src/Api/UrlGenerator.php new file mode 100644 index 000000000..511824640 --- /dev/null +++ b/src/Api/UrlGenerator.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Flarum\Api; + +use Flarum\Http\UrlGenerator as BaseUrlGenerator; + +class UrlGenerator extends BaseUrlGenerator +{ + protected $prefix = 'api'; +} diff --git a/src/Core/Users/Commands/RequestPasswordResetHandler.php b/src/Core/Users/Commands/RequestPasswordResetHandler.php index 3f36f06ad..401653f98 100644 --- a/src/Core/Users/Commands/RequestPasswordResetHandler.php +++ b/src/Core/Users/Commands/RequestPasswordResetHandler.php @@ -17,7 +17,7 @@ use Illuminate\Contracts\Mail\Mailer; use Illuminate\Mail\Message; use Illuminate\Database\Eloquent\ModelNotFoundException; use Flarum\Core; -use Flarum\Http\UrlGeneratorInterface; +use Flarum\Forum\UrlGenerator; class RequestPasswordResetHandler { @@ -37,7 +37,7 @@ class RequestPasswordResetHandler protected $mailer; /** - * @var UrlGeneratorInterface + * @var UrlGenerator */ protected $url; @@ -45,9 +45,9 @@ class RequestPasswordResetHandler * @param UserRepository $users * @param SettingsRepository $settings * @param Mailer $mailer - * @param UrlGeneratorInterface $url + * @param UrlGenerator $url */ - public function __construct(UserRepository $users, SettingsRepository $settings, Mailer $mailer, UrlGeneratorInterface $url) + public function __construct(UserRepository $users, SettingsRepository $settings, Mailer $mailer, UrlGenerator $url) { $this->users = $users; $this->settings = $settings; diff --git a/src/Core/Users/User.php b/src/Core/Users/User.php index 708323864..ee224b92f 100755 --- a/src/Core/Users/User.php +++ b/src/Core/Users/User.php @@ -328,7 +328,7 @@ class User extends Model */ public function getAvatarUrlAttribute() { - $urlGenerator = app('Flarum\Http\UrlGeneratorInterface'); + $urlGenerator = app('Flarum\Forum\UrlGenerator'); return $this->avatar_path ? $urlGenerator->toAsset('avatars/'.$this->avatar_path) : null; } diff --git a/src/Forum/Actions/DiscussionAction.php b/src/Forum/Actions/DiscussionAction.php index 35f7e96b8..129ad6109 100644 --- a/src/Forum/Actions/DiscussionAction.php +++ b/src/Forum/Actions/DiscussionAction.php @@ -50,8 +50,8 @@ class DiscussionAction extends ClientAction $queryString[] = $k . '=' . $v; } - return app('Flarum\Http\UrlGeneratorInterface') - ->toRoute('flarum.forum.discussion', ['id' => $document->data->id]) . + return app('Flarum\Forum\UrlGenerator') + ->toRoute('discussion', ['id' => $document->data->id]) . ($queryString ? '?' . implode('&', $queryString) : ''); }; diff --git a/src/Forum/ForumServiceProvider.php b/src/Forum/ForumServiceProvider.php index 2b2bb9317..24ab7da16 100644 --- a/src/Forum/ForumServiceProvider.php +++ b/src/Forum/ForumServiceProvider.php @@ -13,7 +13,7 @@ namespace Flarum\Forum; use Flarum\Core\Users\Guest; use Flarum\Events\RegisterForumRoutes; use Flarum\Http\RouteCollection; -use Flarum\Http\UrlGenerator; +use Flarum\Forum\UrlGenerator; use Flarum\Support\ServiceProvider; use Psr\Http\Message\ServerRequestInterface; @@ -31,7 +31,7 @@ class ForumServiceProvider extends ServiceProvider }); $this->app->singleton( - 'Flarum\Http\UrlGeneratorInterface', + UrlGenerator::class, function () { return new UrlGenerator($this->app->make('flarum.forum.routes')); } @@ -62,67 +62,67 @@ class ForumServiceProvider extends ServiceProvider $routes->get( '/all', - 'flarum.forum.index', + 'index', $defaultAction = $this->action('Flarum\Forum\Actions\IndexAction') ); $routes->get( '/d/{id:\d+(?:-[^/]*)?}[/{near:[^/]*}]', - 'flarum.forum.discussion', + 'discussion', $this->action('Flarum\Forum\Actions\DiscussionAction') ); $routes->get( '/u/{username}[/{filter:[^/]*}]', - 'flarum.forum.user', + 'user', $this->action('Flarum\Forum\Actions\ClientAction') ); $routes->get( '/settings', - 'flarum.forum.settings', + 'settings', $this->action('Flarum\Forum\Actions\ClientAction') ); $routes->get( '/notifications', - 'flarum.forum.notifications', + 'notifications', $this->action('Flarum\Forum\Actions\ClientAction') ); $routes->get( '/logout', - 'flarum.forum.logout', + 'logout', $this->action('Flarum\Forum\Actions\LogoutAction') ); $routes->post( '/login', - 'flarum.forum.login', + 'login', $this->action('Flarum\Forum\Actions\LoginAction') ); $routes->post( '/register', - 'flarum.forum.register', + 'register', $this->action('Flarum\Forum\Actions\RegisterAction') ); $routes->get( '/confirm/{token}', - 'flarum.forum.confirmEmail', + 'confirmEmail', $this->action('Flarum\Forum\Actions\ConfirmEmailAction') ); $routes->get( '/reset/{token}', - 'flarum.forum.resetPassword', + 'resetPassword', $this->action('Flarum\Forum\Actions\ResetPasswordAction') ); $routes->post( '/reset', - 'flarum.forum.savePassword', + 'savePassword', $this->action('Flarum\Forum\Actions\SavePasswordAction') ); @@ -137,7 +137,7 @@ class ForumServiceProvider extends ServiceProvider $routes->get( '/', - 'flarum.forum.default', + 'default', $defaultAction ); } diff --git a/src/Http/UrlGeneratorInterface.php b/src/Forum/UrlGenerator.php similarity index 60% rename from src/Http/UrlGeneratorInterface.php rename to src/Forum/UrlGenerator.php index 0dd1f8418..1e301050e 100644 --- a/src/Http/UrlGeneratorInterface.php +++ b/src/Forum/UrlGenerator.php @@ -1,5 +1,4 @@ reverse[$name][0]; - array_walk($parts, [$this, 'fixPathPart'], $parameters); + if (isset($this->reverse[$name])) { + $parts = $this->reverse[$name][0]; + array_walk($parts, [$this, 'fixPathPart'], $parameters); - return '/' . ltrim(implode('', $parts), '/'); + return '/' . ltrim(implode('', $parts), '/'); + } + + throw new \RuntimeException("Route $name not found"); } } diff --git a/src/Http/UrlGenerator.php b/src/Http/UrlGenerator.php index 6383df3d9..1cab05e05 100644 --- a/src/Http/UrlGenerator.php +++ b/src/Http/UrlGenerator.php @@ -13,10 +13,11 @@ namespace Flarum\Http; use Flarum\Core; -class UrlGenerator implements UrlGeneratorInterface +class UrlGenerator { protected $routes; + protected $prefix; public function __construct(RouteCollection $routes) { @@ -28,11 +29,11 @@ class UrlGenerator implements UrlGeneratorInterface $path = $this->routes->getPath($name, $parameters); $path = ltrim($path, '/'); - return Core::url() . "/$path"; + return Core::url($this->prefix) . "/$path"; } public function toAsset($path) { - return Core::url() . "/assets/$path"; + return Core::url($this->prefix) . "/assets/$path"; } } diff --git a/views/index.blade.php b/views/index.blade.php index 29ef45066..8d3f1e997 100644 --- a/views/index.blade.php +++ b/views/index.blade.php @@ -1,5 +1,5 @@

All Discussions

@@ -7,7 +7,7 @@ $url = app('Flarum\Http\UrlGeneratorInterface'); - Next Page » + Next Page »
diff --git a/views/reset.blade.php b/views/reset.blade.php index 68db7b097..8fd25b2ee 100644 --- a/views/reset.blade.php +++ b/views/reset.blade.php @@ -11,7 +11,7 @@

Reset Your Password

-
+