*/
class SpecialPagesWithProp extends QueryPage {
private $propName = null;
+ private $existingPropNames = null;
function __construct( $name = 'PagesWithProp' ) {
parent::__construct( $name );
$request = $this->getRequest();
$propname = $request->getVal( 'propname', $par );
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select(
- 'page_props',
- 'pp_propname',
- '',
- __METHOD__,
- array( 'DISTINCT', 'ORDER BY' => 'pp_propname' )
- );
- $propnames = array();
- foreach ( $res as $row ) {
- $propnames[$row->pp_propname] = $row->pp_propname;
- }
+ $propnames = $this->getExistingPropNames();
$form = new HTMLForm( array(
'propname' => array(
parent::execute( $data['propname'] );
}
+ /**
+ * Return an array of subpages beginning with $search that this special page will accept.
+ *
+ * @param string $search Prefix to search for
+ * @param integer $limit Maximum number of results to return
+ * @return string[] Matching subpages
+ */
+ public function prefixSearchSubpages( $search, $limit = 10 ) {
+ $subpages = array_keys( $this->getExistingPropNames() );
+ return self::prefixSearchArray( $search, $limit, $subpages );
+ }
+
/**
* Disable RSS/Atom feeds
* @return bool
return $ret;
}
+ public function getExistingPropNames() {
+ if ( $this->existingPropNames === null ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select(
+ 'page_props',
+ 'pp_propname',
+ '',
+ __METHOD__,
+ array( 'DISTINCT', 'ORDER BY' => 'pp_propname' )
+ );
+ $propnames = array();
+ foreach ( $res as $row ) {
+ $propnames[$row->pp_propname] = $row->pp_propname;
+ }
+ $this->existingPropNames = $propnames;
+ }
+ return $this->existingPropNames;
+ }
+
protected function getGroupName() {
return 'pages';
}