Skip to content

Commit 6fb1350

Browse files
authored
Merge pull request #1493 from dradis/issuelib/add-sample-entries
Add Issue Library and import views
2 parents f103ed9 + 46e8b43 commit 6fb1350

File tree

10 files changed

+204
-4
lines changed

10 files changed

+204
-4
lines changed

CHANGELOG

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
- Rename addon upload/parent nodes and add icons
1111
- Update associated evidence, notes and child nodes' updated_at columns on node merge
1212
- Warn on node merge that methodology will not be copied
13-
- Show don't gate: Word/Excel templates
13+
- Show don't gate:
14+
- Issue Library
15+
- Word/Excel templates
1416
- Sidebar: Add resize functionality
1517
- Textile:
1618
- Add support for paragraph alignment
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class StaticPagesController < AuthenticatedController
2+
include ProjectScoped
3+
4+
def issuelib_index; end
5+
6+
def issuelib_import; end
7+
end
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<p>You'll need an import plugin like:</p>
22
<ul class="fa-ul">
33
<li><i class="fa-solid fa-li fa-chevron-right"></i><a href="https://dradis.com/integrations/mediawiki.html?utm_source=ce&utm_medium=app" target="_blank">MediaWiki</a></li>
4-
<li><i class="fa-solid fa-li fa-chevron-right"></i><a href="javascript:void(0)" class="js-try-pro" data-term="issuelib" data-url="https://dradis.com/pro/pages/issuelib.html"><i class="fa-solid fa-book"></i> Built-in IssueLibrary</a></li>
4+
<li><i class="fa-solid fa-li fa-chevron-right"></i>
5+
<%= link_to static_issuelib_path do %>
6+
<i class="fa-solid fa-book"></i> Built-in IssueLibrary
7+
<% end %>
8+
</li>
59
</ul>

app/views/issues/_import_box.html.erb

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,23 @@
1919
</p>
2020
<p class="mb-2">Libraries:</p>
2121
<ul class="fa-ul">
22-
<li><i class="fa-solid fa-li fa-chevron-right"></i><a href="https://dradis.com/integrations/mediawiki.html?utm_source=ce&utm_medium=app" target="_blank">MediaWiki</a></li>
23-
<li><i class="fa-solid fa-li fa-chevron-right"></i><a href="javascript:void(0)" class="js-try-pro" data-term="issuelib" data-url="https://dradis.com/pro/pages/issuelib.html"><i class="fa-solid fa-book"></i> Built-in Issue Library</a></li>
22+
<li><i class="fa-solid fa-li fa-chevron-right"></i>
23+
<a href="https://dradis.com/integrations/mediawiki.html?utm_source=ce&utm_medium=app" target="_blank">
24+
MediaWiki
25+
</a>
26+
</li>
27+
<li><i class="fa-solid fa-li fa-chevron-right"></i>
28+
<%= link_to static_issuelib_path do %>
29+
<i class="fa-solid fa-book"></i> Built-in Issue Library
30+
<% end %>
31+
</li>
2432
</ul>
33+
<form action="<%= static_issuelib_import_path %>" class="form-inline mb-4" method="get">
34+
<div class="inset-button-wrapper">
35+
<input type="text" class="form-control search-query", placeholder="Search Issue Library" />
36+
<button type="submit" class="btn btn-primary">Search</button>
37+
</div>
38+
</form>
2539
<% else %>
2640
<% Dradis::Plugins::with_feature(:import).each do |plugin| %>
2741
<div>

app/views/layouts/hera/navbar/main_nav/_ce.html.erb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<li class="nav-item d-lg-none">
22
<%= render "layouts/hera/navbar/projects/search" %>
33
</li>
4+
45
<li class="nav-item">
56
<%= link_to 'javascript:void(0)', class: 'js-try-pro nav-link', data: { term: 'projects', url: 'https://dradis.com/pro/pages/projects.html' } do %>
67
<span>Projects</span>

