API Docs for: 0.1.1
Show:

File: core/class_property_export.php

<?php
/**
 * This file holds the functionality that allows us to export our properties to an XML feed
 * @since 1.4.2
 */
/** First we need to add our appropriate actions */
add_action('wpp_settings_help_tab', array('wpi_property_export', 'help_tab'), 10, 4);
add_action('wp_ajax_wpp_export_properties', array('wpi_property_export', 'wpp_export_properties'));
add_action('wp_ajax_nopriv_wpp_export_properties', array('wpi_property_export', 'wpp_export_properties'));

/**
 * This is the actual object which peforms all of the functionality
 *
 * @todo: wpp_agents data should include agent data not just ID
 * @todo: Featured image is not being imported. Should be able to take from feed.
 *
 */
class wpi_property_export {

  /**
   * This function shows help stuff on the properties settings help tab
   */
  function help_tab() {
    $export_url = wpi_property_export::get_property_export_url();

    if (!$export_url) {
      return;
    }

    $export_url = $export_url . '&limit=10&format=json';
    ?>
    <div class="wpp_settings_block">
      <label for="wpp_export_url"><?php _e('Feed URL:', 'wpp'); ?></label>
      <input id="wpp_export_url" type="text" style="width: 70%" readonly="true" value="<?php echo esc_attr($export_url); ?>" />
      <a class="button" href="<?php echo $export_url; ?>"><?php _e('Open', 'wpp'); ?></a>
      <br /><br />
      <?php _e('You may append the export URL with the following arguments:', 'wpp'); ?>
      <ul style="margin: 15px 0 0 10px">
        <li><b>limit</b> - number</li>
        <li><b>per_page</b> - number</li>
        <li><b>starting_row</b> - number</li>
        <li><b>sort_order</b> - number</li>
        <li><b>sort_by</b> - number</li>
        <li><b>property_type</b> - string - <?php _e('Slug for the property type.', 'wpp'); ?></li>
        <li><b>format</b> - string - "xml" <?php _e('or', 'wpp'); ?> "json"</li>
      </ul>
    </li>
    </ul>
    </div> <?php
    }

    /**
     * This function generates your unique site's export feed
     * @returns string URL to site's export feed
     */
    function get_property_export_url() {
      if ($apikey = WPP_F::get_api_key()) {
        if (empty($apikey))
          return __("There has been an error retreiving your API key.", "wpp");
        // We have the API key, we need to build the url
        return admin_url('admin-ajax.php') . "?action=wpp_export_properties&api=" . $apikey;
      }
      //return __("There has been an error retreiving your API key.", "wpp");
      return false;
    }

    /**
     * This function takes all your properties and exports it as an XML feed
     *
     * @todo Improve efficiency of function, times out quickly for feeds of 500 properties. memory_limit and set_time_limit should be removed once efficiency is improved
     *
     */
    function wpp_export_properties() {
      global $wp_properties;

      ini_set('memory_limit', -1);

      $mtime = microtime();
      $mtime = explode(" ", $mtime);
      $mtime = $mtime[1] + $mtime[0];
      $starttime = $mtime;

      // Set a new path
      set_include_path(get_include_path() . PATH_SEPARATOR . WPP_Path . 'third-party/XML/');
      // Include our necessary libaries
      require_once 'Serializer.php';
      require_once 'Unserializer.php';

      $api_key = WPP_F::get_api_key();

      $taxonomies = $wp_properties['taxonomies'];

      // If the API key isn't valid, we quit
      if ($_REQUEST['api'] != $api_key) {
        die(__('Invalid API key.', 'wpp'));
      }

      if (isset($_REQUEST['limit'])) {
        $per_page = $_REQUEST['limit'];
        $starting_row = 0;
      }

      if (isset($_REQUEST['per_page'])) {
        $per_page = $_REQUEST['per_page'];
      }

      if (isset($_REQUEST['starting_row'])) {
        $starting_row = $_REQUEST['starting_row'];
      }

      if (isset($_REQUEST['property_type'])) {
        $property_type = $_REQUEST['property_type'];
      } else {
        $property_type = 'all';
      }

      if (strtolower($_REQUEST['format']) == 'xml') {
        $xml_format = true;
      } else {
        $xml_format = false;
      }

      $wpp_query['query']['property_type'] = 'listing';

      $wpp_query['query']['pagi'] = $starting_row . '--' . $per_page;
      $wpp_query['query']['sort_by'] = ($_REQUEST['sort_by'] ? $_REQUEST['sort_by'] : 'post_date' );
      $wpp_query['query']['sort_order'] = ($_REQUEST['sort_order'] ? $_REQUEST['sort_order'] : 'ASC' );
      $wpp_query['query']['property_type'] = $property_type;

      $wpp_query = WPP_F::get_properties($wpp_query['query'], true);

      $results = $wpp_query['results'];

      if (count($results) == 0) {
        die(__('No published properties.', 'wpp'));
      }

      if ($xml_format) {
        header('Content-type: text/xml');
        header('Content-Disposition: inline; filename="wpp_xml_data.xml"');
      } else {
        header('Content-type: application/json');
        header('Content-Disposition: inline; filename="wpp_xml_data.json"');
      }

      header("Cache-Control: no-cache");
      header("Pragma: no-cache");

      foreach ($results as $count => $id) {

        //** Reserve time on every iteration. */
        set_time_limit(0);

        $property = WPP_F::get_property($id, "return_object=true&load_parent=false");

        if ($property->post_parent && !$property->parent_gpid) {
          $property->parent_gpid = WPP_F::maybe_set_gpid($property->post_parent);
        }

        // Unset the children, as we'll get to those
        unset(
                $property->wpp_agents, $property->comment_count, $property->post_modified_gmt, $property->comment_status, $property->post_password, $property->children, $property->guid, $property->filter, $property->post_author, $property->permalink, $property->ping_status, $property->post_modified, $property->post_mime_type
        );

        // Set unique site ID
        $property->wpp_unique_id = md5($api_key . $property->ID);

        //** Get taxonomies */
        if ($taxonomies) {
          foreach ($taxonomies as $taxonomy_slug => $taxonomy_data) {
            if ($these_terms = wp_get_object_terms($property->ID, $taxonomy_slug, array('fields' => 'names'))) {
              $property->taxonomies->{$taxonomy_slug} = $these_terms;
            }
          }
        }

        $fixed_property = new stdClass();

        foreach ($property as $meta_key => $meta_value) {

          if (is_array($meta_value) || is_object($meta_value)) {
            $fixed_property->$meta_key = $meta_value;
            continue;
          }

          //** Maybe Unserialize */
          $meta_value = maybe_unserialize($meta_value);

          //$meta_value = htmlentities($meta_value);
          $fixed_property->$meta_key = $meta_value;
          //$fixed_property->$meta_key = '<![CDATA[' .  ($meta_value) . ']]>';
        }

        $properties[$id] = $fixed_property;
      }

      $result = json_encode($properties);

      if ($xml_format) {
        $result = WPP_F::json_to_xml($result);
      }


      die($result);
    }

  }