| Current File : /home/tekstore/public_html/wp-content/plugins/dokan-lite/includes/REST/AdminDashboardController.php |
<?php
namespace WeDevs\Dokan\REST;
use WeDevs\Dokan\Admin\Status\Status;
use WP_Error;
use WP_REST_Response;
use WP_REST_Server;
use WeDevs\Dokan\Abstracts\DokanRESTAdminController;
/**
* Admin Dashboard
*
* @since 2.8.0
*
* @package dokan
*/
class AdminDashboardController extends DokanRESTAdminController {
/**
* Route base.
*
* @var string
*/
protected $base = 'dashboard';
/**
* Register all routes releated with stores
*
* @return void
*/
public function register_routes() {
register_rest_route(
$this->namespace, '/' . $this->base . '/feed', array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( $this, 'get_feeds' ),
'permission_callback' => array( $this, 'check_permission' ),
'args' => array(
'items' => array(
'type' => 'integer',
'description' => __( 'Number of feed item', 'dokan-lite' ),
'required' => false,
'default' => 5,
),
'show_summary' => array(
'type' => 'boolean',
'description' => __( 'Flag for showing summary', 'dokan-lite' ),
'required' => false,
'default' => false,
),
'show_author' => array(
'type' => 'boolean',
'description' => __( 'Flag for showing author', 'dokan-lite' ),
'required' => false,
'default' => false,
),
'show_date' => array(
'type' => 'boolean',
'description' => __( 'Flag for showing date', 'dokan-lite' ),
'required' => false,
'default' => true,
),
),
),
)
);
register_rest_route(
$this->namespace, '/' . $this->base . '/status', array(
array(
'methods' => WP_REST_Server::READABLE,
'callback' => array( $this, 'get_status' ),
'permission_callback' => array( $this, 'check_permission' ),
'args' => array(),
),
)
);
}
/**
* Get rss feeds
*
* @since 2.8.0
*
* @return WP_REST_Response|WP_Error
*/
public function get_feeds( $request ) {
$items = (int) $request['items'];
if ( $items < 1 || 20 < $items ) {
$items = 10;
}
$show_summary = (int) $request['show_summary'];
$show_author = (int) $request['show_author'];
$show_date = (int) $request['show_date'];
add_filter( 'http_response', array( self::class, 'dokan_compat_simple_pie_after_five_point_five' ), 10, 3 );
$url = 'https://wedevs.com/account/tag/dokan/feed/';
$rss = fetch_feed( $url );
remove_filter( 'http_response', array( self::class, 'dokan_compat_simple_pie_after_five_point_five' ), 10, 3 );
if ( is_wp_error( $rss ) ) {
return $rss;
}
if ( ! $rss->get_item_quantity() ) {
$rss->__destruct();
unset( $rss );
return new WP_Error( 'error', __( 'An error has occurred, which probably means the feed is down. Try again later.', 'dokan-lite' ) );
}
$feeds = array();
foreach ( $rss->get_items( 0, $items ) as $item ) {
$link = $item->get_link();
while ( stristr( $link, 'http' ) !== $link ) {
$link = substr( $link, 1 );
}
$link = esc_url( $link );
$title = sanitize_text_field( trim( $item->get_title() ) );
if ( empty( $title ) ) {
$title = __( 'Untitled', 'dokan-lite' );
}
$desc = html_entity_decode( $item->get_description(), ENT_QUOTES, get_option( 'blog_charset' ) );
$desc = esc_attr( wp_trim_words( $desc, 55, ' […]' ) );
$summary = '';
$date = '';
$author = '';
if ( $show_summary ) {
$summary = $desc;
//Changing existing [...] to […]. // phpcs:ignore
if ( '[...]' === substr( $summary, -5 ) ) {
$summary = substr( $summary, 0, -5 ) . '[…]';
}
$summary = esc_html( $summary );
}
if ( $show_date ) {
$date = $item->get_date( 'U' );
if ( $date ) {
$date = date_i18n( get_option( 'date_format' ), $date );
}
}
if ( $show_author ) {
$author = $item->get_author();
if ( is_object( $author ) ) {
$author = $author->get_name();
$author = sanitize_text_field( $author );
}
}
$feeds[] = array(
'link' => $link,
'title' => $title,
'desc' => $desc,
'summary' => $summary,
'date' => $date,
'author' => $author,
);
}
$rss->__destruct();
unset( $rss );
return rest_ensure_response( $feeds );
}
public function get_status( $request ) {
/**
* @var Status $status
*/
$status = dokan_get_container()->get( Status::class );
$content = $status->render();
return rest_ensure_response( $content );
}
/**
* Support SimplePie class in WP 5.5+
*
* @since 3.0.10
*
* @param array $response HTTP response.
* @param array $parsed_args HTTP request arguments.
* @param string $url The request URL.
*
* @return array
*/
public static function dokan_compat_simple_pie_after_five_point_five( $response, $parsed_args, $url ) {
if (
version_compare( get_bloginfo( 'version' ), '5.5', '>=' )
&& 'https://wedevs.com/account/tag/dokan/feed/' === $url
&& isset( $response['headers']['link'] )
&& is_array( $response['headers']['link'] )
) {
$response['headers']['link'] = $response['headers']['link'][0];
}
return $response;
}
}