public function getOptions();
public function saveOptions(array $data);
public function __toString();
+ public static function getName();
}
```
'type',
define the field used in form, and the type of data.
-one of 'checkbox', 'combobox', 'custom', 'datetime', 'input', 'intcheckbox', 'password', 'radio', 'richtext', 'select', 'select_raw', 'textarea', 'yesno'
+one of 'checkbox', 'combobox', 'custom', 'datetime', 'input', 'intcheckbox', 'password', 'radio', 'richtext', 'select', 'select_raw', 'textarea'
'label',
- 'select': array `[ value => label ]` of choices
- 'intcheckbox': value of input element
- 'select_raw': prebuild html string of `<option >` tags
-- 'yesno': array `[ 'label no', 'label yes']`
Each label should be translatable
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
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;
{
return self::NAME;
}
+
+ public static function getName()
+ {
+ return self::NAME;
+ }
}
```
// 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());
+ }
}
```