]>
Commit | Line | Data |
---|---|---|
336a28fa A |
1 | <?php |
2 | ||
3 | namespace Shaarli\Formatter; | |
4 | ||
5 | use DateTime; | |
6 | use Shaarli\Config\ConfigManager; | |
7 | use Shaarli\Bookmark\Bookmark; | |
8 | ||
9 | /** | |
10 | * Class BookmarkFormatter | |
11 | * | |
12 | * Abstract class processing all bookmark attributes through methods designed to be overridden. | |
13 | * | |
14 | * @package Shaarli\Formatter | |
15 | */ | |
16 | abstract class BookmarkFormatter | |
17 | { | |
18 | /** | |
19 | * @var ConfigManager | |
20 | */ | |
21 | protected $conf; | |
22 | ||
23 | /** | |
24 | * @var array Additional parameters than can be used for specific formatting | |
25 | * e.g. index_url for Feed formatting | |
26 | */ | |
27 | protected $contextData = []; | |
28 | ||
29 | /** | |
30 | * LinkDefaultFormatter constructor. | |
31 | * @param ConfigManager $conf | |
32 | */ | |
33 | public function __construct(ConfigManager $conf) | |
34 | { | |
35 | $this->conf = $conf; | |
36 | } | |
37 | ||
38 | /** | |
39 | * Convert a Bookmark into an array usable by templates and plugins. | |
40 | * | |
41 | * All Bookmark attributes are formatted through a format method | |
42 | * that can be overridden in a formatter extending this class. | |
43 | * | |
44 | * @param Bookmark $bookmark instance | |
45 | * | |
46 | * @return array formatted representation of a Bookmark | |
47 | */ | |
48 | public function format($bookmark) | |
49 | { | |
50 | $out['id'] = $this->formatId($bookmark); | |
51 | $out['shorturl'] = $this->formatShortUrl($bookmark); | |
52 | $out['url'] = $this->formatUrl($bookmark); | |
53 | $out['real_url'] = $this->formatRealUrl($bookmark); | |
54 | $out['title'] = $this->formatTitle($bookmark); | |
55 | $out['description'] = $this->formatDescription($bookmark); | |
56 | $out['thumbnail'] = $this->formatThumbnail($bookmark); | |
57 | $out['taglist'] = $this->formatTagList($bookmark); | |
58 | $out['tags'] = $this->formatTagString($bookmark); | |
59 | $out['sticky'] = $bookmark->isSticky(); | |
60 | $out['private'] = $bookmark->isPrivate(); | |
61 | $out['class'] = $this->formatClass($bookmark); | |
62 | $out['created'] = $this->formatCreated($bookmark); | |
63 | $out['updated'] = $this->formatUpdated($bookmark); | |
64 | $out['timestamp'] = $this->formatCreatedTimestamp($bookmark); | |
65 | $out['updated_timestamp'] = $this->formatUpdatedTimestamp($bookmark); | |
66 | return $out; | |
67 | } | |
68 | ||
69 | /** | |
70 | * Add additional data available to formatters. | |
71 | * This is used for example to add `index_url` in description's links. | |
72 | * | |
73 | * @param string $key Context data key | |
74 | * @param string $value Context data value | |
75 | */ | |
76 | public function addContextData($key, $value) | |
77 | { | |
78 | $this->contextData[$key] = $value; | |
79 | } | |
80 | ||
81 | /** | |
82 | * Format ID | |
83 | * | |
84 | * @param Bookmark $bookmark instance | |
85 | * | |
86 | * @return int formatted ID | |
87 | */ | |
88 | protected function formatId($bookmark) | |
89 | { | |
90 | return $bookmark->getId(); | |
91 | } | |
92 | ||
93 | /** | |
94 | * Format ShortUrl | |
95 | * | |
96 | * @param Bookmark $bookmark instance | |
97 | * | |
98 | * @return string formatted ShortUrl | |
99 | */ | |
100 | protected function formatShortUrl($bookmark) | |
101 | { | |
102 | return $bookmark->getShortUrl(); | |
103 | } | |
104 | ||
105 | /** | |
106 | * Format Url | |
107 | * | |
108 | * @param Bookmark $bookmark instance | |
109 | * | |
110 | * @return string formatted Url | |
111 | */ | |
112 | protected function formatUrl($bookmark) | |
113 | { | |
114 | return $bookmark->getUrl(); | |
115 | } | |
116 | ||
117 | /** | |
118 | * Format RealUrl | |
119 | * Legacy: identical to Url | |
120 | * | |
121 | * @param Bookmark $bookmark instance | |
122 | * | |
123 | * @return string formatted RealUrl | |
124 | */ | |
125 | protected function formatRealUrl($bookmark) | |
126 | { | |
127 | return $bookmark->getUrl(); | |
128 | } | |
129 | ||
130 | /** | |
131 | * Format Title | |
132 | * | |
133 | * @param Bookmark $bookmark instance | |
134 | * | |
135 | * @return string formatted Title | |
136 | */ | |
137 | protected function formatTitle($bookmark) | |
138 | { | |
139 | return $bookmark->getTitle(); | |
140 | } | |
141 | ||
142 | /** | |
143 | * Format Description | |
144 | * | |
145 | * @param Bookmark $bookmark instance | |
146 | * | |
147 | * @return string formatted Description | |
148 | */ | |
149 | protected function formatDescription($bookmark) | |
150 | { | |
151 | return $bookmark->getDescription(); | |
152 | } | |
153 | ||
154 | /** | |
155 | * Format Thumbnail | |
156 | * | |
157 | * @param Bookmark $bookmark instance | |
158 | * | |
159 | * @return string formatted Thumbnail | |
160 | */ | |
161 | protected function formatThumbnail($bookmark) | |
162 | { | |
163 | return $bookmark->getThumbnail(); | |
164 | } | |
165 | ||
166 | /** | |
167 | * Format Tags | |
168 | * | |
169 | * @param Bookmark $bookmark instance | |
170 | * | |
171 | * @return array formatted Tags | |
172 | */ | |
173 | protected function formatTagList($bookmark) | |
174 | { | |
175 | return $bookmark->getTags(); | |
176 | } | |
177 | ||
178 | /** | |
179 | * Format TagString | |
180 | * | |
181 | * @param Bookmark $bookmark instance | |
182 | * | |
183 | * @return string formatted TagString | |
184 | */ | |
185 | protected function formatTagString($bookmark) | |
186 | { | |
187 | return implode(' ', $bookmark->getTags()); | |
188 | } | |
189 | ||
190 | /** | |
191 | * Format Class | |
192 | * Used to add specific CSS class for a link | |
193 | * | |
194 | * @param Bookmark $bookmark instance | |
195 | * | |
196 | * @return string formatted Class | |
197 | */ | |
198 | protected function formatClass($bookmark) | |
199 | { | |
200 | return $bookmark->isPrivate() ? 'private' : ''; | |
201 | } | |
202 | ||
203 | /** | |
204 | * Format Created | |
205 | * | |
206 | * @param Bookmark $bookmark instance | |
207 | * | |
208 | * @return DateTime instance | |
209 | */ | |
210 | protected function formatCreated(Bookmark $bookmark) | |
211 | { | |
212 | return $bookmark->getCreated(); | |
213 | } | |
214 | ||
215 | /** | |
216 | * Format Updated | |
217 | * | |
218 | * @param Bookmark $bookmark instance | |
219 | * | |
220 | * @return DateTime instance | |
221 | */ | |
222 | protected function formatUpdated(Bookmark $bookmark) | |
223 | { | |
224 | return $bookmark->getUpdated(); | |
225 | } | |
226 | ||
227 | /** | |
228 | * Format CreatedTimestamp | |
229 | * | |
230 | * @param Bookmark $bookmark instance | |
231 | * | |
232 | * @return int formatted CreatedTimestamp | |
233 | */ | |
234 | protected function formatCreatedTimestamp(Bookmark $bookmark) | |
235 | { | |
236 | if (! empty($bookmark->getCreated())) { | |
237 | return $bookmark->getCreated()->getTimestamp(); | |
238 | } | |
239 | return 0; | |
240 | } | |
241 | ||
242 | /** | |
243 | * Format UpdatedTimestamp | |
244 | * | |
245 | * @param Bookmark $bookmark instance | |
246 | * | |
247 | * @return int formatted UpdatedTimestamp | |
248 | */ | |
249 | protected function formatUpdatedTimestamp(Bookmark $bookmark) | |
250 | { | |
251 | if (! empty($bookmark->getUpdated())) { | |
252 | return $bookmark->getUpdated()->getTimestamp(); | |
253 | } | |
254 | return 0; | |
255 | } | |
256 | } |