File: /var/www/apklausos/application/core/plugins/expressionFixedDbVar/expressionFixedDbVar.php
<?php
/**
* expressionFixedDbVar : add some fixed DB var : SEED, STARTDATE …
*
* @author Denis Chenu <denis@sondages.pro>
* @copyright 2019-2021 LimeSurvey - Denis Chenu
* @license GPL version 3
* @version 1.0.2
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
class expressionFixedDbVar extends PluginBase
{
protected $storage = 'DbStorage';
protected static $description = 'Add SEED and other DB var in ExpressionScript Engine.';
protected static $name = 'expressionFixedDbVar';
/** @inheritdoc this plugin didn't have any public method */
public $allowedPublicMethods = array();
/**
* @inheritdoc
*/
protected $settings = array(
'SEED' => array(
'type' => 'checkbox',
'label' => 'Add SEED variable',
'default' => '1',
'column' => 'seed',
),
'SUBMITDATE' => array(
'type' => 'checkbox',
'label' => 'Add SUBMITDATE variable',
'default' => '1',
'column' => 'submitdate',
),
'STARTDATE' => array(
'type' => 'checkbox',
'label' => 'Add STARTDATE variable',
'default' => '0',
'column' => 'startdate',
),
'DATESTAMP' => array(
'type' => 'checkbox',
'label' => 'Add DATESTAMP variable',
'default' => '1',
'column' => 'datestamp',
),
'LASTPAGE' => array(
'type' => 'checkbox',
'label' => 'Add LASTPAGE variable',
'default' => '0',
'column' => 'lastpage',
),
'STARTLANGUAGE' => array(
'type' => 'checkbox',
'label' => 'Add STARTLANGUAGE variable',
'default' => '0',
'column' => 'startlanguage',
),
'IPADDR' => array(
'type' => 'checkbox',
'label' => 'Add IPADDR variable',
'default' => '0',
'column' => 'ipaddr',
),
'REFURL' => array(
'type' => 'checkbox',
'label' => 'Add REFURL variable',
'default' => '0',
'column' => 'ipaddr',
),
);
public function init()
{
/* Core plugin : add variables */
$this->subscribe('setVariableExpressionEnd', 'addFixedDbVar');
/* Core plugin : update variables just before public views */
$this->subscribe('getPluginTwigPath', 'beforeTwigViews');
/* Option by survey */
$this->subscribe('beforeSurveySettings');
$this->subscribe('newSurveySettings');
}
/**
* Add the fixed know var to valid variables
* @link https://www.limesurvey.org/manual/ExpressionManagerStart
*/
public function addFixedDbVar()
{
$knownVarsToCreate = $this->getAddedVars($this->event->get('surveyId'));
if (empty($knownVarsToCreate)) {
return;
}
$newKnowVars = array();
foreach ($knownVarsToCreate as $var) {
$newKnowVars[$var] = array(
'code' => "", // We don't have it if we don't have Response
'jsName_on' => '',
'jsName' => '',
'readWrite' => 'N',
);
}
$this->getEvent()->append('knownVars', $newKnowVars);
}
/**
* Update value just before views
*/
public function beforeTwigViews()
{
static $updated = false;
if ($updated) {
return;
}
$updated = true;
$surveyId = LimeExpressionManager::getLEMsurveyId();
if (empty($surveyId)) {
return;
}
$knownVarsToCreate = $this->getAddedVars($surveyId);
if (empty($knownVarsToCreate)) {
return;
}
$oResponse = $this->api->getCurrentResponses();
if (empty($oResponse)) {
return;
}
foreach ($knownVarsToCreate as $var) {
$column = $this->settings[$var]['column'];
if (isset($oResponse->$column)) {
LimeExpressionManager::setValueToKnowVar($var, $oResponse->$column);
}
}
}
/**
* Add the option inside survey settings
* @return void
*/
public function beforeSurveySettings()
{
$newSettings = array();
foreach ($this->settings as $var => $params) {
if (isset($this->settings[$var]['column'])) {
$inherited = $this->get($var, null, null, $params['default']) ? gT("Yes") : gT("No");
$newSettings[$var] = array(
'type' => 'select',
'options' => array(
'1' => gT("Yes"),
'0' => gT("No"),
),
'htmlOptions' => array(
'empty' => gT("Inherit") . " [{$inherited}]",
),
'label' => $this->gT($params['label']),
'current' => $this->get($var, 'Survey', $this->getEvent()->get('survey'), ''),
);
}
}
$this->getEvent()->set("surveysettings.{$this->id}", array(
'name' => get_class($this),
'settings' => $newSettings
));
}
/**
* Save the survey settings
* @return void
*/
public function newSurveySettings()
{
$event = $this->event;
foreach ($event->get('settings') as $name => $value) {
$this->set($name, $value, 'Survey', $event->get('survey'));
}
}
/**
* @inheritdoc
* Add translation for label
*/
public function getPluginSettings($getValues = true)
{
/* Translation inside plugin ? */
$this->settings['SEED']['label'] = $this->gT('Add SEED variable');
$this->settings['SUBMITDATE']['label'] = $this->gT('Add SUBMITDATE variable');
$this->settings['STARTDATE']['label'] = $this->gT('Add STARTDATE variable');
$this->settings['DATESTAMP']['label'] = $this->gT('Add DATESTAMP variable');
$this->settings['LASTPAGE']['label'] = $this->gT('Add LASTPAGE variable');
$this->settings['STARTLANGUAGE']['label'] = $this->gT('Add STARTLANGUAGE variable');
$this->settings['IPADDR']['label'] = $this->gT('Add IPADDR variable');
$this->settings['REFURL']['label'] = $this->gT('Add REFURL variable');
return parent::getPluginSettings($getValues);
}
/**
* get the fiuxed var to be added for this survey
* @param integer $surveyId
* @return string[]
*/
private function getAddedVars($surveyId)
{
$addedvars = array();
foreach ($this->settings as $var => $params) {
if (isset($this->settings[$var]['column'])) {
$current = $this->get($var, 'Survey', $surveyId, "");
if ($current === "") {
// INHERIT
$current = $this->get($var, null, null, $this->settings[$var]['default']);
}
if (boolval($current)) {
$addedvars[] = $var;
}
}
}
return $addedvars;
}
}