/** * Add a group element for the filter. * * This helper got messy... * * @param block_xp_filter $filter The filter to use, or null to add a filter. * @param block_xp_filter $newfilter The filter to use to populate the new filter. * @return void */ protected function create_group($filter = null, $newfilter = null) { static $noneditableid = -1; static $newfilterid = 1; $mform = $this->_form; $static = false; $points = $newfilter ? $newfilter->get_points() : 0; $sortorder = $newfilter ? $newfilter->get_sortorder() : 0; $ruledata = array('property' => '', 'compare' => 'eq', 'value' => ''); $name = 'newfilter[' . $newfilterid++ . ']'; if (!$filter && $newfilter) { $ruledata = $newfilter->get_rule()->export(); } if ($filter) { $static = !$filter->is_editable(); $id = $static ? $noneditableid-- : $filter->get_id(); $name = 'filter[' . $id . ']'; $points = $filter->get_points(); $sortorder = $filter->get_sortorder(); $rule = $filter->get_rule(); if (!$rule instanceof block_xp_rule_property) { throw new coding_exception('Only property rules are currently supported.'); } $ruledata = $rule->export(); } $el1 = $mform->createElement('select', 'property', get_string('eventproperty', 'block_xp'), array('eventname' => get_string('property:eventname', 'block_xp'), 'component' => get_string('property:component', 'block_xp'), 'action' => get_string('property:action', 'block_xp'), 'target' => get_string('property:target', 'block_xp'), 'crud' => get_string('property:crud', 'block_xp'))); $el2 = $mform->createElement('select', 'compare', get_string('comparisonrule', 'block_xp'), array(block_xp_rule_base::CT => get_string('rule:' . block_xp_rule_base::CT, 'block_xp'), block_xp_rule_base::EQ => get_string('rule:' . block_xp_rule_base::EQ, 'block_xp'))); $el3 = $mform->createElement('text', 'value', get_string('value', 'block_xp')); $el4 = $mform->createElement('text', 'f_points', get_string('xp', 'block_xp'), array('size' => '3', 'class' => 'pts')); $el5 = $mform->createElement('text', 'f_sortorder', 'sortorder', array('size' => '2', 'class' => 'sortorder')); $elgroup = array($el1, $el2, $el3, $el4); if (!$static && $filter) { array_unshift($elgroup, $el5); } $group = $mform->addElement('group', $name, '', $elgroup); $mform->setDefault($name . '[property]', $ruledata['property']); $mform->setDefault($name . '[compare]', $ruledata['compare']); $mform->setDefault($name . '[value]', $ruledata['value']); $mform->setDefault($name . '[f_points]', $points); $mform->setDefault($name . '[f_sortorder]', $sortorder); $mform->setType($name . '[value]', PARAM_RAW); $mform->setType($name . '[f_points]', PARAM_INT); $mform->setType($name . '[f_sortorder]', PARAM_INT); if ($static) { $mform->hardFreeze($name); } }