function &createQueuedPayment($journalId, $type, $userId, $assocId, $amount, $currencyCode = null)
{
$journalSettingsDao = DAORegistry::getDAO('JournalSettingsDAO');
if (is_null($currencyCode)) {
$currencyCode = $journalSettingsDao->getSetting($journalId, 'currency');
}
$payment = new OJSQueuedPayment($amount, $currencyCode, $userId, $assocId);
$payment->setJournalId($journalId);
$payment->setType($type);
$router = $this->request->getRouter();
$dispatcher = $router->getDispatcher();
switch ($type) {
case PAYMENT_TYPE_PURCHASE_ARTICLE:
$payment->setRequestUrl($dispatcher->url($this->request, ROUTE_PAGE, null, 'article', 'view', $assocId));
break;
case PAYMENT_TYPE_PURCHASE_ISSUE:
$payment->setRequestUrl($dispatcher->url($this->request, ROUTE_PAGE, null, 'issue', 'view', $assocId));
break;
case PAYMENT_TYPE_MEMBERSHIP:
$payment->setRequestUrl($dispatcher->url($this->request, ROUTE_PAGE, null, 'user'));
break;
case PAYMENT_TYPE_PURCHASE_SUBSCRIPTION:
case PAYMENT_TYPE_RENEW_SUBSCRIPTION:
$payment->setRequestUrl($dispatcher->url($this->request, ROUTE_PAGE, null, 'user', 'subscriptions'));
break;
case PAYMENT_TYPE_DONATION:
$payment->setRequestUrl($dispatcher->url($this->request, ROUTE_PAGE, null, 'donations', 'thankYou'));
break;
case PAYMENT_TYPE_FASTTRACK:
case PAYMENT_TYPE_PUBLICATION:
case PAYMENT_TYPE_SUBMISSION:
$submissionDao = Application::getSubmissionDAO();
$submission = $submissionDao->getById($assocId);
if ($submission->getSubmissionProgress() != 0) {
$payment->setRequestUrl($dispatcher->url($this->request, ROUTE_PAGE, null, 'submission', 'wizard', $submission->getSubmissionProgress(), array('submissionId' => $assocId)));
} else {
$payment->setRequestUrl($dispatcher->url($this->request, ROUTE_PAGE, null, 'author'));
}
break;
case PAYMENT_TYPE_GIFT:
$payment->setRequestUrl($dispatcher->url($this->request, ROUTE_PAGE, null, 'gifts', 'thankYou'));
break;
default:
// Invalid payment type
assert(false);
break;
}
return $payment;
}