diff options
Diffstat (limited to 'application/formatter/BookmarkFormatter.php')
-rw-r--r-- | application/formatter/BookmarkFormatter.php | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/application/formatter/BookmarkFormatter.php b/application/formatter/BookmarkFormatter.php new file mode 100644 index 00000000..c82c3452 --- /dev/null +++ b/application/formatter/BookmarkFormatter.php | |||
@@ -0,0 +1,256 @@ | |||
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 | } | ||