From 68c5aadc08e8376e7eafafbebb500e2821e9a8d9 Mon Sep 17 00:00:00 2001 From: Mark Williams Date: Wed, 6 Nov 2024 09:54:52 +0000 Subject: [PATCH 1/3] LIMS-261: Allow download of PDB files --- api/src/Page/Sample.php | 16 ++++++++++++++ client/src/js/modules/samples/views/pdbs.js | 23 ++++++++++++++++----- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/api/src/Page/Sample.php b/api/src/Page/Sample.php index d1a051493..4d2093fff 100644 --- a/api/src/Page/Sample.php +++ b/api/src/Page/Sample.php @@ -195,6 +195,7 @@ class Sample extends Page array('/pdbs(/pid/:pid)', 'get', '_get_pdbs'), array('/pdbs', 'post', '_add_pdb'), array('/pdbs(/:pdbid)', 'delete', '_remove_pdb'), + array('/pdbs/download/:pdbid', 'get', '_download_pdb'), array('/concentrationtypes', 'get', '_concentration_types'), array('/componenttypes', 'get', '_component_types'), @@ -2062,6 +2063,21 @@ function _get_pdbs() $this->_output($rows); } + # ------------------------------------------------------------------------ + # Download a pdb file + function _download_pdb() + { + if (!$this->has_arg('pdbid')) + $this->_error('No PDB id specified'); + + $pdb = $this->db->pq("SELECT name, contents FROM pdb WHERE pdbid = :1", array($this->arg('pdbid'))); + $pdb = $pdb[0]; + + header('Content-Type:text/plain'); + header('Content-Disposition:attachment;filename='.$pdb['NAME']); + print $pdb['CONTENTS']; + } + # ------------------------------------------------------------------------ # Add a new pdb function _add_pdb() diff --git a/client/src/js/modules/samples/views/pdbs.js b/client/src/js/modules/samples/views/pdbs.js index 28708ce93..d9501bcab 100644 --- a/client/src/js/modules/samples/views/pdbs.js +++ b/client/src/js/modules/samples/views/pdbs.js @@ -1,15 +1,28 @@ -define(['marionette'], function(Marionette) { +define(['marionette', 'utils'], function(Marionette, utils) { var UserItem = Marionette.ItemView.extend({ - template: _.template('<%-NAME%> <% if (CODE) { %>[CODE]<% } else { %>[File]<% } %> Delete'), + template: _.template(''), tagName: 'li', attributes: { 'data-testid': 'protein-pdb-list-item' }, events: { - 'click a.delete': 'deleteUser', + 'click a.delete': 'deletePDB', + 'click a.download': utils.signHandler, }, - deleteUser: function(e) { + render: function() { + UserItem.__super__.render.call(this) + const linkButton = ' PDB' + const deleteButton = ' Delete' + const downloadButton = ' Download' + if (this.model.get('CODE')) { + this.$el.append(this.model.get('NAME')+' [Code] '+linkButton+' '+deleteButton+'') + } else { + this.$el.append(this.model.get('NAME')+' [File] '+downloadButton+' '+deleteButton+'') + } + }, + + deletePDB: function(e) { this.model.destroy() }, }) @@ -30,4 +43,4 @@ define(['marionette'], function(Marionette) { }) -}) \ No newline at end of file +}) From 43e2c69a08fc513097686e666853feaad14c90a7 Mon Sep 17 00:00:00 2001 From: Mark Williams Date: Wed, 6 Nov 2024 10:18:43 +0000 Subject: [PATCH 2/3] LIMS-261: Use RCSB for links --- client/src/js/modules/samples/views/pdbs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/js/modules/samples/views/pdbs.js b/client/src/js/modules/samples/views/pdbs.js index d9501bcab..1158f8d37 100644 --- a/client/src/js/modules/samples/views/pdbs.js +++ b/client/src/js/modules/samples/views/pdbs.js @@ -12,7 +12,7 @@ define(['marionette', 'utils'], function(Marionette, utils) { render: function() { UserItem.__super__.render.call(this) - const linkButton = ' PDB' + const linkButton = ' RCSB' const deleteButton = ' Delete' const downloadButton = ' Download' if (this.model.get('CODE')) { From 9cdf7c95f25e68b20086905e164438c7d3f46b58 Mon Sep 17 00:00:00 2001 From: Mark Williams Date: Wed, 6 Nov 2024 16:53:16 +0000 Subject: [PATCH 3/3] LIMS-261: Use EBI instead of RCSB --- client/src/js/modules/samples/views/pdbs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/js/modules/samples/views/pdbs.js b/client/src/js/modules/samples/views/pdbs.js index 1158f8d37..bbbd52b22 100644 --- a/client/src/js/modules/samples/views/pdbs.js +++ b/client/src/js/modules/samples/views/pdbs.js @@ -12,7 +12,7 @@ define(['marionette', 'utils'], function(Marionette, utils) { render: function() { UserItem.__super__.render.call(this) - const linkButton = ' RCSB' + const linkButton = ' EBI' const deleteButton = ' Delete' const downloadButton = ' Download' if (this.model.get('CODE')) {