/** * Issue master DOI for tool resources if does not exist * * @param object $job \Components\Cron\Models\Job * @return boolean */ public function issueResourceMasterDoi(\Components\Cron\Models\Job $job) { $database = App::get('db'); $config = Component::params('com_publications'); // Is config to issue master DOI turned ON? if (!$config->get('master_doi')) { return true; } // Get all tool resources without master DOI $sql = "SELECT r.id, r.created_by, v.id as tool_version_id,\n\t\t\t\tv.toolid, v.toolname, v.title, v.description,\n\t\t\t\tv.instance, v.revision, v.released\n\t\t\t\tFROM #__resources AS r, #__tool_version AS v\n\t\t\t\tWHERE r.published=1\n\t\t\t\tAND r.type=7\n\t\t\t\tAND r.standalone=1\n\t\t\t\tAND r.alias=v.toolname\n\t\t\t\tAND v.state=1\n\t\t\t\tAND (r.master_doi IS NULL OR r.master_doi=0)\n\t\t\t\tGROUP BY r.id\n\t\t\t\tORDER BY v.title, v.toolname, v.revision DESC"; $database->setQuery($sql); if (!($rows = $database->loadObjectList())) { // No applicable results return true; } // Includes require_once PATH_CORE . DS . 'components' . DS . 'com_resources' . DS . 'tables' . DS . 'resource.php'; include_once PATH_CORE . DS . 'components' . DS . 'com_publications' . DS . 'models' . DS . 'doi.php'; // Get DOI service $doiService = new \Components\Publications\Models\Doi(); // Is service enabled? if (!$doiService->on() || !$doiService->_configs->livesite) { return true; } // Go through records foreach ($rows as $row) { // Reset metadata $doiService->reset(); // Map data $pubYear = $row->released && $row->released != '0000-00-00 00:00:00' ? gmdate('Y', strtotime($row->released)) : gmdate('Y'); $doiService->set('pubYear', $pubYear); $doiService->mapUser($row->created_by, array(), 'creator'); $doiService->set('resourceType', 'Software'); $doiService->set('title', htmlspecialchars(stripslashes($row->title))); $doiService->set('url', $doiService->_configs->livesite . DS . 'resources' . DS . $row->toolname . DS . 'main'); // Register DOI $masterDoi = $doiService->register(); // Save with publication record $resource = new \Components\Resources\Tables\Resource($database); if ($masterDoi && $resource->load($row->id)) { $resource->master_doi = strtoupper($masterDoi); $resource->store(); } } return true; }
/** * Issue master DOI for publications if does not exist * * @param $job \Components\Cron\Models\Job * @return boolean */ public function issueMasterDoi(\Components\Cron\Models\Job $job) { $database = \App::get('db'); $config = Component::params('com_publications'); // Is config to issue master DOI turned ON? if (!$config->get('master_doi')) { return true; } // Get all publications without master DOI $sql = "SELECT V.* FROM #__publication_versions as V, #__publications as C"; $sql .= " WHERE C.id=V.publication_id AND (C.master_doi IS NULL OR master_doi=0)"; $sql .= " AND V.state=1 GROUP BY C.id ORDER BY V.version_number ASC"; $database->setQuery($sql); if (!($rows = $database->loadObjectList())) { // No applicable results return true; } include_once PATH_CORE . DS . 'components' . DS . 'com_publications' . DS . 'models' . DS . 'publication.php'; // Get DOI service $doiService = new \Components\Publications\Models\Doi(); // Is service enabled? if (!$doiService->on() || !$doiService->_configs->livesite) { return true; } // Go through records foreach ($rows as $row) { // Load publication model $model = new \Components\Publications\Models\Publication($row->publication_id, $row->id); // Check to make sure we got result if (!$model->exists()) { continue; } // Map publication $doiService->mapPublication($model); // Build url $pointer = $model->publication->alias ? $model->publication->alias : $model->publication->id; $url = $doiService->_configs->livesite . DS . 'publications' . DS . $pointer . DS . 'main'; // Master DOI should link to /main $doiService->set('url', $url); // Register DOI $masterDoi = $doiService->register(); // Save with publication record if ($masterDoi) { $model->publication->master_doi = strtoupper($masterDoi); $model->publication->store(); } } return true; }