3 namespace Shaarli\Formatter
;
6 use Shaarli\Bookmark\Bookmark
;
7 use Shaarli\Config\ConfigManager
;
10 * Class BookmarkFormatter
12 * Abstract class processing all bookmark attributes through methods designed to be overridden.
14 * @package Shaarli\Formatter
16 abstract class BookmarkFormatter
24 protected $isLoggedIn;
27 * @var array Additional parameters than can be used for specific formatting
28 * e.g. index_url for Feed formatting
30 protected $contextData = [];
33 * LinkDefaultFormatter constructor.
34 * @param ConfigManager $conf
36 public function __construct(ConfigManager
$conf, bool $isLoggedIn)
39 $this->isLoggedIn
= $isLoggedIn;
43 * Convert a Bookmark into an array usable by templates and plugins.
45 * All Bookmark attributes are formatted through a format method
46 * that can be overridden in a formatter extending this class.
48 * @param Bookmark $bookmark instance
50 * @return array formatted representation of a Bookmark
52 public function format($bookmark)
54 $out['id'] = $this->formatId($bookmark);
55 $out['shorturl'] = $this->formatShortUrl($bookmark);
56 $out['url'] = $this->formatUrl($bookmark);
57 $out['real_url'] = $this->formatRealUrl($bookmark);
58 $out['title'] = $this->formatTitle($bookmark);
59 $out['description'] = $this->formatDescription($bookmark);
60 $out['thumbnail'] = $this->formatThumbnail($bookmark);
61 $out['taglist'] = $this->formatTagList($bookmark);
62 $out['tags'] = $this->formatTagString($bookmark);
63 $out['sticky'] = $bookmark->isSticky();
64 $out['private'] = $bookmark->isPrivate();
65 $out['class'] = $this->formatClass($bookmark);
66 $out['created'] = $this->formatCreated($bookmark);
67 $out['updated'] = $this->formatUpdated($bookmark);
68 $out['timestamp'] = $this->formatCreatedTimestamp($bookmark);
69 $out['updated_timestamp'] = $this->formatUpdatedTimestamp($bookmark);
74 * Add additional data available to formatters.
75 * This is used for example to add `index_url` in description's links.
77 * @param string $key Context data key
78 * @param string $value Context data value
80 public function addContextData($key, $value)
82 $this->contextData
[$key] = $value;
90 * @param Bookmark $bookmark instance
92 * @return int formatted ID
94 protected function formatId($bookmark)
96 return $bookmark->getId();
102 * @param Bookmark $bookmark instance
104 * @return string formatted ShortUrl
106 protected function formatShortUrl($bookmark)
108 return $bookmark->getShortUrl();
114 * @param Bookmark $bookmark instance
116 * @return string formatted Url
118 protected function formatUrl($bookmark)
120 return $bookmark->getUrl();
125 * Legacy: identical to Url
127 * @param Bookmark $bookmark instance
129 * @return string formatted RealUrl
131 protected function formatRealUrl($bookmark)
133 return $this->formatUrl($bookmark);
139 * @param Bookmark $bookmark instance
141 * @return string formatted Title
143 protected function formatTitle($bookmark)
145 return $bookmark->getTitle();
151 * @param Bookmark $bookmark instance
153 * @return string formatted Description
155 protected function formatDescription($bookmark)
157 return $bookmark->getDescription();
163 * @param Bookmark $bookmark instance
165 * @return string formatted Thumbnail
167 protected function formatThumbnail($bookmark)
169 return $bookmark->getThumbnail();
175 * @param Bookmark $bookmark instance
177 * @return array formatted Tags
179 protected function formatTagList($bookmark)
181 return $this->filterTagList($bookmark->getTags());
187 * @param Bookmark $bookmark instance
189 * @return string formatted TagString
191 protected function formatTagString($bookmark)
193 return implode(' ', $this->formatTagList($bookmark));
198 * Used to add specific CSS class for a link
200 * @param Bookmark $bookmark instance
202 * @return string formatted Class
204 protected function formatClass($bookmark)
206 return $bookmark->isPrivate() ? 'private' : '';
212 * @param Bookmark $bookmark instance
214 * @return DateTime instance
216 protected function formatCreated(Bookmark
$bookmark)
218 return $bookmark->getCreated();
224 * @param Bookmark $bookmark instance
226 * @return DateTime instance
228 protected function formatUpdated(Bookmark
$bookmark)
230 return $bookmark->getUpdated();
234 * Format CreatedTimestamp
236 * @param Bookmark $bookmark instance
238 * @return int formatted CreatedTimestamp
240 protected function formatCreatedTimestamp(Bookmark
$bookmark)
242 if (! empty($bookmark->getCreated())) {
243 return $bookmark->getCreated()->getTimestamp();
249 * Format UpdatedTimestamp
251 * @param Bookmark $bookmark instance
253 * @return int formatted UpdatedTimestamp
255 protected function formatUpdatedTimestamp(Bookmark
$bookmark)
257 if (! empty($bookmark->getUpdated())) {
258 return $bookmark->getUpdated()->getTimestamp();
264 * Format tag list, e.g. remove private tags if the user is not logged in.
270 protected function filterTagList(array $tags): array
272 if ($this->isLoggedIn
=== true) {
277 foreach ($tags as $tag) {
278 if (strpos($tag, '.') === 0) {