public static function getDetails($listing_type_sid, $pageID = 0) { $system_details = array(array('id' => 'featured', 'caption' => 'Featured', 'type' => 'boolean', 'length' => '20', 'is_required' => false, 'is_system' => true, 'order' => null), array('id' => 'priority', 'caption' => 'Priority Listing', 'type' => 'boolean', 'length' => '20', 'is_required' => false, 'is_system' => true, 'order' => null)); $listing_field_manager = new SJB_ListingFieldManager(); $common_details = $listing_field_manager->getCommonListingFieldsInfo($pageID); $extra_details = $listing_field_manager->getListingFieldsInfoByListingType($listing_type_sid, $pageID); $details = array_merge($common_details, $extra_details); foreach ($details as $key => $detail) { $details[$key]['is_system'] = true; if ($detail['type'] == 'complex' || $detail['id'] == 'ApplicationSettings') { $details[$key]['is_system'] = false; } elseif ($detail['id'] == 'access_type') { $details[$key]['is_system'] = true; $details[$key]['list_values'] = array(array('id' => 'everyone', 'caption' => 'Everyone'), array('id' => 'no_one', 'caption' => 'No one'), array('id' => 'only', 'caption' => 'Only selected employers'), array('id' => 'except', 'caption' => 'Everyone except selected employers')); } } $details = array_merge($system_details, $details); $isPageLast = SJB_PostingPagesManager::isLastPageByID($pageID, $listing_type_sid); if ($isPageLast) { $status_details = array(array('id' => 'status', 'caption' => 'Approve Status', 'type' => 'list', 'list_values' => array(array('id' => 'pending', 'caption' => 'Pending'), array('id' => 'approved', 'caption' => 'Approved'), array('id' => 'rejected', 'caption' => 'Rejected')), 'is_required' => false, 'is_system' => true, 'order' => 1000000)); $details = array_merge($details, $status_details); $rejectReasonDetails = array(array('id' => 'reject_reason', 'caption' => 'Reject Reason', 'type' => 'text', 'is_required' => false, 'is_system' => true, 'order' => 1000000)); $details = array_merge($details, $rejectReasonDetails); if (SJB_PluginManager::isPluginActive('CaptchaPlugin') && SJB_System::getSettingByName('postJobCaptcha') && strpos(SJB_System::getURI(), '/add-listing/') === 0) { $details_captcha = array(array('id' => 'captcha', 'caption' => 'Enter code from image', 'type' => 'captcha', 'length' => '20', 'is_required' => true, 'is_system' => true, 'order' => 10000000)); $details = array_merge($details, $details_captcha); } } return $details; }
public function execute() { $template_processor = SJB_System::getTemplateProcessor(); $listingTypeSID = isset($_REQUEST['sid']) ? $_REQUEST['sid'] : null; if (!is_null($listingTypeSID)) { $form_submitted = SJB_Request::getVar('action', ''); $listing_type_info = SJB_ListingTypeManager::getListingTypeInfoBySID($listingTypeSID); $approveSettingChanged = $listing_type_info['waitApprove'] != SJB_Request::getVar('waitApprove'); $listing_type_info = array_merge($listing_type_info, $_REQUEST); $listingType = new SJB_ListingType($listing_type_info); $listingType->setSID($listingTypeSID); $edit_form = new SJB_Form($listingType); $listingTypeEmailAlert = $listingType->getPropertyValue('email_alert'); if (empty($listingTypeEmailAlert)) { $listingType->setPropertyValue('email_alert', 0); } $listingTypeEmailAlertForGuests = $listingType->getPropertyValue('guest_alert_email'); if (empty($listingTypeEmailAlertForGuests)) { $listingType->setPropertyValue('guest_alert_email', 0); } $errors = array(); if ($form_submitted && $edit_form->isDataValid($errors)) { SJB_Breadcrumbs::updateBreadcrumbsByListingTypeSID($listingTypeSID, $listingType->getPropertyValue('name')); SJB_PageManager::updatePagesByListingTypeSID($listingTypeSID, $listingType->getPropertyValue('name')); SJB_ListingTypeManager::saveListingType($listingType); if ($approveSettingChanged) { SJB_BrowseDBManager::rebuildBrowses(); } if ($form_submitted == 'save_info') { SJB_HelperFunctions::redirect(SJB_System::getSystemSettings('SITE_URL') . '/listing-types/'); } } $template_processor->assign('errors', $errors); $template_processor->assign('listing_type_sid', $listingTypeSID); $listing_fields_info = SJB_ListingFieldManager::getListingFieldsInfoByListingType($listingTypeSID); $listing_fields = array(); $listing_field_sids = array(); foreach ($listing_fields_info as $listing_field_info) { if ($listing_field_info['type'] == 'logo') { continue; } $listing_field = new SJB_ListingField($listing_field_info); $listing_field->setSID($listing_field_info['sid']); $listing_fields[] = $listing_field; $listing_field_sids[] = $listing_field_info['sid']; } $edit_form->registerTags($template_processor); $template_processor->assign("listing_type_info", $listing_type_info); $template_processor->assign("form_fields", $edit_form->getFormFieldsInfo()); $template_processor->display("edit_listing_type.tpl"); $form_collection = new SJB_FormCollection($listing_fields); $form_collection->registerTags($template_processor); $template_processor->assign("listing_field_sids", $listing_field_sids); $template_processor->display("listing_type_fields.tpl"); } }
public static function getAllListingPropertiesID($listing_type_id = null) { $common_properties = SJB_ListingFieldManager::getCommonListingFieldsInfo(); $extra_properties = array(); if (!empty($listing_type_id)) { $listing_type_sid = SJB_ListingTypeManager::getListingTypeSIDByID($listing_type_id); if (!empty($listing_type_sid)) { $extra_properties = SJB_ListingFieldManager::getListingFieldsInfoByListingType($listing_type_sid); } } $system_properties = array('id', 'listing_type', 'username', 'active', 'keywords', 'featured', 'views', 'pictures', 'activation_date', 'expiration_date'); return array('system' => $system_properties, 'common' => $common_properties, 'extra' => $extra_properties); }
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() { $errors = array(); if (SJB_Request::isAjax()) { $response = null; if ($logoId = SJB_Request::getVar('logo_id')) { SJB_UploadFileManager::deleteUploadedFileByID($logoId, 'logo'); $parsersId = SJB_Request::getVar('id'); SJB_DB::query("UPDATE `parsers` SET `xml_logo` = NULL WHERE id = ?n", $parsersId); } elseif ($userName = SJB_Request::getVar('parser_user')) { $userType = SJB_Request::getVar('user_type'); $products = SJB_XmlImport::getProducts($userType, $userName, $errors); $response = array('products' => empty($products) ? '' : SJB_XmlImport::translateProductsName($products), 'error' => empty($errors) ? '' : array_pop($errors)); $response = json_encode($response); } die($response); } $tp = SJB_System::getTemplateProcessor(); $original_xml = !empty($_REQUEST['xml']) ? $_REQUEST['xml'] : ''; $xml = $original_xml; $tree = ''; $listing_fields = array(); $parsing_name = isset($_REQUEST['parser_name']) ? $_REQUEST['parser_name'] : ''; $usr_name = isset($_REQUEST['parser_user']) ? $_REQUEST['parser_user'] : ''; $pars_url = isset($_REQUEST['parser_url']) ? $_REQUEST['parser_url'] : ''; $form_description = isset($_POST['form_description']) ? $_POST['form_description'] : ""; $type_id = isset($_POST['type_id']) ? intval($_POST['type_id']) : ""; $custom_script = SJB_Request::getVar('custom_script', ''); $custom_script_users = SJB_Request::getVar('custom_script_users', ''); $add_new_user = isset($_POST['add_new_user']) ? intval($_POST['add_new_user']) : 0; $username = SJB_Request::getVar('username', ''); $external_id = SJB_Request::getVar('external_id', ''); $defaultValue = array(); $logo_options_array = array('not_logo' => 'Do Not Import Logo', 'import_logo' => 'Import Logo with Listings', 'upload_logo' => 'Upload Logo for Imported Listings'); $id = isset($_GET['id']) ? intval($_GET['id']) : 0; $selected = array(); $a_selected = array(); $selectedLogoOption = null; $selectedLogoField = null; $xml_logo = null; $selectedProduct = SJB_Request::getVar('postUnderProduct'); $save_error = SJB_Request::getVar('save_error'); if ($save_error) { $errors[] = base64_decode($save_error); } if (!empty($_REQUEST['xml']) || $id > 0) { // step 2 OR edit exist if ($id > 0) { // load exist parser $parser_from_id = SJB_XmlImport::getSystemParsers($id); if (isset($parser_from_id[0]['name'])) { $parser_from_id = $parser_from_id[0]; } $parsing_name = $parser_from_id['name']; $usr_id = $parser_from_id['usr_id']; $usr_name = $parser_from_id['usr_name']; $form_description = $parser_from_id['description']; $pars_url = $parser_from_id['url']; $type_id = $parser_from_id['type_id']; $custom_script = $parser_from_id['custom_script']; $custom_script_users = $parser_from_id['custom_script_users']; $add_new_user = $parser_from_id['add_new_user']; $importType = $parser_from_id['import_type']; $xml = $parser_from_id['xml']; $xml_logo = $parser_from_id['xml_logo']; $xml = SJB_XmlImport::cleanXmlFromImport($xml); $defaultValue = $parser_from_id['default_value'] != '' ? unserialize($parser_from_id['default_value']) : array(); $username = $parser_from_id['username']; $map = unserialize($parser_from_id['maper']); $external_id = str_replace('@', '_dog_', $parser_from_id['external_id']); $selected_logo_options = unserialize($parser_from_id['logo_options']); $selectedLogoOption = $selected_logo_options['option']; $selectedLogoField = $selected_logo_options['field']; if ($selected_logo_options['option'] == 'upload_logo') { $upload_manager = new SJB_UploadPictureManager(); $upload_manager->getUploadedPictureInfo($xml_logo . '_thumb'); $logo_link = $upload_manager->getUploadedFileLink($xml_logo . '_thumb'); $tp->assign('logo_link', $logo_link); } foreach ($map as $key => $val) { unset($map[$key]); $key = SJB_XmlImport::encodeSpecialEntities($key); $map[$key] = $val; } $selected = array_values($map); $a_selected = array_keys($map); $selectedProduct = $parser_from_id['product_sid']; } else { $xml = SJB_XmlImport::cleanXmlFromImport($_REQUEST['xml']); } $sxml = new simplexml(); $xml = stripslashes($xml); $tree = $sxml->xml_load_file($xml, 'array'); if (isset($tree['@content'])) { $tree = $tree[0]; } if (is_array($tree)) { $tree = SJB_XmlImport::convertArray($tree); foreach ($tree as $key => $val) { unset($tree[$key]); $key = SJB_XmlImport::encodeSpecialEntities($key); $tree[$key]['val'] = $val; $tree[$key]['key'] = $key; } $field_types = array(0, $type_id); $listing_fields = array(); $i = 0; foreach ($field_types as $type) { $listing_fields_info = SJB_ListingFieldManager::getListingFieldsInfoByListingType($type); foreach ($listing_fields_info as $listing_field_info) { if ($listing_field_info['type'] == 'location') { foreach ($listing_field_info['fields'] as $fieldInfo) { $listing_field = new SJB_ListingField($fieldInfo); $listing_field->setSID($fieldInfo['sid']); $listing_fields[$i]['id'] = $listing_field_info['id'] . '_' . $listing_field->details->properties['id']->value; $listing_fields[$i]['caption'] = $listing_field->details->properties['id']->value; $i++; } } else { $listing_field = new SJB_ListingField($listing_field_info); $listing_field->setSID($listing_field_info['sid']); $listing_fields[$i]['id'] = $listing_field->details->properties['id']->value; $listing_fields[$i]['caption'] = $listing_field->details->properties['id']->value; $i++; } } } $listing_fields[$i]['id'] = $listing_fields[$i]['caption'] = "date"; $i++; $listing_fields[$i]['id'] = $listing_fields[$i]['caption'] = "url"; $i++; $listing_fields[$i]['id'] = $listing_fields[$i]['caption'] = "external_id"; } else { $errors[] = 'XML syntaxis error.'; } } else { $errors[] = 'Please input correct xml'; } if (empty($selectedProduct)) { $errors[] = 'Please select a product'; } if (!filter_var($pars_url, FILTER_VALIDATE_URL)) { $errors[] = 'Please input correct URL'; } $error = SJB_Request::getVar('error', false, 'GET'); if ($error) { $errors[$error] = true; } $userType = empty($add_new_user) ? 'username' : 'group'; if ($userType == 'group') { $userName = SJB_UserGroupManager::getUserGroupSIDByID($usr_name); } else { $userName = $usr_name; } $products = SJB_XmlImport::getProducts($userType, $userName, $errors); $tp->assign('id', $id); $tp->assign('selected', $selected); $tp->assign('a_selected', $a_selected); $tp->assign('xml', htmlspecialchars($xml)); $tp->assign('xml_logo', $xml_logo); $tp->assign('xmlToUser', $xml); $tp->assign('default_value', $defaultValue); $tp->assign('form_name', $parsing_name); $tp->assign('form_user', $usr_name); $tp->assign('form_user_sid', $usr_id); $tp->assign('form_url', $pars_url); $tp->assign('form_description', $form_description); $tp->assign('custom_script', $custom_script); $tp->assign('custom_script_users', $custom_script_users); $tp->assign('username', $username); $tp->assign('external_id', $external_id); $tp->assign('import_type', $importType); $tp->assign('user_groups', SJB_UserGroupManager::getAllUserGroupsInfo()); $type_name = SJB_ListingTypeManager::getListingTypeIDBySID($type_id); $tp->assign('add_new_user', $add_new_user); $tp->assign('type_id', $type_id); $tp->assign('type_name', $type_name); $tp->assign('errors', $errors); $tp->assign('tree', $tree); $tp->assign("fields", $listing_fields); $tp->assign('logo_options', $logo_options_array); $tp->assign('selectedLogoOption', $selectedLogoOption); $tp->assign('selectedLogoField', $selectedLogoField); $tp->assign('selectedProduct', $selectedProduct); $tp->assign('products', $products); $tp->assign("uploadMaxFilesize", SJB_UploadFileManager::getIniUploadMaxFilesize()); $tp->display('add_step_two.tpl'); }
/** * @param int $listingTypeSID * @return array */ public function getInactiveFields() { $listingTypeSID = SJB_ListingTypeManager::getListingTypeSIDByID($this->getListingTypeID()); $aFields = array(); if ($listingTypeSID) { $aFields = SJB_ListingFieldManager::getListingFieldsInfoByListingType($listingTypeSID); $aFields = array_merge(SJB_ListingFieldManager::getCommonListingFieldsInfo(), $aFields); $this->addCustomFields($aFields); self::deleteActiveAndUnsearchableFields($aFields); } return $aFields; }
public static function getCommonListingFieldsInfo($pageID = 0) { return SJB_ListingFieldManager::getListingFieldsInfoByListingType(0, $pageID); }
public function execute() { $ajaxAction = SJB_Request::getVar('ajax_action', '', 'GET'); $formToken = SJB_Request::getVar('form_token', ''); // save token date in session. In some code we needs to get list of it, and clean old tokens data from // session. self::setTokenDateToSession($formToken); switch ($ajaxAction) { // UPLOAD USER PROFILE VIDEO case 'upload_profile_video': case 'upload_profile_logo': $uploadedFieldId = SJB_Request::getVar('uploaded_field_name', '', 'GET'); // get field by user group return not all fields of profile. // but now we use getAllFieldsInfo() to check fields $userProfileFields = SJB_UserProfileFieldManager::getAllFieldsInfo(); $fieldSid = null; foreach ($userProfileFields as $field) { if ($field['id'] != $uploadedFieldId) { continue; } $fieldSid = $field['sid']; } if ($fieldSid == null) { echo "Wrong profile field specified"; exit; } $fieldInfo = SJB_UserProfileFieldManager::getFieldInfoBySID($fieldSid); $tp = SJB_System::getTemplateProcessor(); $validation = $this->validationManager($fieldInfo, $tp, $uploadedFieldId); if ($validation === true) { // video file already uploaded after isValid checks // but for 'Logo' - we need some actions to make save picture if ($fieldInfo['type'] == 'logo') { $upload_manager = new SJB_UploadPictureManager(); $upload_manager->setUploadedFileID($this->fileUniqueId); $upload_manager->setHeight($fieldInfo['height']); $upload_manager->setWidth($fieldInfo['width']); $upload_manager->uploadPicture($fieldInfo['id'], $fieldInfo); // and set value of file id to property $this->property->setValue($this->fileUniqueId); $this->propertyValue = $this->property->getValue(); } // set uploaded video to temporary value if ($fieldInfo['type'] == 'video' && isset($this->propertyValue['file_id'])) { $uploadedID = $this->propertyValue['file_id']; // rename it to unique value SJB_DB::query("UPDATE `uploaded_files` SET `id` = ?s WHERE `id` = ?s", $this->fileUniqueId, $uploadedID); // fill session data for tmp storage $fieldValue = array('file_id' => $this->fileUniqueId, 'file_url' => $this->propertyValue['file_url'], 'file_name' => $this->propertyValue['file_name'], 'saved_file_name' => $this->propertyValue['saved_file_name']); $tmpUploadsStorage = SJB_Session::getValue('tmp_uploads_storage'); $tmpUploadsStorage = SJB_Array::setPathValue($tmpUploadsStorage, "{$formToken}/{$uploadedFieldId}", $fieldValue); SJB_Session::setValue('tmp_uploads_storage', $tmpUploadsStorage); } elseif ($fieldInfo['type'] == 'logo') { // for Logo - we already have file_url data and file_thumb data, without file_id // just add this to session storage // fill session data for tmp storage $fieldValue = array('file_id' => $this->fileUniqueId, 'file_url' => $this->propertyValue['file_url'], 'file_name' => $this->propertyValue['file_name'], 'thumb_file_url' => $this->propertyValue['thumb_file_url'], 'thumb_file_name' => $this->propertyValue['thumb_file_name']); $tmpUploadsStorage = SJB_Session::getValue('tmp_uploads_storage'); $tmpUploadsStorage = SJB_Array::setPathValue($tmpUploadsStorage, "{$formToken}/{$uploadedFieldId}", $fieldValue); SJB_Session::setValue('tmp_uploads_storage', $tmpUploadsStorage); } $tp->assign(array('id' => $uploadedFieldId, 'value' => $fieldValue)); } $template = ''; switch ($fieldInfo['type']) { case 'video': $template = '../field_types/input/video_profile.tpl'; break; case 'logo': $template = '../field_types/input/logo.tpl'; break; default: break; } $tp->assign('form_token', $formToken); $tp->assign('errors', $this->errors); $tp->display($template); break; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// case 'delete_profile_video': case 'delete_profile_logo': $userSid = SJB_Request::getVar('user_sid', null); if (empty($userSid)) { $userInfo = SJB_UserManager::getCurrentUserInfo(); } else { $userInfo = SJB_UserManager::getUserInfoBySID($userSid); } $fieldId = SJB_Request::getVar('field_id', null); // check session value $sessionFileStorage = SJB_Session::getValue('tmp_uploads_storage'); $sessionFileId = SJB_Array::getPath($sessionFileStorage, "{$formToken}/{$fieldId}/file_id"); if (is_null($fieldId)) { $this->errors['PARAMETERS_MISSED'] = 1; } elseif (!empty($userInfo) && !isset($userInfo[$fieldId]) && empty($sessionFileId)) { echo json_encode(array('result' => 'success')); exit; } else { if (!empty($userInfo)) { $uploaded_file_id = $userInfo[$fieldId]; SJB_UploadFileManager::deleteUploadedFileByID($uploaded_file_id); } if (!empty($sessionFileId)) { $formFileId = SJB_Request::getVar('file_id'); if ($sessionFileId == $formFileId) { SJB_UploadFileManager::deleteUploadedFileByID($formFileId); $sessionFileStorage = SJB_Array::unsetValueByPath($sessionFileStorage, "{$formToken}/{$fieldId}"); SJB_Session::setValue('tmp_uploads_storage', $sessionFileStorage); } } } if (empty($this->errors)) { echo json_encode(array('result' => 'success')); } else { echo json_encode(array('result' => 'error', 'errors' => $this->errors)); } exit; break; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // UPLOAD LISTIG FILES //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // UPLOAD LISTIG FILES case 'upload_classifieds_video': case 'upload_file': $uploadedFieldId = SJB_Request::getVar('uploaded_field_name', '', 'GET'); // OK. For listings form we have 'listing_id' and optional field (for new listings with temporary id) - listing_type_id $listingId = SJB_Request::getVar('listing_id'); $listingTypeId = SJB_Request::getVar('listing_type_id'); if (empty($listingTypeId)) { $listingInfo = SJB_ListingManager::getListingInfoBySID($listingId); $listingTypeId = SJB_ListingTypeManager::getListingTypeIDBySID($listingInfo['listing_type_sid']); } $listingTypeSid = SJB_ListingTypeManager::getListingTypeSIDByID($listingTypeId); $commonListingFields = SJB_ListingFieldManager::getCommonListingFieldsInfo(); $listingFieldsByType = SJB_ListingFieldManager::getListingFieldsInfoByListingType($listingTypeSid); $listingFields = array_merge($commonListingFields, $listingFieldsByType); $fieldSid = null; foreach ($listingFields as $field) { if ($field['id'] != $uploadedFieldId) { continue; } $fieldSid = $field['sid']; } $fieldInfo = SJB_ListingFieldManager::getFieldInfoBySID($fieldSid); $tp = SJB_System::getTemplateProcessor(); $validation = $this->validationManager($fieldInfo, $tp, $uploadedFieldId); if (!$validation) { $tp->assign(array('listing_id' => $listingId, 'listing' => array('id' => $listingId))); } else { // video file already uploaded after isValid checks // but for 'Logo' - we need some actions to make save picture if ($this->property->getType() == 'file') { if ($_FILES[$uploadedFieldId]['error']) { $this->errors[SJB_UploadFileManager::getErrorId($_FILES[$uploadedFieldId]['error'])] = 1; } $upload_manager = new SJB_UploadFileManager(); $upload_manager->setUploadedFileID($this->fileUniqueId); $upload_manager->setFileGroup('files'); $upload_manager->uploadFile($fieldInfo['id']); // and set value of file id to property $this->property->setValue($this->fileUniqueId); } $this->propertyValue = $this->property->getValue(); // set uploaded video to temporary value if (isset($this->propertyValue['file_id'])) { $uploadedID = $this->propertyValue['file_id']; // rename it to unique value SJB_DB::query("UPDATE `uploaded_files` SET `id` = ?s WHERE `id` = ?s", $this->fileUniqueId, $uploadedID); // SET VALUE TO TEMPORARY SESSION STORAGE $tmpUploadsStorage = SJB_Session::getValue('tmp_uploads_storage'); $fileValue = array('file_id' => $this->fileUniqueId, 'saved_name' => $this->propertyValue['saved_file_name']); $tmpUploadsStorage = SJB_Array::setPathValue($tmpUploadsStorage, "{$formToken}/{$uploadedFieldId}", $fileValue); SJB_Session::setValue('tmp_uploads_storage', $tmpUploadsStorage); // update listing property $listingInfo = SJB_ListingManager::getListingInfoBySID($listingId); $listing = isset($listingInfo['listing_type_sid']) ? new SJB_Listing($listingInfo, $listingInfo['listing_type_sid']) : new SJB_Listing($listingInfo); $listingProperties = $listing->getProperties(); $propertyInfo = array('id' => $uploadedFieldId, 'type' => 'string', 'value' => $this->fileUniqueId, 'is_system' => true); foreach ($listingProperties as $property) { if ($property->getID() == $uploadedFieldId) { $listing->addProperty($propertyInfo); } } $listing->setSID($listingId); SJB_ListingManager::saveListing($listing); $tp->assign(array('id' => $uploadedFieldId, 'value' => array('file_url' => $this->propertyValue['file_url'], 'file_name' => $this->propertyValue['file_name'], 'saved_file_name' => $this->propertyValue['saved_file_name'], 'file_id' => $this->fileUniqueId), 'listing_id' => $listingId, 'listing' => array('id' => $listingId))); } } switch ($this->property->getType()) { case 'video': $template = '../field_types/input/video.tpl'; break; case 'file': $template = '../field_types/input/file.tpl'; break; default: $template = '../field_types/input/video.tpl'; break; } $tp->assign('errors', $this->errors); $tp->assign('form_token', $formToken); $tp->display($template); self::cleanOldTokensFromSession(); break; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// case 'delete_classifieds_video': case 'delete_file': $listingId = SJB_Request::getVar('listing_id', null); $fieldId = SJB_Request::getVar('field_id', null); $formFileId = SJB_Request::getVar('file_id'); $this->errors = array(); // check session value $sessionFileStorage = SJB_Session::getValue('tmp_uploads_storage'); $sessionFileId = SJB_Array::getPath($sessionFileStorage, "{$formToken}/{$fieldId}/file_id"); // if empty listing id - check end empty temporary storage if (strlen($listingId) == strlen(time())) { if ($sessionFileId == $formFileId) { SJB_UploadFileManager::deleteUploadedFileByID($formFileId); // remove field from temporary storage if (!is_null($sessionFileStorage)) { $sessionFileStorage = SJB_Array::unsetValueByPath($sessionFileStorage, "{$formToken}/{$fieldId}"); SJB_Session::setValue('tmp_uploads_storage', $sessionFileStorage); } } } else { // we change existing listing $listingInfo = SJB_ListingManager::getListingInfoBySID($listingId); if ((is_null($listingInfo) || !isset($listingInfo[$fieldId])) && empty($sessionFileId)) { $this->errors['WRONG_PARAMETERS_SPECIFIED'] = 1; } else { if (!$this->isOwner($listingId)) { $this->errors['NOT_OWNER'] = 1; } else { $uploadedFileId = $listingInfo[$fieldId]; if (!empty($uploadedFileId)) { SJB_UploadFileManager::deleteUploadedFileByID($uploadedFileId); } SJB_UploadFileManager::deleteUploadedFileByID($formFileId); $listingInfo[$fieldId] = ''; $listing = isset($listingInfo['listing_type_sid']) ? new SJB_Listing($listingInfo, $listingInfo['listing_type_sid']) : new SJB_Listing($listingInfo); // remove all non-changed properties and save only changed property in listing $props = $listing->getProperties(); foreach ($props as $prop) { if ($prop->getID() !== $fieldId) { $listing->deleteProperty($prop->getID()); } } $listing->setSID($listingId); SJB_ListingManager::saveListing($listing); // remove field from temporary storage $sessionFileStorage = SJB_Session::getValue('tmp_uploads_storage'); if (!is_null($sessionFileStorage)) { $sessionFileStorage = SJB_Array::unsetValueByPath($sessionFileStorage, "{$formToken}/{$fieldId}"); SJB_Session::setValue('tmp_uploads_storage', $sessionFileStorage); } } } } if (empty($this->errors)) { echo json_encode(array('result' => 'success')); } else { echo json_encode(array('result' => 'error', 'errors' => $this->errors)); } exit; break; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// case 'get_classifieds_video_data': case 'get_file_field_data': $fieldId = isset($_REQUEST['field_id']) ? $_REQUEST['field_id'] : null; $listingId = SJB_Request::getVar('listing_id'); $filesFromTmpStorage = SJB_Session::getValue('tmp_uploads_storage'); $fileUniqueId = SJB_Array::getPath($filesFromTmpStorage, "{$formToken}/{$fieldId}/file_id"); // if no temporary files uploaded, return empty string if (empty($fileUniqueId)) { return ''; } $tp = SJB_System::getTemplateProcessor(); $upload_manager = new SJB_UploadFileManager(); $fileInfo = array('id' => $fieldId, 'value' => array('file_url' => $upload_manager->getUploadedFileLink($fileUniqueId), 'file_name' => $upload_manager->getUploadedFileName($fileUniqueId), 'saved_file_name' => $upload_manager->getUploadedSavedFileName($fileUniqueId), 'file_id' => $fileUniqueId), 'listing_id' => $listingId, 'listing' => array('id' => $listingId)); $tp->assign($fileInfo); $fieldInfo = SJB_ListingFieldDBManager::getListingFieldInfoByID($fieldId); $fieldType = $fieldInfo['type']; $template = ''; switch ($fieldType) { case 'video': $template = '../field_types/input/video.tpl'; break; case 'file': $template = '../field_types/input/file.tpl'; break; case 'logo': $template = '../field_types/input/logo_listing.tpl'; break; default: break; } $uploadedFilesize = $upload_manager->getUploadedFileSize($fileUniqueId); $filesizeInfo = SJB_HelperFunctions::getFileSizeAndSizeToken($uploadedFilesize); $tp->assign(array('filesize' => $filesizeInfo['filesize'], 'size_token' => $filesizeInfo['size_token'])); $tp->assign("uploadMaxFilesize", SJB_UploadFileManager::getIniUploadMaxFilesize()); $tp->assign('form_token', $formToken); $tp->display($template); break; //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// case 'upload_file_complex': case 'upload_classifieds_video_complex': $uploadedFieldId = SJB_Request::getVar('uploaded_field_name', '', 'GET'); list($parentField, $subFieldId, $complexStep) = explode(':', $uploadedFieldId); // OK. For listings form we have 'listing_id' and optional field (for new listings with temporary id) - listing_type_id $listingId = SJB_Request::getVar('listing_id'); $listingTypeId = SJB_Request::getVar('listing_type_id'); if (empty($listingTypeId)) { $listingInfo = SJB_ListingManager::getListingInfoBySID($listingId); $listingTypeId = SJB_ListingTypeManager::getListingTypeIDBySID($listingInfo['listing_type_sid']); } $listingTypeSid = SJB_ListingTypeManager::getListingTypeSIDByID($listingTypeId); $commonListingFields = SJB_ListingFieldManager::getCommonListingFieldsInfo(); $listingFieldsByType = SJB_ListingFieldManager::getListingFieldsInfoByListingType($listingTypeSid); $listingFields = array_merge($commonListingFields, $listingFieldsByType); // check parent field $fieldSid = null; foreach ($listingFields as $field) { if ($field['id'] != $parentField) { continue; } $fieldSid = $field['sid']; } $complexFieldInfo = SJB_ListingFieldManager::getFieldInfoBySID($fieldSid); $subFields = SJB_Array::get($complexFieldInfo, 'fields'); if (empty($subFields)) { echo 'wrong field ID'; exit; } // check field $fieldInfo = ''; foreach ($subFields as $subField) { if ($subField['id'] != $subFieldId) { continue; } $fieldInfo = $subField; } $complexParameters = array('parentField' => $parentField, 'subFieldId' => $subFieldId, 'complexStep' => $complexStep); $tp = SJB_System::getTemplateProcessor(); $validation = $this->validationManager($fieldInfo, $tp, $uploadedFieldId, $complexParameters); $upload_manager = new SJB_UploadFileManager(); $upload_manager->setUploadedFileID($this->fileUniqueId); $upload_manager->setFileGroup('files'); $upload_manager->uploadFile($fieldInfo['id'], $parentField); $this->property->setValue($this->fileUniqueId); $this->propertyValue = $this->property->getPropertyVariablesToAssign(); // set uploaded video to temporary value if ((isset($this->propertyValue['value']['file_id']) || isset($this->propertyValue['value'][$complexStep]['file_id'])) && $validation) { // fix for FILE type in complex field if (isset($this->propertyValue['value'][$complexStep]['file_id'])) { $this->propertyValue['value'] = $this->propertyValue['value'][$complexStep]; } $filesInfo = array($complexStep => $this->propertyValue['value']); $uploadedID = $this->propertyValue['value']['file_id']; // rename it to unique value SJB_DB::query("UPDATE `uploaded_files` SET `id` = ?s WHERE `id` = ?s", $this->fileUniqueId, $uploadedID); // SET VALUE TO TEMPORARY SESSION STORAGE $tmpUploadsStorage = SJB_Session::getValue('tmp_uploads_storage'); $fileValue = array('file_id' => $this->fileUniqueId, 'saved_name' => $this->propertyValue['value']['saved_file_name']); $tmpUploadsStorage = SJB_Array::setPathValue($tmpUploadsStorage, "{$formToken}/{$uploadedFieldId}", $fileValue); SJB_Session::setValue('tmp_uploads_storage', $tmpUploadsStorage); $tp->assign(array('id' => $subFieldId, 'value' => $this->propertyValue['value']['file_name'], 'filesInfo' => $filesInfo, 'complexField' => $parentField, 'complexStep' => $complexStep, 'listing_id' => $listingId, 'listing' => array('id' => $listingId))); } else { $tp->assign(array('id' => $subFieldId, 'complexField' => $parentField, 'complexStep' => $complexStep, 'listing_id' => $listingId, 'listing' => array('id' => $listingId))); } switch ($this->property->getType()) { case 'video': $template = '../field_types/input/video.tpl'; break; case 'file': case 'complexfile': $template = '../field_types/input/file.tpl'; break; default: $template = '../field_types/input/video.tpl'; break; } $tp->assign('form_token', $formToken); $tp->assign('errors', $this->errors); $tp->display($template); break; //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// case 'delete_file_complex': $listingId = SJB_Request::getVar('listing_id', null); $fieldId = SJB_Request::getVar('field_id', null); $formFileId = SJB_Request::getVar('file_id'); $this->errors = array(); // check session value $sessionFileStorage = SJB_Session::getValue('tmp_uploads_storage'); $sessionFileId = SJB_Array::getPath($sessionFileStorage, "{$formToken}/{$fieldId}/file_id"); // if empty listing id - check and empty temporary storage if (strlen($listingId) == strlen(time())) { if ($sessionFileId == $formFileId) { SJB_UploadFileManager::deleteUploadedFileByID($formFileId); // remove field from temporary storage $sessionFileStorage = SJB_Array::unsetValueByPath($sessionFileStorage, "{$formToken}/{$fieldId}"); SJB_Session::setValue('tmp_uploads_storage', $sessionFileStorage); } } else { // we change existing listing $listingInfo = SJB_ListingManager::getListingInfoBySID($listingId); list($complexField, $subField, $complexStep) = explode(':', $fieldId); $fieldValue = SJB_Array::getPath($listingInfo, "{$complexField}/{$subField}/{$complexStep}"); // if field value not present in listing and not present in temporary storage - throw error if ((is_null($listingInfo) || $fieldValue === null) && empty($sessionFileId)) { $this->errors['WRONG_PARAMETERS_SPECIFIED'] = 1; } else { if (!$this->isOwner($listingId)) { $this->errors['NOT_OWNER'] = 1; } else { $uploadedFileId = $fieldValue; if (!empty($uploadedFileId)) { SJB_UploadFileManager::deleteUploadedFileByID($uploadedFileId); } SJB_UploadFileManager::deleteUploadedFileByID($formFileId); $listingInfo = SJB_Array::setPathValue($listingInfo, "{$complexField}/{$subField}/{$complexStep}", ''); $listing = new SJB_Listing($listingInfo, $listingInfo['listing_type_sid']); // remove all non-changed properties and save only changed property in listing $props = $listing->getProperties(); foreach ($props as $prop) { if ($prop->getID() !== $fieldId) { $listing->deleteProperty($prop->getID()); } } $listing->setSID($listingId); SJB_ListingManager::saveListing($listing); // remove field from temporary storage $sessionFileStorage = SJB_Session::getValue('tmp_uploads_storage'); if (!empty($sessionFileStorage)) { $sessionFileStorage = SJB_Array::unsetValueByPath($sessionFileStorage, "{$formToken}/{$fieldId}"); SJB_Session::setValue('tmp_uploads_storage', $sessionFileStorage); } } } } if (empty($this->errors)) { echo json_encode(array('result' => 'success')); } else { echo json_encode(array('result' => 'error', 'errors' => $this->errors)); } exit; break; //////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////// case 'get_complexfile_field_data': $listingId = SJB_Request::getVar('listing_id', null); $fieldId = SJB_Request::getVar('field_id', null); $listingTypeId = SJB_Request::getVar('listing_type_id'); $listingTypeSid = SJB_ListingTypeManager::getListingTypeSIDByID($listingTypeId); $uploadFileManager = new SJB_UploadFileManager(); // replace square brackets in complex field name $fieldId = str_replace("][", ":", $fieldId); $fieldId = str_replace("[", ":", $fieldId); $fieldId = str_replace("]", "", $fieldId); list($parentField, $subFieldId, $complexStep) = explode(':', $fieldId); $filesFromTmpStorage = SJB_Session::getValue('tmp_uploads_storage'); //$fileUniqueId = SJB_Array::getPath($filesFromTmpStorage, "listings/{$listingId}/{$fieldId}/file_id"); $fileUniqueId = SJB_Array::getPath($filesFromTmpStorage, "{$formToken}/{$fieldId}/file_id"); // if no temporary files uploaded, return empty string if (empty($fileUniqueId)) { return ''; } // get list of fields for all listing types $listingTypesInfo = SJB_ListingTypeManager::getAllListingTypesInfo(); $allFields = array(); foreach ($listingTypesInfo as $listingTypeInfo) { $typeFields = SJB_ListingFieldManager::getListingFieldsInfoByListingType($listingTypeInfo['sid']); $allFields = array_merge($allFields, $typeFields); } // NEED TO GET COMPLEX SUBFIELD PROPERTY $commonListingFields = SJB_ListingFieldManager::getCommonListingFieldsInfo(); $listingFieldsByType = $allFields; $listingFields = array_merge($commonListingFields, $listingFieldsByType); // check parent field $fieldSid = null; foreach ($listingFields as $field) { if ($field['id'] != $parentField) { continue; } $fieldSid = $field['sid']; } // parent complex field $complexFieldInfo = SJB_ListingFieldManager::getFieldInfoBySID($fieldSid); $subFields = SJB_Array::get($complexFieldInfo, 'fields'); if (empty($subFields)) { echo 'wrong field ID'; exit; } // check field for subfield $complexSubFieldInfo = ''; foreach ($subFields as $subField) { if ($subField['id'] != $subFieldId) { continue; } $complexSubFieldInfo = $subField; } if (empty($complexSubFieldInfo)) { echo 'Wrong field info'; exit; } // OK. COMPLEX SUBFIELD WE HAVE $complexSubFieldProperty = new SJB_ObjectProperty($complexSubFieldInfo); // complex file fields contents array of values, not just string filename $complexSubFieldProperty->setValue(array($complexStep => $fileUniqueId)); $valueToAssign = $complexSubFieldProperty->getPropertyVariablesToAssign(); $additionalInfo = array('listing_id' => $listingId, 'listing' => array('id' => $listingId), 'complexField' => $parentField, 'complexStep' => $complexStep); $tp = SJB_System::getTemplateProcessor(); $tp->assign($valueToAssign); $tp->assign($additionalInfo); $template = ''; switch ($complexSubFieldProperty->getType()) { case 'complexfile': $template = '../field_types/input/file.tpl'; break; default: break; } $uploadedFilesize = $uploadFileManager->getUploadedFileSize($fileUniqueId); $filesizeInfo = SJB_HelperFunctions::getFileSizeAndSizeToken($uploadedFilesize); $tp->assign(array('filesize' => $filesizeInfo['filesize'], 'size_token' => $filesizeInfo['size_token'])); $tp->assign('form_token', $formToken); $tp->display($template); break; case 'upload_listing_logo': $uploadedFieldId = SJB_Request::getVar('uploaded_field_name', '', 'GET'); $listingSid = SJB_Request::getVar('listing_id', null); $fieldInfo = SJB_ListingFieldDBManager::getListingFieldInfoByID($uploadedFieldId); $tp = SJB_System::getTemplateProcessor(); $validation = $this->validationManager($fieldInfo, $tp, $uploadedFieldId); if ($validation === true) { $upload_manager = new SJB_UploadPictureManager(); $upload_manager->setUploadedFileID($this->fileUniqueId); $upload_manager->setHeight($fieldInfo['height']); $upload_manager->setWidth($fieldInfo['width']); $upload_manager->uploadPicture($fieldInfo['id'], $fieldInfo); // and set value of file id to property $this->property->setValue($this->fileUniqueId); $this->propertyValue = $this->property->getValue(); // for Logo - we already have file_url data and file_thumb data, without file_id // just add this to session storage // fill session data for tmp storage $fieldValue = array('file_id' => $this->fileUniqueId, 'file_url' => $this->propertyValue['file_url'], 'file_name' => $this->propertyValue['file_name'], 'thumb_file_url' => $this->propertyValue['thumb_file_url'], 'thumb_file_name' => $this->propertyValue['thumb_file_name']); $tmpUploadsStorage = SJB_Session::getValue('tmp_uploads_storage'); $tmpUploadsStorage = SJB_Array::setPathValue($tmpUploadsStorage, "{$formToken}/{$uploadedFieldId}", $fieldValue); SJB_Session::setValue('tmp_uploads_storage', $tmpUploadsStorage); $tp->assign(array('id' => $uploadedFieldId, 'value' => $fieldValue)); } $template = '../field_types/input/logo_listing.tpl'; $tp->assign('form_token', $formToken); $tp->assign('errors', $this->errors); $tp->assign('listing_id', $listingSid); $tp->display($template); break; default: echo "Action not defined!"; break; } exit; }
public function execute() { $errors = array(); if (SJB_Request::isAjax()) { $response = null; $user_type = SJB_Request::getVar('user_type'); $user_name = SJB_Request::getVar('parser_user'); $products = SJB_XmlImport::getProducts($user_type, $user_name, $errors); $response = array('products' => empty($products) ? '' : SJB_XmlImport::translateProductsName($products), 'error' => empty($errors) ? '' : array_pop($errors)); die(json_encode($response)); } $tp = SJB_System::getTemplateProcessor(); $add_level = SJB_Request::getVar('add_level', 1); // check for errors if ($add_level == '3') { $selectUserType = SJB_Request::getVar('selectUserType'); $addNewUser = 0; if ($selectUserType == 'username') { $usr_name = isset($_REQUEST['parser_user']) ? SJB_DB::quote($_REQUEST['parser_user']) : ''; $usr_id = SJB_UserManager::getUserSIDbyUsername($usr_name); if (empty($usr_name)) { $errors[] = 'Please enter user name of existing user to the "User Name" field'; $usr_name = ''; } else { $user_sid_exists = SJB_UserManager::getUserSIDbyUsername($usr_name); if (empty($user_sid_exists)) { $errors[] = 'User "' . $usr_name . '" not exists. Please enter user name of existing user to the "User Name" field'; $usr_name = ''; } } } elseif ($selectUserType == 'group') { $userGroupSid = isset($_REQUEST['parser_user']) ? $_REQUEST['parser_user'] : 0; $usr_id = $userGroupSid; $usr_name = SJB_UserGroupManager::getUserGroupIDBySID($usr_id); $addNewUser = 1; } if ($errors) { $add_level = 2; } } $listings_type = SJB_ListingTypeManager::getAllListingTypesInfo(); $types = array(); foreach ($listings_type as $one) { $types[$one['sid']] = $one['id']; } $tp->assign('types', $types); $selected_logo_options = null; switch ($add_level) { case '1': $template = 'add_step_one.tpl'; /* $types = array(); foreach ( $listings_type as $one ) { $types[$one['sid']] = $one['id']; } $tp->assign('types', $types); */ $tp->display('add_step_one.tpl'); break; case '2': $template = 'add_step_two.tpl'; $original_xml = SJB_Request::getVar('xml'); $xml = $original_xml; $tree = ''; $listing_fields = array(); $logo_options_array = array('not_logo' => 'Do Not Import Logo', 'import_logo' => 'Import Logo with Listings', 'upload_logo' => 'Upload Logo for Imported Listings'); $parsing_name = SJB_Request::getVar('parser_name'); $usr_name = SJB_Request::getVar('parser_user'); $pars_url = SJB_Request::getVar('parser_url'); $form_description = SJB_Request::getVar('form_description', '', 'POST'); $type_id = SJB_Request::getVar('type_id', '', 'POST'); $selectedLogoOption = SJB_Request::getVar('logo_options'); $selectedLogoField = SJB_Request::getVar('import_logo_field'); $selectedProduct = SJB_Request::getVar('postUnderProduct'); $id = SJB_Request::getVar('id', 0, 'GET'); $selected = array(); $a_selected = array(); if (!empty($_REQUEST['xml']) || $id > 0) { // step 2 OR edit exist if ($id > 0) { // load exist parser $parser_from_id = SJB_XmlImport::getSystemParsers($id); if (isset($parser_from_id[0]['name'])) { $parser_from_id = $parser_from_id[0]; } $parsing_name = $parser_from_id['name']; $usr_id = $parser_from_id['usr_id']; $usr_name = $parser_from_id['usr_name']; $form_description = $parser_from_id['description']; $pars_url = $parser_from_id['url']; $type_id = $parser_from_id['type_id']; $selected_logo_options = unserialize($parser_from_id['logo_options']); $selectedLogoOption = $selected_logo_options['option']; $selectedLogoField = $selected_logo_options['field']; $selectedProduct = $parser_from_id['product_sid']; $xml = $parser_from_id['xml']; $xml = SJB_XmlImport::cleanXmlFromImport($xml); $map = unserialize($parser_from_id['maper']); $selected = array_values($map); $a_selected = array_keys($map); } else { $xml = SJB_XmlImport::cleanXmlFromImport($_REQUEST['xml']); } $sxml = new simplexml(); $tree = $sxml->xml_load_file($xml, 'array'); if (isset($tree['@content'])) { $tree = $tree[0]; } if (is_array($tree)) { $tree = SJB_XmlImport::convertArray($tree); foreach ($tree as $key => $val) { unset($tree[$key]); // replace '@' and ':' $key = SJB_XmlImport::encodeSpecialEntities($key); $tree[$key]['val'] = $val; $tree[$key]['key'] = $key; } $field_types = array(0, $type_id); $listing_fields = array(); $i = 0; foreach ($field_types as $type) { $listing_fields_info = SJB_ListingFieldManager::getListingFieldsInfoByListingType($type); foreach ($listing_fields_info as $listing_field_info) { if ($listing_field_info['type'] == 'location') { foreach ($listing_field_info['fields'] as $fieldInfo) { $listing_field = new SJB_ListingField($fieldInfo); $listing_field->setSID($fieldInfo['sid']); $listing_fields[$i]['id'] = $listing_field_info['id'] . '_' . $listing_field->details->properties['id']->value; $listing_fields[$i]['caption'] = $listing_field->details->properties['id']->value; $i++; } } else { $listing_field = new SJB_ListingField($listing_field_info); $listing_field->setSID($listing_field_info['sid']); $listing_fields[$i]['id'] = $listing_field->details->properties['id']->value; $listing_fields[$i]['caption'] = $listing_field->details->properties['id']->value; $i++; } } } $listing_fields[$i]['id'] = $listing_fields[$i]['caption'] = "date"; $i++; $listing_fields[$i]['id'] = $listing_fields[$i]['caption'] = "url"; $i++; $listing_fields[$i]['id'] = $listing_fields[$i]['caption'] = "external_id"; } else { $errors[] = 'XML syntaxis error.'; $template = 'add_step_one.tpl'; } } else { $errors[] = 'Please input correct xml'; $template = 'add_step_one.tpl'; } $tp->assign('id', $id); $tp->assign('selected', $selected); $tp->assign('a_selected', $a_selected); $tp->assign('xml', htmlspecialchars($xml)); $tp->assign('xmlToUser', $xml); $tp->assign('user_groups', SJB_UserGroupManager::getAllUserGroupsInfo()); $tp->assign('form_name', $parsing_name); $tp->assign('form_user', $usr_name); $tp->assign('form_url', $pars_url); $tp->assign('form_description', $form_description); $type_name = SJB_ListingTypeManager::getListingTypeIDBySID($type_id); $tp->assign('type_id', $type_id); $tp->assign('type_name', $type_name); $tp->assign('errors', $errors); $tp->assign('tree', $tree); $tp->assign("fields", $listing_fields); $tp->assign('logo_options', $logo_options_array); $tp->assign('selectedLogoOption', $selectedLogoOption); $tp->assign('selectedLogoField', $selectedLogoField); $tp->assign('selectedProduct', $selectedProduct); $tp->assign("uploadMaxFilesize", SJB_UploadFileManager::getIniUploadMaxFilesize()); $tp->display($template); break; case '3': $parsing_name = isset($_REQUEST['parser_name']) ? SJB_DB::quote($_REQUEST['parser_name']) : ''; $pars_url = isset($_POST['parser_url']) ? SJB_DB::quote($_POST['parser_url']) : ''; $selectedLogoOption = isset($_POST['logo_options']) ? $_POST['logo_options'] : ''; $selectedLogoField = isset($_POST['import_logo_field']) ? $_POST['import_logo_field'] : ''; $form_description = isset($_REQUEST['form_description']) ? SJB_DB::quote($_REQUEST['form_description']) : ""; $type_id = isset($_POST['type_id']) ? intval($_POST['type_id']) : ""; $script = isset($_POST['custom_script']) && !empty($_POST['custom_script']) ? SJB_DB::quote($_POST['custom_script']) : ""; $script_users = SJB_DB::quote(SJB_Request::getVar('custom_script_users', '', SJB_Request::METHOD_POST)); $defaultValue = SJB_Request::getVar('default_value', false); $defaultValueUser = SJB_Request::getVar('user_default_value', false); $selectedProduct = SJB_Request::getVar('postUnderProduct'); $importType = SJB_Request::getVar('import_type', 'increment'); if ($defaultValue) { foreach ($defaultValue as $key => $val) { $defaultValue[$key] = htmlspecialchars($val, ENT_QUOTES, 'UTF-8'); } } if ($defaultValueUser) { foreach ($defaultValueUser as $key => $val) { $defaultValueUser[$key] = htmlspecialchars($val, ENT_QUOTES, 'UTF-8'); } } $original_xml = !empty($_POST['xml']) ? SJB_DB::quote($_POST['xml']) : ''; $id = isset($_GET['id']) ? intval($_GET['id']) : 0; $addQuery = ''; $username = SJB_XmlImport::decodeSpecialEntities(SJB_Request::getVar('username', '')); $external_id = str_replace('_dog_', '@', SJB_Request::getVar('external_id', '')); $site_url = SJB_System::getSystemSettings("SITE_URL"); if ($addNewUser == 1 && empty($_REQUEST['mapped_user'])) { $error = 'Required user profile fields are not mapped'; SJB_HelperFunctions::redirect($site_url . '/edit-import/?id=' . $id . '&save_error=' . base64_encode($error)); } if (!empty($_REQUEST['mapped']) && is_array($_REQUEST['mapped']) && !empty($original_xml) && empty($errors)) { // make map $map1 = array(); $map2 = array(); $serUserMap = ''; foreach ($_REQUEST['mapped'] as $one) { $tmp = explode(':', $one); $map1[] = $tmp[0]; $map2[] = $tmp[1]; } if ($addNewUser == 1 && !empty($_REQUEST['mapped_user']) && is_array($_REQUEST['mapped_user'])) { // make map $mapUser1 = array(); $mapUser2 = array(); foreach ($_REQUEST['mapped_user'] as $one) { $tmp = explode(':', $one); $mapUser1[] = str_replace('user_', '', $tmp[0]); $mapUser2[] = $tmp[1]; } foreach ($mapUser1 as $key => $val) { $val = SJB_XmlImport::decodeSpecialEntities($val); $mapUser[$val] = $mapUser2[$key]; } $serUserMap = serialize($mapUser); } //$map = array_combine($map1, $map2); // PHP5 foreach ($map1 as $key => $val) { $val = SJB_XmlImport::decodeSpecialEntities($val); $map[$val] = $map2[$key]; } if ($selectedLogoOption && $selectedLogoOption != 'not_logo') { //get real data without any cache if (!SJB_ListingFieldDBManager::getListingFieldInfoByID('ListingLogo')) { $listing_field_info = array('id' => 'ListingLogo', 'type' => 'logo', 'is_system' => false, 'is_required' => false, 'caption' => 'Listing Logo'); $listing_field = new SJB_ListingField($listing_field_info, $type_id); $pages = SJB_PostingPagesManager::getFirstPageEachListingType(); SJB_ListingFieldManager::saveListingField($listing_field, $pages); } if ($key = array_search('ListingLogo', $map) !== false) { unset($map[$key]); } } if ($defaultValue) { foreach ($defaultValue as $key => $val) { if ($val == '') { unset($defaultValue[$key]); } } $defaultValue = SJB_db::quote(serialize($defaultValue)); $addQuery .= ", default_value = '" . $defaultValue . "'"; } if ($defaultValueUser) { foreach ($defaultValueUser as $keyuser => $valuser) { if ($valuser == '') { unset($defaultValueUser[$keyuser]); } } $defaultValueUser = SJB_db::quote(serialize($defaultValueUser)); $addQuery .= ", default_value_user = '******'"; } $queryParsUrl = SJB_DB::quote($pars_url); $queryImportType = SJB_DB::quote($importType); $queryId = intval($id); $query = "SET\n\t\t\t\t\t\t\t`custom_script_users` = ?s,\n\t\t\t\t\t\t\t`custom_script` = ?s,\n\t\t\t\t\t\t\t`type_id` = ?n,\n\t\t\t\t\t\t\t`name` = ?s,\n\t\t\t\t\t\t\t`description` = ?s,\n\t\t\t\t\t\t\t`url` = ?s,\n\t\t\t\t\t\t\t`usr_id` = ?n,\n\t\t\t\t\t\t\t`usr_name` = ?s,\n\t\t\t\t\t\t\t`maper_user` = ?s,\n\t\t\t\t\t\t\t`xml` = ?s,\n\t\t\t\t\t\t\t`add_new_user` = ?n,\n\t\t\t\t\t\t\t`username` = ?s,\n\t\t\t\t\t\t\t`external_id` = ?s,\n\t\t\t\t\t\t\t`product_sid` = ?n,\n\t\t\t\t\t\t\t`import_type` = ?s\n\t\t\t\t\t\t\t{$addQuery}"; if ($id > 0) { SJB_DB::query("UPDATE `parsers` {$query} WHERE id = ?n", $script_users, $script, $type_id, $parsing_name, $form_description, $queryParsUrl, $usr_id, $usr_name, $serUserMap, $original_xml, $addNewUser, $username, $external_id, $selectedProduct, $queryImportType, $queryId); } else { $id = SJB_DB::query("INSERT INTO `parsers` {$query}", $script_users, $script, $type_id, $parsing_name, $form_description, $queryParsUrl, $usr_id, $usr_name, $serUserMap, $original_xml, $addNewUser, $username, $external_id, $selectedProduct, $queryImportType); } $errorFile = ''; $xml_logo = null; switch ($selectedLogoOption) { case 'import_logo': $map[$selectedLogoField] = 'ListingLogo'; break; case 'upload_logo': if (!empty($_FILES['upload_logo_file'])) { if ($_FILES['upload_logo_file']['error']) { $errorFile = SJB_UploadFileManager::getErrorId($_FILES['upload_logo_file']['error']); } else { $width = SJB_Settings::getSettingByName('listing_picture_width'); $height = SJB_Settings::getSettingByName('listing_picture_height'); $property_info['second_width'] = SJB_Settings::getSettingByName('listing_thumbnail_width'); $property_info['second_height'] = SJB_Settings::getSettingByName('listing_thumbnail_height'); $picture = new SJB_UploadPictureManager(); $picture->setWidth($width); $picture->setHeight($height); if ($picture->isValidUploadedPictureFile('upload_logo_file')) { $xml_logo = "XMLImportLogo_{$id}"; $picture->setUploadedFileID($xml_logo); $picture->uploadPicture('upload_logo_file', $property_info); } } } break; } $logo_options = serialize(array('option' => $selectedLogoOption, 'field' => $selectedLogoField)); $serMap = serialize($map); if ($xml_logo) { SJB_DB::query("UPDATE `parsers` SET maper = ?s, `xml_logo` = ?s, logo_options = ?s WHERE id = ?n", $serMap, $xml_logo, $logo_options, $id); } else { SJB_DB::query("UPDATE `parsers` SET maper = ?s, logo_options = ?s WHERE id = ?n", $serMap, $logo_options, $id); } $form_submitted = SJB_Request::getVar('form_action'); if ($form_submitted == 'save_info') { SJB_HelperFunctions::redirect($site_url . '/show-import/'); } elseif ($form_submitted == 'apply_info') { $getterParameters = '?id=' . $id; if ($errorFile) { $getterParameters .= '&error=' . $errorFile; } SJB_HelperFunctions::redirect($site_url . '/edit-import/' . $getterParameters); } } else { if (empty($errors)) { $errors[] = 'No data to save'; } $tp->assign('errors', $errors); $tp->assign('xml', htmlspecialchars($original_xml)); $tp->assign('xmlToUser', $original_xml); $tp->assign('form_name', $parsing_name); $tp->assign('form_user', $usr_name); $tp->assign('form_url', $pars_url); $tp->assign('form_description', $form_description); $tp->display('add_step_three.tpl'); } break; } }
public function execute() { $tp = SJB_System::getTemplateProcessor(); $action = SJB_Request::getVar('action'); $field_id = SJB_Request::getVar('field_id', false); if ($field_id || $action == 'save_setting') { switch ($action) { case 'save': $listing_type_sid = SJB_Request::getVar('listing_type_sid', false); $userField = 0; if ($listing_type_sid) { if (strstr($field_id, 'user_')) { $field_id = str_replace('user_', '', $field_id); $userField = 1; } if (!SJB_RefineSearch::getFieldByFieldSIDListingTypeSID($field_id, $listing_type_sid, $userField)) { SJB_RefineSearch::addField($field_id, $listing_type_sid, $userField); } } break; case 'save_setting': $listing_type_id = SJB_Request::getVar('listing_type_id', false); $refine_search_items_limit = SJB_Request::getVar('refine_search_items_limit', false); if ($listing_type_id) { $settingValue = SJB_Request::getVar('turn_on_refine_search_' . $listing_type_id, 0); if (SJB_Settings::getSettingByName('turn_on_refine_search_' . $listing_type_id) === false) { SJB_Settings::addSetting('turn_on_refine_search_' . $listing_type_id, $settingValue); } else { SJB_Settings::updateSetting('turn_on_refine_search_' . $listing_type_id, $settingValue); } } elseif ($refine_search_items_limit) { if (SJB_Settings::getSettingByName('refine_search_items_limit') === false) { SJB_Settings::addSetting('refine_search_items_limit', $refine_search_items_limit); } else { SJB_Settings::updateSetting('refine_search_items_limit', $refine_search_items_limit); } } break; case 'delete': SJB_RefineSearch::removeField($field_id); break; case 'move_up': $listing_type_sid = SJB_Request::getVar('listing_type_sid', false); if ($listing_type_sid) { SJB_RefineSearch::moveUpFieldBySID($field_id, $listing_type_sid); } break; case 'move_down': $listing_type_sid = SJB_Request::getVar('listing_type_sid', false); if ($listing_type_sid) { SJB_RefineSearch::moveDownFieldBySID($field_id, $listing_type_sid); } break; } } $listingTypes = SJB_ListingTypeManager::getAllListingTypesInfo(); foreach ($listingTypes as $key => $listingType) { $fields = array_merge(SJB_ListingFieldManager::getCommonListingFieldsInfo(), SJB_ListingFieldManager::getListingFieldsInfoByListingType($listingType['sid'])); foreach ($fields as $field_key => $field) { if ($field['type'] == 'location') { if (is_array($field['fields'])) { $fields = array_merge($fields, $field['fields']); } } if (!in_array($field['type'], array('list', 'multilist', 'string', 'boolean', 'tree')) || in_array($field['id'], array('ApplicationSettings', 'access_type', 'anonymous', 'screening_questionnaire'))) { foreach ($fields as $fieldKey => $searchField) { if ($searchField['id'] == $field['id']) { unset($fields[$fieldKey]); } } } } $listingTypes[$key]['fields'] = $fields; if ($key == 'Job') { $userFieldSID = SJB_DB::queryValue("SELECT `sid` FROM `user_profile_fields` WHERE `id` = 'CompanyName'"); if (!empty($userFieldSID)) { $listingTypes[$key]['user_fields'] = SJB_UserProfileFieldManager::getFieldInfoBySID($userFieldSID); } } $listingTypes[$key]['saved_fields'] = SJB_RefineSearch::getFieldsByListingTypeSID($listingType['sid']); $listingTypes[$key]['setting'] = SJB_Settings::getSettingByName('turn_on_refine_search_' . $listingType['id']); } $tp->assign('refine_search_items_limit', SJB_Settings::getSettingByName('refine_search_items_limit')); $tp->assign('listingTypes', $listingTypes); $tp->display('refine_search.tpl'); }