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 * @var array Additional parameters than can be used for specific formatting
25 * e.g. index_url for Feed formatting
27 protected $contextData = [];
30 * LinkDefaultFormatter constructor.
31 * @param ConfigManager $conf
33 public function __construct(ConfigManager
$conf)
39 * Convert a Bookmark into an array usable by templates and plugins.
41 * All Bookmark attributes are formatted through a format method
42 * that can be overridden in a formatter extending this class.
44 * @param Bookmark $bookmark instance
46 * @return array formatted representation of a Bookmark
48 public function format($bookmark)
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);
70 * Add additional data available to formatters.
71 * This is used for example to add `index_url` in description's links.
73 * @param string $key Context data key
74 * @param string $value Context data value
76 public function addContextData($key, $value)
78 $this->contextData
[$key] = $value;
84 * @param Bookmark $bookmark instance
86 * @return int formatted ID
88 protected function formatId($bookmark)
90 return $bookmark->getId();
96 * @param Bookmark $bookmark instance
98 * @return string formatted ShortUrl
100 protected function formatShortUrl($bookmark)
102 return $bookmark->getShortUrl();
108 * @param Bookmark $bookmark instance
110 * @return string formatted Url
112 protected function formatUrl($bookmark)
114 return $bookmark->getUrl();
119 * Legacy: identical to Url
121 * @param Bookmark $bookmark instance
123 * @return string formatted RealUrl
125 protected function formatRealUrl($bookmark)
127 return $bookmark->getUrl();
133 * @param Bookmark $bookmark instance
135 * @return string formatted Title
137 protected function formatTitle($bookmark)
139 return $bookmark->getTitle();
145 * @param Bookmark $bookmark instance
147 * @return string formatted Description
149 protected function formatDescription($bookmark)
151 return $bookmark->getDescription();
157 * @param Bookmark $bookmark instance
159 * @return string formatted Thumbnail
161 protected function formatThumbnail($bookmark)
163 return $bookmark->getThumbnail();
169 * @param Bookmark $bookmark instance
171 * @return array formatted Tags
173 protected function formatTagList($bookmark)
175 return $bookmark->getTags();
181 * @param Bookmark $bookmark instance
183 * @return string formatted TagString
185 protected function formatTagString($bookmark)
187 return implode(' ', $bookmark->getTags());
192 * Used to add specific CSS class for a link
194 * @param Bookmark $bookmark instance
196 * @return string formatted Class
198 protected function formatClass($bookmark)
200 return $bookmark->isPrivate() ? 'private' : '';
206 * @param Bookmark $bookmark instance
208 * @return DateTime instance
210 protected function formatCreated(Bookmark
$bookmark)
212 return $bookmark->getCreated();
218 * @param Bookmark $bookmark instance
220 * @return DateTime instance
222 protected function formatUpdated(Bookmark
$bookmark)
224 return $bookmark->getUpdated();
228 * Format CreatedTimestamp
230 * @param Bookmark $bookmark instance
232 * @return int formatted CreatedTimestamp
234 protected function formatCreatedTimestamp(Bookmark
$bookmark)
236 if (! empty($bookmark->getCreated())) {
237 return $bookmark->getCreated()->getTimestamp();
243 * Format UpdatedTimestamp
245 * @param Bookmark $bookmark instance
247 * @return int formatted UpdatedTimestamp
249 protected function formatUpdatedTimestamp(Bookmark
$bookmark)
251 if (! empty($bookmark->getUpdated())) {
252 return $bookmark->getUpdated()->getTimestamp();