Skip to content

Commit

Permalink
Merge pull request #30 from BioKIC/public-datasets
Browse files Browse the repository at this point in the history
Enables public datasets and formattable dataset metadata
  • Loading branch information
egbot authored Aug 14, 2021
2 parents f0794e0 + 80ae11e commit f91542e
Show file tree
Hide file tree
Showing 10 changed files with 291 additions and 50 deletions.
69 changes: 58 additions & 11 deletions classes/OccurrenceDataset.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,61 @@ public function __destruct(){
if(!($this->conn === null)) $this->conn->close();
}

public function getPublicDatasets(){
// Tests if field `category` exists in table
$sqlFields = 'SHOW COLUMNS FROM omoccurdatasets LIKE "category"';
$fields = $this->conn->query($sqlFields);
$catExists = $fields->num_rows?TRUE:FALSE;
$fields->free();
$retArr = array();
$sql = '';
if ($catExists) {
$sql = 'SELECT datasetid, category, name, notes, description, uid, sortsequence, initialtimestamp, ispublic FROM omoccurdatasets WHERE ispublic=1 ORDER BY category,name';

} else {
$sql = 'SELECT datasetid, name, notes, description, uid, sortsequence, initialtimestamp, ispublic FROM omoccurdatasets WHERE ispublic=1 ORDER BY name';
}
$rs = $this->conn->query($sql);
while($r = $rs->fetch_assoc()){
$retArr[] = $r;
}
$rs->free();
return $retArr;
}

public function getPublicDatasetMetadata($dsid){
$retArr = array();
if($dsid){
//Get and return individual dataset
$sql = 'SELECT datasetid, name, notes, description, uid, sortsequence, initialtimestamp FROM omoccurdatasets WHERE (datasetid = '.$dsid.') AND ispublic=1';
$rs = $this->conn->query($sql);
while($r = $rs->fetch_object()){
$retArr['name'] = $r->name;
$retArr['notes'] = $r->notes;
$retArr['description'] = $r->description;
$retArr['uid'] = $r->uid;
$retArr['sort'] = $r->sortsequence;
$retArr['ts'] = $r->initialtimestamp;
}
$rs->free();
}
return $retArr;
}

