17 import(
'lib.pkp.controllers.grid.settings.sections.form.PKPSectionForm');
31 'controllers/grid/settings/series/form/seriesForm.tpl',
35 $this->_pressId = $pressId = $request->getContext()->getId();
42 $this->
addCheck(
new FormValidatorCustom($this,
'printIssn',
'optional',
'catalog.manage.series.issn.equalValidation',
function($printIssn) use ($form) {
43 return !($form->getData(
'onlineIssn') !=
'' && $form->getData(
'onlineIssn') == $printIssn);
47 $this,
'path',
'required',
'grid.series.pathExists',
48 function($path) use ($form, $pressId) {
50 return !$seriesDao->getByPath($path,$pressId) || ($form->getData(
'oldPath') !=
null && $form->getData(
'oldPath') == $path);
59 $press = $request->getPress();
64 $series = $seriesDao->getById($seriesId, $press->getId());
67 $categories = $seriesDao->getCategories($seriesId, $press->getId());
68 $categoryIds = array();
69 while ($category = $categories->next()) {
70 $categoryIds[] = $category->getId();
73 if (isset($series) ) {
74 $sortOption = $series->getSortOption() ? $series->getSortOption() :
DAORegistry::getDAO(
'SubmissionDAO')->getDefaultSortOption();
76 'seriesId' => $seriesId,
77 'title' => $series->getTitle(
null,
false),
78 'featured' => $series->getFeatured(),
79 'path' => $series->getPath(),
80 'description' => $series->getDescription(
null),
81 'prefix' => $series->getPrefix(
null),
82 'subtitle' => $series->getSubtitle(
null),
83 'image' => $series->getImage(),
84 'restricted' => $series->getEditorRestricted(),
85 'isInactive' => $series->getIsInactive(),
86 'onlineIssn' => $series->getOnlineISSN(),
87 'printIssn' => $series->getPrintISSN(),
88 'sortOption' => $sortOption,
89 'categories' => $categoryIds,
97 function validate($callHooks =
true) {
98 if ($temporaryFileId = $this->
getData(
'temporaryFileId')) {
99 import(
'lib.pkp.classes.file.TemporaryFileManager');
102 $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $this->_userId);
103 if ( !$temporaryFile ||
104 !($this->_imageExtension = $temporaryFileManager->getImageExtension($temporaryFile->getFileType())) ||
105 !($this->_sizeArray = getimagesize($temporaryFile->getFilePath())) ||
106 $this->_sizeArray[0] <= 0 || $this->_sizeArray[1] <= 0
108 $this->
addError(
'temporaryFileId', __(
'form.invalidImage'));
114 if ($this->
getData(
'isInactive')) {
116 $context = $request->getContext();
120 $seriesIterator = $seriesDao->getByContextId($context->getId());
121 $activeSeriesCount = 0;
122 while ($series = $seriesIterator->next()) {
123 if (!$series->getIsInactive() && ($seriesId != $series->getId())) {
124 $activeSeriesCount++;
127 if ($activeSeriesCount < 1 && $this->
getData(
'isInactive')) {
128 $this->
addError(
'isInactive', __(
'manager.series.confirmDeactivateSeries.error'));
132 return parent::validate($callHooks);
138 function fetch($request, $template =
null, $display =
false) {
140 $templateMgr->assign(
'seriesId', $this->
getSeriesId());
142 $context = $request->getContext();
145 $categoryCount = $categoryDao->getCountByContextId($context->getId());
146 $templateMgr->assign(
'categoryCount', $categoryCount);
149 $templateMgr->assign(
'sortOptions',
DAORegistry::getDAO(
'SubmissionDAO')->getSortSelectOptions());
153 'contextId' => $context->getId(),
154 'roleIds' => ROLE_ID_SUB_EDITOR,
156 $availableSubeditors = [];
157 foreach ($usersIterator as $user) {
158 $availableSubeditors[(int) $user->getId()] = $user->getFullName();
160 $assignedToSeries = [];
163 'contextId' => $context->getId(),
164 'roleIds' => ROLE_ID_SUB_EDITOR,
165 'assignedToSection' => (
int) $this->getSeriesId(),
172 $categoriesResult = $categoryDao->getByContextId($context->getId())->toAssociativeArray();
173 foreach ($categoriesResult as $category) {
174 $title = $category->getLocalizedTitle();
175 if ($category->getParentId()) {
176 $title = $categoriesResult[$category->getParentId()]->getLocalizedTitle() .
' > ' . $title;
178 $allCategories[(int) $category->getId()] = $title;
181 $templateMgr->assign([
182 'availableSubeditors' => $availableSubeditors,
183 'assignedToSeries' => $assignedToSeries,
184 'allCategories' => $allCategories,
185 'selectedCategories' => (array) $this->
getData(
'categories'),
188 return parent::fetch($request, $template, $display);
196 parent::readInputData();
197 $this->
readUserVars(array(
'seriesId',
'path',
'featured',
'restricted',
'description',
'categories',
'prefix',
'subtitle',
'temporaryFileId',
'onlineIssn',
'printIssn',
'sortOption',
'isInactive'));
201 $series = $seriesDao->getById($seriesId, $this->_pressId);
202 $this->
setData(
'oldPath', $series->getPath());
209 function execute(...$functionParams) {
210 parent::execute(...$functionParams);
214 $press = $request->getPress();
218 $series = $seriesDao->getById($this->
getSeriesId(), $press->getId());
220 $series = $seriesDao->newDataObject();
221 $series->setPressId($press->getId());
225 $series->setPath($this->
getData(
'path'));
226 $series->setFeatured($this->
getData(
'featured'));
227 $series->setTitle($this->
getData(
'title'),
null);
228 $series->setDescription($this->
getData(
'description'),
null);
229 $series->setPrefix($this->
getData(
'prefix'),
null);
230 $series->setSubtitle($this->
getData(
'subtitle'),
null);
231 $series->setEditorRestricted($this->
getData(
'restricted'));
232 $series->setIsInactive($this->
getData(
'isInactive') ? 1 : 0);
233 $series->setOnlineISSN($this->
getData(
'onlineIssn'));
234 $series->setPrintISSN($this->
getData(
'printIssn'));
235 $series->setSortOption($this->
getData(
'sortOption'));
239 $seriesDao->updateObject($series);
241 $this->
setSeriesId($seriesDao->insertObject($series));
245 if ($temporaryFileId = $this->
getData(
'temporaryFileId')) {
249 $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $this->_userId);
250 $temporaryFilePath = $temporaryFile->getFilePath();
251 import(
'lib.pkp.classes.file.ContextFileManager');
253 $basePath = $pressFileManager->getBasePath() .
'/series/';
256 $oldSetting = $series->getImage();
258 $pressFileManager->deleteByPath($basePath . $oldSetting[
'thumbnailName']);
259 $pressFileManager->deleteByPath($basePath . $oldSetting[
'name']);
263 assert($this->_sizeArray && $this->_imageExtension);
266 switch ($this->_imageExtension) {
267 case '.jpg': $image = imagecreatefromjpeg($temporaryFilePath);
break;
268 case '.png': $image = imagecreatefrompng($temporaryFilePath);
break;
269 case '.gif': $image = imagecreatefromgif($temporaryFilePath);
break;
270 default: $image =
null;
274 $coverThumbnailsMaxWidth = $press->getSetting(
'coverThumbnailsMaxWidth');
275 $coverThumbnailsMaxHeight = $press->getSetting(
'coverThumbnailsMaxHeight');
278 $xRatio = min(1, $coverThumbnailsMaxWidth / $this->_sizeArray[0]);
279 $yRatio = min(1, $coverThumbnailsMaxHeight / $this->_sizeArray[1]);
281 $ratio = min($xRatio, $yRatio);
283 $thumbnailWidth = round($ratio * $this->_sizeArray[0]);
284 $thumbnailHeight = round($ratio * $this->_sizeArray[1]);
285 $thumbnail = imagecreatetruecolor($thumbnailWidth, $thumbnailHeight);
286 imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $thumbnailWidth, $thumbnailHeight, $this->_sizeArray[0], $this->_sizeArray[1]);
290 $pressFileManager->copyFile($temporaryFile->getFilePath(), $basePath . $filename);
292 switch ($this->_imageExtension) {
293 case '.jpg': imagejpeg($thumbnail, $basePath . $thumbnailFilename);
break;
294 case '.png': imagepng($thumbnail, $basePath . $thumbnailFilename);
break;
295 case '.gif': imagegif($thumbnail, $basePath . $thumbnailFilename);
break;
297 imagedestroy($thumbnail);
298 imagedestroy($image);
300 $series->setImage(array(
302 'width' => $this->_sizeArray[0],
303 'height' => $this->_sizeArray[1],
304 'thumbnailName' => $thumbnailFilename,
305 'thumbnailWidth' => $thumbnailWidth,
306 'thumbnailHeight' => $thumbnailHeight,
307 'uploadName' => $temporaryFile->getOriginalFileName(),
312 import(
'lib.pkp.classes.file.TemporaryFileManager');
314 $temporaryFileManager->deleteById($temporaryFileId, $this->_userId);
318 $seriesDao->updateObject($series);
322 $subEditorsDao->deleteBySubmissionGroupId($series->getId(), ASSOC_TYPE_SERIES, $series->getContextId());
323 $subEditors = $this->
getData(
'subEditors');
324 if (!empty($subEditors)) {
326 foreach ($subEditors as $subEditor) {
327 if ($roleDao->userHasRole($series->getContextId(), $subEditor, ROLE_ID_SUB_EDITOR)) {
328 $subEditorsDao->insertEditor($series->getContextId(), $series->getId(), $subEditor, ASSOC_TYPE_SERIES);
335 $seriesDao->removeCategories($this->
getSeriesId());
336 $categoryIds = $this->
getData(
'categories');
337 if (!empty($categoryIds)) {
338 foreach ($categoryIds as $categoryId) {
339 $seriesDao->addCategory($this->
getSeriesId(), $categoryId);