Difference between revisions of "Extension:ListView.php"

From Organic Design wiki
(more structure and comments)
m (comments - add totals)
Line 32: Line 32:
 
if (is_object($wgTitle)) {
 
if (is_object($wgTitle)) {
 
$actions['listview'] = array(
 
$actions['listview'] = array(
'text'  => 'view as list',
+
'text'  => 'list',
 
'class' => $selected,
 
'class' => $selected,
 
'href'  => $url
 
'href'  => $url
Line 91: Line 91:
  
 
# PreProcess the list
 
# PreProcess the list
# - todo: get common templates
+
# - get common templates
 +
# - calculate totals
 +
 
 +
# Get meta information (if any) from templates
 +
# - could be useful to allow record templates to contain parameters for list-view
  
 
# Render the list
 
# Render the list
Line 106: Line 110:
 
$wgOut->addHtml("</tr>\n");
 
$wgOut->addHtml("</tr>\n");
 
}
 
}
 +
$wgOut->addHtml($totals);
 
$wgOut->addHtml("</table>\n");
 
$wgOut->addHtml("</table>\n");
 
$wgOut->addHtml($pager);
 
$wgOut->addHtml($pager);
 
return false;
 
return false;
 
}
 
}

Revision as of 04:53, 29 April 2008

<?php

  1. Extension:ListView
Info.svg These are the MediaWiki extensions we're using and/or developing. Please refer to the information on the mediawiki.org wiki for installation and usage details. Extensions here which have no corresponding mediawiki article are either not ready for use or have been superseded. You can also browse our extension code in our local Subversion repository or our GitHub mirror.

Template:Php

  1. - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
  2. - Author: User:NadCategory:Extensions created with Template:Extension
  3. - Started: 2008-04-16

if (!defined('MEDIAWIKI')) die('Not an entry point.');

define('LISTVIEW_VERSION','0.0.0, 2008-04-16');

$egRecordTemplatesCat = 'Record_templates'; # DBkey of category that valid record templates are members of

$wgExtensionFunctions[] = 'wfSetupListView'; $wgExtensionCredits['other'][] = array( 'name' => 'ListView', 'author' => 'User:Nad', 'description' => 'Allows categories or articles containing lists of article links to be rendered as a sortable list', 'url' => 'http://www.organicdesign.co.nz/Extension:ListView.php', 'version' => LISTVIEW_VERSION );

function wfSetupListView() { global $wgHooks,$wgOut,$wgUser; $wgHooks['SkinTemplateTabs'][] = 'wfListViewUpdateActions'; $wgHooks['UnknownAction'][] = 'wfListViewUnknownAction'; }

function wfListViewUpdateActions(&$skin,&$actions) { global $wgTitle,$wgRequest; $selected = $wgRequest->getText('action') == 'listview' ? 'selected' : false; $url = $wgTitle->getLocalURL("action=listview"); if (is_object($wgTitle)) { $actions['listview'] = array( 'text' => 'list', 'class' => $selected, 'href' => $url ); } return true; }

function wfListViewUnknownAction($action,&$article) { global $wgOut,$wgUser,$wgTitle,$wgParser,$wgRequest,$egRecordTemplatesCat; if ($action != 'listview') return true;

# get the list of titles if ($wgRequest->getText('template')) {

# Template was specified, list comes from template and query if specified # - also other parameters incl. query=DPL|SMW

} else {

# Read the valid links into $links array $title = $article->getTitle(); if ($title->getNamespace() == NS_CATEGORY) { $links = array(); $dbr = &wfGetDB(DB_SLAVE); $cl = $dbr->tableName('categorylinks'); $to = $title->getDbKey(); $res = $dbr->select($cl,'cl_from',"cl_to = '$to'",__METHOD__,array('ORDER BY' => 'cl_sortkey')); while ($row = $dbr->fetchRow($res)) { $t = Title::newFromID($row[0]); $u = $t->getLocalURL(); $t = $t->getPrefixedText(); $links[] = array(1 => "<a title=\"$t\" href=\"$u\">$t</a>"); } } else { if (is_object($wgParser)) { $psr = $wgParser; $opt = $wgParser->mOptions; } else { $psr = new Parser; $opt = NULL; } if (!is_object($opt)) $opt = ParserOptions::newFromUser($wgUser); $html = $psr->parse($article->fetchContent(),$title,$opt,true,true)->getText();

preg_match_all("|

  • \\s*(<a[^>]+title=[\"'](.*?)[\"'][^>]*>(.+?)</a>)|s",$html,$links,PREG_SET_ORDER); } } # Render a generic selection form (a dropdown of all the record types found in Category:Record templates) $select = '<option selected>Select record type</option>'; $dbr = &wfGetDB(DB_SLAVE); $cl = $dbr->tableName('categorylinks'); $res = $dbr->select($cl,'cl_from',"cl_to = '$egRecordTemplatesCat'",__METHOD__,array('ORDER BY' => 'cl_sortkey')); while ($row = $dbr->fetchRow($res)) $select .= '<option>'.(Title::newFromID($row[0])->getText()).'</option>'; $select = "<select name=\"template\">\n$select\n</select>"; $wgOut->addHtml($select); # Pager # - todo: add pager links accounting for limit and offset $pager = '....'; # PreProcess the list # - get common templates # - calculate totals # Get meta information (if any) from templates # - could be useful to allow record templates to contain parameters for list-view # Render the list # - todo: add limit and offset $wgOut->setPageTitle($title); $wgOut->addHtml($pager); $wgOut->addHtml("\n"); $class = 'even'; foreach ($links as $link) { $class = $class == 'even' ? 'odd' : 'even'; $wgOut->addHtml(""); $wgOut->addHtml(""); $wgOut->addHtml(""); $wgOut->addHtml("\n"); } $wgOut->addHtml($totals); $wgOut->addHtml("
    <input type=\"checkbox\" />$link[1]
    \n");

    $wgOut->addHtml($pager); return false; }