rep__get_listing_events( $args = [] )

This function is responsible for retrieving listing upcoming events based on various parameters and returning the result as an array.

Namespace

REP_Malcolm

Parameters

$post_type

string

The custom post type of the log file to display.

Return

array

An array of associative arrays.

Source

File: \includes\rep-helper-functions.php

function rep__get_listing_events( $args = [] ){

    global $wpdb, $pagenow, $post;

    $post_type = REP__PREFIX.'_listing';
    $default_listing_id = ''; 

    if( ! isset( $args['listing_id'] ) ){
        if( is_admin() && isset($post) && is_object($post) ){
            $default_listing_id = lp__table_column_value( $post->ID, $post_type, 'listing_id' );
        } elseif( ! is_admin() && get_post_type() == $post_type ){
            $default_listing_id = lp__table_column_value( get_the_ID(), $post_type, 'listing_id' );
        }
    }

    $args = wp_parse_args(
        $args,
        array(
            'listing_id'        => $default_listing_id,
            'event_type'        => '',
            'id'                => '',
            'event__in'         => array(),
            'event_datetime'    => date("Y-m-d H:i:s"),
            'event_date'        => '',
            'order'             => '',
            'orderby'           => array( 'event_date' => 'ASC', 'event_time' => 'ASC' ),
        )
    );

    extract( $args );

    $post_table = $wpdb->prefix.'rep_listing_event';

    $selects = ["event_date","event_time","event_type","event_agent","event_venue","event_duration_minutes","event_end_time"];

    $wheres = ['%d']; 

    $param = [1];

    if( $listing_id ){
        $wheres[] = "listing_id = %d";
        $param[] = $listing_id;
    }

    if( $id ){
        $wheres[] = "id = %d";
        $param[] = $id;
    }

    if( $event__in && is_array( $event__in ) ){
        $in_ids = [];
        foreach($event__in as $in_id){
            $in_ids[] = "%d";
            $param[] = $in_id;
        }

        if( $in_ids ){
            $in_ids = implode(",", $in_ids);
            $wheres[] = "id IN ({$in_ids})";
        }
    } 

    if($event_type){
        $wheres[] = "event_type = %s";
        $param[] = $event_type;
    }

    if($event_datetime){
        $wheres[] = "CONCAT(event_date, ' ', event_time) > %s";
        $param[] = $event_datetime;
    }

    if( $event_date ){
        $wheres[] = "event_date = %s";
        $param[] = date("Y-m-d", strtotime( $event_date ) );
    }

    $orders = []; 

    if( $orderby ){
        if( is_array( $orderby ) ){
            foreach( $orderby as $key => $order ){
                $orders[] = "{$key} {$order}";
            }    
        } else {
            $orders[] = "{$orderby} {$order}";
        }
    }

    if(is_array($selects)) $selects = implode(", ",$selects);
    if($selects) $selects = "SELECT {$selects}";
    
    if(is_array($wheres)) $wheres = implode(" AND ", $wheres);
    if($wheres) $wheres = "WHERE {$wheres}";

    if(is_array($orders)) $orders = implode(", ", $orders);
    
    $sql = "{$selects} FROM {$post_table} {$wheres} ORDER BY {$orders}";

    $sql = $wpdb->prepare( $sql , $param);
    $data = $wpdb->get_results($sql , 'ARRAY_A'); 
    
    return $data;
}