diff --git a/application/bookmark/Bookmark.php b/application/bookmark/Bookmark.php index 4238ef25..5c85a10c 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'; @@ -528,4 +528,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 b9328116..40d04731 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 2563906f..a617202d 100644 --- a/composer.json +++ b/composer.json @@ -77,5 +77,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 00000000..5d1be93d --- /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); +}