function execute( $query ) { global $wgOut, $wgRequest; $this->setHeaders(); // Cycle through the query values, setting the appropriate // local variables $filter_name = $wgRequest->getVal( 'filter_name' ); $values_source = $wgRequest->getVal( 'values_source' ); $property_name = $wgRequest->getVal( 'property_name' ); $category_name = $wgRequest->getVal( 'category_name' ); $time_period = $wgRequest->getVal( 'time_period' ); $filter_values = $wgRequest->getVal( 'filter_values' ); $input_type = $wgRequest->getVal( 'input_type' ); $required_filter = $wgRequest->getVal( 'required_filter' ); $filter_label = $wgRequest->getVal( 'filter_label' ); $save_button_text = wfMsg( 'savearticle' ); $preview_button_text = wfMsg( 'preview' ); $filter_name_error_str = ''; $save_page = $wgRequest->getCheck( 'wpSave' ); $preview_page = $wgRequest->getCheck( 'wpPreview' ); if ( $save_page || $preview_page ) { # validate filter name if ( $filter_name == '' ) { $filter_name_error_str = wfMsg( 'sd_blank_error' ); } else { # redirect to wiki interface $namespace = SD_NS_FILTER; $title = Title::newFromText( $filter_name, $namespace ); $full_text = self::createFilterText( $property_name, $values_source, $category_name, $time_period, $filter_values, $input_type, $required_filter, $filter_label ); // HTML-encode $full_text = str_replace( '"', '"', $full_text ); $text = SDUtils::printRedirectForm( $title, $full_text, "", $save_page, $preview_page, false, false, false ); $wgOut->addHTML( $text ); return; } } // Set 'title' as hidden field, in case there's no URL niceness global $wgContLang; $mw_namespace_labels = $wgContLang->getNamespaces(); $special_namespace = $mw_namespace_labels[NS_SPECIAL]; $name_label = wfMsg( 'sd_createfilter_name' ); $property_label = wfMsg( 'sd_createfilter_property' ); $label_label = wfMsg( 'sd_createfilter_label' ); $text = <<<END <form action="" method="post"> <input type="hidden" name="title" value="$special_namespace:CreateFilter"> <p>$name_label <input size="25" name="filter_name" value=""> <span style="color: red;">$filter_name_error_str</span></p> <p>$property_label <select id="property_dropdown" name="property_name"> END; $all_properties = SDUtils::getSemanticProperties(); foreach ( $all_properties as $property_name ) { $text .= " <option>$property_name</option>\n"; } $values_from_property_label = wfMsg( 'sd_createfilter_usepropertyvalues' ); $values_from_category_label = wfMsg( 'sd_createfilter_usecategoryvalues' ); $date_values_label = wfMsg( 'sd_createfilter_usedatevalues' ); $enter_values_label = wfMsg( 'sd_createfilter_entervalues' ); // Need both label and value, in case user's language is // different from wiki's $year_label = wfMsg( 'sd_filter_year' ); $year_value = wfMsgForContent( 'sd_filter_year' ); $month_label = wfMsg( 'sd_filter_month' ); $month_value = wfMsgForContent( 'sd_filter_month' ); $input_type_label = wfMsg( 'sd_createfilter_inputtype' ); $values_list_label = wfMsg( 'sd_createfilter_listofvalues' ); // same as for time values $combo_box_label = wfMsg( 'sd_filter_combobox' ); $combo_box_value = wfMsgForContent( 'sd_filter_combobox' ); $date_range_label = wfMsg( 'sd_filter_daterange' ); $date_range_value = wfMsgForContent( 'sd_filter_daterange' ); $require_filter_label = wfMsg( 'sd_createfilter_requirefilter' ); $text .= <<<END </select> </p> <p><input type="radio" name="values_source" checked value="property"> $values_from_property_label </p> <p><input type="radio" name="values_source" value="category"> $values_from_category_label <select id="category_dropdown" name="category_name"> END; $categories = SDUtils::getCategoriesForBrowsing(); foreach ( $categories as $category ) { $category = str_replace( '_', ' ', $category ); $text .= " <option>$category</option>\n"; } $text .= <<<END </select> </p> <p><input type="radio" name="values_source" value="dates"> $date_values_label <select id="time_period_dropdown" name="time_period"> <option value="$year_value">$year_label</option> <option value="$month_value">$month_label</option> </select> </p> <p><input type="radio" name="values_source" value="manual"> $enter_values_label <input size="40" name="filter_values" value=""> </p> <p>$input_type_label <select id="input_type_dropdown" name="input_type"> <option value="">$values_list_label</option> <option value="$combo_box_value">$combo_box_label</option> <option value="$date_range_value">$date_range_label</option> </select> </p> <p>$require_filter_label <select id="required_filter_dropdown" name="required_filter"> <option /> END; $filters = SDUtils::getFilters(); foreach ( $filters as $filter ) { $filter = str_replace( '_', ' ', $filter ); $text .= " <option>$filter</option>\n"; } $text .= <<<END </select> </p> <p>$label_label <input size="25" name="filter_label" value=""></p> <div class="editButtons"> <p> <input type="submit" id="wpSave" name="wpSave" value="$save_button_text"> <input type="submit" id="wpPreview" name="wpPreview" value="$preview_button_text"></p> </div> END; $text .= " </form>\n"; $wgOut->addHTML( $text ); }
function getPageHeader() { global $wgRequest; global $sdgContLang, $sdgScriptPath; global $sdgFiltersSmallestFontSize, $sdgFiltersLargestFontSize; $categories = SDUtils::getCategoriesForBrowsing(); // if there are no categories, escape quickly if (count($categories) == 0) { return ""; } $subcategory_text = wfMsg('sd_browsedata_subcategory'); $header = ""; $this->show_single_cat = $wgRequest->getCheck('_single'); if (!$this->show_single_cat) { $header .= $this->printCategoriesList($categories); } // if there are no subcategories or filters for this // category, escape now that we've (possibly) printed the // categories list if (count($this->next_level_subcategories) == 0 && count($this->applied_filters) == 0 && count($this->remaining_filters) == 0) { return $header; } $header .= ' <div id="drilldown-header">' . "\n"; if (count($this->applied_filters) > 0 || $this->subcategory) { $category_url = $this->makeBrowseURL($this->category); $header .= '<a href="' . $category_url . '" title="' . wfMsg('sd_browsedata_resetfilters') . '">' . str_replace('_', ' ', $this->category) . '</a>'; } else { $header .= str_replace('_', ' ', $this->category); } if ($this->subcategory) { $header .= " > "; $header .= "{$subcategory_text}: "; $subcat_string = str_replace('_', ' ', $this->subcategory); $remove_filter_url = $this->makeBrowseURL($this->category, $this->applied_filters); $header .= "\n" . ' <span class="drilldown-header-value">' . $subcat_string . '</span> <a href="' . $remove_filter_url . '" title="' . wfMsg('sd_browsedata_removesubcategoryfilter') . '"><img src="' . $sdgScriptPath . '/skins/filter-x.png" /></a> '; } foreach ($this->applied_filters as $i => $af) { $header .= !$this->subcategory && $i == 0 ? " > " : "\n\t\t\t\t\t<span class=\"drilldown-header-value\">&</span> "; $filter_label = $this->printFilterLabel($af->filter->name); // add an "x" to remove this filter, if it has more // than one value if (count($this->applied_filters[$i]->values) > 1) { $temp_filters_array = $this->applied_filters; array_splice($temp_filters_array, $i, 1); $remove_filter_url = $this->makeBrowseURL($this->category, $temp_filters_array, $this->subcategory); array_splice($temp_filters_array, $i, 0); $header .= $filter_label . ' <a href="' . $remove_filter_url . '" title="' . wfMsg('sd_browsedata_removefilter') . '"><img src="' . $sdgScriptPath . '/skins/filter-x.png" /></a> : '; } else { $header .= "{$filter_label}: "; } foreach ($af->values as $j => $fv) { if ($j > 0) { $header .= ' <span class="drilldown-or">' . wfMsg('sd_browsedata_or') . '</span> '; } $filter_text = $this->printFilterValue($af->filter, $fv->text); $temp_filters_array = $this->applied_filters; $removed_values = array_splice($temp_filters_array[$i]->values, $j, 1); $remove_filter_url = $this->makeBrowseURL($this->category, $temp_filters_array, $this->subcategory); array_splice($temp_filters_array[$i]->values, $j, 0, $removed_values); $header .= "\n\t" . ' <span class="drilldown-header-value">' . $filter_text . '</span> <a href="' . $remove_filter_url . '" title="' . wfMsg('sd_browsedata_removefilter') . '"><img src="' . $sdgScriptPath . '/skins/filter-x.png" /></a>'; } if ($af->search_term != null) { $temp_filters_array = $this->applied_filters; $removed_search_term = $temp_filters_array[$i]->search_term; $temp_filters_array[$i]->search_term = null; $remove_filter_url = $this->makeBrowseURL($this->category, $temp_filters_array, $this->subcategory); $temp_filters_array[$i]->search_term = $removed_search_term; $header .= "\n\t" . '<span class="drilldown-header-value">~ \'' . $af->search_term . '\'</span> <a href="' . $remove_filter_url . '" title="' . wfMsg('sd_browsedata_removefilter') . '"><img src="' . $sdgScriptPath . '/skins/filter-x.png" /> </a>'; } elseif ($af->lower_date != null || $af->upper_date != null) { $header .= "\n\t<span class=\"drilldown-header-value\">" . $af->lower_date_string . " - " . $af->upper_date_string . "</span>"; } } $header .= "</div>\n"; $drilldown_description = wfMsg('sd_browsedata_docu'); $header .= "\t\t\t\t<p>{$drilldown_description}</p>\n"; // display the list of subcategories on one line, and below // it every filter, each on its own line; each line will // contain the possible values, and, in parentheses, the // number of pages that match that value $header .= "\t\t\t\t<div class=\"drilldown-filters\">\n"; $cur_url = $this->makeBrowseURL($this->category, $this->applied_filters, $this->subcategory); $cur_url .= strpos($cur_url, '?') ? '&' : '?'; $this->createTempTable($this->category, $this->subcategory, $this->all_subcategories, $this->applied_filters); $num_printed_values = 0; if (count($this->next_level_subcategories) > 0) { $results_line = ""; // loop through to create an array of subcategory // names and their number of values, then loop through // the array to print them - we loop through twice, // instead of once, to be able to print a tag-cloud // display if necessary $subcat_values = array(); foreach ($this->next_level_subcategories as $i => $subcat) { $further_subcats = SDUtils::getCategoryChildren($subcat, true, 10); $num_results = $this->getNumResults($subcat, $further_subcats); $subcat_values[$subcat] = $num_results; } // get necessary values for creating the tag cloud, // if appropriate if ($sdgFiltersSmallestFontSize > 0 && $sdgFiltersLargestFontSize > 0) { $lowest_num_results = min($subcat_values); $highest_num_results = max($subcat_values); $num_results_midpoint = ($lowest_num_results + $highest_num_results) / 2; $font_size_midpoint = ($sdgFiltersSmallestFontSize + $sdgFiltersLargestFontSize) / 2; $num_results_per_font_pixel = ($highest_num_results + 1 - $lowest_num_results) / ($sdgFiltersLargestFontSize + 1 - $sdgFiltersSmallestFontSize); } foreach ($subcat_values as $subcat => $num_results) { if ($num_results > 0) { if ($num_printed_values++ > 0) { $results_line .= " · "; } $filter_text = str_replace('_', ' ', $subcat) . " ({$num_results})"; $filter_url = $cur_url . '_subcat=' . urlencode($subcat); if ($sdgFiltersSmallestFontSize > 0 && $sdgFiltersLargestFontSize > 0) { $font_size = round($font_size_midpoint + ($num_results - $num_results_midpoint) / $num_results_per_font_pixel); $results_line .= "\n\t\t\t\t\t" . '<a href="' . $filter_url . '" title="' . wfMsg('sd_browsedata_filterbysubcategory') . '" style="font-size: ' . $font_size . 'px">' . $filter_text . '</a>'; } else { $results_line .= "\n\t\t\t\t\t" . '<a href="' . $filter_url . '" title="' . wfMsg('sd_browsedata_filterbysubcategory') . '">' . $filter_text . '</a>'; } } } if ($results_line != "") { $header .= "\t\t\t\t\t<p><strong>{$subcategory_text}:</strong> {$results_line}</p>\n"; } } $filters = SDUtils::loadFiltersForCategory($this->category); foreach ($filters as $f) { foreach ($this->applied_filters as $af) { if ($af->filter->name == $f->name) { $header .= $this->printAppliedFilterLine($af); } } foreach ($this->remaining_filters as $rf) { if ($rf->name == $f->name) { $header .= $this->printUnappliedFilterLine($rf, $cur_url); } } } $header .= "\t\t\t\t</div> <!-- drilldown-filters -->\n"; return $header; }