summaryrefslogtreecommitdiff
path: root/includes/SpecialBooksources.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/SpecialBooksources.php')
-rw-r--r--includes/SpecialBooksources.php109
1 files changed, 109 insertions, 0 deletions
diff --git a/includes/SpecialBooksources.php b/includes/SpecialBooksources.php
new file mode 100644
index 00000000..960f6224
--- /dev/null
+++ b/includes/SpecialBooksources.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * ISBNs in wiki pages will create links to this page, with the ISBN passed
+ * in via the query string.
+ *
+ * @package MediaWiki
+ * @subpackage SpecialPage
+ */
+
+/**
+ * Constructor
+ */
+function wfSpecialBooksources( $par ) {
+ global $wgRequest;
+
+ $isbn = $par;
+ if( empty( $par ) ) {
+ $isbn = $wgRequest->getVal( 'isbn' );
+ }
+ $isbn = preg_replace( '/[^0-9X]/', '', $isbn );
+
+ $bsl = new BookSourceList( $isbn );
+ $bsl->show();
+}
+
+/**
+ *
+ * @package MediaWiki
+ * @subpackage SpecialPage
+ */
+class BookSourceList {
+ var $mIsbn;
+
+ function BookSourceList( $isbn ) {
+ $this->mIsbn = $isbn;
+ }
+
+ function show() {
+ global $wgOut;
+
+ $wgOut->setPagetitle( wfMsg( "booksources" ) );
+ if( $this->mIsbn == '' ) {
+ $this->askForm();
+ } else {
+ $this->showList();
+ }
+ }
+
+ function showList() {
+ global $wgOut, $wgContLang;
+ $fname = "BookSourceList::showList()";
+
+ # First, see if we have a custom list setup in
+ # [[Wikipedia:Book sources]] or equivalent.
+ $bstitle = Title::makeTitleSafe( NS_PROJECT, wfMsg( "booksources" ) );
+ if( $bstitle ) {
+ $revision = Revision::newFromTitle( $bstitle );
+ if( $revision ) {
+ $bstext = $revision->getText();
+ if( $bstext ) {
+ $bstext = str_replace( "MAGICNUMBER", $this->mIsbn, $bstext );
+ $wgOut->addWikiText( $bstext );
+ return;
+ }
+ }
+ }
+
+ # Otherwise, use the list of links in the default Language.php file.
+ $s = wfMsgWikiHtml( 'booksourcetext' ) . "<ul>\n";
+ $bs = $wgContLang->getBookstoreList() ;
+ $bsn = array_keys ( $bs ) ;
+ foreach ( $bsn as $name ) {
+ $adr = $bs[$name] ;
+ if ( ! $this->mIsbn ) {
+ $adr = explode( ":" , $adr , 2 );
+ $adr = explode( "/" , $adr[1] );
+ $a = "";
+ while ( $a == "" ) {
+ $a = array_shift( $adr );
+ }
+ $adr = "http://".$a ;
+ } else {
+ $adr = str_replace ( "$1" , $this->mIsbn , $adr ) ;
+ }
+ $name = htmlspecialchars( $name );
+ $adr = htmlspecialchars( $adr );
+ $s .= "<li><a href=\"{$adr}\" class=\"external\">{$name}</a></li>\n" ;
+ }
+ $s .= "</ul>\n";
+
+ $wgOut->addHTML( $s );
+ }
+
+ function askForm() {
+ global $wgOut, $wgTitle;
+ $fname = "BookSourceList::askForm()";
+
+ $action = $wgTitle->escapeLocalUrl();
+ $isbn = htmlspecialchars( wfMsg( "isbn" ) );
+ $go = htmlspecialchars( wfMsg( "go" ) );
+ $out = "<form action=\"$action\" method='post'>
+ $isbn: <input name='isbn' id='isbn' />
+ <input type='submit' value=\"$go\" />
+ </form>";
+ $wgOut->addHTML( $out );
+ }
+}
+
+?>