app/views/layouts/hera/navbar/main_nav/_tools_menu.html.erb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,9 @@
66

77
<ul class="dropdown-menu" aria-labelledby="tools-dropdown">
88
<%= render_view_hooks('tools_menu') %>
9+
<% if !defined?(Dradis::Pro) %>
10+
<li><div class="dropdown-divider"></div></li>
11+
<li><%= link_to 'Issue Library', static_issuelib_path, class: 'dropdown-item' %></li>
12+
<% end %>
913
</ul>
1014
</li>
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<div class="dataTables_wrapper">
2+
<table class="table table-striped dataTable mb-0">
3+
<thead>
4+
<tr>
5+
<th class="no-sort" data-column-visible="false"><span class="visually-hidden">Select</span></th>
6+
<% columns.each_with_index do |column, index| %>
7+
<th><%= column %></th>
8+
<% end %>
9+
</tr>
10+
</thead>
11+
<tbody>
12+
<% entries = ['Auto-complete in password field', 'DOM-based cross-site scripting (XSS)', 'Insufficient cross-site request forgery (CSRF) protection', 'Reflected cross-site scripting (XSS)'] %>
13+
<% entries.each_with_index do |entry, index| %>
14+
<tr id="entry-<%= index %>">
15+
<td><input type="checkbox" /></td>
16+
<td>
17+
<a
18+
href="javascript:void(0)"
19+
class="js-try-pro"
20+
data-term="issuelib"
21+
data-url="https://dradis.com/pro/pages/issuelib.html">
22+
<%= entry %>
23+
</a>
24+
</td>
25+
<td>Published</td>
26+
<% if import %>
27+
<% @default_button_state = 'published' %>
28+
<td class="column-actions">
29+
<div class="btn-group btn-states" data-behavior="btn-states">
30+
<a
31+
href="javascript:void(0)"
32+
class="btn btn-primary js-try-pro"
33+
data-term="issuelib"
34+
data-url="https://dradis.com/pro/pages/issuelib.html">
35+
<i class="fa-solid fa-plus"></i> Add issue
36+
(<span data-behavior="state-button"><%= @default_button_state.humanize %></span>)
37+
</a>
38+
<a href="#" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
39+
<span class="visually-hidden">Toggle Dropdown</span>
40+
</a>
41+
<div class="dropdown-menu">
42+
<%= collection_radio_buttons(entry, :state, [['draft', 'draft'], ['ready_for_review', 'ready_for_review'], ['published', 'published']], :first, :first) do |b| %>
43+
<span>
44+
<%= b.label class: 'state', for: "#{entry}_state_#{b.value}" do %>
45+
<%= b.radio_button id: "#{entry}_state_#{b.value}", class: 'd-none', data: { behavior: 'state-radio' }, checked: b.value == @default_button_state %>
46+
<i class="fa-solid fa-check fa-fw"></i>
47+
<div class="state-label">
48+
<p data-behavior="state-label"><%= b.text.humanize %></p>
49+
<% case b.value %>
50+
<% when 'draft' %>
51+
<span>Still not ready for review or the report.</span>
52+
<% when 'ready_for_review' %>
53+
<span>All done on this one, ready for QA.</span>
54+
<% when 'published' %>
55+
<span>Content is final, ready for the report.</span>
56+
<% end %>
57+
</div>
58+
<% end %>
59+
</span>
60+
<% end %>
61+
</div>
62+
</div>
63+
</td>
64+
<% else %>
65+
<td>on <%= (Date.today - 1.month).strftime('%b %d, %Y') %></td>
66+
<td>on <%= Date.today.strftime('%b %d, %Y') %></td>
67+
<% end %>
68+
</tr>
69+
<% end %>
70+
</tbody>
71+
</table>
72+
</div>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<% content_for :title, 'Import Issues' %>
2+
3+
<ol class="breadcrumb">
4+
<li class="breadcrumb-item">
5+
<%= link_to 'Dashboard', main_app.root_path %>
6+
</li>
7+
<li class="breadcrumb-item">
8+
<%= link_to 'Issue Library', main_app.static_issuelib_path %>
9+
</li>
10+
<li class="breadcrumb-item active">
11+
Import Issues
12+
</li>
13+
</ol>
14+
15+
<div class="content-container">
16+
<div id="issue-viewer">
17+
<div class="results">
18+
<div class="page page-none">
19+
<div class="header">
20+
<div class="header-inner">
21+
<h4 class="header-underline">Search results</h4>
22+
</div>
23+
</div>
24+
25+
<%= render partial: 'issuelib_entries',
26+
locals: {
27+
columns: ['Title', 'State', ''],
28+
import: true
29+
}
30+
%>
31+
</div>
32+
</div>
33+
</div>
34+
</div>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<% content_for :title, 'Issue Library' %>
2+
3+
<% content_for :breadcrumbs do %>
4+
<ol class="breadcrumb">
5+
<li class="breadcrumb-item"><%= link_to 'Dashboard', main_app.root_path %></li>
6+
<li class="breadcrumb-item active">Issue Library</li>
7+
</ol>
8+
<% end %>
9+
10+
<% content_for :sidebar do %>
11+
<div class="header">
12+
<div class="header-inner">
13+
<h5 class="header-name">Issue Library Tips</h5>
14+
<div class="options">
15+
<%= link_to "#il-page-tips", data: { bs_toggle: 'collapse', behavior: 'collapse-collection' } do %>
16+
<i class="fa-solid fa-chevron-up" data-behavior="toggle-chevron"></i><span class="visually-hidden">Toggle update state</span>
17+
<% end %>
18+
</div>
19+
</div>
20+
</div>
21+
<div id="il-page-tips" class="page-tips show collapse">
22+
<div class="bg-info">
23+
<p>Maintain a library of findings that can be easily accessed, and achieve consistency across your projects.</p>
24+
<p>Authors can be given permission to access or manage the Issue Library.</p>
25+
<p class="text-end card-link">More about <a href="https://dradis.com/tools/issuelib.html" target="_blank">Issue Library</a>.</p>
26+
</div>
27+
</div>
28+
<% end %>
29+
30+
<div class="row d-flex align-items-start justify-content-between">
31+
<div class="col-12 col-md-9">
32+
<h1>Build Your Issue Library</h1>
33+
<h2 class="mb-3">Maintain reusable findings to ensure consistency across all of your projects</h2>
34+
</div>
35+
<div class="col-12 col-md-3 d-flex justify-content-start justify-content-md-end mb-4 mb-md-0">
36+
<a
37+
href="javascript:void(0)"
38+
class="btn btn-primary js-try-pro"
39+
data-term="issuelib"
40+
data-url="https://dradis.com/pro/pages/issuelib.html">
41+
<i class="fa-solid fa-plus me-1"></i>New Entry
42+
</a>
43+
</div>
44+
</div>
45+
46+
<div id="issuelib_entries_table" class="card">
47+
<div class="card-header bg-primary">
48+
<h4 class="card-title mb-0">Issue Library entries</h4>
49+
</div>
50+
<div class="card-body">
51+
<%= render partial: 'issuelib_entries',
52+
locals: {
53+
columns: ['Title', 'State', 'Created', 'Updated'],
54+
import: false
55+
}
56+
%>
57+
</div>
58+
</div>

config/routes.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@
158158

159159
if defined?(Dradis::Pro)
160160
else
161+
# Static pages
162+
get 'projects/1/addons/issuelib', to: 'static_pages#issuelib_index', as: :static_issuelib
163+
get 'projects/1/addons/issuelib/import', to: 'static_pages#issuelib_import', as: :static_issuelib_import
164+
161165
root to: 'setup/passwords#new'
162166
end
163167

0 commit comments

Comments
 (0)