Open Journal Systems  3.3.0
PKPPublication.inc.php
1 <?php
2 
17 class PKPPublication extends DataObject {
18 
32  public function getLocalizedData($key, $preferredLocale = null) {
33  // 1. Preferred locale
34  if ($preferredLocale && $this->getData($key, $preferredLocale)) {
35  return $this->getData($key, $preferredLocale);
36  }
37  // 2. User's current locale
38  if (!empty($this->getData($key, AppLocale::getLocale()))) {
39  return $this->getData($key, AppLocale::getLocale());
40  }
41  // 3. Publication's primary locale
42  if (!empty($this->getData($key, $this->getData('locale')))) {
43  return $this->getData($key, $this->getData('locale'));
44  }
45  // 4. The first locale we can find data for
46  $data = $this->getData($key, null);
47  foreach ((array) $data as $value) {
48  if (!empty($value)) {
49  return $value;
50  }
51  }
52 
53  return null;
54  }
55 
63  public function getLocalizedFullTitle($preferredLocale = null) {
64  $fullTitle = $this->getLocalizedTitle($preferredLocale);
65  $subtitle = $this->getLocalizedData('subtitle', $preferredLocale);
66  if ($subtitle) {
67  return PKPString::concatTitleFields([$fullTitle, $subtitle]);
68  }
69  return $fullTitle;
70  }
71 
77  public function getFullTitles() {
78  $allTitles = (array) $this->getData('title');
79  $return = [];
80  foreach ($allTitles as $locale => $title) {
81  if (!$title) {
82  continue;
83  }
84  $return[$locale] = $this->getLocalizedFullTitle($locale);
85  }
86  return $return;
87  }
88 
96  public function getLocalizedTitle($preferredLocale = null) {
97  $prefix = $this->getLocalizedData('prefix', $preferredLocale);
98  $title = $this->getLocalizedData('title', $preferredLocale);
99  if ($prefix) {
100  return $prefix . ' ' . $title;
101  }
102  return $title;
103  }
104 
110  public function getTitles() {
111  $allTitles = $this->getData('title');
112  $return = [];
113  foreach ($allTitles as $locale => $title) {
114  if (!$title) {
115  continue;
116  }
117  $return[] = $this->getLocalizedTitle($locale);
118  }
119  return $return;
120  }
121 
130  public function getAuthorString($userGroups) {
131  $authors = $this->getData('authors');
132 
133  if (empty($authors)) {
134  return '';
135  }
136 
137  $str = '';
138  $lastUserGroupId = null;
139  foreach($authors as $author) {
140  if (!empty($str)) {
141  if ($lastUserGroupId != $author->getData('userGroupId')) {
142  foreach ($userGroups as $userGroup) {
143  if ($lastUserGroupId === $userGroup->getId()) {
144  if ($userGroup->getData('showTitle')) {
145  $str .= ' (' . $userGroup->getLocalizedData('name') . ')';
146  }
147  break;
148  }
149  }
150  $str .= __('common.semicolonListSeparator');
151  } else {
152  $str .= __('common.commaListSeparator');
153  }
154  }
155  $str .= $author->getFullName();
156  $lastUserGroupId = $author->getUserGroupId();
157  }
158 
159  // If there needs to be a trailing user group title, add it
160  if (isset($author)) {
161  foreach($userGroups as $userGroup) {
162  if ($author->getData('userGroupId') === $userGroup->getId()) {
163  if ($userGroup->getData('showTitle')) {
164  $str .= ' (' . $userGroup->getLocalizedData('name') . ')';
165  }
166  break;
167  }
168  }
169  }
170 
171  return $str;
172  }
173 
181  public function getShortAuthorString() {
182  $authors = $this->getData('authors');
183 
184  if (empty($authors)) {
185  return '';
186  }
187 
188  $str = $authors[0]->getLocalizedFamilyName();
189  if (!$str) {
190  $str = $authors[0]->getLocalizedGivenName();
191  }
192 
193  if (count($authors) > 1) {
194  AppLocale::requireComponents(LOCALE_COMPONENT_PKP_SUBMISSION);
195  return __('submission.shortAuthor', ['author' => $str]);
196  }
197 
198  return $str;
199  }
200 
206  public function getPrimaryAuthor() {
207  if (empty($this->getData('authors'))) {
208  return null;
209  }
210  foreach ($this->getData('authors') as $author) {
211  if ($author->getId() === $this->getData('primaryContactId')) {
212  return $author;
213  }
214  }
215  }
216 
220  public function stampModified() {
221  return $this->setData('lastModified', Core::getCurrentDate());
222  }
223 
232  public function getStartingPage() {
233  $ranges = $this->getPageArray();
234  $firstRange = array_shift($ranges);
235  if (is_array($firstRange)) {
236  return array_shift($firstRange);
237  }
238  return '';
239  }
240 
249  public function getEndingPage() {
250  $ranges = $this->getPageArray();
251  $lastRange = array_pop($ranges);
252  $lastPage = is_array($lastRange) ? array_pop($lastRange) : "";
253  return isset($lastPage) ? $lastPage : "";
254  }
255 
271  public function getPageArray() {
272  $pages = $this->getData('pages');
273  // Strip any leading word
274  if (preg_match('/^[[:alpha:]]+\W/', $pages)) {
275  // but don't strip a leading roman numeral
276  if (!preg_match('/^[MDCLXVUI]+\W/i', $pages)) {
277  // strip the word or abbreviation, including the period or colon
278  $pages = preg_replace('/^[[:alpha:]]+[:.]?/', '', $pages);
279  }
280  }
281  // strip leading and trailing space
282  $pages = trim($pages);
283  // shortcut the explode/foreach if the remainder is an empty value
284  if ($pages === '') {
285  return array();
286  }
287  // commas indicate distinct ranges
288  $ranges = explode(',', $pages);
289  $pageArray = array();
290  foreach ($ranges as $range) {
291  // hyphens (or double-hyphens) indicate range spans
292  $pageArray[] = array_map('trim', explode('-', str_replace('--', '-', $range), 2));
293  }
294  return $pageArray;
295  }
296 
302  function isCCLicense() {
303  return preg_match('/creativecommons\.org/i', $this->getData('licenseUrl'));
304  }
305 
312  function getStoredPubId($pubIdType) {
313  return $this->getData('pub-id::' . $pubIdType);
314  }
315 }
316 
317 
DataObject\getData
& getData($key, $locale=null)
Definition: DataObject.inc.php:100
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
PKPPublication
Base class for Publication.
Definition: PKPPublication.inc.php:17
PKPPublication\getLocalizedTitle
getLocalizedTitle($preferredLocale=null)
Definition: PKPPublication.inc.php:96
DataObject
Any class with an associated DAO should extend this class.
Definition: DataObject.inc.php:18
PKPPublication\getLocalizedData
getLocalizedData($key, $preferredLocale=null)
Definition: PKPPublication.inc.php:32
PKPPublication\getStartingPage
getStartingPage()
Definition: PKPPublication.inc.php:232
PKPPublication\isCCLicense
isCCLicense()
Definition: PKPPublication.inc.php:302
PKPString\concatTitleFields
static concatTitleFields($fields)
Definition: PKPString.inc.php:410
PKPPublication\getShortAuthorString
getShortAuthorString()
Definition: PKPPublication.inc.php:181
PKPPublication\getLocalizedFullTitle
getLocalizedFullTitle($preferredLocale=null)
Definition: PKPPublication.inc.php:63
PKPPublication\getPrimaryAuthor
getPrimaryAuthor()
Definition: PKPPublication.inc.php:206
PKPPublication\getAuthorString
getAuthorString($userGroups)
Definition: PKPPublication.inc.php:130
PKPPublication\getStoredPubId
getStoredPubId($pubIdType)
Definition: PKPPublication.inc.php:312
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
PKPPublication\getPageArray
getPageArray()
Definition: PKPPublication.inc.php:271
PKPPublication\stampModified
stampModified()
Definition: PKPPublication.inc.php:220
PKPPublication\getFullTitles
getFullTitles()
Definition: PKPPublication.inc.php:77
PKPPublication\getTitles
getTitles()
Definition: PKPPublication.inc.php:110
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40
DataObject\setData
setData($key, $value, $locale=null)
Definition: DataObject.inc.php:132
PKPPublication\getEndingPage
getEndingPage()
Definition: PKPPublication.inc.php:249