Open Journal Systems  3.3.0
CitationStyleLanguageHandler.inc.php
1 <?php
2 
16 import('classes.handler.Handler');
17 
20  public $article = null;
21 
23  public $publication = null;
24 
26  public $issue = null;
27 
29  public $citationStyle = '';
30 
32  public $returnJson = false;
33 
41  public function get($args, $request) {
42  $this->_setupRequest($args, $request);
43 
44  $plugin = PluginRegistry::getPlugin('generic', 'citationstylelanguageplugin');
45  $citation = $plugin->getCitation($request, $this->article, $this->citationStyle, $this->issue, $this->publication);
46 
47  if ($citation === false ) {
48  if ($this->returnJson) {
49  return new JSONMessage(false);
50  }
51  exit;
52  }
53 
54  if ($this->returnJson) {
55  return new JSONMessage(true, $citation);
56  }
57 
58  echo $citation;
59  exit;
60  }
61 
68  public function download($args, $request) {
69  $this->_setupRequest($args, $request);
70 
71  $plugin = PluginRegistry::getPlugin('generic', 'citationstylelanguageplugin');
72  $plugin->downloadCitation($request, $this->article, $this->citationStyle, $this->issue, $this->publication);
73  exit;
74  }
75 
82  public function _setupRequest($args, $request) {
83  $userVars = $request->getUserVars();
84  $user = $request->getUser();
85  $context = $request->getContext();
86 
87  if (empty($userVars['submissionId']) || !$context || empty($args)) {
88  $request->getDispatcher()->handle404();
89  }
90 
91  // Load plugin categories which might need to add data to the citation
92  PluginRegistry::loadCategory('pubIds', true);
93  PluginRegistry::loadCategory('metadata', true);
94 
95  $this->citationStyle = $args[0];
96  $this->returnJson = isset($userVars['return']) && $userVars['return'] === 'json';
97  $this->article = Services::get('submission')->get($userVars['submissionId']);
98 
99  if (!$this->article) {
100  $request->getDispatcher()->handle404();
101  }
102 
103  $this->publication = !empty($userVars['publicationId'])
104  ? Services::get('publication')->get($userVars['publicationId'])
105  : $this->article->getCurrentPublication();
106 
107  if ($this->article) {
108  $issueDao = DAORegistry::getDAO('IssueDAO');
109  // Support OJS 3.1.x and 3.2
110  $issueId = method_exists($this->article, 'getCurrentPublication') ? $this->article->getCurrentPublication()->getData('issueId') : $this->article->getIssueId();
111  $this->issue = $issueDao->getById($issueId, $context->getId());
112  }
113 
114  // Disallow access to unpublished submissions, unless the user is a
115  // journal manager or an assigned subeditor or assistant. This ensures the
116  // article preview will work for those who can see it.
117  if (!$this->issue || !$this->issue->getPublished() || $this->article->getStatus() != STATUS_PUBLISHED) {
118  $userCanAccess = false;
119 
120  if ($user && $user->hasRole([ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT], $context->getId())) {
121  $isAssigned = false;
122  $userGroupDao = DAORegistry::getDAO('UserGroupDAO');
123  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO');
124  $assignments = $stageAssignmentDao->getBySubmissionAndStageId($this->article->getId());
125  foreach ($assignments as $assignment) {
126  if ($assignment->getUser()->getId() !== $user->getId()) {
127  continue;
128  }
129  $userGroup = $userGroupDao->getById($assignment->getUserGroupId($context->getId()));
130  if (in_array($userGroup->getRoleId(), [ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT])) {
131  $userCanAccess = true;
132  break;
133  }
134  }
135  }
136 
137  if ($user && $user->hasRole(ROLE_ID_MANAGER, $context->getId())) {
138  $userCanAccess = true;
139  }
140 
141  if (!$userCanAccess) {
142  $request->getDispatcher()->handle404();
143  }
144  }
145  }
146 }
147 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
CitationStyleLanguageHandler\$citationStyle
$citationStyle
Definition: CitationStyleLanguageHandler.inc.php:41
CitationStyleLanguageHandler\download
download($args, $request)
Definition: CitationStyleLanguageHandler.inc.php:83
CitationStyleLanguageHandler\$article
$article
Definition: CitationStyleLanguageHandler.inc.php:23
CitationStyleLanguageHandler\$issue
$issue
Definition: CitationStyleLanguageHandler.inc.php:35
CitationStyleLanguageHandler\_setupRequest
_setupRequest($args, $request)
Definition: CitationStyleLanguageHandler.inc.php:97
PluginRegistry\loadCategory
static loadCategory($category, $enabledOnly=false, $mainContextId=null)
Definition: PluginRegistry.inc.php:103
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
PluginRegistry\getPlugin
static getPlugin($category, $name)
Definition: PluginRegistry.inc.php:85
CitationStyleLanguageHandler\$publication
$publication
Definition: CitationStyleLanguageHandler.inc.php:29
Handler
Base request handler application class.
Definition: Handler.inc.php:18
CitationStyleLanguageHandler
Handle router requests for the citation style language plugin.
Definition: CitationStyleLanguageHandler.inc.php:18
CitationStyleLanguageHandler\$returnJson
$returnJson
Definition: CitationStyleLanguageHandler.inc.php:47
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49