diff options
author | ArthurHoaro <arthur@hoa.ro> | 2020-10-22 16:21:03 +0200 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2020-11-05 17:54:42 +0100 |
commit | b3bd8c3e8d367975980043e772f7cd78b7f96bc6 (patch) | |
tree | ec79899ea564c093d8b0578f3e614881a4ea7c3d /application/bookmark/Bookmark.php | |
parent | 48df9f45b8c4b2995c1e04146071628668531b37 (diff) | |
download | Shaarli-b3bd8c3e8d367975980043e772f7cd78b7f96bc6.tar.gz Shaarli-b3bd8c3e8d367975980043e772f7cd78b7f96bc6.tar.zst Shaarli-b3bd8c3e8d367975980043e772f7cd78b7f96bc6.zip |
Feature: support any tag separator
So it allows to have multiple words tags.
Breaking change: commas ',' are no longer a default separator.
Fixes #594
Diffstat (limited to 'application/bookmark/Bookmark.php')
-rw-r--r-- | application/bookmark/Bookmark.php | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/application/bookmark/Bookmark.php b/application/bookmark/Bookmark.php index 4810c5e6..8aaeb9d8 100644 --- a/application/bookmark/Bookmark.php +++ b/application/bookmark/Bookmark.php | |||
@@ -60,11 +60,13 @@ class Bookmark | |||
60 | /** | 60 | /** |
61 | * Initialize a link from array data. Especially useful to create a Bookmark from former link storage format. | 61 | * Initialize a link from array data. Especially useful to create a Bookmark from former link storage format. |
62 | * | 62 | * |
63 | * @param array $data | 63 | * @param array $data |
64 | * @param string $tagsSeparator Tags separator loaded from the config file. | ||
65 | * This is a context data, and it should *never* be stored in the Bookmark object. | ||
64 | * | 66 | * |
65 | * @return $this | 67 | * @return $this |
66 | */ | 68 | */ |
67 | public function fromArray(array $data): Bookmark | 69 | public function fromArray(array $data, string $tagsSeparator = ' '): Bookmark |
68 | { | 70 | { |
69 | $this->id = $data['id'] ?? null; | 71 | $this->id = $data['id'] ?? null; |
70 | $this->shortUrl = $data['shorturl'] ?? null; | 72 | $this->shortUrl = $data['shorturl'] ?? null; |
@@ -77,7 +79,7 @@ class Bookmark | |||
77 | if (is_array($data['tags'])) { | 79 | if (is_array($data['tags'])) { |
78 | $this->tags = $data['tags']; | 80 | $this->tags = $data['tags']; |
79 | } else { | 81 | } else { |
80 | $this->tags = preg_split('/\s+/', $data['tags'] ?? '', -1, PREG_SPLIT_NO_EMPTY); | 82 | $this->tags = tags_str2array($data['tags'] ?? '', $tagsSeparator); |
81 | } | 83 | } |
82 | if (! empty($data['updated'])) { | 84 | if (! empty($data['updated'])) { |
83 | $this->updated = $data['updated']; | 85 | $this->updated = $data['updated']; |
@@ -348,7 +350,12 @@ class Bookmark | |||
348 | */ | 350 | */ |
349 | public function setTags(?array $tags): Bookmark | 351 | public function setTags(?array $tags): Bookmark |
350 | { | 352 | { |
351 | $this->setTagsString(implode(' ', $tags ?? [])); | 353 | $this->tags = array_map( |
354 | function (string $tag): string { | ||
355 | return $tag[0] === '-' ? substr($tag, 1) : $tag; | ||
356 | }, | ||
357 | tags_filter($tags, ' ') | ||
358 | ); | ||
352 | 359 | ||
353 | return $this; | 360 | return $this; |
354 | } | 361 | } |
@@ -420,11 +427,13 @@ class Bookmark | |||
420 | } | 427 | } |
421 | 428 | ||
422 | /** | 429 | /** |
423 | * @return string Bookmark's tags as a string, separated by a space | 430 | * @param string $separator Tags separator loaded from the config file. |
431 | * | ||
432 | * @return string Bookmark's tags as a string, separated by a separator | ||
424 | */ | 433 | */ |
425 | public function getTagsString(): string | 434 | public function getTagsString(string $separator = ' '): string |
426 | { | 435 | { |
427 | return implode(' ', $this->getTags()); | 436 | return tags_array2str($this->getTags(), $separator); |
428 | } | 437 | } |
429 | 438 | ||
430 | /** | 439 | /** |
@@ -444,19 +453,13 @@ class Bookmark | |||
444 | * - trailing dash in tags will be removed | 453 | * - trailing dash in tags will be removed |
445 | * | 454 | * |
446 | * @param string|null $tags | 455 | * @param string|null $tags |
456 | * @param string $separator Tags separator loaded from the config file. | ||
447 | * | 457 | * |
448 | * @return $this | 458 | * @return $this |
449 | */ | 459 | */ |
450 | public function setTagsString(?string $tags): Bookmark | 460 | public function setTagsString(?string $tags, string $separator = ' '): Bookmark |
451 | { | 461 | { |
452 | // Remove first '-' char in tags. | 462 | $this->setTags(tags_str2array($tags, $separator)); |
453 | $tags = preg_replace('/(^| )\-/', '$1', $tags ?? ''); | ||
454 | // Explode all tags separted by spaces or commas | ||
455 | $tags = preg_split('/[\s,]+/', $tags); | ||
456 | // Remove eventual empty values | ||
457 | $tags = array_values(array_filter($tags)); | ||
458 | |||
459 | $this->tags = $tags; | ||
460 | 463 | ||
461 | return $this; | 464 | return $this; |
462 | } | 465 | } |
@@ -507,7 +510,7 @@ class Bookmark | |||
507 | */ | 510 | */ |
508 | public function renameTag(string $fromTag, string $toTag): void | 511 | public function renameTag(string $fromTag, string $toTag): void |
509 | { | 512 | { |
510 | if (($pos = array_search($fromTag, $this->tags)) !== false) { | 513 | if (($pos = array_search($fromTag, $this->tags ?? [])) !== false) { |
511 | $this->tags[$pos] = trim($toTag); | 514 | $this->tags[$pos] = trim($toTag); |
512 | } | 515 | } |
513 | } | 516 | } |
@@ -519,7 +522,7 @@ class Bookmark | |||
519 | */ | 522 | */ |
520 | public function deleteTag(string $tag): void | 523 | public function deleteTag(string $tag): void |
521 | { | 524 | { |
522 | if (($pos = array_search($tag, $this->tags)) !== false) { | 525 | if (($pos = array_search($tag, $this->tags ?? [])) !== false) { |
523 | unset($this->tags[$pos]); | 526 | unset($this->tags[$pos]); |
524 | $this->tags = array_values($this->tags); | 527 | $this->tags = array_values($this->tags); |
525 | } | 528 | } |