diff --git a/application/bookmark/Bookmark.php b/application/bookmark/Bookmark.php index 56751e15d..fdc22c6f6 100644 --- a/application/bookmark/Bookmark.php +++ b/application/bookmark/Bookmark.php @@ -16,7 +16,7 @@ * * @package Shaarli\Bookmark */ -class Bookmark +class Bookmark implements \JsonSerializable { /** @var string Date format used in string (former ID format) */ public const LINK_DATE_FORMAT = 'Ymd_His'; @@ -539,4 +539,20 @@ public function deleteTag(string $tag): void $this->tags = array_values($this->tags); } } + + public function jsonSerialize() + { + return [ + 'id' => $this->id, + 'shortUrl' => $this->shortUrl, + 'url' => $this->url, + 'title' => $this->title, + 'description' => $this->description, + 'tags' => $this->tags, + 'sticky' => $this->sticky, + 'created' => $this->created, + 'updated' => $this->updated, + 'private' => $this->private, + ]; + } } diff --git a/application/bookmark/BookmarkArray.php b/application/bookmark/BookmarkArray.php index 0c1a6ecab..392bc5167 100644 --- a/application/bookmark/BookmarkArray.php +++ b/application/bookmark/BookmarkArray.php @@ -14,7 +14,7 @@ * * @package Shaarli\Bookmark */ -class BookmarkArray implements \Iterator, \Countable, \ArrayAccess +class BookmarkArray implements \Iterator, \Countable, \ArrayAccess, \JsonSerializable { /** * @var Bookmark[] @@ -261,4 +261,9 @@ public function reorder(string $order = 'DESC', bool $ignoreSticky = false): voi $this->ids[$bookmark->getId()] = $key; } } + + public function jsonSerialize() + { + return $this->bookmarks; + } } diff --git a/composer.json b/composer.json index a8690dbea..393af1be5 100644 --- a/composer.json +++ b/composer.json @@ -78,5 +78,8 @@ "Shaarli\\Tests\\": "tests", "Shaarli\\Tests\\Utils\\": "tests/utils" } + }, + "scripts": { + "datastore2json": "php -f datastore2json.php" } } diff --git a/datastore2json.php b/datastore2json.php new file mode 100644 index 000000000..5d1be93df --- /dev/null +++ b/datastore2json.php @@ -0,0 +1,19 @@ +'; + $datastore_filepath = $argc > 1 ? $argv[1] : "data/datastore.php"; + $content = file_get_contents($datastore_filepath); + $links = unserialize(gzinflate(base64_decode( + substr($content, strlen($phpPrefix), -strlen($phpSuffix)) + ))); + print(json_encode($links).PHP_EOL); +}