Extension:Calendar (Barrylb)/SpecialEvents.php

From MediaWiki.org
Jump to: navigation, search
<?php
 
/**
 * Special page to display events.
 * Events much be stored in articles with [[Category:Events]] and a category for the date, eg [[Category:2006/07/12]]
 * The article can use any name, for example using subpages "Events/2006/07/12/Party at my house". Only the last part of the name is shown when displaying the title.
 * This special page also uses my calendar extension to display a calendar.
 *
 * To install, add this line to LocalSettings.php: require_once("extensions/SpecialEvents.php");
 *
 */
 
if( defined( 'MEDIAWIKI' ) ) {
 
  require_once( 'SpecialPage.php' );
 
  $wgExtensionFunctions[] = 'efEventsExtn';
  $wgExtensionCredits['specialpage'][] = array( 
  'name' => 'Events', 
  'author' => 'Barrylb',
  'description' => 'Adds [[Special:Events|a special page]] for viewing events',
  'url' => 'http://www.mediawiki.org/wiki/Extension:Calendar_%28Barrylb%29'
  );
 
  function efEventsExtn() {
    global $wgMessageCache;
    SpecialPage::addPage( new EventsExtn() );
    $wgMessageCache->addMessage( 'events', 'Events' );
    $wgMessageCache->addMessage( 'events-header', '' );
  }
 
  class EventsExtn extends IncludableSpecialPage {
 
    function EventsExtn() {
      SpecialPage::SpecialPage( 'Events', '', true, false, 'default', true );
    }
 
    function execute( $par ) {
      global $wgOut, $wgRequest, $wgParser, $wgTitle, $wgUser;
 
      $year = isset($_GET['year']) ? $_REQUEST['year'] : null;
      $month = isset($_GET['month']) ? $_REQUEST['month'] : null;
      $day = isset($_GET['day']) ? $_REQUEST['day'] : null;
      if ($year == "")
        $year = date("Y"); 
      if ($month == "")
        $month = date("m");
 
      if (isset($_GET['category']))
        $catname = $_GET['category'];
      else
        $catname = 'Events';
 
      if (isset($_GET['ajax'])) {
        require_once 'Calendar.php';
        $mwCalendar = new mwCalendar();
        $mwCalendar->dateNow($month, $year);
        $mwCalendar->SetCatName($catname);
        $mwCalendar->AjaxPrevNext(true);
        if (isset($_GET['upcoming']) && ($_GET['upcoming'] == 'off'))
          $mwCalendar->ShowUpcoming(false);
        else
          $mwCalendar->ShowUpcoming(true);
        $mwCalendar->ShowCalendar(true);
        echo $mwCalendar->showThisMonth();
        exit;
      }
 
      # Don't show the navigation if we're including the page               
      if( !$this->mIncluding ) {
        $this->setHeaders();
        $wgOut->addWikiText( wfMsg( 'events-header' ) );
      }
 
      if ($day == "") {
        $wgOut->AddWikiText('<calendar>upcoming=off|ajaxprevnext=off|category=' . $catname . '</calendar>');
        $day = "__";
      }
 
      //build the SQL query
      $dbr =& wfGetDB( DB_SLAVE );
      $sPageTable = $dbr->tableName( 'page' );
      $categorylinks = $dbr->tableName( 'categorylinks' );
      $sSqlSelect = "SELECT page_namespace, page_title, page_id, clike1.cl_to AS catlike1 ";
      $sSqlSelectFrom = "FROM $sPageTable INNER JOIN $categorylinks AS c1 ON page_id = c1.cl_from AND c1.cl_to='$catname' INNER JOIN $categorylinks " . 
        "AS clike1 ON page_id = clike1.cl_from AND clike1.cl_to LIKE '$year/$month/$day'";
      $sSqlWhere = ' WHERE page_is_redirect = 0 ';
      $sSqlOrderby = ' ORDER BY catlike1 ASC';
 
      //DEBUG: output SQL query 
      //$wgOut->addHTML('[' . $sSqlSelect . $sSqlSelectFrom . $sSqlWhere . $sSqlOrderby . ']'); 
 
      $res = $dbr->query($sSqlSelect . $sSqlSelectFrom . $sSqlWhere . $sSqlOrderby);
 
      $sk =& $wgUser->getSkin();
 
      while ($row = $dbr->fetchObject( $res ) ) 
      {
        $title = Title::makeTitle( $row->page_namespace, $row->page_title);
        $wgOut->addHTML('<div class="eventsblock">');
 
        $title_text = $title->getSubpageText();
        $wgOut->addHTML('<b>' .  $sk->makeKnownLinkObj($title, $title_text) . '</b><br>');
 
        $wl_article = new Article ( $title ) ;
        $wl = $wl_article->getContent();
 
        $parserOptions = ParserOptions::newFromUser( $wgUser );
        $parserOptions->setEditSection( false );
        $parserOptions->setTidy(true);
        $parserOutput = $wgParser->parse( $wl , $title, $parserOptions );
        $previewHTML = $parserOutput->getText();                        
 
        $wgOut->addHTML($previewHTML);
 
        $wgOut->addHTML('</div>');
      }
    }         
 
  }
 
} else {
  echo( "This is an extension to the MediaWiki package and cannot be run standalone.\n" );
  die( -1 );
}
Personal tools
Namespaces
Variants
Actions
Site
Support
Download
Development
Communication
Print/export
Toolbox