Merge "Implement static public Parser::getExternalLinkRel"
[lhc/web/wiklou.git] / includes / Metadata.php
index 0b4fbf8..0ca1539 100644 (file)
@@ -1,23 +1,26 @@
 <?php
 /**
- * Metadata.php -- provides DublinCore and CreativeCommons metadata
+ * Base code to format metadata.
+ *
  * Copyright 2004, Evan Prodromou <evan@wikitravel.org>.
  *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
  *
  * @author Evan Prodromou <evan@wikitravel.org>
+ * @file
  */
 
 abstract class RdfMetaData {
@@ -27,15 +30,12 @@ abstract class RdfMetaData {
         * Constructor
         * @param $article Article object
         */
-       public function __construct( Article $article ){
+       public function __construct( Page $article ) {
                $this->mArticle = $article;
        }
 
        public abstract function show();
 
-       /**
-        *
-        */
        protected function setup() {
                global $wgOut, $wgRequest;
 
@@ -43,29 +43,25 @@ abstract class RdfMetaData {
                $rdftype = wfNegotiateType( wfAcceptToPrefs( $httpaccept ), wfAcceptToPrefs( self::RDF_TYPE_PREFS ) );
 
                if( !$rdftype ){
-                       wfHttpError( 406, 'Not Acceptable', wfMsg( 'notacceptable' ) );
-                       return false;
-               } else {
-                       $wgOut->disable();
-                       $wgRequest->response()->header( "Content-type: {$rdftype}; charset=utf-8" );
-                       $wgOut->sendCacheControl();
-                       return true;
+                       throw new HttpError( 406, wfMessage( 'notacceptable' ) );
                }
+
+               $wgOut->disable();
+               $wgRequest->response()->header( "Content-type: {$rdftype}; charset=utf-8" );
+               $wgOut->sendCacheControl();
+               return true;
        }
 
-       /**
-        *
-        */
        protected function reallyFullUrl() {
                return $this->mArticle->getTitle()->getFullURL();
        }
 
        protected function basics() {
-               global $wgContLanguageCode, $wgSitename;
+               global $wgLanguageCode, $wgSitename;
 
-               $this->element( 'title', $this->mArticle->mTitle->getText() );
-               $this->pageOrString( 'publisher', wfMsg( 'aboutpage' ), $wgSitename );
-               $this->element( 'language', $wgContLanguageCode );
+               $this->element( 'title', $this->mArticle->getTitle()->getText() );
+               $this->pageOrString( 'publisher', wfMessage( 'aboutpage' )->text(), $wgSitename );
+               $this->element( 'language', $wgLanguageCode );
                $this->element( 'type', 'Text' );
                $this->element( 'format', 'text/html' );
                $this->element( 'identifier', $this->reallyFullUrl() );
@@ -92,11 +88,12 @@ abstract class RdfMetaData {
                  . substr($timestamp, 6, 2);
        }
 
-       protected function pageOrString( $name, $page, $str ){
-               if( $page instanceof Title )
+       protected function pageOrString( $name, $page, $str ) {
+               if( $page instanceof Title ) {
                        $nt = $page;
-               else
+               } else {
                        $nt = Title::newFromText( $page );
+               }
 
                if( !$nt || $nt->getArticleID() == 0 ){
                        $this->element( $name, $str );
@@ -105,7 +102,11 @@ abstract class RdfMetaData {
                }
        }
 
-       protected function page( $name, $title ){
+       /**
+        * @param $name string
+        * @param $title Title
+        */
+       protected function page( $name, $title ) {
                $this->url( $name, $title->getFullUrl() );
        }
 
@@ -114,15 +115,21 @@ abstract class RdfMetaData {
                print "\t\t<dc:{$name} rdf:resource=\"{$url}\" />\n";
        }
 
-       protected function person($name, User $user ){
-               global $wgContLang;
-
+       protected function person( $name, User $user ) {
                if( $user->isAnon() ){
-                       $this->element( $name, wfMsgExt( 'anonymous', array( 'parsemag' ), 1 ) );
-               } else if( $real = $user->getRealName() ) {
-                       $this->element( $name, $real );
+                       $this->element( $name, wfMessage( 'anonymous' )->numParams( 1 )->text() );
                } else {
-                       $this->pageOrString( $name, $user->getUserPage(), wfMsg( 'siteuser', $user->getName() ) );
+                       $real = $user->getRealName();
+                       if( $real ) {
+                               $this->element( $name, $real );
+                       } else {
+                               $userName = $user->getName();
+                               $this->pageOrString(
+                                       $name,
+                                       $user->getUserPage(),
+                                       wfMessage( 'siteuser', $userName, $userName )->text()
+                               );
+                       }
                }
        }
 
@@ -136,9 +143,9 @@ abstract class RdfMetaData {
                if( $wgRightsPage && ( $nt = Title::newFromText( $wgRightsPage ) )
                        && ($nt->getArticleID() != 0)) {
                        $this->page('rights', $nt);
-               } else if( $wgRightsUrl ){
+               } elseif( $wgRightsUrl ){
                        $this->url('rights', $wgRightsUrl);
-               } else if( $wgRightsText ){
+               } elseif( $wgRightsText ){
                        $this->element( 'rights', $wgRightsText );
                }
        }
@@ -194,125 +201,3 @@ abstract class RdfMetaData {
        }
 }
 
-class DublinCoreRdf extends RdfMetaData {
-
-       public function show(){
-               if( $this->setup() ){
-                       $this->prologue();
-                       $this->basics();
-                       $this->epilogue();
-               }
-       }
-
-       /**
-        * begin of the page
-        */
-       protected function prologue() {
-               global $wgOutputEncoding;
-
-               $url = htmlspecialchars( $this->reallyFullUrl() );
-               print <<<PROLOGUE
-<?xml version="1.0" encoding="{$wgOutputEncoding}" ?>
-<!DOCTYPE rdf:RDF PUBLIC "-//DUBLIN CORE//DCMES DTD 2002/07/31//EN" "http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.dtd">
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-       xmlns:dc="http://purl.org/dc/elements/1.1/">
-       <rdf:Description rdf:about="{$url}">
-
-PROLOGUE;
-       }
-
-       /**
-        * end of the page
-        */
-       protected function epilogue() {
-               print <<<EPILOGUE
-       </rdf:Description>
-</rdf:RDF>
-EPILOGUE;
-       }
-}
-
-class CreativeCommonsRdf extends RdfMetaData {
-
-       public function show(){
-               if( $this->setup() ){
-                       global $wgRightsUrl;
-
-                       $url = $this->reallyFullUrl();
-
-                       $this->prologue();
-                       $this->subPrologue('Work', $url);
-
-                       $this->basics();
-                       if( $wgRightsUrl ){
-                               $url = htmlspecialchars( $wgRightsUrl );
-                               print "\t\t<cc:license rdf:resource=\"$url\" />\n";
-                       }
-
-                       $this->subEpilogue('Work');
-
-                       if( $wgRightsUrl ){
-                               $terms = $this->getTerms( $wgRightsUrl );
-                               if( $terms ){
-                                       $this->subPrologue( 'License', $wgRightsUrl );
-                                       $this->license( $terms );
-                                       $this->subEpilogue( 'License' );
-                               }
-                       }
-               }
-
-               $this->epilogue();
-       }
-
-       protected function prologue() {
-               global $wgOutputEncoding;
-               echo <<<PROLOGUE
-<?xml version='1.0'  encoding="{$wgOutputEncoding}" ?>
-<rdf:RDF xmlns:cc="http://web.resource.org/cc/"
-       xmlns:dc="http://purl.org/dc/elements/1.1/"
-       xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-
-PROLOGUE;
-       }
-
-       protected function subPrologue( $type, $url ){
-               $url = htmlspecialchars( $url );
-               echo "\t<cc:{$type} rdf:about=\"{$url}\">\n";
-       }
-
-       protected function subEpilogue($type) {
-               echo "\t</cc:{$type}>\n";
-       }
-
-       protected function license($terms) {
-
-               foreach( $terms as $term ){
-                       switch( $term ) {
-                        case 're':
-                               $this->term('permits', 'Reproduction'); break;
-                        case 'di':
-                               $this->term('permits', 'Distribution'); break;
-                        case 'de':
-                               $this->term('permits', 'DerivativeWorks'); break;
-                        case 'nc':
-                               $this->term('prohibits', 'CommercialUse'); break;
-                        case 'no':
-                               $this->term('requires', 'Notice'); break;
-                        case 'by':
-                               $this->term('requires', 'Attribution'); break;
-                        case 'sa':
-                               $this->term('requires', 'ShareAlike'); break;
-                        case 'sc':
-                               $this->term('requires', 'SourceCode'); break;
-                       }
-               }
-       }
-
-       protected function term( $term, $name ){
-               print "\t\t<cc:{$term} rdf:resource=\"http://web.resource.org/cc/{$name}\" />\n";
-       }
-
-       protected function epilogue() {
-               echo "</rdf:RDF>\n";
-       }
-}
\ No newline at end of file