MediaWiki Search Plugin

Moderator: Sisko1990

Forum rules
Forumregeln
User avatar
MichaZ
Joomla! Fledgling
Joomla! Fledgling
Posts: 4
Joined: Thu May 26, 2011 8:33 am

MediaWiki Search Plugin

Postby MichaZ » Thu May 26, 2011 8:40 am

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

RedEye
Joomla! Ace
Joomla! Ace
Posts: 1441
Joined: Sat Jan 21, 2006 8:42 pm

Re: MediaWiki Search Plugin

Postby RedEye » Mon May 30, 2011 9:05 am

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.

User avatar
MichaZ
Joomla! Fledgling
Joomla! Fledgling
Posts: 4
Joined: Thu May 26, 2011 8:33 am

Re: MediaWiki Search Plugin

Postby MichaZ » Mon May 30, 2011 9:19 am

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.

RedEye
Joomla! Ace
Joomla! Ace
Posts: 1441
Joined: Sat Jan 21, 2006 8:42 pm

Re: MediaWiki Search Plugin

Postby RedEye » Mon May 30, 2011 9:26 am

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

RedEye
Joomla! Ace
Joomla! Ace
Posts: 1441
Joined: Sat Jan 21, 2006 8:42 pm

Re: MediaWiki Search Plugin

Postby RedEye » Mon May 30, 2011 9:53 am

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

User avatar
MichaZ
Joomla! Fledgling
Joomla! Fledgling
Posts: 4
Joined: Thu May 26, 2011 8:33 am

Re: MediaWiki Search Plugin

Postby MichaZ » Tue May 31, 2011 6:34 am

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;
}

RedEye
Joomla! Ace
Joomla! Ace
Posts: 1441
Joined: Sat Jan 21, 2006 8:42 pm

Re: MediaWiki Search Plugin

Postby RedEye » Wed Jun 01, 2011 7:43 am

Mein Ansatz hat dir ja nicht gefallen :pop

User avatar
MichaZ
Joomla! Fledgling
Joomla! Fledgling
Posts: 4
Joined: Thu May 26, 2011 8:33 am

Re: MediaWiki Search Plugin

Postby MichaZ » Wed Jun 01, 2011 8:17 am

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.

RedEye
Joomla! Ace
Joomla! Ace
Posts: 1441
Joined: Sat Jan 21, 2006 8:42 pm

Re: MediaWiki Search Plugin

Postby RedEye » Wed Jun 01, 2011 2:39 pm

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.


Return to “Komponenten, Module, Plugins”

Who is online

Users browsing this forum: No registered users and 0 guests