3 namespace Shaarli\Formatter
;
6 use Shaarli\Config\ConfigManager
;
7 use Shaarli\Bookmark\Bookmark
;
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;
88 * @param Bookmark $bookmark instance
90 * @return int formatted ID
92 protected function formatId($bookmark)
94 return $bookmark->getId();
100 * @param Bookmark $bookmark instance
102 * @return string formatted ShortUrl
104 protected function formatShortUrl($bookmark)
106 return $bookmark->getShortUrl();
112 * @param Bookmark $bookmark instance
114 * @return string formatted Url
116 protected function formatUrl($bookmark)
118 return $bookmark->getUrl();
123 * Legacy: identical to Url
125 * @param Bookmark $bookmark instance
127 * @return string formatted RealUrl
129 protected function formatRealUrl($bookmark)
131 return $bookmark->getUrl();
137 * @param Bookmark $bookmark instance
139 * @return string formatted Title
141 protected function formatTitle($bookmark)
143 return $bookmark->getTitle();
149 * @param Bookmark $bookmark instance
151 * @return string formatted Description
153 protected function formatDescription($bookmark)
155 return $bookmark->getDescription();
161 * @param Bookmark $bookmark instance
163 * @return string formatted Thumbnail
165 protected function formatThumbnail($bookmark)
167 return $bookmark->getThumbnail();
173 * @param Bookmark $bookmark instance
175 * @return array formatted Tags
177 protected function formatTagList($bookmark)
179 return $this->filterTagList($bookmark->getTags());
185 * @param Bookmark $bookmark instance
187 * @return string formatted TagString
189 protected function formatTagString($bookmark)
191 return implode(' ', $this->formatTagList($bookmark));
196 * Used to add specific CSS class for a link
198 * @param Bookmark $bookmark instance
200 * @return string formatted Class
202 protected function formatClass($bookmark)
204 return $bookmark->isPrivate() ? 'private' : '';
210 * @param Bookmark $bookmark instance
212 * @return DateTime instance
214 protected function formatCreated(Bookmark
$bookmark)
216 return $bookmark->getCreated();
222 * @param Bookmark $bookmark instance
224 * @return DateTime instance
226 protected function formatUpdated(Bookmark
$bookmark)
228 return $bookmark->getUpdated();
232 * Format CreatedTimestamp
234 * @param Bookmark $bookmark instance
236 * @return int formatted CreatedTimestamp
238 protected function formatCreatedTimestamp(Bookmark
$bookmark)
240 if (! empty($bookmark->getCreated())) {
241 return $bookmark->getCreated()->getTimestamp();
247 * Format UpdatedTimestamp
249 * @param Bookmark $bookmark instance
251 * @return int formatted UpdatedTimestamp
253 protected function formatUpdatedTimestamp(Bookmark
$bookmark)
255 if (! empty($bookmark->getUpdated())) {
256 return $bookmark->getUpdated()->getTimestamp();
262 * Format tag list, e.g. remove private tags if the user is not logged in.
268 protected function filterTagList(array $tags): array
270 if ($this->isLoggedIn
=== true) {
275 foreach ($tags as $tag) {
276 if (strpos($tag, '.') === 0) {