From: Brion Vibber Date: Sat, 10 Apr 2004 11:19:33 +0000 (+0000) Subject: Cleanup on Metadata (indentation, escaping of output). Put title attributes X-Git-Tag: 1.3.0beta1~476 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/bilan.php?a=commitdiff_plain;h=b5946f6ee9e1a8374312b91e0d3fd277bcf76156;p=lhc%2Fweb%2Fwiklou.git Cleanup on Metadata (indentation, escaping of output). Put title attributes on the Creative Commons and Dublin Core links so they can be identified by humans in Mozilla's navigation bar. Add a as well if $wgRightsPage or $wgRightsUrl is set. Fix metadata links for MonoBook. Disable Smarty skins. --- diff --git a/includes/Metadata.php b/includes/Metadata.php index 2e396faefb..ebc7164dc2 100644 --- a/includes/Metadata.php +++ b/includes/Metadata.php @@ -20,65 +20,67 @@ define("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(); - } + + $url = dcReallyFullUrl($article->mTitle); + + if (rdfSetup()) { + dcPrologue($url); + dcBasics($article); + dcEpilogue(); + } } function wfCreativeCommonsRdf($article) { - - if (rdfSetup()) { - global $wgRightsUrl; - - $url = dcReallyFullUrl($article->mTitle); - - ccPrologue(); - ccSubPrologue('Work', $url); - dcBasics($article); - if (isset($wgRightsUrl)) { - print " \n"; - } - - ccSubEpilogue('Work'); - - if (isset($wgRightsUrl)) { - $terms = ccGetTerms($wgRightsUrl); - if ($terms) { - ccSubPrologue('License', $wgRightsUrl); - ccLicense($terms); - ccSubEpilogue('License'); - } - } - } - - ccEpilogue(); + + 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'); + } + } + } + + 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}" ); - $wgOut->sendCacheControl(); - return true; - } + 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}" ); + $wgOut->sendCacheControl(); + return true; + } } /* private */ function dcPrologue($url) { - global $wgOutputEncoding; - - print " + global $wgOutputEncoding; + + $url = htmlspecialchars( $url ); + print "<" . "?xml version=\"1.0\" encoding=\"{$wgOutputEncoding}\" ?" . "> @@ -89,37 +91,37 @@ function wfCreativeCommonsRdf($article) { } /* private */ function dcEpilogue() { - print " + print " "; } /* private */ function dcBasics($article) { - global $wgLanguageCode, $wgSitename; - - dcElement('title', $article->mTitle->getText()); - dcPageOrString('publisher', wfMsg('aboutpage'), $wgSitename); - dcElement('language', $wgLanguageCode); - dcElement('type', 'Text'); - dcElement('format', 'text/html'); - dcElement('identifier', dcReallyFullUrl($article->mTitle)); - dcElement('date', dcDate($article->getTimestamp())); - dcPerson('creator', $article->getUser()); - - $contributors = dcContributors($article->mTitle); - - foreach ($contributors as $cid) { - dcPerson('contributor', $cid); - } - - dcRights($article); + global $wgLanguageCode, $wgSitename; + + dcElement('title', $article->mTitle->getText()); + dcPageOrString('publisher', wfMsg('aboutpage'), $wgSitename); + dcElement('language', $wgLanguageCode); + dcElement('type', 'Text'); + dcElement('format', 'text/html'); + dcElement('identifier', dcReallyFullUrl($article->mTitle)); + dcElement('date', dcDate($article->getTimestamp())); + dcPerson('creator', $article->getUser()); + + $contributors = dcContributors($article->mTitle); + + foreach ($contributors as $cid) { + dcPerson('contributor', $cid); + } + + dcRights($article); } /* private */ function ccPrologue() { - global $wgOutputEncoding; - - echo " + global $wgOutputEncoding; + + echo "<" . "?xml version='1.0' encoding='{$wgOutputEncoding}' ?" . "> \n"; + $url = htmlspecialchars( $url ); + echo " \n"; } /* private */ function ccSubEpilogue($type) { - echo " \n"; + echo " \n"; } /* 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; - } - } + + 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; + } + } } /* private */ function ccTerm($term, $name) { - print " \n"; + print " \n"; } /* private */ function ccEpilogue() { - echo "\n"; + echo "\n"; } /* private */ function dcElement($name, $value) { - print " {$value}\n"; + $value = htmlspecialchars( $value ); + print " {$value}\n"; } /* private */ function dcDate($timestamp) { - return substr($timestamp, 0, 4) . "-" - . substr($timestamp, 4, 2) . "-" - . substr($timestamp, 6, 2); + return substr($timestamp, 0, 4) . "-" + . substr($timestamp, 4, 2) . "-" + . substr($timestamp, 6, 2); } /* private */ function dcReallyFullUrl($title) { - $title->getFullURL(); + 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); - } + $nt = Title::newFromText($page); + + if (!$nt || $nt->getArticleID() == 0) { + dcElement($name, $str); + } else { + dcPage($name, $nt); + } } /* private */ function dcPage($name, $title) { - dcUrl($name, dcReallyFullUrl($title)); + dcUrl($name, dcReallyFullUrl($title)); } /* private */ function dcUrl($name, $url) { - print " \n"; + $url = htmlspecialchars( $url ); + print " \n"; } /* private */ function dcPerson($name, $id) { - global $wgLang; - - if ($id == 0) { - dcElement($name, wfMsg("anonymous")); - } else { - $user_name = User::whoIs($id); - dcPageOrString($name, $wgLang->getNsText(NS_USER) . ":" . $user_name, $user_name); - } + global $wgLang; + + if ($id == 0) { + dcElement($name, wfMsg("anonymous")); + } else { + $user_name = User::whoIs($id); + dcPageOrString($name, $wgLang->getNsText(NS_USER) . ":" . $user_name, $user_name); + } } /* private */ function dcContributors($title) { - - $contribs = array(); - - $res = wfQuery("SELECT DISTINCT old_user" . - " FROM old " . - " WHERE old_namespace = " . $title->getNamespace() . - " AND old_title = '" . $title->getDBkey() . "'", DB_READ); - - while ( $line = wfFetchObject( $res ) ) { - $contribs[] = $line->old_user; - } - - return $contribs; + + $contribs = array(); + + $res = wfQuery("SELECT DISTINCT old_user" . + " FROM old " . + " WHERE old_namespace = " . $title->getNamespace() . + " AND old_title = '" . $title->getDBkey() . "'", DB_READ); + + while ( $line = wfFetchObject( $res ) ) { + $contribs[] = $line->old_user; + } + + return $contribs; } /* 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); - } + + 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); + } } /* private */ function ccGetTerms($url) { - global $wgLicenseTerms; - - if (isset($wgLicenseTerms)) { - return $wgLicenseTerms; - } else { - $known = getKnownLicenses(); - return $known[$url]; - } + global $wgLicenseTerms; + + if (isset($wgLicenseTerms)) { + return $wgLicenseTerms; + } else { + $known = getKnownLicenses(); + return $known[$url]; + } } /* private */ function getKnownLicenses() { - - $ccLicenses = array('by', 'by-nd', 'by-nd-nc', 'by-nc', - 'by-nc-sa', 'by-sa', 'nd', 'nd-nc', - 'nc', 'nc-sa', 'sa'); - - $knownLicenses = array(); - - foreach ($ccLicenses as $license) { - $lurl = "http://creativecommons.org/licenses/{$license}/1.0/"; - $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; + + $ccLicenses = array('by', 'by-nd', 'by-nd-nc', 'by-nc', + 'by-nc-sa', 'by-sa', 'nd', 'nd-nc', + 'nc', 'nc-sa', 'sa'); + + $knownLicenses = array(); + + foreach ($ccLicenses as $license) { + $lurl = "http://creativecommons.org/licenses/{$license}/1.0/"; + $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; } ?> diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 89ac0a9ab5..a1a96aad18 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -44,11 +44,17 @@ class OutputPage { # To add an http-equiv meta tag, precede the name with "http:" function addMeta( $name, $val ) { array_push( $this->mMetatags, array( $name, $val ) ); } function addKeyword( $text ) { array_push( $this->mKeywords, $text ); } - function addLink( $rel, $rev, $target, $type="", $media="" ) { array_push( $this->mLinktags, array( $rel, $rev, $target, $type, $media ) ); } + + function addLink( $linkarr ) { + # $linkarr should be an associative array of attributes. We'll escape on output. + array_push( $this->mLinktags, $linkarr ); + } - function addMetadataLink( $type, $target ) { + function addMetadataLink( $linkarr ) { + # note: buggy CC software only reads first "meta" link static $haveMeta = false; - $this->addLink( ($haveMeta) ? "alternate meta" : "meta", "", $target, $type ); + $linkarr["rel"] = ($haveMeta) ? "alternate meta" : "meta"; + $this->addLink( $linkarr ); $haveMeta = true; } @@ -621,7 +627,7 @@ class OutputPage { } function getHeadLinks() { - global $wgRequest; + global $wgRequest, $wgStyleSheetPath; $ret = ""; foreach ( $this->mMetatags as $tag ) { if ( 0 == strcasecmp( "http:", substr( $tag[0], 0, 5 ) ) ) { @@ -641,17 +647,19 @@ class OutputPage { implode( ",", $this->mKeywords ) . "\" />\n"; } foreach ( $this->mLinktags as $tag ) { - $ret .= "\n"; + $ret .= " $val ) { + $ret .= " $attr=\"" . htmlspecialchars( $val ) . "\""; + } + $ret .= " />\n"; } if( $this->isSyndicated() ) { $link = $wgRequest->escapeAppendQuery( "feed=rss" ); $ret .= "\n"; } + # FIXME: get these working + # $fix = htmlspecialchars( $wgStyleSheetPath . "/ie-png-fix.js" ); + # $ret .= ""; return $ret; } } diff --git a/includes/Skin.php b/includes/Skin.php index 20b98b7f62..7c5b78eea9 100644 --- a/includes/Skin.php +++ b/includes/Skin.php @@ -13,10 +13,6 @@ include_once( "Feed.php" ); 'nostalgia' => "Nostalgia", 'cologneblue' => "CologneBlue" ); -if( $wgUseSmarty ) { - $wgValidSkinNames['smarty'] = "Smarty"; - $wgValidSkinNames['montparnasse'] = "Montparnasse"; -} if( $wgUsePHPTal ) { #$wgValidSkinNames[] = "PHPTal"; #$wgValidSkinNames['davinci'] = "DaVinci"; @@ -97,25 +93,47 @@ class Skin { $fname = "Skin::initPage"; wfProfileIn( $fname ); - $out->addLink( "shortcut icon", "", "/favicon.ico" ); - - $this->addMetadataLinks($out); + $out->addLink( array( "rel" => "shortcut icon", "href" => "/favicon.ico" ) ); + + $this->addMetadataLinks($out); wfProfileOut( $fname ); } - function addMetadataLinks( &$out ) { - global $wgTitle, $wgEnableDublinCoreRdf, $wgEnableCreativeCommonsRdf, $wgRdfMimeType, $action; - - if ($action == 'view') { - # note: buggy CC software only reads first "meta" link - if ($wgEnableCreativeCommonsRdf) { - $out->addMetadataLink('application/rdf+xml', wfLocalUrl($wgTitle->getPrefixedURL(), "action=creativecommons")); + function addMetadataLinks( &$out ) { + global $wgTitle, $wgEnableDublinCoreRdf, $wgEnableCreativeCommonsRdf, $wgRdfMimeType, $action; + global $wgRightsPage, $wgRightsUrl; + + if( $out->isArticleRelated() ) { + # note: buggy CC software only reads first "meta" link + if( $wgEnableCreativeCommonsRdf ) { + $out->addMetadataLink( array( + 'title' => 'Creative Commons', + 'type' => 'application/rdf+xml', + 'href' => $wgTitle->getLocalURL( "action=creativecommons") ) ); + } + if( $wgEnableDublinCoreRdf ) { + $out->addMetadataLink( array( + 'title' => 'Dublin Core', + 'type' => 'application/rdf+xml', + 'href' => $wgTitle->getLocalURL( "action=dublincore" ) ) ); + } + } + $copyright = ""; + if( $wgRightsPage ) { + $copy = Title::newFromText( $wgRightsPage ); + if( $copy ) { + $copyright = $copy->getLocalURL(); + } } - if ($wgEnableDublinCoreRdf) { - $out->addMetadataLink('application/rdf+xml', wfLocalUrl($wgTitle->getPrefixedURL(), "action=dublincore")); + if( !$copyright && $wgRightsUrl ) { + $copyright = $wgRightsUrl; + } + if( $copyright ) { + $out->addLink( array( + "rel" => "copyright", + "href" => $copyright ) ); } - } } function outputPage( &$out ) { @@ -2501,9 +2519,6 @@ include_once( "SkinStandard.php" ); include_once( "SkinNostalgia.php" ); include_once( "SkinCologneBlue.php" ); -if( $wgUseSmarty ) { - include_once( "SkinSmarty.php" ); -} if( $wgUsePHPTal ) { include_once( "SkinPHPTal.php" ); } diff --git a/includes/SkinPHPTal.php b/includes/SkinPHPTal.php index 4bc016125b..c85ee325e8 100644 --- a/includes/SkinPHPTal.php +++ b/includes/SkinPHPTal.php @@ -54,7 +54,8 @@ class SkinPHPTal extends Skin { var $template; - function initPage() { + function initPage( &$out ) { + parent::initPage( $out ); $this->skinname = "davinci"; $this->template = "xhtml_slim"; } @@ -71,7 +72,7 @@ $this->titletxt = $wgTitle->getPrefixedText(); - $this->initPage(); + $this->initPage( $out ); $tpl = new PHPTAL($this->template . '.pt', 'templates'); #if ( $wgUseDatabaseMessages ) { // uncomment this to fall back to GetText @@ -403,26 +404,23 @@ } class SkinDaVinci extends SkinPHPTal { - function initPage() { - SkinPHPTal::initPage(); + function initPage( &$out ) { + SkinPHPTal::initPage( $out ); $this->skinname = "davinci"; - $this->template = "xhtml_slim"; } } class SkinMono extends SkinPHPTal { - function initPage() { - SkinPHPTal::initPage(); + function initPage( &$out ) { + SkinPHPTal::initPage( $out ); $this->skinname = "mono"; - $this->template = "xhtml_slim"; } } class SkinMonoBook extends SkinPHPTal { - function initPage() { - SkinPHPTal::initPage(); + function initPage( &$out ) { + SkinPHPTal::initPage( $out ); $this->skinname = "monobook"; - $this->template = "xhtml_slim"; } }