Changeset 581


Ignore:
Timestamp:
Sep 12, 2013, 9:14:38 PM (11 years ago)
Author:
chronos
Message:
  • Modified: RSS channel management is now part of News module. In this module other modules can register their RSS channel which will be availble on all pages for subscription.
Location:
trunk
Files:
1 deleted
7 edited
1 moved

Legend:

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

    r578 r581  
    1313    $this->License = 'GNU/GPL';
    1414    $this->Description = 'Log various application events';
    15     $this->Dependencies = array('Error');
     15    $this->Dependencies = array('Error', 'News');
    1616   
    1717    $this->Excludes = array();
     
    2222        $this->System->RegisterPage('log.php', 'PageLog');
    2323        $this->System->ModuleManager->Modules['Error']->OnError[] = array($this, 'DoAddItem');
     24        $this->System->ModuleManager->Modules['News']->RegisterRSS(array('Title' => 'Záznamy',
     25          'Channel' => 'log', 'Callback' => array('PageLog', 'ShowRSS'), 'Permission' => LICENCE_ADMIN));
    2426  } 
    2527 
     
    111113                if(array_key_exists('a', $_POST)) $Action = $_POST['a'];
    112114                  else if(array_key_exists('a', $_GET)) $Action = $_GET['a'];
    113                   else $Action = '';
    114                 if($Action == 'rss') $Output = $this->ShowRSS();
     115                  else $Action = '';           
    115116                if($Action == 'delerrlog') $Output = $this->DeleteErrorLog();
    116117                else $Output = $this->ShowList();
  • trunk/Modules/News/News.php

    r578 r581  
    11<?php
     2
     3include_once(dirname(__FILE__).'/RSS.php');
    24
    35class ModuleNews extends AppModule
    46{
     7  var $RSSChannels;
     8 
    59  function __construct($System)
    610  {
     
    1721  {
    1822        $this->System->RegisterPage('news', 'PageNews');
    19         $this->System->RegisterRSS(array('Title' => 'Změny systému', 'Channel' => 'news'));
     23        $this->System->RegisterPage('rss', 'PageRSS');
     24        $this->RegisterRSS(array('Title' => 'Změny systému', 'Channel' => 'news',
     25          'Callback' => array('PageNews', 'ShowRSS'), 'Permission' => LICENCE_ANONYMOUS));
    2026  }
    2127 
     
    2430        $Output = '<strong>Změny systému:</strong><div class="NewsBox">';
    2531        $DbResult = $this->Database->query('SELECT `News`.`Time`, `User`.`Name`, `News`.`Text`,`News`.`Title`'.
    26                         ' FROM `News` JOIN `User` ON `User`.`ID` = `News`.`User` ORDER BY `Time` DESC LIMIT 10');
     32                ' FROM `News` JOIN `User` ON `User`.`ID` = `News`.`User` ORDER BY `Time` DESC LIMIT 10');
    2733        while($DbRow = $DbResult->fetch_assoc())
    2834                $Output .= '<div><strong>'.$DbRow['Title'].' ('.HumanDate($DbRow['Time']).')</strong> <br />'.$DbRow['Text'].' ('.$DbRow['Name'].')</div>';
    2935        $Output .= '<a href="'.$this->System->Link('/news/').'">Všechny zprávy</a>';
    30         $Output .= '</div>';
     36        $Output .= '</div>';   
    3137        return($Output);
     38  }
     39 
     40  function RegisterRSS($Channel, $Pos = NULL, $Callback = NULL)
     41  {
     42    $this->RSSChannels[$Channel['Channel']] = $Channel;
     43   
     44    if(is_null($Pos)) $this->RSSChannelsPos[] = $Channel['Channel'];
     45    else {
     46      array_splice($this->RSSChannelsPos, $Pos, 0, $Channel['Channel']);
     47    }
     48  }
     49 
     50  function ShowRSSHeader()
     51  {
     52    $Output = '';
     53    foreach($this->RSSChannels as $Channel)
     54                {
     55                  if($this->System->User->Licence($Channel['Permission']))
     56                          $Output .= ' <link rel="alternate" title="'.$Channel['Title'].'" href="'.
     57                        $this->System->Link('/rss/?channel='.$Channel['Channel']).'" type="application/rss+xml" />';
     58                }               
     59    return($Output);
    3260  }
    3361}
     
    95123                return($Output);
    96124        }
     125       
     126        function ShowRSS()
     127        {
     128         $DbResult = $this->Database->query('SELECT UNIX_TIMESTAMP(`News`.`Time`) AS `UnixTime`, '.
     129           '`News`.`Title`, `News`.`Time`, `User`.`Name`, `News`.`Text` '.
     130           'FROM `News` JOIN `User` ON `User`.`ID` = `News`.`User` ORDER BY `Time` DESC LIMIT 10');
     131         while($DbRow = $DbResult->fetch_assoc())
     132         {
     133          $Items[] = array
     134          (
     135            'Title' => $DbRow['Title'],
     136            'Link' =>  'http://'.$this->System->Config['Web']['Host'].$this->System->Link('/'),
     137            'Description' => $DbRow['Text'].' ('.$DbRow['Name'].')',
     138            'Time' => $DbRow['UnixTime'],
     139          );
     140         }
     141         $Output = GenerateRSS(array
     142           (
     143             'Title' => 'WoW překlad - Změny systému',
     144             'Link' => 'http://'.$this->System->Config['Web']['Host'].$this->System->Link('/'),
     145             'Description' => 'Překlad textů WoW',
     146             'WebmasterEmail' => $this->System->Config['Web']['AdminEmail'],
     147             'Items' => $Items,
     148           ));
     149           return($Output);     
     150        }
    97151}
  • trunk/Modules/News/RSS.php

    r578 r581  
    11<?php
    22
    3 $InitSystem = true;
    4 include_once('includes/global.php');
    5  
    6   $Items = array(); 
    7   if($_GET['channel'] == 'news')
    8   {
    9     $DbResult = $System->Database->query('SELECT UNIX_TIMESTAMP(`News`.`Time`) AS `UnixTime`, '.
    10       '`News`.`Title`, `News`.`Time`, `User`.`Name`, `News`.`Text` '.
    11       'FROM `News` JOIN `User` ON `User`.`ID` = `News`.`User` ORDER BY `Time` DESC LIMIT 10');
    12     while($DbRow = $DbResult->fetch_assoc())
    13     {
    14       $Items[] = array
    15     (
    16         'Title' => $DbRow['Title'],
    17         'Link' =>  'http://'.$Config['Web']['Host'].$System->Link('/'),
    18         'Description' => $DbRow['Text'].' ('.$DbRow['Name'].')',
    19         'Time' => $DbRow['UnixTime'],
    20       );
    21     }
    22     echo(GenerateRSS(array
    23     (
    24       'Title' => 'WoW překlad - Změny systému',
    25       'Link' => 'http://'.$Config['Web']['Host'].$System->Link('/'),
    26       'Description' => 'Překlad textů WoW',
    27       'WebmasterEmail' => $Config['Web']['AdminEmail'],
    28       'Items' => $Items,
    29     )));
    30   } else
    31   if($_GET['channel'] == 'translation')
    32   {
    33     $DbResult = $System->Database->query('SELECT UNIX_TIMESTAMP(`Date`) AS `Date`, `User`.`Name` AS `UserName`, `Text` FROM `Log` JOIN `User` ON `User`.`ID` = `Log`.`User` WHERE `Type` = 1 ORDER BY `Date` DESC LIMIT 100');
    34     while($DbRow = $DbResult->fetch_assoc())
    35     {
    36       $Items[] = array
    37     (
    38         'Title' => strip_tags($DbRow['Text'].' ('.$DbRow['UserName'].')'),
    39         'Link' => 'http://'.$Config['Web']['Host'].$System->Link('/'),
    40         'Description' => $DbRow['Text'],
    41         'Time' => $DbRow['Date'],
    42       );
    43     }
    44     echo(GenerateRSS(array
    45     (
    46       'Title' => 'WoW překlad - Poslední překlady',
    47       'Link' => 'http://'.$Config['Web']['Host'].$System->Link('/'),
    48       'Description' => 'Překlad textů WoW',
    49       'WebmasterEmail' => $Config['Web']['AdminEmail'],
    50       'Items' => $Items,
    51     )));
    52   } else
    53   if($_GET['channel'] == 'shoutbox')
    54   {
    55     $TitleLength = 50;
    56     mb_internal_encoding('utf-8');
    57     $DbResult = $System->Database->query('SELECT UNIX_TIMESTAMP(`Date`) AS `UnixDate`, `User`, `UserName`, `Text` FROM `ShoutBox` ORDER BY `ID` DESC LIMIT 20');
    58     while($DbRow = $DbResult->fetch_assoc())
    59     {
    60       $Title = mb_substr($DbRow['Text'], 0, $TitleLength);
    61       if(mb_strlen($Title) == $TitleLength) $Title .= '...';
    62       $Items[] = array
    63       (
    64         'Title' => $DbRow['UserName'].': '.$Title,
    65         'Link' =>  'http://'.$Config['Web']['Host'].$System->Link('/'),
    66         'Description' => $DbRow['Text'],
    67         'Time' => $DbRow['UnixDate'],
    68       );
    69     }
    70     echo(GenerateRSS(array
    71     (
    72       'Title' => 'WoW překlad - Shoutbox',
    73       'Link' => 'http://'.$Config['Web']['Host'].$System->Link('/'),
    74       'Description' => 'Překlad textů WoW',
    75       'WebmasterEmail' => $Config['Web']['AdminEmail'],
    76       'Items' => $Items,
    77     )));
    78   } else echo('Nezadán žádný kanál');
     3function GenerateRSS($Data)
     4{
     5        global $Config;
     6
     7        $Result = '<?xml version="1.0" encoding="'.$Config['Web']['Charset'].'" ?>'."\n". //<?
     8                        '<rss version="2.0">'."\n".
     9                        "  <channel>\n".
     10                        "    <title>".$Data['Title']."</title>\n".
     11                        "    <link>".$Data['Link']."</link>\n".
     12                        "    <description>".$Data['Description']."</description>\n".
     13                        "    <language>cs</language>\n".
     14                        "    <webMaster>".$Data['WebmasterEmail']."</webMaster>\n".
     15                        "    <pubDate>".date('r')."</pubDate>\n".
     16                        "    <ttl>20</ttl>\n";
     17        foreach($Data['Items'] as $Item)
     18        {
     19                $Result .= "    <item>\n".
     20                                '      <title>'.htmlspecialchars($Item['Title'])."</title>\n".
     21                                '      <description>'.htmlspecialchars($Item['Description'])."</description>\n".
     22                                '      <pubDate>'.date('r',$Item['Time'])."</pubDate>\n".
     23                                '      <link>'.$Item['Link']."</link>\n".
     24                                "    </item>\n";
     25        }
     26        $Result .= "  </channel>\n".
     27                        "</rss>";
     28        return($Result);
     29}
     30
     31class PageRSS extends Page
     32{
     33        function Show()
     34        { 
     35          $this->RawPage = true;
     36         
     37          if(array_key_exists($_GET['channel'], $this->System->ModuleManager->Modules['News']->RSSChannels))
     38          {
     39            $Channel = $this->System->ModuleManager->Modules['News']->RSSChannels[$_GET['channel']];
     40            if($this->System->User->Licence($Channel['Permission']))
     41            {
     42            if(is_string($Channel['Callback'][0]))
     43              {
     44                $Class = new $Channel['Callback'][0]($this->System);
     45                $Output = $Class->$Channel['Callback'][1]();
     46              } else $Output = call_user_func($Channel['Callback']);
     47            } else $Output = 'Nemáte oprávnění';
     48          } else $Output = 'Nezadán žádný kanál';
     49    return($Output);
     50        }
     51}
  • trunk/Modules/ShoutBox/ShoutBox.php

    r561 r581  
    1111    $this->License = 'GNU/GPL';
    1212    $this->Description = 'Simple user chat system.';
    13     $this->Dependencies = array();
     13    $this->Dependencies = array('News');
    1414  }
    1515 
     
    1717  {
    1818        $this->System->RegisterPage('shoutbox', 'PageShoutBox');
    19         $this->System->RegisterRSS(array('Title' => 'Kecátko', 'Channel' => 'shoutbox'));
    20          
     19        $this->System->ModuleManager->Modules['News']->RegisterRSS(array(
     20          'Title' => 'Kecátko', 'Channel' => 'shoutbox', 'Callback' => array('PageShoutBox', 'ShowRSS'),
     21          'Permission' => LICENCE_ANONYMOUS));           
    2122  }
    2223 
     
    120121                return($Output);
    121122        }       
     123       
     124        function ShowRSS()
     125        {
     126          $TitleLength = 50;
     127          mb_internal_encoding('utf-8');
     128          $DbResult = $this->Database->query('SELECT UNIX_TIMESTAMP(`Date`) AS `UnixDate`, `User`, `UserName`, `Text` FROM `ShoutBox` ORDER BY `ID` DESC LIMIT 20');
     129          while($DbRow = $DbResult->fetch_assoc())
     130          {
     131            $Title = mb_substr($DbRow['Text'], 0, $TitleLength);
     132            if(mb_strlen($Title) == $TitleLength) $Title .= '...';
     133            $Items[] = array
     134            (
     135                'Title' => $DbRow['UserName'].': '.$Title,
     136                'Link' =>  'http://'.$this->System->Config['Web']['Host'].$this->System->Link('/'),
     137                'Description' => $DbRow['Text'],
     138                'Time' => $DbRow['UnixDate'],
     139            );
     140          }
     141          $Output = GenerateRSS(array
     142              (
     143                  'Title' => 'WoW překlad - Shoutbox',
     144                  'Link' => 'http://'.$this->System->Config['Web']['Host'].$this->System->Link('/'),
     145                  'Description' => 'Překlad textů WoW',
     146                  'WebmasterEmail' => $this->System->Config['Web']['AdminEmail'],
     147                  'Items' => $Items,
     148              ));
     149           return($Output);
     150        }
    122151}
  • trunk/Modules/Translation/Translation.php

    r561 r581  
    1616    $this->License = 'GNU/GPL';
    1717    $this->Description = 'Translation of text items and groups from original language to other languages.';
    18     $this->Dependencies = array();
     18    $this->Dependencies = array('News');
    1919  }
    2020 
     
    2525        $this->System->RegisterPage('save.php', 'PageTranslationSave');
    2626    $this->System->RegisterPage('TranslationList.php', 'PageTranslationList');
    27     $this->System->RegisterRSS(array('Title' => 'Poslední překlady', 'Channel' => 'translation'));
     27    $this->System->ModuleManager->Modules['News']->RegisterRSS(array('Title' => 'Poslední překlady',
     28      'Channel' => 'translation', 'Callback' => array($this, 'ShowRSS'), 'Permission' => LICENCE_ANONYMOUS));
     29  }
     30 
     31  function ShowRSS()
     32  {
     33    $DbResult = $this->Database->query('SELECT UNIX_TIMESTAMP(`Date`) AS `Date`, `User`.`Name` AS `UserName`, `Text` FROM `Log` JOIN `User` ON `User`.`ID` = `Log`.`User` WHERE `Type` = 1 ORDER BY `Date` DESC LIMIT 100');
     34    while($DbRow = $DbResult->fetch_assoc())
     35    {
     36      $Items[] = array
     37      (
     38          'Title' => strip_tags($DbRow['Text'].' ('.$DbRow['UserName'].')'),
     39          'Link' => 'http://'.$this->System->Config['Web']['Host'].$this->System->Link('/'),
     40          'Description' => $DbRow['Text'],
     41          'Time' => $DbRow['Date'],
     42      );
     43    }
     44    $Output = GenerateRSS(array
     45        (
     46            'Title' => 'WoW překlad - Poslední překlady',
     47            'Link' => 'http://'.$this->System->Config['Web']['Host'].$this->System->Link('/'),
     48            'Description' => 'Překlad textů WoW',
     49            'WebmasterEmail' => $this->System->Config['Web']['AdminEmail'],
     50            'Items' => $Items,
     51                ));
     52    return($Output);
    2853  }
    2954}
  • trunk/includes/Version.php

    r580 r581  
    11<?php
    22
    3 $Revision = 580; // Subversion revision
     3$Revision = 581; // Subversion revision
    44$DatabaseRevision = 574; // Database structure revision
    5 $ReleaseTime = '2013-09-11';
     5$ReleaseTime = '2013-09-12';
  • trunk/includes/global.php

    r579 r581  
    55include_once(dirname(__FILE__).'/system.php');
    66include_once(dirname(__FILE__).'/Update.php');
    7 include_once(dirname(__FILE__).'/rss.php');
    87include_once(dirname(__FILE__).'/Page.php');
    98if(file_exists(dirname(__FILE__).'/config.php'))
  • trunk/includes/system.php

    r579 r581  
    1111  var $PathItems;
    1212  var $Menu;
    13   var $RSSChannels;
    1413  var $DoNotShowPage;
    1514 
     
    188187  }
    189188 
    190   function RegisterRSS($Channel, $Pos = NULL)
    191   {
    192         if(is_null($Pos)) $this->RSSChannels[] = $Channel;
    193           else {
    194                 array_splice($this->RSSChannels, $Pos, 0, array($Channel));
    195           }
    196   }
    197  
    198189  function SearchPage($PathItems, $Pages)
    199190  {
     
    361352                '<script type="text/javascript" src="'.$this->System->Link('/style/global.js').'"></script>'.
    362353                '<link rel="shortcut icon" href="'.$this->System->Link('/images/favicon.ico').'" />';
    363                 foreach($this->System->RSSChannels as $Channel)
    364                 {
    365                         $Output .= ' <link rel="alternate" title="'.$Channel['Title'].'" href="'.
    366                         $this->System->Link('/rss.php?channel='.$Channel['Channel']).'" type="application/rss+xml" />';
    367                 }
     354                $Output .= $this->System->ModuleManager->Modules['News']->ShowRSSHeader();
    368355                $Output .= '<title>'.$this->System->Config['Web']['Title'].'</title>'.
    369356                '</head><body>';
Note: See TracChangeset for help on using the changeset viewer.