]> git.mxchange.org Git - friendica.git/blobdiff - doc/AddonStorageBackend.md
Merge pull request #8179 from MrPetovan/bug/notices
[friendica.git] / doc / AddonStorageBackend.md
index 896ea49bf7318383ef70d128e4fb7fc9934e5339..17c3f0414077ee1dfb4d8a800427aea46372e39c 100644 (file)
@@ -23,6 +23,7 @@ interface IStorage
        public function getOptions();
        public function saveOptions(array $data);
        public function __toString();
+       public static function getName();
 }
 ```
 
@@ -85,11 +86,16 @@ See doxygen documentation of `IStorage` interface for details about each method.
 
 Each backend must be registered in the system when the plugin is installed, to be aviable.
 
-`DI::facStorage()->register(string $name, string $class)` is used to register the backend class.
-The `$name` must be univocal and will be shown to admin.
+`DI::facStorage()->register(string $class)` is used to register the backend class.
 
 When the plugin is uninstalled, registered backends must be unregistered using
-`DI::facStorage()->unregister(string $name)`.
+`DI::facStorage()->unregister(string $class)`.
+
+You have to register a new hook in your addon, listening on `storage_instance(App $a, array $data)`.
+In case `$data['name']` is your storage class name, you have to instance a new instance of your `Friendica\Model\Storage\IStorage` class.
+Set the instance of your class as `$data['storage']` to pass it back to the backend.
+
+This is necessary because it isn't always clear, if you need further construction arguments.
 
 ## Adding tests
 
@@ -130,26 +136,26 @@ namespace Friendica\Addon\samplestorage;
 
 use Friendica\Model\Storage\IStorage;
 
-use Friendica\Core\Config;
+use Friendica\Core\Config\IConfig;
 use Friendica\Core\L10n;
 
 class SampleStorageBackend implements IStorage
 {
        const NAME = 'Sample Storage';
 
-       /** @var Config\IConfiguration */
+       /** @var IConfig */
        private $config;
-       /** @var L10n\L10n */
+       /** @var L10n */
        private $l10n;
 
        /**
          * SampleStorageBackend constructor.
-         * @param Config\IConfiguration $config The configuration of Friendica
+         * @param IConfig $config The configuration of Friendica
          *                                                                       
          * You can add here every dynamic class as dependency you like and add them to a private field
          * Friendica automatically creates these classes and passes them as argument to the constructor                                                                           
          */
-       public function __construct(Config\IConfiguration $config, L10n\L10n $l10n) 
+       public function __construct(IConfig $config, L10n $l10n) 
        {
                $this->config = $config;
                $this->l10n   = $l10n;
@@ -215,6 +221,11 @@ class SampleStorageBackend implements IStorage
        {
                return self::NAME;
        }
+
+       public static function getName()
+       {
+               return self::NAME;
+       }
 }
 ```
 
@@ -239,13 +250,21 @@ function samplestorage_install()
        // on addon install, we register our class with name "Sample Storage".
        // note: we use `::class` property, which returns full class name as string
        // this save us the problem of correctly escape backslashes in class name
-       DI::facStorage()->register("Sample Storage", SampleStorageBackend::class);
+       DI::storageManager()->register(SampleStorageBackend::class);
 }
 
 function samplestorage_unistall()
 {
        // when the plugin is uninstalled, we unregister the backend.
-       DI::facStorage()->unregister("Sample Storage");
+       DI::storageManager()->unregister(SampleStorageBackend::class);
+}
+
+function samplestorage_storage_instance(\Friendica\App $a, array $data)
+{
+    if ($data['name'] === SampleStorageBackend::getName()) {
+    // instance a new sample storage instance and pass it back to the core for usage
+        $data['storage'] = new SampleStorageBackend(DI::config(), DI::l10n(), DI::cache());
+    }
 }
 ```