http://www.mediawiki.org/wiki/Special:Code/MediaWiki/89501
Revision: 89501
Author: jeroendedauw
Date: 2011-06-05 14:16:26 +0000 (Sun, 05 Jun 2011)
Log Message:
-----------
made compat fixes for SMW 1.6 to BibTeX format and somewhat decreased it's
codewise insanity level
Modified Paths:
--------------
trunk/extensions/SemanticResultFormats/BibTeX/SRF_BibTeX.php
Modified: trunk/extensions/SemanticResultFormats/BibTeX/SRF_BibTeX.php
===================================================================
--- trunk/extensions/SemanticResultFormats/BibTeX/SRF_BibTeX.php
2011-06-05 14:03:35 UTC (rev 89500)
+++ trunk/extensions/SemanticResultFormats/BibTeX/SRF_BibTeX.php
2011-06-05 14:16:26 UTC (rev 89501)
@@ -56,249 +56,143 @@
protected function getResultText( SMWQueryResult $res, $outputmode ) {
global $wgSitename;
$result = '';
- $items = array();
+
if ( $outputmode == SMW_OUTPUT_FILE ) { // make file
if ( $this->m_title == '' ) {
$this->m_title = $wgSitename;
}
- $row = $res->getNext();
- while ( $row !== false ) {
- $type = '';
- $address = '';
- $annote = '';
- $author = '';
- $booktitle = '';
- $chapter = '';
- $crossref = '';
- $doi = '';
- $edition = '';
- $editor = '';
- $eprint = '';
- $howpublished = '';
- $institution = '';
- $journal = '';
- $key = '';
- $month = '';
- $note = '';
- $number = '';
- $organization = '';
- $pages = '';
- $publisher = '';
- $school = '';
- $series = '';
- $title = '';
- $type = '';
- $url = '';
- $volume = '';
- $year = '';
-
- foreach ( $row as $field ) {
- $req = $field->getPrintRequest();
-
- if ( ( strtolower( $req->getLabel() )
== "type" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $type =
$value->getShortWikiText();
- }
- }
-
-
- if ( ( strtolower( $req->getLabel() )
== "address" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $address =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "annote" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $annote =
$value->getShortWikiText();
- }
- }
- /* for flexibility, we permit 'author'
or 'authors' */
- if ( ( strtolower( $req->getLabel() )
== "author" ) || ( strtolower( $req->getLabel() ) == "authors" ) ) {
- foreach ( $field->getContent()
as $value ) {
- $author .= ( $author ?
' and ':'' ) . $value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "booktitle" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $booktitle =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "chapter" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $chapter =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "crossref" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $crossref =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "doi" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $doi =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "edition" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $edition =
$value->getShortWikiText();
- }
- }
- /* for flexibility, we permit 'editor'
or 'editors' */
- if ( ( strtolower( $req->getLabel() )
== "editor" ) || ( strtolower( $req->getLabel() ) == "editors" ) ) {
- foreach ( $field->getContent()
as $value ) {
- $editor .= ( $editor ?
' and ':'' ) . $value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "eprint" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $eprint =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "howpublished" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $howpublished =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "institution" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $institution =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "journal" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $journal =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "key" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $key =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "note" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $note =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "number" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $number =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "organization" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $organization =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "pages" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $pages =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "publisher" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $publisher =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "school" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $school =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "series" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $series =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "title" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $title =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "url" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $url =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "volume" ) || ( strtolower( $req->getLabel() ) == "journal_volume" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $volume =
$value->getShortWikiText();
- }
- }
-
-
-
- /*if we input a full date for the
"month" and "year" BibTeX attributes, extract the month and year*/
- if ( ( strtolower( $req->getLabel() )
== "date" ) ) {
- $value = current(
$field->getContent() );
- if ( get_class( $value ) ==
'SMWTimeValue' ) {
- if ( $value !== false )
{
- $year =
$value->getYear();
- $month =
$value->getMonth();
- }
- }
- }
-
- if ( ( strtolower( $req->getLabel() )
== "year" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $year =
$value->getShortWikiText();
- }
- }
- if ( ( strtolower( $req->getLabel() )
== "month" ) ) {
- $value = current(
$field->getContent() );
- if ( $value !== false ) {
- $month =
$value->getShortWikiText();
- }
- }
-
-
- }
- $items[] = new SMWBibTeXEntry( $type, $address,
$annote, $author, $booktitle, $chapter, $crossref, $doi, $edition, $editor,
$eprint, $howpublished, $institution, $journal, $key, $month, $note, $number,
$organization, $pages, $publisher, $school, $series, $title, $url, $volume,
$year );
- $row = $res->getNext();
+
+ $items = array();
+
+ while ( $row = $res->getNext() ) {
+ $items[] = $this->getItemForResultRow( $row
)->text();
}
- foreach ( $items as $item ) {
- $result .= $item->text();
- }
+
+ $result = implode( '', $items );
} else { // just make link to export
if ( $this->getSearchLabel( $outputmode ) ) {
$label = $this->getSearchLabel( $outputmode );
} else {
$label = wfMsgForContent( 'srf_bibtex_link' );
}
+
$link = $res->getQueryLink( $label );
$link->setParameter( 'bibtex', 'format' );
+
if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
$link->setParameter( $this->getSearchLabel(
SMW_OUTPUT_WIKI ), 'searchlabel' );
}
+
$result .= $link->getText( $outputmode, $this->mLinker
);
$this->isHTML = ( $outputmode == SMW_OUTPUT_HTML ); //
yes, our code can be viewed as HTML if requested, no more parsing needed
}
+
return $result;
}
+
+ /**
+ * Gets a SMWBibTeXEntry for the row.
+ *
+ * @since 1.6
+ *
+ * @param array of SMWResultArray $row
+ *
+ * @return SMWBibTeXEntry
+ */
+ protected function getItemForResultRow( array /* of SMWResultArray */
$row ) {
+ $type = '';
+ $address = '';
+ $annote = '';
+ $author = '';
+ $booktitle = '';
+ $chapter = '';
+ $crossref = '';
+ $doi = '';
+ $edition = '';
+ $editor = '';
+ $eprint = '';
+ $howpublished = '';
+ $institution = '';
+ $journal = '';
+ $key = '';
+ $month = '';
+ $note = '';
+ $number = '';
+ $organization = '';
+ $pages = '';
+ $publisher = '';
+ $school = '';
+ $series = '';
+ $title = '';
+ $type = '';
+ $url = '';
+ $volume = '';
+ $year = '';
+
+ $var = false;
+ foreach ( $row as /* SMWResultArray */ $field ) {
+ $req = $field->getPrintRequest();
+ $label = strtolower( $req->getLabel() );
+
+ switch ( $label ) {
+ case 'type': $var =& $type; break;
+ case 'address': $var =& $address; break;
+ case 'annote': $var =& $annote; break;
+ case 'booktitle': $var =& $booktitle; break;
+ case 'chapter': $var =& $chapter; break;
+ case 'crossref': $var =& $crossref; break;
+ case 'doi': $var =& $doi; break;
+ case 'edition': $var =& $edition; break;
+ case 'eprint': $var =& $eprint; break;
+ case 'howpublished': $var =& $howpublished;
break;
+ case 'institution': $var =& $institution; break;
+ case 'journal': $var =& $journal; break;
+ case 'key': $var =& $key; break;
+ case 'note': $var =& $note; break;
+ case 'number': $var =& $number; break;
+ case 'organization': $var =& $organization;
break;
+ case 'pages': $var =& $pages; break;
+ case 'publisher': $var =& $publisher; break;
+ case 'school': $var =& $school; break;
+ case 'series': $var =& $series; break;
+ case 'title': $var =& $title; break;
+ case 'url': $var =& $url; break;
+ case 'year': $var =& $year; break;
+ case 'month': $var =& $month; break;
+ case 'volume': case 'journal_volume': $var =&
$volume; break;
+ }
+
+ if ( $var !== false ) {
+ $var = efSRFGetNextDV( $field
)->getShortWikiText();
+ }
+ else {
+ switch ( $label ) {
+ case 'author': case 'authors': case
'editor' : case 'editors':
+ $wikiTexts = array();
+ while ( ( /* SMWDataValue */
$dataValue = efSRFGetNextDV( $field ) ) !== false ) {
+ $wikiTexts[] =
$dataValue->getShortWikiText();
+ }
+ $var =& $label == 'author' ||
$label == 'authors' ? $author : $editor;
+ $var =
$GLOBALS['wgLang']->listToText( $wikiTexts );
+ break;
+ case 'date':
+ $value = efSRFGetNextDV( $field
);
+
+ if ( get_class( $value ) ==
'SMWTimeValue' ) {
+ if ( $value !== false )
{
+ $year =
$value->getYear();
+ $month =
$value->getMonth();
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ return new SMWBibTeXEntry( $type, $address, $annote, $author,
$booktitle, $chapter, $crossref, $doi, $edition, $editor, $eprint,
$howpublished, $institution, $journal, $key, $month, $note, $number,
$organization, $pages, $publisher, $school, $series, $title, $url, $volume,
$year );
+ }
+
public function getParameters() {
if ( defined( 'SMW_SUPPORTS_VALIDATOR' ) ) {
return array_merge( parent::getParameters(),
$this->exportFormatParameters() );
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs
