Changeset 626


Ignore:
Timestamp:
Dec 4, 2013, 9:50:16 PM (11 years ago)
Author:
chronos
Message:
  • Modified: Search page generalized as dynamic configurable list. Other modules can register their search ability.
  • Modified: If sarch is invoked on some module then filter is added to table. Filter have to be disabled to view all items again.
  • Added: Shoutbox can be searched.
Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Modules/AoWoW/AoWoW.php

    r548 r626  
    2323        'Icon' => '',
    2424    ));
     25    if(array_key_exists('Search', $this->System->ModuleManager->Modules))
     26      $this->System->ModuleManager->Modules['Search']->RegisterSearch('aowow',
     27      T('AoWoW'), array(), '', $this->System->Link('/aowow/?search='));
    2528  }
    2629}
  • trunk/Modules/Dictionary/Dictionary.php

    r622 r626  
    2525        'Icon' => '',
    2626    ), 1);
     27    if(array_key_exists('Search', $this->System->ModuleManager->Modules))
     28      $this->System->ModuleManager->Modules['Search']->RegisterSearch('dictionary',
     29      T('Dictionary'), array('Text', 'Description'),
     30     '(SELECT * FROM `Dictionary` WHERE `Language` = '.$this->System->Config['OriginalLanguage'].') AS `T`', $this->System->Link('/dictionary/?search='));
    2731  }
    2832}
  • trunk/Modules/Search/Search.php

    r595 r626  
    1414                $this->Description = 'Allow test search in other modules content.';
    1515                $this->Dependencies = array();
     16                $this->SearchItems = array();
    1617        }
    1718
     
    2122        }
    2223       
    23         function RegisterContent($Name, $Columns, $Query)
     24        function RegisterSearch($Name, $Title, $Columns, $Query, $Link)
    2425        {
    25           $this->SearchItems[$Name] = array('Columns' => $Columns, 'Query' => $Query); 
     26                // Query can be table name or subselect query
     27          $this->SearchItems[$Name] = array('Name' => $Title, 'Columns' => $Columns,
     28      'Query' => $Query, 'Link' => $Link);     
    2629        }
    2730
    28         function UnregisterContent($Name)
     31        function UnregisterSearch($Name)
    2932        {
    3033          unset($this->SearchItems[$Name]);     
     
    3639        function Show()
    3740        {
    38                 global $TranslationTree;
    39        
    4041                if(array_key_exists('text', $_GET)) $Search = $_GET['text'];
    4142                else if(array_key_exists('text', $_POST)) $Search = $_POST['text'];
    4243                else $Search = '';
    4344                $SearchHTML = htmlentities($Search);
    44        
    45                 $Output = '<table class="BaseTable"><tr><th>Skupina</th><th>Výsledků</th></tr>';
    46                 foreach($TranslationTree as $Group)
     45               
     46                $Output = '<table class="BaseTable"><tr><th>'.T('Section').'</th><th>'.T('Found count').'</th></tr>';
     47                foreach($this->System->ModuleManager->Modules['Search']->SearchItems as $SearchItem)
    4748                {
    48                         $Table = $Group['TablePrefix'];
    49        
    50                         $sql = 'SELECT COUNT(*) FROM `'.$Table.'` WHERE '.
    51                                         ' (`ID` LIKE "%'.$Search.'%")'.
    52                                         ' OR (`Entry` LIKE "%'.$Search.'%")';
    53                         foreach($Group['Items'] as $Item)
     49                        $ColumnQuery = array();
     50                        foreach($SearchItem['Columns'] as $Column)
    5451                        {
    55                                 if($Item['Column'] != '') $sql .= ' OR (`'.$Item['Column'].'` LIKE "%'.$Search.'%")';
    56                         }
    57                         $DbResult = $this->Database->query($sql);
    58                         $Line = $DbResult->fetch_row();
    59                         if ($Line[0] <> '0')
    60                           $Output .= '<tr><td><a href="'.$this->System->Link('/TranslationList.php?group='.
    61                           $Group['Id'].'&amp;user=0&amp;state=0&amp;text='.$SearchHTML.'&amp;entry=').'">'.
    62                           $Group['Name'].'</a></td><td>'.$Line[0].'</td></tr>';
     52                          $ColumnQuery[] = '(`'.$Column.'` LIKE "%'.$Search.'%")';
     53                  }
     54                  $ColumnQuery = implode(' OR ', $ColumnQuery);
     55                  if($SearchItem['Query'] != '')
     56                  {
     57                    $DbResult = $this->Database->query('SELECT COUNT(*) FROM '.$SearchItem['Query'].' WHERE '.$ColumnQuery);
     58                  $Line = $DbResult->fetch_row();
     59                  $Line = $Line[0];
     60                  } else $Line = '';
     61                $Output .= '<tr><td><a href="'.$SearchItem['Link'].$SearchHTML.'">'.$SearchItem['Name'].'</a></td><td>'.$Line.'</td></tr>';
    6362                }
    64        
    65                 $DbResult = $this->Database->query('SELECT count(*) FROM `User` WHERE `Name` LIKE "%'.$Search.'%"');
    66                 $Line = $DbResult->fetch_row();
    67                 $Output .= '<tr><td><a href="'.$this->System->Link('/userlist.php?search='.$SearchHTML).'">Uživatelé</a></td><td>'.$Line[0].'</td></tr>';
    68        
    69                 $DbResult = $this->Database->query('SELECT count(*) FROM `Team` WHERE `Name` LIKE "%'.$Search.'%" OR `Description` LIKE "%'.$Search.'%"');
    70                 $Line = $DbResult->fetch_row();
    71                 $Output .= '<tr><td><a href="'.$this->System->Link('/team/?search='.$SearchHTML).'">Týmy</a></td><td>'.$Line[0].'</td></tr>';
    72        
    73                 $DbResult = $this->Database->query('SELECT count(*) FROM `CzWoWPackageVersion` WHERE `Text` LIKE "%'.$Search.'%"');
    74                 $Line = $DbResult->fetch_row();
    75                 $Output .= '<tr><td><a href="'.$this->System->Link('/download.php?addon').'">Čeština pro klienta</a></td><td>'.$Line[0].'</td></tr>';
    76                 $Output .= '<tr><td><a href="'.$this->System->Link('/aowow/?search='.$SearchHTML).'">Vyhledávací databáze AoWoW</a></td></tr>';
    77        
    78                 $DbResult = $this->Database->query('SELECT count(*) FROM `Dictionary` WHERE '.
    79                         '(`Text` LIKE "%'.$Search.'%" OR `Description` LIKE "%'.$Search.'%") AND `Language` = '.$this->System->Config['OriginalLanguage']);
    80                 $Line = $DbResult->fetch_row();
    81                 $Output .= '<tr><td><a href="'.$this->System->Link('/dictionary/?search='.$SearchHTML).
    82       '">Slovníček</a></td><td>'.$Line[0].'</td></tr>';
    83        
    84                 $Output .= '</table>';
     63 
     64        $Output .= '</table>';
    8565                return($Output);
    8666        }
  • trunk/Modules/ShoutBox/ShoutBox.php

    r622 r626  
    2020          'Title' => 'Kecátko', 'Channel' => 'shoutbox', 'Callback' => array('PageShoutBox', 'ShowRSS'),
    2121          'Permission' => LICENCE_ANONYMOUS));           
     22    if(array_key_exists('Search', $this->System->ModuleManager->Modules))
     23      $this->System->ModuleManager->Modules['Search']->RegisterSearch('shoutbox',
     24      T('Shoutbox'), array('UserName', 'Text'), '`ShoutBox`', $this->System->Link('/shoutbox/?search='));
    2225  }
    2326 
    2427  function ShowBox()
    2528  {
    26         $Output = '<strong><a href="'.$this->System->Link('/shoutbox/').'">'.T('Chatbox').':</a></strong>';
     29        $Output = '<strong><a href="'.$this->System->Link('/shoutbox/').'">'.T('Shoutbox').':</a></strong>';
    2730         
    2831        if($this->System->User->Licence(LICENCE_USER))
     
    5255        function ShowList()
    5356        {
    54         $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `ShoutBox`');
     57                $Output = '';
     58                if(array_key_exists('search', $_GET)) $_SESSION['search'] = $_GET['search'];
     59                else if(!array_key_exists('search', $_SESSION)) $_SESSION['search'] = '';
     60                if(array_key_exists('search', $_GET) and ($_GET['search'] == '')) $_SESSION['search'] = '';
     61                if($_SESSION['search'] != '')
     62                {
     63                        $SearchQuery = ' AND (`Text` LIKE "%'.$_SESSION['search'].'%")';
     64                        $Output .= '<div><a href="?search=">'.sprintf(T('Disable filter "%s"'), $_SESSION['search']).'</a></div>';
     65                } else $SearchQuery = '';                       
     66
     67        $DbResult = $this->System->Database->query('SELECT COUNT(*) FROM `ShoutBox` WHERE 1'.$SearchQuery);
    5568                $DbRow = $DbResult->fetch_row();
    56                 $PageList = GetPageList($DbRow[0]);
    57                
    58                 $Output = '<h3>Kecátko</h3>'.$PageList['Output'];
     69                $PageList = GetPageList($DbRow[0]);     
     70
     71                $Output .= '<h3>'.T('Shoutbox').'</h3>'.$PageList['Output'];
    5972                if($this->System->User->Licence(LICENCE_USER))
    6073                        $Output .= ' <a href="'.$this->System->Link('/shoutbox/?a=add').'">'.T('Add').'</a>';
    6174                $Output .= '<div class="shoutbox">';
    62                 $DbResult = $this->System->Database->query('SELECT * FROM `ShoutBox` ORDER BY `ID` DESC '.$PageList['SQLLimit']);
     75                $DbResult = $this->System->Database->query('SELECT * FROM `ShoutBox`  WHERE 1'.$SearchQuery.' ORDER BY `ID` DESC '.$PageList['SQLLimit']);
    6376                while($Line = $DbResult->fetch_assoc())
    6477                        $Output .= '<div><strong>'.$Line['UserName'].'</strong>: '.MakeActiveLinks($Line['Text']).'</div>';
  • trunk/Modules/Team/Team.php

    r622 r626  
    2020      'Title' => T('Teams'),
    2121      'Hint' => T('List of translating teams'),
    22       'Link' => $this->System->Link('/team/?search='),
     22      'Link' => $this->System->Link('/team/'),
    2323      'Permission' => LICENCE_ANONYMOUS,
    2424      'Icon' => '',
    2525    ), 1);
     26    if(array_key_exists('Search', $this->System->ModuleManager->Modules))
     27      $this->System->ModuleManager->Modules['Search']->RegisterSearch('team',
     28      T('Teams'), array('Name'), '`Team`', $this->System->Link('/team/?search='));
    2629  }
    2730}
     
    3639                $Output .= 'Týmy jsou seskupení překladatelů, kteří se hlásí k něčemu společnému jako např. WoW serveru, způsobu překladu, ke stejnému hernímu spolku, aj. Být členem týmu samo o sobě nemá žádný zásadní důsledek a spíše to může pomoci se lépe orientovat mezi překladateli někomu, kdo sestavuje export.<br/>';
    3740
    38     if($this->System->User->Licence(LICENCE_USER))
     41    if(array_key_exists('search', $_GET)) $_SESSION['search'] = $_GET['search'];
     42                else if(!array_key_exists('search', $_SESSION)) $_SESSION['search'] = '';
     43                if (array_key_exists('search', $_GET) and ($_GET['search'] == '')) $_SESSION['search'] = '';
     44       
     45          if($this->System->User->Licence(LICENCE_USER))
    3946                  $Output .= '<br /><div style="text-align: center;"><a href="?action=create">'.T('Create translating team').'</a></div><br/>';
     47                if($_SESSION['search'] != '')
     48                {
     49                        $SearchQuery = ' AND ((`Name` LIKE "%'.$_SESSION['search'].'%") OR (`Description` LIKE "%'.$_SESSION['search'].'%"))';
     50                        $Output .= '<div><a href="?search=">'.sprintf(T('Disable filter "%s"'), $_SESSION['search']).'</a></div>';
     51                } else $SearchQuery = '';               
    4052               
    41           $DbResult = $this->Database->query('SELECT COUNT(*) FROM `Team`');
     53          $DbResult = $this->Database->query('SELECT COUNT(*) FROM `Team` WHERE 1'.$SearchQuery);
    4254                $DbRow = $DbResult->fetch_row();
    4355                $PageList = GetPageList($DbRow[0]);
     
    5668       
    5769                $Order = GetOrderTableHeader($TableColumns, 'NumberUser', 1);
    58                 $Output .= $Order['Output'];
    59        
    60                 if(array_key_exists('search', $_GET)) $_SESSION['search'] = ' WHERE `Name` LIKE "%'.$_GET['search'].'%" OR `Description` LIKE "%'.$_GET['search'].'%"';
    61                 else if(!array_key_exists('search', $_SESSION)) $_SESSION['search'] = '';
    62                 if (array_key_exists('search', $_GET) and ($_GET['search'] == '')) $_SESSION['search'] = '';
     70                $Output .= $Order['Output'];   
    6371       
    6472                $DbResult = $this->Database->query('SELECT *, (SELECT COUNT(*) FROM `User` WHERE `User`.`Team` = `Team`.`Id`) AS `NumberUser`, '.
    6573                        '(SELECT `Name` FROM `User` WHERE `User`.`ID`=`Team`.`Leader`) AS `LeaderName` '.
    66                         'FROM `Team` '.$_SESSION['search'].$Order['SQL'].$PageList['SQLLimit']);
     74                        'FROM `Team` WHERE 1'.$SearchQuery.$Order['SQL'].$PageList['SQLLimit']);
    6775                while($Team = $DbResult->fetch_assoc())
    6876                {
  • trunk/Modules/Translation/Translation.php

    r622 r626  
    2222  function Start()
    2323  {
     24        global $TranslationTree;
     25       
    2426                $this->System->RegisterPage('comparison.php', 'PageTranslationComparison');
    2527        $this->System->RegisterPage('form.php', 'PageTranslationForm');
     
    3537        'Permission' => LICENCE_ANONYMOUS,
    3638        'Icon' => '',
    37     ), 1);   
     39    ), 1);   
     40    if(array_key_exists('Search', $this->System->ModuleManager->Modules))
     41    {
     42                  foreach($TranslationTree as $Group)
     43                  {
     44                          $Table = $Group['TablePrefix'];
     45       
     46                                $Columns = array('ID', 'Entry');
     47                          foreach($Group['Items'] as $Item)
     48                          {
     49                                if($Item['Column'] != '') $Columns[] = $Item['Column'];
     50                          }
     51
     52        $this->System->ModuleManager->Modules['Search']->RegisterSearch('group'.$Group['Id'],
     53        sprintf(T('Translation group "%s"'), $Group['Name']), $Columns, '`'.$Table.'`', $this->System->Link('/TranslationList.php?group='.
     54        $Group['Id'].'&amp;user=0&amp;state=0&amp;entry=&amp;text='));                 
     55                }
     56    }     
    3857  }
    3958 
  • trunk/Modules/User/User.php

    r622 r626  
    2929        'Title' => T('Translators'),
    3030        'Hint' => 'Seznam registrovaných uživatelů',
    31         'Link' => $this->System->Link('/userlist.php?action=nofilter'),
     31        'Link' => $this->System->Link('/userlist.php'),
    3232        'Permission' => LICENCE_ANONYMOUS,
    3333        'Icon' => '',
    3434    ), 0);
     35    if(array_key_exists('Search', $this->System->ModuleManager->Modules))
     36      $this->System->ModuleManager->Modules['Search']->RegisterSearch('user',
     37      T('Translators'), array('Name'), '`User`', $this->System->Link('/userlist.php?search='));
    3538        }
    3639       
  • trunk/Modules/User/UserList.php

    r577 r626  
    1010       
    1111                $Output = '';
    12                 if(array_key_exists('search', $_GET))
     12                if(array_key_exists('search', $_GET)) $_SESSION['search'] = $_GET['search'];
     13                else if(!array_key_exists('search', $_SESSION)) $_SESSION['search'] = '';
     14                if(array_key_exists('search', $_GET) and ($_GET['search'] == '')) $_SESSION['search'] = '';
     15                if($_SESSION['search'] != '')
    1316                {
    14                         $_SESSION['Where'] = ' WHERE `User`.`Name` LIKE "%'.$_GET['search'].'%"';
    15                 }
     17                        $SearchQuery = ' AND (`User`.`Name` LIKE "%'.$_SESSION['search'].'%")';
     18                        $Output .= '<div><a href="?search=">'.sprintf(T('Disable filter "%s"'), $_SESSION['search']).'</a></div>';
     19                } else $SearchQuery = '';                       
     20
     21    $TeamFilter = '';
    1622                if(array_key_exists('team', $_GET))
    1723                {
     
    2026                        {
    2127                                $Team = $DbResult->fetch_assoc();
    22                                 $Output .= '<h3>Seznam uživatelů v týmu '.$Team['Name'].'</h3>';
    23                                 $_SESSION['Where'] = ' WHERE `Team`='.$_GET['team'];
    24                                 if($_GET['team'] == '') $_SESSION['Where'] = '';
     28                                $Output .= '<h3>'.sprintf(T('Users in team %s'), $Team['Name']).'</h3>';
     29                                $TeamFilter = ' AND (`Team`='.$_GET['team'].')';
    2530                        } else {
    26                   $Output .= ShowMessage('Tým '.$_GET['team'].' nenalezen', MESSAGE_CRITICAL);
    27                   $_SESSION['Where'] = ' WHERE FALSE';
     31                  $Output .= ShowMessage('Tým '.$_GET['team'].' nenalezen', MESSAGE_CRITICAL);
    2832                        }
    2933                } else
    3034                {
    31                         $Output .= '<h3>Seznam uživatelů</h3>';
    32                         if(!array_key_exists('Where', $_SESSION)) $_SESSION['Where'] = '';
     35                        $Output .= '<h3>'.T('User list').'</h3>';
    3336                }
    3437       
    35                 if(array_key_exists('action', $_GET))
    36                 {
    37                         if($_GET['action'] == 'nofilter') $_SESSION['Where'] = '';
    38                 }
    39                 //if($_SESSION['Where'] <> '') $Output .= ' <a href="?action=nofilter">Zrušit filtr uživatelů</a><br />';
    40        
    41                 $DbResult = $this->Database->query('SELECT COUNT(*) FROM `User`'.$_SESSION['Where']);
     38                $DbResult = $this->Database->query('SELECT COUNT(*) FROM `User` WHERE 1'.$SearchQuery.$TeamFilter);
    4239                $DbRow = $DbResult->fetch_row();
    4340                $PageList = GetPageList($DbRow[0]);
     
    5653                );
    5754                $Order = GetOrderTableHeader($TableColumns, 'TranslatedCount', 1);
    58                 $Output .= $Order['Output'];
    59        
     55                $Output .= $Order['Output'];   
    6056       
    6157                $Query = 'SELECT `User`.`ID`, `User`.`Name`, `LastLogin`, `GM`, `XP`, `TranslatedCount`, `RegistrationTime` '.
    6258                                'FROM `User` '.
    6359                                'LEFT JOIN `UserTrace` ON `UserTrace`.`User` = `User`.`Id` '.
    64                                 $_SESSION['Where'].$Order['SQL'].$PageList['SQLLimit'];
     60                                'WHERE 1'.$SearchQuery.$TeamFilter.$Order['SQL'].$PageList['SQLLimit'];
    6561       
    6662                $DbResult = $this->Database->query($Query);
  • trunk/includes/Version.php

    r625 r626  
    66// and system will need database update.
    77
    8 $Revision = 625; // Subversion revision
     8$Revision = 626; // Subversion revision
    99$DatabaseRevision = 610; // Database structure revision
    1010$ReleaseTime = '2013-12-04';
  • trunk/locale/cs.php

    r622 r626  
    5858      'Used memory' => 'Použitá paměť',
    5959      'Add word' => 'Vložit slovo',
    60       'Chatbox' => 'Kecátko',
    6160      'System changes' => 'Změny systému',
    6261      'Date' => 'Datum',
     
    8786      'User actions' => 'Uživatelské akce',
    8887      'Create translating team' => 'Vytvořit překladatelský tým',
     88      'Section' => 'Výběr',
     89      'Found count' => 'Počet nalezených',
     90      'Shoutbox' => 'Kecátko',
     91      'Disable filter "%s"' => 'Vypnout filtr "%s"',
     92      'Users in team %s' => 'Uživatelé v týmu %s',
     93      'User list' => 'Seznam uživatelů',
     94      'AoWoW' => 'AoWoW',
     95      'Translation group "%s"' => 'Překladová skupina "%s"',
    8996    );
    9097  }
  • trunk/locale/en.php

    r622 r626  
    5858      'Used memory' => '',
    5959      'Add word' => '',
    60       'Chatbox' => '',
    6160      'System changes' => '',
    6261      'Date' => '',
     
    8786      'User actions' => '',
    8887      'Create translating team' => '',
     88      'Section' => '',
     89      'Found count' => '',
     90      'Shoutbox' => '',
     91      'Disable filter "%s"' => '',
     92      'Users in team %s' => '',
     93      'User list' => '',
     94      'AoWoW' => '',
     95      'Translation group "%s"' => '',
    8996    );
    9097  }
Note: See TracChangeset for help on using the changeset viewer.