1
0

Short_Search_Fix Version 1 - first commit to github.

This commit is contained in:
shadlaws 2012-06-02 14:21:19 +02:00
parent 80db5d36f9
commit 546d9fa018
6 changed files with 224 additions and 0 deletions

View File

@ -0,0 +1,63 @@
<?php defined("SYSPATH") or die("No direct script access.");
/**
* Gallery - a web based photo album viewer and editor
* Copyright (C) 2000-2011 Bharat Mediratta
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class Admin_Short_Search_Fix_Controller extends Admin_Controller {
public function index() {
$view = new Admin_View("admin.html");
$view->page_title = t("Short search fix settings");
$view->content = new View("admin_short_search_fix.html");
$view->content->form = $this->_get_admin_form();
print $view;
}
public function save() {
access::verify_csrf();
$form = $this->_get_admin_form();
$form->validate();
module::set_var("short_search_fix", "search_prefix",
$form->short_search_fix_settings->search_prefix->value);
message::success(t("Short search fix settings updated"));
if ($form->short_search_fix_settings->mark_rebuild_search_records->value) {
$db = Database::instance();
$db->query("UPDATE {search_records} SET dirty=1;");
}
if ($form->short_search_fix_settings->mark_uptodate_search_records->value) {
$db = Database::instance();
$db->query("UPDATE {search_records} SET dirty=0;");
}
url::redirect("admin/short_search_fix");
}
private function _get_admin_form() {
$form = new Forge("admin/short_search_fix/save", "", "post",
array("id" => "g-short-search-fix-admin-form"));
$short_search_fix_settings = $form->group("short_search_fix_settings")->label(t("Prefix and search record rebuild"));
$short_search_fix_settings->input("search_prefix")
->label(t("Enter the prefix to be added to the start of every search word (Default: 1Z)"))
->value(module::get_var("short_search_fix", "search_prefix"));
$short_search_fix_settings->checkbox("mark_rebuild_search_records")
->label(t("Mark all search records for rebuild. This is needed when the prefix is changed. Afterward, go to Maintenace | Update search records."))
->checked(false);
$short_search_fix_settings->checkbox("mark_uptodate_search_records")
->label(t("Mark all search records as up-to-date. This is a pseudo-undo of the above."))
->checked(false);
$short_search_fix_settings->submit("save")->value(t("Save"));
return $form;
}
}

View File

@ -0,0 +1,58 @@
<?php defined("SYSPATH") or die("No direct script access.");
/**
* Gallery - a web based photo album viewer and editor
* Copyright (C) 2000-2012 Bharat Mediratta
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class search extends search_Core {
/**
* Add more terms to the query by wildcarding the stem value of the first
* few terms in the query.
*/
static function add_query_terms($q) {
$MAX_TERMS = 5;
// strip leading, trailing, and extra whitespaces
$terms = preg_replace('/^\s+/', '', $q);
$terms = preg_replace('/\s+$/', '', $terms);
$terms = preg_replace('/\s\s+/', ' ', $terms);
$terms = explode(" ", $terms, $MAX_TERMS);
//$terms = explode(" ", $q, $MAX_TERMS); // commented out from original function
for ($i = 0; $i < min(count($terms), $MAX_TERMS - 1); $i++) {
// Don't wildcard quoted or already wildcarded terms
if ((substr($terms[$i], 0, 1) != '"') && (substr($terms[$i], -1, 1) != "*")) {
$terms[] = rtrim($terms[$i], "s") . "*";
}
}
//return implode(" ", $terms); // commented out from original function
/**
* Add the search prefix to the start of every word.
*/
$prefix = module::get_var("short_search_fix","search_prefix");
$terms = implode(" ", $terms);
$terms = preg_replace('/^\s+/', '', $terms); // the implode seems to add this back in
// add the prefixes
if (preg_match('/\w/',$terms) > 0) {
$terms = ' ' . $terms;
$terms = str_replace(' ', ' '.$prefix, $terms);
$terms = str_replace(' '.$prefix.'"', ' '.'"'.$prefix, $terms);
$terms = substr($terms,1);
}
return $terms;
}
}

View File

@ -0,0 +1,45 @@
<?php defined("SYSPATH") or die("No direct script access.");
/**
* Gallery - a web based photo album viewer and editor
* Copyright (C) 2000-2011 Bharat Mediratta
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class short_search_fix_event_Core {
static function admin_menu($menu, $theme) {
$menu->get("settings_menu")
->append(Menu::factory("link")
->id("short_search_fix")
->label(t("Short search fix"))
->url(url::site("admin/short_search_fix")));
}
// This is the function that changes what's written to the search_records database
static function item_index_data($item, $data) {
$prefix = module::get_var("short_search_fix","search_prefix");
foreach ($data as &$terms) {
// strip leading, trailing, and extra whitespaces
$terms = preg_replace('/^\s+/', '', $terms);
$terms = preg_replace('/\s+$/', '', $terms);
$terms = preg_replace('/\s\s+/', ' ', $terms);
// add the prefixes
if (preg_match('/\w/',$terms) > 0) {
$terms = $prefix . str_replace(' ', ' '.$prefix, $terms);
}
}
}
}

View File

@ -0,0 +1,41 @@
<?php defined("SYSPATH") or die("No direct script access.");
/**
* Gallery - a web based photo album viewer and editor
* Copyright (C) 2000-2011 Bharat Mediratta
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class short_search_fix_installer {
static function install() {
$db = Database::instance();
module::set_var("short_search_fix", "search_prefix", "1Z");
module::set_version("short_search_fix", 1);
}
static function activate() {
$db = Database::instance();
$db->query("UPDATE {search_records} SET dirty=1;");
}
static function deactivate() {
$db = Database::instance();
$db->query("UPDATE {search_records} SET dirty=1;");
}
static function uninstall() {
$db = Database::instance();
module::clear_var("short_search_fix", "search_prefix");
}
}

View File

@ -0,0 +1,7 @@
name = "Short Search Fix"
description = "Allows 2-3 letter searches to be performed without requiring SQL system variable modification (useful for shared hosting)."
version = 1
author_name = "Shad Laws"
author_url = ""
info_url = "http://codex.gallery2.org/Gallery3:Modules:short_search_fix"
discuss_url = "http://gallery.menalto.com/node/105935"

View File

@ -0,0 +1,10 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
<div class="g-block">
<h1> <?= t("Short search fix settings") ?> </h1>
<p>
<?= t("This module works by padding every search term with a prefix. Since MySQL system variables typically set the minimum search term to 4 characters, the default 2-character prefix makes all 2-letter searches valid.") ?>
</p>
<div class="g-block-content">
<?= $form ?>
</div>
</div>