Skip to content

Commit

Permalink
[data_release] refactoring to use data framework.
Browse files Browse the repository at this point in the history
  • Loading branch information
lorisadmin committed Feb 12, 2024
1 parent 8c8f32d commit 456ec3a
Show file tree
Hide file tree
Showing 3 changed files with 194 additions and 51 deletions.
112 changes: 61 additions & 51 deletions modules/data_release/php/data_release.class.inc
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ namespace LORIS\data_release;
* @link https://www.github.com/aces/Loris
*/

class Data_Release extends \NDB_Menu_Filter
class Data_Release extends \DataFrameworkMenu
{
public $AjaxModule = true;
public $skipTemplate = true;
Expand All @@ -48,55 +48,6 @@ class Data_Release extends \NDB_Menu_Filter
);
}

/**
* Setup all the class variables needed for the data release menu page
*
* @return void
*/
function _setupVariables()
{
$user =& \User::singleton();
$DB = $this->loris->getDatabaseConnection();

// set the class variables
$this->columns = [
'file_name AS fileName',
'IF(version is null or version ="","Unversioned", version) AS version',
'upload_date AS uploadDate',
'dr.id as dataReleaseID',
];
$this->query = " FROM data_release dr";

if (!$user->hasPermission("superuser")) {
$this->query .= " JOIN data_release_permissions drp
ON (dr.id=drp.data_release_id)
JOIN users u ON (u.ID=drp.userid)
WHERE u.UserID=".$DB->quote($user->getUsername());
}

$this->group_by = '';
$this->order_by = 'uploadDate';
}

/**
* Create the form for the data release menu page
*
* @return void
**/
function setup()
{
parent::setup();

$db = $this->loris->getDatabaseConnection();

$this->fieldOptions = [
'users' => $this->getUsersList($db),
'versions' => $this->getVersionsList($db),
'filenames' => $this->getFilesList($db),
];
}


/**
* Greps the list of users available in the users database table.
*
Expand Down Expand Up @@ -143,7 +94,7 @@ class Data_Release extends \NDB_Menu_Filter
* @param \Database $DB database handle
*
* @return array $versionList Array of version names indexed by version
* name.
* name.
*/
function getVersionsList(\Database $DB)
{
Expand Down Expand Up @@ -247,6 +198,65 @@ class Data_Release extends \NDB_Menu_Filter
return $userFiles;
}

/**
* Function getFieldOptions
*
* @return array
*/
protected function getFieldOptions() : array
{
$db = $this->loris->getDatabaseConnection();
return [
'users' => $this->getUsersList($db),
'versions' => $this->getVersionsList($db),
'filenames' => $this->getFilesList($db),
];
}

/**
* Tells the base class that this page's provisioner can support
* the UserSiteMatch filter.
*
* @return bool always false
*/
public function useSiteFilter() : bool
{
return false;
}

/**
* Tells the base class that this page's provisioner can support the
* HasAnyPermissionOrUserSiteMatch filter.
*
* @return ?array of site permissions or null
*
*/
public function allSitePermissionNames() : ?array
{
return null;
}

/**
* {@inheritDoc}
*
* @return bool
*
*/
public function useProjectFilter() : bool
{
return false;
}

/**
* {@inheritDoc}
*
* @return \Loris\Data\Provisioner
*/
public function getBaseDataProvisioner(): \LORIS\Data\Provisioner
{
return new DataReleaseProvisioner();
}

/**
* Include the column formatter
*
Expand Down
75 changes: 75 additions & 0 deletions modules/data_release/php/datareleaseprovisioner.class.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?php declare(strict_types=1);
/**
* This class implements a data provisioner to get all data released files
* for the data_release menu page.
*
* PHP Version 7
*
* @category Core
* @package Main
* @subpackage Core
* @author Rolando Acosta <[email protected]>
* @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3
* @link https://www.github.com/aces/Loris/
*/

namespace LORIS\data_release;

/**
* This class implements a data provisioner to get all data released files
* for the data_release menu page.
*
* PHP Version 7
*
* @category Core
* @package Main
* @subpackage Core
* @author Rolando Acosta <[email protected]>
* @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3
* @link https://www.github.com/aces/Loris/
*/

class DataReleaseProvisioner extends \LORIS\Data\Provisioners\DBRowProvisioner
{
/**
* Create a DataReleaseProvisioner, which gets releases for the
* data release menu table.
*/
function __construct()
{
$user =& \User::singleton();
$query = "
SELECT
file_name AS fileName,
IF(version is null or version ='','Unversioned', version) AS version,
upload_date AS uploadDate,
dr.id as dataReleaseID
FROM data_release dr";

if (!$user->hasPermission("superuser")) {
$query.= "
INNER JOIN data_release_permissions drp
ON
(dr.id=drp.data_release_id)
WHERE
drp.UserID=".$user->getID();
}

$query.= " ORDER BY uploadDate";

parent::__construct( $query, []);
}

/**
* Returns an instance of a DataReleaseRow object for a given
* table row.
*
* @param array $row The database row from the LORIS Database class.
*
* @return \LORIS\Data\DataInstance An instance representing this row.
*/
public function getInstance($row) : \LORIS\Data\DataInstance
{
return new DataReleaseRow($row);
}
}
58 changes: 58 additions & 0 deletions modules/data_release/php/datareleaserow.class.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<?php declare(strict_types=1);
/**
* This class implements a data Instance which represents a single
* module in the acknowledgements menu table.
*
* PHP Version 7
*
* @category Core
* @package Main
* @subpackage Core
* @author Dave MacFarlane <[email protected]>
* @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3
* @link https://www.github.com/aces/Loris/
*/

namespace LORIS\data_release;

/**
* A ModuleRow represents a row in the acknowledgements menu table.
*
* The acknowledgements requires a specific "row" concept because
* the \Module class does not have any concept of the Active flag
* for the module in order to serialize it as JSON for the data
* table.
*
* @category Core
* @package Main
* @subpackage Core
* @author Dave MacFarlane <[email protected]>
* @license http://www.gnu.org/licenses/gpl-3.0.txt GPLv3
* @link https://www.github.com/aces/Loris/
*/
class DataReleaseRow implements
\LORIS\Data\DataInstance // ,
{
protected $DBRow;

/**
* Create a new HelpRow
*
* @param array $row The row
* @param \CenterID $cid The CenterID
*/
public function __construct(array $row)
{
$this->DBRow = $row;
}

/**
* Implements \LORIS\Data\DataInstance interface for this row.
*
* @return array which can be serialized by json_encode()
*/
public function jsonSerialize() : array
{
return $this->DBRow;
}
}

0 comments on commit 456ec3a

Please sign in to comment.