NewQuestionAttributes: Difference between revisions
From LimeSurvey Manual
DenisChenu (talk | contribs) No edit summary |
DenisChenu (talk | contribs) Add some information |
||
Line 14: | Line 14: | ||
* Adding new attribute : $this->getEvent()->append('questionAttributes', $array); where arry is the new attribute. | * Adding new attribute : $this->getEvent()->append('questionAttributes', $array); where arry is the new attribute. | ||
New attribute definition array: | =Detail on definition= | ||
==New attribute definition== | |||
It's an array: | |||
<pre> | <pre> | ||
attributeName=>[ | attributeName=>[ | ||
Line 21: | Line 24: | ||
'sortorder' : Sort order in this category | 'sortorder' : Sort order in this category | ||
'inputtype' : type of input : [buttongroup,columns,integer,singleselect,switch,text,textarea] | 'inputtype' : type of input : [buttongroup,columns,integer,singleselect,switch,text,textarea] | ||
'options' : optionnal options if input type need it (for | 'options' : optionnal options if input type need it (for singleselect and buttongroup) | ||
'default' : the default value | 'default' : the default value | ||
'i18n' : (optionnal) set to true for translatable attribute | 'i18n' : (optionnal) set to true for translatable attribute | ||
Line 28: | Line 31: | ||
] | ] | ||
</pre> | </pre> | ||
==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= | |||
<source lang="php"> | <source lang="php"> |
Revision as of 10:34, 20 April 2017

When
This settings happen each time the attribute definition is readed 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
*/
}
}