diff --git a/appinfo/routes.php b/appinfo/routes.php index 8e1d357..e4f211c 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -11,6 +11,12 @@ return ['resources' => 'url' => '/', 'verb' => 'GET' ], + // Share + [ + 'name' => 'share#destroy', + 'url' => '/share/{noteId}', + 'verb' => 'DELETE' + ], // User Settings [ 'name' => 'settings#setUserValue', diff --git a/js/script.js b/js/script.js index f21ce8b..709b16a 100644 --- a/js/script.js +++ b/js/script.js @@ -143,6 +143,22 @@ Notes.prototype = { }); return deferred.promise(); }, + // Delete shared note. + forgetShare: function (note) { + var self = this; + var deferred = $.Deferred(); + $.ajax({ + url: OC.generateUrl('/apps/quicknotes/share') + '/' + note.id, + method: 'DELETE' + }).done(function () { + var index = self._notes.findIndex((aNote) => aNote.id === note.id); + self._notes.splice(index, 1); + deferred.resolve(); + }).fail(function () { + deferred.reject(); + }); + return deferred.promise(); + }, // Get the users to share in the notes _loadUsersSharing: function () { var self = this; @@ -328,18 +344,33 @@ View.prototype = { t('quicknotes', 'Delete note'), function(result) { if (result) { - self._notes.remove(note).done(function () { - if (self._notes.length() > 0) { - $(".notes-grid").isotope('remove', gridnote.parent()) - .isotope('layout'); - self.showAll(); - self.renderNavigation(); - } else { - self.render(); - } - }).fail(function () { - alert('Could not delete note, not found'); - }); + if (!note.is_shared) { + self._notes.remove(note).done(function () { + if (self._notes.length() > 0) { + $(".notes-grid").isotope('remove', gridnote.parent()) + .isotope('layout'); + self.showAll(); + self.renderNavigation(); + } else { + self.render(); + } + }).fail(function () { + alert('Could not delete note, not found'); + }); + } else { + self._notes.forgetShare(note).done(function () { + if (self._notes.length() > 0) { + $(".notes-grid").isotope('remove', gridnote.parent()) + .isotope('layout'); + self.showAll(); + self.renderNavigation(); + } else { + self.render(); + } + }).fail(function () { + alert('Could not delete note, not found'); + }); + } } }, true diff --git a/lib/Controller/ShareController.php b/lib/Controller/ShareController.php new file mode 100644 index 0000000..1d5b6fe --- /dev/null +++ b/lib/Controller/ShareController.php @@ -0,0 +1,68 @@ + + * + * @author 2020 Matias De lellis + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace OCA\QuickNotes\Controller; + +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\JSONResponse; +use OCP\AppFramework\Controller; + +use OCP\IRequest; + +use OCA\QuickNotes\Db\NoteShare; +use OCA\QuickNotes\Db\NoteShareMapper; + + +class ShareController extends Controller { + + private $noteShareMapper; + private $userId; + + public function __construct($AppName, + IRequest $request, + NoteShareMapper $noteShareMapper, + $userId) + { + parent::__construct($AppName, $request); + + $this->noteShareMapper = $noteShareMapper; + $this->userId = $userId; + } + + /** + * @NoAdminRequired + * + * @param int $noteId + */ + public function destroy(int $noteId): JSONResponse { + try { + $noteShare = $this->noteShareMapper->findByNoteAndUser($noteId, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_NOT_FOUND); + } + + $this->noteShareMapper->delete($noteShare); + + return new JSONResponse([]); + } + +}