|
@ -53,7 +53,7 @@ define('BIBTEXBROWSER','v__GITHUB__'); |
|
|
// the target frame of menu links
|
|
|
// the target frame of menu links
|
|
|
@define('BIBTEXBROWSER_MENU_TARGET','main'); // might be define('BIBTEXBROWSER_MENU_TARGET','_self'); in bibtexbrowser.local.php
|
|
|
@define('BIBTEXBROWSER_MENU_TARGET','main'); // might be define('BIBTEXBROWSER_MENU_TARGET','_self'); in bibtexbrowser.local.php
|
|
|
|
|
|
|
|
|
@define('ABBRV_TYPE','index');// may be year/x-abbrv/key/none/index
|
|
|
|
|
|
|
|
|
@define('ABBRV_TYPE','index');// may be year/x-abbrv/key/none/index/keys-index
|
|
|
|
|
|
|
|
|
// Wrapper to use when we are included by another script
|
|
|
// Wrapper to use when we are included by another script
|
|
|
@define('BIBTEXBROWSER_EMBEDDED_WRAPPER', 'NoWrapper'); |
|
|
@define('BIBTEXBROWSER_EMBEDDED_WRAPPER', 'NoWrapper'); |
|
@ -108,6 +108,7 @@ define('BIBTEXBROWSER','v__GITHUB__'); |
|
|
@define('Q_ALL', 'all'); |
|
|
@define('Q_ALL', 'all'); |
|
|
@define('Q_ENTRY', 'entry'); |
|
|
@define('Q_ENTRY', 'entry'); |
|
|
@define('Q_KEY', 'key'); |
|
|
@define('Q_KEY', 'key'); |
|
|
|
|
|
@define('Q_KEYS', 'keys'); // filter entries using a url-encoded, JSON-encoded array of bibtex keys
|
|
|
@define('Q_SEARCH', 'search'); |
|
|
@define('Q_SEARCH', 'search'); |
|
|
@define('Q_EXCLUDE', 'exclude'); |
|
|
@define('Q_EXCLUDE', 'exclude'); |
|
|
@define('Q_RESULT', 'result'); |
|
|
@define('Q_RESULT', 'result'); |
|
@ -136,6 +137,7 @@ define('BIBTEXBROWSER','v__GITHUB__'); |
|
|
|
|
|
|
|
|
define('Q_INNER_AUTHOR', '_author');// internally used for representing the author
|
|
|
define('Q_INNER_AUTHOR', '_author');// internally used for representing the author
|
|
|
define('Q_INNER_TYPE', 'x-bibtex-type');// used for representing the type of the bibtex entry internally
|
|
|
define('Q_INNER_TYPE', 'x-bibtex-type');// used for representing the type of the bibtex entry internally
|
|
|
|
|
|
@define('Q_INNER_KEYS_INDEX', '_keys-index');// used for storing indices in $_GET[Q_KEYS] array
|
|
|
|
|
|
|
|
|
// for clean search engine links
|
|
|
// for clean search engine links
|
|
|
// we disable url rewriting
|
|
|
// we disable url rewriting
|
|
@ -1261,6 +1263,11 @@ class BibEntry { |
|
|
if ($this->hasField('x-abbrv')) {return $this->getField('x-abbrv');} |
|
|
if ($this->hasField('x-abbrv')) {return $this->getField('x-abbrv');} |
|
|
return $this->abbrv; |
|
|
return $this->abbrv; |
|
|
} |
|
|
} |
|
|
|
|
|
if (ABBRV_TYPE == 'keys-index') { |
|
|
|
|
|
if (isset($_GET[Q_INNER_KEYS_INDEX])) {return $_GET[Q_INNER_KEYS_INDEX][$this->getKey()]; } |
|
|
|
|
|
return ''; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// otherwise it is a user-defined function in bibtexbrowser.local.php
|
|
|
// otherwise it is a user-defined function in bibtexbrowser.local.php
|
|
|
$f = ABBRV_TYPE; |
|
|
$f = ABBRV_TYPE; |
|
|
return $f($this); |
|
|
return $f($this); |
|
@ -1563,6 +1570,13 @@ function compare_bib_entry_by_title($a, $b) |
|
|
return strcmp($a->getTitle(),$b->getTitle()); |
|
|
return strcmp($a->getTitle(),$b->getTitle()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** compares two instances of BibEntry by undecorated Abbrv |
|
|
|
|
|
*/ |
|
|
|
|
|
function compare_bib_entry_by_raw_abbrv($a, $b) |
|
|
|
|
|
{ |
|
|
|
|
|
return strcmp($a->getRawAbbrv(),$b->getRawAbbrv()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** compares two instances of BibEntry by month |
|
|
/** compares two instances of BibEntry by month |
|
|
* @author Jan Geldmacher |
|
|
* @author Jan Geldmacher |
|
@ -1886,6 +1900,8 @@ function createQueryString($array_param) { |
|
|
// the inverse transformation should also be implemented into query2title
|
|
|
// the inverse transformation should also be implemented into query2title
|
|
|
if($key == Q_INNER_AUTHOR) { $key = Q_AUTHOR; } |
|
|
if($key == Q_INNER_AUTHOR) { $key = Q_AUTHOR; } |
|
|
if($key == Q_INNER_TYPE) { $key = Q_TYPE; } |
|
|
if($key == Q_INNER_TYPE) { $key = Q_TYPE; } |
|
|
|
|
|
if($key == Q_KEYS) { $val = urlencode(json_encode($val)); } |
|
|
|
|
|
if($key == Q_INNER_KEYS_INDEX) {continue;} |
|
|
$array_param[$key]=$key .'='. urlencode($val); |
|
|
$array_param[$key]=$key .'='. urlencode($val); |
|
|
} |
|
|
} |
|
|
return implode("&",$array_param); |
|
|
return implode("&",$array_param); |
|
@ -2239,6 +2255,7 @@ function query2title(&$query) { |
|
|
// and we remove the regexp modifiers ^ $
|
|
|
// and we remove the regexp modifiers ^ $
|
|
|
$v = preg_replace('/[$^]/','',$v); |
|
|
$v = preg_replace('/[$^]/','',$v); |
|
|
} |
|
|
} |
|
|
|
|
|
if($k == Q_KEYS) { $v=json_encode(array_values($v)); } |
|
|
$headers[$k] = ucwords($k).': '.ucwords(htmlspecialchars($v)); |
|
|
$headers[$k] = ucwords($k).': '.ucwords(htmlspecialchars($v)); |
|
|
} |
|
|
} |
|
|
// special cases
|
|
|
// special cases
|
|
@ -2955,11 +2972,13 @@ class BibDataBase { |
|
|
// we search in the whole bib entry
|
|
|
// we search in the whole bib entry
|
|
|
if (!$bib->hasPhrase($fragment)) { |
|
|
if (!$bib->hasPhrase($fragment)) { |
|
|
$entryisselected = false; |
|
|
$entryisselected = false; |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
else if ($field==Q_EXCLUDE) { |
|
|
else if ($field==Q_EXCLUDE) { |
|
|
if ($bib->hasPhrase($fragment)) { |
|
|
if ($bib->hasPhrase($fragment)) { |
|
|
$entryisselected = false; |
|
|
$entryisselected = false; |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
else if ($field==Q_TYPE || $field==Q_INNER_TYPE) { |
|
|
else if ($field==Q_TYPE || $field==Q_INNER_TYPE) { |
|
@ -2970,11 +2989,19 @@ class BibDataBase { |
|
|
// moved here so that it is also used by AcademicDisplay:search2html()
|
|
|
// moved here so that it is also used by AcademicDisplay:search2html()
|
|
|
if (!$bib->hasPhrase('^('.$fragment.')$', Q_INNER_TYPE)) { |
|
|
if (!$bib->hasPhrase('^('.$fragment.')$', Q_INNER_TYPE)) { |
|
|
$entryisselected = false; |
|
|
$entryisselected = false; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
else if ($field==Q_KEYS) { |
|
|
|
|
|
if ( ! in_array( $bib->getKey(), $query[Q_KEYS] ) ) { |
|
|
|
|
|
$entryisselected = false; |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
else { |
|
|
else { |
|
|
if (!$bib->hasPhrase($fragment, $field)) { |
|
|
if (!$bib->hasPhrase($fragment, $field)) { |
|
|
$entryisselected = false; |
|
|
$entryisselected = false; |
|
|
|
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -2983,7 +3010,6 @@ class BibDataBase { |
|
|
$result[] = $bib; |
|
|
$result[] = $bib; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return $result; |
|
|
return $result; |
|
|
} |
|
|
} |
|
|
} // end class
|
|
|
} // end class
|
|
@ -3666,6 +3692,20 @@ class Dispatcher { |
|
|
else { nonExistentBibEntryError(); } |
|
|
else { nonExistentBibEntryError(); } |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function keys() { |
|
|
|
|
|
// Create array from list of bibtex entries
|
|
|
|
|
|
if (get_magic_quotes_gpc()) { |
|
|
|
|
|
$_GET[Q_KEYS] = stripslashes($_GET[Q_KEYS]); |
|
|
|
|
|
} |
|
|
|
|
|
$_GET[Q_KEYS] = (array) json_decode(urldecode($_GET[Q_KEYS])); // decode and cast the object into an (associative) array
|
|
|
|
|
|
// Make the array 1-based (keeps the string keys unchanged)
|
|
|
|
|
|
array_unshift($_GET[Q_KEYS],"__DUMMY__"); |
|
|
|
|
|
unset($_GET[Q_KEYS][0]); |
|
|
|
|
|
// Keep a flipped version for efficient search in getRawAbbrv()
|
|
|
|
|
|
$_GET[Q_INNER_KEYS_INDEX] = array_flip($_GET[Q_KEYS]); |
|
|
|
|
|
$this->query[Q_KEYS]=$_GET[Q_KEYS]; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/** is used to remotely analyzed a situation */ |
|
|
/** is used to remotely analyzed a situation */ |
|
|
function diagnosis() { |
|
|
function diagnosis() { |
|
|
header('Content-type: text/plain'); |
|
|
header('Content-type: text/plain'); |
|
@ -3704,4 +3744,4 @@ class Dispatcher { |
|
|
$class = BIBTEXBROWSER_MAIN;// extension point
|
|
|
$class = BIBTEXBROWSER_MAIN;// extension point
|
|
|
$main = new $class(); |
|
|
$main = new $class(); |
|
|
$main->main(); |
|
|
$main->main(); |
|
|
?>
|
|
|
|
|
|
|
|
|
?>
|