NewQuestionAttributes
From LimeSurvey Manual
The event
When
This settings happen each time the attribute definition is read for the installation. In general : it happen one time only.
Input
None.
Possible output
- Adding new attribute : $this->getEvent()->append('questionAttributes', $array); where arry is the new attribute.
Detail on definition
New attribute definition
It's an array:
attributeName=>[ 'types' : Apply to this question type 'category' : Where to put it 'sortorder' : Sort order in this category 'inputtype' : type of input : [buttongroup,columns,integer,singleselect,switch,text,textarea] 'options' : optionnal options if input type need it (for singleselect and buttongroup) 'default' : the default value 'i18n' : (optionnal) set to true for translatable attribute 'caption' : the label 'help' : an help ]
Input type
- switch : Switch (on|off) value send 0 or 1
- buttongroup : Button group, need options array
- singleselect : Single select in a DropDown
- text : a short text witout line feed
- integer : an integer
- columns : An integer betwwen 1 to 12
- textarea : text with line feed
Exemple of usage
<?php
class addAnAttribute extends PluginBase
{
protected $storage = 'DbStorage';
static protected $name = 'addAnAttribute';
static protected $description = 'Add an attribute for any question';
public function init()
{
$this->subscribe('newQuestionAttributes');
$this->subscribe('beforeQuestionRender');
}
/**
* We add the attribute here
*/
public function newQuestionAttributes()
{
$event = $this->getEvent();
$questionAttributes = array(
'exampleOne'=>array(
"types"=>"STU",
'category'=>gT('Other'),
'sortorder'=>1,
'inputtype'=>'text',
'default'=>'',
"help"=>'An example for short, long and huge text.',
"caption"=>'A text attribute'
),
'exampleTwo'=>array(
"types"=>"L",
'category'=>gT('Other'),
'sortorder'=>2,
'inputtype'=>'singleselect',
'options'=>array(
0=>gT('No'),
1=>gT('No'),
),
'default'=>0,
"help"=>'An example for singleselect.',
"caption"=>'A dropdown attribute'
),
);
$event->append('questionAttributes', $questionAttributes);
}
/**
* We can use the attribute like this , for example
*/
public function beforeQuestionRender()
{
$oAttributeOne=QuestionAttribute::model()->find("qid=:qid AND attribute=:attribute",array(":qid"=>$this->getEvent()->get('qid'),":attribute"=>"exampleOne"));
$oAttributeTwo=QuestionAttribute::model()->find("qid=:qid AND attribute=:attribute",array(":qid"=>$this->getEvent()->get('qid'),":attribute"=>"exampleTwo"));
/* OR */
$aAttributes=QuestionAttribute::model()->getQuestionAttributes($this->getEvent()->get('qid'));
$soAttributeOne=$aAttributes["exampleOne"];
$soAttributeTwo=$aAttributes["exampleTwo"];
/**
* Do something
*/
}
}