whoami7 - Manager
:
/
home
/
techyfnq
/
public_html
/
wp-content
/
plugins
/
site-reviews
/
plugin
/
Upload File:
files >> //home/techyfnq/public_html/wp-content/plugins/site-reviews/plugin/Review.php
<?php namespace GeminiLabs\SiteReviews; use GeminiLabs\SiteReviews\Database\OptionManager; use GeminiLabs\SiteReviews\Database\Query; use GeminiLabs\SiteReviews\Defaults\CustomFieldsDefaults; use GeminiLabs\SiteReviews\Defaults\ReviewDefaults; use GeminiLabs\SiteReviews\Helpers\Arr; use GeminiLabs\SiteReviews\Helpers\Cast; use GeminiLabs\SiteReviews\Helpers\Str; use GeminiLabs\SiteReviews\Helpers\Text; use GeminiLabs\SiteReviews\Modules\Avatar; use GeminiLabs\SiteReviews\Modules\Date; use GeminiLabs\SiteReviews\Modules\Encryption; use GeminiLabs\SiteReviews\Modules\Html\ReviewHtml; /** * @property bool $approved This property is mapped to $is_approved * @property array $assigned_posts * @property array $assigned_terms * @property array $assigned_users * @property string $author * @property int $author_id * @property string $avatar * @property string $content * @property Arguments $custom * @property string $date * @property string $date_gmt * @property string $name This property is mapped to $author * @property string $email * @property bool $has_revisions This property is mapped to $is_modified * @property int $ID * @property string $ip_address * @property bool $is_approved * @property bool $is_modified * @property bool $is_pinned * @property bool $is_verified * @property bool $modified This property is mapped to $is_modified * @property bool $pinned This property is mapped to $is_pinned * @property int $rating * @property int $rating_id * @property string $response * @property int $score * @property string $status * @property bool $terms * @property string $title * @property string $type * @property string $url * @property int $user_id This property is mapped to $author_id */ class Review extends Arguments { /** * @var Arguments */ protected $_meta; /** * @var \WP_Post */ protected $_post; /** * @var bool */ protected $has_checked_revisions; /** * @var int */ protected $id; /** * @param array|object $values * @param bool $init */ public function __construct($values, $init = true) { $values = glsr()->args($values); $this->id = Cast::toInt($values->review_id); $args = glsr(ReviewDefaults::class)->restrict($values->toArray()); $args['ID'] = $this->id; parent::__construct($args); if ($init) { $this->set('avatar', glsr(Avatar::class)->url($this)); $this->set('custom', $this->custom()); $this->set('response', $this->meta()->_response); } } /** * @return mixed */ public function __call($method, $args) { array_unshift($args, $this); $result = apply_filters_ref_array(glsr()->id.'/review/call/'.$method, $args); if (!is_a($result, get_class($this))) { return $result; } } /** * @return string */ public function __toString() { return (string) $this->build(); } public function approveUrl(): string { $token = glsr(Encryption::class)->encryptRequest('approve', [$this->id]); return !empty($token) ? add_query_arg(glsr()->prefix, $token, admin_url()) : ''; } /** * @return array */ public function assignedPosts() { if (empty($this->assigned_posts)) { return []; } return get_posts([ 'post__in' => $this->assigned_posts, 'post_type' => 'any', 'posts_per_page' => -1, ]); } /** * @return array */ public function assignedTerms() { if (empty($this->assigned_terms)) { return []; } $terms = get_terms(glsr()->taxonomy, ['include' => $this->assigned_terms]); if (is_wp_error($terms)) { return $this->assigned_terms; } return $terms; } /** * @return array */ public function assignedUsers() { if (empty($this->assigned_users)) { return []; } return get_users([ 'fields' => ['display_name', 'ID', 'user_email', 'user_nicename', 'user_url'], 'include' => $this->assigned_users, ]); } /** * @return string */ public function author() { $name = $this->get('author', __('Anonymous', 'site-reviews')); $format = glsr_get_option('reviews.name.format', '', 'string'); $initial = glsr_get_option('reviews.name.initial', '', 'string'); return Text::name($name, $format, $initial); } /** * @param int $size * @return string */ public function avatar($size = 0) { return glsr(Avatar::class)->img($this, $size); } /** * @return ReviewHtml */ public function build(array $args = []) { return new ReviewHtml($this, $args); } /** * @return Arguments */ public function custom() { $custom = array_filter($this->meta()->toArray(), function ($key) { return Str::startsWith($key, '_custom'); }, ARRAY_FILTER_USE_KEY); $custom = Arr::unprefixKeys($custom, '_custom_'); $custom = Arr::unprefixKeys($custom, '_'); $custom = glsr(CustomFieldsDefaults::class)->merge($custom); return glsr()->args($custom); } /** * @return string */ public function date($format = 'F j, Y') { $value = $this->get('date_gmt'); if (!empty(func_get_args())) { return date_i18n($format, strtotime($value)); } $dateFormat = glsr_get_option('reviews.date.format', 'default'); if ('relative' === $dateFormat) { return glsr(Date::class)->relative($value, 'past'); } $format = 'custom' === $dateFormat ? glsr_get_option('reviews.date.custom', 'M j, Y') : glsr(OptionManager::class)->getWP('date_format', 'F j, Y'); return date_i18n($format, strtotime($value)); } public function editUrl(): string { $obj = get_post_type_object(glsr()->post_type); $link = admin_url(sprintf($obj->_edit_link.'&action=edit', $this->id)); $link = apply_filters('get_edit_post_link', $link, $this->id, 'display'); return Cast::toString($link); } /** * @param int|\WP_Post $post * @return bool */ public static function isEditable($post) { $postId = Helper::getPostId($post); return static::isReview($postId) && in_array(glsr(Query::class)->review($postId)->type, ['', 'local']); } /** * @param \WP_Post|int|false $post * @return bool */ public static function isReview($post) { return glsr()->post_type === get_post_type($post); } /** * @return bool */ public function isValid() { return !empty($this->id) && !empty($this->get('rating_id')); } /** * @return Arguments */ public function meta() { if (!$this->_meta instanceof Arguments) { $meta = Arr::consolidate(get_post_meta($this->id)); $meta = array_map(function ($item) { return array_shift($item); }, array_filter($meta)); $meta = array_filter($meta, '\GeminiLabs\SiteReviews\Helper::isNotEmpty'); $meta = array_map('maybe_unserialize', $meta); $this->_meta = glsr()->args($meta); } return $this->_meta; } /** * @param mixed $key * @return bool */ #[\ReturnTypeWillChange] public function offsetExists($key) { return parent::offsetExists($key) || !is_null($this->custom()->$key); } /** * @param mixed $key * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet($key) { $alternateKeys = [ 'approved' => 'is_approved', 'has_revisions' => 'is_modified', 'modified' => 'is_modified', 'name' => 'author', 'pinned' => 'is_pinned', 'user_id' => 'author_id', ]; if (array_key_exists($key, $alternateKeys)) { return $this->offsetGet($alternateKeys[$key]); } if ('is_modified' === $key) { return $this->hasRevisions(); } if (is_null($value = parent::offsetGet($key))) { return $this->custom()->$key; } return $value; } /** * @param mixed $key * @return void */ #[\ReturnTypeWillChange] public function offsetSet($key, $value) { // This class is read-only, except for custom fields if ('custom' === $key) { $value = Arr::consolidate($value); $value = Arr::prefixKeys($value, '_custom_'); $meta = wp_parse_args($this->_meta->toArray(), $value); $this->_meta = glsr()->args($meta); parent::offsetSet($key, $this->custom()); } } /** * @param mixed $key * @return void */ #[\ReturnTypeWillChange] public function offsetUnset($key) { // This class is read-only } /** * @return \WP_Post|null */ public function post() { if (!$this->_post instanceof \WP_Post) { $this->_post = get_post($this->id); } return $this->_post; } /** * @return void */ public function render(array $args = []) { echo $this->build($args); } /** * @return string */ public function rating() { return glsr_star_rating($this->get('rating')); } /** * @return string */ public function type() { $type = $this->get('type'); $reviewTypes = glsr()->retrieveAs('array', 'review_types'); return Arr::get($reviewTypes, $type, _x('Unknown', 'admin-text', 'site-reviews')); } /** * @return \WP_User|false */ public function user() { return get_user_by('ID', $this->get('author_id')); } public function verifyUrl(string $path = ''): string { if ($this->get('is_verified') && !empty($this->meta()->_verified_on)) { return ''; } $path = trailingslashit($path); $token = glsr(Encryption::class)->encryptRequest('verify', [$this->id, $path]); return !empty($token) ? add_query_arg(glsr()->prefix, $token, get_home_url()) : ''; } /** * @return bool */ protected function hasRevisions() { if (!$this->has_checked_revisions) { $modified = glsr(Query::class)->hasRevisions($this->ID); $this->set('is_modified', $modified); $this->has_checked_revisions = true; } return $this->get('is_modified'); } }
Copyright ©2021 || Defacer Indonesia