Actions

Plugins - advanced/bg: Difference between revisions

From LimeSurvey Manual

(Created page with "<syntaxhighlight lang="php"> $plugin->gT("Преведи ме"); </syntaxhighlight>")
(Updating to match new version of source page)
 
(41 intermediate revisions by one other user not shown)
Line 74: Line 74:
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$mySetting = $this->get('mySetting', null, null, 10); // 10 е по подразбиране
$mySetting = $this->get('mySetting', null, null, 10); // 10 е по подразбиране
</syntaxhighlight>
=== Survey specific plugin settings ===
Two events are used to create survey specific plugin settings:
* newSurveySettings
* beforeSurveySettings
Example to disable a plugin for a specific survey:
<syntaxhighlight lang="php">
 
    public function init()
    {
        $this->subscribe('beforeSurveySettings');
        $this->subscribe('newSurveySettings');
        // Other events...
    }
    public function beforeSurveySettings()
    {
    $event = $this->event;
    $surveyId = intval($event->get('survey'));
        $event->set(
            "surveysettings.{$this->id}",
            [
                'name' => get_class($this),
                'settings' => [
                    'isActive' => [
                        'type' => 'boolean',
                        'label' => 'isActive',
                        'current' => $this->getIsActive($surveyId),
                        'help' => 'Activate plugin for this survey'
                    ],
                ]
            ]
        );
    }
    public function newSurveySettings()
    {
        $event = $this->event;
        foreach ($event->get('settings') as $name => $value)
        {
            $this->set($name, $value, 'Survey', $event->get('survey'), false);
        }
    }
    private function getIsActive(int $sid): bool
    {
        return (bool) $this->get('isActive', 'Survey', $sid, false);
    }
</syntaxhighlight>
</syntaxhighlight>


Line 206: Line 260:
</syntaxhighlight>
</syntaxhighlight>


to do plugin specific translation in your view.
за да направите специфичен за плъгина превод по ваш изглед.


