Beispiel #1
0
 /**
  * Generates a dataform filter.
  * @param array|stdClass $record
  * @param array $options
  * @return stdClass generated object
  */
 public function create_filter($record, array $options = null)
 {
     $record = (object) (array) $record;
     $filter = new \mod_dataform\pluginbase\dataformfilter($record);
     $fieldman = new \mod_dataform_field_manager($record->dataid);
     // Append sort options if specified.
     if (!empty($record->sortoptions)) {
         // Convert fieldname[,element] sortdir to
         // fieldid => (element,sortdir).
         $sorties = array();
         foreach (explode(';', $record->sortoptions) as $sortoption) {
             list($fieldname, $element, $sortdir) = explode(',', $sortoption);
             if ($field = $fieldman->get_field_by_name($fieldname)) {
                 $sorties[$field->id] = array($element, $sortdir);
             }
         }
         $filter->append_sort_options($sorties);
     }
     // Append search options if specified.
     if (!empty($record->searchoptions)) {
         // Convert AND|OR,fieldname,element,[NOT],operator,value to
         // fieldid => (endor => (element, not, operator, value)).
         $searchoptions = array();
         foreach (explode(';', $record->searchoptions) as $searchoption) {
             list($andor, $fieldname, $element, $isnot, $op, $value) = explode(',', $searchoption);
             if ($field = $fieldman->get_field_by_name($fieldname)) {
                 $searchy = array($andor => array(array($element, $isnot, $op, $value)));
                 if (empty($searchoptions[$field->id])) {
                     $searchoptions[$field->id] = $searchy;
                 } else {
                     $searchoptions[$field->id] = array_merge_recursive($searchoptions[$field->id], $searchy);
                 }
             }
         }
         $filter->append_search_options($searchoptions);
     }
     $filter->update();
     return $filter->instance;
 }