示例#1
0
 function _getListingSidCollectionFromRequest()
 {
     $listing = new SJB_Listing(array(), $this->listing_type_sid);
     $id_alias_info = $listing->addIDProperty();
     $listing->addActivationDateProperty();
     $listing->addFeaturedProperty();
     $listing->addFeaturedLastShowedProperty();
     $username_alias_info = $listing->addUsernameProperty();
     $listing_type_id_info = $listing->addListingTypeIDProperty();
     $listing->addCompanyNameProperty();
     // select only accessible listings by user sid
     // see SearchCriterion.php, AccessibleCriterion class
     if ($this->listing_type_id == 'Resume') {
         $this->requested_data['access_type'] = array('accessible' => SJB_UserManager::getCurrentUserSID());
     }
     $criteria = $this->criteria_saver->getCriteria();
     if (isset($this->requested_data['PostedWithin']['multi_like'][0]) || isset($criteria['PostedWithin']['multi_like'][0])) {
         $within_period = '';
         if (isset($this->requested_data['PostedWithin']['multi_like'][0])) {
             $within_period = $this->requested_data['PostedWithin']['multi_like'][0];
             unset($this->requested_data['PostedWithin']['multi_like']);
         }
         if (isset($criteria['PostedWithin']['multi_like'][0])) {
             $within_period = $criteria['PostedWithin']['multi_like'][0];
             unset($criteria['PostedWithin']);
         }
         $i18n = SJB_I18N::getInstance();
         $this->requested_data['activation_date']['not_less'] = $i18n->getDate(date('Y-m-d', strtotime("- {$within_period} days")));
     }
     if (isset($this->requested_data['CompanyName']['multi_like_and'][0]) || isset($criteria['CompanyName']['multi_like_and'][0])) {
         if (isset($this->requested_data['CompanyName']['multi_like_and'][0])) {
             $companyName = $this->requested_data['CompanyName']['multi_like_and'][0];
             unset($this->requested_data['CompanyName']);
         }
         if (isset($criteria['CompanyName']['multi_like_and'][0])) {
             $companyName = $criteria['CompanyName']['multi_like_and'][0];
             unset($criteria['CompanyName']);
         }
         $userName = SJB_UserManager::getUserNameByCompanyName($companyName);
         if ($userName) {
             $this->requested_data['username']['equal'] = $userName;
         }
     }
     $criteria = SJB_SearchFormBuilder::extractCriteriaFromRequestData(array_merge($criteria, $this->requested_data), $listing);
     $aliases = new SJB_PropertyAliases();
     $aliases->addAlias($id_alias_info);
     $aliases->addAlias($username_alias_info);
     $aliases->addAlias($listing_type_id_info);
     $sortingFields = array();
     if ($this->usePriority) {
         $sortingFields['priority'] = 'DESC';
     }
     $innerJoin = array();
     $orderInfo = $this->criteria_saver->getOrderInfo();
     if (is_array($orderInfo['sorting_field'])) {
         $requestedSortingField = array();
         foreach ($orderInfo['sorting_field'] as $orderInfoProperty) {
             $fieldName = strstr($orderInfoProperty, '_', true);
             $id = $this->getLocationProperty($fieldName, $listing, $orderInfoProperty);
             if (!empty($id)) {
                 switch ($orderInfoProperty) {
                     case 'Location_State':
                         $innerJoin['states'] = array('stateName' => '`states`.`state_code`', 'join' => 'LEFT JOIN', 'join_field' => 'sid', 'join_field2' => $orderInfoProperty, 'main_table' => 'listings');
                         break;
                     case 'Location_Country':
                         $innerJoin['countries'] = array('countryName' => '`countries`.`country_name`', 'join' => 'LEFT JOIN', 'join_field' => 'sid', 'join_field2' => $orderInfoProperty, 'main_table' => 'listings');
                         break;
                     default:
                         break;
                 }
                 $sortingFields[$orderInfoProperty] = $orderInfo['sorting_order'];
                 $requestedSortingField[] = $orderInfoProperty;
             }
             $this->requested_data['sorting_field'] = $requestedSortingField;
             $this->requested_data['sorting_order'] = $orderInfo['sorting_order'];
         }
     } else {
         $property = $listing->getProperty($orderInfo['sorting_field']);
         if (!empty($property) && $property->isSystem()) {
             $sortingFields[$orderInfo['sorting_field']] = $orderInfo['sorting_order'];
             if ($property->getID() == 'CompanyName') {
                 $innerJoin['users'] = array('join' => 'INNER JOIN', 'join_field' => 'sid', 'join_field2' => 'user_sid', 'main_table' => 'listings');
             }
             $this->requested_data['sorting_field'] = $orderInfo['sorting_field'];
             $this->requested_data['sorting_order'] = $orderInfo['sorting_order'];
         } else {
             $sortingFields['activation_date'] = 'DESC';
             $this->requested_data['sorting_field'] = 'activation_date';
             $this->requested_data['sorting_order'] = 'DESC';
         }
     }
     $searcher = new SJB_ListingSearcher();
     if ($this->listingsLimit) {
         $searcher->setLimit($this->listingsLimit);
     }
     $this->listing_search_structure['sorting_field'] = $this->requested_data['sorting_field'];
     $this->listing_search_structure['sorting_order'] = $this->requested_data['sorting_order'];
     return $searcher->getObjectsSIDsByCriteria($criteria, $aliases, $sortingFields, $innerJoin, $this->relevance);
 }
