From abf7e00ee4fd145dd1b7b25e0accce2e75fd9065 Mon Sep 17 00:00:00 2001 From: Rafael Horvat Date: Thu, 30 Sep 2021 15:58:01 +0200 Subject: [PATCH] Added `RemoveResource` extender. (#34) * Added `RemoveResource` extender. * Added docs for removing a resource to README --- README.md | 11 ++++++++ src/Extend/RemoveResource.php | 49 +++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/Extend/RemoveResource.php diff --git a/README.md b/README.md index e64ca71..f81602b 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,8 @@ _Best for larger forums, starting at 50.000 items._ ## Extending +### Register a new Resource + In order to register your own resource, create a class that implements `FoF\Sitemap\Resources\Resource`. Make sure to implement all abstract methods, check other implementations for examples. After this, register your @@ -63,6 +65,15 @@ return [ ``` That's it. +### Remove a Resource + +In a very similar way, you can also remove resources from the sitemap: +```php +return [ + new \FoF\Sitemap\Extend\RemoveResource(User::class) +]; +``` + ## Scheduling If the size of your forum requires one of the cache modes - either in-memory or disk, consider setting up the Flarum scheduler. Read more information about this [here](https://discuss.flarum.org/d/24118) diff --git a/src/Extend/RemoveResource.php b/src/Extend/RemoveResource.php new file mode 100644 index 0000000..41910da --- /dev/null +++ b/src/Extend/RemoveResource.php @@ -0,0 +1,49 @@ +resource = $resource; + } + + public function extend(Container $container, Extension $extension = null) + { + $container->extend('fof.sitemap.resources', function (array $resources) use ($container) { + $resource = $container->make($this->resource); + + if ($resource instanceof Resource) { + $resources = array_filter($resources, function ($res) { + return get_class($res) !== $this->resource; + }); + } else { + throw new InvalidArgumentException("{$this->resource} has to extend ".Resource::class); + } + + return $resources; + }); + } +}