Added post deleting
This commit is contained in:
parent
9a191c8237
commit
a140e04ca3
8 changed files with 58 additions and 2 deletions
1
TODO
1
TODO
|
@ -7,7 +7,6 @@ everything related to posts:
|
||||||
- time of last edit
|
- time of last edit
|
||||||
- time of last feature
|
- time of last feature
|
||||||
- how many times the post was featured
|
- how many times the post was featured
|
||||||
- delete
|
|
||||||
- feature
|
- feature
|
||||||
- fav
|
- fav
|
||||||
- score (see notes about scoring)
|
- score (see notes about scoring)
|
||||||
|
|
|
@ -41,6 +41,7 @@ listSketchyPosts = anonymous, regularUser, powerUser, moderator, administ
|
||||||
listUnsafePosts = anonymous, regularUser, powerUser, moderator, administrator
|
listUnsafePosts = anonymous, regularUser, powerUser, moderator, administrator
|
||||||
uploadPosts = regularUser, powerUser, moderator, administrator
|
uploadPosts = regularUser, powerUser, moderator, administrator
|
||||||
uploadPostsAnonymously = regularUser, powerUser, moderator, administrator
|
uploadPostsAnonymously = regularUser, powerUser, moderator, administrator
|
||||||
|
deletePosts = moderator, administrator
|
||||||
|
|
||||||
listTags = anonymous, regularUser, powerUser, moderator, administrator
|
listTags = anonymous, regularUser, powerUser, moderator, administrator
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ App.Auth = function(_, jQuery, util, api, appState, promise) {
|
||||||
listUnsafePosts: 'listUnsafePosts',
|
listUnsafePosts: 'listUnsafePosts',
|
||||||
uploadPosts: 'uploadPosts',
|
uploadPosts: 'uploadPosts',
|
||||||
uploadPostsAnonymously: 'uploadPostsAnonymously',
|
uploadPostsAnonymously: 'uploadPostsAnonymously',
|
||||||
|
deletePosts: 'deletePosts',
|
||||||
|
|
||||||
listTags: 'listTags',
|
listTags: 'listTags',
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,6 +7,8 @@ App.Presenters.PostPresenter = function(
|
||||||
util,
|
util,
|
||||||
promise,
|
promise,
|
||||||
api,
|
api,
|
||||||
|
auth,
|
||||||
|
router,
|
||||||
topNavigationPresenter,
|
topNavigationPresenter,
|
||||||
messagePresenter) {
|
messagePresenter) {
|
||||||
|
|
||||||
|
@ -16,11 +18,14 @@ App.Presenters.PostPresenter = function(
|
||||||
var postContentTemplate;
|
var postContentTemplate;
|
||||||
var post;
|
var post;
|
||||||
var postNameOrId;
|
var postNameOrId;
|
||||||
|
var privileges = {};
|
||||||
|
|
||||||
function init(args, loaded) {
|
function init(args, loaded) {
|
||||||
postNameOrId = args.postNameOrId;
|
postNameOrId = args.postNameOrId;
|
||||||
topNavigationPresenter.select('posts');
|
topNavigationPresenter.select('posts');
|
||||||
|
|
||||||
|
privileges.canDeletePosts = auth.hasPrivilege(auth.privileges.deletePosts);
|
||||||
|
|
||||||
promise.waitAll(
|
promise.waitAll(
|
||||||
util.promiseTemplate('post'),
|
util.promiseTemplate('post'),
|
||||||
util.promiseTemplate('post-content'),
|
util.promiseTemplate('post-content'),
|
||||||
|
@ -50,7 +55,25 @@ App.Presenters.PostPresenter = function(
|
||||||
formatRelativeTime: util.formatRelativeTime,
|
formatRelativeTime: util.formatRelativeTime,
|
||||||
formatFileSize: util.formatFileSize,
|
formatFileSize: util.formatFileSize,
|
||||||
postContentTemplate: postContentTemplate,
|
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 {
|
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);
|
||||||
|
|
|
@ -79,6 +79,21 @@
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
<% if (_.any(privileges)) { %>
|
||||||
|
<h1>Options</h1>
|
||||||
|
|
||||||
|
<ul class="operations">
|
||||||
|
<% if (privileges.canDeletePosts) { %>
|
||||||
|
<li>
|
||||||
|
<a href="#" class="delete">
|
||||||
|
Delete
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<% } %>
|
||||||
|
</ul>
|
||||||
|
<% } %>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="post-view">
|
<div id="post-view">
|
||||||
|
|
|
@ -25,6 +25,7 @@ final class PostController extends AbstractController
|
||||||
$router->post('/api/posts', [$this, 'createPost']);
|
$router->post('/api/posts', [$this, 'createPost']);
|
||||||
$router->get('/api/posts', [$this, 'getFiltered']);
|
$router->get('/api/posts', [$this, 'getFiltered']);
|
||||||
$router->get('/api/posts/:postNameOrId', [$this, 'getByNameOrId']);
|
$router->get('/api/posts/:postNameOrId', [$this, 'getByNameOrId']);
|
||||||
|
$router->delete('/api/posts/:postNameOrId', [$this, 'deletePost']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByNameOrId($postNameOrId)
|
public function getByNameOrId($postNameOrId)
|
||||||
|
@ -57,4 +58,10 @@ final class PostController extends AbstractController
|
||||||
$post = $this->postService->createPost($formData);
|
$post = $this->postService->createPost($formData);
|
||||||
return $this->postViewProxy->fromEntity($post);
|
return $this->postViewProxy->fromEntity($post);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function deletePost($postNameOrId)
|
||||||
|
{
|
||||||
|
$post = $this->postService->getByNameOrId($postNameOrId);
|
||||||
|
$this->postService->deletePost($post);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ class Privilege
|
||||||
const LIST_UNSAFE_POSTS = 'listUnsafePosts';
|
const LIST_UNSAFE_POSTS = 'listUnsafePosts';
|
||||||
const UPLOAD_POSTS = 'uploadPosts';
|
const UPLOAD_POSTS = 'uploadPosts';
|
||||||
const UPLOAD_POSTS_ANONYMOUSLY = 'uploadPostsAnonymously';
|
const UPLOAD_POSTS_ANONYMOUSLY = 'uploadPostsAnonymously';
|
||||||
|
const DELETE_POSTS = 'deletePosts';
|
||||||
|
|
||||||
const LIST_TAGS = 'listTags';
|
const LIST_TAGS = 'listTags';
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,6 +190,15 @@ class PostService
|
||||||
$post->setTags($tags);
|
$post->setTags($tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function deletePost(\Szurubooru\Entities\Post $post)
|
||||||
|
{
|
||||||
|
$transactionFunc = function() use ($post)
|
||||||
|
{
|
||||||
|
$this->postDao->deleteById($post->getId());
|
||||||
|
};
|
||||||
|
$this->transactionManager->commit($transactionFunc);
|
||||||
|
}
|
||||||
|
|
||||||
private function assertNoPostWithThisContentChecksum(\Szurubooru\Entities\Post $parent)
|
private function assertNoPostWithThisContentChecksum(\Szurubooru\Entities\Post $parent)
|
||||||
{
|
{
|
||||||
$checksumToCheck = $parent->getContentChecksum();
|
$checksumToCheck = $parent->getContentChecksum();
|
||||||
|
|
Loading…
Reference in a new issue