diff options
author | ArthurHoaro <arthur@hoa.ro> | 2020-01-18 10:01:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-18 10:01:06 +0100 |
commit | 3fb29fdda04ca86e04422d49b86cf646d53c4f9d (patch) | |
tree | adf8512f93f5559ba87d0c9931969ae4ebea7133 /application/api/ApiUtils.php | |
parent | 796c4c57d085ae4589b53dfe8369ae9ba30ffdaf (diff) | |
parent | e26e2060f5470ce8bf4c5973284bae07b8af170a (diff) | |
download | Shaarli-3fb29fdda04ca86e04422d49b86cf646d53c4f9d.tar.gz Shaarli-3fb29fdda04ca86e04422d49b86cf646d53c4f9d.tar.zst Shaarli-3fb29fdda04ca86e04422d49b86cf646d53c4f9d.zip |
Store bookmarks as PHP objects and add a service layer to retriā¦ (#1307)
Store bookmarks as PHP objects and add a service layer to retrieve them
Diffstat (limited to 'application/api/ApiUtils.php')
-rw-r--r-- | application/api/ApiUtils.php | 79 |
1 files changed, 36 insertions, 43 deletions
diff --git a/application/api/ApiUtils.php b/application/api/ApiUtils.php index 5ac07c4d..5156a5f7 100644 --- a/application/api/ApiUtils.php +++ b/application/api/ApiUtils.php | |||
@@ -2,6 +2,7 @@ | |||
2 | namespace Shaarli\Api; | 2 | namespace Shaarli\Api; |
3 | 3 | ||
4 | use Shaarli\Api\Exceptions\ApiAuthorizationException; | 4 | use Shaarli\Api\Exceptions\ApiAuthorizationException; |
5 | use Shaarli\Bookmark\Bookmark; | ||
5 | use Shaarli\Http\Base64Url; | 6 | use Shaarli\Http\Base64Url; |
6 | 7 | ||
7 | /** | 8 | /** |
@@ -54,28 +55,28 @@ class ApiUtils | |||
54 | /** | 55 | /** |
55 | * Format a Link for the REST API. | 56 | * Format a Link for the REST API. |
56 | * | 57 | * |
57 | * @param array $link Link data read from the datastore. | 58 | * @param Bookmark $bookmark Bookmark data read from the datastore. |
58 | * @param string $indexUrl Shaarli's index URL (used for relative URL). | 59 | * @param string $indexUrl Shaarli's index URL (used for relative URL). |
59 | * | 60 | * |
60 | * @return array Link data formatted for the REST API. | 61 | * @return array Link data formatted for the REST API. |
61 | */ | 62 | */ |
62 | public static function formatLink($link, $indexUrl) | 63 | public static function formatLink($bookmark, $indexUrl) |
63 | { | 64 | { |
64 | $out['id'] = $link['id']; | 65 | $out['id'] = $bookmark->getId(); |
65 | // Not an internal link | 66 | // Not an internal link |
66 | if (! is_note($link['url'])) { | 67 | if (! $bookmark->isNote()) { |
67 | $out['url'] = $link['url']; | 68 | $out['url'] = $bookmark->getUrl(); |
68 | } else { | 69 | } else { |
69 | $out['url'] = $indexUrl . $link['url']; | 70 | $out['url'] = $indexUrl . $bookmark->getUrl(); |
70 | } | 71 | } |
71 | $out['shorturl'] = $link['shorturl']; | 72 | $out['shorturl'] = $bookmark->getShortUrl(); |
72 | $out['title'] = $link['title']; | 73 | $out['title'] = $bookmark->getTitle(); |
73 | $out['description'] = $link['description']; | 74 | $out['description'] = $bookmark->getDescription(); |
74 | $out['tags'] = preg_split('/\s+/', $link['tags'], -1, PREG_SPLIT_NO_EMPTY); | 75 | $out['tags'] = $bookmark->getTags(); |
75 | $out['private'] = $link['private'] == true; | 76 | $out['private'] = $bookmark->isPrivate(); |
76 | $out['created'] = $link['created']->format(\DateTime::ATOM); | 77 | $out['created'] = $bookmark->getCreated()->format(\DateTime::ATOM); |
77 | if (! empty($link['updated'])) { | 78 | if (! empty($bookmark->getUpdated())) { |
78 | $out['updated'] = $link['updated']->format(\DateTime::ATOM); | 79 | $out['updated'] = $bookmark->getUpdated()->format(\DateTime::ATOM); |
79 | } else { | 80 | } else { |
80 | $out['updated'] = ''; | 81 | $out['updated'] = ''; |
81 | } | 82 | } |
@@ -83,7 +84,7 @@ class ApiUtils | |||
83 | } | 84 | } |
84 | 85 | ||
85 | /** | 86 | /** |
86 | * Convert a link given through a request, to a valid link for LinkDB. | 87 | * Convert a link given through a request, to a valid Bookmark for the datastore. |
87 | * | 88 | * |
88 | * If no URL is provided, it will generate a local note URL. | 89 | * If no URL is provided, it will generate a local note URL. |
89 | * If no title is provided, it will use the URL as title. | 90 | * If no title is provided, it will use the URL as title. |
@@ -91,50 +92,42 @@ class ApiUtils | |||
91 | * @param array $input Request Link. | 92 | * @param array $input Request Link. |
92 | * @param bool $defaultPrivate Request Link. | 93 | * @param bool $defaultPrivate Request Link. |
93 | * | 94 | * |
94 | * @return array Formatted link. | 95 | * @return Bookmark instance. |
95 | */ | 96 | */ |
96 | public static function buildLinkFromRequest($input, $defaultPrivate) | 97 | public static function buildLinkFromRequest($input, $defaultPrivate) |
97 | { | 98 | { |
98 | $input['url'] = ! empty($input['url']) ? cleanup_url($input['url']) : ''; | 99 | $bookmark = new Bookmark(); |
100 | $url = ! empty($input['url']) ? cleanup_url($input['url']) : ''; | ||
99 | if (isset($input['private'])) { | 101 | if (isset($input['private'])) { |
100 | $private = filter_var($input['private'], FILTER_VALIDATE_BOOLEAN); | 102 | $private = filter_var($input['private'], FILTER_VALIDATE_BOOLEAN); |
101 | } else { | 103 | } else { |
102 | $private = $defaultPrivate; | 104 | $private = $defaultPrivate; |
103 | } | 105 | } |
104 | 106 | ||
105 | $link = [ | 107 | $bookmark->setTitle(! empty($input['title']) ? $input['title'] : ''); |
106 | 'title' => ! empty($input['title']) ? $input['title'] : $input['url'], | 108 | $bookmark->setUrl($url); |
107 | 'url' => $input['url'], | 109 | $bookmark->setDescription(! empty($input['description']) ? $input['description'] : ''); |
108 | 'description' => ! empty($input['description']) ? $input['description'] : '', | 110 | $bookmark->setTags(! empty($input['tags']) ? $input['tags'] : []); |
109 | 'tags' => ! empty($input['tags']) ? implode(' ', $input['tags']) : '', | 111 | $bookmark->setPrivate($private); |
110 | 'private' => $private, | 112 | |
111 | 'created' => new \DateTime(), | 113 | return $bookmark; |
112 | ]; | ||
113 | return $link; | ||
114 | } | 114 | } |
115 | 115 | ||
116 | /** | 116 | /** |
117 | * Update link fields using an updated link object. | 117 | * Update link fields using an updated link object. |
118 | * | 118 | * |
119 | * @param array $oldLink data | 119 | * @param Bookmark $oldLink data |
120 | * @param array $newLink data | 120 | * @param Bookmark $newLink data |
121 | * | 121 | * |
122 | * @return array $oldLink updated with $newLink values | 122 | * @return Bookmark $oldLink updated with $newLink values |
123 | */ | 123 | */ |
124 | public static function updateLink($oldLink, $newLink) | 124 | public static function updateLink($oldLink, $newLink) |
125 | { | 125 | { |
126 | foreach (['title', 'url', 'description', 'tags', 'private'] as $field) { | 126 | $oldLink->setTitle($newLink->getTitle()); |
127 | $oldLink[$field] = $newLink[$field]; | 127 | $oldLink->setUrl($newLink->getUrl()); |
128 | } | 128 | $oldLink->setDescription($newLink->getDescription()); |
129 | $oldLink['updated'] = new \DateTime(); | 129 | $oldLink->setTags($newLink->getTags()); |
130 | 130 | $oldLink->setPrivate($newLink->isPrivate()); | |
131 | if (empty($oldLink['url'])) { | ||
132 | $oldLink['url'] = '?' . $oldLink['shorturl']; | ||
133 | } | ||
134 | |||
135 | if (empty($oldLink['title'])) { | ||
136 | $oldLink['title'] = $oldLink['url']; | ||
137 | } | ||
138 | 131 | ||
139 | return $oldLink; | 132 | return $oldLink; |
140 | } | 133 | } |
@@ -143,7 +136,7 @@ class ApiUtils | |||
143 | * Format a Tag for the REST API. | 136 | * Format a Tag for the REST API. |
144 | * | 137 | * |
145 | * @param string $tag Tag name | 138 | * @param string $tag Tag name |
146 | * @param int $occurrences Number of links using this tag | 139 | * @param int $occurrences Number of bookmarks using this tag |
147 | * | 140 | * |
148 | * @return array Link data formatted for the REST API. | 141 | * @return array Link data formatted for the REST API. |
149 | */ | 142 | */ |