Skip to content

Commit

Permalink
overhaul JavaScript for forms and add publicationTab, closes TIBHanno…
Browse files Browse the repository at this point in the history
…ver#53

- have one init callback function
- use textareas for hidden data fields
- use name to access hidden textareas
  • Loading branch information
nuest committed Sep 2, 2022
1 parent 66b432a commit 648651c
Show file tree
Hide file tree
Showing 16 changed files with 850 additions and 612 deletions.
185 changes: 77 additions & 108 deletions OptimetaGeoPlugin.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,41 @@
* @brief Plugin class for the OPTIMETA project's geo plugin.
*/

import('lib.pkp.classes.plugins.GenericPlugin');

use phpDocumentor\Reflection\Types\Null_;
use \PKP\components\forms\FormComponent;
use \PKP\components\forms\FieldHTML; // needed for function extendScheduleForPublication

const MAP_URL_PATH = 'map';

const DB_FIELD_SPATIAL = 'optimetaGeo::spatialProperties';
const DB_FIELD_TIME_PERIODS = 'optimetaGeo::timePeriods';
const DB_FIELD_ADMINUNIT = 'optimetaGeo::administrativeUnit';
// following names are also used in JavaScript files to identify fields
const OPTIMETA_GEO_DB_FIELD_TIME_PERIODS = 'optimetaGeo::timePeriods';
const OPTIMETA_GEO_DB_FIELD_SPATIAL = 'optimetaGeo::spatialProperties';
const OPTIMETA_GEO_DB_FIELD_ADMINUNIT = 'optimetaGeo::administrativeUnit';

const OPTIMETA_GEO_FORM_NAME = 'OptimetaGeo_PublicationForm';

const OPTIMETA_GEO_PLUGIN_PATH = __DIR__;

require_once (OPTIMETA_GEO_PLUGIN_PATH . '/vendor/autoload.php');

import('lib.pkp.classes.plugins.GenericPlugin');

import('plugins.generic.optimetaGeo.classes.Components.Forms.PublicationForm');

use Optimeta\Geo\Components\Forms\PublicationForm;

class OptimetaGeoPlugin extends GenericPlugin
{
protected $ojsVersion = '3.3.0.0';

protected $ojsVersion = '3.3.0.0';
protected $versionSpecificNameState = 'state';

protected $templateParameters = [
'pluginStylesheetURL' => '',
'pluginJavaScriptURL' => '',
];

public $dbFields = [
'spatial' => DB_FIELD_SPATIAL,
'temporal' => DB_FIELD_TIME_PERIODS,
'admin' => DB_FIELD_ADMINUNIT,
'spatial' => OPTIMETA_GEO_DB_FIELD_SPATIAL,
'temporal' => OPTIMETA_GEO_DB_FIELD_TIME_PERIODS,
'admin' => OPTIMETA_GEO_DB_FIELD_ADMINUNIT,
];

public function register($category, $path, $mainContextId = NULL)
Expand All @@ -59,9 +68,6 @@ public function register($category, $path, $mainContextId = NULL)
// Hooks for changing the frontent Submit an Article 3. Enter Metadata
HookRegistry::register('Templates::Submission::SubmissionMetadataForm::AdditionalMetadata', array($this, 'extendSubmissionMetadataFormTemplate'));

// Hooks for changing the Metadata right before Schedule for Publication (not working yet)
//HookRegistry::register('Form::config::before', array($this, 'extendScheduleForPublication'));

// Hooks for changing the article page
HookRegistry::register('Templates::Article::Main', array(&$this, 'extendArticleMainTemplate'));
HookRegistry::register('Templates::Article::Details', array(&$this, 'extendArticleDetailsTemplate'));
Expand Down Expand Up @@ -116,11 +122,9 @@ public function register($category, $path, $mainContextId = NULL)
$templateMgr->assign('optimetageo_markerBaseUrl', $request->getBaseUrl() . '/' . $this->getPluginPath() . '/js/lib/leaflet-color-markers/img/');

$templateMgr->assign('optimetageo_mapUrlPath', MAP_URL_PATH);
$templateMgr->assign('optimetageo_metadataLicense', '<a href="https://creativecommons.org/publicdomain/zero/1.0/">CC-0</a>'); // TODO make configurable

// publication tab
// ...
$templateMgr->assign('optimetageo_metadataLicense', '<a href="https://creativecommons.org/publicdomain/zero/1.0/">CC-0</a>');
}

return $success;
}

