diff --git a/TODO b/TODO index 778a5e8f..0f86cd51 100644 --- a/TODO +++ b/TODO @@ -7,7 +7,6 @@ everything related to posts: - time of last edit - time of last feature - how many times the post was featured - - delete - feature - fav - score (see notes about scoring) diff --git a/data/config.ini b/data/config.ini index 2fc95160..c6fb52b9 100644 --- a/data/config.ini +++ b/data/config.ini @@ -41,6 +41,7 @@ listSketchyPosts = anonymous, regularUser, powerUser, moderator, administ listUnsafePosts = anonymous, regularUser, powerUser, moderator, administrator uploadPosts = regularUser, powerUser, moderator, administrator uploadPostsAnonymously = regularUser, powerUser, moderator, administrator +deletePosts = moderator, administrator listTags = anonymous, regularUser, powerUser, moderator, administrator diff --git a/public_html/js/Auth.js b/public_html/js/Auth.js index 2ffcf07d..e4fced09 100644 --- a/public_html/js/Auth.js +++ b/public_html/js/Auth.js @@ -23,6 +23,7 @@ App.Auth = function(_, jQuery, util, api, appState, promise) { listUnsafePosts: 'listUnsafePosts', uploadPosts: 'uploadPosts', uploadPostsAnonymously: 'uploadPostsAnonymously', + deletePosts: 'deletePosts', listTags: 'listTags', }; diff --git a/public_html/js/Presenters/PostPresenter.js b/public_html/js/Presenters/PostPresenter.js index 3818907e..a042b55c 100644 --- a/public_html/js/Presenters/PostPresenter.js +++ b/public_html/js/Presenters/PostPresenter.js @@ -7,6 +7,8 @@ App.Presenters.PostPresenter = function( util, promise, api, + auth, + router, topNavigationPresenter, messagePresenter) { @@ -16,11 +18,14 @@ App.Presenters.PostPresenter = function( var postContentTemplate; var post; var postNameOrId; + var privileges = {}; function init(args, loaded) { postNameOrId = args.postNameOrId; topNavigationPresenter.select('posts'); + privileges.canDeletePosts = auth.hasPrivilege(auth.privileges.deletePosts); + promise.waitAll( util.promiseTemplate('post'), util.promiseTemplate('post-content'), @@ -50,7 +55,25 @@ App.Presenters.PostPresenter = function( formatRelativeTime: util.formatRelativeTime, formatFileSize: util.formatFileSize, postContentTemplate: postContentTemplate, + privileges: privileges, })); + + $el.find('.delete').click(deleteButtonClicked); + } + + function deleteButtonClicked(e) { + e.preventDefault(); + if (window.confirm('Do you really want to delete this post?')) { + deletePost(); + } + } + + function deletePost() { + api.delete('/posts/' + post.id).then(function(response) { + router.navigate('#/posts'); + }).fail(function(response) { + messagePresenter.showError($messages, response.json && response.json.error || response); + }); } return { @@ -60,4 +83,4 @@ App.Presenters.PostPresenter = function( }; -App.DI.register('postPresenter', ['_', 'jQuery', 'util', 'promise', 'api', 'topNavigationPresenter', 'messagePresenter'], App.Presenters.PostPresenter); +App.DI.register('postPresenter', ['_', 'jQuery', 'util', 'promise', 'api', 'auth', 'router', 'topNavigationPresenter', 'messagePresenter'], App.Presenters.PostPresenter); diff --git a/public_html/templates/post.tpl b/public_html/templates/post.tpl index 340da497..4a6cba7f 100644 --- a/public_html/templates/post.tpl +++ b/public_html/templates/post.tpl @@ -79,6 +79,21 @@ <% } %> + + <% if (_.any(privileges)) { %> +