/**
  *
  */
 public static function custom_search_definition($mform, $dataformid, $customsearch, array $fields = array(), $showlabel = false)
 {
     if (!$fields and $dataformid) {
         $fieldman = new \mod_dataform_field_manager($dataformid);
         $fields = $fieldman->get_fields();
     }
     $andoroptions = array('' => get_string('andor', 'dataform'), 'AND' => get_string('and', 'dataform'), 'OR' => get_string('or', 'dataform'));
     $fieldoptions = self::get_field_search_options_menu($fields);
     $isnotoptions = array('' => get_string('is', 'dataform'), 'NOT' => get_string('not', 'dataform'));
     $operatoroptions = array('' => get_string('empty', 'dataform'), '=' => get_string('equal', 'dataform'), '>' => get_string('greaterthan', 'dataform'), '<' => get_string('lessthan', 'dataform'), '>=' => get_string('greaterorequal', 'dataform'), '<=' => get_string('lessorequal', 'dataform'), 'BETWEEN' => get_string('between', 'dataform'), 'LIKE' => get_string('contains', 'dataform'), 'IN' => get_string('in', 'dataform'));
     // Add current options.
     $searchcriteria = array();
     if ($customsearch) {
         if (!is_array($customsearch)) {
             $searchfields = unserialize($customsearch);
         } else {
             $searchfields = $customsearch;
         }
         foreach ($searchfields as $fieldid => $searchfield) {
             if (empty($fields[$fieldid])) {
                 continue;
             }
             foreach ($searchfield as $andor => $searchoptions) {
                 foreach ($searchoptions as $searchoption) {
                     if (!is_array($searchoption) or count($searchoption) != 4) {
                         continue;
                     }
                     list($element, $not, $operator, $value) = $searchoption;
                     $searchcriteria[] = array("{$fieldid},{$element}", $andor, $not, $operator, $value);
                 }
             }
         }
     }
     // Add 2 more empty options.
     $searchcriteria[] = array(null, null, null, null, null);
     $searchcriteria[] = array(null, null, null, null, null);
     // Add form definition for each existing criterion.
     $fieldlabel = get_string('filtersearchfieldlabel', 'dataform');
     foreach ($searchcriteria as $i => $searchcriterion) {
         if (count($searchcriterion) != 5) {
             continue;
         }
         $label = $showlabel ? "{$fieldlabel}{$i}" : '';
         list($fieldid, $andor, $not, $operator, $value) = $searchcriterion;
         $arr = array();
         $arr[] =& $mform->createElement('select', "searchandor{$i}", null, $andoroptions);
         $arr[] =& $mform->createElement('selectgroups', "searchfield{$i}", null, $fieldoptions);
         $arr[] =& $mform->createElement('select', "searchnot{$i}", null, $isnotoptions);
         $arr[] =& $mform->createElement('select', "searchoperator{$i}", '', $operatoroptions);
         $arr[] =& $mform->createElement('text', "searchvalue{$i}", '');
         $mform->addGroup($arr, "customsearcharr{$i}", $label, ' ', false);
         $mform->setType("searchvalue{$i}", PARAM_TEXT);
         $mform->setDefault("searchandor{$i}", $andor);
         $mform->setDefault("searchfield{$i}", $fieldid);
         $mform->setDefault("searchnot{$i}", $not);
         $mform->setDefault("searchoperator{$i}", $operator);
         $mform->setDefault("searchvalue{$i}", $value);
         $mform->disabledIf("searchfield{$i}", "searchandor{$i}", 'eq', '');
         $mform->disabledIf("searchnot{$i}", "searchfield{$i}", 'eq', '');
         $mform->disabledIf("searchoperator{$i}", "searchfield{$i}", 'eq', '');
         $mform->disabledIf("searchvalue{$i}", "searchoperator{$i}", 'eq', '');
         if ($i) {
             $prev = $i - 1;
             $mform->disabledIf("customsearcharr{$i}", "searchfield{$prev}", 'eq', '');
         }
         $i++;
     }
 }