Actions

Difference between revisions of "Plugins - advanced/nl"

From LimeSurvey Manual

(Created page with "Plugins - geadvanceerd")
 
 
(120 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
<languages />
 
<languages />
== Overview ==
+
==Overzicht==
  
Starting from LimeSurvey 2.05, LimeSurvey will officially support plugins. Some plugins will be supported by the LimeSurvey team and will go into core. Some will be supported by others outside the LimeSurvey team. To help find them, check out the [[Available third party plugins]] and add your own plugin to it!
+
Sinds versie 2.05 ondersteunt LimeSurvey plugins. Enkele plugins worden door het LimeSurvey-team feitelijk toegevoegd aan LimeSurvey. Andere plugins worden door [[Plugins - advanced/nl#Beschikbare plugins|anderen ondersteund]]. Je kunt ons vragen om hier een door jou gemaakte plugin te vermelden!
  
Plugins allow users to customize the functionality of their installation while still being able to benefit from regular software updates.
+
Met een plugin kun je de functionaliteit uitbreiden van LimeSurvey en toch gebruikt blijven maken van onze normale updates.
  
This documentation is meant for developers that are extending LimeSurvey for their own use or for their clients; end users will not be helped by this documentation.
+
Deze documentatie is niet bedoeld voor eindgebruikers maar voor ontwerpers die een plugin willen gaan maken voor hun cliënten die LimeSurvey gebruiken.
  
Plugins must implement the [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/iPlugin.php iPlugin] interface. We recommend extending your plugin class from the [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/PluginBase.php PluginBase] class.  
+
Plugins moeten de [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/iPlugin.php iPlugin] interface implementeren. We bevelen aan dat je als basis voor je plugin class de [https://github.com/LimeSurvey/LimeSurvey/blob/master/application/libraries/PluginManager/PluginBase.php PluginBase] class gebruikt.  
  
Plugins are developed around an [http://manual.limesurvey.org/Plugin_events event] mechanism.
+
Plugins maken gebruik van [http://manual.limesurvey.org/Plugin_events events].
  
== Plugin settings ==
+
== Plugin-instellingen ==
  
By extending you benefit from common functionality required by plugins that we already have implemented for you. One of these function is the implementation of the getPluginSettings function. This function must return an array describing the configuration options for the user.
+
Door '''extending''' gebruik je de voor plugins benodigde functionaliteit die al door ons is gemaakt. Een van de functies is de implementatie van de functie getPluginSettings. Deze functie moet als resultaat een array teruggeven met de configuratie-opties voor de gebruiker.
  
The example plugin exposes just 1 configurable setting, the message it'll show.
+
In het voorbeeld heeft de plugin maar één instelling: '''message''', de te tonen tekst.
  
<syntaxhighlight lang="php" enclose="div">
+
<syntaxhighlight lang="php">
 
protected $settings = array(
 
protected $settings = array(
 
    'logo' => array(
 
    'logo' => array(
Line 32: Line 32:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The array contains a name for each setting as a key. The values are arrays containing the required meta data.
+
Het array bevat per instelling een naam als key. Elke waarde is een array met de benodigde metagegevens.
  
Supported types are:
+
De ondersteunde types:
  
 
* logo
 
* logo
* string
+
* int (integer getal)
 +
* string (alfanumeriek)
 
* html
 
* html
 
* choice
 
* choice
Line 43: Line 44:
 
* info
 
* info
  
Besides type a number of other keys are available:
+
Naast het type zijn er ook andere keys beschikbaar:
  
* label, defines a label (use English, the label specified here will be passed through the translation functions)
+
* label, definieert het label
* default, defines a value to show if no value is specified.
+
* default, als er geen waarde wordt ingevuld de standaardwaarde (alleen voor algemene instellingen, niet voor enquête-instellingen)
* current, defines the current value.
+
* current, de huidige waarde
* readOnly, specifies the setting is read only.
+
* readOnly, toon de instelling als alleen-lezen
 +
* htmlOptions, de htmlOptions van het invoergedeelte ( lees Yii manual [[https://www.yiiframework.com/doc/api/1.1/CHtml]])
 +
* pluginOptions, voor enkele instellingen (html of select) : instelling widget-optie
 +
* labelOptions : htmlOptions van het label
 +
* controlOptions : htmlOptions van de wrapper van label en invoer
  
You can find a plugin example using all actual settings at [https://framagit.org/Shnoulle/exampleSettings exampleSettings]  
+
Een voorbeeld met alle huidige [https://framagit.org/Shnoulle/exampleSettings instellingen].
=== Read and write plugin settings ===
+
 +
=== Lezen en schrijven ===
  
It's possible to read and write plugin settings directly from your plugin code.
+
Je kunt in de code van de plugin direct de instellingen lezen en schrijven.
  
Example:
+
Voorbeeld:
  
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
Line 62: Line 68:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
You can get a default value if the setting happens to be null:
+
Je kunt een standaardwaarde krijgen als de instelling '''null''' is:
  
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
$mySetting = $this->get('mySetting', null, null, 10);  // 10 is default
+
$mySetting = $this->get('mySetting', null, null, 10);  // 10 is standaardwaarde
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Events ==
 
== Events ==
  
Plugins subscribe to events and can interact with LimeSurvey when the event is fired. For a list of currently available events check [[Plugin events]].
+
Een plugin reageert op gebeurtenissen (events) die optreden als de plugin zich daar eerst voor aangemeld (subscribe) heeft. Er is een lijst met de [[Plugin events|huidige events]].
  
 
== API ==
 
== API ==
  
Plugins should only extend LimeSurvey via its "public" API. This means that directly using classes found in the source code is a bad practice. Though we can't force you not to, you risk having a broken plugin with every minor update we do.
+
Plugins moeten alleen via de eigen LimeSurvey-API extenden. Je moet dus niet rechtstreeks de classes in de source-code aanroepen. Je voorkomt hiermee dat je bij een kleine wijziging aan onze kant zit met een niet meer werkende plugin.
  
As much as possible interact with LimeSurvey only via methods described [http://api.limesurvey.org/classes/ls.pluginmanager.LimesurveyApi.html here]. Same as for events.
+
Gebruik zoveel mogelijk deze [http://api.limesurvey.org/classes/LimeSurvey.PluginManager.LimesurveyApi.html methodes]. Hetzelfde voor de events.
  
The API object is available via <code>$this->api</code> when extending from PluginBase, otherwise you can get it from the PluginManager instance that is passed to your plugins' constructor.
+
Het API-object is benaderbaar via <code>$this->api</code> bij het extenden van de PluginBase, anders krijg je het via de PluginManager-instantie door de plugin constructor.
  
New functions can be added to the API object upon request.
+
Op verzoek kunnen er nieuwe functies aan de API worden toegevoegd.
  
== Localization (Not yet in production) ==
+
== Lokalisatie  {{NewIn/nl|v=3}} ==
  
It's possible for plugins to add their own locale files. File format used is .mo, same as core translations. The files must be stored in  
+
Een plugin kan eigen vertaalbestanden toevoegen. Het gebruikte bestandsformaat is mo, dat is het ook voor LimeSurvey zelf. De bestanden moeten staan in  
  
 
  <plugin root folder>/locale/<language>/<language>.mo
 
  <plugin root folder>/locale/<language>/<language>.mo
  
where "<language>" is a two letter word like "de" or "fr".
+
"<language>" staat voor de taalcode, dus voor Nederlands "nl".
  
To use the specific locale file, use the plugin function gT:
+
Je kunt je vertaalbestand gebruiken met de plugin-functie gT:
  
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
Line 96: Line 102:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
If the given string can't be found in the plugin specific locale file, the function will look in the core locale files. So it's safe to use strings like "Cancel":
+
Als de te vertalen tekst niet in je invoerbestand staat, zoekt de functie in de eigen LimeSurvey vertaalbestanden. Je kunt dus teksten als "Cancel" meestal wel vinden:
  
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
$this->gT("Cancel");  // Will be translated even if "Cancel" is not in the plugin locale file
+
$this->gT("Cancel");  // Wordt ook vertaald als "Cancel" niet in het vertaalbestand van de plugin zit.
 
</syntaxhighlight>
 
</syntaxhighlight>
  
If you are using views together with your plugin, you should use
+
Als je views gebruikt in je plugin, dan wordt het
  
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
Line 108: Line 114:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
to do plugin specific translation in your view.
+
om de voor de plugin benodigde vertaling in je view te doen.
 +
 
 +
U kunt het bestand [https://github.com/LimeSurvey/LimeSurvey/blob/master/locale/_template/limesurvey.pot limesurvey.pot] gebruiken als voorbeeld voor hoe dit bestand. Dit wordt geïmporteerd in uw vertaaltool.
 +
 
 +
=== Tools ===
  
== Logging (Not yet in production) ==
+
Een open-source tool om po- en mo-bestanden te bewerken is [https://poedit.net/ Poedit].
  
If you want to log something from your plugin, just write
+
== Logging {{NewIn/nl|v=3}} ==
 +
 
 +
Als je iets wilt loggen in je plugin, schrijf dan
  
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
Line 118: Line 130:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The default logging level is trace, but you can give another log level as an optional second argument:
+
Het standaardniveau van loggen is trace, maar je kunt een ander niveau opgeven:
  
 
<syntaxhighlight lang="php">
 
<syntaxhighlight lang="php">
Line 124: Line 136:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
The log file can be found in folder
+
Het logbestand staat in de map
 +
 
 +
<syntaxhighlight lang="bash>
 +
<limesurvey root folder>/tmp/runtime/plugin.log
 +
 
 +
De naam van de plugin wordt als '''category''' gebruikt. Je kunt op Linux met '''grep''' dan eenvoudig alleen de logging van je eigen plugin zien:
 +
 
 +
  $ tail -f tmp/runtime/plugin.log | grep <your plugin name>
 +
 
 +
Informatie over [[Optional_settings/nl#Logging instellingen|logging in Yii 1]].
 +
 
 +
== Extensie-updates {{NewIn/nl|v = 4}} ==
 +
 
 +
Sinds LimeSurvey versie 4.0.0 is er een systeem om plug-ins en andere extensie-updates te doen. Als je dit systeem wilt gebruiken, moet je extensiebestand config.xml de updater-configuratie bevatten.
 +
 
 +
<syntaxhighlight lang="xml">
 +
<updaters>
 +
    <updater>
 +
        <stable>1</stable>
 +
        <type>rest</type>
 +
        <source>https://comfortupdate.limesurvey.org/index.php?r=limestorerest</source>
 +
        <manualUpdateUrl>https://somedownloadlink.com/maybegithub</manualUpdateUrl>
 +
    </updater>
 +
</updaters>
 +
</syntaxhighlight>
 +
 
 +
(De broncode hierboven verwijst naar de LimeStore REST API, die wordt gebruikt voor alle extensies die beschikbaar zijn in onze LimeStore.)
 +
 
 +
{| class = "wikitable"
 +
|+ Updater tagbeschrijvingen
 +
|-​​
 +
! Tag
 +
! Beschrijving
 +
|-
 +
| stable
 +
| "1" als deze bron je alleen stabiele versienummers geeft; "0" als de bron ook onstabiele versies zal leveren, zoals <code>0.3.3-beta</code>.
 +
|-
 +
| type
 +
| Voorlopig wordt alleen type <code>rest</code> ondersteund. Het is gemakkelijk om nieuwe typen toe te voegen (versiecontroles), zoals git, wget, enz.
 +
|-
 +
| source
 +
| De URL om nieuwe versies op te halen.
 +
|-
 +
| manualUpdateUrl
 +
| URL waar de gebruiker naar kan gaan om de nieuwste versie van de extensie bij te werken.
 +
|-
 +
| automaticUpdateUrl
 +
| Nog uitwerken
 +
|}
 +
 
 +
Als je geen updater wilt aanbieden, moet je de volgende tekst in het XML-configuratiebestand zetten:
 +
 
 +
<syntaxhighlight lang="xml">
 +
<updaters disabled="disabled">
 +
</updaters>
 +
</syntaxhighlight>
 +
 
 +
Op deze manier geef je aan dat je het updatesysteem doelbewust hebt uitgeschakeld en niet bent vergeten om het toe te voegen.
 +
 
 +
De nieuwe plugin '''UpdateCheck''', standaard geïnstalleerd en geactiveerd, controleert maximaal 1 keer per 24 uur asynchroon op nieuwe updates van ''alle'' geïnstalleerde extensies wanneer een superbeheerder zich aanmeldt. Als er nieuwe versies worden gevonden, wordt er een melding gepusht.
 +
 
 +
[[File: availableupdates.png||Beschikbare updates]]
 +
 
 +
Als er een nieuwe beveiligingsupdate wordt gevonden, wordt de melding automatisch geopend en weergegeven in de class "danger".
 +
 
 +
[[File: availablesecurityupdates.png||Beschikbare beveiligingsupdates]]
 +
 
 +
Je kunt ook handmatig controleren op updates door naar de pluginmanager te gaan en op "Updates controleren" te klikken. Deze knop is alleen zichtbaar is als de plugin UpdateCheck actief is.
 +
 
 +
[[File:manuallycheckforupdates.png||Handmatig controleren op updates]]
 +
 
 +
===Onder de motorkap===
 +
 
 +
Dit gedeelte biedt een kort overzicht van de implementatie van de extensie-updater.
 +
 
 +
De updater is onderdeel van de ExtensionInstaller-bibliotheek. Hieronder ziet u een UML-diagram met de classes die betrekking hebben op het updateproces.
 +
 
 +
[[File:extensionupdateruml.png||UML-diagram van extensie-updater]]
 +
 
 +
Programmastroom wanneer Yii start:
 +
 
 +
<pre>
 +
Yii init
 +
  VersionFetcherServiceLocator->init()
 +
    Add REST version fetcher
 +
  ExtensionUpdaterServiceLocator->init()
 +
    Add PluginUpdater
 +
    NOG DOEN: Updater toevoegen voor elk type extensie (thema, vraagsjabloon, ...)
 +
</pre>
 +
 
 +
Programmastroom tijdens het uitvoeren van de plugin UpdaterCheck:
 +
 
 +
<pre>
 +
Download alle updaters van ExtensionUpdaterServiceLocator
 +
Loop elke updater
 +
  Voor elke updater doorloop versie-fetchers geconfigureerd door <updater> XML
 +
      Neem voor elke fetcher contact op met de externe bron en ontvang versie-informatie
 +
Stel alle versies samen in een boodschap
 +
</pre>
 +
 
 +
De methode [https://github.com/LimeSurvey/LimeSurvey/blob/develop/application/core/plugins/UpdateCheck/UpdateCheck.php#L130 checkAll] in de UpdateCheck-plugin is een voorbeeld van hoe alle extensies naar nieuwe versies kunnen worden verwerkt.
 +
 
 +
====Nieuwe versie-fetchers toevoegen====
 +
 
 +
Als je een nieuwe aangepaste fetcher wilt toevoegen, voer dan  dit uit tijdens de Yii-initialisatie:
 +
 
 +
<syntaxhighlight lang="php">
 +
$service = \Yii::app()->versionFetcherServiceLocator
 +
$service->addVersionFetcherType(
 +
  'myNewVersionFetcherType',
 +
  function (\SimpleXMLElement $updaterXml) {
 +
    return new MyNewVersionFetcher($updaterXml);
 +
  }
 +
);
 +
</syntaxhighlight>
 +
 
 +
Natuurlijk heeft de class <code>MyNewVersionFetcher</code> de subclass <code>VersionFetcher</code>.
 +
 
 +
Om een nieuwe fetcher te gebruiken, configureer dan de <code>type</code> tag in de updater-XML
 +
<code>myNewVersionFetcherType</code> (in plaats van bijv. <code>rest</code> ).
 +
 
 +
==== Nieuwe extensie-updaters toevoegen ====
 +
 
 +
Om een ​​nieuwe extensie-updater toe te voegen, voer dit uit bij de Yii-initialisatie:
 +
 
 +
<syntaxhighlight lang="php">
 +
$service = \Yii::app()->extensionUpdaterServiceLocator;
 +
$service->addUpdaterType(
 +
  'myNewExtensionUpdater',
 +
  function () {
 +
    return MyNewExtensionUpdater::createUpdaters();
 +
  }
 +
);
 +
</syntaxhighlight>
 +
 
 +
Class <code>MyNewExtensionUpdater</code> moet een subclass zijn van <code>ExtensionUpdater</code>.
 +
 
 +
De top <code>type</code> tag in config.xml ( 'plugin', 'thema', ...) zal bepalen welke extensie-updater wordt gebruikt voor deze extensie. Het systeem is nog niet volledig aanpasbaar, omdat je ook een eigen ExtensionInstaller, menu-items, enz. moet toevoegen. Maar in theorie, en misschien in de toekomst, zou het mogelijk moeten zijn om op deze manier een nieuw type extensie toe te voegen.
 +
 
 +
== Extensie-installatieprogramma ==
 +
 
 +
De bibliotheek van het installatieprogramma voor extensies bestaat uit twee abstracte klassen:
 +
 
 +
* ExtensionInstaller
 +
* FileFetcher
  
<limesurvey root folder>/tmp/runtime/plugin.log
+
De ExtensionInstaller is gesubklasseerd voor elk extensietype, zoals PluginInstaller, QuestionThemeInstaller, enz.
  
Your plugin name is automatically used as category. A nice way to see only the errors from your plugin is using grep (on Linux):
+
De FileFetcher is gesubklasseerd voor elke verschillende manier om bestanden op te halen. Nu worden alleen geüploade zip-bestanden ondersteund, maar in de toekomst zou er ook een Github- of LimeStore-fetcher kunnen zijn.
  
$ tailf tmp/runtime/plugin.log | grep <your plugin name>
+
[[File: extensioninstalleruml.png]]
  
== Special plugins ==
+
== Speciale plugins ==
  
 
* [[Authentication plugin development]]
 
* [[Authentication plugin development]]
 
* [[Export plugin development]]
 
* [[Export plugin development]]
  
== Available plugins ==
+
== Beschikbare plugins ==
 
* [[Authentication plugins]]
 
* [[Authentication plugins]]
 
* [[Audit log]]
 
* [[Audit log]]
Line 143: Line 299:
 
* [[Available third party plugins]]
 
* [[Available third party plugins]]
  
== Tutorial ==
+
== Handleiding ==
[https://medium.com/@evently/creating-limesurvey-plugins-adcdf8d7e334 This] step-by-step tutorial shows how to create a plugin that sends a post request on every survey response submission. The tutorial shows you how to create and save global and per-survey settings, how to register events and more.
+
In [https://medium.com/@evently/creating-limesurvey-plugins-adcdf8d7e334 dit] voorbeeld tonen we hoe je een plugin maakt die een post request doet bij het afronden van het invullen van de enquête. Je ziet onder meer hoe je globale en enquête-instellingen aanmaakt en bewaard en hoe je events registreert.
  
 
[[Category:Development]]
 
[[Category:Development]]
 
[[Category:Plugins]]
 
[[Category:Plugins]]

Latest revision as of 15:42, 24 June 2022

Other languages:
Deutsch • ‎English • ‎Nederlands • ‎français • ‎日本語

Overzicht

Sinds versie 2.05 ondersteunt LimeSurvey plugins. Enkele plugins worden door het LimeSurvey-team feitelijk toegevoegd aan LimeSurvey. Andere plugins worden door anderen ondersteund. Je kunt ons vragen om hier een door jou gemaakte plugin te vermelden!

Met een plugin kun je de functionaliteit uitbreiden van LimeSurvey en toch gebruikt blijven maken van onze normale updates.

Deze documentatie is niet bedoeld voor eindgebruikers maar voor ontwerpers die een plugin willen gaan maken voor hun cliënten die LimeSurvey gebruiken.

Plugins moeten de iPlugin interface implementeren. We bevelen aan dat je als basis voor je plugin class de PluginBase class gebruikt.

Plugins maken gebruik van events.

Plugin-instellingen

Door extending gebruik je de voor plugins benodigde functionaliteit die al door ons is gemaakt. Een van de functies is de implementatie van de functie getPluginSettings. Deze functie moet als resultaat een array teruggeven met de configuratie-opties voor de gebruiker.

In het voorbeeld heeft de plugin maar één instelling: message, de te tonen tekst.

protected $settings = array(
    'logo' => array(
          'type' => 'logo',
          'path' => 'assets/logo.png'
     ),

     'message' => array(
          'type' => 'string',
          'label' => 'Message'
     )
);

Het array bevat per instelling een naam als key. Elke waarde is een array met de benodigde metagegevens.

De ondersteunde types:

  • logo
  • int (integer getal)
  • string (alfanumeriek)
  • html
  • choice
  • relevance
  • info

Naast het type zijn er ook andere keys beschikbaar:

  • label, definieert het label
  • default, als er geen waarde wordt ingevuld de standaardwaarde (alleen voor algemene instellingen, niet voor enquête-instellingen)
  • current, de huidige waarde
  • readOnly, toon de instelling als alleen-lezen
  • htmlOptions, de htmlOptions van het invoergedeelte ( lees Yii manual [[1]])
  • pluginOptions, voor enkele instellingen (html of select) : instelling widget-optie
  • labelOptions : htmlOptions van het label
  • controlOptions : htmlOptions van de wrapper van label en invoer

Een voorbeeld met alle huidige instellingen.

Lezen en schrijven

Je kunt in de code van de plugin direct de instellingen lezen en schrijven.

Voorbeeld:

$mySetting = $this->get('mySetting');
$this->set('mySetting', $mySetting + 1);

Je kunt een standaardwaarde krijgen als de instelling null is:

$mySetting = $this->get('mySetting', null, null, 10);  // 10 is standaardwaarde

Events

Een plugin reageert op gebeurtenissen (events) die optreden als de plugin zich daar eerst voor aangemeld (subscribe) heeft. Er is een lijst met de huidige events.

API

Plugins moeten alleen via de eigen LimeSurvey-API extenden. Je moet dus niet rechtstreeks de classes in de source-code aanroepen. Je voorkomt hiermee dat je bij een kleine wijziging aan onze kant zit met een niet meer werkende plugin.

Gebruik zoveel mogelijk deze methodes. Hetzelfde voor de events.

Het API-object is benaderbaar via $this->api bij het extenden van de PluginBase, anders krijg je het via de PluginManager-instantie door de plugin constructor.

Op verzoek kunnen er nieuwe functies aan de API worden toegevoegd.

Lokalisatie (Nieuw in 3)

Een plugin kan eigen vertaalbestanden toevoegen. Het gebruikte bestandsformaat is mo, dat is het ook voor LimeSurvey zelf. De bestanden moeten staan in

<plugin root folder>/locale/<language>/<language>.mo

"<language>" staat voor de taalcode, dus voor Nederlands "nl".

Je kunt je vertaalbestand gebruiken met de plugin-functie gT:

$this->gT("A plugin text that needs to be translated");

Als de te vertalen tekst niet in je invoerbestand staat, zoekt de functie in de eigen LimeSurvey vertaalbestanden. Je kunt dus teksten als "Cancel" meestal wel vinden:

$this->gT("Cancel");  // Wordt ook vertaald als "Cancel" niet in het vertaalbestand van de plugin zit.

Als je views gebruikt in je plugin, dan wordt het

$plugin->gT("Translate me");

om de voor de plugin benodigde vertaling in je view te doen.

U kunt het bestand limesurvey.pot gebruiken als voorbeeld voor hoe dit bestand. Dit wordt geïmporteerd in uw vertaaltool.

Tools

Een open-source tool om po- en mo-bestanden te bewerken is Poedit.

Logging (Nieuw in 3)

Als je iets wilt loggen in je plugin, schrijf dan

$this->log("Your message");

Het standaardniveau van loggen is trace, maar je kunt een ander niveau opgeven:

$this->log("Something went wrong!", CLogger::LEVEL_ERROR);

Het logbestand staat in de map

<limesurvey root folder>/tmp/runtime/plugin.log

De naam van de plugin wordt als '''category''' gebruikt. Je kunt op Linux met '''grep''' dan eenvoudig alleen de logging van je eigen plugin zien:

  $ tail -f tmp/runtime/plugin.log | grep <your plugin name>

Informatie over [[Optional_settings/nl#Logging instellingen|logging in Yii 1]].

== Extensie-updates {{NewIn/nl|v = 4}} ==

Sinds LimeSurvey versie 4.0.0 is er een systeem om plug-ins en andere extensie-updates te doen. Als je dit systeem wilt gebruiken, moet je extensiebestand config.xml de updater-configuratie bevatten.

<syntaxhighlight lang="xml">
<updaters>
    <updater>
        <stable>1</stable>
        <type>rest</type>
        <source>https://comfortupdate.limesurvey.org/index.php?r=limestorerest</source>
        <manualUpdateUrl>https://somedownloadlink.com/maybegithub</manualUpdateUrl>
    </updater>
</updaters>

(De broncode hierboven verwijst naar de LimeStore REST API, die wordt gebruikt voor alle extensies die beschikbaar zijn in onze LimeStore.)

Updater tagbeschrijvingen
Tag Beschrijving
stable "1" als deze bron je alleen stabiele versienummers geeft; "0" als de bron ook onstabiele versies zal leveren, zoals 0.3.3-beta.
type Voorlopig wordt alleen type rest ondersteund. Het is gemakkelijk om nieuwe typen toe te voegen (versiecontroles), zoals git, wget, enz.
source De URL om nieuwe versies op te halen.
manualUpdateUrl URL waar de gebruiker naar kan gaan om de nieuwste versie van de extensie bij te werken.
automaticUpdateUrl Nog uitwerken

Als je geen updater wilt aanbieden, moet je de volgende tekst in het XML-configuratiebestand zetten:

<updaters disabled="disabled">
</updaters>

Op deze manier geef je aan dat je het updatesysteem doelbewust hebt uitgeschakeld en niet bent vergeten om het toe te voegen.

De nieuwe plugin UpdateCheck, standaard geïnstalleerd en geactiveerd, controleert maximaal 1 keer per 24 uur asynchroon op nieuwe updates van alle geïnstalleerde extensies wanneer een superbeheerder zich aanmeldt. Als er nieuwe versies worden gevonden, wordt er een melding gepusht.

Beschikbare updates

Als er een nieuwe beveiligingsupdate wordt gevonden, wordt de melding automatisch geopend en weergegeven in de class "danger".

Beschikbare beveiligingsupdates

Je kunt ook handmatig controleren op updates door naar de pluginmanager te gaan en op "Updates controleren" te klikken. Deze knop is alleen zichtbaar is als de plugin UpdateCheck actief is.

Handmatig controleren op updates

Onder de motorkap

Dit gedeelte biedt een kort overzicht van de implementatie van de extensie-updater.

De updater is onderdeel van de ExtensionInstaller-bibliotheek. Hieronder ziet u een UML-diagram met de classes die betrekking hebben op het updateproces.

UML-diagram van extensie-updater

Programmastroom wanneer Yii start:

 Yii init
   VersionFetcherServiceLocator->init()
     Add REST version fetcher
   ExtensionUpdaterServiceLocator->init()
     Add PluginUpdater
     NOG DOEN: Updater toevoegen voor elk type extensie (thema, vraagsjabloon, ...)

Programmastroom tijdens het uitvoeren van de plugin UpdaterCheck:

Download alle updaters van ExtensionUpdaterServiceLocator
Loop elke updater
  Voor elke updater doorloop versie-fetchers geconfigureerd door <updater> XML
      Neem voor elke fetcher contact op met de externe bron en ontvang versie-informatie
Stel alle versies samen in een boodschap

De methode checkAll in de UpdateCheck-plugin is een voorbeeld van hoe alle extensies naar nieuwe versies kunnen worden verwerkt.

Nieuwe versie-fetchers toevoegen

Als je een nieuwe aangepaste fetcher wilt toevoegen, voer dan dit uit tijdens de Yii-initialisatie:

$service = \Yii::app()->versionFetcherServiceLocator
$service->addVersionFetcherType(
  'myNewVersionFetcherType',
  function (\SimpleXMLElement $updaterXml) {
    return new MyNewVersionFetcher($updaterXml);
  }
);

Natuurlijk heeft de class MyNewVersionFetcher de subclass VersionFetcher.

Om een nieuwe fetcher te gebruiken, configureer dan de type tag in de updater-XML myNewVersionFetcherType (in plaats van bijv. rest ).

Nieuwe extensie-updaters toevoegen

Om een ​​nieuwe extensie-updater toe te voegen, voer dit uit bij de Yii-initialisatie:

$service = \Yii::app()->extensionUpdaterServiceLocator;
$service->addUpdaterType(
  'myNewExtensionUpdater',
  function () {
    return MyNewExtensionUpdater::createUpdaters();
  }
);

Class MyNewExtensionUpdater moet een subclass zijn van ExtensionUpdater.

De top type tag in config.xml ( 'plugin', 'thema', ...) zal bepalen welke extensie-updater wordt gebruikt voor deze extensie. Het systeem is nog niet volledig aanpasbaar, omdat je ook een eigen ExtensionInstaller, menu-items, enz. moet toevoegen. Maar in theorie, en misschien in de toekomst, zou het mogelijk moeten zijn om op deze manier een nieuw type extensie toe te voegen.

Extensie-installatieprogramma

De bibliotheek van het installatieprogramma voor extensies bestaat uit twee abstracte klassen:

  • ExtensionInstaller
  • FileFetcher

De ExtensionInstaller is gesubklasseerd voor elk extensietype, zoals PluginInstaller, QuestionThemeInstaller, enz.

De FileFetcher is gesubklasseerd voor elke verschillende manier om bestanden op te halen. Nu worden alleen geüploade zip-bestanden ondersteund, maar in de toekomst zou er ook een Github- of LimeStore-fetcher kunnen zijn.

Extensioninstalleruml.png

Speciale plugins

Beschikbare plugins

Handleiding

In dit voorbeeld tonen we hoe je een plugin maakt die een post request doet bij het afronden van het invullen van de enquête. Je ziet onder meer hoe je globale en enquête-instellingen aanmaakt en bewaard en hoe je events registreert.