In Totara how to add custom HTML elements (checkboxes, input boxes etc) and then access the value selected by user on server side:
1. Adding custom elements.
2. Accessing values of custom elements.
Each problem is discussed below: Overview:
In Totara, for blocks, we have some standard configuration settings. In these settings, we can change position, visibility, weight etc of the block. To access these settings:
Go on course page->turn editing on->click on ‘configure “your block name” block’:

On configuration page these standard settings are available for the block:

Problem 1:
How to add custom settings for the block on configuration page:
Above is a standard Totara page and we need to follow a process to add custom settings here:
Structure of folders and files in Totara:
Totara/
blocks/
abc/ //custom block
lang/
db/
Abc_form.php
edit_form.php
alerts/ //standard block
lang/
db/
Alerts_form.php
edit_form.php
…..
edit_form.php
edit_form.php file contains standard settings. When we download a block template, edit_form.php is already present in this block.
Standard Code available in edit_form.php
class block_abc_edit_form extends block_edit_form {
protected function specific_definition($mform) {
// Section header title according to language file.
$mform->addElement('header', 'configheader', get_string('blocksettings', 'block'));
// A sample string variable with a default value.
$mform->addElement('text', 'config_text', get_string('blockstring', 'block_abc'));
$mform->setDefault('config_text', 'default value');
$mform->setType('config_text', PARAM_MULTILANG);
$mform->addElement('header', 'configheader', get_string('blocksettings1', 'block_abc'));
}
For adding custom settings we need to follow the Moodle api as we are overriding a standard class. In moodle api we have mform (moodle form ) elements in place of simple html elements.
Add the following code in block_abc_edit_form class (like we are going to add a custom checkbox):
$mform->addElement('advcheckbox','config_assignid'.$a,$label,null,
array('name' => 'config_'.$a),$a);
config_assignid’.$a is checkbox name and id.
$label is checkbox label (it will appear to the left of checkbox on UI)
null is checkbox label on right side.
$a is the value of checkbox (which will be sent to server on submit).
After adding these checkboxes our configuration page will look like this :

Problem 2: How to access the value of mform checkboxes on other pages of the block.
Solution: To achieve this we have to create an instance of the block and then access the variable/methods from there:
$coursecontext = context_course::instance($courseid);
$instance = $DB->get_record('block_instances', array('blockname'=>'abc', 'parentcontextid' => $coursecontext->id));
$block_abc= block_instance('abc', $instance);
echo "this";print_r($block_abc->config);
$coursecontext = context_course::instance($courseid);
Get context of course:
$instance = $DB->get_record('block_instances', array('blockname'=>'abc', 'parentcontextid' => $coursecontext->id));
This will fetch us configuration settings like weight, region, default value, config data for our block:
Output:
stdClass Object
(
[id] => 63
[blockname] => abc
[parentcontextid] => 19
[showinsubcontexts] => 0
[pagetypepattern] => course-view-*
[subpagepattern] =>
[defaultregion] => side-pre
[defaultweight] => 10
)
$block_abc= block_instance('abc', $instance);
It will display all the data (cron, context, page, config etc) associated to block:
e.g. block context and config
Here config holds the values of checkboxes:
[context] => context_block Object
(
[_id:protected] => 272
[_contextlevel:protected] => 80
[_instanceid:protected] => 63
[_path:protected] => /1/3/19/272
[_depth:protected] => 4
)
[config] => stdClass Object
(
[assignid9] => 9
[assignid10] => 10
[assignid11] => 11
[assignid12] => 12
[assignid13] => 13
[assignid16] => 16
)
To get only config data (checkbox values) we can do like this
echo “this :”;
print_r($block_abc->config);
Following output contains only values of checked checkboxes:

