mirror of
https://github.com/mashirozx/sakura.git
synced 2024-12-12 09:54:35 +08:00
119 lines
3.0 KiB
PHP
119 lines
3.0 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Sakura\Controllers;
|
||
|
|
||
|
use Sakura\Controllers\BaseController;
|
||
|
use Sakura\Lib\Exception;
|
||
|
use DOMDocument;
|
||
|
|
||
|
class PostController extends BaseController
|
||
|
{
|
||
|
/**
|
||
|
* Get post comment count
|
||
|
*
|
||
|
* @param integer $post_id
|
||
|
* @return number
|
||
|
*/
|
||
|
public static function get_comments_number(int $post_id)
|
||
|
{
|
||
|
return intval(get_comments_number($post_id));
|
||
|
}
|
||
|
|
||
|
public static function get_pagination_info($request)
|
||
|
{
|
||
|
$the_query = new \WP_Query($_GET);
|
||
|
$total_page = $the_query->post_count;
|
||
|
return $the_query;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get original post expert
|
||
|
*
|
||
|
* @param integer $post_id
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function get_post_excerpt(int $post_id)
|
||
|
{
|
||
|
$post = get_post($post_id);
|
||
|
if ($post) {
|
||
|
// throw new Exception('whoop');
|
||
|
return $post->post_excerpt;
|
||
|
} else {
|
||
|
throw new Exception("No such post \$id={$post_id}!");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get post original Markdown content
|
||
|
* based on https://wordpress.org/plugins/wp-githuber-md/
|
||
|
*
|
||
|
* @param integer $post_id
|
||
|
* @return mixed string | null
|
||
|
*/
|
||
|
public static function get_post_markdown(int $post_id)
|
||
|
{
|
||
|
$post = get_post($post_id);
|
||
|
if ($post) {
|
||
|
// won't check if post_content_filtered is empty, will check it in js
|
||
|
// TODO: global check if markdown available.
|
||
|
if (property_exists($post, 'post_content_filtered')) {
|
||
|
return html_entity_decode($post->post_content_filtered, ENT_QUOTES);
|
||
|
} else {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Content filter
|
||
|
*
|
||
|
* @param object $post $post obj in register_rest_field
|
||
|
* @return object $post content modified
|
||
|
*/
|
||
|
public static function rest_api_post_content_filter(array $post)
|
||
|
{
|
||
|
$post['content']['markdown'] = self::get_post_markdown($post['id']);
|
||
|
return $post['content'];
|
||
|
}
|
||
|
|
||
|
public static function rest_api_post_excerpt_filter($post)
|
||
|
{
|
||
|
$post['excerpt']['plain'] = self::get_post_excerpt($post['id']);
|
||
|
return $post['excerpt'];
|
||
|
}
|
||
|
|
||
|
public static function get_post_views($post_id)
|
||
|
{
|
||
|
if (false) {
|
||
|
// if (!function_exists('wp_statistics_pages')) {
|
||
|
// throw new Exception(__('Please install pulgin WP-Statistics (https://wordpress.org/plugins/wp-statistics)', SAKURA_TEXT_DOMAIN));
|
||
|
// } else {
|
||
|
// return intval(wp_statistics_pages('total', 'uri', $post_id));
|
||
|
// }
|
||
|
} else {
|
||
|
$views = get_post_meta($post_id, 'views', true);
|
||
|
if (!$views) {
|
||
|
return 0;
|
||
|
} else {
|
||
|
return intval($views);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function get_post_word_count($post_id)
|
||
|
{
|
||
|
$post = get_post($post_id);
|
||
|
if ($post) {
|
||
|
// return $post->post_content;
|
||
|
$doc = new DOMDocument();
|
||
|
$internalErrors = libxml_use_internal_errors(true);
|
||
|
$doc->loadHTML('<?xml encoding="utf-8" ?>' . $post->post_content);
|
||
|
libxml_use_internal_errors($internalErrors);
|
||
|
$string = $doc->textContent;
|
||
|
$string = preg_replace('/\s+/', '', $string);
|
||
|
return strlen($string);
|
||
|
}
|
||
|
return NAN;
|
||
|
}
|
||
|
}
|