Add blog build page, central nav.

master
Blog Manager Robot 3 years ago
parent 68323a2d0c
commit d0484b25f3
  1. 1
      Web/lib/MJB/Web.pm
  2. 14
      Web/lib/MJB/Web/Controller/Dashboard.pm
  3. 30
      Web/templates/dashboard/_blog_nav.html.ep
  4. 17
      Web/templates/dashboard/blog.html.ep
  5. 205
      Web/templates/dashboard/blog_builds.html.ep
  6. 21
      Web/templates/dashboard/blog_post.html.ep
  7. 21
      Web/templates/dashboard/blog_post_create.html.ep
  8. 17
      Web/templates/dashboard/blog_posts.html.ep
  9. 17
      Web/templates/dashboard/blog_settings.html.ep

@ -125,6 +125,7 @@ sub startup ($self) {
$auth->post( '/dashboard/blog/:id/settings' )->to('Dashboard#do_blog_settings' )->name('do_dashboard_blog_settings' );
$auth->get ( '/dashboard/blog/:id/config' )->to('Dashboard#blog_config' )->name('show_dashboard_blog_config' );
$auth->post( '/dashboard/blog/:id/config' )->to('Dashboard#do_blog_config' )->name('do_dashboard_blog_config' );
$auth->get ( '/dashboard/blog/:id/builds' )->to('Dashboard#blog_builds' )->name('show_dashboard_blog_builds' );
# Blog Management
$auth->get ( '/blog' )->to('Blog#create' )->name('show_blog_create' );

@ -245,6 +245,20 @@ sub do_blog_config ( $c ) {
$c->redirect_to( $c->url_for( 'show_dashboard_blog_config', { id => $blog->id } ) );
}
sub blog_builds ( $c ) {
my $blog = $c->stash->{blog} = $c->db->blog( $c->param('id') );
if ( $blog->person->id ne $c->stash->{person}->id ) {
$c->render(
text => "Error: This blog isn't owned by you.",
status => 404,
format => 'txt',
);
return;
}
}
1;

@ -17,3 +17,33 @@
</div>
</div>
</div>
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link <%= $page eq 'info' ? 'active' : '' %>" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link <%= $page eq 'posts' ? 'active' : '' %>" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
% if ( $page eq 'create' ) {
<li class="nav-item">
<a class="nav-link active" href="#">Post Creator</a>
</li>
% }
% if ( $page eq 'edit' ) {
<li class="nav-item">
<a class="nav-link active" href="#">Post Editor</a>
</li>
% }
<li class="nav-item">
<a class="nav-link <%= $page eq 'settings' ? 'active' : '' %>" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link <%= $page eq 'builds' ? 'active' : '' %>" href="<%= $c->url_for( 'show_dashboard_blog_builds' ) %>">Builds</a>
</li>
<li class="nav-item">
<a class="nav-link <%= $page eq 'hooks' ? 'active' : '' %>" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>

@ -1,21 +1,6 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
%= include 'dashboard/_blog_nav'
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>
%= include 'dashboard/_blog_nav', page => 'info'
% if ( my $confirmation = flash 'confirmation' ) {
<div style="margin-top: 2em" class="alert alert-success" role="alert">

@ -0,0 +1,205 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
%= include 'dashboard/_blog_nav', page => 'builds'
% if ( my $confirmation = flash 'confirmation' ) {
<div style="margin-top: 2em" class="alert alert-success" role="alert">
<%== $confirmation %>
</div>
% }
% if ( $c->stash->{success} ) {
<div style="margin-top: 2em" class="alert alert-success" role="alert">
<%= $c->stash->{success_message} %>
</div>
% }
% if ( $c->stash->{errors} ) {
<div style="margin-top: 2em" class="alert alert-danger" role="alert">
There were errors with your request that could not be resolved:
<ul>
% for my $error ( @{$c->stash->{errors}} ) {
<li><%= $error %></li>
% }
</ul>
</div>
% }
%# Job Rejection Panel
% if ( $c->param('reject_job') ) {
<div class="card mb-4 alert alert-danger">
<div class="card-header">
%= include '_svg/failed'
Build Rejected
</div>
<div class="card-body">
% my $sba = $blog->get_build_allowance;
<p>Rules</p>
<ul>
<li>Must wait <%= $sba->{wait_minutes}{required} %> between builds. You have waited <%= $sba->{wait_minutes}{current} %> minutes.</li>
<li>In one hour, <%= $sba->{builds_over_hour}{allowed} %> builds are allowed. You have built <%= $sba->{builds_over_hour}{used} %> times in that time.</li>
<li>In one day, <%= $sba->{builds_over_day}{allowed} %> builds are allowed. You have built <%= $sba->{builds_over_day}{used} %> times in that time.</li>
</ul>
</div>
</div>
% }
% if ( $c->stash->{success} ) {
<div style="margin-top: 2em" class="alert alert-success" role="alert">
<%= $c->stash->{success_message} %>
</div>
% }
% if ( $c->stash->{errors} ) {
<div style="margin-top: 2em" class="alert alert-danger" role="alert">
There were errors with your request that could not be resolved:
<ul>
% for my $error ( @{$c->stash->{errors}} ) {
<li><%= $error %></li>
% }
</ul>
</div>
% }
%= include 'dashboard/_website/information'
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="<%= $c->url_for( 'show_dashboard_website' ) %>">Jobs</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_website_limits' ) %>">Limits</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_website_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_website_hooks' ) %>">Hooks</a>
</li>
</ul>
%# Job Panel %
% my $index = 0;
% foreach my $build ( @{$blog->get_builds} ) {
% $index++;
% if ( my $build_job = $c->minion->job( $build->{job_id} ) ) {
% my $job = $build_job->info;
% if ( $job->{state} eq 'finished' ) {
<div class="card mt-4">
<div class="card-header alert-success">
%= include '_svg/checkmark'
Build <%= $build->{id} %> completed successfully. (Queued: <%= $build->{date} %>)
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_window_<%= $job->{id} %>">
%= include '_svg/chevron'
</button>
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body <%= $index == 1 ? '' : 'collapse' %>">
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_deploy_complete}, text => 'Deploy to Webserver' };
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_build_complete}, text => 'Build Website' };
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_clone_complete}, text => 'Clone Repo & Check Settings' };
<hr />
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_log_window_<%= $job->{id} %>">View Logs</button>
<div id="job_log_window_<%= $job->{id} %>" class="card-body collapse">
<hr />
<pre>
% for my $line ( @{$job->{notes}{logs}} ) {
<%= "$line\n" =%>
% }
</pre>
</div>
</div>
</div>
% } elsif ( $job->{state} eq 'inactive' ) {
<div class="card mb-4 alert-warning">
<div class="card-header">
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="visually-hidden">Waiting...</span>
</div>
Build <%= $build->{id} %> pending build. (Queued: <%= $build->{date} %>)
</div>
</div>
% } elsif ( $job->{state} eq 'failed' ) {
<div class="card mt-4">
<div class="card-header alert-warning">
%= include '_svg/failed'
Build <%= $build->{id} %> failed. (Queued: <%= $build->{date} %>)
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_window_<%= $job->{id} %>">
%= include '_svg/chevron'
</button>
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body <%= $index == 1 ? '' : 'collapse' %>">
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_deploy_complete}, text => 'Deploy to Webserver' };
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_build_complete}, text => 'Build Website' };
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_clone_complete}, text => 'Clone Repo & Check Settings' };
<hr />
% if ( ! ref $job->{result} ) {
<p class="text-danger"><strong>System Error: <%= $job->{result} %></strong></p>
% } else {
<p class="text-danger"><strong>Error: <%= $job->{result}{error} %></strong></p>
% }
<button class="btn" data-bs-toggle="collapse" data-bs-target="#job_log_window_<%= $job->{id} %>">View Logs</button>
<div id="job_log_window_<%= $job->{id} %>" class="card-body collapse">
<hr />
<pre>
% for my $line ( @{$job->{notes}{logs}} ) {
<%= "$line\n" =%>
% }
</pre>
</div>
</div>
</div>
% } elsif ( $job->{state} eq 'active' ) {
<div class="card mt-4">
<div class="card-header alert-warning">
<div class="spinner-grow spinner-grow-sm" role="status">
<span class="visually-hidden">Building...</span>
</div>
Building <%= $build->{id} %>... (Queued: <%= $build->{date} %>)
</div>
<div id="job_window_<%= $job->{id} %>" class="card-body">
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_deploy_complete}, text => 'Deploy to Webserver' };
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_build_complete}, text => 'Build Website' };
%= include 'dashboard/_website/milestone', milestone => { is_complete => $job->{notes}->{is_clone_complete}, text => 'Clone Repo & Check Settings' };
<hr />
<div id="job_log_window_<%= $job->{id} %>" class="card-body">
<hr />
<pre>
% for my $line ( @{$job->{notes}{logs}} ) {
<%= "$line\n" =%>
% }
</pre>
</div>
</div>
</div>
% } else {
Job in unknown state: <%= $build->{job_id} %>
%= $job->{state}
% }
% } else {
Job not found: <%= $build->{job_id} %>
% }
% }

@ -1,25 +1,6 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
%= include 'dashboard/_blog_nav'
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="#">Post Editor</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>
%= include 'dashboard/_blog_nav', page => 'edit'
<form method="POST" action="<%= $c->url_for( 'do_dashboard_blog_post' ) %>">
<div class="mt-3 mb-3">

@ -1,25 +1,6 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
%= include 'dashboard/_blog_nav'
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="#">Post Creator</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>
%= include 'dashboard/_blog_nav', page => 'create'
<form method="POST" action="<%= $c->url_for( 'do_dashboard_blog_post_create' ) %>">
<div class="mt-3 mb-3">

@ -1,21 +1,6 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
%= include 'dashboard/_blog_nav'
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>
%= include 'dashboard/_blog_nav', page => 'posts'
% if ( my $confirmation = flash 'confirmation' ) {
<div style="margin-top: 2em" class="alert alert-success" role="alert">

@ -1,21 +1,6 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
%= include 'dashboard/_blog_nav'
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>
%= include 'dashboard/_blog_nav', page => 'settings'
% if ( my $confirmation = flash 'confirmation' ) {
<div style="margin-top: 2em" class="alert alert-success" role="alert">

Loading…
Cancel
Save