X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FMetadata.php;h=e5e3296b3ba2c3ed1725f82dcf030b007d59d87f;hb=a40a045f5f04a6287e90d46555956698abaa0025;hp=57768b71f6eca7e2cd721c4fec66eebf1b4612c2;hpb=f84493db51656cee37c2d9f4f06ce80313198017;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Metadata.php b/includes/Metadata.php index 57768b71f6..e5e3296b3b 100644 --- a/includes/Metadata.php +++ b/includes/Metadata.php @@ -1,8 +1,8 @@ . - * + * * 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 @@ -15,348 +15,183 @@ * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * * @author Evan Prodromou - * @package MediaWiki + * @file */ -/** - * - */ -define('RDF_TYPE_PREFS', "application/rdf+xml,text/xml;q=0.7,application/xml;q=0.5,text/rdf;q=0.1"); +abstract class RdfMetaData { + const RDF_TYPE_PREFS = 'application/rdf+xml,text/xml;q=0.7,application/xml;q=0.5,text/rdf;q=0.1'; -function wfDublinCoreRdf($article) { - - $url = dcReallyFullUrl($article->mTitle); - - if (rdfSetup()) { - dcPrologue($url); - dcBasics($article); - dcEpilogue(); + /** + * Constructor + * @param $article Article object + */ + public function __construct( Page $article ) { + $this->mArticle = $article; } -} -function wfCreativeCommonsRdf($article) { - - if (rdfSetup()) { - global $wgRightsUrl; - - $url = dcReallyFullUrl($article->mTitle); - - ccPrologue(); - ccSubPrologue('Work', $url); - dcBasics($article); - if (isset($wgRightsUrl)) { - $url = htmlspecialchars( $wgRightsUrl ); - print " \n"; - } - - ccSubEpilogue('Work'); - - if (isset($wgRightsUrl)) { - $terms = ccGetTerms($wgRightsUrl); - if ($terms) { - ccSubPrologue('License', $wgRightsUrl); - ccLicense($terms); - ccSubEpilogue('License'); - } + public abstract function show(); + + protected function setup() { + global $wgOut, $wgRequest; + + $httpaccept = isset( $_SERVER['HTTP_ACCEPT'] ) ? $_SERVER['HTTP_ACCEPT'] : null; + $rdftype = wfNegotiateType( wfAcceptToPrefs( $httpaccept ), wfAcceptToPrefs( self::RDF_TYPE_PREFS ) ); + + if( !$rdftype ){ + throw new HttpError( 406, wfMessage( 'notacceptable' ) ); } - } - - ccEpilogue(); -} -/** - * @private - */ -function rdfSetup() { - global $wgOut, $wgRdfMimeType, $_SERVER; - - $rdftype = wfNegotiateType(wfAcceptToPrefs($_SERVER['HTTP_ACCEPT']), wfAcceptToPrefs(RDF_TYPE_PREFS)); - - if (!$rdftype) { - wfHttpError(406, "Not Acceptable", wfMsg("notacceptable")); - return false; - } else { $wgOut->disable(); - header( "Content-type: {$rdftype}" ); + $wgRequest->response()->header( "Content-type: {$rdftype}; charset=utf-8" ); $wgOut->sendCacheControl(); return true; } -} -/** - * @private - */ -function dcPrologue($url) { - global $wgOutputEncoding; - - $url = htmlspecialchars( $url ); - print "<" . "?xml version=\"1.0\" encoding=\"{$wgOutputEncoding}\" ?" . "> - - - - - -"; -} + protected function reallyFullUrl() { + return $this->mArticle->getTitle()->getFullURL(); + } -/** - * @private - */ -function dcEpilogue() { - print " - - -"; -} + protected function basics() { + global $wgLanguageCode, $wgSitename; -/** - * @private - */ -function dcBasics($article) { - global $wgContLanguageCode, $wgSitename; - - dcElement('title', $article->mTitle->getText()); - dcPageOrString('publisher', wfMsg('aboutpage'), $wgSitename); - dcElement('language', $wgContLanguageCode); - dcElement('type', 'Text'); - dcElement('format', 'text/html'); - dcElement('identifier', dcReallyFullUrl($article->mTitle)); - dcElement('date', dcDate($article->getTimestamp())); + $this->element( 'title', $this->mArticle->getTitle()->getText() ); + $this->pageOrString( 'publisher', wfMsg( 'aboutpage' ), $wgSitename ); + $this->element( 'language', $wgLanguageCode ); + $this->element( 'type', 'Text' ); + $this->element( 'format', 'text/html' ); + $this->element( 'identifier', $this->reallyFullUrl() ); + $this->element( 'date', $this->date( $this->mArticle->getTimestamp() ) ); - $last_editor = $article->getUser(); + $lastEditor = User::newFromId( $this->mArticle->getUser() ); + $this->person( 'creator', $lastEditor ); - if ($last_editor == 0) { - dcPerson('creator', 0); - } else { - dcPerson('creator', $last_editor, $article->getUserText(), - User::whoIsReal($last_editor)); - } + foreach( $this->mArticle->getContributors() as $user ){ + $this->person( 'contributor', $user ); + } - $contributors = $article->getContributors(); - - foreach ($contributors as $user_parts) { - dcPerson('contributor', $user_parts[0], $user_parts[1], $user_parts[2]); + $this->rights(); } - - dcRights($article); -} -/** - * @private - */ -function ccPrologue() { - global $wgOutputEncoding; - - echo "<" . "?xml version='1.0' encoding='{$wgOutputEncoding}' ?" . "> - - -"; -} + protected function element( $name, $value ) { + $value = htmlspecialchars( $value ); + print "\t\t{$value}\n"; + } -/** - * @private - */ -function ccSubPrologue($type, $url) { - $url = htmlspecialchars( $url ); - echo " \n"; -} + protected function date($timestamp) { + return substr($timestamp, 0, 4) . '-' + . substr($timestamp, 4, 2) . '-' + . substr($timestamp, 6, 2); + } -/** - * @private - */ -function ccSubEpilogue($type) { - echo " \n"; -} + protected function pageOrString( $name, $page, $str ) { + if( $page instanceof Title ) { + $nt = $page; + } else { + $nt = Title::newFromText( $page ); + } -/** - * @private - */ -function ccLicense($terms) { - - foreach ($terms as $term) { - switch ($term) { - case 're': - ccTerm('permits', 'Reproduction'); break; - case 'di': - ccTerm('permits', 'Distribution'); break; - case 'de': - ccTerm('permits', 'DerivativeWorks'); break; - case 'nc': - ccTerm('prohibits', 'CommercialUse'); break; - case 'no': - ccTerm('requires', 'Notice'); break; - case 'by': - ccTerm('requires', 'Attribution'); break; - case 'sa': - ccTerm('requires', 'ShareAlike'); break; - case 'sc': - ccTerm('requires', 'SourceCode'); break; + if( !$nt || $nt->getArticleID() == 0 ){ + $this->element( $name, $str ); + } else { + $this->page( $name, $nt ); } } -} -/** - * @private - */ -function ccTerm($term, $name) { - print " \n"; -} - -/** - * @private - */ -function ccEpilogue() { - echo "\n"; -} - -/** - * @private - */ -function dcElement($name, $value) { - $value = htmlspecialchars( $value ); - print " {$value}\n"; -} - -/** - * @private - */ -function dcDate($timestamp) { - return substr($timestamp, 0, 4) . '-' - . substr($timestamp, 4, 2) . '-' - . substr($timestamp, 6, 2); -} - -/** - * @private - */ -function dcReallyFullUrl($title) { - return $title->getFullURL(); -} - -/** - * @private - */ -function dcPageOrString($name, $page, $str) { - $nt = Title::newFromText($page); - - if (!$nt || $nt->getArticleID() == 0) { - dcElement($name, $str); - } else { - dcPage($name, $nt); + /** + * @param $name string + * @param $title Title + */ + protected function page( $name, $title ) { + $this->url( $name, $title->getFullUrl() ); } -} -/** - * @private - */ -function dcPage($name, $title) { - dcUrl($name, dcReallyFullUrl($title)); -} - -/** - * @private - */ -function dcUrl($name, $url) { - $url = htmlspecialchars( $url ); - print " \n"; -} - -/** - * @private - */ -function dcPerson($name, $id, $user_name='', $user_real_name='') { - global $wgContLang; + protected function url($name, $url) { + $url = htmlspecialchars( $url ); + print "\t\t\n"; + } - if ($id == 0) { - dcElement($name, wfMsg('anonymous')); - } else if ( !empty($user_real_name) ) { - dcElement($name, $user_real_name); - } else { - # XXX: This shouldn't happen. - if( empty( $user_name ) ) { - $user_name = User::whoIs($id); + protected function person( $name, User $user ) { + if( $user->isAnon() ){ + $this->element( $name, wfMsgExt( 'anonymous', array( 'parsemag' ), 1 ) ); + } else { + $real = $user->getRealName(); + if( $real ) { + $this->element( $name, $real ); + } else { + $userName = $user->getName(); + $this->pageOrString( $name, $user->getUserPage(), wfMsgExt( 'siteuser', 'parsemag', $userName, $userName ) ); + } } - dcPageOrString($name, $wgContLang->getNsText(NS_USER) . ':' . $user_name, wfMsg('siteuser', $user_name)); } -} -/** - * Takes an arg, for future enhancement with different rights for - * different pages. - * @private - */ -function dcRights($article) { - - global $wgRightsPage, $wgRightsUrl, $wgRightsText; - - if (isset($wgRightsPage) && - ($nt = Title::newFromText($wgRightsPage)) - && ($nt->getArticleID() != 0)) { - dcPage('rights', $nt); - } else if (isset($wgRightsUrl)) { - dcUrl('rights', $wgRightsUrl); - } else if (isset($wgRightsText)) { - dcElement('rights', $wgRightsText); + /** + * Takes an arg, for future enhancement with different rights for + * different pages. + */ + protected function rights() { + global $wgRightsPage, $wgRightsUrl, $wgRightsText; + + if( $wgRightsPage && ( $nt = Title::newFromText( $wgRightsPage ) ) + && ($nt->getArticleID() != 0)) { + $this->page('rights', $nt); + } elseif( $wgRightsUrl ){ + $this->url('rights', $wgRightsUrl); + } elseif( $wgRightsText ){ + $this->element( 'rights', $wgRightsText ); + } } -} -/** - * @private - */ -function ccGetTerms($url) { - global $wgLicenseTerms; - - if (isset($wgLicenseTerms)) { - return $wgLicenseTerms; - } else { - $known = getKnownLicenses(); - return $known[$url]; + protected function getTerms( $url ){ + global $wgLicenseTerms; + + if( $wgLicenseTerms ){ + return $wgLicenseTerms; + } else { + $known = $this->getKnownLicenses(); + if( isset( $known[$url] ) ) { + return $known[$url]; + } else { + return array(); + } + } } -} -/** - * @private - */ -function getKnownLicenses() { - - $ccLicenses = array('by', 'by-nd', 'by-nd-nc', 'by-nc', - 'by-nc-sa', 'by-sa'); - $ccVersions = array('1.0', '2.0'); - $knownLicenses = array(); - - foreach ($ccVersions as $version) { - foreach ($ccLicenses as $license) { - if( $version == '2.0' && substr( $license, 0, 2) != 'by' ) { - # 2.0 dropped the non-attribs licenses - continue; - } - $lurl = "http://creativecommons.org/licenses/{$license}/{$version}/"; - $knownLicenses[$lurl] = explode('-', $license); - $knownLicenses[$lurl][] = 're'; - $knownLicenses[$lurl][] = 'di'; - $knownLicenses[$lurl][] = 'no'; - if (!in_array('nd', $knownLicenses[$lurl])) { - $knownLicenses[$lurl][] = 'de'; + protected function getKnownLicenses() { + $ccLicenses = array('by', 'by-nd', 'by-nd-nc', 'by-nc', + 'by-nc-sa', 'by-sa'); + $ccVersions = array('1.0', '2.0'); + $knownLicenses = array(); + + foreach ($ccVersions as $version) { + foreach ($ccLicenses as $license) { + if( $version == '2.0' && substr( $license, 0, 2) != 'by' ) { + # 2.0 dropped the non-attribs licenses + continue; + } + $lurl = "http://creativecommons.org/licenses/{$license}/{$version}/"; + $knownLicenses[$lurl] = explode('-', $license); + $knownLicenses[$lurl][] = 're'; + $knownLicenses[$lurl][] = 'di'; + $knownLicenses[$lurl][] = 'no'; + if (!in_array('nd', $knownLicenses[$lurl])) { + $knownLicenses[$lurl][] = 'de'; + } } } + + /* Handle the GPL and LGPL, too. */ + + $knownLicenses['http://creativecommons.org/licenses/GPL/2.0/'] = + array('de', 're', 'di', 'no', 'sa', 'sc'); + $knownLicenses['http://creativecommons.org/licenses/LGPL/2.1/'] = + array('de', 're', 'di', 'no', 'sa', 'sc'); + $knownLicenses['http://www.gnu.org/copyleft/fdl.html'] = + array('de', 're', 'di', 'no', 'sa', 'sc'); + + return $knownLicenses; } - - /* Handle the GPL and LGPL, too. */ - - $knownLicenses['http://creativecommons.org/licenses/GPL/2.0/'] = - array('de', 're', 'di', 'no', 'sa', 'sc'); - $knownLicenses['http://creativecommons.org/licenses/LGPL/2.1/'] = - array('de', 're', 'di', 'no', 'sa', 'sc'); - $knownLicenses['http://www.gnu.org/copyleft/fdl.html'] = - array('de', 're', 'di', 'no', 'sa', 'sc'); - - return $knownLicenses; } -?>