Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
    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&amp;v=2&amp;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";
        }
    }