public function getDatasetMetadata($dsid){
$retArr = array();
if($GLOBALS['SYMB_UID'] && $dsid){
//Get and return individual dataset
$sql = 'SELECT datasetid, name, notes, uid, sortsequence, initialtimestamp FROM omoccurdatasets WHERE (datasetid = '.$dsid.') ';
$sql = 'SELECT datasetid, name, notes, description, uid, sortsequence, initialtimestamp, ispublic FROM omoccurdatasets WHERE (datasetid = '.$dsid.') ';
$rs = $this->conn->query($sql);
while($r = $rs->fetch_object()){
$retArr['name'] = $r->name;
$retArr['notes'] = $r->notes;
$retArr['description'] = $r->description;
$retArr['uid'] = $r->uid;
$retArr['sort'] = $r->sortsequence;
$retArr['ts'] = $r->initialtimestamp;
$retArr['ispublic'] = $r->ispublic;
}
$rs->free();
//Get roles for current user
Expand All @@ -45,18 +88,20 @@ public function getDatasetMetadata($dsid){
public function getDatasetArr(){
$retArr = array();
if($GLOBALS['SYMB_UID']){
$sql = 'SELECT datasetid, name, notes, sortsequence, initialtimestamp FROM omoccurdatasets WHERE (uid = '.$GLOBALS['SYMB_UID'].') ORDER BY sortsequence,name';
$sql = 'SELECT datasetid, name, notes, description, sortsequence, initialtimestamp, ispublic FROM omoccurdatasets WHERE (uid = '.$GLOBALS['SYMB_UID'].') ORDER BY sortsequence,name';
$rs = $this->conn->query($sql);
while($r = $rs->fetch_object()){
$retArr['owner'][$r->datasetid]['name'] = $r->name;
$retArr['owner'][$r->datasetid]['notes'] = $r->notes;
$retArr['owner'][$r->datasetid]['description'] = $r->description;
$retArr['owner'][$r->datasetid]['sort'] = $r->sortsequence;
$retArr['owner'][$r->datasetid]['ts'] = $r->initialtimestamp;
$retArr['owner'][$r->datasetid]['ispublic'] = $r->ispublic;
}
$rs->free();

//Get shared datasets
$sql1 = 'SELECT d.datasetid, d.name, d.notes, d.sortsequence, d.initialtimestamp, r.role '.
$sql1 = 'SELECT d.datasetid, d.name, d.notes, d.description, d.sortsequence, d.ispublic, d.initialtimestamp, r.role '.
'FROM omoccurdatasets d INNER JOIN userroles r ON d.datasetid = r.tablepk '.
'WHERE (r.uid = '.$GLOBALS['SYMB_UID'].') AND (r.role IN("DatasetAdmin","DatasetEditor","DatasetReader")) '.
'ORDER BY sortsequence,name';
Expand All @@ -66,25 +111,27 @@ public function getDatasetArr(){
$retArr['other'][$r1->datasetid]['name'] = $r1->name;
$retArr['other'][$r1->datasetid]['role'] = $r1->role;
$retArr['other'][$r1->datasetid]['notes'] = $r1->notes;
$retArr['other'][$r1->datasetid]['description'] = $r1->description;
$retArr['other'][$r1->datasetid]['sort'] = $r1->sortsequence;
$retArr['other'][$r1->datasetid]['ts'] = $r1->initialtimestamp;
$retArr['other'][$r1->datasetid]['ispublic'] = $r1->ispublic;
}
$rs1->free();
}
return $retArr;
}

public function editDataset($dsid,$name,$notes){
$sql = 'UPDATE omoccurdatasets SET name = "'.$this->cleanInStr($name).'", notes = "'.$this->cleanInStr($notes).'" WHERE datasetid = '.$dsid;
public function editDataset($dsid,$name,$notes,$description,$ispublic){
$sql = 'UPDATE omoccurdatasets SET name = "'.$this->cleanInStr($name).'", notes = "'.$this->cleanInStr($notes).'", description = "'.$this->cleanInStr($description).'", ispublic = '.$this->cleanInStr($ispublic).' WHERE datasetid = '.$dsid;
if(!$this->conn->query($sql)){
$this->errorArr[] = 'ERROR saving dataset edits: '.$this->conn->error;
return false;
}
return true;
}

public function createDataset($name,$notes,$uid){
$sql = 'INSERT INTO omoccurdatasets (name,notes,uid) VALUES("'.$this->cleanInStr($name).'",'.($notes?'"'.$this->cleanInStr($notes).'"':'NULL').','.$uid.') ';
public function createDataset($name,$notes,$description,$ispublic,$uid){
$sql = 'INSERT INTO omoccurdatasets (name,notes,description,ispublic,uid) VALUES("'.$this->cleanInStr($name).'",'.($notes?'"'.$this->cleanInStr($notes).'"':'NULL').','.($description?'"'.$this->cleanInStr($description).'"':'NULL').','.($ispublic?'"'.$this->cleanInStr($ispublic).'"':'"0"').','.$uid.') ';
if($this->conn->query($sql)){
$this->datasetId = $this->conn->insert_id;
}
Expand Down Expand Up @@ -124,7 +171,7 @@ public function mergeDatasets($targetArr){

public function cloneDatasets($targetArr,$uid){
$status = true;
$sql = 'SELECT datasetid, name, notes, sortsequence FROM omoccurdatasets WHERE datasetid IN('.implode(',',$targetArr).')';
$sql = 'SELECT datasetid, name, notes, description, sortsequence FROM omoccurdatasets WHERE datasetid IN('.implode(',',$targetArr).')';
$rs = $this->conn->query($sql);
while($r = $rs->fetch_object()){
//Create new name and ensure it doesn't already exist for owner
Expand All @@ -144,12 +191,12 @@ public function cloneDatasets($targetArr,$uid){
}while($nameExists);
$newName = $newNameTemp;
//Add to database
$sql2 = 'INSERT INTO omoccurdatasets(name, notes, sortsequence, uid) VALUES("'.$newName.'","'.$r->notes.'",'.($r->sortsequence?$r->sortsequence:'""').','.$uid.')';
$sql2 = 'INSERT INTO omoccurdatasets(name, notes, description, sortsequence, uid) VALUES("'.$newName.'","'.$r->notes.'","'.$r->description.'",'.($r->sortsequence?$r->sortsequence:'""').','.$uid.')';
if($this->conn->query($sql2)){
$this->datasetId = $this->conn->insert_id;
//Duplicate all records wtihin new dataset
$sql3 = 'INSERT INTO omoccurdatasetlink(occid, datasetid, notes) '.
'SELECT occid, '.$this->datasetId.', notes FROM omoccurdatasetlink WHERE datasetid = '.$r->datasetid;
$sql3 = 'INSERT INTO omoccurdatasetlink(occid, datasetid, notes, description) '.
'SELECT occid, '.$this->datasetId.', notes, description FROM omoccurdatasetlink WHERE datasetid = '.$r->datasetid;
if(!$this->conn->query($sql3)){
$this->errorArr[] = 'ERROR: Unable to clone dataset links into new datasets: '.$this->conn->error;
$status = false;
Expand Down
2 changes: 1 addition & 1 deletion collections/datasets/datasetHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
$datasetManager = new OccurrenceDataset();
if($datasetID == '--newDataset'){
$name = 'newDataset ('.date('Y-m-d H:i:s').')';
$datasetManager->createDataset($name,'',$SYMB_UID);
$datasetManager->createDataset($name,'','','',$SYMB_UID);
$datasetID = $datasetManager->getDatasetId();
}
$targetLink = 'datasetmanager.php?datasetid='.$datasetID;
Expand Down
38 changes: 31 additions & 7 deletions collections/datasets/datasetmanager.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@
}
if($isEditor == 1){
if($action == 'Save Edits'){
if($datasetManager->editDataset($_POST['datasetid'],$_POST['name'],$_POST['notes'])){
$isPublic = (isset($_POST['ispublic'])&&is_numeric($_POST['ispublic'])?1:0);
if($datasetManager->editDataset($_POST['datasetid'],$_POST['name'],$_POST['notes'],$_POST['description'],$isPublic)){
$mdArr = $datasetManager->getDatasetMetadata($datasetId);
$statusStr = 'Success! Dataset edits saved. ';
}
Expand Down Expand Up @@ -128,6 +129,19 @@
<script type="text/javascript" src="../../js/jquery.js"></script>
<script type="text/javascript" src="../../js/jquery-ui.js"></script>
<script type="text/javascript" src="../../js/symb/shared.js"></script>
<script type="text/javascript" src="../../js/tinymce/tinymce.min.js"></script>
<script>
// Adds WYSIWYG editor to description field
tinymce.init({
selector: '#description',
plugins: 'link lists image',
menubar: '',
toolbar: [
'undo redo | bold italic underline | link | alignleft aligncenter alignright | formatselect | bullist numlist | indent outdent | blockquote | image',
],
branding: false
});
</script>
<script type="text/javascript">
var isDownloadAction = false;
$(document).ready(function() {
Expand Down Expand Up @@ -378,15 +392,25 @@ function targetDownloadPopup(f) {
?>
<div id="admintab">
<fieldset style="padding:15px;margin:15px;">
<legend><b>Editor</b></legend>
<legend><p><b>Editor</b></p></legend>
<form name="editform" action="datasetmanager.php" method="post" onsubmit="return validateEditForm(this)">
<div>
<b>Name</b><br />
<input name="name" type="text" value="<?php echo $mdArr['name']; ?>" style="width:400px" />
<p><b>Name</p>
<input name="name" type="text" value="<?php echo $mdArr['name']; ?>" style="width:70%" />
</div>
<div>
<p>
<input type="checkbox" name="ispublic" id="ispublic" value="1" <?php echo ($mdArr['ispublic']?'CHECKED':''); ?> />
<b>Publicly Visible</b>
</p>
</div>
<div>
<p><b>Notes (Internal usage, not displayed publicly)</b></p>
<input name="notes" type="text" value="<?php echo $mdArr['notes']; ?>" style="width:70%" />
</div>
<div>
<b>Notes</b><br />
<input name="notes" type="text" value="<?php echo $mdArr['notes']; ?>" style="width:90%" />
<p><b>Description</p>
<textarea name="description" id="description" cols="100" rows="10" width="70%"><?php echo $mdArr['description']; ?></textarea>
</div>
<div style="margin:15px;">
<input name="tabindex" type="hidden" value="1" />
Expand Down Expand Up @@ -449,7 +473,7 @@ function targetDownloadPopup(f) {
</div>
<div style="margin:15px;">
<fieldset>
<legend><b>Add User</b></legend>
<legend><p><b>Add User</b></legend>
<form name="addform" action="datasetmanager.php" method="post" onsubmit="return validateUserAddForm(this)">
<div title="Type login or last name and then select from list">
Login/Last Name:
Expand Down
31 changes: 27 additions & 4 deletions collections/datasets/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

$statusStr = '';
if($action == 'createNewDataset'){
if(!$datasetManager->createDataset($_POST['name'],$_POST['notes'],$SYMB_UID)){
if(!$datasetManager->createDataset($_POST['name'],$_POST['notes'],$_POST['description'],$_POST['ispublic'],$SYMB_UID)){
$statusStr = implode(',',$datasetManager->getErrorArr());
}
}
Expand Down Expand Up @@ -44,6 +44,19 @@
<script type="text/javascript" src="../../js/jquery.js"></script>
<script type="text/javascript" src="../../js/jquery-ui.js"></script>
<script type="text/javascript" src="../../js/symb/shared.js"></script>
<script type="text/javascript" src="../../js/tinymce/tinymce.min.js"></script>
<script>
// Adds WYSIWYG editor to description field
tinymce.init({
selector: '#description',
plugins: 'link lists image',
menubar: '',
toolbar: [
'undo redo | bold italic underline | link | alignleft aligncenter alignright | formatselect | bullist numlist | indent outdent | blockquote | image',
],
branding: false
});
</script>
<script type="text/javascript">
function validateAddForm(f){
if(f.adduser.value == ""){
Expand Down Expand Up @@ -114,13 +127,23 @@ function validateAddForm(f){
<legend><b>Create New Dataset</b></legend>
<form name="adminform" action="index.php" method="post" onsubmit="return validateEditForm(this)">
<div>
<b>Name</b><br />
<input name="name" type="text" style="width:250px" />
<p><b>Name</b></p>
<input name="name" type="text" style="width:90%" />
</div>
<div>
<p>
<input type="checkbox" name="ispublic" id="ispublic" value="1" />
<b>Publicly Visible</b>
</p>
</div>
<div>
<b>Notes</b><br />
<p><b>Notes (Internal usage, not displayed publicly)</b></p>
<input name="notes" type="text" style="width:90%;" />
</div>
<div>
<p><b>Description (Displayed publicly)</p>
<textarea name="description" id="description" cols="100" rows="10" width="90%"></textarea>
</div>
<div style="margin:15px">
<button name="submitaction" type="submit" value="createNewDataset">Create New Dataset</button>
</div>
Expand Down
62 changes: 62 additions & 0 deletions collections/datasets/public.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php
include_once('../../config/symbini.php');
include_once($SERVER_ROOT.'/classes/OccurrenceDataset.php');
header("Content-Type: text/html; charset=".$CHARSET);

// Datasets
$datasetid = array_key_exists('datasetid',$_REQUEST)?$_REQUEST['datasetid']:0;

if(!is_numeric($datasetid)) $datasetid = 0;

$datasetManager = new OccurrenceDataset();
$dArr = $datasetManager->getPublicDatasetMetadata($datasetid);
$searchUrl = '../../collections/list.php?datasetid='.$datasetid;
$tableUrl = '../../collections/listtabledisplay.php?datasetid='.$datasetid;
$taxaUrl = '../../collections/list.php?datasetid='.$datasetid.'&tabindex=0';
// $downloadUrl = '../../collections/download/index.php?datasetid='.$datasetid;
$ocArr = $datasetManager->getOccurrences($datasetid);
?>
<html>
<head>
<title>Dataset: <?php echo $dArr['name'] ;?></title>
<?php
$activateJQuery = false;
if(file_exists($SERVER_ROOT.'/includes/head.php')){
include_once($SERVER_ROOT.'/includes/head.php');
}
else{
echo '<link href="'.$CLIENT_ROOT.'/css/jquery-ui.css" type="text/css" rel="stylesheet" />';
echo '<link href="'.$CLIENT_ROOT.'/css/base.css?ver=1" type="text/css" rel="stylesheet" />';
echo '<link href="'.$CLIENT_ROOT.'/css/main.css?ver=1" type="text/css" rel="stylesheet" />';
}
?>
</head>
<body>
<?php
$displayLeftMenu = true;
include($SERVER_ROOT.'/includes/header.php');
?>
<div class="navpath">
<a href="<?php echo $CLIENT_ROOT; ?>/index.php">Home</a> &gt;&gt;
<b>Dataset: <?php echo $dArr['name'] ;?></b>
</div>
<!-- This is inner text! -->
<div id="innertext">
<h1>Dataset: <?php echo $dArr['name'] ;?></h1>
<ul>
<!-- Metadata -->
<div><?php echo $dArr['description'] ;?></div>
<!-- Occurrences Summary -->
<p>This dataset includes <?php echo count($ocArr); ?> records.</p>

<p><a class="btn" href="<?php echo $searchUrl ;?>">View and download samples in this Dataset (List view)</a></p>
<p><a class="btn" href="<?php echo $tableUrl ;?>">View samples in this Dataset (Table view)</a></p>
<p><a class="btn" href="<?php echo $taxaUrl ;?>">View list of taxa in this Dataset</a></p>
<!-- <p><a href="#">Download this Dataset</a></p> -->
</ul>
</div>
<?php
include($SERVER_ROOT.'/includes/footer.php');
?>
</body>
</html>
Loading

0 comments on commit f91542e

Please sign in to comment.