View source
<?php
include_once 'views_rss_yandex_realty.field.inc';
function views_rss_yandex_realty_views_api() {
return array(
'api' => 3,
'path' => drupal_get_path('module', 'views_rss_yandex_realty') . '/views',
);
}
function views_rss_yandex_realty_views_rss_element_groups() {
$groups['yandex_realty_general'] = array(
'title' => t('General'),
);
$groups['yandex_realty_location'] = array(
'title' => t('Location'),
);
$groups['yandex_realty_sales_agent'] = array(
'title' => t('Sales agent'),
);
$groups['yandex_realty_deal'] = array(
'title' => t('Pricing, deal conditions'),
);
$groups['yandex_realty_object'] = array(
'title' => t('Object'),
);
$groups['yandex_realty_living'] = array(
'title' => t('Living apartment'),
);
$groups['yandex_realty_building'] = array(
'title' => t('Building'),
);
$groups['yandex_realty_country_estate'] = array(
'title' => t('Country estate'),
);
return $groups;
}
function views_rss_yandex_realty_views_rss_yandex_realty_offer_elements() {
$elements['internal-id'] = array();
$elements_general['type'] = array(
'settings form options' => array(
'views_rss_yandex_realty_sale' => t('Sale'),
'views_rss_yandex_realty_rent' => t('Rent'),
),
);
$elements_general['property-type'] = array(
'settings form options' => array(
'views_rss_yandex_realty_living' => t('Living'),
),
);
$elements_general['general-category'] = array(
'title' => t('Category'),
'settings form options' => array(
'views_rss_yandex_realty_room' => t('Room'),
'views_rss_yandex_realty_flat' => t('Flat'),
'views_rss_yandex_realty_house' => t('House'),
'views_rss_yandex_realty_lot' => t('Lot'),
'views_rss_yandex_realty_townhouse' => t('Townhouse'),
'views_rss_yandex_realty_house_part' => t('Part of the house'),
'views_rss_yandex_realty_house_lot' => t('House with lot'),
'views_rss_yandex_realty_dacha' => t('Dacha'),
'views_rss_yandex_realty_land_lot' => t('Land lot'),
),
'render tag' => 'category',
);
$elements_general['general-url'] = array(
'title' => t('URL'),
'render tag' => 'url',
);
$elements_general['creation-date'] = array();
$elements_general['last-update-date'] = array();
$elements_general['expire-date'] = array();
$elements_general['payed-adv'] = array(
'settings form options' => _views_rss_yandex_restricted_options(),
);
$elements_general['manually-added'] = array(
'settings form options' => _views_rss_yandex_restricted_options(),
);
foreach ($elements_general as $key => &$element) {
$element['group'] = 'yandex_realty_general';
}
$elements += $elements_general;
$elements_loc['country'] = array();
$elements_loc['region'] = array();
$elements_loc['district'] = array();
$elements_loc['locality-name'] = array();
$elements_loc['sub-locality-name'] = array();
$elements_loc['non-admin-sub-locality'] = array();
$elements_loc['address'] = array();
$elements_loc['direction'] = array();
$elements_loc['distance'] = array();
$elements_loc['latitude'] = array();
$elements_loc['longitude'] = array();
$elements_loc['railway-station'] = array();
foreach ($elements_loc as $key => &$element) {
$element['group'] = 'yandex_realty_location';
$element['parents'][] = 'location';
}
$elements += $elements_loc;
$elements_loc_metro['metro-name'] = array(
'render tag' => 'name',
);
$elements_loc_metro['time-on-transport'] = array();
$elements_loc_metro['time-on-foot'] = array();
foreach ($elements_loc_metro as $key => &$element) {
$element['group'] = 'yandex_realty_location';
$element['parents'] = array(
'location',
'metro',
);
}
$elements += $elements_loc_metro;
$elements_sales['sales-name'] = array(
'title' => t('Sales agent name'),
'render tag' => 'name',
);
$elements_sales['sales-phone'] = array(
'title' => t('Phone'),
'render tag' => 'phone',
);
$elements_sales['sales-category'] = array(
'title' => t('Category'),
'settings form options' => array(
'views_rss_yandex_realty_owner' => t('Owner'),
'views_rss_yandex_realty_agency' => t('Agency'),
'views_rss_yandex_realty_developer' => t('Developer'),
),
'render tag' => 'category',
);
$elements_sales['organization'] = array();
$elements_sales['agency-id'] = array(
'title' => t('Agency ID'),
);
$elements_sales['sales-url'] = array(
'title' => t('URL'),
'render tag' => 'url',
);
$elements_sales['email'] = array();
$elements_sales['photo'] = array();
$elements_sales['partner'] = array();
foreach ($elements_sales as $key => &$element) {
$element['group'] = 'yandex_realty_sales_agent';
$element['parents'][] = 'sales-agent';
}
$elements += $elements_sales;
$elements_deal['price-value'] = array(
'title' => t('Value'),
'render tag' => 'value',
);
$elements_deal['currency'] = array(
'settings form options' => array(
'views_rss_yandex_realty_RUR' => t('RUR'),
'views_rss_yandex_realty_EUR' => t('EUR'),
'views_rss_yandex_realty_USD' => t('USD'),
'views_rss_yandex_realty_UAH' => t('UAH'),
'views_rss_yandex_realty_BYR' => t('BYR'),
'views_rss_yandex_realty_KZT' => t('KZT'),
),
);
$elements_deal['period'] = array(
'settings form options' => array(
'views_rss_yandex_realty_day' => t('Day'),
'views_rss_yandex_realty_month' => t('Month'),
),
);
$elements_deal['price-unit'] = array(
'title' => t('Unit'),
'settings form options' => array(
'views_rss_yandex_realty_sqm' => t('Square meter'),
'views_rss_yandex_realty_sotka' => t('Sotka'),
'views_rss_yandex_realty_hectare' => t('Hectare'),
),
'render tag' => 'unit',
);
$elements_deal['not-for-agents'] = array();
$elements_deal['hagle'] = array();
$elements_deal['mortgage'] = array();
$elements_deal['prepayment'] = array();
$elements_deal['rent-pledge'] = array();
$elements_deal['agent-fee'] = array();
$elements_deal['deal-status'] = array(
'settings form options' => array(
'views_rss_yandex_realty_direct_sale' => t('Direct sale'),
'views_rss_yandex_realty_trade-in' => t('Trade-in'),
'views_rss_yandex_realty_exchange' => t('Exchange'),
'views_rss_yandex_realty_214FZ' => t('Exchange'),
'views_rss_yandex_realty_assignation' => t('Assignation'),
),
);
$elements_deal['with-pets'] = array();
$elements_deal['with-children'] = array();
foreach ($elements_deal as $key => &$element) {
$element['group'] = 'yandex_realty_deal';
if (in_array($key, array(
'not-for-agents',
'haggle',
'mortgage',
'rent-pledge',
'with-pets',
'with-children',
))) {
$element['settings form options'] = _views_rss_yandex_restricted_options();
}
if (in_array($key, array(
'price-value',
'currency',
'period',
'price-unit',
))) {
$element['parents'][] = 'price';
}
}
$elements += $elements_deal;
$elements_object['image'] = array();
$elements_object['renovation'] = array(
'settings form options' => array(
'views_rss_yandex_realty_repair_euro' => t('Euro renovation'),
'views_rss_yandex_realty_repair_design' => t('Design'),
'views_rss_yandex_realty_repair_rough_finish' => t('Rough finish'),
'views_rss_yandex_realty_repair_need' => t('In need of repair'),
'views_rss_yandex_realty_repair_partial' => t('Partial renovation'),
'views_rss_yandex_realty_repair_finished' => t('Finished'),
'views_rss_yandex_realty_repair_good' => t('Good'),
),
);
$elements_object['quality'] = array(
'settings form options' => array(
'views_rss_yandex_realty_quality_good' => t('Good'),
'views_rss_yandex_realty_quality_excellent' => t('Excellent'),
'views_rss_yandex_realty_quality_normal' => t('Normal'),
'views_rss_yandex_realty_quality_bad' => t('Bad'),
),
);
$elements_object['description'] = array();
$elements_object['area'] = array(
'render tag' => 'value',
'parents' => array(
'area',
),
);
$elements_object['area-unit'] = array(
'settings form options' => array(
'views_rss_yandex_realty_sqm' => t('Square meter'),
'views_rss_yandex_realty_sotka' => t('Sotka'),
'views_rss_yandex_realty_hectare' => t('Hectare'),
),
'render tag' => 'unit',
'parents' => array(
'area',
),
);
$elements_object['living-space'] = array(
'render tag' => 'value',
'parents' => array(
'living-space',
),
);
$elements_object['living-space-unit'] = array(
'settings form options' => array(
'views_rss_yandex_realty_sqm' => t('Square meter'),
'views_rss_yandex_realty_sotka' => t('Sotka'),
'views_rss_yandex_realty_hectare' => t('Hectare'),
),
'render tag' => 'unit',
'parents' => array(
'living-space',
),
);
$elements_object['room-space'] = array(
'render tag' => 'value',
'parents' => array(
'room-space',
),
);
$elements_object['room-space-unit'] = array(
'settings form options' => array(
'views_rss_yandex_realty_sqm' => t('Square meter'),
'views_rss_yandex_realty_sotka' => t('Sotka'),
'views_rss_yandex_realty_hectare' => t('Hectare'),
),
'render tag' => 'unit',
'parents' => array(
'room-space',
),
);
$elements_object['kitchen-space'] = array(
'render tag' => 'value',
'parents' => array(
'kitchen-space',
),
);
$elements_object['kitchen-space-unit'] = array(
'settings form options' => array(
'views_rss_yandex_realty_sqm' => t('Square meter'),
'views_rss_yandex_realty_sotka' => t('Sotka'),
'views_rss_yandex_realty_hectare' => t('Hectare'),
),
'render tag' => 'unit',
'parents' => array(
'kitchen-space',
),
);
$elements_object['lot-area'] = array(
'render tag' => 'value',
'parents' => array(
'lot-area',
),
);
$elements_object['lot-area-unit'] = array(
'settings form options' => array(
'views_rss_yandex_realty_sqm' => t('Square meter'),
'views_rss_yandex_realty_sotka' => t('Sotka'),
'views_rss_yandex_realty_hectare' => t('Hectare'),
),
'render tag' => 'unit',
'parents' => array(
'lot-area',
),
);
$elements_object['lot-type'] = array(
'settings form options' => array(
'views_rss_yandex_realty_IZHS' => t('IZHS'),
'views_rss_yandex_realty_gardening' => t('Gardening'),
),
);
foreach ($elements_object as $key => &$element) {
$element['group'] = 'yandex_realty_object';
}
$elements += $elements_object;
$elements_living['new-flat'] = array();
$elements_living['rooms'] = array();
$elements_living['rooms-offered'] = array();
$elements_living['open-plan'] = array();
$elements_living['rooms-type'] = array(
'settings form options' => array(
'views_rss_yandex_realty_interconnecting' => t('Interconnecting'),
'views_rss_yandex_realty_separate' => t('Separate'),
),
);
$elements_living['phone'] = array();
$elements_living['internet'] = array();
$elements_living['room-furniture'] = array();
$elements_living['kitchen-furniture'] = array();
$elements_living['television'] = array();
$elements_living['washing-machine'] = array();
$elements_living['refrigerator'] = array();
$elements_living['balcony'] = array(
'settings form options' => array(
'views_rss_yandex_realty_balcony' => t('Balcony'),
'views_rss_yandex_realty_loggia' => t('Loggia'),
'views_rss_yandex_realty_2balcony' => t('2 Balcony'),
'views_rss_yandex_realty_2loggia' => t('2 Loggia'),
),
);
$elements_living['bathroom-unit'] = array(
'settings form options' => array(
'views_rss_yandex_realty_combined' => t('Combined'),
'views_rss_yandex_realty_separated' => t('Separated'),
'views_rss_yandex_realty_2' => 2,
),
);
$elements_living['floor-covering'] = array(
'settings form options' => array(
'views_rss_yandex_realty_parquet' => t('Parquet'),
'views_rss_yandex_realty_laminate' => t('Laminate'),
'views_rss_yandex_realty_carpeting' => t('Carpeting'),
'views_rss_yandex_realty_linoleum' => t('Linoleum'),
),
);
$elements_living['window-view'] = array(
'settings form options' => array(
'views_rss_yandex_realty_view_courtyard' => t('Courtyard view'),
'views_rss_yandex_realty_view_street' => t('Street view'),
),
);
$elements_living['floor'] = array();
foreach ($elements_living as $key => &$element) {
$element['group'] = 'yandex_realty_living';
if (in_array($key, array(
'new-flat',
'open-plan',
'phone',
'internet',
'room-furniture',
'kitchen-furniture',
'television',
'washing-machine',
'refrigerator',
))) {
$element['settings form options'] = _views_rss_yandex_restricted_options();
}
}
$elements += $elements_living;
$elements_building['floors-total'] = array();
$elements_building['building-name'] = array();
$elements_building['yandex-building-id'] = array();
$elements_building['building-type'] = array(
'settings form options' => array(
'views_rss_yandex_realty_brick' => t('Brick'),
'views_rss_yandex_realty_monolith' => t('Monolith'),
'views_rss_yandex_realty_panel' => t('Panel'),
),
);
$elements_building['building-series'] = array();
$elements_building['building-phase'] = array();
$elements_building['building-section'] = array();
$elements_building['building-state'] = array(
'settings form options' => array(
'views_rss_yandex_realty_unfinished' => t('Unfinished'),
'views_rss_yandex_realty_built' => t('Built'),
'views_rss_yandex_realty_hand_over' => t('Hand-over'),
),
);
$elements_building['built-year'] = array();
$elements_building['ready-quarter'] = array(
'settings form options' => array(
'views_rss_yandex_realty_1' => 1,
'views_rss_yandex_realty_2' => 2,
'views_rss_yandex_realty_3' => 3,
'views_rss_yandex_realty_4' => 4,
),
);
$elements_building['lift'] = array();
$elements_building['rubbish-chute'] = array();
$elements_building['is-elite'] = array();
$elements_building['parking'] = array();
$elements_building['alarm'] = array();
$elements_building['ceiling-height'] = array();
foreach ($elements_building as $key => &$element) {
$element['group'] = 'yandex_realty_building';
if (in_array($key, array(
'lift',
'rubbish-chute',
'is-elite',
'parking',
'alarm',
))) {
$element['settings form options'] = _views_rss_yandex_restricted_options();
}
}
$elements += $elements_building;
$elements_country['pmg'] = array();
$elements_country['toilet'] = array(
'settings form options' => array(
'views_rss_yandex_realty_within_doors' => t('Within doors'),
'views_rss_yandex_realty_outdoors' => t('Outdoors'),
),
);
$elements_country['shower'] = array(
'settings form options' => array(
'views_rss_yandex_realty_within_doors' => t('Within doors'),
'views_rss_yandex_realty_outdoors' => t('Outdoors'),
),
);
$elements_country['kitchen'] = array();
$elements_country['pool'] = array();
$elements_country['billiard'] = array();
$elements_country['sauna'] = array();
$elements_country['heating-supply'] = array();
$elements_country['water-supply'] = array();
$elements_country['sewerage-supply'] = array();
$elements_country['electricity-supply'] = array();
$elements_country['gas-supply'] = array();
foreach ($elements_country as $key => &$element) {
$element['group'] = 'yandex_realty_country_estate';
if (in_array($key, array(
'pmg',
'kitchen',
'pool',
'billiard',
'sauna',
'heating-supply',
'water-supply',
'sewerage-supply',
'electricity-supply',
'gas-supply',
))) {
$element['settings form options'] = _views_rss_yandex_restricted_options();
}
}
$elements += $elements_country;
foreach ($elements as $key => &$element) {
$element['help'] = 'https://yandex.ru/support/realty/rules/content-requirements.html';
if ($key != 'image') {
$element['preprocess functions'][] = 'views_rss_yandex_realty_preprocess_yandex_realty_offer_element';
}
}
return $elements;
}
function views_rss_yandex_realty_preprocess_yandex_realty_offer_element(&$variables) {
if (empty($variables['elements'][0]['value'])) {
return;
}
$variables['elements'][0]['value'] = _views_rss_yandex_realty_value_map($variables['elements'][0]['value']);
}
function _views_rss_yandex_realty_value_map($value) {
$map = array(
'views_rss_yandex_realty_true' => 'true',
'views_rss_yandex_realty_false' => 'false',
'views_rss_yandex_realty_sale' => 'продажа',
'views_rss_yandex_realty_rent' => 'аренда',
'views_rss_yandex_realty_living' => 'жилая',
'views_rss_yandex_realty_room' => 'комната',
'views_rss_yandex_realty_flat' => 'квартира',
'views_rss_yandex_realty_house' => 'дом',
'views_rss_yandex_realty_lot' => 'участок',
'views_rss_yandex_realty_townhouse' => 'таунхаус',
'views_rss_yandex_realty_house_part' => 'часть дома',
'views_rss_yandex_realty_house_lot' => 'дом с участком',
'views_rss_yandex_realty_dacha' => 'дача',
'views_rss_yandex_realty_land_lot' => 'земельный участок',
'views_rss_yandex_realty_owner' => 'owner',
'views_rss_yandex_realty_agency' => 'agency',
'views_rss_yandex_realty_developer' => 'developer',
'views_rss_yandex_realty_within_doors' => 'в доме',
'views_rss_yandex_realty_outdoors' => 'на улице',
'views_rss_yandex_realty_RUR' => 'RUR',
'views_rss_yandex_realty_EUR' => 'EUR',
'views_rss_yandex_realty_USD' => 'USD',
'views_rss_yandex_realty_UAH' => 'UAH',
'views_rss_yandex_realty_BYR' => 'BYR',
'views_rss_yandex_realty_KZT' => 'KZT',
'views_rss_yandex_realty_day' => 'day',
'views_rss_yandex_realty_month' => 'month',
'views_rss_yandex_realty_sqm' => 'кв. м',
'views_rss_yandex_realty_sotka' => 'сотка',
'views_rss_yandex_realty_hectare' => 'гектар',
'views_rss_yandex_realty_direct_sale' => 'прямая продажа',
'views_rss_yandex_realty_trade-in' => 'встречная продажа',
'views_rss_yandex_realty_exchange' => 'размен',
'views_rss_yandex_realty_214FZ' => '214 ФЗ',
'views_rss_yandex_realty_assignation' => 'переуступка',
'views_rss_yandex_realty_repair_euro' => 'евро',
'views_rss_yandex_realty_repair_design' => 'дизайнерский',
'views_rss_yandex_realty_repair_rough_finish' => 'черновая отделка',
'views_rss_yandex_realty_repair_need' => 'требует ремонта',
'views_rss_yandex_realty_repair_partial' => 'частичный ремонт',
'views_rss_yandex_realty_repair_finished' => 'с отделкой',
'views_rss_yandex_realty_repair_good' => 'хороший',
'views_rss_yandex_realty_quality_good' => 'хорошее',
'views_rss_yandex_realty_quality_excellent' => 'отличное',
'views_rss_yandex_realty_quality_normal' => 'нормальное',
'views_rss_yandex_realty_quality_bad' => 'плохое',
'views_rss_yandex_realty_IZHS' => 'ИЖС',
'views_rss_yandex_realty_gardening' => 'садоводство',
'views_rss_yandex_realty_interconnecting' => 'смежные',
'views_rss_yandex_realty_separate' => 'раздельные',
'views_rss_yandex_realty_balcony' => 'балкон',
'views_rss_yandex_realty_loggia' => 'лоджия',
'views_rss_yandex_realty_2balcony' => '2 балкона',
'views_rss_yandex_realty_2loggia' => '2 лоджии',
'views_rss_yandex_realty_combined' => 'совмещенный',
'views_rss_yandex_realty_separated' => 'раздельный',
'views_rss_yandex_realty_1' => 1,
'views_rss_yandex_realty_2' => 2,
'views_rss_yandex_realty_3' => 3,
'views_rss_yandex_realty_4' => 4,
'views_rss_yandex_realty_parquet' => 'паркет',
'views_rss_yandex_realty_laminate' => 'ламинат',
'views_rss_yandex_realty_carpeting' => 'ковролин',
'views_rss_yandex_realty_linoleum' => 'линолеум',
'views_rss_yandex_realty_view_courtyard' => 'во двор',
'views_rss_yandex_realty_view_street' => 'на улицу',
'views_rss_yandex_realty_brick' => 'кирпичный',
'views_rss_yandex_realty_monolith' => 'монолит',
'views_rss_yandex_realty_panel' => 'панельный',
'views_rss_yandex_realty_unfinished' => 'unfinished',
'views_rss_yandex_realty_built' => 'built',
'views_rss_yandex_realty_hand_over' => 'hand-over',
);
if (isset($map[$value])) {
return $map[$value];
}
return $value;
}
function _views_rss_yandex_restricted_options() {
return array(
'views_rss_yandex_realty_true' => t('True'),
'views_rss_yandex_realty_false' => t('False'),
);
}