Implemented the "default namespaces for search" feature. This includes
changes to the preferences form, a new key in the LanguageXX.php files (defaultns) and a new global config variable in DefaultSettings.php ($wgNamespacesToBeSearchedDefault). I also killed a bug that produced an errorneous SQL command when the user failed to check any namespaces to search in the search form. The updated implementation searched the main namespace if no checkbox is checked.
This commit is contained in:
parent
712b916275
commit
01515e038f
6 changed files with 125 additions and 14 deletions
|
|
@ -92,4 +92,7 @@ $wgCompressByDefault = true;
|
|||
$wgNamespacesWithSubpages = array( -1 => 0, 0 => 0, 1 => 1,
|
||||
2 => 1, 3 => 1, 4 => 0, 5 => 1, 6 => 0, 7 => 1 );
|
||||
|
||||
$wgNamespacesToBeSearchedDefault = array( -1 => 0, 0 => 1, 1 => 0,
|
||||
2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0 );
|
||||
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -23,7 +23,11 @@ class SearchEngine {
|
|||
|
||||
function queryNamespaces()
|
||||
{
|
||||
return "cur_namespace IN (" . implode( ",", $this->namespacesToSearch ) . ")";
|
||||
$namespaces = implode( ",", $this->namespacesToSearch );
|
||||
if ($namespaces == "") {
|
||||
$namespaces = "0";
|
||||
}
|
||||
return "AND cur_namespace IN (" . $namespaces . ")";
|
||||
#return "1";
|
||||
}
|
||||
|
||||
|
|
@ -33,6 +37,25 @@ class SearchEngine {
|
|||
return "AND cur_is_redirect=0 ";
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* private */ function initNamespaceCheckbox( $i )
|
||||
{
|
||||
global $wgUser, $wgNamespacesToBeSearchedDefault;
|
||||
|
||||
|
||||
if ($wgUser->getRights()) {
|
||||
// User is logged in so we retrieve his default namespaces
|
||||
return $wgUser->getOption( "searchNs".$i );
|
||||
}
|
||||
else {
|
||||
// User is not logged in so we give him the global default namespaces
|
||||
return $wgNamespacesToBeSearchedDefault[ $i ];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function powersearch()
|
||||
{
|
||||
global $wgUser, $wgOut, $wgLang, $wgTitle;
|
||||
|
|
@ -41,18 +64,25 @@ class SearchEngine {
|
|||
$search = $_REQUEST['search'];
|
||||
$searchx = $_REQUEST['searchx'];
|
||||
$listredirs = $_REQUEST['redirs'];
|
||||
$nscb[0] = $_REQUEST['ns0'];
|
||||
$nscb[1] = $_REQUEST['ns1'];
|
||||
$nscb[2] = $_REQUEST['ns2'];
|
||||
$nscb[3] = $_REQUEST['ns3'];
|
||||
$nscb[4] = $_REQUEST['ns4'];
|
||||
$nscb[5] = $_REQUEST['ns5'];
|
||||
$nscb[6] = $_REQUEST['ns6'];
|
||||
$nscb[7] = $_REQUEST['ns7'];
|
||||
|
||||
|
||||
if ( ! isset ( $searchx ) ) { /* First time here */
|
||||
$nscb[0] = $listredirs = 1; /* All others should be unset */
|
||||
$listredirs = 1;
|
||||
for ($i = 0; ($i <= 7); $i++)
|
||||
{
|
||||
$nscb[$i] = $this->initNamespaceCheckbox($i);
|
||||
}
|
||||
} else {
|
||||
$nscb[0] = $_REQUEST['ns0'];
|
||||
$nscb[1] = $_REQUEST['ns1'];
|
||||
$nscb[2] = $_REQUEST['ns2'];
|
||||
$nscb[3] = $_REQUEST['ns3'];
|
||||
$nscb[4] = $_REQUEST['ns4'];
|
||||
$nscb[5] = $_REQUEST['ns5'];
|
||||
$nscb[6] = $_REQUEST['ns6'];
|
||||
$nscb[7] = $_REQUEST['ns7'];
|
||||
}
|
||||
|
||||
$this->checkboxes["searchx"] = 1;
|
||||
$ret = wfMsg("powersearchtext");
|
||||
|
||||
|
|
@ -143,7 +173,7 @@ class SearchEngine {
|
|||
$sql = "SELECT cur_id,cur_namespace,cur_title," .
|
||||
"cur_text FROM cur,searchindex " .
|
||||
"WHERE cur_id=si_page AND {$this->mTitlecond} " .
|
||||
"AND {$searchnamespaces} {$redircond}" .
|
||||
"{$searchnamespaces} {$redircond}" .
|
||||
"LIMIT {$offset}, {$limit}";
|
||||
$res1 = wfQuery( $sql, $fname );
|
||||
$num = wfNumRows($res1);
|
||||
|
|
@ -154,7 +184,7 @@ class SearchEngine {
|
|||
$sql = "SELECT cur_id,cur_namespace,cur_title," .
|
||||
"cur_text FROM cur,searchindex " .
|
||||
"WHERE cur_id=si_page AND {$this->mTextcond} " .
|
||||
"AND {$searchnamespaces} {$redircond} " .
|
||||
"{$searchnamespaces} {$redircond} " .
|
||||
"LIMIT {$offset}, {$limit}";
|
||||
$res2 = wfQuery( $sql, $fname );
|
||||
$num = $num + wfNumRows($res2);
|
||||
|
|
|
|||
|
|
@ -43,6 +43,21 @@ function wfSpecialPreferences()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/* private */ function validateCheckbox( $cb )
|
||||
{
|
||||
if ( $cb )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* private */ function savePreferences()
|
||||
{
|
||||
global $wgUser, $wgLang, $wgDeferredUpdateList;
|
||||
|
|
@ -50,6 +65,7 @@ function wfSpecialPreferences()
|
|||
global $wpSkin, $wpMath, $wpEmail, $wpEmailFlag, $wpNick, $wpSearch, $wpRecent;
|
||||
global $wpSearchLines, $wpSearchChars, $wpStubs;
|
||||
global $wpRows, $wpCols, $wpHourDiff, $HTTP_POST_VARS;
|
||||
global $wpNs0, $wpNs1, $wpNs2, $wpNs3, $wpNs4, $wpNs5, $wpNs6, $wpNs7;
|
||||
|
||||
if ( "" != $wpNewpass ) {
|
||||
if ( $wpNewpass != $wpRetype ) {
|
||||
|
|
@ -79,8 +95,17 @@ function wfSpecialPreferences()
|
|||
$wgUser->setOption( "stubthreshold", validateIntOrNull( $wpStubs ) );
|
||||
$wgUser->setOption( "timecorrection", validateIntOrNull( $wpHourDiff, -12, 14 ) );
|
||||
|
||||
if ( $wpEmailFlag ) { $wgUser->setOption( "disablemail", 1 ); }
|
||||
else { $wgUser->setOption( "disablemail", 0 ); }
|
||||
$wgUser->setOption( "searchNs0", validateCheckbox( $wpNs0 ) );
|
||||
$wgUser->setOption( "searchNs1", validateCheckbox( $wpNs1 ) );
|
||||
$wgUser->setOption( "searchNs2", validateCheckbox( $wpNs2 ) );
|
||||
$wgUser->setOption( "searchNs3", validateCheckbox( $wpNs3 ) );
|
||||
$wgUser->setOption( "searchNs4", validateCheckbox( $wpNs4 ) );
|
||||
$wgUser->setOption( "searchNs5", validateCheckbox( $wpNs5 ) );
|
||||
$wgUser->setOption( "searchNs6", validateCheckbox( $wpNs6 ) );
|
||||
$wgUser->setOption( "searchNs7", validateCheckbox( $wpNs7 ) );
|
||||
|
||||
|
||||
$wgUser->setOption( "disablemail", validateCheckbox( $wpEmailFlag ) );
|
||||
|
||||
$togs = $wgLang->getUserToggles();
|
||||
foreach ( $togs as $tname => $ttext ) {
|
||||
|
|
@ -128,6 +153,45 @@ function wfSpecialPreferences()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* private */ function namespacesCheckboxes()
|
||||
{
|
||||
global $wgLang, $wgUser;
|
||||
$nscb = array();
|
||||
|
||||
|
||||
for ($i = 0; ($i < 8); $i++)
|
||||
{
|
||||
$nscb[$i] = $wgUser->getOption( "searchNs".$i );
|
||||
}
|
||||
|
||||
# Determine namespace checkboxes
|
||||
|
||||
$ns = $wgLang->getNamespaces();
|
||||
array_shift( $ns ); /* Skip "Special" */
|
||||
|
||||
$r1 = "";
|
||||
for ( $i = 0; $i < count( $ns ); ++$i ) {
|
||||
$checked = "";
|
||||
if ( $nscb[$i] == 1 ) {
|
||||
$checked = " checked";
|
||||
}
|
||||
$name = str_replace( "_", " ", $ns[$i] );
|
||||
if ( "" == $name ) { $name = "(Main)"; }
|
||||
|
||||
if ( 0 != $i ) { $r1 .= " "; }
|
||||
$r1 .= "<input type=checkbox value=\"1\" name=\"" .
|
||||
"wpNs{$i}\"{$checked}>{$name}\n";
|
||||
}
|
||||
|
||||
return $r1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* private */ function mainPrefsForm( $err )
|
||||
{
|
||||
global $wgUser, $wgOut, $wgLang;
|
||||
|
|
@ -181,6 +245,7 @@ function wfSpecialPreferences()
|
|||
$scl = wfMsg( "contextlines" );
|
||||
$scc = wfMsg( "contextchars" );
|
||||
$rcc = wfMsg( "recentchangescount" );
|
||||
$dsn = wfMsg( "defaultns" );
|
||||
|
||||
$wgOut->addHTML( "<form id=\"preferences\" name=\"preferences\" action=\"$action\"
|
||||
method=\"post\"><table border=\"1\"><tr><td valign=top nowrap><b>$qb:</b><br>\n" );
|
||||
|
|
@ -262,6 +327,8 @@ value=\"$i\"$checked> {$mathopts[$i]}</label><br>\n" );
|
|||
if ( $wpEmailFlag ) { $emfc = "checked"; }
|
||||
else { $emfc = ""; }
|
||||
|
||||
$ps = namespacesCheckboxes();
|
||||
|
||||
$wgOut->addHTML( "<td valign=top nowrap>
|
||||
<label>$yem: <input type=text name=\"wpEmail\" value=\"{$wpEmail}\" size=20></label><br>
|
||||
<label><input type=checkbox $emfc value=\"1\" name=\"wpEmailFlag\"> $emf</label><br>
|
||||
|
|
@ -273,6 +340,11 @@ value=\"$i\"$checked> {$mathopts[$i]}</label><br>\n" );
|
|||
<label>$scl: <input type=text name=\"wpSearchLines\" value=\"$wpSearchLines\" size=6></label><br>
|
||||
<label>$scc: <input type=text name=\"wpSearchChars\" value=\"$wpSearchChars\" size=6></label></td>
|
||||
</tr><tr>
|
||||
<td colspan=2>
|
||||
<b>$dsn</b><br>
|
||||
$ps
|
||||
</td>
|
||||
</tr><tr>
|
||||
<td align=center><input type=submit name=\"wpSaveprefs\" value=\"$svp\"></td>
|
||||
<td align=center><input type=submit name=\"wpReset\" value=\"$rsp\"></td>
|
||||
</tr></table>* {$tzt} </form>\n" );
|
||||
|
|
|
|||
|
|
@ -69,6 +69,7 @@ class User {
|
|||
function loadDefaults()
|
||||
{
|
||||
global $wgLang ;
|
||||
global $wgNamespacesToBeSearchedDefault;
|
||||
|
||||
$this->mId = $this->mNewtalk = 0;
|
||||
$this->mName = getenv( "REMOTE_ADDR" );
|
||||
|
|
@ -79,6 +80,9 @@ class User {
|
|||
foreach ( $defOpt as $oname => $val ) {
|
||||
$this->mOptions[$oname] = $val;
|
||||
}
|
||||
foreach ($wgNamespacesToBeSearchedDefault as $nsnum => $val) {
|
||||
$this->mOptions["searchNs".$nsnum] = $val;
|
||||
}
|
||||
unset( $this->mSkin );
|
||||
$this->mDataLoaded = false;
|
||||
$this->mBlockedby = -1; # Unset
|
||||
|
|
|
|||
|
|
@ -634,6 +634,7 @@ from server time (UTC).",
|
|||
"servertime" => "Server time is now",
|
||||
"guesstimezone" => "Fill in from browser",
|
||||
"emailflag" => "Disable e-mail from other users",
|
||||
"defaultns" => "Search in these namespaces by default:",
|
||||
|
||||
# Recent changes
|
||||
#
|
||||
|
|
|
|||
|
|
@ -568,6 +568,7 @@ Ihre interne ID-Nummer ist $2.",
|
|||
"servertime" => "Aktuelle Zeit auf dem Server",
|
||||
"guesstimezone" => "Einfügen aus dem Browser",
|
||||
"emailflag" => "Keine E-Mail von anderen Benutzern erhalten",
|
||||
"defaultns" => "In diesen Namensräumen soll standardmäßig gesucht werden:",
|
||||
|
||||
# Recent changes
|
||||
#
|
||||
|
|
|
|||
Loading…
Reference in a new issue