Page 1 of 1

MediaWiki Search Plugin

Posted: Thu May 26, 2011 8:40 am
by MichaZ
Hallo zusammen,

bin bin gerade dabei Joomla als Intranet einzurichten. Wir haben bereits Mediawiki im Einsatz und ich möchte gerne, dass bei der Suche immer beide durchsucht werden. Hierzu gibt es das obige Plugin (http://www.dosideas.com/mediawiki-searc ... oomla.html). Dies ist jedoch leider nur für Joomla 1.5. Kann mir jemand helfen und sagen wie und ob ich es in Jommla 1.6 nutzen kann?

Besten Dank schon mal im Voraus

Micha

Re: MediaWiki Search Plugin

Posted: Mon May 30, 2011 9:05 am
by RedEye
MichaZ wrote:Kann mir jemand helfen und sagen wie und ob ich es in Jommla 1.6 nutzen kann?
Musste etwas Hand anlegen, .xml für 1.6 umschreiben und eventuell noch paar kleine Codeänderungen, danach kannste es auch in 1.6 verwenden.

Re: MediaWiki Search Plugin

Posted: Mon May 30, 2011 9:19 am
by MichaZ
Hallo Redeye,

danke schön, hab auch schon versucht das hinzubekommen, aber leider bisher ohne erfolg. Hast Du vielleicht einen Tipp wo genau der ode angepasst werden müsste? :-))

Danke schon mal.

Re: MediaWiki Search Plugin

Posted: Mon May 30, 2011 9:26 am
by RedEye
Ohne das Plugin betrachtet zu haben, ne sry^^
Frage vorweg: .xml Datei vom plugin hast du angepasst und install unter 1.6 geht? oder hängt es auch hier noch

Re: MediaWiki Search Plugin

Posted: Mon May 30, 2011 9:53 am
by RedEye
Ich bins jetzt mal überflogen, hab den Code etwas geändert, alles was vor class WikiTextToHTML kommt müsstest du ändern.
Wie gesagt ich bins überflogen gerade, also keine Gewährleistung :D .xml musste selber noch anpassen, sollte kein Prob sein, dafür gibbet genug Beispiele, wenns net klappt meld dich wieder, ich bin aber jetzt erst mal unterwegs

Code: Select all

// no direct access
defined('_JEXEC') or die;

jimport('joomla.plugin.plugin');

class plgSearchMediaWiki extends JPlugin
{
	public function onContentSearchAreas() {
		static $areas = array(
			'mediawiki' => 'Wiki'
		);
		return $areas;
	}

