You are here

views_rss_yandex_realty.module in Views RSS: Yandex Elements 7

File

views_rss_yandex_realty/views_rss_yandex_realty.module
View source
<?php

/**
 * @file
 * Main file for the Views RSS: Yandex.Realty module.
 */
include_once 'views_rss_yandex_realty.field.inc';

/**
 * Implements hook_views_api().
 */
function views_rss_yandex_realty_views_api() {
  return array(
    'api' => 3,
    'path' => drupal_get_path('module', 'views_rss_yandex_realty') . '/views',
  );
}

/**
 * Implements hook_views_rss_element_groups().
 */
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;
}

/**
 * Implements hook_views_rrs_offer_elements().
 */
function views_rss_yandex_realty_views_rss_yandex_realty_offer_elements() {
  $elements['internal-id'] = array();

  // General information.
  $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;

  // Location group.
  $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;

  // Metro elements inside location group.
  $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;

  // Sales-agent group.
  $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;

  // Deal conditions group.
  $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;

  // Object information.
  $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;

  // Living apartment description.
  $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;

  // Building description.
  $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;

  // Country estate description.
  $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;

  // Add default help and preprocess function.
  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;
}

/**
 * Preprocess function for Yandex.Realty offer elements.
 */
function views_rss_yandex_realty_preprocess_yandex_realty_offer_element(&$variables) {

  // No value = no preprocessing.
  if (empty($variables['elements'][0]['value'])) {
    return;
  }
  $variables['elements'][0]['value'] = _views_rss_yandex_realty_value_map($variables['elements'][0]['value']);
}

/**
 * Helper function to map hard-coded values.
 */
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;
}

/**
 * Helper function returning hardcoded lists of options.
 */
function _views_rss_yandex_restricted_options() {
  return array(
    'views_rss_yandex_realty_true' => t('True'),
    'views_rss_yandex_realty_false' => t('False'),
  );
}

Functions

Namesort descending Description
views_rss_yandex_realty_preprocess_yandex_realty_offer_element Preprocess function for Yandex.Realty offer elements.
views_rss_yandex_realty_views_api Implements hook_views_api().
views_rss_yandex_realty_views_rss_element_groups Implements hook_views_rss_element_groups().
views_rss_yandex_realty_views_rss_yandex_realty_offer_elements Implements hook_views_rrs_offer_elements().
_views_rss_yandex_realty_value_map Helper function to map hard-coded values.
_views_rss_yandex_restricted_options Helper function returning hardcoded lists of options.