Expand Down Expand Up @@ -157,11 +161,11 @@ function extendArticleView($hookName, $args)
$templateMgr->addHeader('dublinCoreTemporal', '<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />');

// https://www.dublincore.org/specifications/dublin-core/dcmi-terms/terms/spatial/
if ($spatial = $publication->getData(DB_FIELD_SPATIAL)) {
if ($spatial = $publication->getData(OPTIMETA_GEO_DB_FIELD_SPATIAL)) {
$templateMgr->addHeader('dublinCoreSpatialCoverage', '<meta name="DC.SpatialCoverage" scheme="GeoJSON" content="' . htmlspecialchars(strip_tags($spatial)) . '" />');
}

if ($administrativeUnit = $publication->getData(DB_FIELD_ADMINUNIT)) {
if ($administrativeUnit = $publication->getData(OPTIMETA_GEO_DB_FIELD_ADMINUNIT)) {
$administrativeUnitNames = array_map(function ($unit) {
return $unit->name;
}, json_decode($administrativeUnit));
Expand Down Expand Up @@ -201,7 +205,7 @@ function extendArticleView($hookName, $args)
}
}

if ($timePeriods = $publication->getData(DB_FIELD_TIME_PERIODS)) {
if ($timePeriods = $publication->getData(OPTIMETA_GEO_DB_FIELD_TIME_PERIODS)) {
// FIXME crazy use of explode makes more sense when we support multiple periods
$begin = explode('..', explode('{', $timePeriods)[1])[0];
$end = explode('}', explode('..', explode('{', $timePeriods)[1])[1])[0];
Expand Down Expand Up @@ -266,9 +270,9 @@ public function extendSubmissionMetadataFormTemplate($hookName, $params)
$publication = $publicationDao->getById($submissionId);
// TODO check if the submission really belongs to the journal

$timePeriods = $publication->getData(DB_FIELD_TIME_PERIODS);
$spatialProperties = $publication->getData(DB_FIELD_SPATIAL);
$administrativeUnit = $publication->getData(DB_FIELD_ADMINUNIT);
$timePeriods = $publication->getData(OPTIMETA_GEO_DB_FIELD_TIME_PERIODS);
$spatialProperties = $publication->getData(OPTIMETA_GEO_DB_FIELD_SPATIAL);
$administrativeUnit = $publication->getData(OPTIMETA_GEO_DB_FIELD_ADMINUNIT);

// for the case that no data is available
if ($timePeriods === null) {
Expand All @@ -284,9 +288,11 @@ public function extendSubmissionMetadataFormTemplate($hookName, $params)
}

//assign data as variables to the template
$templateMgr->assign('timePeriodsFromDb', $timePeriods);
$templateMgr->assign('spatialPropertiesFromDb', $spatialProperties);
$templateMgr->assign('administrativeUnitFromDb', $administrativeUnit);
$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_TIME_PERIODS, $timePeriods);
$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_SPATIAL, $spatialProperties);
$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_ADMINUNIT, $administrativeUnit);

$templateMgr->assign($this->templateParameters);

// here the original template is extended by the additional template for entering geospatial metadata
$output .= $templateMgr->fetch($this->getTemplateResource('submission/form/submissionMetadataFormFields.tpl'));
Expand All @@ -306,12 +312,12 @@ public function extendArticleMainTemplate($hookName, $params)
$output = &$params[2];

$publication = $templateMgr->getTemplateVars('publication');
$journal = Application::get()->getRequest()->getJournal();
//$journal = Application::get()->getRequest()->getJournal();

// get data from database
$temporalProperties = $publication->getData(DB_FIELD_TIME_PERIODS);
$spatialProperties = $publication->getData(DB_FIELD_SPATIAL);
$administrativeUnit = $publication->getData(DB_FIELD_ADMINUNIT);
$temporalProperties = $publication->getData(OPTIMETA_GEO_DB_FIELD_TIME_PERIODS);
$spatialProperties = $publication->getData(OPTIMETA_GEO_DB_FIELD_SPATIAL);
$administrativeUnit = $publication->getData(OPTIMETA_GEO_DB_FIELD_ADMINUNIT);
//$publication->getLocalizedData('coverage', $journal->getPrimaryLocale());

// for the case that no data is available
Expand All @@ -328,9 +334,11 @@ public function extendArticleMainTemplate($hookName, $params)
}

//assign data as variables to the template
$templateMgr->assign('temporalProperties', $temporalProperties);
$templateMgr->assign('spatialProperties', $spatialProperties);
$templateMgr->assign('administrativeUnit', $administrativeUnit);
$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_TIME_PERIODS, $temporalProperties);
$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_SPATIAL, $spatialProperties);
$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_ADMINUNIT, $administrativeUnit);