	function onContentSearch( $text, $phrase='', $ordering='', $areas=null )
	{
		$db = JFactory::getDBO();
		$user = JFactory::getUser();

		if (is_array( $areas )) {
			if (!array_intersect($areas, array_keys($this->onContentSearchAreas()))) {
				return array();
			}
		}

		// load plugin params info
	 	$limit = $this->params->def('search_limit', 50);
	 	$searchResultsTitle = $this->params->get('search_results_title', 'Wiki'); 
		$mediawikiDatabase = $this->params->get('mediawiki_database', 'dosideas_mwiki');
		$mediawikiTablePrefix = $this->params->get('mediawiki_table_prefix', '');
		$mediawikiUrl = $this->params->get('mediawiki_url', '/wiki/index.php?title=');
	 	
		$text = trim( $text );
		if ($text == '') {
			return array();
		}

		switch ($ordering) {
			case 'newest':
				$order = 'page.page_touched DESC';
				break;
			case 'oldest':
				$order = 'page.page_touched ASC';
				break;
			default:
				$order = 'page.page_touched DESC';
				break;
		}

		$text = $db->getEscaped($text);
	
	    $searchterm = '';
		switch ($phrase) {
		    case 'any':
		    	$searchterm = $text;
		    	break;
		    case 'all':
		    default: 
			$words = explode(' ', $text);
			foreach ($words as $word) {
			    $searchterm .= '+'.$word.' ';	            
			}
		}
	
	    //This variables contains the names of the MediaWiki tables used in the SQL query
		$tablePage = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'page';
		$tableSearchindex = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'searchindex';
		$tableRevision = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'revision';
		$tableText = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'text';
	
	    //About searching on MediaWiki tables:  http://www.mediawiki.org/wiki/Manual:Searchindex_table
		$query  = 'SELECT "2" AS browsernav, page.page_title as titleurl, REPLACE(page.page_title, "_", " ") as title, SUBSTRING(text.old_text, 1, 240) as description'
		.' FROM '.$tablePage.' AS page, '.$tableSearchindex.' AS searchindex, '.$tableRevision.' AS revision, '.$tableText.' AS text'
		.' WHERE page.page_id = searchindex.si_page'
		.' AND page.page_latest = revision.rev_id'
		.' AND revision.rev_text_id = text.old_id'
		.' AND page.page_namespace IN (0)'
		.' AND page.page_is_redirect = 0' 
		.' AND (MATCH(searchindex.si_title) AGAINST("'.$searchterm.'" IN BOOLEAN MODE)'
		.'   OR MATCH(searchindex.si_text) AGAINST("'.$searchterm.'" IN BOOLEAN MODE)'
		.' ) ORDER BY '.$order
		;
		
		$db->setQuery( $query, 0, $limit );
		$rows = $db->loadObjectList();
		$count = count( $rows );

		for ( $i = 0; $i < $count; $i++ ) 
		{	
			$wikitext = $rows[$i]->description;
			$wikitext .= "...";
			$input = explode("\n", $wikitext);				
			$output = WikiTextToHTML::convertWikiTextToHTML($input);
		
			$htmltext = '';
			foreach($output as $line) {
				$htmltext .= $line;
			}		    

			$rows[$i]->href 	= $mediawikiUrl . $rows[$i]->titleurl;
			$rows[$i]->section 	= $searchResultsTitle;
			$rows[$i]->text 	= $htmltext;
		}

		return $rows;
	}
}
edit: typo in code

Re: MediaWiki Search Plugin

Posted: Tue May 31, 2011 6:34 am
by MichaZ
Hallo,

habe den Code noch etwas modifiziert. Beim suchen erhalten ich jetzt keine Fehler und das Pulgin schein auch geladen zu werden. Ich erhalte jedoch keine Suchergebnisse auch dem Wiki. Anbei mein Code...

Jemand ne Idee?

Code: Select all

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

$mainframe =& JFactory::getApplication();

$mainframe->registerEvent( 'onContentSearch', 'plgSearchMediaWiki' );
$mainframe->registerEvent( 'onContentSearchAreas', 'plgSearchMediaWikiAreas' );
	
function &plgSearchMediaWikiAreas() {
	static $areas = array(
		'mediawiki' => 'HoeraufWiki'
	);
	return $areas;
}

