예제 #1
0
 static function loadAllFromPageSchema($psSchemaObj)
 {
     $filters_ps = array();
     $template_all = $psSchemaObj->getTemplates();
     foreach ($template_all as $template) {
         $field_all = $template->getFields();
         foreach ($field_all as $fieldObj) {
             $f = new SDFilter();
             $filter_array = $fieldObj->getObject('semanticdrilldown_Filter');
             if (is_null($filter_array)) {
                 continue;
             }
             if (array_key_exists('name', $filter_array)) {
                 $f->setName($filter_array['name']);
             } else {
                 $f->setName($fieldObj->getName());
             }
             $prop_array = $fieldObj->getObject('semanticmediawiki_Property');
             if ($prop_array['name'] != '') {
                 $f->setProperty($prop_array['name']);
             } else {
                 $f->setProperty($f->name);
             }
             if (array_key_exists('Type', $prop_array)) {
                 // Thankfully, the property type names
                 // assigned by SMW/Page Schemas, and the
                 // internal ones used by SD, are the
                 // same (for all the relevant types)
                 // except for an uppercased first
                 // letter.
                 $f->property_type = strtolower($prop_array['Type']);
             }
             if (array_key_exists('ValuesFromCategory', $filter_array)) {
                 $f->setCategory($filter_array['ValuesFromCategory']);
             } elseif (array_key_exists('TimePeriod', $filter_array)) {
                 $f->time_period = $filter_array['TimePeriod'];
                 $f->allowed_values = array();
             } elseif ($f->property_type === 'boolean') {
                 $f->allowed_values = array('0', '1');
             } elseif (array_key_exists('Values', $filter_array)) {
                 $f->allowed_values = $filter_array['Values'];
             } else {
                 $f->allowed_values = array();
             }
             // Must be done after property type is set.
             $f->loadDBStructureInformation();
             $filters_ps[] = $f;
         }
     }
     return $filters_ps;
 }