243 lines
6.3 KiB
PHP
Executable File
243 lines
6.3 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* $Desc$
|
|
*
|
|
* @version $Id$
|
|
* @package $package$
|
|
* @author Opal Team <info@wpopal.com >
|
|
* @copyright Copyright (C) 2019 wpopal.com. All Rights Reserved.
|
|
* @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html
|
|
*
|
|
* @website http://www.wpopal.com
|
|
* @support http://www.wpopal.com/support/forum.html
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
if ( !defined( 'ABSPATH' ) ) exit;
|
|
|
|
class Opalestate_Agency_Query extends OpalEstate_Abstract_Query {
|
|
|
|
public $count = 0;
|
|
|
|
/**
|
|
* Default query arguments.
|
|
*
|
|
* Not all of these are valid arguments that can be passed to WP_Query. The ones that are not, are modified before
|
|
* the query is run to convert them to the proper syntax.
|
|
*
|
|
* @since 2.5.0
|
|
* @access public
|
|
*
|
|
* @param $args array The array of arguments that can be passed in and used for setting up this form query.
|
|
*/
|
|
public function __construct( $args = array() ) {
|
|
|
|
$defaults = array(
|
|
'output' => 'collection',
|
|
'post_type' => array( 'opalestate_agency' ),
|
|
'number' => 20,
|
|
'offset' => 0,
|
|
'paged' => 1,
|
|
'orderby' => 'id',
|
|
'order' => 'DESC'
|
|
);
|
|
|
|
$args['update_post_meta_cache'] = false;
|
|
|
|
$this->args = $this->_args = wp_parse_args( $args, $defaults );
|
|
}
|
|
|
|
/**
|
|
* Render Sidebar
|
|
*
|
|
* Display Sidebar on left side and next is main content
|
|
*
|
|
* @since 1.0
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_query_object() {
|
|
/* @var WP_Query $query */
|
|
$query = new WP_Query( $this->args );
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Render Sidebar
|
|
*
|
|
* Display Sidebar on left side and next is main content
|
|
*
|
|
* @since 1.0
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_list () {
|
|
|
|
$output = array(
|
|
'founds' => 0 ,
|
|
'collection' => []
|
|
);
|
|
|
|
$query = $this->get_query_object();
|
|
if ( $query ) {
|
|
$i = 0;
|
|
$collection = array();
|
|
if( $query->have_posts() ) {
|
|
while( $query->have_posts() ){ $query->the_post(); global $post;
|
|
$collection[] = new OpalEstate_Agency( $post->ID );
|
|
}
|
|
}
|
|
wp_reset_postdata();
|
|
$output['collection'] = $collection;
|
|
$output['found'] = $query->found_posts;
|
|
}
|
|
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Render Sidebar
|
|
*
|
|
* Display Sidebar on left side and next is main content
|
|
*
|
|
* @since 1.0
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_api_list () {
|
|
$output = array(
|
|
'founds' => 0 ,
|
|
'collection' => []
|
|
);
|
|
|
|
$query = $this->get_query_object();
|
|
if ( $query ) {
|
|
$i = 0;
|
|
$collection = array();
|
|
if( $query->have_posts() ) {
|
|
while( $query->have_posts() ){ $query->the_post(); global $post;
|
|
$collection[] = $this->get_agency_data( $post );
|
|
}
|
|
}
|
|
wp_reset_postdata();
|
|
$output['collection'] = $collection;
|
|
$output['found'] = $query->found_posts;
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Opalestaten a opalestate_property post object, generate the data for the API output
|
|
*
|
|
* @since 1.1
|
|
*
|
|
* @param object $property_info The Download Post Object
|
|
*
|
|
* @return array Array of post data to return back in the API
|
|
*/
|
|
|
|
public function get_agency_data( $agency_info ){
|
|
|
|
$agency = new OpalEstate_Agency( $agency_info->ID );
|
|
|
|
$ouput = array();
|
|
|
|
$ouput['info']['id'] = $agency_info->ID;
|
|
$ouput['info']['slug'] = $agency_info->post_name;
|
|
$ouput['info']['title'] = $agency_info->post_title;
|
|
$ouput['info']['status'] = $agency_info->post_status;
|
|
$ouput['info']['link'] = html_entity_decode( $agency_info->guid );
|
|
$ouput['info']['content'] = $agency_info->post_content;
|
|
$ouput['info']['thumbnail'] = wp_get_attachment_url( get_post_thumbnail_id( $agency_info->ID ) );
|
|
|
|
$agency = new OpalEstate_Agency( $agency_info->ID );
|
|
|
|
$ouput['info']['featured'] = (int)$agency->is_featured();
|
|
$ouput['info']['trusted'] = $agency->get_meta( 'trusted' );
|
|
$ouput['info']['avatar'] = $agency->get_meta( 'avatar' );
|
|
$ouput['info']['web'] = $agency->get_meta( 'web' );
|
|
$ouput['info']['phone'] = $agency->get_meta( 'phone' );
|
|
$ouput['info']['mobile'] = $agency->get_meta( 'mobile' );
|
|
$ouput['info']['fax'] = $agency->get_meta( 'fax' );
|
|
$ouput['info']['email'] = $agency->get_meta( 'email' );
|
|
$ouput['info']['address'] = $agency->get_meta( 'address' );
|
|
$ouput['info']['map'] = $agency->get_meta( 'map' );
|
|
|
|
$terms = wp_get_post_terms( $agency_info->ID, 'opalestate_agency_location' );
|
|
$ouput['info']['location'] = $terms && !is_wp_error($terms) ? $terms : array();
|
|
|
|
$ouput['socials'] = $agency->get_socials();
|
|
|
|
$ouput['category'] = $agency->get_category_tax();
|
|
|
|
return apply_filters( 'opalestate_api_agency', $ouput );
|
|
}
|
|
|
|
/**
|
|
* Get search query base on user request to filter collection of Agents
|
|
*/
|
|
public static function get_search_agencies_query( $args = [] ) {
|
|
$s = isset( $_GET['search_text'] ) ? sanitize_text_field( $_GET['search_text'] ) : null;
|
|
|
|
$paged = ( get_query_var( 'paged' ) == 0 ) ? 1 : get_query_var( 'paged' );
|
|
$default = [
|
|
'post_type' => 'opalestate_agency',
|
|
'posts_per_page' => apply_filters( 'opalestate_agency_per_page', 12 ),
|
|
'paged' => $paged,
|
|
];
|
|
$args = array_merge( $default, $args );
|
|
|
|
$tax_query = [];
|
|
|
|
|
|
if ( isset( $_GET['location'] ) && $_GET['location'] != -1 ) {
|
|
$tax_query[] =
|
|
[
|
|
'taxonomy' => 'opalestate_location',
|
|
'field' => 'slug',
|
|
'terms' => sanitize_text_field( $_GET['location'] ),
|
|
];
|
|
}
|
|
|
|
if ( isset( $_GET['types'] ) && $_GET['types'] != -1 ) {
|
|
$tax_query[] =
|
|
[
|
|
'taxonomy' => 'opalestate_types',
|
|
'field' => 'slug',
|
|
'terms' => sanitize_text_field( $_GET['types'] ),
|
|
];
|
|
}
|
|
|
|
if ( $tax_query ) {
|
|
$args['tax_query'] = [ 'relation' => 'AND' ];
|
|
$args['tax_query'] = array_merge( $args['tax_query'], $tax_query );
|
|
}
|
|
|
|
$args['meta_query'] = [ 'relation' => 'AND' ];
|
|
|
|
|
|
return new WP_Query( $args );
|
|
}
|
|
|
|
|
|
/**
|
|
* Get Query Object to display list of agents
|
|
*/
|
|
public static function get_agencies( $args = [], $featured = false ) {
|
|
$default = [
|
|
'post_type' => 'opalestate_agency',
|
|
'posts_per_page' => 10,
|
|
];
|
|
$args = array_merge( $default, $args );
|
|
if ( $featured ) {
|
|
$args['meta_key'] = OPALESTATE_AGENCY_PREFIX . 'featured';
|
|
$args['meta_value'] = 1;
|
|
$args['meta_compare'] = '=';
|
|
}
|
|
|
|
return new WP_Query( $args );
|
|
}
|
|
}
|