diff options
Diffstat (limited to 'application/bookmark')
-rw-r--r-- | application/bookmark/LinkDB.php | 47 | ||||
-rw-r--r-- | application/bookmark/LinkUtils.php | 24 |
2 files changed, 15 insertions, 56 deletions
diff --git a/application/bookmark/LinkDB.php b/application/bookmark/LinkDB.php index c13a1141..efde8468 100644 --- a/application/bookmark/LinkDB.php +++ b/application/bookmark/LinkDB.php | |||
@@ -29,10 +29,10 @@ use Shaarli\FileUtils; | |||
29 | * - private: Is this link private? 0=no, other value=yes | 29 | * - private: Is this link private? 0=no, other value=yes |
30 | * - tags: tags attached to this entry (separated by spaces) | 30 | * - tags: tags attached to this entry (separated by spaces) |
31 | * - title Title of the link | 31 | * - title Title of the link |
32 | * - url URL of the link. Used for displayable links (no redirector, relative, etc.). | 32 | * - url URL of the link. Used for displayable links. |
33 | * Can be absolute or relative. | 33 | * Can be absolute or relative in the database but the relative links |
34 | * Relative URLs are permalinks (e.g.'?m-ukcw') | 34 | * will be converted to absolute ones in templates. |
35 | * - real_url Absolute processed URL. | 35 | * - real_url Raw URL in stored in the DB (absolute or relative). |
36 | * - shorturl Permalink smallhash | 36 | * - shorturl Permalink smallhash |
37 | * | 37 | * |
38 | * Implements 3 interfaces: | 38 | * Implements 3 interfaces: |
@@ -88,19 +88,6 @@ class LinkDB implements Iterator, Countable, ArrayAccess | |||
88 | // Hide public links | 88 | // Hide public links |
89 | private $hidePublicLinks; | 89 | private $hidePublicLinks; |
90 | 90 | ||
91 | // link redirector set in user settings. | ||
92 | private $redirector; | ||
93 | |||
94 | /** | ||
95 | * Set this to `true` to urlencode link behind redirector link, `false` to leave it untouched. | ||
96 | * | ||
97 | * Example: | ||
98 | * anonym.to needs clean URL while dereferer.org needs urlencoded URL. | ||
99 | * | ||
100 | * @var boolean $redirectorEncode parameter: true or false | ||
101 | */ | ||
102 | private $redirectorEncode; | ||
103 | |||
104 | /** | 91 | /** |
105 | * Creates a new LinkDB | 92 | * Creates a new LinkDB |
106 | * | 93 | * |
@@ -109,22 +96,16 @@ class LinkDB implements Iterator, Countable, ArrayAccess | |||
109 | * @param string $datastore datastore file path. | 96 | * @param string $datastore datastore file path. |
110 | * @param boolean $isLoggedIn is the user logged in? | 97 | * @param boolean $isLoggedIn is the user logged in? |
111 | * @param boolean $hidePublicLinks if true all links are private. | 98 | * @param boolean $hidePublicLinks if true all links are private. |
112 | * @param string $redirector link redirector set in user settings. | ||
113 | * @param boolean $redirectorEncode Enable urlencode on redirected urls (default: true). | ||
114 | */ | 99 | */ |
115 | public function __construct( | 100 | public function __construct( |
116 | $datastore, | 101 | $datastore, |
117 | $isLoggedIn, | 102 | $isLoggedIn, |
118 | $hidePublicLinks, | 103 | $hidePublicLinks |
119 | $redirector = '', | ||
120 | $redirectorEncode = true | ||
121 | ) { | 104 | ) { |
122 | 105 | ||
123 | $this->datastore = $datastore; | 106 | $this->datastore = $datastore; |
124 | $this->loggedIn = $isLoggedIn; | 107 | $this->loggedIn = $isLoggedIn; |
125 | $this->hidePublicLinks = $hidePublicLinks; | 108 | $this->hidePublicLinks = $hidePublicLinks; |
126 | $this->redirector = $redirector; | ||
127 | $this->redirectorEncode = $redirectorEncode === true; | ||
128 | $this->check(); | 109 | $this->check(); |
129 | $this->read(); | 110 | $this->read(); |
130 | } | 111 | } |
@@ -271,7 +252,8 @@ You use the community supported version of the original Shaarli project, by Seba | |||
271 | ), | 252 | ), |
272 | 'private' => 0, | 253 | 'private' => 0, |
273 | 'created' => new DateTime(), | 254 | 'created' => new DateTime(), |
274 | 'tags' => 'opensource software' | 255 | 'tags' => 'opensource software', |
256 | 'sticky' => false, | ||
275 | ); | 257 | ); |
276 | $link['shorturl'] = link_small_hash($link['created'], $link['id']); | 258 | $link['shorturl'] = link_small_hash($link['created'], $link['id']); |
277 | $this->links[1] = $link; | 259 | $this->links[1] = $link; |
@@ -284,6 +266,7 @@ You use the community supported version of the original Shaarli project, by Seba | |||
284 | 'private' => 1, | 266 | 'private' => 1, |
285 | 'created' => new DateTime('1 minute ago'), | 267 | 'created' => new DateTime('1 minute ago'), |
286 | 'tags' => 'secretstuff', | 268 | 'tags' => 'secretstuff', |
269 | 'sticky' => false, | ||
287 | ); | 270 | ); |
288 | $link['shorturl'] = link_small_hash($link['created'], $link['id']); | 271 | $link['shorturl'] = link_small_hash($link['created'], $link['id']); |
289 | $this->links[0] = $link; | 272 | $this->links[0] = $link; |
@@ -323,17 +306,9 @@ You use the community supported version of the original Shaarli project, by Seba | |||
323 | $link['tags'] = preg_replace('/(^|\s+)\.[^($|\s)]+\s*/', ' ', $link['tags']); | 306 | $link['tags'] = preg_replace('/(^|\s+)\.[^($|\s)]+\s*/', ' ', $link['tags']); |
324 | } | 307 | } |
325 | 308 | ||
326 | // Do not use the redirector for internal links (Shaarli note URL starting with a '?'). | 309 | $link['real_url'] = $link['url']; |
327 | if (!empty($this->redirector) && !startsWith($link['url'], '?')) { | 310 | |
328 | $link['real_url'] = $this->redirector; | 311 | $link['sticky'] = isset($link['sticky']) ? $link['sticky'] : false; |
329 | if ($this->redirectorEncode) { | ||
330 | $link['real_url'] .= urlencode(unescape($link['url'])); | ||
331 | } else { | ||
332 | $link['real_url'] .= $link['url']; | ||
333 | } | ||
334 | } else { | ||
335 | $link['real_url'] = $link['url']; | ||
336 | } | ||
337 | 312 | ||
338 | // To be able to load links before running the update, and prepare the update | 313 | // To be able to load links before running the update, and prepare the update |
339 | if (!isset($link['created'])) { | 314 | if (!isset($link['created'])) { |
diff --git a/application/bookmark/LinkUtils.php b/application/bookmark/LinkUtils.php index de5b61cb..988970bd 100644 --- a/application/bookmark/LinkUtils.php +++ b/application/bookmark/LinkUtils.php | |||
@@ -133,29 +133,15 @@ function count_private($links) | |||
133 | * In a string, converts URLs to clickable links. | 133 | * In a string, converts URLs to clickable links. |
134 | * | 134 | * |
135 | * @param string $text input string. | 135 | * @param string $text input string. |
136 | * @param string $redirector if a redirector is set, use it to gerenate links. | ||
137 | * @param bool $urlEncode Use `urlencode()` on the URL after the redirector or not. | ||
138 | * | 136 | * |
139 | * @return string returns $text with all links converted to HTML links. | 137 | * @return string returns $text with all links converted to HTML links. |
140 | * | 138 | * |
141 | * @see Function inspired from http://www.php.net/manual/en/function.preg-replace.php#85722 | 139 | * @see Function inspired from http://www.php.net/manual/en/function.preg-replace.php#85722 |
142 | */ | 140 | */ |
143 | function text2clickable($text, $redirector = '', $urlEncode = true) | 141 | function text2clickable($text) |
144 | { | 142 | { |
145 | $regex = '!(((?:https?|ftp|file)://|apt:|magnet:)\S+[a-z0-9\(\)]/?)!si'; | 143 | $regex = '!(((?:https?|ftp|file)://|apt:|magnet:)\S+[a-z0-9\(\)]/?)!si'; |
146 | 144 | return preg_replace($regex, '<a href="$1">$1</a>', $text); | |
147 | if (empty($redirector)) { | ||
148 | return preg_replace($regex, '<a href="$1">$1</a>', $text); | ||
149 | } | ||
150 | // Redirector is set, urlencode the final URL. | ||
151 | return preg_replace_callback( | ||
152 | $regex, | ||
153 | function ($matches) use ($redirector, $urlEncode) { | ||
154 | $url = $urlEncode ? urlencode($matches[1]) : $matches[1]; | ||
155 | return '<a href="' . $redirector . $url .'">'. $matches[1] .'</a>'; | ||
156 | }, | ||
157 | $text | ||
158 | ); | ||
159 | } | 145 | } |
160 | 146 | ||
161 | /** | 147 | /** |
@@ -197,15 +183,13 @@ function space2nbsp($text) | |||
197 | * Format Shaarli's description | 183 | * Format Shaarli's description |
198 | * | 184 | * |
199 | * @param string $description shaare's description. | 185 | * @param string $description shaare's description. |
200 | * @param string $redirector if a redirector is set, use it to gerenate links. | ||
201 | * @param bool $urlEncode Use `urlencode()` on the URL after the redirector or not. | ||
202 | * @param string $indexUrl URL to Shaarli's index. | 186 | * @param string $indexUrl URL to Shaarli's index. |
203 | 187 | ||
204 | * @return string formatted description. | 188 | * @return string formatted description. |
205 | */ | 189 | */ |
206 | function format_description($description, $redirector = '', $urlEncode = true, $indexUrl = '') | 190 | function format_description($description, $indexUrl = '') |
207 | { | 191 | { |
208 | return nl2br(space2nbsp(hashtag_autolink(text2clickable($description, $redirector, $urlEncode), $indexUrl))); | 192 | return nl2br(space2nbsp(hashtag_autolink(text2clickable($description), $indexUrl))); |
209 | } | 193 | } |
210 | 194 | ||
211 | /** | 195 | /** |