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; }