*** empty log message ***
This commit is contained in:
+300
-206
@@ -2,46 +2,46 @@
|
|||||||
|
|
||||||
== Features ==
|
== Features ==
|
||||||
|
|
||||||
bibtexbrowser is a PHP script to browse and search bib entries from BibTex files. This script is an extended version from an excellent script of the University of Texas at El Paso.
|
bibtexbrowser is a PHP script to browse and search bib entries from BibTex files. Why not have a look at the [demonstration site| https://www.ensieta.fr/~monperma/bibtexbrowser.php ]?
|
||||||
|
|
||||||
Why not have a look at the [demonstration site| https://www.ensieta.fr/~monperma/bibtexbrowser.php ]?
|
|
||||||
|
|
||||||
*[Download bibtexbrowser|pub/bibtexbrowser.php.txt]*
|
*[Download bibtexbrowser|pub/bibtexbrowser.php.txt]*
|
||||||
|
|
||||||
* bibtexbrowser displays the menu and all entries without filtering from the $filename hardcoded in the script
|
<img height="500" src="bibtexbrowser-screenshot.png"/><br/>
|
||||||
[bibtexbrowser.php]
|
|
||||||
* bibtexbrowser displays the menu and all entries without filtering from the file name passed as parameter
|
* [bibtexbrowser can display the menu and all entries without filtering from the $filename hardcoded in the script |bibtexbrowser.php]
|
||||||
[bibtexbrowser.php?bib=uml.bib]
|
* [bibtexbrowser can display the menu and all entries without filtering from the file name passed as parameter|bibtexbrowser.php?bib=uml.bib]
|
||||||
* bibtexbrowser displays all entries
|
* [bibtexbrowser can display all entries|bibtexbrowser.php?bib=uml.bib&all]
|
||||||
[bibtexbrowser.php?bib=uml.bib&all]
|
* [bibtexbrowser can display all entries for a given year|bibtexbrowser.php?bib=uml.bib&year=2004]
|
||||||
* bibtexbrowser displays all entries for a given year
|
* [bibtexbrowser can display all entries for an author|bibtexbrowser.php?bib=biblio_monperrus.bib&author=Jack+Goody]
|
||||||
[bibtexbrowser.php?bib=uml.bib&year=2004]
|
* [bibtexbrowser can display a single entry|bibtexbrowser.php?bib=biblio_monperrus.bib&key=Krantz]
|
||||||
* bibtexbrowser displays all entries for an author
|
* [bibtexbrowser can display all entries with a bib keyword|bibtexbrowser.php?bib=biblio_monperrus.bib&tag=mda]
|
||||||
[bibtexbrowser.php?bib=biblio_monperrus.bib&author=Jack+Goody]
|
* [bibtexbrowser can display found entries with a search word (it can be in any bib field)|bibtexbrowser.php?bib=biblio_monperrus.bib&search=ocl]
|
||||||
* bibtexbrowser displays a single entry
|
|
||||||
[bibtexbrowser.php?bib=biblio_monperrus.bib&key=Krantz]
|
|
||||||
* bibtexbrowser displays all entries with a bib keyword
|
|
||||||
[bibtexbrowser.php?bib=biblio_monperrus.bib&tag=mda]
|
|
||||||
* bibtexbrowser displays found entries with a search word (it can be in any bib field)
|
|
||||||
[bibtexbrowser.php?bib=biblio_monperrus.bib&search=ocl]
|
|
||||||
|
|
||||||
== Related tools ==
|
== Related tools ==
|
||||||
|
|
||||||
|
Old-fashioned:
|
||||||
[bibhtml|http://nxg.me.uk/dist/bibhtml/], [bib2html|http://www.litech.org/~wkiri/bib2html/], [bibtohtml|http://ilab.usc.edu/bibTOhtml/], [bibtextohtml|http://people.csail.mit.edu/rahimi/bibtex/], [bibtex2html|http://www.lri.fr/~filliatr/bibtex2html/], [bibtex2web|http://people.csail.mit.edu/mernst/software/bibtex2web.html ]
|
[bibhtml|http://nxg.me.uk/dist/bibhtml/], [bib2html|http://www.litech.org/~wkiri/bib2html/], [bibtohtml|http://ilab.usc.edu/bibTOhtml/], [bibtextohtml|http://people.csail.mit.edu/rahimi/bibtex/], [bibtex2html|http://www.lri.fr/~filliatr/bibtex2html/], [bibtex2web|http://people.csail.mit.edu/mernst/software/bibtex2web.html ]
|
||||||
Unlike them, *bibtexbrowser is dynamic*.
|
Unlike them, *bibtexbrowser is dynamic*.i.e.; generates the HTML pages on the files
|
||||||
Thus, you do not need to regenerate the static HTML files each time the bib file is changed.
|
Thus, you do not need to regenerate the static HTML files each time the bib file is changed.
|
||||||
Furthermore you can search any string in it.
|
Furthermore you can search any string in it.
|
||||||
|
|
||||||
|
Heavyweight:
|
||||||
[PHP BibTeX Database Manager|http://www.rennes.supelec.fr/ren/perso/etotel/PhpBibtexDbMng/], [bibadmin|http://gforge.inria.fr/projects/bibadmin/], [basilic|http://artis.imag.fr/Software/Basilic/], [phpbibman|http://phpbibman.sourceforge.net/]
|
[PHP BibTeX Database Manager|http://www.rennes.supelec.fr/ren/perso/etotel/PhpBibtexDbMng/], [bibadmin|http://gforge.inria.fr/projects/bibadmin/], [basilic|http://artis.imag.fr/Software/Basilic/], [phpbibman|http://phpbibman.sourceforge.net/]
|
||||||
Unlike them, *bibtexbrowser does not need a MySQL database* and does not need a tedious import step each time the bib file is changed.
|
Unlike them, *bibtexbrowser does not need a MySQL database* and does not need a tedious import step each time the bib file is changed.
|
||||||
|
|
||||||
|
Main competitors:
|
||||||
[SimplyBibtex|http://code.google.com/p/simplybibtex/] has the same spirit and makes different architectural and presentation choices
|
[SimplyBibtex|http://code.google.com/p/simplybibtex/] has the same spirit and makes different architectural and presentation choices
|
||||||
=> but *bibtexbrowser is much more lightweight* (just one file!).
|
=> *bibtexbrowser is much more lightweight* (just one file!).
|
||||||
|
[BibBase|http://www.cs.toronto.edu/~fritz/bibbase/] is a nice and very similar script, but written in Perl
|
||||||
|
=> *bibtexbrowser does not require a CGI/Perl compliant webserver* .
|
||||||
|
|
||||||
[Misc: a matlab script is similar | http://www.sat.ltu.se/publications/publications.m]
|
Misc:
|
||||||
|
[This matlab ;-) script is similar | http://www.sat.ltu.se/publications/publications.m]
|
||||||
|
|
||||||
== Copyright ==
|
== Copyright ==
|
||||||
|
|
||||||
|
This script is a fork from an excellent script of the University of Texas at El Paso.
|
||||||
|
|
||||||
(C) 2006-2007-2008 [Martin Monperrus|https://www.ensieta.fr/~monperma/] - Don't hesitate to contact me :-)
|
(C) 2006-2007-2008 [Martin Monperrus|https://www.ensieta.fr/~monperma/] - Don't hesitate to contact me :-)
|
||||||
(C) 2005-2006 The University of Texas at El Paso / Joel Garcia, Leonardo Ruiz, and Yoonsik Cheon
|
(C) 2005-2006 The University of Texas at El Paso / Joel Garcia, Leonardo Ruiz, and Yoonsik Cheon
|
||||||
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
||||||
@@ -82,6 +82,7 @@ define('Q_RESULT', 'result');
|
|||||||
define('AUTHOR', 'author');
|
define('AUTHOR', 'author');
|
||||||
define('EDITOR', 'editor');
|
define('EDITOR', 'editor');
|
||||||
define('TITLE', 'title');
|
define('TITLE', 'title');
|
||||||
|
define('BOOKTITLE', 'booktitle');
|
||||||
define('YEAR', 'year');
|
define('YEAR', 'year');
|
||||||
|
|
||||||
error_reporting(E_ERROR);
|
error_reporting(E_ERROR);
|
||||||
@@ -97,9 +98,9 @@ if (isset($_GET[Q_FILE])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// parse a new bib file, if requested
|
// parse a new bib file, if requested
|
||||||
if (isset($_SESSION[Q_FILE]) && isset($_SESSION['main']) && ($filename == $_SESSION[Q_FILE])) {
|
if (isset($_SESSION[Q_FILE]) && ($filename == $_SESSION[Q_FILE]) && isset($_SESSION['main'])) {
|
||||||
$_SESSION['main'] = $_SESSION['main'];
|
// nothing to do
|
||||||
} else {
|
} else { // refresh
|
||||||
$_SESSION['main'] = new DisplayManager(new BibDataBase($filename));
|
$_SESSION['main'] = new DisplayManager(new BibDataBase($filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,9 +109,10 @@ $_SESSION[Q_FILE] = $filename;
|
|||||||
if (isset($_GET[Q_KEY])&&(isset($_SESSION['main']->db->bibdb[$_GET[Q_KEY]]))) {//__devonly__
|
if (isset($_GET[Q_KEY])&&(isset($_SESSION['main']->db->bibdb[$_GET[Q_KEY]]))) {//__devonly__
|
||||||
$bot_regexp="googlebot|slurp|msnbot|fast|exabot";//__devonly__
|
$bot_regexp="googlebot|slurp|msnbot|fast|exabot";//__devonly__
|
||||||
if (!eregi($bot_regexp,$_SERVER['HTTP_USER_AGENT'])) {//__devonly__
|
if (!eregi($bot_regexp,$_SERVER['HTTP_USER_AGENT'])) {//__devonly__
|
||||||
//include('tpl_probe.php');//__devonly__
|
|
||||||
$entry = $_SESSION['main']->db->getEntryByKey($_GET[Q_KEY]);//__devonly__
|
$entry = $_SESSION['main']->db->getEntryByKey($_GET[Q_KEY]);//__devonly__
|
||||||
//tinyphplog_log($_GET[Q_FILE].'#'.$entry->getTitle(),"logs-bibtexbrowser.txt");//__devonly__
|
$file = fopen ("logs-bibtexbrowser.clf", "a");//__devonly__
|
||||||
|
fputs($file,gethostbyaddr($_SERVER["REMOTE_ADDR"])." - - [".date("d/M/Y:H:i:s O")."] \"GET ".str_replace('"','',$entry->getTitle())." HTTP/1.1\" 200 0 \"".str_replace('"','',$_SERVER['HTTP_REFERER'])."\" \"".str_replace('"','',$_SERVER['HTTP_USER_AGENT'])."\"\n");//__devonly__
|
||||||
|
fclose($file);//__devonly__
|
||||||
}//__devonly__
|
}//__devonly__
|
||||||
}//__devonly__
|
}//__devonly__
|
||||||
|
|
||||||
@@ -311,7 +313,7 @@ class BibEntry {
|
|||||||
|
|
||||||
/** Returns the type of this bib entry. */
|
/** Returns the type of this bib entry. */
|
||||||
function getType() {
|
function getType() {
|
||||||
return $this->type;
|
return strtolower($this->type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Has this entry the given field? */
|
/** Has this entry the given field? */
|
||||||
@@ -342,6 +344,16 @@ class BibEntry {
|
|||||||
return $this->getField('title');
|
return $this->getField('title');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns the authors of this entry? */
|
||||||
|
function getAuthors() {
|
||||||
|
return $this->getField('author');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Returns the year of this entry? */
|
||||||
|
function getYear() {
|
||||||
|
return $this->getField('year');
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns the value of the given field? */
|
/** Returns the value of the given field? */
|
||||||
function getField($name) {
|
function getField($name) {
|
||||||
if ($this->hasField($name))
|
if ($this->hasField($name))
|
||||||
@@ -381,6 +393,113 @@ class BibEntry {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Outputs a default string
|
||||||
|
* You may use a toStringX as alternative
|
||||||
|
*/
|
||||||
|
function toString() {
|
||||||
|
$author = compactAuthor($this->getAuthor());
|
||||||
|
$id = $this->getId();
|
||||||
|
$key = $this->getKey();
|
||||||
|
$title = $this->getField(TITLE);
|
||||||
|
$type = $this->getType();
|
||||||
|
$href = makeHref(array(Q_KEY => urlencode($key)));
|
||||||
|
echo '<tr>';
|
||||||
|
echo '<td class="bibline"><a name="'.$id.'"></a>['.$id.']</td> ';
|
||||||
|
|
||||||
|
|
||||||
|
echo '<td>';
|
||||||
|
echo '<b>'.$title.'</b>';
|
||||||
|
|
||||||
|
if ($type=="proceedings") echo ' ('.str_replace(' and ',', ',$this->getField("editor")).')';
|
||||||
|
else echo ' ('.str_replace(' and ',', ',$this->getAuthors()).')';
|
||||||
|
|
||||||
|
|
||||||
|
if (($type=="inproceedings") || ($type=="incollection")) {
|
||||||
|
echo " In <i>".$this->getField(BOOKTITLE)."</i>";
|
||||||
|
}
|
||||||
|
if ($type=="article") {
|
||||||
|
echo " In <i>".$this->getField("journal")."</i>";
|
||||||
|
echo ", volume ".$this->getField("volume");
|
||||||
|
}
|
||||||
|
echo ", ".$this->getYear().".";
|
||||||
|
echo " <a {$href}>[bib]</a>";
|
||||||
|
if ($this->hasField('url')) {
|
||||||
|
echo ' <a href="'.$this->getField("url").'">[pdf]</a>';
|
||||||
|
}
|
||||||
|
echo '</td></tr>';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Alternative */
|
||||||
|
function toString2() {
|
||||||
|
$author = compactAuthor($this->getAuthor());
|
||||||
|
$id = $this->getId();
|
||||||
|
$key = $this->getKey();
|
||||||
|
$title = $this->getField(TITLE);
|
||||||
|
$type = $this->getType();
|
||||||
|
$href = makeHref(array(Q_KEY => urlencode($key)));
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<td class="a_name">
|
||||||
|
<?php echo $author;?>
|
||||||
|
</td>
|
||||||
|
<td><a <?php echo $href; ?>><?php echo $title; ?></a></td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Alternative */
|
||||||
|
function toString3() {
|
||||||
|
$author = compactAuthor($this->getAuthor());
|
||||||
|
$id = $this->getId();
|
||||||
|
$key = $this->getKey();
|
||||||
|
$title = $this->getField(TITLE);
|
||||||
|
$type = $this->getType();
|
||||||
|
$href = makeHref(array(Q_KEY => urlencode($key)));
|
||||||
|
|
||||||
|
echo '<tr><td colspan="2">';
|
||||||
|
|
||||||
|
if ($type=="proceedings") echo str_replace(' and ',', ',$this->getField("editor"));
|
||||||
|
else echo str_replace(' and ',', ',$this->getAuthors());
|
||||||
|
echo '<br/>';
|
||||||
|
|
||||||
|
echo '<b>'.$title.'</b>';
|
||||||
|
echo '<br/>';
|
||||||
|
|
||||||
|
|
||||||
|
if (($type=="inproceedings") || ($type=="incollection")) {
|
||||||
|
echo " In <i>".$this->getField(BOOKTITLE)."</i>";
|
||||||
|
}
|
||||||
|
if ($type=="article") {
|
||||||
|
echo " In <i>".$this->getField("journal")."</i>";
|
||||||
|
}
|
||||||
|
echo '<br/>';
|
||||||
|
|
||||||
|
echo " <a {$href}>[bib]</a>";
|
||||||
|
if ($this->hasField('url')) {
|
||||||
|
echo ' <a href="'.$this->getField("url").'">[pdf]</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
echo '</td></tr>';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a unformated (verbatim) text of the given bib entry.
|
||||||
|
* The text is displayed in <pre><code></code></pre> tag.
|
||||||
|
* The object may be mutated to read the rest of the fields.
|
||||||
|
*/
|
||||||
|
function toEntryUnformatted() {
|
||||||
|
$text =$this->getText();
|
||||||
|
?>
|
||||||
|
<!-- Note that the indentation does matter in the PRE tag -->
|
||||||
|
<pre><code><?php echo $text; ?></code></pre>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
@@ -572,7 +691,7 @@ else $page = 1;
|
|||||||
} else if (isset($_GET[Q_AUTHOR])) {
|
} else if (isset($_GET[Q_AUTHOR])) {
|
||||||
$to_find = urldecode($_GET[Q_AUTHOR]);
|
$to_find = urldecode($_GET[Q_AUTHOR]);
|
||||||
$searched = $this->db->search($to_find, array('author'));
|
$searched = $this->db->search($to_find, array('author'));
|
||||||
$header = 'Publications of ' . ucwords($to_find);
|
$header = 'Publications of ' . ucwords($to_find).' in '.$_SESSION[Q_FILE] ;
|
||||||
$result = new ResultDisplay($searched, $header,array(Q_AUTHOR => $to_find));
|
$result = new ResultDisplay($searched, $header,array(Q_AUTHOR => $to_find));
|
||||||
// clicking a type, a menu item from the types menu?
|
// clicking a type, a menu item from the types menu?
|
||||||
} else if(isset($_GET[Q_TAG])) {
|
} else if(isset($_GET[Q_TAG])) {
|
||||||
@@ -606,6 +725,7 @@ else $page = 1;
|
|||||||
// requesting a differen page of type or author menus?
|
// requesting a differen page of type or author menus?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// display
|
// display
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
@@ -718,9 +838,17 @@ class ResultDisplay {
|
|||||||
/** the page number to display. */
|
/** the page number to display. */
|
||||||
var $page;
|
var $page;
|
||||||
|
|
||||||
/** the original filter author, year, etc */
|
/** the start index to display. */
|
||||||
|
var $startIndex;
|
||||||
|
|
||||||
|
/** the end index to display. */
|
||||||
|
var $endIndex;
|
||||||
|
|
||||||
|
/** the original filter author, year, etc */
|
||||||
var $filter;
|
var $filter;
|
||||||
|
|
||||||
|
/** the content strategy (cf. pattern strategy) */
|
||||||
|
var $headerStrategy;
|
||||||
|
|
||||||
/** Creates an instance with the given entries and header. */
|
/** Creates an instance with the given entries and header. */
|
||||||
function ResultDisplay(&$result, $header,$filter) {
|
function ResultDisplay(&$result, $header,$filter) {
|
||||||
@@ -728,6 +856,7 @@ class ResultDisplay {
|
|||||||
$this->header = $header;
|
$this->header = $header;
|
||||||
$this->page = 1;
|
$this->page = 1;
|
||||||
$this->filter = $filter;
|
$this->filter = $filter;
|
||||||
|
$this->contentStrategy = new DefaultContentStrategy();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets the page number to display. */
|
/** Sets the page number to display. */
|
||||||
@@ -735,26 +864,20 @@ class ResultDisplay {
|
|||||||
$this->page = $page;
|
$this->page = $page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns the powered by part */
|
||||||
|
function poweredby() {
|
||||||
|
$poweredby = '<div class="poweredby">';
|
||||||
|
$poweredby .= '<a href="nodocbc.php?f=bibtexbrowser.php.txt">';//__devonly__
|
||||||
|
$poweredby .= ' Powered by bibtexbrowser';
|
||||||
|
$poweredby .= '</a>';//__devonly__
|
||||||
|
$poweredby .= '</div>';
|
||||||
|
return $poweredby;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Displays the entries preceded with the header. */
|
/** Displays the entries preceded with the header. */
|
||||||
function display() {
|
function display() {
|
||||||
$this->displayHeader($this->header);
|
|
||||||
$this->displayContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Displays the header stringg. */
|
|
||||||
function displayHeader() {
|
|
||||||
$header = $this->header ? $this->header : " ";
|
|
||||||
echo "<div class=\"rheader\"><b>$header</b></div><br/>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays the summary information of each bib entries of the
|
|
||||||
* current page. For each entry, this method displays the author,
|
|
||||||
* title, and type; the bib entries are displayed grouped by the
|
|
||||||
* publication years. If the bib list is empty, an error message is
|
|
||||||
* displayed.
|
|
||||||
*/
|
|
||||||
function displayContents() {
|
|
||||||
$page = $this->page;
|
$page = $this->page;
|
||||||
|
|
||||||
// print error message if no entry.
|
// print error message if no entry.
|
||||||
@@ -763,63 +886,27 @@ class ResultDisplay {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// print a page bar, a list of clickable page numbers
|
$noPages = ceil(count($this->result) / PAGE_SIZE);
|
||||||
$pageSize = PAGE_SIZE; // no. of entries per page
|
|
||||||
$noPages = ceil(count($this->result) / $pageSize);
|
|
||||||
|
|
||||||
if ($noPages>1) $this->displayPageBar($noPages, $page);
|
if ($noPages>1) $this->displayPageBar($noPages, $page);
|
||||||
|
|
||||||
// create a year -> entries map to display by years
|
$this->startIndex = ($page - 1) * PAGE_SIZE;
|
||||||
$years = array();
|
$this->endIndex =$this->startIndex + PAGE_SIZE;
|
||||||
foreach ($this->result as $e) {
|
|
||||||
$y = trim($e->getField(YEAR));
|
|
||||||
$years[$y][] = $e;
|
|
||||||
}
|
|
||||||
krsort($years);
|
|
||||||
|
|
||||||
$startIndex = ($page - 1) * $pageSize;
|
/** Displays the header stringg. */
|
||||||
$endIndex = $startIndex + $pageSize;
|
if ($this->header!="") echo "<div class=\"rheader\">{$this->header}</div>\n";
|
||||||
$index = 0;
|
|
||||||
?>
|
|
||||||
|
|
||||||
<table class="result" >
|
$this->contentStrategy->display($this);
|
||||||
<?php
|
echo '<br/>';
|
||||||
foreach ($years as $year => $entries) {
|
if ($noPages>1) $this->displayPageBar($noPages, $page);
|
||||||
if ($index >= $endIndex) { break; }
|
|
||||||
|
echo $this->poweredby();
|
||||||
|
|
||||||
if ($index >= $startIndex && $index < $endIndex) {
|
|
||||||
?>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2" class="header"><?php echo $year; ?></td>
|
|
||||||
</tr>
|
|
||||||
<?php
|
|
||||||
}
|
}
|
||||||
foreach ($entries as $bib) {
|
|
||||||
if ($index >= $startIndex && $index < $endIndex) {
|
function isDisplayed($index) {
|
||||||
$author = compactAuthor($bib->getAuthor());
|
if ($index >= $this->startIndex && $index < $this->endIndex) return true;
|
||||||
$id = $bib->getId();
|
return false;
|
||||||
$key = $bib->getKey();
|
|
||||||
$title = $bib->getField(TITLE);
|
|
||||||
$type = $bib->getType();
|
|
||||||
$href = makeHref(array(Q_KEY => urlencode($key)));
|
|
||||||
?>
|
|
||||||
<tr>
|
|
||||||
<td class="a_name">
|
|
||||||
<?php echo $author;?>
|
|
||||||
</td>
|
|
||||||
<td><a <?php echo $href; ?>><?php echo $title; ?></a><br/>
|
|
||||||
(<?php echo $type; ?>)
|
|
||||||
<div class="mini_se"></div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
$index++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</table>
|
|
||||||
<?php
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Displays a page bar consisting of clickable page numbers. */
|
/** Displays a page bar consisting of clickable page numbers. */
|
||||||
@@ -873,22 +960,81 @@ class ResultDisplay {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Class to display a single bibentry. */
|
|
||||||
class ErrorDisplay extends ResultDisplay {
|
|
||||||
/** Creates an instance of ErrorDisplay */
|
/**
|
||||||
function ErrorDisplay() {
|
* Displays the summary information of each bib entries of the
|
||||||
$this->header = "Error";
|
* current page. For each entry, this method displays the author,
|
||||||
|
* title; the bib entries are displayed grouped by the
|
||||||
|
* publication years. If the bib list is empty, an error message is
|
||||||
|
* displayed.
|
||||||
|
*/
|
||||||
|
class DefaultContentStrategy {
|
||||||
|
|
||||||
|
function display($display) {
|
||||||
|
// create a year -> entries map to display by years
|
||||||
|
$years = array();
|
||||||
|
foreach ($display->result as $e) {
|
||||||
|
$y = trim($e->getField(YEAR));
|
||||||
|
$years[$y][$e->getKey()] = $e;
|
||||||
}
|
}
|
||||||
|
krsort($years);
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<table class="result" >
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$index = 0;
|
||||||
|
$refnum = count($display->result);
|
||||||
|
foreach ($years as $year => $entries) {
|
||||||
|
|
||||||
|
|
||||||
|
if ($display->isDisplayed($index)) {
|
||||||
|
?>
|
||||||
|
<tr class="date">
|
||||||
|
<td colspan="2" class="header"><?php echo $year; ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
// sort by keys, enable a nice sorting as Dupont2008a, Dupont2008b, Dupont2008c
|
||||||
|
ksort($entries);
|
||||||
|
foreach ($entries as $bib) {
|
||||||
|
if ($display->isDisplayed($index)) {
|
||||||
|
$bib->id = $refnum--;
|
||||||
|
$bib->toString();
|
||||||
|
}
|
||||||
|
$index++;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</table>
|
||||||
|
<?php
|
||||||
|
} // end function
|
||||||
|
} // end class
|
||||||
|
|
||||||
|
|
||||||
|
class ErrorDisplay {
|
||||||
|
|
||||||
/** Displays en error message */
|
/** Displays en error message */
|
||||||
function displayContents() {
|
function display() {
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<b>Sorry, this bib entry does not exist.</b>
|
<b>Sorry, this bib entry does not exist.</b>
|
||||||
|
<a href="?">Back to bibtexbrowser</a>
|
||||||
|
|
||||||
<?
|
<?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SingleBibEntryContentStrategy {
|
||||||
|
function display($display) {
|
||||||
|
$display->result->toEntryUnformatted();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Class to display a single bibentry. */
|
/** Class to display a single bibentry. */
|
||||||
class SingleResultDisplay extends ResultDisplay {
|
class SingleResultDisplay extends ResultDisplay {
|
||||||
|
|
||||||
@@ -898,71 +1044,10 @@ class SingleResultDisplay extends ResultDisplay {
|
|||||||
*/
|
*/
|
||||||
function SingleResultDisplay(&$bibentry) {
|
function SingleResultDisplay(&$bibentry) {
|
||||||
$this->result = $bibentry;
|
$this->result = $bibentry;
|
||||||
$this->header = 'Bibtex entry: '.$this->result->getTitle();
|
$this->header = 'Bibtex entry: '.$this->result->getTitle().' in '.$_SESSION[Q_FILE];
|
||||||
|
$this->contentStrategy = new SingleBibEntryContentStrategy();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Displays the bib entry, both in the formatted and raw text.
|
|
||||||
* The object may be mutated. */
|
|
||||||
function displayContents() {
|
|
||||||
if ($this->result) {
|
|
||||||
$this->displayEntryFormatted($this->result);
|
|
||||||
echo '<br/><div class="header">BibTeX entry:</div>';
|
|
||||||
$this->displayEntryUnformatted($this->result);
|
|
||||||
global $filename;
|
|
||||||
//echo '<a target="_top" "'.makeHref().'">Continue to browse '.$filename.'</a>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays a unformated (verbatim) text of the given bib entry.
|
|
||||||
* The text is displayed in <pre><code></code></pre> tag.
|
|
||||||
* The object may be mutated to read the rest of the fields.
|
|
||||||
*/
|
|
||||||
function displayEntryUnformatted(&$entry) {
|
|
||||||
$text =$entry->getText();
|
|
||||||
?>
|
|
||||||
<!-- Note that the indentation does matter in the PRE tag -->
|
|
||||||
<pre><code><?php echo $text; ?></code></pre>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Displays a formatted text of the given bib entry. The text is
|
|
||||||
* displayed in a table. The object may be mutated to read the
|
|
||||||
* rest of fields.
|
|
||||||
*/
|
|
||||||
function displayEntryFormatted(&$bib) {
|
|
||||||
$author = $bib->getAuthor();
|
|
||||||
$type = $bib->getType();
|
|
||||||
|
|
||||||
// display heading: author (type)
|
|
||||||
?>
|
|
||||||
<table class="result">
|
|
||||||
<tr>
|
|
||||||
<td colspan="2">
|
|
||||||
<span class="bit_big"><b><?php echo $author; ?></b></span> (<?php echo $type;?>)
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
// display all fields: name and value pairs
|
|
||||||
foreach ($bib->getFields() as $name => $value) {
|
|
||||||
if ($name == 'key') { continue; } // skip the key field
|
|
||||||
// make href if URL
|
|
||||||
if ($name == 'url') $dval = "<a href=\"$value\">$value</a>";
|
|
||||||
else if ($name == 'doi') $dval = "<a href=\"http://dx.doi.org/$value\">$value</a>";
|
|
||||||
else $dval = $value;
|
|
||||||
?>
|
|
||||||
<tr>
|
|
||||||
<td class="header"><?php echo ucwords($name); ?></td>
|
|
||||||
<td><?php echo $dval; ?></td>
|
|
||||||
</tr>
|
|
||||||
<?php
|
|
||||||
} // foreach
|
|
||||||
?>
|
|
||||||
</table>
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
@@ -1109,7 +1194,7 @@ class BibDataBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function printHTMLHeaders($title) {
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
@@ -1117,6 +1202,7 @@ class BibDataBase {
|
|||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
|
||||||
<meta name="generator" content="bibtexbrowser vDEVVERSION" />
|
<meta name="generator" content="bibtexbrowser vDEVVERSION" />
|
||||||
|
<title><?php echo $title; ?></title>
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
<!--
|
<!--
|
||||||
body {
|
body {
|
||||||
@@ -1125,10 +1211,9 @@ body {
|
|||||||
margin: 0px;
|
margin: 0px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
td {
|
|
||||||
font-size: xx-small;
|
|
||||||
vertical-align:top;
|
|
||||||
}
|
|
||||||
.title {
|
.title {
|
||||||
color: #003366;
|
color: #003366;
|
||||||
font-size: 20pt;
|
font-size: 20pt;
|
||||||
@@ -1141,6 +1226,7 @@ td {
|
|||||||
padding: 1px 2px 1px 2px;
|
padding: 1px 2px 1px 2px;
|
||||||
}
|
}
|
||||||
.rheader {
|
.rheader {
|
||||||
|
font-weight: bold;
|
||||||
background-color: #003366;
|
background-color: #003366;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
padding: 2px;
|
padding: 2px;
|
||||||
@@ -1149,6 +1235,7 @@ td {
|
|||||||
|
|
||||||
}
|
}
|
||||||
.menu {
|
.menu {
|
||||||
|
font-size: x-small;
|
||||||
background-color: #EFDDB4;
|
background-color: #EFDDB4;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
border: 1px solid #000000;
|
border: 1px solid #000000;
|
||||||
@@ -1165,6 +1252,15 @@ td {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bibline {
|
||||||
|
padding:7px;
|
||||||
|
padding-left:15px;
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
TD { vertical-align:text-top; }
|
||||||
|
|
||||||
.result {
|
.result {
|
||||||
padding:0px;
|
padding:0px;
|
||||||
border: 1px solid #000000;
|
border: 1px solid #000000;
|
||||||
@@ -1213,50 +1309,48 @@ pre {
|
|||||||
-->
|
-->
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<?php
|
|
||||||
$result = $_SESSION['main']->mainVC();
|
|
||||||
?>
|
|
||||||
|
|
||||||
<title>
|
|
||||||
<?
|
|
||||||
if ($result != null) echo $result->header;
|
|
||||||
else echo 'You are browsing '.$filename.' with bibtexbrowser';
|
|
||||||
?>
|
|
||||||
</title>
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
<body>
|
||||||
<?
|
<?
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $_SESSION['main']->mainVC();
|
||||||
|
$included=(__FILE__!=$_SERVER['SCRIPT_FILENAME']);
|
||||||
if (isset($_GET['menu']))
|
if (isset($_GET['menu']))
|
||||||
{
|
{
|
||||||
echo '<body>';
|
printHTMLHeaders("Menu of bibtexbrowser");
|
||||||
echo $_SESSION['main']->searchView();
|
echo $_SESSION['main']->searchView();
|
||||||
echo $_SESSION['main']->typeVC().'<br/>';
|
echo $_SESSION['main']->typeVC().'<br/>';
|
||||||
echo $_SESSION['main']->yearVC().'<br/>';
|
echo $_SESSION['main']->yearVC().'<br/>';
|
||||||
echo $_SESSION['main']->authorVC().'<br/>';
|
echo $_SESSION['main']->authorVC().'<br/>';
|
||||||
echo $_SESSION['main']->tagVC().'<br/>';
|
echo $_SESSION['main']->tagVC().'<br/>';
|
||||||
echo '</body>';
|
echo '</body></html>';
|
||||||
} // end isset($_GET['menu']
|
} // end isset($_GET['menu']
|
||||||
else {
|
else if ($result !== null) { // !== is needed because an ErrorDisplay object does not contain variables
|
||||||
if ($result != null) {
|
|
||||||
echo '<body>';
|
|
||||||
$result->display();
|
|
||||||
$poweredby = '<div class="poweredby">';
|
|
||||||
$poweredby .= '<a href="nodocbc.php?f=bibtexbrowser.php.txt">';//__devonly__
|
|
||||||
$poweredby .= ' Powered by bibtexbrowser';
|
|
||||||
$poweredby .= '</a>';//__devonly__
|
|
||||||
$poweredby .= '</div>';
|
|
||||||
echo $poweredby;
|
|
||||||
echo '</body>';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
?>
|
|
||||||
<frameset cols="15%,*">
|
|
||||||
<frame name="menu" src="<?php echo $_SERVER['SCRIPT_NAME'] .'?'.Q_FILE.'='. urlencode($filename).'&menu'; ?>" />
|
|
||||||
<frame name="main" src="<?php echo $_SERVER['SCRIPT_NAME'] .'?'.Q_FILE.'='. urlencode($filename).'&all'; ?>" />
|
|
||||||
</frameset>
|
|
||||||
<?
|
|
||||||
}
|
|
||||||
} ?>
|
|
||||||
|
|
||||||
</html>
|
if (!$included) printHTMLHeaders($result->header);
|
||||||
|
$result->display();
|
||||||
|
if (!$included) echo '</body></html>';
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (!$included) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="bibtexbrowser vDEVVERSION" />
|
||||||
|
<title>You are browsing <?php echo $filename; ?> with bibtexbrowser</title>
|
||||||
|
</head>
|
||||||
|
<frameset cols="15%,*">
|
||||||
|
<frame name="menu" src="<?php echo $_SERVER['SCRIPT_NAME'] .'?'.Q_FILE.'='. urlencode($filename).'&menu'; ?>" />
|
||||||
|
<frame name="main" src="<?php echo $_SERVER['SCRIPT_NAME'] .'?'.Q_FILE.'='. urlencode($filename).'&all'; ?>" />
|
||||||
|
</frameset>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<?
|
||||||
|
}
|
||||||
|
// if we are included; do nothing bibtexbrowser.php is used as a library
|
||||||
|
|||||||
Reference in New Issue
Block a user