-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCategory.php
More file actions
135 lines (117 loc) · 3.44 KB
/
Category.php
File metadata and controls
135 lines (117 loc) · 3.44 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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
namespace Bookboon\Api\Entity;
use Bookboon\Api\Bookboon;
use Bookboon\Api\Client\Client;
use Bookboon\Api\Exception\BadUUIDException;
class Category extends Entity
{
const TEXTBOOKS = 'd1fabb36-4eff-4760-a80d-a15700efa9ae';
const BUSINESS = '82403e77-ccbf-4e10-875c-a15700ef8a56';
/**
* Get Category.
*
* @param Bookboon $bookboon
* @param string $categoryId
* @param string $bookType
* @return Category
* @throws \Bookboon\Api\Exception\EntityDataException
*/
public static function get(Bookboon $bookboon, $categoryId, $bookType = Book::TYPE_PDF)
{
return new static($bookboon->rawRequest("/categories/$categoryId", array('bookType' => $bookType)));
}
/**
* Returns the entire Category structure.
*
* @param Bookboon $bookboon
* @param array $blacklistedCategoryIds
* @param int $depth level of recursion (default 2 maximum, 0 no recursion)
* @return Category[]
*/
public static function getTree(Bookboon $bookboon, array $blacklistedCategoryIds = array(), $depth = 2)
{
$categories = $bookboon->rawRequest('/categories', array('depth' => $depth));
if (count($blacklistedCategoryIds) !== 0) {
self::recursiveBlacklist($categories, $blacklistedCategoryIds);
}
return Category::getEntitiesFromArray($categories);
}
private static function recursiveBlacklist(&$categories, $blacklistedCategoryIds)
{
foreach ($categories as $key => $category) {
if (in_array($category['_id'], $blacklistedCategoryIds)) {
unset($categories[$key]);
continue;
}
if (isset($category['categories'])) {
self::recursiveBlacklist($categories[$key]['categories'], $blacklistedCategoryIds);
}
}
}
/**
* Get the download url.
*
* @param Bookboon $bookboon
* @param $categoryId
* @param array $variables
* @return string
*/
public static function getDownloadUrl(Bookboon $bookboon, $categoryId, array $variables)
{
$download = $bookboon->rawRequest("/categories/$categoryId/download", $variables, Client::HTTP_POST);
return $download['url'];
}
protected function isValid(array $array)
{
return isset($array['_id'], $array['name'], $array['description'], $array['homepage']);
}
/**
* @return string UUID of entity
*/
public function getId()
{
return $this->safeGet('_id');
}
/**
* @return string slug
*/
public function getSlug()
{
return $this->safeGet('_slug');
}
/**
* @return string name of entity
*/
public function getName()
{
return $this->safeGet('name');
}
/**
* @return string link to category on bookboon.com
*/
public function getHomepage()
{
return $this->safeGet('homepage');
}
/**
* @return string category description
*/
public function getDescription()
{
return $this->safeGet('description');
}
/**
* @return Category[] of Category objects
*/
public function getCategories()
{
return self::getEntitiesFromArray($this->safeGet('categories', array()));
}
/**
* @return Book[] books in category
*/
public function getBooks()
{
return Book::getEntitiesFromArray($this->safeGet('books', array()));
}
}