$templateMgr->assign($this->templateParameters);

$output .= $templateMgr->fetch($this->getTemplateResource('frontend/objects/article_details.tpl'));

Expand Down Expand Up @@ -393,25 +401,25 @@ public function extendIssueTocArticleTemplate($hookName, $params)
}
}

$spatialProperties = $publication->getData(DB_FIELD_SPATIAL);
$spatialProperties = $publication->getData(OPTIMETA_GEO_DB_FIELD_SPATIAL);
if (($spatialProperties === null || $spatialProperties === '{"type":"FeatureCollection","features":[],"administrativeUnits":{},"temporalProperties":{"timePeriods":[],"provenance":"not available"}}')) {
$spatialProperties = 'no data';
}
$templateMgr->assign('spatialProperties', $spatialProperties);
$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_SPATIAL, $spatialProperties);

$templateMgr->assign('journal', Application::get()->getRequest()->getJournal()); // access primary locale

//$temporalProperties = $publication->getData(DB_FIELD_TIME_PERIODS);
//$temporalProperties = $publication->getData(OPTIMETA_GEO_DB_FIELD_TIME_PERIODS);
//if ($temporalProperties === null || $temporalProperties === '') {
// $temporalProperties = 'no data';
//}
//$templateMgr->assign('temporalProperties', $temporalProperties);
//$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_TIME_PERIODS, $temporalProperties);

//$administrativeUnit = $publication->getLocalizedData('coverage', $journal->getPrimaryLocale());
//if ($administrativeUnit === null || $administrativeUnit === '') {
// $administrativeUnit = 'no data';
//}
//$templateMgr->assign('administrativeUnit', $administrativeUnit);
//$templateMgr->assign(OPTIMETA_GEO_DB_FIELD_ADMINUNIT, $administrativeUnit);

$output .= $templateMgr->fetch($this->getTemplateResource('frontend/objects/issue_details.tpl'));

Expand All @@ -431,32 +439,30 @@ public function extendPublicationTab(string $hookName, array $args): void
$context = $request->getContext();
$submission = $templateMgr->getTemplateVars('submission');
$submissionId = $submission->getId();

$latestPublication = $submission->getLatestPublication();

$dispatcher = $request->getDispatcher();
//$latestPublication = $submission->getLatestPublication();
//$apiBaseUrl = $dispatcher->url($request, ROUTE_API, $context->getData('urlPath'), '');

//$form = new PublicationForm(
// $apiBaseUrl . 'submissions/' . $submissionId . '/publications/' . $latestPublication->getId(),
// $latestPublication,
// __('plugins.generic.optimetaCitationsPlugin.publication.success')
//);

//$stateVersionDependentName = 'state';
//if (strstr($this->ojsVersion, '3.2.1')) {
// $stateVersionDependentName = 'workflowData';
//}
$apiBaseUrl = $dispatcher->url($request, ROUTE_API, $context->getData('urlPath'), '');

$usernameGeonames = $this->getSetting($context->getId(), 'optimetaGeo_geonames_username');
$templateMgr->assign('usernameGeonames', $usernameGeonames);
$baseurlGeonames = $this->getSetting($context->getId(), 'optimetaGeo_geonames_baseurl');
$templateMgr->assign('baseurlGeonames', $baseurlGeonames);

//$state = $templateMgr->getTemplateVars($stateVersionDependentName);
//$state['components'][$this->publicationForm] = $form->getConfig();
//$templateMgr->assign($stateVersionDependentName, $state);
//$publicationDao = DAORegistry::getDAO('PublicationDAO');
//$publication = $publicationDao->getById($submissionId);

$publicationDao = DAORegistry::getDAO('PublicationDAO');
$publication = $publicationDao->getById($submissionId);
$form = new PublicationForm(
$apiBaseUrl . 'submissions/' . $submissionId . '/publications/' . $latestPublication->getId(),
$latestPublication,
__('plugins.generic.optimetaCitationsPlugin.publication.success'));

$state = $templateMgr->getTemplateVars($this->versionSpecificNameState);
$state['components'][OPTIMETA_GEO_FORM_NAME] = $form->getConfig();
$templateMgr->assign($this->versionSpecificNameState, $state);

$templateMgr->assign('submissionId', $submissionId);

