File "posts-grid.php"
Full path: /home/webide/saman-clinic.ir/wp-content/plugins/rss-autopilot/classes/posts-grid.php
File size: 4.98 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace RSSAutopilot;
/**
* Class PostsGrid
* @package RSSAutopilot
*/
class PostsGrid {
private $foundItems;
private $postType;
private $totalPages;
/**
* Init PostsGrid with postType and optional filters
* @param $postType
* @param array $filters
*/
public function __construct($postType, $filters=array())
{
$this->postType = $postType;
$this->find($filters);
}
/**
* Get items list for grid
* @param int $itemPerPage
* @return array
*/
public function getList($itemPerPage = 10)
{
$args = array(
'posts_per_page' => $itemPerPage,
'orderby' => 'date',
'order' => 'DESC',
'offset' => ( $this->getPageNum() - 1 ) * $itemPerPage
);
if ( ! empty( $_REQUEST['s'] ) )
$args['s'] = $_REQUEST['s'];
if ( ! empty( $_REQUEST['orderby'] ) ) {
if ( 'title' == $_REQUEST['orderby'] )
$args['orderby'] = 'title';
elseif ( 'author' == $_REQUEST['orderby'] )
$args['orderby'] = 'author';
elseif ( 'date' == $_REQUEST['orderby'] )
$args['orderby'] = 'date';
}
if ( ! empty( $_REQUEST['order'] ) ) {
if ( 'asc' == strtolower( $_REQUEST['order'] ) )
$args['order'] = 'ASC';
elseif ( 'desc' == strtolower( $_REQUEST['order'] ) )
$args['order'] = 'DESC';
}
$this->items = $this->find( $args );
$totalItems = $this->count();
$totalPages = ceil( $totalItems / $itemPerPage );
$this->totalPages = $totalPages;
return array(
'list' => $this->items,
'pagination' => array(
'totalItems' => $totalItems,
'totalPages' => $totalPages,
'perPage' => $itemPerPage,
'currentPage' => $this->getPageNum()
)
);
}
/**
* Get current page number
* @return mixed
*/
public function getPageNum() {
$pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0;
return max( 1, $pagenum );
}
/**
* Filter grid
* @param array $args
* @return array
*/
public function find( $args = array() ) {
$defaults = array(
'post_status' => 'any',
'posts_per_page' => -1,
'offset' => 0,
'orderby' => 'ID',
'order' => 'ASC' );
$args = wp_parse_args( $args, $defaults );
$args['post_type'] = $this->postType;
$q = new \WP_Query();
$posts = $q->query( $args );
$this->foundItems = $q->found_posts;
return $posts;
}
/**
* Get number of found items
* @return mixed
*/
public function count() {
return $this->foundItems;
}
/**
* Format date
* @param $date
* @return string
*/
public function formatDateHelper( $date ) {
$t_time = mysql2date( __( 'Y/m/d g:i:s A', 'rss-autopilot' ), $date, true );
$m_time = $date;
$time = mysql2date( 'G', $date ) - get_option( 'gmt_offset' ) * 3600;
$time_diff = time() - $time;
if ( $time_diff > 0 && $time_diff < 24*60*60 )
$h_time = sprintf( __( '%s ago', 'rss-autopilot' ), human_time_diff( $time ) );
else
$h_time = mysql2date( __( 'Y/m/d', 'rss-autopilot' ), $m_time );
return '<abbr title="' . $t_time . '">' . $h_time . '</abbr>';
}
/**
* Format time
* @param $date
* @return string
*/
public function formatTimeHelper($date) {
return sprintf( __( '%s ago', 'rss-autopilot' ), human_time_diff( $date ) );
}
/**
* Get url for sorting
* @param $column
* @param $bootstrap
* @return mixed
*/
public function orderByHelper( $column, $bootstrap ) {
$orderBy = $column;
$order = 'ASC';
if (!empty( $_REQUEST['orderby'])) {
// If grid is sorted by this column
if ( $column == $_REQUEST['orderby'] ) {
if (!empty( $_REQUEST['order'] ) ) {
if ('asc' == strtolower($_REQUEST['order'])) {
$order = 'DESC';
} else {
$order = 'ASC';
}
}
}
}
return $bootstrap->menuUrl('rssap-'.$bootstrap->currentPage, $bootstrap->currentAction, array('orderby'=>$orderBy, 'order'=>$order));
}
/**
* Get current sort state
* @param $column
* @return string
*/
public function orderByStateHelper($column) {
$str = 'sortable asc';
if (!empty( $_REQUEST['orderby']) && $column == $_REQUEST['orderby']) {
if ('asc' == strtolower($_REQUEST['order'])) {
$str = 'sorted desc';
} else {
$str = 'sorted asc';
}
}
return $str;
}
}
?>