getJournal(); $journalId = $journal->getId(); if (isset($subscriptionId)) { $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $subscriptionDao */ if ($subscriptionDao->subscriptionExists($subscriptionId)) { $this->subscription = $subscriptionDao->getById($subscriptionId); } } $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */ $subscriptionTypeIterator = $subscriptionTypeDao->getByInstitutional($journalId, false); $this->subscriptionTypes = []; while ($subscriptionType = $subscriptionTypeIterator->next()) { $this->subscriptionTypes[$subscriptionType->getId()] = $subscriptionType->getSummaryString(); } if (count($this->subscriptionTypes) == 0) { $this->addError('typeId', __('manager.subscriptions.form.typeRequired')); $this->addErrorField('typeId'); } // Ensure subscription type is valid $this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'typeId', 'required', 'manager.subscriptions.form.typeIdValid', function ($typeId) use ($journalId) { $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /** @var SubscriptionTypeDAO $subscriptionTypeDao */ return $subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && !$subscriptionTypeDao->getSubscriptionTypeInstitutional($typeId); })); // Ensure that user does not already have a subscription for this journal if (!isset($subscriptionId)) { $this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'userId', 'required', 'manager.subscriptions.form.subscriptionExists', [DAORegistry::getDAO('IndividualSubscriptionDAO'), 'subscriptionExistsByUserForJournal'], [$journalId], true)); } else { $this->addCheck(new \PKP\form\validation\FormValidatorCustom($this, 'userId', 'required', 'manager.subscriptions.form.subscriptionExists', function ($userId) use ($journalId, $subscriptionId) { $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $subscriptionDao */ $checkSubscription = $subscriptionDao->getByUserIdForJournal($userId, $journalId); return (!$checkSubscription || $checkSubscription->getId() == $subscriptionId) ? true : false; })); } } /** * @copydoc Form::execute() */ public function execute(...$functionArgs) { $insert = false; if (!isset($this->subscription)) { $this->subscription = new IndividualSubscription(); $insert = true; } parent::execute(...$functionArgs); $individualSubscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /** @var IndividualSubscriptionDAO $individualSubscriptionDao */ if ($insert) { $individualSubscriptionDao->insertObject($this->subscription); } else { $individualSubscriptionDao->updateObject($this->subscription); } // Send notification email if ($this->getData('notifyEmail')) { $mailable = $this->_prepareNotificationEmail(); try { Mail::send($mailable); } catch (Exception $e) { $notificationMgr = new NotificationManager(); $request = Application::get()->getRequest(); $notificationMgr->createTrivialNotification($request->getUser()->getId(), PKPNotification::NOTIFICATION_TYPE_ERROR, ['contents' => __('email.compose.error')]); error_log($e->getMessage()); } } } }