$this->templateParameters['submissionId'] = $submissionId;
//$this->templateParameters['citationsParsed'] = $citationsParsed;
//$this->templateParameters['citationsRaw'] = $citationsRaw;
$templateMgr->assign($this->templateParameters);

$templateMgr->display($this->getTemplateResource("submission/form/publicationTab.tpl"));
Expand All @@ -481,7 +487,7 @@ public function addToSchema($hookName, $params)
"nullable"
]
}';
$schema->properties->{DB_FIELD_TIME_PERIODS} = json_decode($timePeriods);
$schema->properties->{OPTIMETA_GEO_DB_FIELD_TIME_PERIODS} = json_decode($timePeriods);

$spatialProperties = '{
"type": "string",
Expand All @@ -491,7 +497,7 @@ public function addToSchema($hookName, $params)
"nullable"
]
}';
$schema->properties->{DB_FIELD_SPATIAL} = json_decode($spatialProperties);
$schema->properties->{OPTIMETA_GEO_DB_FIELD_SPATIAL} = json_decode($spatialProperties);

$administrativeUnits = '{
"type": "string",
Expand All @@ -501,7 +507,7 @@ public function addToSchema($hookName, $params)
"nullable"
]
}';
$schema->properties->{DB_FIELD_ADMINUNIT} = json_decode($administrativeUnits);
$schema->properties->{OPTIMETA_GEO_DB_FIELD_ADMINUNIT} = json_decode($administrativeUnits);

return false;
}
Expand All @@ -517,21 +523,21 @@ function editPublication(string $hookname, array $params)
$newPublication = $params[0];
$params = $params[2];

$temporalProperties = $_POST['temporalProperties'];
$spatialProperties = $_POST['spatialProperties'];
$administrativeUnit = $_POST['administrativeUnit'];
$temporalProperties = $_POST[OPTIMETA_GEO_DB_FIELD_TIME_PERIODS];
$spatialProperties = $_POST[OPTIMETA_GEO_DB_FIELD_SPATIAL];
$administrativeUnit = $_POST[OPTIMETA_GEO_DB_FIELD_ADMINUNIT];

// null if there is no possibility to input data (metadata input before Schedule for Publication)
if ($spatialProperties !== null) {
$newPublication->setData(DB_FIELD_SPATIAL, $spatialProperties);
$newPublication->setData(OPTIMETA_GEO_DB_FIELD_SPATIAL, $spatialProperties);
}

if ($temporalProperties !== null && $temporalProperties !== "") {
$newPublication->setData(DB_FIELD_TIME_PERIODS, $temporalProperties);
$newPublication->setData(OPTIMETA_GEO_DB_FIELD_TIME_PERIODS, $temporalProperties);
}

if ($administrativeUnit !== null) {
$newPublication->setData(DB_FIELD_ADMINUNIT, $administrativeUnit);
$newPublication->setData(OPTIMETA_GEO_DB_FIELD_ADMINUNIT, $administrativeUnit);

// turn admin units into string then save in Coverage field
$administrativeUnitNames = array_map(function ($unit) {
Expand All @@ -544,43 +550,6 @@ function editPublication(string $hookname, array $params)
}
}

/**
* Not working function to edit a form before Schedule for Publication.
* Possible solution can be found here: https://forum.pkp.sfu.ca/t/insert-in-submission-settings-table/61291/19?u=tnier01,
* which is already implemented partly here, but commented out!
*/
public function extendScheduleForPublication(string $hookName, FormComponent $form): void
{

// Import the FORM_METADATA constant
import('lib.pkp.classes.components.forms.publication.PKPMetadataForm');

if ($form->id !== 'metadata' || !empty($form->errors)) return;

if ($form->id === 'metadata') {

/*
$publication = Services::get('publication');
$temporalProperties = $publication->getData(DB_FIELD_TIME_PERIODS);
$spatialProperties = $publication->getData(DB_FIELD_SPATIAL);
*/

/*$form->addField(new \PKP\components\forms\FieldOptions('jatsParser::references', [
'label' => 'Hello',
'description' => 'Hello',
'type' => 'radio',
'options' => null,
'value' => null
]));*/

// Add a plain HTML field to the form
/*$form->addField(new FieldHTML('myFieldName', [
'label' => 'My Field Name',
'description' => '<p>Add any HTML code that you want.</p>',
]));*/
}
}

/**
* @copydoc Plugin::getActions() - https://docs.pkp.sfu.ca/dev/plugin-guide/en/settings
* Function needed for Plugin Settings.
Expand Down
Loading

0 comments on commit 648651c

Please sign in to comment.