function plgSearchMediaWiki( $text, $phrase='', $ordering='', $areas=null ){
	//-------------------------------------------------------
	// Pre-processing
	//-------------------------------------------------------
	$mainframe	=& JFactory::getApplication();
	$db			=& JFactory::getDBO();
	$user		=& JFactory::getUser();
	$conf 		=& JFactory::getConfig();
	
	if (is_array( $areas )) {
		if (!array_intersect( $areas, array_keys( plgSearchMediaWikiAreas() ) )) {
			return array();
		}
	}
	
	$searchText = $text;	

	$text = trim( $text );
    if ($text == '') {
        return array();
    }


	// load plugin params info
	$plugin =& JPluginHelper::getPlugin('search', 'modules');
	$plg_params = new JRegistry;
	$plg_params->loadJSON($plugin->params);
    $limit = $plg_params->def('search_limit', 50);
    $searchResultsTitle = $plg_params->def('search_results_title', 'Wiki'); 
    $mediawikiDatabase = $plg_params->def('mediawiki_database', 'dosideas_mwiki');
    $mediawikiTablePrefix = $plg_params->def('mediawiki_table_prefix', '');
    $mediawikiUrl = $plg_params->def('mediawiki_url', '/wiki/index.php?title=');

    switch ($ordering) {
        case 'newest':
			$order = 'page.page_touched DESC';
			break;
        case 'oldest':
            $order = 'page.page_touched ASC';
            break;
        default:
            $order = 'page.page_touched DESC';
            break;
    }

    $text = $db->getEscaped($text);
   
    $searchterm = '';
    switch ($phrase) {
        case 'any':
             $searchterm = $text;
             break;
        case 'all':
        default: 
        $words = explode(' ', $text);
        foreach ($words as $word) {
            $searchterm .= '+'.$word.' ';               
        }
    }
   
    //This variables contains the names of the MediaWiki tables used in the SQL query
    $tablePage = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'page';
    $tableSearchindex = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'searchindex';
    $tableRevision = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'revision';
    $tableText = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'text';
   
    //About searching on MediaWiki tables:  http://www.mediawiki.org/wiki/Manual:Searchindex_table
    $query  = 'SELECT "2" AS browsernav, page.page_title as titleurl, REPLACE(page.page_title, "_", " ") as title, SUBSTRING(text.old_text, 1, 240) as description'
    .' FROM '.$tablePage.' AS page, '.$tableSearchindex.' AS searchindex, '.$tableRevision.' AS revision, '.$tableText.' AS text'
    .' WHERE page.page_id = searchindex.si_page'
    .' AND page.page_latest = revision.rev_id'
    .' AND revision.rev_text_id = text.old_id'
    .' AND page.page_namespace IN (0)'
    .' AND page.page_is_redirect = 0' 
    .' AND (MATCH(searchindex.si_title) AGAINST("'.$searchterm.'" IN BOOLEAN MODE)'
    .'   OR MATCH(searchindex.si_text) AGAINST("'.$searchterm.'" IN BOOLEAN MODE)'
    .' ) ORDER BY '.$order
    ;
      
    $db->setQuery( $query, 0, $limit );
    $rows = $db->loadObjectList();
    $count = count( $rows );

    for ( $i = 0; $i < $count; $i++ ) {   
        $wikitext = $rows[$i]->description;
        $wikitext .= "...";
        $input = explode("\n", $wikitext);            
        $output = WikiTextToHTML::convertWikiTextToHTML($input);
      
        $htmltext = '';
        foreach($output as $line) {
            $htmltext .= $line;
        }          

        $rows[$i]->href    = $mediawikiUrl . $rows[$i]->titleurl;
        $rows[$i]->section    = $searchResultsTitle;
        $rows[$i]->text    = $htmltext;
    }

    return $rows;
}

Re: MediaWiki Search Plugin

Posted: Wed Jun 01, 2011 7:43 am
by RedEye
Mein Ansatz hat dir ja nicht gefallen :pop

Re: MediaWiki Search Plugin

Posted: Wed Jun 01, 2011 8:17 am
by MichaZ
Hallo Redeye,

von nicht fallen kann keine Rede sein. Leider hat dieser ebenfalls nicht funktioniert. Ich habe in Deiner Zeile

$limit = $this->params->def('search_limit', 50);

ne Fehlermeldung erhalten. Deshalb mein Versuch die Sache noch mal anders anzugehen.

eine Fehlermeldung erhalten.

Re: MediaWiki Search Plugin

Posted: Wed Jun 01, 2011 2:39 pm
by RedEye
Wie sah der Fehler aus?
Wie geschrieben, ich bin nur drüber geflogen, find and replace, getestet hab ich nix.

$this->params->get('') sollte da keinen Fehler geben, im Grunde bräuchtest du die Params aber net, ist ja eh nur für dich, also kannste deine MediaWiki Eigenschaften auch direkt reinschreiben anstatt Params zu nehmen.
Auch wollte ich dir keinen komplett fertigen Code geben, dafür müsste ich Ihn ja testen, was bedeuten würde ich müsste mir auch MediaWiki installen...
Sollte nur nen Anhaltspunkt für dich sein wie es aussehen sollte.