UserFavorites.php
3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
namespace Favorites\Entities\User;
use Favorites\Entities\User\UserRepository;
use Favorites\Entities\Favorite\FavoriteFilter;
use Favorites\Entities\FavoriteList\FavoriteList;
class UserFavorites
{
/**
* User ID
* @var int
*/
private $user_id;
/**
* Site ID
* @var int
*/
private $site_id;
/**
* Display Links
* @var boolean
*/
private $links;
/**
* Filters
* @var array
*/
private $filters;
/**
* User Repository
*/
private $user_repo;
public function __construct($user_id = null, $site_id = null, $links = false, $filters = null)
{
$this->user_id = $user_id;
$this->site_id = $site_id;
$this->links = $links;
$this->filters = $filters;
$this->user_repo = new UserRepository;
}
/**
* Get an array of favorites for specified user
*/
public function getFavoritesArray($user_id = null, $site_id = null, $filters = null)
{
$user_id = ( isset($user_id) ) ? $user_id : $this->user_id;
$site_id = ( isset($site_id) ) ? $site_id : $this->site_id;
$favorites = $this->user_repo->getFavorites($user_id, $site_id);
if ( isset($filters) ) $this->filters = $filters;
if ( isset($this->filters) && is_array($this->filters) ) $favorites = $this->filterFavorites($favorites);
return $this->removeInvalidFavorites($favorites);
}
/**
* Remove non-existent or non-published favorites
* @param array $favorites
*/
private function removeInvalidFavorites($favorites)
{
foreach($favorites as $key => $favorite){
if ( !$this->postExists($favorite) ) unset($favorites[$key]);
}
return $favorites;
}
/**
* Filter the favorites
* @since 1.1.1
* @param array $favorites
*/
private function filterFavorites($favorites)
{
$favorites = new FavoriteFilter($favorites, $this->filters);
return $favorites->filter();
}
/**
* Return an HTML list of favorites for specified user
* @param $include_button boolean - whether to include the favorite button
* @param $include_thumbnails boolean - whether to include post thumbnails
* @param $thumbnail_size string - thumbnail size to display
* @param $include_excerpt boolean - whether to include the post excerpt
*/
public function getFavoritesList($include_button = false, $include_thumbnails = false, $thumbnail_size = 'thumbnail', $include_excerpt = false, $no_favorites = '')
{
$list_args = [
'include_button' => $include_button,
'include_thumbnails' => $include_thumbnails,
'thumbnail_size' => $thumbnail_size,
'include_excerpt' => $include_excerpt,
'include_links' => $this->links,
'site_id' => $this->site_id,
'user_id' => $this->user_id,
'no_favorites' => $no_favorites,
'filters' => $this->filters,
];
$list = new FavoriteList($list_args);
return $list->getList();
}
/**
* Check if post exists and is published
*/
private function postExists($id)
{
$allowed_statuses = ( isset($this->filters['status']) && is_array($this->filters['status']) ) ? $this->filters['status'] : array('publish');
$status = get_post_status($id);
if ( !$status ) return false;
if ( !in_array($status, $allowed_statuses) ) return false;
return true;
}
}