public function createContract($userSID, $invoiceID, $reactivation, $status = 'active') { $listingNumber = !empty($this->product['qty']) ? $this->product['qty'] : null; if ($this->recurringID) { $contract = new SJB_Contract(array('product_sid' => $this->product['sid'], 'recurring_id' => $this->recurringID, 'gateway_id' => $this->gatewayID, 'invoice_id' => $invoiceID, 'numberOfListings' => $listingNumber)); $contractSID = SJB_ContractManager::getContractSIDByRecurringId($this->recurringID); SJB_ContractManager::deleteAllContractsByRecurringId($this->recurringID); } else { $contract = new SJB_Contract(array('product_sid' => $this->product['sid'], 'gateway_id' => $this->gatewayID, 'invoice_id' => $invoiceID, 'numberOfListings' => $listingNumber)); if ($invoiceID) { SJB_ContractManager::deletePendingContractByInvoiceID($invoiceID, $userSID, $this->product['sid']); } } $contract->setUserSID($userSID); $contract->setPrice($this->product['amount']); $contract->setStatus($status); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($this->product['shoppingCartRecord'], $userSID); $bannerInfo = $this->product['banner_info']; if ($this->product['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); if (isset($contractSID)) { $bannerID = $bannersObj->getBannerIDByContract($contractSID); if ($bannerID) { $bannersObj->updateBannerContract($contract->getID(), $bannerID); } } else { $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $userSID, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($userSID, $bannerGroup); } } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($userSID); } SJB_Statistics::addStatistics('payment', 'product', $this->product['sid'], false, 0, 0, $userSID, $this->product['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($userSID)) { SJB_Notifications::sendSubscriptionActivationLetter($userSID, $this->product, $reactivation); } } }
/** * Recurring notification handlign function * @param array|null $callback_data Notification data */ function handleRecurringNotification($callback_data) { if (SJB_Array::get($callback_data, 'txn_type') == 'subscr_cancel' || SJB_Array::get($callback_data, 'txn_type') == 'subscr_eot') { SJB_ContractManager::removeSubscriptionId(SJB_Array::get($callback_data, 'subscr_id')); return; } if (SJB_Array::get($callback_data, 'txn_type') != 'subscr_payment') { return; } $invoice_sid = isset($callback_data['item_number']) ? $callback_data['item_number'] : null; if (is_null($invoice_sid)) { return; } $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); if (is_null($invoice)) { return null; } $reactivation = false; $status = $invoice->getStatus(); if ($invoice->getStatus() == SJB_Invoice::INVOICE_STATUS_PAID) { // Пришёл рекьюринг платёж $invoice->setSID(null); $invoice->setDate(null); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); $reactivation = true; } $invoice->setCallbackData($callback_data); if ($this->isPaymentVerified($invoice) && in_array($callback_data['payment_status'], array('Completed', 'Processed'))) { $items = $invoice->getPropertyValue('items'); $user_sid = $invoice->getUserSID(); $subscriptionSID = $callback_data['custom']; if (!empty($items['products'])) { $recurringProductsInfo = array(); foreach ($items['products'] as $key => $product) { if ($product != -1) { $productInfo = $invoice->getItemValue($key); if ($status == SJB_Invoice::INVOICE_STATUS_PAID && $subscriptionSID == $product) { $listingNumber = $productInfo['qty']; $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $callback_data['subscr_id'], 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); $contract->setUserSID($user_sid); $contractSID = SJB_ContractManager::getContractSIDByRecurringId($callback_data['subscr_id']); SJB_ContractManager::deleteAllContractsByRecurringId($callback_data['subscr_id']); $contract->setPrice($productInfo['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $user_sid); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); if (isset($contractSID)) { $bannerID = $bannersObj->getBannerIDByContract($contractSID); if ($bannerID) { $bannersObj->updateBannerContract($contract->getID(), $bannerID); } } else { $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $user_sid, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($user_sid, $bannerGroup); } } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($user_sid); } SJB_Statistics::addStatistics('payment', 'product', $product, false, 0, 0, $user_sid, $productInfo['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $productInfo, $reactivation); } } $recurringProductsInfo[$key] = $productInfo; } elseif ($status != SJB_Invoice::INVOICE_STATUS_PAID) { $listingNumber = $productInfo['qty']; if ($subscriptionSID == $product) { $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $callback_data['subscr_id'], 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); } else { $contract = new SJB_Contract(array('product_sid' => $product, 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); } $contract->setUserSID($user_sid); $contract->setPrice($productInfo['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $user_sid); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo) && $contractSID) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $user_sid, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($user_sid, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($user_sid); } SJB_Statistics::addStatistics('payment', 'product', $product, false, 0, 0, $user_sid, $productInfo['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $productInfo); } } } } } if ($reactivation) { $invoice->setNewPropertiesToInvoice($recurringProductsInfo); } $price = isset($callback_data['payment_gross']) ? $callback_data['payment_gross'] : $invoice->getPropertyValue('total'); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); $id = $this->details->getProperty('id'); $invoice->setPropertyValue('payment_method', $id->getValue()); SJB_InvoiceManager::saveInvoice($invoice); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); $transactionID = $callback_data['txn_id']; $transactionInfo = array('transaction_id' => $transactionID, 'invoice_sid' => $invoice->getSID(), 'amount' => $price, 'payment_method' => $invoice->getPropertyValue('payment_method'), 'user_sid' => $invoice->getPropertyValue('user_sid')); $transaction = new SJB_Transaction($transactionInfo); SJB_TransactionManager::saveTransaction($transaction); } } else { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); SJB_InvoiceManager::saveInvoice($invoice); } }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $listing_type_id = SJB_Request::getVar('listing_type_id', false); $action = SJB_Request::getVar('action', false); $type = SJB_Request::getVar('type', false); $encodingFromCharset = SJB_Request::getVar('encodingFromCharset', 'UTF-8'); $supportedFormats = array('xlsx', 'xls', 'csv'); $warning = false; $error = ''; if ($action == 'example' && $type) { $listing_type_sid = SJB_ListingTypeManager::getListingTypeSIDByID($listing_type_id); $listing_field_manager = new SJB_ListingFieldManager(); $common_details = $listing_field_manager->getCommonListingFieldsInfo(); $extra_details = $listing_field_manager->getListingFieldsInfoByListingType($listing_type_sid); $listing_fields = array_merge($common_details, $extra_details); $directory_to_export = SJB_System::getSystemSettings('EXPORT_FILES_DIRECTORY'); $export_properties = array(); $export_data = array(); foreach ($listing_fields as $listing_field) { $export_properties[$listing_field['id']] = $listing_field['id']; $export_data[0][$listing_field['id']] = ''; } SJB_ExportController::createExportDirectoriesForExample(); switch ($type) { case 'exl': SJB_ExportController::makeExportFile($export_data, 'example.xls'); $export_files_dir = SJB_Path::combine($directory_to_export, 'example.xls'); for ($i = 0; $i < ob_get_level(); $i++) { ob_end_clean(); } header('Content-type: application/vnd.ms-excel'); header('Content-disposition: attachment; filename=example.xls'); header('Content-Length: ' . filesize($export_files_dir)); readfile($export_files_dir); break; case 'csv': $export_files_dir = SJB_Path::combine($directory_to_export, 'example.csv'); $fp = fopen($export_files_dir, 'w'); fputcsv($fp, explode(',', implode(',', $export_properties))); fclose($fp); for ($i = 0; $i < ob_get_level(); $i++) { ob_end_clean(); } header('Content-type: application/vnd.ms-excel'); header('Content-disposition: attachment; filename=example.csv'); header('Content-Length: ' . filesize($export_files_dir)); readfile($export_files_dir); break; } SJB_Filesystem::delete($directory_to_export); exit; } if ($productsInfo = $this->canCurrentUserAddListing($error)) { $acl = SJB_Acl::getInstance(); if ($acl->isAllowed('bulk_job_import') == true) { $fileInfo = null; if (isset($_FILES['import_file'])) { $extension = strtolower(substr(strrchr($_FILES['import_file']['name'], '.'), 1)); if (empty($_FILES['import_file']['name']) || !in_array($extension, $supportedFormats)) { $warning = 'Please choose Excel or csv file'; } else { $fileInfo = $_FILES['import_file']; } } $contractID = SJB_Request::getVar('contract_id', false); $current_user = SJB_UserManager::getCurrentUser(); if ($contractID) { $contract = new SJB_Contract(array('contract_id' => $contractID)); } elseif (count($productsInfo) == 1) { $productInfo = array_pop($productsInfo); $contractID = $productInfo['contract_id']; $contract = new SJB_Contract(array('contract_id' => $contractID)); } else { $tp->assign("products_info", $productsInfo); $tp->assign("listing_type_id", $listing_type_id); $tp->display("listing_product_choice.tpl"); } if ($contractID && $listing_type_id) { $listing_type_sid = SJB_ListingTypeManager::getListingTypeSIDByID($listing_type_id); if ($fileInfo) { switch ($extension) { case 'xls': case 'xlsx': $import_file = new SJB_ImportFileXLS($fileInfo); break; case 'csv': $import_file = new SJB_ImportFileCSV($fileInfo, ','); break; } $import_file->parse($encodingFromCharset); $bulkPermissionParam = $this->acl->getPermissionParams('post_' . $listing_type_id, $contract->getID(), 'contract'); $imported_data = $import_file->getData(); $countData = 0; foreach ($imported_data as $val) { if ($val) { $countData++; } } if (empty($bulkPermissionParam) || $bulkPermissionParam - $contract->getPostingsNumber() - ($countData - 1) >= 0) { $listing = new SJB_Listing(array(), $listing_type_sid); $count = 0; $listingSIDs = array(); foreach ($imported_data as $key => $importedColumn) { if ($key == 1) { $imported_data_processor = new SJB_ImportedDataProcessor($importedColumn, $listing); continue; } if (!$importedColumn) { continue; } $count++; $listing_info = $imported_data_processor->getData('ignore', $importedColumn); $doc = new DOMDocument(); foreach ($listing->getProperties() as $property) { if ($property->getType() == 'complex' && !empty($listing_info[$property->id])) { $childFields = SJB_ListingComplexFieldManager::getListingFieldsInfoByParentSID($property->sid); $doc->loadXML($listing_info[$property->id]); $results = $doc->getElementsByTagName($property->id . 's'); $listing_info[$property->id] = array(); foreach ($results as $complexparent) { $i = 0; foreach ($complexparent->getElementsByTagName($property->id) as $result) { $resultXML = simplexml_import_dom($result); foreach ($childFields as $childField) { if (isset($resultXML->{$childField}['id'])) { $listing_info[$property->id][$childField['id']][$i] = (string) $resultXML->{$childField}['id']; } } $i++; } } } elseif ($property->getType() == 'location') { $locationFields = array($property->id . '.Country', $property->id . '.State', $property->id . '.City', $property->id . '.ZipCode'); $locationFieldAdded = array(); foreach ($locationFields as $locationField) { if (array_key_exists($locationField, $listing_info)) { switch ($locationField) { case $property->id . '.Country': $value = SJB_CountriesManager::getCountrySIDByCountryName($listing_info[$locationField]); if (!$value) { $value = SJB_CountriesManager::getCountrySIDByCountryCode($listing_info[$locationField]); } break; case $property->id . '.State': $value = SJB_StatesManager::getStateSIDByStateName($listing_info[$locationField]); if (!$value) { $value = SJB_StatesManager::getStateSIDByStateCode($listing_info[$locationField]); } break; default: $value = $listing_info[$locationField]; break; } $listing_info[$property->id][str_replace($property->id . '.', '', $locationField)] = $value; $locationFieldAdded[] = str_replace($property->id . '.', '', $locationField); } } if ($property->id == 'Location') { $locationFields = array('Country', 'State', 'City', 'ZipCode'); foreach ($locationFields as $locationField) { if (array_key_exists($locationField, $listing_info) && !in_array($locationField, $locationFieldAdded) && !$listing->getProperty($locationField)) { switch ($locationField) { case 'Country': $value = SJB_CountriesManager::getCountrySIDByCountryName($listing_info[$locationField]); if (!$value) { $value = SJB_CountriesManager::getCountrySIDByCountryCode($listing_info[$locationField]); } break; case 'State': $value = SJB_StatesManager::getStateSIDByStateName($listing_info[$locationField]); if (!$value) { $value = SJB_StatesManager::getStateSIDByStateCode($listing_info[$locationField]); } break; default: $value = $listing_info[$locationField]; break; } $listing_info[$property->id][$locationField] = $value; } } } } } $field_info = null; $listing = new SJB_Listing($listing_info, $listing_type_sid); foreach ($listing->getProperties() as $property) { if ($property->getType() == 'tree' && $property->value !== '') { $treeValues = explode(',', $property->value); $treeSIDs = array(); foreach ($treeValues as $treeValue) { $info = SJB_ListingFieldTreeManager::getItemInfoByCaption($property->sid, trim($treeValue)); $treeSIDs[] = $info['sid']; } $listing->setPropertyValue($property->id, implode(',', $treeSIDs)); $listing->details->properties[$property->id]->type->property_info['value'] = implode(',', $treeSIDs); } elseif ($property->getType() == 'monetary') { $currency = SJB_CurrencyManager::getDefaultCurrency(); $listing->details->properties[$property->id]->type->property_info['value']['add_parameter'] = $currency['sid']; } elseif ($property->id == 'ApplicationSettings' && !empty($listing_info['ApplicationSettings'])) { if (preg_match("^[a-z0-9\\._-]+@[a-z0-9\\._-]+\\.[a-z]{2,}\$^iu", $listing_info['ApplicationSettings'])) { $listing_info['ApplicationSettings'] = array('value' => $listing_info['ApplicationSettings'], 'add_parameter' => 1); } elseif (preg_match("^(https?:\\/\\/)^iu", $listing_info['ApplicationSettings'])) { $listing_info['ApplicationSettings'] = array('value' => $listing_info['ApplicationSettings'], 'add_parameter' => 2); } else { $listing_info['ApplicationSettings'] = array('value' => '', 'add_parameter' => ''); } $listing->details->properties[$property->id]->type->property_info['value'] = $listing_info['ApplicationSettings']; } elseif ($property->getType() == 'complex' && is_array($property->value)) { $childFields = SJB_ListingComplexFieldManager::getListingFieldsInfoByParentSID($property->sid); $complexChildValues = $property->value; foreach ($childFields as $childField) { if ($childField['type'] == 'complexfile' && !empty($complexChildValues[$childField['id']])) { $field_info = SJB_ListingComplexFieldManager::getFieldInfoBySID($childField['sid']); if (isset($listing_info[$property->id][$field_info['id']]) && file_exists($listing_info[$property->id][$field_info['id']])) { SJB_UploadFileManager::fileImport($listing_info, $field_info, $property->id); } } } } // The import of files at import of listings if (in_array($property->getType(), array('file', 'logo', 'picture', 'video')) && $property->value !== '') { $field_info = SJB_ListingFieldDBManager::getListingFieldInfoByID($property->id); if (isset($listing_info[$field_info['id']]) && file_exists($listing_info[$field_info['id']])) { SJB_UploadFileManager::fileImport($listing_info, $field_info); } } } $listing->deleteProperty('featured'); $listing->deleteProperty('priority'); $listing->deleteProperty('status'); $listing->deleteProperty('reject_reason'); $listing->addProperty(array('id' => 'contract_id', 'type' => 'id', 'value' => $contract->getID(), 'is_system' => true)); $extraInfo = $contract->extra_info; $listing->setProductInfo($extraInfo); $listing->setPropertyValue('access_type', 'everyone'); $listing->setUserSID($current_user->sid); if ($current_user->isSubuser()) { $subuserInfo = $current_user->getSubuserInfo(); $listing->addSubuserProperty($subuserInfo['sid']); } SJB_ListingManager::saveListing($listing); SJB_Statistics::addStatistics('addListing', $listing->getListingTypeSID(), $listing->getSID(), false, $extraInfo['featured'], $extraInfo['priority']); $contract->incrementPostingsNumber(); SJB_ProductsManager::incrementPostingsNumber($contract->product_sid); if (!empty($extraInfo['featured'])) { SJB_ListingManager::makeFeaturedBySID($listing->getSID()); } if (!empty($extraInfo['priority'])) { SJB_ListingManager::makePriorityBySID($listing->getSID()); } $this->FillGallery($listing, $listing_info); $listingSIDs[] = $listing->getSID(); } SJB_ListingManager::activateListingBySID($listingSIDs); $tp->assign('listingsNum', count($listingSIDs)); $tp->display('job_import_complete.tpl'); } else { $tp->assign('charSets', SJB_HelperFunctions::getCharSets()); $error = 'LISTINGS_NUMBER_LIMIT_EXCEEDED'; $tp->assign('listing_type_id', $listing_type_id); $tp->assign('error', $error); $tp->display('job_import.tpl'); } } else { $tp->assign('charSets', SJB_HelperFunctions::getCharSets()); $tp->assign('warning', $warning); $tp->assign('contract_id', $contractID); $tp->assign('listing_type_id', $listing_type_id); $tp->display('job_import.tpl'); } } } else { $error = $acl->getPermissionMessage('bulk_job_import'); if (empty($error)) { $error = 'This action is not allowed within your current product'; } $tp->assign('error', $error); $tp->assign('charSets', SJB_HelperFunctions::getCharSets()); $tp->assign('listing_type_id', $listing_type_id); $tp->display('job_import.tpl'); } } else { if ($error == 'NO_CONTRACT') { if ($_GET) { $getParam = '?'; foreach ($_GET as $key => $val) { $getParam .= $key . '=' . $val . '&'; } $getParam = substr($getParam, 0, -1); } $page = base64_encode(SJB_System::getURI() . $getParam); SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/my-products/?page=' . $page); } $tp->assign('charSets', SJB_HelperFunctions::getCharSets()); $tp->assign('listing_type_id', $listing_type_id); $tp->assign('error', $error); $tp->display('job_import.tpl'); } }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $invoice_sid = SJB_Request::getVar('invoice_sid', null, false, 'int'); $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); $user = null; $errors = null; $userHasContract = false; if (!is_null($invoice)) { $status = $invoice->getStatus(); if ($status == SJB_Invoice::INVOICE_STATUS_VERIFIED) { $userSID = $invoice->getPropertyValue('user_sid'); $items = $invoice->getPropertyValue('items'); $products = $items['products']; $user = SJB_UserManager::getObjectBySID($userSID); $userHasContract = $user->hasContract(); $paymentStatus = false; foreach ($products as $key => $productSID) { if ($productSID != -1) { $product_info = $invoice->getItemValue($key); $products[$key] = $product_info; if (!empty($product_info['listing_type_sid'])) { $listingTypeID = SJB_ListingTypeDBManager::getListingTypeIDBySID($product_info['listing_type_sid']); $listingTypeName = SJB_ListingTypeManager::getListingTypeNameBySID($product_info['listing_type_sid']); if (!in_array($listingTypeID, array('Job', 'Resume'))) { $listingTypeName .= ' Listing'; } $listingTypes[] = array('ID' => $listingTypeID, 'name' => $listingTypeName); } $listingNumber = $product_info['qty']; $contract = new SJB_Contract(array('product_sid' => $productSID, 'numberOfListings' => $listingNumber, 'is_recurring' => $invoice->isRecurring())); $contract->setUserSID($userSID); $contract->setPrice($items['amount'][$key]); if ($contract->saveInDB()) { SJB_ListingManager::activateListingsAfterPaid($userSID, $productSID, $contract->getID(), $listingNumber); SJB_ShoppingCart::deleteItemFromCartBySID($product_info['shoppingCartRecord'], $userSID); $bannerInfo = $product_info['banner_info']; $paymentStatus = true; if ($product_info['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $userSID, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($userSID, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($userSID); } if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($userSID)) { SJB_Notifications::sendSubscriptionActivationLetter($userSID, $product_info); } } } else { if (isset($items['custom_info'][$key]['type'])) { $products[$key] = $this->updateListing($items['custom_info'][$key]['type'], $key, $items, $userSID); } else { $products[$key] = array('name' => $items['custom_item'][$key]); } $paymentStatus = true; } } if ($paymentStatus) { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); SJB_InvoiceManager::saveInvoice($invoice); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); } if (isset($listingTypes)) { $tp->assign('listingTypes', $listingTypes); } $tp->assign('products', $products); } else { $errors['INVOICE_IS_NOT_VERIFIED'] = 1; } } else { $errors['INVALID_INVOICE_ID'] = 1; } if (!$errors) { $subTotal = $invoice->getPropertyValue('sub_total'); if (empty($subTotal)) { SJB_Statistics::addStatisticsFromInvoice($invoice); } $isUserJustRegistered = SJB_UserManager::isCurrentUserJustRegistered(); if (isset($items['products']) && count($items['products']) == 1 && $isUserJustRegistered && !$userHasContract) { $userGroupInfo = SJB_UserGroupManager::getUserGroupInfoBySID($user->getUserGroupSID()); $pageId = !empty($userGroupInfo['after_registration_redirect_to']) ? $userGroupInfo['after_registration_redirect_to'] : ''; $redirectUrl = SJB_UserGroupManager::getRedirectUrlByPageID($pageId); SJB_HelperFunctions::redirect($redirectUrl); } } $tp->assign('errors', $errors); $tp->display('create_contract.tpl'); }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $template = SJB_Request::getVar('template', 'manage_invoices.tpl'); $searchTemplate = SJB_Request::getVar('search_template', 'invoice_search_form.tpl'); $action = SJB_Request::getVar('action_name'); if (!empty($action)) { $invoicesSIDs = SJB_Request::getVar('invoices', array()); $_REQUEST['restore'] = 1; switch ($action) { case 'paid': foreach (array_keys($invoicesSIDs) as $invoiceSID) { $invoice = SJB_InvoiceManager::getObjectBySID($invoiceSID); $userSID = $invoice->getPropertyValue('user_sid'); if (SJB_UserManager::isUserExistsByUserSid($userSID)) { $items = $invoice->getPropertyValue('items'); $productSIDs = $items['products']; foreach ($productSIDs as $key => $productSID) { if ($productSID != -1) { if (SJB_ProductsManager::isProductExists($productSID)) { $productInfo = $invoice->getItemValue($key); $listingNumber = $productInfo['qty']; $contract = new SJB_Contract(array('product_sid' => $productSID, 'numberOfListings' => $listingNumber, 'is_recurring' => $invoice->isRecurring())); $contract->setUserSID($userSID); $contract->setPrice($items['amount'][$key]); if ($contract->saveInDB()) { SJB_ListingManager::activateListingsAfterPaid($userSID, $productSID, $contract->getID(), $listingNumber); SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $userSID); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $userSID, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($userSID, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($userSID); } if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($userSID)) { SJB_Notifications::sendSubscriptionActivationLetter($userSID, $productInfo); } } } } else { $type = SJB_Array::getPath($items, 'custom_info/' . $key . '/type'); switch ($type) { case 'featuredListing': $listingId = SJB_Array::getPath($items, 'custom_info/' . $key . '/listing_id'); SJB_ListingManager::makeFeaturedBySID($listingId); break; case 'priorityListing': $listingId = SJB_Array::getPath($items, 'custom_info/' . $key . '/listing_id'); SJB_ListingManager::makePriorityBySID($listingId); break; case 'activateListing': $listingsIds = explode(",", SJB_Array::getPath($items, 'custom_info/' . $key . '/listings_ids')); foreach ($listingsIds as $listingId) { SJB_ListingManager::activateListingBySID($listingId); } break; } } } SJB_Statistics::addStatisticsFromInvoice($invoice); } $total = $invoice->getPropertyValue('total'); if ($total > 0) { $gatewayID = $invoice->getPropertyValue('payment_method'); $gatewayID = isset($gatewayID) ? $gatewayID : 'cash_payment'; $transactionId = md5($invoiceSID . $gatewayID); $transactionInfo = array('transaction_id' => $transactionId, 'invoice_sid' => $invoiceSID, 'amount' => $total, 'payment_method' => $gatewayID, 'user_sid' => $invoice->getPropertyValue('user_sid')); $transaction = new SJB_Transaction($transactionInfo); SJB_TransactionManager::saveTransaction($transaction); } SJB_InvoiceManager::markPaidInvoiceBySID($invoiceSID); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoiceSID); } SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . "/manage-invoices/"); break; case 'unpaid': foreach (array_keys($invoicesSIDs) as $invoiceSID) { SJB_InvoiceManager::markUnPaidInvoiceBySID($invoiceSID); } SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/manage-invoices/'); break; case 'delete': foreach (array_keys($invoicesSIDs) as $invoiceSID) { SJB_InvoiceManager::deleteInvoiceBySID($invoiceSID); } SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/manage-invoices/'); break; default: unset($_REQUEST['restore']); break; } } /***************************************************************/ $_REQUEST['action'] = 'search'; $invoice = new SJB_Invoice(array()); $invoice->addProperty(array('id' => 'username', 'type' => 'string', 'value' => '', 'is_system' => true)); $aliases = new SJB_PropertyAliases(); $aliases->addAlias(array('id' => 'username', 'real_id' => 'user_sid', 'transform_function' => 'SJB_UserDBManager::getUserSIDsLikeSearchString')); $searchFormBuilder = new SJB_SearchFormBuilder($invoice); $criteriaSaver = new SJB_InvoiceCriteriaSaver(); if (isset($_REQUEST['restore'])) { $_REQUEST = array_merge($_REQUEST, $criteriaSaver->getCriteria()); } $criteria = $searchFormBuilder->extractCriteriaFromRequestData($_REQUEST, $invoice); $searchFormBuilder->setCriteria($criteria); $searchFormBuilder->registerTags($tp); $tp->display($searchTemplate); /********************** S O R T I N G *********************/ $paginator = new SJB_InvoicePagination(); $innerJoin = false; if ($paginator->sortingField == 'username') { $innerJoin = array('users' => array('sort_field' => array(36 => array('FirstName', 'LastName'), 41 => 'CompanyName'), 'join_field' => 'sid', 'join_field2' => 'user_sid', 'main_table' => 'invoices', 'join' => 'LEFT JOIN')); } $searcher = new SJB_InvoiceSearcher(array('limit' => ($paginator->currentPage - 1) * $paginator->itemsPerPage, 'num_rows' => $paginator->itemsPerPage), $paginator->sortingField, $paginator->sortingOrder, $innerJoin); $foundInvoices = array(); $foundInvoicesInfo = array(); if (SJB_Request::getVar('action', '') == 'search') { $foundInvoices = $searcher->getObjectsByCriteria($criteria, $aliases); if (empty($foundInvoices) && $paginator->currentPage != 1) { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/manage-invoices/?page=1'); } $criteriaSaver->setSession($_REQUEST, $searcher->getFoundObjectSIDs()); } elseif (isset($_REQUEST['restore'])) { $foundInvoices = $criteriaSaver->getObjectsFromSession(); } foreach ($foundInvoices as $id => $invoice) { $subUserSID = $invoice->getPropertyValue('subuser_sid'); if ($subUserSID) { $subUserInfo = SJB_UserManager::getUserInfoBySID($subUserSID); $parentInfo = SJB_UserManager::getUserInfoBySID($subUserInfo['parent_sid']); $username = $parentInfo['CompanyName']; } else { $userSID = $invoice->getPropertyValue('user_sid'); $userInfo = SJB_UserManager::getUserInfoBySID($userSID); if (SJB_UserGroupManager::getUserGroupIDBySID($userInfo['user_group_sid']) == 'Employer') { $username = $userInfo['CompanyName']; } else { if (SJB_UserGroupManager::getUserGroupIDBySID($userInfo['user_group_sid']) == 'JobSeeker') { $username = $userInfo['FirstName'] . ' ' . $userInfo['LastName']; } else { $username = $userInfo['username']; } } } $invoice->addProperty(array('id' => 'sid', 'type' => 'string', 'value' => $invoice->getSID())); $invoice->addProperty(array('id' => 'username', 'type' => 'string', 'value' => $username)); $foundInvoices[$id] = $invoice; $foundInvoicesInfo[$invoice->getSID()] = SJB_InvoiceManager::getInvoiceInfoBySID($invoice->getSID()); $foundInvoicesInfo[$invoice->getSID()]['userExists'] = !empty($username) ? 1 : 0; } /****************************************************************/ $paginator->setItemsCount($searcher->getAffectedRows()); $form_collection = new SJB_FormCollection($foundInvoices); $form_collection->registerTags($tp); $tp->assign('paginationInfo', $paginator->getPaginationInfo()); $tp->assign("found_invoices", $foundInvoicesInfo); $tp->display($template); }
function createSubscription($payment_data) { $validation_result = $this->validatePayment($payment_data); if ($validation_result !== true) { return $validation_result; } $properties = $this->details->getProperties(); $api_login_id = $properties['authnet_api_login_id']->getValue(); $transaction_key = $properties['authnet_api_transaction_key']->getValue(); $use_test_account = $properties['authnet_use_test_account']->getValue(); $invoice = SJB_InvoiceManager::getObjectBySID($payment_data['item_number']); if (empty($invoice)) { return; } $items = $invoice->getPropertyValue('items'); $taxInfo = $invoice->getPropertyValue('tax_info'); if (!empty($items['products'])) { foreach ($items['products'] as $key => $product) { if ($product != -1) { $product_info = $invoice->getItemValue($key); $payment_data['item_number'] = $invoice->getSID(); $payment_data['item_name'] = 'Payment for product ' . $product_info['name']; $payment_data['x_description'] = 'Payment for product ' . $product_info['name']; $payment_data['x_amount'] = $product_info['amount']; if ($taxInfo && !$taxInfo['price_includes_tax']) { $payment_data['x_amount'] += SJB_TaxesManager::getTaxAmount($payment_data['x_amount'], $taxInfo['tax_rate'], $taxInfo['price_includes_tax']); } $aimProcessor = new AuthnetAIMProcessor($api_login_id, $transaction_key, $use_test_account); $aimProcessor->setTransactionType('AUTH_CAPTURE'); $aimProcessor->setParameter('x_login', $api_login_id); $aimProcessor->setParameter('x_tran_key', $transaction_key); $aimProcessor->setParameter('x_card_num', $payment_data['x_card_num']); $aimProcessor->setParameter('x_amount', $payment_data['x_amount']); $aimProcessor->setParameter('x_exp_date', $payment_data['x_exp_date']); $aimProcessor->process(); if (!$aimProcessor->isApproved()) { return array($aimProcessor->getResponseMessage()); } $recurringID = null; if (!empty($product_info['recurring'])) { $product = new SJB_Product($product_info, $product_info['product_type']); $expiration_period = $product->getExpirationPeriod(); $arbProcessor = new AuthnetARBProcessor($api_login_id, $transaction_key, $use_test_account); $arbProcessor->setParameter('refID', $payment_data['item_number']); $arbProcessor->setParameter('subscrName', $payment_data['x_description']); $arbProcessor->setParameter('interval_length', $expiration_period); $arbProcessor->setParameter('interval_unit', 'days'); $arbProcessor->setParameter('startDate', date("Y-m-d", strtotime("+ {$expiration_period} days"))); $arbProcessor->setParameter('totalOccurrences', 9999); $arbProcessor->setParameter('trialOccurrences', 0); $arbProcessor->setParameter('amount', $payment_data['x_amount']); $arbProcessor->setParameter('trialAmount', 0.0); $arbProcessor->setParameter('cardNumber', $payment_data['x_card_num']); $arbProcessor->setParameter('expirationDate', $payment_data['x_exp_date']); $arbProcessor->setParameter('orderInvoiceNumber', $payment_data['item_number']); $arbProcessor->setParameter('orderDescription', $payment_data['x_description']); $arbProcessor->setParameter('firstName', $payment_data['x_first_name']); $arbProcessor->setParameter('lastName', $payment_data['x_last_name']); $arbProcessor->setParameter('company', $payment_data['x_company']); $arbProcessor->setParameter('address', $payment_data['x_address']); $arbProcessor->setParameter('city', $payment_data['x_city']); $arbProcessor->setParameter('state', $payment_data['x_state']); $arbProcessor->setParameter('zip', $payment_data['x_zip']); $arbProcessor->createAccount(); if (!$arbProcessor->isSuccessful()) { return array($arbProcessor->getResponse()); } $recurringID = $arbProcessor->getSubscriberID(); } $user_sid = $invoice->getUserSID(); $listingNumber = $product_info['qty']; $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $recurringID, 'gateway_id' => 'authnet_sim', 'numberOfListings' => $listingNumber)); $contract->setUserSID($user_sid); $contract->setPrice($product_info['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($product_info['shoppingCartRecord'], $user_sid); $bannerInfo = $product_info['banner_info']; if ($product_info['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $user_sid, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($user_sid, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($user_sid); } if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $product_info); } } } } $invoice->setCallbackData($payment_data); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); SJB_InvoiceManager::saveInvoice($invoice); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); } return true; }