Remove post/page buttons, handler consistency

master
Blog Manager Robot 3 years ago
parent 29173aff3b
commit b8cf933a5b
  1. 19
      Web/lib/MJB/Web.pm
  2. 57
      Web/lib/MJB/Web/Controller/Dashboard.pm
  3. 7
      Web/templates/dashboard/blog_pages.html.ep
  4. 16
      Web/templates/dashboard/blog_post.html.ep
  5. 16
      Web/templates/dashboard/blog_post_edit.html.ep
  6. 11
      Web/templates/dashboard/blog_posts.html.ep
  7. 21
      libs/MJB-Backend-Jekyll/lib/MJB/Backend/Jekyll.pm

@ -75,6 +75,13 @@ sub startup ($self) {
my $blog = $auth->under( '/dashboard/blog/:id' => sub ( $c ) {
my $blog = $c->stash->{blog} = $c->db->blog( $c->param('id') );
# Make sure that a blog can be loaded.
if ( ! $blog ) {
$c->redirect_to( $c->url_for( 'show_dashboard' ) );
return undef;
}
# Make sure the current user owns the blog that has been loaded.
if ( $blog->person->id ne $c->stash->{person}->id ) {
$c->redirect_to( $c->url_for( 'show_dashboard' ) );
return undef;
@ -128,12 +135,15 @@ sub startup ($self) {
# Dashboard / Blog Management
$auth->get ( '/dashboard' )->to('Dashboard#index' )->name('show_dashboard' );
# This Dashboard $blog route starts at /dashboard/blog/:id
$blog->get ( '/' )->to('Dashboard#blog' )->name('show_dashboard_blog' );
$blog->get ( '/posts' )->to('Dashboard#blog_posts' )->name('show_dashboard_blog_posts' );
$blog->get ( '/post/*mdfile' )->to('Dashboard#blog_post' )->name('show_dashboard_blog_post' );
$blog->post( '/post/*mdfile' )->to('Dashboard#do_blog_post' )->name('do_dashboard_blog_post' );
$blog->get ( '/post' )->to('Dashboard#blog_post_create' )->name('show_dashboard_blog_post_create' );
$blog->post( '/post' )->to('Dashboard#do_blog_post_create' )->name('do_dashboard_blog_post_create' );
$blog->get ( '/post' )->to('Dashboard#blog_post' )->name('show_dashboard_blog_post' );
$blog->post( '/post' )->to('Dashboard#do_blog_post' )->name('do_dashboard_blog_post' );
$blog->get ( '/post/edit' )->to('Dashboard#blog_post_edit' )->name('show_dashboard_blog_post_edit' );
$blog->post( '/post/edit' )->to('Dashboard#do_blog_post_edit' )->name('do_dashboard_blog_post_edit' );
$blog->post( '/post/remove' )->to('Dashboard#do_blog_post_remove' )->name('do_dashboard_blog_post_remove' );
$blog->get ( '/settings' )->to('Dashboard#blog_settings' )->name('show_dashboard_blog_settings' );
$blog->post( '/settings' )->to('Dashboard#do_blog_settings' )->name('do_dashboard_blog_settings' );
$blog->get ( '/config' )->to('Dashboard#blog_config' )->name('show_dashboard_blog_config' );
@ -149,6 +159,7 @@ sub startup ($self) {
$blog->post( '/page' )->to('Dashboard#do_blog_page' )->name('do_dashboard_blog_page' );
$blog->get ( '/page/edit' )->to('Dashboard#blog_page_edit' )->name('show_dashboard_blog_page_edit' );
$blog->post( '/page/edit' )->to('Dashboard#do_blog_page_edit' )->name('do_dashboard_blog_page_edit' );
$blog->post( '/page/remove' )->to('Dashboard#do_blog_page_remove' )->name('do_dashboard_blog_page_remove' );
# Blog Creation
$auth->get ( '/blog' )->to('Blog#create' )->name('show_blog_create' );

@ -2,32 +2,47 @@ package MJB::Web::Controller::Dashboard;
use Mojo::Base 'Mojolicious::Controller', -signatures;
sub index ($c) {
push @{$c->stash->{blogs}},
$c->stash->{person}->search_related('blogs')->all;
}
sub blog ( $c ) {
my $blog = $c->stash->{blog};
}
# TODO: There is a lot of repetition here, check out making a chain
# like the auth ones, but for loading up the blog and ensuring
# the user has access to it?
sub blog_posts ( $c ) {
my $blog = $c->stash->{blog};
my $blog_posts = $c->stash->{blog_posts} = [ map { $_->read } @{$c->jekyll($blog->domain->name)->list_posts} ];
}
sub blog_post ( $c ) {
sub blog_post_edit ( $c ) {
my $blog = $c->stash->{blog};
my $post = $c->stash->{post} = $c->jekyll($blog->domain->name)->get_post( $c->param('mdfile') );
}
sub do_blog_post ( $c ) {
sub do_blog_post_remove ( $c ) {
my $blog = $c->stash->{blog};
my $jekyll = $c->jekyll($blog->domain->name);
my $post = $jekyll->get_post( $c->param('file') );
$jekyll->remove_markdown_file( $post );
my $build_job_id = $c->minion->enqueue( 'deploy_blog', [ $blog->id ], {
notes => { '_bid_' . $blog->id => 1 },
priority => $blog->build_priority,
});
$blog->create_related( 'builds', { job_id => $build_job_id } );
$c->flash( confirmation => "That post has been removed." );
$c->redirect_to( $c->url_for( 'show_dashboard_blog_posts', { id => $blog->id } ) );
}
sub do_blog_post_edit ( $c ) {
my $blog = $c->stash->{blog};
my $title = $c->stash->{form_title} = $c->param('postTitle');
@ -53,7 +68,7 @@ sub do_blog_post ( $c ) {
$c->redirect_to( $c->url_for( 'show_dashboard_blog_posts', { id => $blog->id } ) );
}
sub blog_post_create ( $c ) {
sub blog_post ( $c ) {
my $blog = $c->stash->{blog};
}
@ -73,7 +88,7 @@ sub _make_slug ( $date, $title ) {
}
sub do_blog_post_create ( $c ) {
sub do_blog_post ( $c ) {
my $blog = $c->stash->{blog};
my $title = $c->stash->{form_title} = $c->param('postTitle');
@ -259,6 +274,29 @@ sub blog_page_edit ( $c ) {
}
sub do_blog_page_remove ( $c ) {
my $blog = $c->stash->{blog};
my $jekyll = $c->jekyll($blog->domain->name);
my $blog_pages = $c->stash->{blog_pages} = [ map { $_->read } @{$jekyll->list_pages} ];
my $rel_path = $c->param('file');
my ( $page ) = grep { $_->rel_path eq $rel_path } @{$blog_pages};
$jekyll->remove_markdown_file( $page );
my $build_job_id = $c->minion->enqueue( 'deploy_blog', [ $blog->id ], {
notes => { '_bid_' . $blog->id => 1 },
priority => $blog->build_priority,
});
$blog->create_related( 'builds', { job_id => $build_job_id } );
$c->flash( confirmation => "That page has been removed." );
$c->redirect_to( $c->url_for( 'show_dashboard_blog_pages', { id => $blog->id } ) );
}
sub do_blog_page_edit ( $c ) {
my $blog = $c->stash->{blog};
@ -317,7 +355,6 @@ sub do_blog_page ( $c ) {
$c->flash( confirmation => "Created Page " . $page->filename . "!" );
$c->redirect_to( $c->url_for( 'show_dashboard_blog_pages', { id => $blog->id } ) );
}
1;

@ -43,6 +43,7 @@
<th class="text-nowrap">Path</th>
<th class="text-nowrap">Type</th>
<th class="text-nowrap">Edit</th>
<th class="text-nowrap">Delete</th>
</tr>
</thead>
<tbody>
@ -51,6 +52,12 @@
<td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>"><%= $page->filename %></a></td>
<td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>"><%= $page->headers->{layout} %></a></td>
<td><a href="<%= $c->url_for( 'show_dashboard_blog_page_edit', { id => $blog->id } )->query( file => $page->rel_path ) %>">Edit Post</a></td>
<td>
<form style="margin-top: 1.5em; display: inline;" method="POST" action="<%= $c->url_for( 'do_dashboard_blog_page_remove' ) %>">
<input type="hidden" name="file" value="<%= $page->rel_path %>">
<button type="submit" class="btn btn-sm btn-primary">Delete Page</button>
</form>
</td>
</tr>
% }
</tbody>

@ -1,16 +1,16 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
%= include 'dashboard/_blog_nav', page => 'edit'
%= include 'dashboard/_blog_nav', page => 'create'
<form method="POST" action="<%= $c->url_for( 'do_dashboard_blog_post' ) %>">
<form method="POST" action="<%= $c->url_for( 'do_dashboard_blog_post_create' ) %>">
<div class="mt-3 mb-3">
<label for="postTitle" class="col-sm-2 col-form-label">Title</label>
<input type="text" class="form-control" id="postTitle" name="postTitle" value="<%= $post->headers->{title} %>">
<input type="text" class="form-control" id="postTitle" name="postTitle" value="<%= $c->stash->{form_title} %>">
</div>
<div class="mb-3">
<div class="mb-3 align-items-center">
<label for="postDate" class="col-sm-2 col-form-label">Date</label>
<input type="text" class="form-control datepicker" id="postDate" name="postDate" value="<%= $post->headers->{date} %>">
<input type="text" class="form-control datepicker" id="postDate" name="postDate" value="<%= $c->stash->{form_date} %>">
</div>
<div class="mb-3">
@ -18,11 +18,11 @@
Post Content -
See <a target="_blank" href="https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax">Markdown Syntax Docs</a>
</label>
<textarea class="form-control" id="postContent" name="postContent" rows="25"><%= $post->markdown %></textarea>
<textarea class="form-control" id="postContent" name="postContent" rows="25"><%= $c->stash->{form_content} %></textarea>
</div>
<div class="mb-3">
<input type="submit" class="btn btn-primary btn-sm float-end" width="100%" value="Update Post">
<input type="submit" class="btn btn-primary btn-sm float-end" width="100%" value="Create New Post">
</div>
</form>

@ -1,16 +1,16 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
%= include 'dashboard/_blog_nav', page => 'create'
%= include 'dashboard/_blog_nav', page => 'edit'
<form method="POST" action="<%= $c->url_for( 'do_dashboard_blog_post_create' ) %>">
<form method="POST" action="<%= $c->url_for( 'do_dashboard_blog_post' ) %>">
<div class="mt-3 mb-3">
<label for="postTitle" class="col-sm-2 col-form-label">Title</label>
<input type="text" class="form-control" id="postTitle" name="postTitle" value="<%= $c->stash->{form_title} %>">
<input type="text" class="form-control" id="postTitle" name="postTitle" value="<%= $post->headers->{title} %>">
</div>
<div class="mb-3 align-items-center">
<div class="mb-3">
<label for="postDate" class="col-sm-2 col-form-label">Date</label>
<input type="text" class="form-control datepicker" id="postDate" name="postDate" value="<%= $c->stash->{form_date} %>">
<input type="text" class="form-control datepicker" id="postDate" name="postDate" value="<%= $post->headers->{date} %>">
</div>
<div class="mb-3">
@ -18,11 +18,11 @@
Post Content -
See <a target="_blank" href="https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax">Markdown Syntax Docs</a>
</label>
<textarea class="form-control" id="postContent" name="postContent" rows="25"><%= $c->stash->{form_content} %></textarea>
<textarea class="form-control" id="postContent" name="postContent" rows="25"><%= $post->markdown %></textarea>
</div>
<div class="mb-3">
<input type="submit" class="btn btn-primary btn-sm float-end" width="100%" value="Create New Post">
<input type="submit" class="btn btn-primary btn-sm float-end" width="100%" value="Update Post">
</div>
</form>

@ -28,7 +28,7 @@
<div class="row mt-3 mb-3">
<div class="col">
<div class="float-end">
<a style="text-decoration: none;" href="<%= $c->url_for( 'show_dashboard_blog_post_create' ) %>">
<a style="text-decoration: none;" href="<%= $c->url_for( 'show_dashboard_blog_post' ) %>">
<span style="color: green; width: 32px; height: 32px;" data-feather="plus-circle"></span>
<cpan style="color: black; vertical-align: 30%; font-size: 16px">New Post</span>
</a>
@ -43,6 +43,7 @@
<th class="text-nowrap">Title</th>
<th class="text-nowrap">Date</th>
<th class="text-nowrap">Edit</th>
<th class="text-nowrap">Delete</th>
</tr>
</thead>
<tbody>
@ -50,7 +51,13 @@
<tr>
<td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>"><%= $post->headers->{title} %></a></td>
<td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>"><%= $post->headers->{date} %></a></td>
<td><a href="<%= $c->url_for( 'show_dashboard_blog_post', { id => $blog->id, mdfile => $post->filename } ) %>">Edit Post</a></td>
<td><a href="<%= $c->url_for( 'show_dashboard_blog_post_edit', { id => $blog->id } )->query( mdfile => $post->filename ) %>">Edit Post</a></td>
<td>
<form style="margin-top: 1.5em; display: inline;" method="POST" action="<%= $c->url_for( 'do_dashboard_blog_post_remove' ) %>">
<input type="hidden" name="file" value="<%= $post->filename %>">
<button type="submit" class="btn btn-sm btn-primary">Delete Post</button>
</form>
</td>
</tr>
% }
</tbody>

@ -134,6 +134,27 @@ sub list_posts {
return [ @files ];
}
sub remove_markdown_file {
my ( $self, $file ) = @_;
# Update the origin that is set
$self->system_command( [ qw( git rm ), $file->path ], {
chdir => $self->repo_path,
});
# Commit The Changes
$self->system_command( [ qw( git commit -m ), 'Removed ' . $file->filename ], {
chdir => $self->repo_path,
});
# Push the changes
$self->system_command( [ qw( git push origin master ) ], {
chdir => $self->repo_path,
});
return $self;
}
sub list_pages {
my ( $self ) = @_;

Loading…
Cancel
Save