Difference between revisions of "Extension:PdfBook"
(headings should already start at == now) |
(remove edit links with setEditSection(false)) |
||
Line 88: | Line 88: | ||
if (!in_array($t,$exclude)) { | if (!in_array($t,$exclude)) { | ||
$opt->setRemoveComments(false); | $opt->setRemoveComments(false); | ||
+ | $opt->setEditSection(false); | ||
$text = preg_replace('/((href|src)=[\'"]?)\\//','$1http://'.$_SERVER['HTTP_HOST'].'/',xwXmlWikiParse($t)); | $text = preg_replace('/((href|src)=[\'"]?)\\//','$1http://'.$_SERVER['HTTP_HOST'].'/',xwXmlWikiParse($t)); | ||
− | |||
$content .= "<h1>$t</h1>$text\n"; # add page title | $content .= "<h1>$t</h1>$text\n"; # add page title | ||
} | } |
Revision as of 12:25, 8 August 2007
<?php
- Extension:PdfBook
Template:PhpCategory:Extensions created with Template:Extension
- - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
- - Author: User:Nad
- - Started: 2007-08-08
if (!defined('MEDIAWIKI')) die('Not an entry point.');
define('PDFBOOK_VERSION','0.0.0, 2007-08-08');
$wgPdfBookMagic = "book"; $wgExtensionFunctions[] = 'wfSetupPdfBook'; $wgHooks['LanguageGetMagic'][] = 'wfPdfBookLanguageGetMagic';
$wgExtensionCredits['parserhook'][] = array( 'name' => 'Pdf Book', 'author' => 'User:Nad', 'description' => 'Composes a book from articles in a category and exports as a PDF book', 'url' => 'http://www.mediawiki.org/wiki/Extension:Pdf_Book', 'version' => PDFBOOK_VERSION );
class PdfBook {
# Constructor function PdfBook() { global $wgHooks,$wgParser,$wgPdfBookMagic; $wgParser->setFunctionHook($wgPdfBookMagic,array($this,'magicBook')); $wgHooks['UnknownAction'][] = $this;
# Add a new pdf log type global $wgLogTypes,$wgLogNames,$wgLogHeaders,$wgLogActions; $wgLogTypes[] = 'pdf'; $wgLogNames ['pdf'] = 'pdflogpage'; $wgLogHeaders['pdf'] = 'pdflogpagetext'; $wgLogActions['pdf/book'] = 'pdflogentry'; }
# Expand the book-magic function magicBook(&$parser) {
# Populate $argv with both named and numeric parameters $argv = array(); foreach (func_get_args() as $arg) if (!is_object($arg)) { if (preg_match('/^(.+?)\\s*=\\s*(.+)$/',$arg,$match)) $argv[$match[1]] = $match[2]; else $argv[] = $arg; }
# Return result with available parser flags return array( $text, found => true, nowiki => false, noparse => false, noargs => false, isHTML => false ); }
function onUnknownAction($action,$article) { global $wgOut, $wgUser, $wgTitle; if($action == 'pdfbook') {
# Log the export $msg = $wgUser->getUserPage()->getPrefixedText().' exported as a PDF book'; $log = new LogPage('pdf',false); $log->addEntry('book',$wgTitle,$msg);
# Initialise PDF variables $layout = '--firstpage toc'; if (!xwGetProperty($properties,'pdf/left-margin',$left)) $left = '1cm'; if (!xwGetProperty($properties,'pdf/right-margin',$right)) $right = '1cm'; if (!xwGetProperty($properties,'pdf/top-margin',$top)) $top = '1cm'; if (!xwGetProperty($properties,'pdf/bottom-margin',$bottom)) $bottom = '5mm'; if (!xwGetProperty($properties,'pdf/font-name',$font)) $font = 'Arial'; if (!xwGetProperty($properties,'pdf/font-size',$size)) $size = '8'; if (!xwGetProperty($properties,'pdf/links',$links)) $links = '217A28'; if (!xwGetProperty($properties,'pdf/toc-levels',$levels)) $levels = '2'; if (xwGetProperty($properties,'pdf/exclude',$exclude)) $exclude = split('\\s*,\\s*',$exclude); else $exclude = array();
# Format the categories article's as a single HTML document $cat = $article->getTitle()->getText(); $db = &wfGetDB(DB_SLAVE); $cl = $db->tableName('categorylinks'); $result = $db->query("SELECT cl_from FROM $cl WHERE cl_to = '$cat' ORDER BY cl_sortkey"); $content = ; while ($row = mysql_fetch_row($result)) { $t = Title::newFromID($row[0])->getText(); if (!in_array($t,$exclude)) { $opt->setRemoveComments(false); $opt->setEditSection(false); $text = preg_replace('/((href|src)=[\'"]?)\\//','$1http://'.$_SERVER['HTTP_HOST'].'/',xwXmlWikiParse($t));
$content .= "
$t
$text\n"; # add page title
} $file = "$htdocs/wiki/tmp/".uniqid('pdf'); $fh = fopen($file,'w+'); fwrite($fh,$content); fclose($fh);
# Send the file to the client via htmldoc converter while (@ob_end_clean()); header("Content-Type: application/pdf"); header("Content-Disposition: attachment; filename=\"$file\"");
- if (in_array('Content-Encoding: gzip',headers_list())) $content = gzencode($content);
flush(); passthru("htmldoc -t pdf --left $left --right $right --top $top --bottom $bottom --header ... --footer .1. --headfootsize 8 --quiet --jpeg --color --bodyfont $font --fontsize $size --linkstyle plain --linkcolor $links --toclevels $levels --format pdf14 --numbered $layout $file"); @unlink($file); die; } }
# Needed in some versions to prevent Special:Version from breaking function __toString() { return 'PdfBook'; }
}
- Called from $wgExtensionFunctions array when initialising extensions
function wfSetupPdfBook() { global $wgPdfBook; $wgPdfBook = new PdfBook(); }
- Needed in MediaWiki >1.8.0 for magic word hooks to work properly
function wfPdfBookLanguageGetMagic(&$magicWords,$langCode = 0) { global $wgPdfBookMagic; $magicWords[$wgPdfBookMagic] = array(0,$wgPdfBookMagic); return true; }
?>