id );
if ( !$hide_empty || $listings_count > 0 ) {
if ( $category->parent == 0 ) {
$hierarchy['root'][] = $category;
} else {
$hierarchy[ $category->parent ][] = $category;
}
}
}
return $hierarchy;
}
/**
* @since 3.4
*/
function awpcp_organize_categories_by_id( &$categories ) {
$organized = array();
foreach ( $categories as $category ) {
$organized[ $category->id ] = $category;
}
return $organized;
}
/**
* @param $categories Array of categories index by Category ID.
* @since 3.4
*/
function awpcp_get_category_hierarchy( $category_id, &$categories ) {
$category_parents = array();
while ( $category_id > 0 && isset( $categories[ $category_id ] ) ) {
$category_parents[] = $categories[ $category_id ];
$category_id = $categories[ $category_id ]->parent;
}
return $category_parents;
}
/**
* @since 3.4
*/
function awpcp_render_categories_dropdown_options( &$categories, &$hierarchy, $selected_category ) {
$output = '';
foreach ( $categories as $category ) {
$category_name = stripslashes( stripslashes( $category->name ) );
if( $category->id == $selected_category ) {
$item = '';
$item = '';
} else {
$item = '';
$item = '';
}
$output .= awpcp_render_categories_dropdown_option( $category, $selected_category );
if ( isset( $hierarchy[ $category->id ] ) ) {
$output .= awpcp_render_categories_dropdown_options( $hierarchy[ $category->id ], $hierarchy, $selected_category );
}
}
return $output;
}
/**
* @since 3.4
*/
function awpcp_render_categories_dropdown_option( $category, $selected_category ) {
if ( $selected_category == $category->id ) {
$selected_attribute = 'selected="selected"';
} else {
$selected_attribute = '';
}
if ( $category->parent == 0 ) {
$class_attribute = 'class="dropdownparentcategory"';
$category_name = esc_html( $category->name );
} else {
$class_attribute = '';
$category_name = sprintf('- %s', esc_html( $category->name ) );
}
return sprintf(
'',
$class_attribute,
$selected_attribute,
esc_attr( $category->id ),
$category_name
);
}
/**
* @since 3.4
*/
function awpcp_get_count_of_listings_in_categories() {
static $listings_count;
if ( is_null( $listings_count ) ) {
$listings_count = awpcp_count_listings_in_categories();
}
return $listings_count;
}
/**
* @since 3.4
*/
function awpcp_count_listings_in_categories() {
global $wpdb;
// never allow Unpaid, Unverified or Disabled Ads
$conditions[] = "payment_status != 'Unpaid'";
$conditions[] = 'verified = 1';
$conditions[] = 'disabled = 0';
if( ( get_awpcp_option( 'enable-ads-pending-payment' ) == 0 ) && ( get_awpcp_option( 'freepay' ) == 1 ) ) {
$conditions[] = "payment_status != 'Pending'";
}
// TODO: ideally there would be a function to get all visible Ads,
// and modules, like Regions, would use hooks to include their own
// conditions.
if ( function_exists( 'awpcp_region_control_module' ) && function_exists( 'awpcp_regions_api' ) ) {
if ( $active_region = awpcp_region_control_module()->get_active_region() ) {
$conditions[] = awpcp_regions_api()->sql_where( $active_region->region_id );
}
}
// TODO: at some point we should start using the Category model.
$query = 'SELECT ad_category_parent_id AS parent_category_id, ad_category_id AS category_id, count(*) AS count ';
$query.= 'FROM ' . AWPCP_TABLE_ADS;
$query = sprintf( '%s WHERE %s', $query, implode( ' AND ', $conditions ) );
$query.= ' GROUP BY ad_category_id, ad_category_parent_id';
$query.= ' ORDER BY ad_category_parent_id, ad_category_id';
$listings_count = array();
foreach ( $wpdb->get_results( $query ) as $row ) {
if ( $row->parent_category_id > 0 ) {
if ( isset( $listings_count[ $row->parent_category_id ] ) ) {
$listings_count[ $row->parent_category_id ] = $listings_count[ $row->parent_category_id ] + $row->count;
} else {
$listings_count[ $row->parent_category_id ] = $row->count;
}
}
if ( isset( $listings_count[ $row->category_id ] ) ) {
$listings_count[ $row->category_id ] = $listings_count[ $row->category_id ] + $row->count;
} else {
$listings_count[ $row->category_id ] = $row->count;
}
}
return $listings_count;
}
function total_ads_in_cat( $category_id ) {
$listings_count = awpcp_get_count_of_listings_in_categories();
return isset( $listings_count[ $category_id ] ) ? $listings_count[ $category_id ] : 0;
}