public function execute() { ini_set('max_execution_time', 0); $tp = SJB_System::getTemplateProcessor(); $file_info = isset($_FILES['import_file']) ? $_FILES['import_file'] : null; $encodingFromCharset = SJB_Request::getVar('encodingFromCharset', 'UTF-8'); $listingTypeID = SJB_Request::getVar('listing_type_id', null); $productSID = SJB_Request::getVar('product_sid', 0); $errors = array(); if ($listingTypeID && $productSID) { $acl = SJB_Acl::getInstance(); $resource = 'post_' . strtolower($listingTypeID); if (!$acl->isAllowed($resource, $productSID, 'product')) { $errors[] = 'You cannot import listings of this type under the selected product'; } } if (!empty($file_info)) { $extension = SJB_Request::getVar('file_type'); if (!SJB_ImportFile::isValidFileExtensionByFormat($extension, $file_info)) { $errors['DO_NOT_MATCH_SELECTED_FILE_FORMAT'] = true; } } if (empty($file_info) || $file_info['error'] || $errors) { if (isset($file_info['error']) && $file_info['error'] > 0) { $errors[SJB_UploadFileManager::getErrorId($file_info['error'])] = 1; } $listing_types = SJB_ListingTypeManager::getAllListingTypesInfo(); $products = SJB_ProductsManager::getProductsByProductType('post_listings'); $tp->assign("uploadMaxFilesize", SJB_UploadFileManager::getIniUploadMaxFilesize()); $tp->assign('listing_types', $listing_types); $tp->assign('products', $products); $tp->assign('errors', $errors); $tp->assign('charSets', SJB_HelperFunctions::getCharSets()); $tp->display('import_listings.tpl'); } else { $i18n = SJB_I18N::getInstance(); $csv_delimiter = SJB_Request::getVar('csv_delimiter', null); $activeStatus = SJB_Request::getVar('active', 0); $activationDate = SJB_Request::getVar('activation_date', date('Y-m-d')); $activationDate = $i18n->getInput('date', $activationDate); $non_existed_values_flag = SJB_Request::getVar('non_existed_values', null); $productInfo = SJB_ProductsManager::getProductInfoBySID($productSID); if (empty($productInfo['listing_duration'])) { $expirationDate = ''; } else { $timestamp = strtotime($activationDate . ' + ' . $productInfo['listing_duration'] . ' days'); $expirationDate = $i18n->getDate(date('Y-m-d', $timestamp)); } $extension = $_REQUEST['file_type']; if ($extension == 'xls') { $import_file = new SJB_ImportFileXLS($file_info); } elseif ($extension == 'csv') { $import_file = new SJB_ImportFileCSV($file_info, $csv_delimiter); } $import_file->parse($encodingFromCharset); $listing = $this->CreateListing(array(), $listingTypeID); $imported_data = $import_file->getData(); $isFileImported = true; $count = 0; $addedListingsSids = array(); $nonExistentUsers = array(); foreach ($imported_data as $key => $importedColumn) { if ($key == 1) { $imported_data_processor = new SJB_ImportedDataProcessor($importedColumn, $listing); continue; } if (!$importedColumn) { continue; } $count++; $listingInfo = $imported_data_processor->getData($non_existed_values_flag, $importedColumn); $doc = new DOMDocument(); foreach ($listing->getProperties() as $property) { if ($property->getType() == 'complex' && !empty($listingInfo[$property->id])) { $childFields = SJB_ListingComplexFieldManager::getListingFieldsInfoByParentSID($property->sid); $doc->loadXML($listingInfo[$property->id]); $results = $doc->getElementsByTagName($property->id . 's'); $listingInfo[$property->id] = array(); foreach ($results as $complexparent) { $i = 1; foreach ($complexparent->getElementsByTagName($property->id) as $result) { $resultXML = simplexml_import_dom($result); foreach ($childFields as $childField) { if (isset($resultXML->{$childField}['id'])) { $listingInfo[$property->id][$childField['id']][$i] = XML_Util::reverseEntities((string) $resultXML->{$childField}['id']); } } $i++; } } } elseif ($property->getType() == 'monetary' && !empty($listingInfo[$property->id])) { $value = $listingInfo[$property->id]; $listingInfo[$property->id] = array(); $listingInfo[$property->id]['value'] = $value; $defaultCurrency = SJB_CurrencyManager::getDefaultCurrency(); $currencyCode = !empty($listingInfo[$property->id . "Currency"]) ? $listingInfo[$property->id . "Currency"] : $defaultCurrency['currency_code']; $currency = SJB_CurrencyManager::getCurrencyByCurrCode($currencyCode); $listingInfo[$property->id]['add_parameter'] = !empty($currency['sid']) ? $currency['sid'] : ''; if (isset($listingInfo[$property->id . "Currency"])) { unset($listingInfo[$property->id . "Currency"]); } } 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, $listingInfo)) { switch ($locationField) { case $property->id . '.Country': $value = SJB_CountriesManager::getCountrySIDByCountryName($listingInfo[$locationField]); if (!$value) { $value = SJB_CountriesManager::getCountrySIDByCountryCode($listingInfo[$locationField]); } break; case $property->id . '.State': $value = SJB_StatesManager::getStateSIDByStateName($listingInfo[$locationField]); if (!$value) { $value = SJB_StatesManager::getStateSIDByStateCode($listingInfo[$locationField]); } break; default: $value = $listingInfo[$locationField]; break; } $listingInfo[$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, $listingInfo) && !in_array($locationField, $locationFieldAdded) && !$listing->getProperty($locationField)) { switch ($locationField) { case 'Country': $value = SJB_CountriesManager::getCountrySIDByCountryName($listingInfo[$locationField]); if (!$value) { $value = SJB_CountriesManager::getCountrySIDByCountryCode($listingInfo[$locationField]); } break; case 'State': $value = SJB_StatesManager::getStateSIDByStateName($listingInfo[$locationField]); if (!$value) { $value = SJB_StatesManager::getStateSIDByStateCode($listingInfo[$locationField]); } break; default: $value = $listingInfo[$locationField]; break; } $listingInfo[$property->id][$locationField] = $value; } } } } } $listing = $this->CreateListing($listingInfo, $listingTypeID); $pictures = array(); if (isset($listingInfo['pictures'])) { $listing->addPicturesProperty(); $explodedPictures = explode(';', $listingInfo['pictures']); foreach ($explodedPictures as $picture) { if (!empty($picture)) { $pictures[] = $picture; } } $listing->setPropertyValue('pictures', count($pictures)); } $listing->addActiveProperty($activeStatus); $listing->addActivationDateProperty($activationDate); $listing->addExpirationDateProperty($expirationDate); SJB_ListingDBManager::setListingExpirationDateBySid($listing->sid); $listing->setProductInfo(SJB_ProductsManager::getProductExtraInfoBySID($productSID)); $listing->setPropertyValue('access_type', 'everyone'); $listing->setPropertyValue('status', 'approved'); foreach ($listing->getProperties() as $property) { if ($property->getType() == 'tree' && $property->value !== '') { try { $treeImportHelper = new SJB_FieldTreeImportHelper($property->value); $treeValues = $treeImportHelper->parseAndGetValues(); $listing->setPropertyValue($property->id, $treeValues); $listing->details->properties[$property->id]->type->property_info['value'] = $treeValues; } catch (Exception $e) { $listing->setPropertyValue($property->id, ''); $listing->details->properties[$property->id]->type->property_info['value'] = ''; SJB_Error::writeToLog('Listing Import. Tree Field Value Error: ' . $e->getMessage()); } } elseif ($property->id == 'ApplicationSettings' && !empty($listingInfo['ApplicationSettings'])) { if (preg_match("^[a-z0-9\\._-]+@[a-z0-9\\._-]+\\.[a-z]{2,}\$^iu", $listingInfo['ApplicationSettings'])) { $listingInfo['ApplicationSettings'] = array('value' => $listingInfo['ApplicationSettings'], 'add_parameter' => 1); } elseif (preg_match("^(https?:\\/\\/)^", $listingInfo['ApplicationSettings'])) { $listingInfo['ApplicationSettings'] = array('value' => $listingInfo['ApplicationSettings'], 'add_parameter' => 2); } else { $listingInfo['ApplicationSettings'] = array('value' => '', 'add_parameter' => ''); } //put empty if not valid email or url $listing->details->properties[$property->id]->type->property_info['value'] = $listingInfo['ApplicationSettings']; } elseif ($property->getType() == 'complex') { $childFields = SJB_ListingComplexFieldManager::getListingFieldsInfoByParentSID($property->sid); $complexChildValues = $property->value; foreach ($childFields as $childField) { if ($childField['type'] == 'complexfile' && !empty($complexChildValues[$childField['id']])) { $fieldInfo = SJB_ListingComplexFieldManager::getFieldInfoBySID($childField['sid']); if (!SJB_UploadFileManager::fileImport($listingInfo, $fieldInfo, $property->id)) { $isFileImported = false; } } if ($property->type->complex->details->properties[$childField['id']]->value == null) { $property->type->complex->details->properties[$childField['id']]->value = array(1 => ''); $property->type->complex->details->properties[$childField['id']]->type->property_info['value'] = array(1 => ''); } } } // The import of files at import of listings if (in_array($property->getType(), array('file', 'logo', 'video')) && $property->value !== '') { $fieldInfo = SJB_ListingFieldDBManager::getListingFieldInfoByID($property->id); if (!SJB_UploadFileManager::fileImport($listingInfo, $fieldInfo)) { $isFileImported = false; } } } if ($non_existed_values_flag == 'add') { $this->UpdateListValues($listing); } if ($listing->getUserSID()) { SJB_ListingManager::saveListing($listing); $listingSid = $listing->getSID(); SJB_Statistics::addStatistics('addListing', $listing->getListingTypeSID(), $listingSid); SJB_ListingManager::activateListingBySID($listingSid, false); if (!$this->fillGallery($listingSid, $pictures)) { $isFileImported = false; } $addedListingsSids[] = $listingSid; } else { $nonExistentUsers[] = $listingInfo['username']; $count--; } } SJB_BrowseDBManager::addListings($addedListingsSids); SJB_ProductsManager::incrementPostingsNumber($productSID, count($addedListingsSids)); if ($isFileImported && file_exists(SJB_System::getSystemSettings('IMPORT_FILES_DIRECTORY'))) { SJB_Filesystem::delete(SJB_System::getSystemSettings('IMPORT_FILES_DIRECTORY')); } $tp->assign('imported_listings_count', $count); $tp->assign('nonExistentUsers', $nonExistentUsers); $tp->display('import_listings_result.tpl'); } }
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'); } }
/** * @param SJB_Object $object * @return SJB_Object */ public static function fillRegistrationDataWithUser(SJB_Object $object) { if (self::$oSocialPlugin instanceof LinkedinSocialPlugin && ($oProfile = self::getProfileObject())) { /** @var $oProperty SJB_ObjectProperty */ foreach ($object->getProperties() as $oProperty) { $value = ''; switch ($oProperty->getID()) { case 'Country': if (!empty($oProfile->location->country->code)) { $value = SJB_Countries::getCountryNameByISO2((string) $oProfile->location->country->code); } break; case 'Location': $country = ''; $city = ''; $address = ''; if (!empty($oProfile->location->country->code)) { $country = SJB_Countries::getCountryNameByISO2((string) $oProfile->location->country->code); $country = $country ? SJB_CountriesManager::getCountrySIDByCountryName($country) : ''; } if (!empty($oProfile->location->name)) { $city = $oProfile->location->name; } if (!empty($oProfile->{'main-address'})) { $address = $oProfile->{'main-address'}; } $location = $object->getChild('Location'); $propertyInfo = $location->getPropertyInfo('Country'); if ($propertyInfo && (!$propertyInfo['hidden'] || isset($propertyInfo['madeHidden']))) { $location->setPropertyValue('Country', $country); } $propertyInfo = $location->getPropertyInfo('City'); if ($propertyInfo && (!$propertyInfo['hidden'] || isset($propertyInfo['madeHidden']))) { $location->setPropertyValue('City', $city); } $propertyInfo = $location->getPropertyInfo('Address'); if ($propertyInfo && (!$propertyInfo['hidden'] || isset($propertyInfo['madeHidden']))) { $location->setPropertyValue('Address', $address); } break; case 'DateOfBirth': if (!empty($oProfile->{'date-of-birth'})) { $year = !empty($oProfile->{'date-of-birth'}->year) ? (string) $oProfile->{'date-of-birth'}->year : '0000'; $month = !empty($oProfile->{'date-of-birth'}->month) ? (string) $oProfile->{'date-of-birth'}->month : '00'; $day = !empty($oProfile->{'date-of-birth'}->day) ? (string) $oProfile->{'date-of-birth'}->day : '00'; $value = SJB_I18N::getInstance()->getDate($day . '-' . $month . '-' . $year); } break; case 'FirstName': if (!empty($oProfile->{'first-name'})) { $value = $oProfile->{'first-name'}; } break; case 'LastName': if (!empty($oProfile->{'last-name'})) { $value = $oProfile->{'last-name'}; } break; case 'ContactName': if (!empty($oProfile->{'last-name'})) { $value = $oProfile->{'first-name'} . ' ' . $oProfile->{'last-name'}; } break; case 'WebSite': // WebSite if (!empty($oProfile->website)) { $value = $oProfile->website; } break; case 'Title': case 'TITLE': if (!empty($oProfile->positions->position->title)) { $value = $oProfile->positions->position->title; } break; case 'CompanyName': if (!empty($oProfile->positions->position->company->name)) { $value = $oProfile->positions->position->company->name; } break; case 'CompanyDescription': if (!empty($oProfile->summary)) { $value = $oProfile->summary; } break; case 'City': if (!empty($oProfile->location->name)) { $value = $oProfile->location->name; } break; case 'PhoneNumber': if (!empty($oProfile->{'phone-numbers'})) { $aPhoneNumbers = array(); foreach (self::$oProfile->{'phone-numbers'}->{'phone-number'} as $phone) { array_push($aPhoneNumbers, $phone->{'phone-number'} . ' (' . $phone->{'phone-type'} . ')'); } $value = implode(', ', $aPhoneNumbers); } break; case 'jsTwitter': if (!empty($oProfile->{'twitter-accounts'})) { $aTwitters = array(); foreach (self::$oProfile->{'twitter-accounts'}->{'twitter-account'} as $twitter) { array_push($aTwitters, $twitter->{'provider-account-name'}); } $value = implode(', ', $aTwitters); } break; case 'Address': if (!empty($oProfile->{'main-address'})) { $value = $oProfile->{'main-address'}; } break; case 'sendmail': $value = false; break; case 'email': if (!empty($oProfile->{'email-address'}) && !SJB_Request::getVar('email', null)) { $value = array('original' => $oProfile->{'email-address'}, 'confirmed' => $oProfile->{'email-address'}); } break; case 'username': case 'password': continue 2; break; default: $propertyCanBeDeleted = !in_array($oProperty->getID(), self::$aUserFields) && !in_array($oProperty->getID(), self::$aListingFields) && !$oProperty->isRequired(); if ($propertyCanBeDeleted) { $object->deleteProperty($oProperty->getID()); } break; } if (!empty($value)) { $reqVal = SJB_Request::getVar($oProperty->getID(), false); if (empty($reqVal)) { // if user did not modified his data in form $object->setPropertyValue($oProperty->getID(), $value); } } } } return $object; }
/** * @param SJB_Object $object * @return SJB_Object */ public static function fillRegistrationDataWithUser(SJB_Object $object) { if ($oProfile = self::getProfileObject()) { /** @var $oProperty SJB_ObjectProperty */ foreach ($object->getProperties() as $oProperty) { $value = false; switch ($oProperty->getID()) { case 'Country': case 'CurrentCountry': case 'City': case 'CurrentCity': if (!empty($oProfile->location) && !empty($oProfile->location['name'])) { $location = explode(', ', $oProfile->location['name']); if ('Country' == $oProperty->getID() || 'CurrentCountry' == $oProperty->getID()) { $value = count($location) > 2 ? !empty($location[2]) ? $location[2] : '' : (!empty($location[1]) ? $location[1] : ''); } elseif ('City' == $oProperty->getID() || 'CurrentCity' == $oProperty->getID()) { $value = !empty($location[0]) ? $location[0] : ''; } } break; case 'Location': $country = ''; $city = ''; if (!empty($oProfile->location) && !empty($oProfile->location['name'])) { $location = explode(', ', $oProfile->location['name']); $country = count($location) > 2 ? !empty($location[2]) ? $location[2] : '' : (!empty($location[1]) ? $location[1] : ''); $country = $country ? SJB_CountriesManager::getCountrySIDByCountryName($country) : ''; $city = !empty($location[0]) ? $location[0] : ''; } $reqVal = SJB_Request::getVar($oProperty->getID(), false); if (empty($reqVal)) { $location = $object->getChild('Location'); $propertyInfo = $location->getPropertyInfo('Country'); if ($propertyInfo && (!$propertyInfo['hidden'] || isset($propertyInfo['madeHidden']))) { $location->setPropertyValue('Country', $country); } $propertyInfo = $location->getPropertyInfo('City'); if ($propertyInfo && (!$propertyInfo['hidden'] || isset($propertyInfo['madeHidden']))) { $location->setPropertyValue('City', $city); } } break; case 'WorkExperience': if (!empty($oProfile->work)) { $aWork = array(); foreach ($oProfile->work as $position) { $work = ''; if (!empty($position['employer'])) { $work .= $position['employer']['name'] . "\r\n"; } if (!empty($position['location'])) { $work .= $position['location']['name'] . "\r\n"; } if (!empty($position['start_date'])) { $work .= $position['start_date'] . "\r\n"; } if (!empty($position['end_date'])) { $work .= $position['end_date'] . "\r\n"; } if (!empty($work)) { $aWork[] = $work; } } $value = implode("\r\n", $aWork); } break; case 'Education': if (!empty($oProfile->education)) { $aEducation = array(); foreach ($oProfile->education as $education) { $sEducation = ''; if (!empty($education['school'])) { $sEducation = $education['school']['name']; } if (!empty($education['year'])) { $sEducation .= '(' . $education['year']['name'] . '):<br/>'; } if (!empty($education['type'])) { $sEducation .= $education['type'] . "\r\n"; } if (!empty($education['concentration'])) { foreach ($education['concentration'] as $concentration) { $sEducation .= '<br/>' . $concentration['name'] . "\r\n"; } } if (!empty($education['classes'])) { foreach ($education['classes'] as $classes) { $sEducation .= '<br/>' . $classes['name'] . ' : ' . $classes['description'] . "\r\n"; } } if (!empty($sEducation)) { array_push($aEducation, $sEducation); } } $value = implode("\r\n", $aEducation); } break; case 'Title': case 'TITLE': $value = 'My Resume'; break; case 'FirstName': if (!empty($oProfile->first_name)) { $value = $oProfile->first_name; } break; case 'LastName': if (!empty($oProfile->last_name)) { $value = $oProfile->last_name; } break; case 'ContactName': if (!empty($oProfile->name)) { $value = $oProfile->name; } break; case 'WebSite': if (!empty($oProfile->website)) { $value = $oProfile->website; } break; case 'CompanyName': if (!empty($oProfile->work) && !empty($oProfile->work[0]['employer']['name'])) { $value = $oProfile->work[0]['employer']['name']; } break; case 'CompanyDescription': if (!empty($oProfile->summary)) { $value = $oProfile->summary; } break; case 'email': if (!empty($oProfile->email) && !SJB_Request::getVar('email', null)) { $value = array('original' => $oProfile->email, 'confirmed' => $oProfile->email); } break; case 'sendmail': $value = false; break; case 'username': case 'password': continue 2; break; default: $propertyCanBeDeleted = !in_array($oProperty->getID(), self::$aUserFields) && !in_array($oProperty->getID(), self::$aListingFields) && !$oProperty->isRequired(); if ($propertyCanBeDeleted) { $object->deleteProperty($oProperty->getID()); continue 2; } break; } if (!empty($value)) { $reqVal = SJB_Request::getVar($oProperty->getID(), false); if (empty($reqVal)) { // if user did not modified his data in form $object->setPropertyValue($oProperty->getID(), $value); } } } } return $object; }
public function execute() { ini_set('max_execution_time', 0); $template_processor = SJB_System::getTemplateProcessor(); $errors = array(); $encodingFromCharset = SJB_Request::getVar('encodingFromCharset', 'UTF-8'); $file_info = isset($_FILES['import_file']) ? $_FILES['import_file'] : null; if (!empty($file_info)) { $extension = $_REQUEST['file_type']; if (!SJB_ImportFile::isValidFileExtensionByFormat($extension, $file_info)) { $errors['DO_NOT_MATCH_SELECTED_FILE_FORMAT'] = true; } } if (empty($file_info) || $file_info['error'] || !empty($errors)) { if (isset($file_info['error']) && $file_info['error'] > 0) { $errors[SJB_UploadFileManager::getErrorId($file_info['error'])] = 1; } $user_groups = SJB_UserGroupManager::getAllUserGroupsInfo(); $template_processor->assign("uploadMaxFilesize", SJB_UploadFileManager::getIniUploadMaxFilesize()); $template_processor->assign('user_groups', $user_groups); $template_processor->assign('errors', $errors); $template_processor->assign('charSets', SJB_HelperFunctions::getCharSets()); $template_processor->display('import_users.tpl'); } else { $csv_delimiter = SJB_Request::getVar('csv_delimiter', null); $user_group_id = SJB_Request::getVar('user_group_id', null); $user_group_sid = SJB_UserGroupManager::getUserGroupSIDByID($user_group_id); if ($extension == 'xls') { $import_file = new SJB_ImportFileXLS($file_info); } elseif ($extension == 'csv') { $import_file = new SJB_ImportFileCSV($file_info, $csv_delimiter); } $import_file->parse($encodingFromCharset); $user = $this->CreateUser(array(), $user_group_id); $imported_data = $import_file->getData(); $count = 0; $import_file_url = false; $usersID = array(); foreach ($imported_data as $key => $importedColumn) { if ($key == 1) { $imported_user_processor = new SJB_ImportedUserProcessor($importedColumn, $user); continue; } if (!$importedColumn) { continue; } $userInfo = $imported_user_processor->getData($importedColumn); $extUserID = isset($userInfo['extUserID']) ? $userInfo['extUserID'] : ''; $user = $this->CreateUser(array(), $user_group_id); $user->addExtUserIDProperty(); $doc = new DOMDocument(); foreach ($user->getProperties() as $property) { if ($property->id == 'active') { $property->type->property_info['value'] = $property->value; } elseif ($property->getType() == 'location') { $locationFields = array($property->id . '.Country', $property->id . '.State', $property->id . '.City', $property->id . '.ZipCode', $property->id . '.Address'); $locationFieldAdded = array(); foreach ($locationFields as $locationField) { if (array_key_exists($locationField, $userInfo)) { switch ($locationField) { case $property->id . '.Country': $value = SJB_CountriesManager::getCountrySIDByCountryName($userInfo[$locationField]); if (!$value) { $value = SJB_CountriesManager::getCountrySIDByCountryCode($userInfo[$locationField]); } break; case $property->id . '.State': $value = SJB_StatesManager::getStateSIDByStateName($userInfo[$locationField]); if (!$value) { $value = SJB_StatesManager::getStateSIDByStateCode($userInfo[$locationField]); } break; default: $value = $userInfo[$locationField]; break; } unset($userInfo[$locationField]); $userInfo[$property->id][str_replace($property->id . '.', '', $locationField)] = $value; $locationFieldAdded[] = str_replace($property->id . '.', '', $locationField); } } if ($property->id == 'Location') { $locationFields = array('Country', 'State', 'City', 'ZipCode', 'Address'); foreach ($locationFields as $locationField) { if (array_key_exists($locationField, $userInfo) && !in_array($locationField, $locationFieldAdded) && !$user->getProperty($locationField)) { switch ($locationField) { case 'Country': $value = SJB_CountriesManager::getCountrySIDByCountryName($userInfo[$locationField]); if (!$value) { $value = SJB_CountriesManager::getCountrySIDByCountryCode($userInfo[$locationField]); } break; case 'State': $value = SJB_StatesManager::getStateSIDByStateName($userInfo[$locationField]); if (!$value) { $value = SJB_StatesManager::getStateSIDByStateCode($userInfo[$locationField]); } break; default: $value = $userInfo[$locationField]; break; } $userInfo[$property->id][$locationField] = $value; unset($userInfo[$locationField]); } } } } } $user = $this->CreateUser($userInfo, $user_group_id); $user->addExtUserIDProperty($extUserID); $username = SJB_Array::get($userInfo, 'username'); if (empty($username)) { $errors[] = 'Empty username is not allowed, record ignored.'; } elseif (!is_null(SJB_UserManager::getUserSIDbyUsername($username))) { $errors[] = '\'' . $userInfo['username'] . '\' - this user name already exists, record ignored.'; } else { $originalMd5Password = $user->getPropertyValue('password'); SJB_UserManager::saveUser($user); $this->extraProperties($user, $userInfo, $usersID); if (!empty($originalMd5Password)) { SJB_UserManager::saveUserPassword($user->getSID(), $originalMd5Password); } $isApproveByAdmin = SJB_UserGroupManager::isApproveByAdmin($user_group_sid); if ($isApproveByAdmin) { SJB_UserManager::setApprovalStatusByUserName($user->getUserName(), 'Pending'); } $count++; } } if ($import_file_url) { SJB_Filesystem::delete(SJB_System::getSystemSettings("IMPORT_FILES_DIRECTORY")); } $template_processor->assign('imported_users_count', $count); $template_processor->assign('errors', $errors); $template_processor->display('import_users_result.tpl'); } }