示例#1
0
 /**
  * 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;
 }
示例#2
0
 /**
  * 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;
 }