From LimeSurvey Manual

 Hint: This features is available starting in version 2.50

The event


This settings happen each time the attribute definition is read for the installation. In general : it happen one time only.



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:

    'types' : Apply to this question type
    'category' : Where to put it
    'sortorder' : Sort order in this category
    'inputtype' : type of input : [buttongroup,columns,integer,float,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
    'min' : (optionnal) use for integer or float type for min value to be set
    'max' : (optionnal) use for integer or float type for max value to be set

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
  • float : an float
  • columns : An integer between 1 to 12 (can be empty)
  • textarea : text with line feed

Exemple of usage

class addAnAttribute extends PluginBase
    protected $storage = 'DbStorage';

    static protected $name = 'addAnAttribute';
    static protected $description = 'Add an attribute for any question';
    public function init()
   * We add the attribute here
    public function newQuestionAttributes()
        $event = $this->getEvent();
        $questionAttributes = array(
                "help"=>'An example for short, long and huge text.',
                "caption"=>'A text attribute'
                "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 */
         * Do something