function reference_to_bibjson($reference) { global $config; $obj = new stdclass(); $obj->author = array(); foreach ($reference->authors as $a) { $author = new stdclass(); if ($a->forename == '' || $a->lastname == '') { } else { $author->firstname = $a->forename; $author->lastname = $a->lastname; } $author->name = trim($a->forename . ' ' . $a->lastname); $obj->author[] = $author; } switch ($reference->genre) { case 'article': case 'book': case 'chapter': $obj->type = $reference->genre; break; default: $obj->type = 'generic'; break; } $obj->title = $reference->title; if ($reference->genre == 'book') { if (isset($reference->publisher)) { $obj->publisher = new stdclass(); $obj->publisher->name = $reference->publisher; if (isset($reference->publoc)) { $obj->publisher->address = $reference->publoc; } } if (isset($reference->oclc)) { if ($reference->oclc != 0) { $identifier = new stdclass(); $identifier->type = 'oclc'; $identifier->id = (int) $reference->oclc; $obj->book->identifier[] = $identifier; } } } if ($reference->genre == 'chapter') { $obj->book = new stdclass(); $obj->book->title = $reference->secondary_title; if (isset($reference->secondary_authors)) { $obj->book->editor = array(); foreach ($reference->secondary_authors as $a) { $author = new stdclass(); if ($a->forename == '' || $a->lastname == '') { } else { $author->firstname = $a->forename; $author->lastname = $a->lastname; } $author->name = trim($a->forename . ' ' . $a->lastname); $obj->book->editor[] = $author; } } if (isset($reference->publisher)) { $obj->book->publisher = new stdclass(); $obj->book->publisher->name = $reference->publisher; if (isset($reference->publoc)) { $obj->book->publisher->address = $reference->publoc; } } if (isset($reference->oclc)) { if ($reference->oclc != 0) { $identifier = new stdclass(); $identifier->type = 'oclc'; $identifier->id = (int) $reference->oclc; $obj->book->identifier[] = $identifier; } } } if ($reference->genre == 'article') { $obj->journal = new stdclass(); $obj->journal->name = $reference->secondary_title; if (isset($reference->series)) { $obj->journal->series = $reference->series; } $obj->journal->volume = $reference->volume; if (isset($reference->issue)) { $obj->journal->issue = $reference->issue; } if (isset($reference->spage)) { $obj->journal->pages = $reference->spage; } if (isset($reference->epage)) { $obj->journal->pages .= '--' . $reference->epage; } if (isset($reference->issn)) { $identifier = new stdclass(); $identifier->type = 'issn'; $identifier->id = $reference->issn; $obj->journal->identifier[] = $identifier; } if (isset($reference->oclc)) { if ($reference->oclc != 0) { $identifier = new stdclass(); $identifier->type = 'oclc'; $identifier->id = (int) $reference->oclc; $obj->journal->identifier[] = $identifier; } } } if (isset($reference->year)) { $obj->year = $reference->year; } $link = new stdclass(); $link->anchor = 'LINK'; $link->url = $config['web_root'] . 'reference/' . $reference->reference_id; $obj->link[] = $link; if (isset($reference->PageID)) { $link = new stdclass(); $link->anchor = 'LINK'; $link->url = 'http://www.biodiversitylibrary.org/page/' . $reference->PageID; $obj->link[] = $link; } // Identifiers $obj->identifier = array(); $identifier = new stdclass(); $identifier->type = 'biostor'; $identifier->id = (int) $reference->reference_id; $obj->identifier[] = $identifier; if (isset($reference->PageID)) { $identifier = new stdclass(); $identifier->type = 'bhl'; $identifier->id = (int) $reference->PageID; $obj->identifier[] = $identifier; } if (isset($reference->doi)) { $identifier = new stdclass(); $identifier->type = 'doi'; $identifier->id = $reference->doi; $obj->identifier[] = $identifier; } if (isset($reference->hdl)) { $identifier = new stdclass(); $identifier->type = 'handle'; $identifier->id = $reference->hdl; $obj->identifier[] = $identifier; } if (isset($reference->isbn)) { $identifier = new stdclass(); $identifier->type = 'isbn'; $identifier->id = $reference->isbn; $obj->identifier[] = $identifier; } if (isset($reference->lsid)) { if (preg_match('/urn:lsid:zoobank.org:pub:(?<id>.*)/', $reference->lsid, $m)) { $identifier = new stdclass(); $identifier->type = 'lsid'; $identifier->id = $reference->lsid; $obj->identifier[] = $identifier; } } if (isset($reference->pmid)) { $identifier = new stdclass(); $identifier->type = 'pmid'; $identifier->id = (int) $reference->pmid; $obj->identifier[] = $identifier; } if (0) { // espensive as it hits MySQL bad // names as tags $names = bhl_names_in_reference($reference->reference_id); if (count($names->tags) > 0) { $obj->tag = $names->tags; } } return $obj; }
function DisplayHtmlHead() { global $config; echo reference_to_meta_tags($this->object); echo html_include_link('application/rss+xml', 'RSS2.0', 'reference/' . $this->id . '.rss', 'alternate'); // Canonical link echo html_include_link('', '', 'reference/' . $this->id, 'canonical'); echo html_include_css('css/viewer.css'); echo html_include_script('js/fadeup.js'); echo html_include_script('js/prototype.js'); echo html_include_script('js/lazierLoad.js'); // not working for some reason... echo html_include_script('js/viewer.js'); // Google +1 //echo html_include_script('http://apis.google.com/js/plusone.js'); // Recaptcha echo html_include_script('http://api.recaptcha.net/js/recaptcha_ajax.js'); // Tag tree for names $this->taxon_names = bhl_names_in_reference($this->id); if ($this->taxon_names != NULL) { $tags = ''; foreach ($this->taxon_names->names as $name) { $tags .= $name['namestring'] . '|' . $name['NameBankID'] . "\\n"; } echo '<script type="text/javascript">' . "\n"; echo "function make_tag_tree()\n\t\t\t{\n\t\t\tvar success\t= function(t){tagtreeComplete(t);}\n\t\t\tvar failure\t= function(t){tagtreeFailed(t);}\n\t\t\n\t\t\tvar url = '" . $config['web_root'] . "tagtree/tags2tree.php';\n\t\t\tvar pars = 'tags='+ '" . $tags . "';\n//\t\t\tpars += '&url=display_name.php?id%3D'\n\t\t\tpars += '&url=name/'\n\t\t\tvar myAjax = new Ajax.Request(url, {method:'post', postBody:pars, onSuccess:success, onFailure:failure});\n\t\t\t}\n\t\t\t\nfunction tagtreeComplete(t)\n{\n\tvar s = t.responseText;\n\t\n\t\$('taxon_names').innerHTML = s;\n}\n\nfunction tagtreeFailed(t)\n{\n}\t\t\t\n\t\t\t"; echo '</script>' . "\n"; } // Form validation echo '<script type="text/javascript">' . "\n"; echo 'var check_issn = /^[0-9]{4}\\-[0-9]{3}([0-9]|X)$/;' . "\n"; echo 'var check_date = /^([0-9]{4})\\-([0-9]{2})\\-([0-9]{2})$/;' . "\n"; echo 'var check_year = /^[0-9]{4}$/;' . "\n"; echo '</script>' . "\n"; // Form editing echo '<script type="text/javascript">' . "\n"; echo ' function SetSC(id, sc) { // Textarea. var obj = $(id); obj.value += sc; obj.focus(); } function reportErrors(errors) { var msg = "The form contains errors...\\n"; for (var i = 0; i<errors.length; i++) { var numError = i + 1; msg += "\\n" + numError + ". " + errors[i]; } alert(msg); } function store(form_id, page_id) { var form = $(form_id); // validate var issn = form.issn.value; var date = form.date.value; var year = form.year.value; var secondary_title = form.secondary_title.value; var errors = []; if (secondary_title == "") { errors[errors.length] = "Please supply a journal name"; } if ((issn != "") && !check_issn.test(issn)) { errors[errors.length] = "ISSN " + "\\"" + issn + "\\" is not valid"; } if ((date != "") && !check_date.test(date)) { errors[errors.length] = "Date must be in form \\"YYYY-MM-DD\\""; } if ((year != "") && !check_year.test(year)) { errors[errors.length] = "Year \\"" + year + "\\" is not valid"; } if (errors.length > 0) { reportErrors(errors);'; if (user_is_logged_in()) { } else { echo ' Recaptcha.create("' . $config['recaptcha_publickey'] . '", "recaptcha_div", { theme: "clean", callback: Recaptcha.focus_response_field });'; } echo ' return false; } //alert($(form).serialize()); // Update database var success = function(t){updateSuccess(t);} var failure = function(t){updateFailure(t);} var url = "' . $config['web_root'] . 'update.php"; var pars = $(form).serialize() + "&PageID=" + page_id + "&update=true"; //alert (page_id); var myAjax = new Ajax.Request(url, {method:"post", postBody:pars, onSuccess:success, onFailure:failure}); } function updateSuccess (t) { var s = t.responseText.evalJSON(); //alert(t.responseText); //alert("hi"); if (s.is_valid) { // we\'ve updated metadata, so reload page (or do ajax calls, but reload is easier) window.location.reload(true); } else { // User did not pass recaptcha so refresh it Recaptcha.create("' . $config['recaptcha_publickey'] . '", "recaptcha_div", { theme: "clean", callback: Recaptcha.focus_response_field }); //fadeUp($(metadata_form),255,255,153); } } function updateFailure (t) { alert("Failed: " + t); } '; // Based on http://ne0phyte.com/blog/2008/09/02/javascript-keypress-event/ // and http://blog.evandavey.com/2008/02/how-to-capture-return-key-from-field.html // I want to capture enter key press in recaptcha to avoid submitting the form (user must click // on button for that). We listen for keypress and eat it. Note that we attach the listener after // the window has loaded. echo 'function onMyTextKeypress(event) { if (Event.KEY_RETURN == event.keyCode) { // do something usefull //alert(\'Enter key was pressed.\'); Event.stop(event); } return; } Event.observe(window, \'load\', function() { Event.observe(\'recaptcha_response_field\', \'keypress\', onMyTextKeypress); });'; echo '</script>'; // If we have point localities then we need a map if (count($this->localities) != 0) { echo html_include_script('http://maps.google.com/maps?file=api&v=2&key=' . $config['gmap']); echo html_include_script('js/gmap.js'); echo '<script type="text/javascript">' . "\n"; echo ' function initialize() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map_canvas")); map.setCenter(new GLatLng(0, -0), 1); map.addControl(new GSmallMapControl()); map.addControl(new GOverviewMapControl()); map.addControl(new GMapTypeControl()); map.addMapType(G_PHYSICAL_MAP); map.setMapType(G_PHYSICAL_MAP); '; echo '// Bounding box to contain points, from http://www.svennerberg.com/2008/11/bounding-box-in-google-maps/ ' . "\n"; echo '// see especially comment by Aiska http://www.svennerberg.com/2008/11/bounding-box-in-google-maps/#comment-1546 ' . "\n"; echo 'var bounds = new GLatLngBounds();' . "\n"; foreach ($this->localities as $loc) { echo 'var latlng = new GLatLng('; echo $loc->latitude; echo ','; echo $loc->longitude; echo ');' . "\n"; echo 'map.addOverlay(createMarker(latlng), \'\','; if ($loc->name != '') { echo "'" . $loc->name . "'"; } else { echo "'" . format_decimal_latlon($loc->latitude, $loc->longitude) . "'"; } echo ');' . "\n"; echo 'bounds.extend(latlng);' . "\n"; } echo ' }' . "\n"; echo '// Center map in the center of the bounding box' . "\n"; echo '// and calculate the appropriate zoom level' . "\n"; echo 'map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));' . "\n"; echo '}' . "\n"; echo '</script>' . "\n"; } }