You can use the [https://github.com/LimeSurvey/LimeSurvey/blob/master/locale/_template/limesurvey.pot limesurvey.pot] file as an example of how a pot file can look like. This is imported into your translation tool.
Можете да използвате файла [https://github.com/LimeSurvey/LimeSurvey/blob/master/locale/_template/limesurvey.pot limesurvey.pot] като пример за това как може да изглежда един pot файл. Това се импортира във вашия инструмент за превод.


=== Tools ===
=== Инструменти ===


One open-source tool to edit po- and mo-files is [https://poedit.net/ Poedit].
Един инструмент с отворен код за редактиране на po- и mo-файлове е [https://poedit.net/ Poedit].


== Logging {{NewIn|v=3}} ==
== Регистриране {{NewIn|v=3}} ==


If you want to log something from your plugin, just write
Ако искате да регистрирате нещо от вашия плъгин, просто пишете


<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$this->log("Your message");
$this->log("Вашето съобщение");
</syntaxhighlight>
</syntaxhighlight>


The default logging level is trace, but you can give another log level as an optional second argument:
Нивото на регистриране по подразбиране е проследяване, но можете да зададете друго ниво на регистриране като незадължителен втори аргумент:


<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$this->log("Something went wrong!", CLogger::LEVEL_ERROR);
$this->log("Нещо се обърка!", CLogger::LEVEL_ERROR);
</syntaxhighlight>
</syntaxhighlight>


The log file can be found in folder
Регистрационният файл може да бъде намерен в папка


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


Your plugin name is automatically used as category. A nice way to see only the errors from your plugin is using grep (on Linux):
Името на вашия плъгин автоматично се използва като категория. Добър начин да видите само грешките от вашия плъгин е използването на grep (на Linux):


  $ tail -f tmp/runtime/plugin.log | grep <your plugin name>
$ опашка -f tmp/runtime/plugin.log | grep<your plugin name>


More info about configuring logging in Yii 1: [[Optional_settings#Logging_settings]].
Повече информация за конфигуриране на регистриране в Yii 1: [[Optional_settings#Logging_settings]].


== Extension updates {{NewIn|v=4}} ==
== Актуализации на разширенията {{NewIn|v=4}} ==


Since LimeSurvey version 4.0.0, there's a system in place to deal with plugin and other extension updates. To use this system, your extension config.xml file needs to include updater configuration.
От LimeSurvey версия 4.0.0 има въведена система за справяне с плъгини и други актуализации на разширения. За да използвате тази система, вашето разширение config.xml файл трябва да включва конфигурация за актуализиране.


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


(The source tag above points to the LimeStore REST API, which will be used for all extensions available in our LimeStore.)
(Изходният таг по-горе сочи към LimeStore REST API, който ще се използва за всички разширения, налични в нашия LimeStore.)


{| class="wikitable"
{| class="wikitable"
|+ Updater tag descriptions
|+ Описания на маркери за актуализиране
|-
|-
! Tag
! Маркирайте
! Description
! Описание
|-
|-
| stable
| стабилен
| "1" if this source only gives you stable version numbers; "0" if the source will also provide unstable versions, like <code>0.3.3-beta</code>.
| „1“, ако този източник ви дава само номера на стабилни версии; „0“, ако източникът ще предостави и нестабилни версии, като <code>0.3.3-beta</code> .
|-
|-
| type
| тип
| For now, only type <code>rest</code> is supported. It's easy to add new updater types (version checkers), like git, wget, etc.
| Засега се поддържа само тип <code>rest</code> . Лесно е да добавите нови типове програми за актуализиране (проверки на версиите), като git, wget и др.
|-
|-
| source
| източник
| The URL to fetch new versions from.
| URL адресът за извличане на нови версии от.
|-
|-
| manualUpdateUrl  
| manualUpdateUrl  
| URL which the user can go to to update the latest version of the extension.
| URL адрес, на който потребителят може да отиде, за да актуализира най-новата версия на разширението.
|-
|-
| automaticUpdateUrl  
| automaticUpdateUrl  
| TODO
| ЗАДАЧА
|}
|}


If you don't want to supply an updater, you should put the following text in your config XML file:
Ако не искате да предоставите програма за актуализиране, трябва да поставите следния текст във вашия конфигурационен XML файл:


<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
Line 284: Line 338:
</syntaxhighlight>
</syntaxhighlight>


This way, you tell the system that you purposefully disabled the update system, and didn't just forget to add it.
По този начин казвате на системата, че нарочно сте деактивирали системата за актуализиране и не сте забравили просто да я добавите.


The new plugin '''UpdateCheck''' - installed and activated by default - checks for new updates for ''all'' installed extensions when a super admin logs in, asynchronously, max one time every 24 hours. If any new versions are found, a notification is pushed.
Новият плъгин '''UpdateCheck''' - инсталиран и активиран по подразбиране - проверява за нови актуализации за ''всички'' инсталирани разширения, когато супер администратор влезе, асинхронно, максимум веднъж на всеки 24 часа. Ако бъдат намерени нови версии, се изпраща известие.


[[File:availableupdates.png||Available updates]]
[[Файл:availableupdates.png||Налични актуализации]]


If a new security update is found, the notification will open automatically and be styled in "danger" class.
Ако бъде намерена нова актуализация на защитата, известието ще се отвори автоматично и ще бъде стилизирано в клас „опасност“.


[[File:availablesecurityupdates.png||Available security updates]]
[[Файл:availablesecurityupdates.png||Налични актуализации за сигурност]]


You can manually check for updates by going to the plugin manager view and click on "Check updates". Note that this button is only visible if the UpdateCheck plugin is activated.
Можете ръчно да проверите за актуализации, като отидете в изгледа на мениджъра на приставките и кликнете върху „Проверка на актуализациите“. Обърнете внимание, че този бутон се вижда само ако е активиран плъгинът UpdateCheck.


[[File:manuallycheckforupdates.png||Manually check for updates]]
[[Файл:manuallycheckforupdates.png||Ръчна проверка за актуализации]]


=== Under the hood ===
=== Под капака ===


This section provides a brief overview over the extension updater implementation.
Този раздел предоставя кратък преглед на внедряването на програмата за актуализиране на разширения.


The extension updater is part of the ExtensionInstaller library. Below is a UML diagram for the classes related to the updater process.
Актуализаторът на разширението е част от библиотеката ExtensionInstaller. По-долу е UML диаграма за класовете, свързани с процеса на актуализиране.


[[File:extensionupdateruml.png||Extension updater UML diagram]]
[[Файл:extensionupdateruml.png||UML диаграма на програмата за актуализиране на разширение]]


Program flow when Yii starts:
Поток на програмата при стартиране на Yii:


<pre>
<pre>
Yii init
Yii init
  VersionFetcherServiceLocator->init()
VersionFetcherServiceLocator->init()
    Add REST version fetcher
Добавете програма за извличане на REST версия
  ExtensionUpdaterServiceLocator->init()
ExtensionUpdaterServiceLocator->init()
    Add PluginUpdater
Добавяне на PluginUpdater
    TODO: Add an updater for each extension type (theme, question template, ...)
ЗАДАЧА: Добавете програма за актуализиране за всеки тип разширение (тема, шаблон на въпрос, ...)
</pre>
</pre>


Program flow when running the UpdaterCheck plugin:
Поток на програмата при стартиране на приставката UpdaterCheck:


<pre>
<pre>!Н! Вземете всички актуализации от ExtensionUpdaterServiceLocator
  Get all updaters from ExtensionUpdaterServiceLocator
  Цикъл на всеки актуализатор
  Loop each updater
  За всяка програма за актуализация преминете през програмите за извличане на версии, конфигурирани от<updater> XML
  For each updater, loop through version fetchers configured by <updater> XML
За всяка версия за извличане, свържете се с отдалечен източник и получете информация за версията
    For each version fetcher, contact remote source and get version information
  Композирайте всички версии в известие
  Compose all versions into a notification
</pre>
</pre>


The [https://github.com/LimeSurvey/LimeSurvey/blob/develop/application/core/plugins/UpdateCheck/UpdateCheck.php#L130 checkAll] method in the UpdateCheck plugin provides an example of how to query all extensions for new versions.
Методът [https://github.com/LimeSurvey/LimeSurvey/blob/develop/application/core/plugins/UpdateCheck/UpdateCheck.php#L130 checkAll] в плъгина UpdateCheck предоставя пример как да направите заявка за всички разширения за нови версии .


==== Adding new version fetchers ====
==== Добавяне на средства за извличане на нови версии ====


To add a new custom version fetcher, run this during Yii initialization:
За да добавите нова персонализирана програма за извличане на версии, изпълнете това по време на инициализацията на Yii:


<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$service = \Yii::app()->versionFetcherServiceLocator
$service = \Yii::app()->versionFetcherServiceLocator
$service->addVersionFetcherType(
$service->addVersionFetcherType(
  'myNewVersionFetcherType',
'myNewVersionFetcherType',
  function (\SimpleXMLElement $updaterXml) {
функция (\SimpleXMLElement $updaterXml) {
    return new MyNewVersionFetcher($updaterXml);
връща нов MyNewVersionFetcher( $updaterXml);
  }
}
);
);
</syntaxhighlight>
</syntaxhighlight>


Of course, the class <code>MyNewVersionFetcher</code> has to subclass <code>VersionFetcher</code>.
Разбира се, класът <code>MyNewVersionFetcher</code> трябва да подкласи <code>VersionFetcher</code> .


To use your new version fetcher, configure the <code>type</code> tag in the updater XML to use
За да използвате програмата за извличане на нови версии, конфигурирайте маркера <code>type</code> в XML на програмата за актуализиране да използва
<code>myNewVersionFetcherType</code> (instead of e.g. <code>rest</code>).
<code>myNewVersionFetcherType</code> (вместо напр. <code>rest</code> ).


==== Adding new extension updaters ====
==== Добавяне на нови програми за актуализация на разширения ====


To add a new custom extension updater, run this during Yii initialization:
За да добавите нов инструмент за актуализиране на потребителско разширение, изпълнете това по време на инициализацията на Yii:


<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$service = \Yii::app()->extensionUpdaterServiceLocator;
$service = \Yii::app()->extensionUpdaterServiceLocator;
$service->addUpdaterType(
$service->addUpdaterType(
  'myNewExtensionUpdater',
'myNewExtensionUpdater',
  function () {
функция () {
    return MyNewExtensionUpdater::createUpdaters();
return MyNewExtensionUpdater::createUpdaters() ;
  }
}
);
);
</syntaxhighlight>
</syntaxhighlight>


Class <code>MyNewExtensionUpdater</code> has to subclass <code>ExtensionUpdater</code>.
Класът <code>MyNewExtensionUpdater</code> трябва да бъде подклас <code>ExtensionUpdater</code> .


The top <code>type</code> tag in config.xml ('plugin', 'theme', ...) will control which extension updater are used for this extension. The system is not fully customizable  yet, since you also need to add a custom ExtensionInstaller, menu items, etc. But in theory, and maybe in the future, it should be possible to add a new type of extension this way.
Най-горният <code>type</code> таг в config.xml ('plugin', 'theme', ...) ще контролира кой инструмент за актуализиране на разширение се използва за това разширение. Системата все още не може да се персонализира напълно, тъй като трябва да добавите персонализиран ExtensionInstaller, елементи от менюто и т.н. Но на теория и може би в бъдеще би трябвало да е възможно да добавите нов тип разширение по този начин.


== Extension installer ==
== Инсталатор на разширение ==


The extension installer library consists of two abstract classes:
Библиотеката за инсталиране на разширение се състои от два абстрактни класа:


* ExtensionInstaller
* ExtensionInstaller
* FileFetcher
* FileFetcher


The ExtensionInstaller is subclassed for each extension type, like PluginInstaller, QuestionThemeInstaller, etc.
ExtensionInstaller е подклас за всеки тип разширение, като PluginInstaller, QuestionThemeInstaller и т.н.


The FileFetcher is subclassed for each different way to fetch files. Currently, only uploaded zip files are supported, but in the future, there could be a Github or LimeStore fetcher too.
FileFetcher е подклас за всеки различен начин за извличане на файлове. Понастоящем се поддържат само качени zip файлове, но в бъдеще може да има и инструмент за извличане на Github или LimeStore.


[[File: extensioninstalleruml.png]]
[[Файл: extensioninstalleruml.png]]


== Special plugins ==
== Специални добавки ==


* [[Authentication plugin development]]
* [[Разработка на приставка за удостоверяване]]
* [[Export plugin development]]
* [[Разработка на приставка за експортиране]]


== Available plugins ==
<div class="mw-translate-fuzzy">
* [[Authentication plugins]]
== Налични добавки ==
* [[Audit log]]
* [[Добавки за удостоверяване]]
* [[Дневник за проверка]]
* [[CintLink]]
* [[CintLink]]
* [[Available third party plugins]]
* [[Налични добавки на трети страни]]
</div>


== Tutorial ==
== Урок ==
[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.
[https://medium.com/@evently/creating-limesurvey-plugins-adcdf8d7e334 Този] урок стъпка по стъпка показва как да създадете приставка, която изпраща заявка за публикуване при всеки отговор на анкета подаване. Урокът ви показва как да създавате и запазвате глобални настройки и настройки за проучване, как да регистрирате събития и други.


[[Category:Development]]
[[Категория:Разработка]]
[[Category:Plugins]]
[[Категория:Добавки]]

Latest revision as of 16:58, 2 April 2024

Преглед

Започвайки от LimeSurvey 2.05, LimeSurvey официално ще поддържа плъгини. Някои плъгини ще бъдат поддържани от екипа на LimeSurvey и ще бъдат включени в ядрото. Някои ще бъдат подкрепени от други извън екипа на LimeSurvey. За да ги намерите, вижте Налични приставки на трети страни и добавете своя собствена приставка към тях!

Приставките позволяват на потребителите да персонализират функционалността на своята инсталация, като същевременно могат да се възползват от редовните софтуерни актуализации.

Тази документация е предназначена за разработчици, които разширяват LimeSurvey за собствена употреба или за свои клиенти; крайните потребители няма да бъдат подпомогнати от тази документация.

Добавките трябва да имплементират iPlugin интерфейс. Препоръчваме да разширите класа на вашия плъгин от класа PluginBase.

Добавките са разработени около събитие механизъм.

Настройки на плъгина

Чрез разширяването вие се възползвате от общата функционалност, изисквана от добавките, които вече сме внедрили за вас. Една от тези функции е внедряването на функцията getPluginSettings. Тази функция трябва да върне масив, описващ опциите за конфигурация за потребителя.

Примерният плъгин показва само 1 конфигурируема настройка, съобщението, което ще покаже.

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

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

Масивът съдържа име за всяка настройка като ключ. Стойностите са масиви, съдържащи необходимите метаданни.

Поддържаните типове са:

  • лого
  • int (цяло число)
  • низ (буквено-цифров)
  • текст
  • html
  • релевантност
  • информация
  • парола
  • дата
  • изберете

Освен тип са налични редица други ключове:

  • етикет, дефинира етикет
  • по подразбиране, дефинира стойност, която да се показва, ако не е указана стойност (само за глобални настройки, не за настройки на проучване)
  • текуща, дефинира текущата стойност.
  • readOnly: показва настройките като само за четене
  • htmlOptions, htmlOptions на входната част (вижте ръководството на Yii [[1]])
  • pluginOptions, за някои настройки (html или изберете) : задайте опцията за джаджа
  • labelOptions : htmlОпции на етикета
  • controlOptions : htmlОпции на обвивката на етикета и въвеждане

Можете да намерите пример за приставка, като използвате всички действителни настройки на exampleSettings

Четете и записвайте настройките на приставката

Възможно е да четете и записвате настройките на приставката директно от кода на приставката.

Пример:

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

Можете да получите стойност по подразбиране, ако настройката се окаже нулева:

$mySetting = $this->get('mySetting', null, null, 10); // 10 е по подразбиране

Survey specific plugin settings

Two events are used to create survey specific plugin settings:

  • newSurveySettings
  • beforeSurveySettings

Example to disable a plugin for a specific survey:

   
    public function init()
    {
        $this->subscribe('beforeSurveySettings');
        $this->subscribe('newSurveySettings');
        // Other events...
    }

    public function beforeSurveySettings()
    {
	    $event = $this->event;
	    $surveyId = intval($event->get('survey'));

        $event->set(
            "surveysettings.{$this->id}",
            [
                'name' => get_class($this),
                'settings' => [
                    'isActive' => [
                        'type' => 'boolean',
                        'label' => 'isActive',
                        'current' => $this->getIsActive($surveyId),
                        'help' => 'Activate plugin for this survey'
                    ],
                ]
            ]
        );
    }

    public function newSurveySettings()
    {
        $event = $this->event;
        foreach ($event->get('settings') as $name => $value)
        {
            $this->set($name, $value, 'Survey', $event->get('survey'), false);
        }
    }

    private function getIsActive(int $sid): bool
    {
        return (bool) $this->get('isActive', 'Survey', $sid, false);
    }

Събития

Приставките се абонират за събития и могат да взаимодействат с LimeSurvey, когато събитието бъде задействано. За списък с налични в момента събития проверете Plugin events.

API

Приставките трябва да разширяват LimeSurvey само чрез неговия „обществен“ API. Това означава, че директното използване на класове, намерени в изходния код, е лоша практика. Въпреки че не можем да ви принудим да не го правите, вие рискувате да имате повреден плъгин с всяка незначителна актуализация, която правим.

Доколкото е възможно, взаимодействайте с LimeSurvey само чрез методите, описани тук. Същото като за събития.

API обектът е достъпен чрез $this->api при разширяване от PluginBase, в противен случай можете да го получите от екземпляра на PluginManager, който се предава на конструктора на вашите добавки.

Нови функции могат да бъдат добавени към API обекта при поискване.

Разширение на формуляра (New in 6 )

Въведение

Системата за разширение на формуляри е по-общ начин за разширяване на формуляри в основния LimeSurvey без добавяне на ново събитие за всеки формуляр.

Състои се от следните компоненти:

  • Глобален модул, наречен FormExtensionService
  • Библиотека от входни класове, които добавките могат да добавят към горната инициализация на модула
  • джаджа, заедно с потребителски рендери, които се използват във файловете за преглед на LimeSurvey

Всяка форма се идентифицира с позиционен низ, като<form name><dot><tab name> . Пример: globalsettings.general или globalsettings.security .

Смисълът зад система, базирана на класове без HTML, е да освободи авторите на плъгина на работата да актуализират HTML, когато основният HTML се промени. Все пак авторът може да използва типа RawHtmlInput , ако е необходимо.

Едно нещо, което не можете да направите в тази система, е да добавите „нови раздели на формуляра“.

Пример

За да добавите нов вход към формуляр от плъгин, използвайте следния код от вашата функция init() :

ЗАДАЧА: Запазете в настройките на плъгина вместо глобално

// В горната част на файла
use LimeSurvey\Libraries\FormExtension\Inputs\TextInput;
use LimeSurvey\Libraries\FormExtension\SaveFailedException;

// В init()
Yii::app()->formExtensionService->add(
 'globalsettings.general',
 new TextInput([
 'name' => 'myinput', 
 'label' => 'Етикет',
 'disabled' => true,
 'tooltip' => 'Moo moo moo',
 'help' => 'Мало помощен текст', 
 'save' => function($request, $connection) {
 $value = $request->getPost('myinput');
 if ($value === 'някоя невалидна стойност') {
 throw new SaveFailedException("Could not save custom input 'myinput'");
 } else {
 SettingGlobal::setSetting('myinput', $value);
 }
 } ,
 'load' => function () {
 return getGlobalSetting('myinput');
 }
 ])
);

Валидиране

Валидирането на въведеното се извършва във функцията save (вижте примера по-горе). Ако публикуваната стойност е невалидна, хвърлете SaveFailedException и на потребителя ще се покаже предупредително флаш съобщение.

Поддържани форми

Следните форми могат да бъдат разширени:

  • globalsettings.general (New in 6.0.0 )

Ако искате да добавите поддръжка за друга основна форма, трябва да приложите следната промяна в заявка за изтегляне:

Във файла за преглед добавете:

<?php
use LimeSurvey\Libraries\FormExtension\FormExtensionWidget;
use LimeSurvey\Libraries\FormExtension\Inputs\DefaultBaseRenderer;
?> 
... още HTML
<?= FormExtensionWidget::render(
    App()-> formExtensionService->getAll('globalsettings.security'),
 нов DefaultBaseRenderer()
); ?>

Може да се наложи да създадете нов клас за изобразяване, базиран на DefaultBaseRenderer , ако формулярът HTML е различен от другите формуляри. Може също така да се наложи да разширите класа за изобразяване по подразбиране с все още недобавени типове вход.

Втората промяна, която трябва да направите, е да добавите извикване към сервизния клас за разширение на формуляр в действието на контролера, което записва формуляра:

$request = App()->request;
Yii::app()->formExtensionService->applySave('globalsettings', $request);

Това е!

Локализация (New in 3 )

Възможно е приставките да добавят свои собствени локални файлове. Използваният файлов формат е .mo, същият като основния превод. Файловете трябва да се съхраняват в

<plugin root folder>/локал/<language> /<language> .mo

където "<language> " е дума от две букви като "de" или "fr".

За да използвате конкретния локален файл, използвайте функцията на плъгина gT:

$this->gT("Текст на плъгин, който трябва да бъде преведен");

Ако даденият низ не може да бъде намерен в локалния файл за конкретния плъгин, функцията ще търси в основните локални файлове. Така че е безопасно да използвате низове като "Отказ":

$this->gT("Отказ"); // Ще бъде преведено, дори ако "Отказ" не е във файла с локал на приставката

Ако използвате изгледи заедно с вашия плъгин, трябва да използвате

$plugin->gT("Преведи ме");

за да направите специфичен за плъгина превод по ваш изглед.

Можете да използвате файла limesurvey.pot като пример за това как може да изглежда един pot файл. Това се импортира във вашия инструмент за превод.

Инструменти

Един инструмент с отворен код за редактиране на po- и mo-файлове е Poedit.

Регистриране (New in 3 )

Ако искате да регистрирате нещо от вашия плъгин, просто пишете

$this->log("Вашето съобщение");

Нивото на регистриране по подразбиране е проследяване, но можете да зададете друго ниво на регистриране като незадължителен втори аргумент:

$this->log("Нещо се обърка!", CLogger::LEVEL_ERROR);

Регистрационният файл може да бъде намерен в папка

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

Името на вашия плъгин автоматично се използва като категория. Добър начин да видите само грешките от вашия плъгин е използването на grep (на Linux):

$ опашка -f tmp/runtime/plugin.log | grep<your plugin name>

Повече информация за конфигуриране на регистриране в Yii 1: Optional_settings#Logging_settings.

Актуализации на разширенията (New in 4 )

От LimeSurvey версия 4.0.0 има въведена система за справяне с плъгини и други актуализации на разширения. За да използвате тази система, вашето разширение config.xml файл трябва да включва конфигурация за актуализиране.

<updaters>
<updater>
<stable> 1</stable>
<type> Почивка</type>
<source> https://comfortupdate.limesurvey.org/index.php?r=limestorerest</source>
<manualUpdateUrl> https://somedownloadlink.com/maybegithub</manualUpdateUrl>
</updater>
</updaters>

(Изходният таг по-горе сочи към LimeStore REST API, който ще се използва за всички разширения, налични в нашия LimeStore.)

Описания на маркери за актуализиране
Маркирайте Описание
стабилен „1“, ако този източник ви дава само номера на стабилни версии; „0“, ако източникът ще предостави и нестабилни версии, като 0.3.3-beta .
тип Засега се поддържа само тип rest . Лесно е да добавите нови типове програми за актуализиране (проверки на версиите), като git, wget и др.
източник URL адресът за извличане на нови версии от.
manualUpdateUrl URL адрес, на който потребителят може да отиде, за да актуализира най-новата версия на разширението.
automaticUpdateUrl ЗАДАЧА

Ако не искате да предоставите програма за актуализиране, трябва да поставите следния текст във вашия конфигурационен XML файл:

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

По този начин казвате на системата, че нарочно сте деактивирали системата за актуализиране и не сте забравили просто да я добавите.

Новият плъгин UpdateCheck - инсталиран и активиран по подразбиране - проверява за нови актуализации за всички инсталирани разширения, когато супер администратор влезе, асинхронно, максимум веднъж на всеки 24 часа. Ако бъдат намерени нови версии, се изпраща известие.

|Налични актуализации

Ако бъде намерена нова актуализация на защитата, известието ще се отвори автоматично и ще бъде стилизирано в клас „опасност“.

|Налични актуализации за сигурност

Можете ръчно да проверите за актуализации, като отидете в изгледа на мениджъра на приставките и кликнете върху „Проверка на актуализациите“. Обърнете внимание, че този бутон се вижда само ако е активиран плъгинът UpdateCheck.

|Ръчна проверка за актуализации

Под капака

Този раздел предоставя кратък преглед на внедряването на програмата за актуализиране на разширения.

Актуализаторът на разширението е част от библиотеката ExtensionInstaller. По-долу е UML диаграма за класовете, свързани с процеса на актуализиране.

|UML диаграма на програмата за актуализиране на разширение

Поток на програмата при стартиране на Yii:

Yii init
 VersionFetcherServiceLocator->init()
 Добавете програма за извличане на REST версия
 ExtensionUpdaterServiceLocator->init()
 Добавяне на PluginUpdater
 ЗАДАЧА: Добавете програма за актуализиране за всеки тип разширение (тема, шаблон на въпрос, ...)

Поток на програмата при стартиране на приставката UpdaterCheck:

!Н! Вземете всички актуализации от ExtensionUpdaterServiceLocator
 Цикъл на всеки актуализатор
 За всяка програма за актуализация преминете през програмите за извличане на версии, конфигурирани от<updater> XML
 За всяка версия за извличане, свържете се с отдалечен източник и получете информация за версията
 Композирайте всички версии в известие

Методът checkAll в плъгина UpdateCheck предоставя пример как да направите заявка за всички разширения за нови версии .

Добавяне на средства за извличане на нови версии

За да добавите нова персонализирана програма за извличане на версии, изпълнете това по време на инициализацията на Yii:

$service = \Yii::app()->versionFetcherServiceLocator
$service->addVersionFetcherType(
 'myNewVersionFetcherType',
 функция (\SimpleXMLElement $updaterXml) {
 връща нов MyNewVersionFetcher( $updaterXml);
 }
);

Разбира се, класът MyNewVersionFetcher трябва да подкласи VersionFetcher .

За да използвате програмата за извличане на нови версии, конфигурирайте маркера type в XML на програмата за актуализиране да използва

myNewVersionFetcherType (вместо напр. rest ).

Добавяне на нови програми за актуализация на разширения

За да добавите нов инструмент за актуализиране на потребителско разширение, изпълнете това по време на инициализацията на Yii:

$service = \Yii::app()->extensionUpdaterServiceLocator;
$service->addUpdaterType(
 'myNewExtensionUpdater',
 функция () {
 return MyNewExtensionUpdater::createUpdaters() ;
 }
);

Класът MyNewExtensionUpdater трябва да бъде подклас ExtensionUpdater .

Най-горният type таг в config.xml ('plugin', 'theme', ...) ще контролира кой инструмент за актуализиране на разширение се използва за това разширение. Системата все още не може да се персонализира напълно, тъй като трябва да добавите персонализиран ExtensionInstaller, елементи от менюто и т.н. Но на теория и може би в бъдеще би трябвало да е възможно да добавите нов тип разширение по този начин.

Инсталатор на разширение

Библиотеката за инсталиране на разширение се състои от два абстрактни класа:

  • ExtensionInstaller
  • FileFetcher

ExtensionInstaller е подклас за всеки тип разширение, като PluginInstaller, QuestionThemeInstaller и т.н.

FileFetcher е подклас за всеки различен начин за извличане на файлове. Понастоящем се поддържат само качени zip файлове, но в бъдеще може да има и инструмент за извличане на Github или LimeStore.

Файл: extensioninstalleruml.png

Специални добавки

Урок

Този урок стъпка по стъпка показва как да създадете приставка, която изпраща заявка за публикуване при всеки отговор на анкета подаване. Урокът ви показва как да създавате и запазвате глобални настройки и настройки за проучване, как да регистрирате събития и други.

Категория:Разработка Категория:Добавки