示例#2
0
 private function sendSearchedNotifications()
 {
     $savedSearches = SJB_SavedSearches::getAutoNotifySavedSearches();
     $listing = new SJB_Listing();
     $this->notifiedSavedSearchesSID = array();
     $notificationsLimit = (int) SJB_Settings::getSettingByName('num_of_listings_sent_in_email_alerts');
     foreach ($savedSearches as $savedSearch) {
         $searcher = new SJB_ListingSearcher();
         $listing->addActivationDateProperty();
         $dataSearch = unserialize($savedSearch['data']);
         $dataSearch['active']['equal'] = 1;
         $dateArray = explode('-', $savedSearch['last_send']);
         $savedSearch['last_send'] = strftime($this->lang['date_format'], mktime(0, 0, 0, $dateArray[1], $dateArray[2], $dateArray[0]));
         $dataSearch['activation_date']['not_less'] = $savedSearch['last_send'];
         $dataSearch['activation_date']['not_more'] = $this->currentDate;
         $listingTypeSID = 0;
         if ($dataSearch['listing_type']['equal']) {
             $listingTypeID = $dataSearch['listing_type']['equal'];
             $listingTypeSID = SJB_ListingTypeManager::getListingTypeSIDByID($listingTypeID);
             if (SJB_ListingTypeManager::getWaitApproveSettingByListingType($listingTypeSID)) {
                 $dataSearch['status']['equal'] = 'approved';
             }
         }
         $idAliasInfo = $listing->addIDProperty();
         $usernameAliasInfo = $listing->addUsernameProperty();
         $listingTypeIDInfo = $listing->addListingTypeIDProperty();
         $aliases = new SJB_PropertyAliases();
         $aliases->addAlias($idAliasInfo);
         $aliases->addAlias($usernameAliasInfo);
         $aliases->addAlias($listingTypeIDInfo);
         $dataSearch['access_type'] = array('accessible' => $savedSearch['user_sid']);
         $criteria = SJB_SearchFormBuilder::extractCriteriaFromRequestData($dataSearch, $listing);
         $searcher->found_object_sids = array();
         $searcher->setLimit($notificationsLimit);
         $foundListingsIDs = $searcher->getObjectsSIDsByCriteria($criteria, $aliases);
         if (count($foundListingsIDs)) {
             $savedSearch['activation_date'] = $savedSearch['last_send'];
             if (SJB_Notifications::sendUserNewListingsFoundLetter($foundListingsIDs, $savedSearch['user_sid'], $savedSearch, $listingTypeSID)) {
                 SJB_Statistics::addStatistics('sentAlert', $listingTypeSID, $savedSearch['sid']);
                 SJB_DB::query('UPDATE `saved_searches` SET `last_send` = CURDATE() WHERE `sid` = ?n', $savedSearch['sid']);
             }
             $this->notifiedSavedSearchesSID[] = $savedSearch['sid'];
         }
     }
 }