<?php
/**
* Invoice List Table class.
*
* @package WP-Invoice
* @since 3.0
* @access private
*/
require_once(WPP_Path . 'core/class_list_table.php');
class WPP_Object_List_Table extends WPP_List_Table {
function __construct($args = '') {
$args = wp_parse_args( $args, array(
'plural' => '',
'iColumns' => 3,
'per_page' => 20,
'iDisplayStart' => 0,
'ajax_action' => 'wpp_ajax_list_table',
'current_screen' => '',
'table_scope' => 'wpp_overview',
'singular' => '',
'ajax' => false
) );
parent::__construct($args);
}
/**
* Get a list of sortable columns.
*
* @since 3.1.0
* @access protected
*
* @return array
*/
function get_sortable_columns() {
global $wp_properties;
return array();
}
/**
* Set Bulk Actions
*
* @since 3.1.0
*
* @return array
*/
public function get_bulk_actions() {
$actions = array();
if(current_user_can('delete_wpp_property')) {
$actions['untrash'] = __( 'Restore' );
$actions['delete'] = __( 'Delete' );
}
$actions = apply_filters( 'wpp::all_properties::bulk_actions', $actions );
return $actions;
}
/**
* Generate HTML for a single row on the users.php admin panel.
*
*/
function single_row( $ID ) {
global $post, $wp_properties;
$ID = (int) $ID;
$post = WPP_F::get_property($ID);
$post = (object) $post;
$title = _draft_or_post_title($post->ID);
$post_type_object = get_post_type_object( $post->post_type );
$can_edit_post = current_user_can( $post_type_object->cap->edit_post);
$can_edit_post = apply_filters('wpp_list_table_can_edit_post', $can_edit_post);
$can_delete_post = current_user_can( $post_type_object->cap->delete_post, $post->ID );
$can_delete_post = apply_filters('wpp_list_table_can_delete_post', $can_delete_post);
$result = "<tr id='object-{$ID}' class='wpp_parent_element'>";
list( $columns, $hidden ) = $this->get_column_info();
foreach ( $columns as $column => $column_display_name ) {
$class = "class=\"$column column-$column\"";
$style = '';
if ( in_array( $column, $hidden ) ) {
$style = ' style="display:none;"';
}
$attributes = "$class$style";
$result .= "<td {$attributes}>";
$r = "";
switch($column) {
//** Adds ability to customize any column we want. peshkov@UD */
case ( apply_filters( "wpp::single_row::{$column}", false, $post ) ):
$r .= apply_filters( "wpp::single_row::{$column}::render", '', $post );
break;
case 'cb':
if ( $can_edit_post ) {
$r .= '<input type="checkbox" name="post[]" value="'. get_the_ID() . '"/>';
} else {
$r .= ' ';
}
break;
case 'title':
$attributes = 'class="post-title page-title column-title"' . $style;
if ( $can_edit_post && $post->post_status != 'trash' && $post->post_status != 'archived' ) {
$r .= '<a class="row-title" href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( sprintf( __( 'Edit “%s”' ), $title ) ) . '">' . $title . '</a>';
} else {
$r .= $title;
}
$r .= (isset( $parent_name ) ? ' | ' . $post_type_object->labels->parent_item_colon . ' ' . esc_html( $parent_name ) : '');
$actions = array();
if ( $can_edit_post && 'trash' != $post->post_status && 'archived' != $post->post_status ) {
$actions['edit'] = '<a href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( __( 'Edit this item' ) ) . '">' . __( 'Edit' ) . '</a>';
}
if ( $can_delete_post ) {
if ( 'trash' == $post->post_status ) {
global $wp_version;
$_wpnonce = ( version_compare( $wp_version, '3.5', '>=' ) ? 'untrash-post_' : 'untrash-' . $post->post_type . '_' ) . $post->ID ;
$actions['untrash'] = "<a title='" . esc_attr( __( 'Restore this item from the Trash' ) ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&action=untrash', $post->ID ) ), $_wpnonce ) . "'>" . __( 'Restore' ) . "</a>";
} elseif ( EMPTY_TRASH_DAYS && 'pending' != $post->post_status ) {
$actions['trash'] = "<a class='submitdelete' title='" . esc_attr( __( 'Move this item to the Trash' ) ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>";
}
if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS ) {
$actions['delete'] = "<a class='submitdelete permanently' title='" . esc_attr( __( 'Delete this item permanently' ) ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>";
}
}
if ( 'trash' != $post->post_status && 'archived' != $post->post_status ) {
$actions['view'] = '<a target="_blank" href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View “%s”' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>';
}
$actions = apply_filters( is_post_type_hierarchical( $post->post_type ) ? 'page_row_actions' : 'post_row_actions', $actions, $post );
$r .= $this->row_actions( $actions );
break;
case 'property_type':
$property_type = $post->property_type;
$r .= $wp_properties['property_types'][$property_type];
break;
case 'overview':
$overview_stats = $wp_properties['property_stats'];
unset($overview_stats['phone_number']);
$stat_count = 0;
$hidden_count = 0;
foreach($overview_stats as $stat => $label) {
$values = $post->$stat;
if(!is_array($values)) {
$values = array($values);
}
foreach($values as $value) {
$print_values = array();
if(empty($value) || strlen($value) > 15) {
continue;
}
$print_values[] = apply_filters("wpp_stat_filter_{$stat}", $value);
$print_values = implode('<br />', $print_values);
$stat_count++;
if($stat_count > 5) {
$stat_row_class = 'hidden wpp_overview_hidden_stats';
$hidden_count++;
}
$display_stats[$stat] = '<li class="'.$stat_row_class.'"><span class="wpp_label">' . $label . ':</span> <span class="wpp_value">' . $print_values . '</span></li>';
}
}
if(is_array($display_stats) && count($display_stats) > 0) {
if($stat_count > 5) {
$display_stats['toggle_advanced'] = '<li class="wpp_show_advanced" advanced_option_class="wpp_overview_hidden_stats">' . sprintf(__('Toggle %1s more.', 'wpp'), $hidden_count) . '</li>';
}
$r .= '<ul class="wpp_overview_column_stats wpp_something_advanced_wrapper">' . implode('', $display_stats) . '</ul>';
}
break;
case 'features':
$features = get_the_terms($post->ID, "property_feature");
$features_html = array();
if($features && !is_wp_error($features)) {
foreach ($features as $feature) {
$feature_link = get_term_link($feature, "property_feature");
//** If for some reason get_term_link() returns a WP error object, we avoid using it in URL */
if(is_wp_error($feature_link)) {
continue;
}
array_push($features_html, '<a href="' . $feature_link . '">' . $feature->name . '</a>');
}
$r .= implode($features_html, ", ");
}
break;
case 'thumbnail':
if($post->featured_image) {
$overview_thumb_type = $wp_properties['configuration']['admin_ui']['overview_table_thumbnail_size'];
if(empty($overview_thumb_type)) {
$overview_thumb_type = 'thumbnail';
}
$image_thumb_obj = wpp_get_image_link($post->featured_image, $overview_thumb_type, array('return'=>'array'));
}
if(!empty($image_thumb_obj)) {
$r .= '<a href="'.$post->images['large'].'" class="fancybox" rel="overview_group" title="'.$post->post_title.'"><img src="'.$image_thumb_obj['url'].'" width="'.$image_thumb_obj['width'].'" height="'.$image_thumb_obj['height'].'" /></a>';
} else {
$r .= " - ";
}
break;
case 'featured':
if(current_user_can('manage_options')) {
if($post->featured)
$r .= "<input type='button' id='wpp_feature_{$post->ID}' class='wpp_featured_toggle wpp_is_featured' nonce='".wp_create_nonce('wpp_make_featured_' . $post->ID)."' value='".__('Featured','wpp')."' />";
else
$r .= "<input type='button' id='wpp_feature_{$post->ID}' class='wpp_featured_toggle' nonce='".wp_create_nonce('wpp_make_featured_' . $post->ID)."' value='".__('Add to Featured','wpp')."' />";
} else {
if($post->featured)
$r .= __('Featured','wpp');
else
$r .= "";
}
break;
default:
$print_values = array();
$value = $post->{$column};
if(!is_array($value)) {
$value = array($value);
}
foreach($value as $single_value) {
$print_values[] = apply_filters("wpp_attribute_filter", $single_value, $column);
}
$print_values = implode('<br />', $print_values);
$r .= $print_values;
break;
}
//** Need to insert some sort of space in there to avoid DataTable error that occures when "null" is returned */
$ajax_cells[] = $r;
$result .= $r;
$result .= "</td>";
}
$result .= '</tr>';
if($this->_args['ajax']) {
return $ajax_cells;
}
return $result;
}
}