Skip to content

Commit 97f20bd

Browse files
authored
Merge pull request #3 from entityc/bobgarner/feature/admin-view-buttons
Added buttons that allow easy switching between instructor/admin and …
2 parents b1aa355 + 19fd94b commit 97f20bd

16 files changed

+53
-18
lines changed

src/ec/Configuration.edl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ configuration CodeGen {
3838
organization "entityc"
3939
name "ec-springboot-lib"
4040
path ""
41-
tag "v0.9.1"
41+
tag "v0.9.2"
4242
}
4343

4444
templates {
@@ -106,5 +106,8 @@ configuration CodeGen {
106106
template MarkdownImportAuthor {
107107
output primary ServerCode
108108
}
109+
template WebAdminAuthor {
110+
output primary ServerCode
111+
}
109112
}
110113
}

src/ec/authors/WebAdminAuthor.eml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
$[author to org.entityc.springboot.web.admin.detail]
2+
$[author to outlet headlineButtonArea]
3+
$[if entity.name == "Tutorial" || entity.name == "Module" || entity.name == "Session"]
4+
<div class="d-flex flex-row g-0 justify-content-between align-items-center"><div class="d-flex g-0"><h2 th:text="${headlineExpression}"></h2></div><div class="d-flex g-0"><a class="btn btn-outline-primary" role="button" th:href="@{'/${entity|domain:APIPath|name}/' + ${$}{${entity|domain:JSONDTO|name|uncapitalize}.id}}">VIEW</a></div></div>
5+
$[/if]
6+
$[/author]
7+
$[/author]
8+
<h2>${appTitle}</h2>
9+
$[author to org.entityc.springboot.web.admin.home]
10+
$[author to outlet homeMenuButtonArea]
11+
<div class="d-flex flex-row g-0 justify-content-between align-items-center"><div class="d-flex g-0"><h2>${appTitle}</h2></div><div class="d-flex g-0"><a class="btn btn-outline-primary" role="button" th:href="@{'/'}">VIEW-ONLY SITE</a></div></div>
12+
$[/author]
13+
$[author to outlet entityHomeButtonArea]
14+
$[if topEntity.name == "Tutorial"]
15+
<div class="d-flex flex-row g-0 justify-content-between align-items-center"><div class="d-flex g-0"><h3>${topEntity|title|plural}</h3></div><div class="d-flex g-0"><a class="btn btn-outline-primary" role="button" th:href="@{'/'}">VIEW</a></div></div>
16+
$[/if]
17+
$[/author]
18+
$[/author]

src/main/java/org/entityc/tutorial/util/MarkdownImporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ private boolean importModuleMarkdown(final UUID tutorialId, final String markdow
150150
importState = stateForLevel(lineLevel);
151151
repeat = 1;
152152
}
153-
if (bodyBuilder.length() == 0 && line.trim().isEmpty()) {
153+
if (bodyBuilder.length() == 0 && (line == null || line.trim().isEmpty())) {
154154
continue;
155155
}
156156
bodyBuilder.append(line);

src/main/java/org/entityc/tutorial/web/user/UserWebPageController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.entityc.tutorial.dto.TutorialDto;
44
import org.entityc.tutorial.exception.ServiceException;
55
import org.entityc.tutorial.model.Module;
6+
import org.entityc.tutorial.model.Role;
67
import org.entityc.tutorial.model.Session;
78
import org.entityc.tutorial.model.User;
89
import org.entityc.tutorial.security.PersistentUserDetailsService;
@@ -20,6 +21,7 @@
2021
import org.springframework.web.bind.annotation.GetMapping;
2122
import org.springframework.web.bind.annotation.PathVariable;
2223

24+
import java.util.Set;
2325
import java.util.UUID;
2426
import java.util.Vector;
2527

@@ -47,6 +49,7 @@ public String homePage(Model model) throws ServiceException {
4749
model.addAttribute("TutorialList", tutorialService.getTutorialDtoList(0, 100, true));
4850
User user = userDetailsService.findByEmail(securityService.findLoggedInUsername());
4951
model.addAttribute("loggedInUser", user);
52+
addCanGoToAdminSide(model);
5053
return "UserHome";
5154
}
5255

@@ -57,6 +60,7 @@ public String tutorialPage(Model model, @PathVariable("id") UUID tutorialId) thr
5760
model.addAttribute("ModulesList", moduleService.getModuleDtoListByTutorial(tutorialId, 0, 100, true));
5861
User user = userDetailsService.findByEmail(securityService.findLoggedInUsername());
5962
model.addAttribute("loggedInUser", user);
63+
addCanGoToAdminSide(model);
6064
return "UserTutorial";
6165
}
6266

@@ -70,6 +74,7 @@ public String modulePage(Model model, @PathVariable("id") UUID moduleId) throws
7074
model.addAttribute("SessionsList", sessionService.getSessionDtoListByModule(moduleId, 0, 100, true));
7175
User user = userDetailsService.findByEmail(securityService.findLoggedInUsername());
7276
model.addAttribute("loggedInUser", user);
77+
addCanGoToAdminSide(model);
7378
return "UserModule";
7479
}
7580

@@ -98,6 +103,14 @@ public String sessionPage(Model model, @PathVariable("id") UUID sessionId) throw
98103
model.addAttribute("SessionMarkdown", sessionService.buildMarkdownDocSection(1, sessionDto, 1));
99104
User user = userDetailsService.findByEmail(securityService.findLoggedInUsername());
100105
model.addAttribute("loggedInUser", user);
106+
addCanGoToAdminSide(model);
101107
return "UserSession";
102108
}
109+
private void addCanGoToAdminSide(Model model) {
110+
User user = userDetailsService.findByEmail(securityService.findLoggedInUsername());
111+
Set<Role> roles = user.getRoles();
112+
113+
boolean canGoToAdminSide = roles.contains(Role.INSTRUCTOR) || roles.contains(Role.ADMINISTRATOR);
114+
model.addAttribute("canGoToAdminSide", canGoToAdminSide);
115+
}
103116
}

src/main/resources/templates/UserHome.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
<br>
4747
<br>
4848
<div class="container">
49-
<h2>Tutorial Central</h2>
49+
<div class="d-flex flex-row g-0 justify-content-between align-items-center"><div class="d-flex g-0"><h2>Tutorial Central</h2></div><div th:if="${canGoToAdminSide}" class="d-flex g-0"><a class="btn btn-outline-primary" role="button" th:href="@{'/admin'}">ADMIN</a></div></div>
5050
<p>
5151
This website was built as part of an Entity Compiler tutorial to show the power of the Entity Compiler and templates written for it. The templates used generate a website implemented with Spring Boot, Thymeleaf and Bootstrap. It includes user authentication and this full web admin console.
5252
</p>

src/main/resources/templates/UserModule.html

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,16 @@
5656
<li class="breadcrumb-item active" aria-current="page">Module</li>
5757
</ol>
5858
</nav>
59-
<h2 th:text="|Module ${Module.number}: ${Module.title}|">Headline</h2>
59+
<div class="d-flex flex-row g-0 justify-content-between align-items-center"><div class="d-flex g-0"><h2 th:text="|Module ${Module.number}: ${Module.title}|">Headline</h2></div><div th:if="${canGoToAdminSide}" class="d-flex g-0"><a class="btn btn-outline-primary" role="button" th:href="@{'/admin/module/' + ${Module.id} + '/detail'}">ADMIN</a></div></div>
6060
<br/>
61-
<p th:text="${Module.summary}"></p>
61+
<div class="container g-0">
62+
<input type="hidden" id="module-overview-hidden" th:value="${Module.overview}"/>
63+
<div id="module-overview" class="markdown-body"/>
64+
<script>
65+
document.getElementById('module-overview').innerHTML =
66+
marked.parse(document.getElementById('module-overview-hidden').value, {pedantic: false, gfm: true});
67+
</script>
68+
</div>
6269
<br/>
6370
<div class="container-sm">
6471
<hr/>

src/main/resources/templates/UserSession.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
<li class="breadcrumb-item active" aria-current="page">Session</li>
5858
</ol>
5959
</nav>
60+
<div class="d-flex flex-row g-0 justify-content-between align-items-center"><div class="d-flex g-0">&nbsp;</div><div th:if="${canGoToAdminSide}" class="d-flex g-0"><a class="btn btn-outline-primary" role="button" th:href="@{'/admin/session/' + ${Session.id} + '/detail'}">ADMIN</a></div></div>
6061
<input type="hidden" id="markdown-content-hidden" th:value="${SessionMarkdown}"/>
6162
<div id="markdown-content" class="markdown-body"/>
6263
<script>

src/main/resources/templates/UserTutorial.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
<li class="breadcrumb-item active" aria-current="page">Tutorial</li>
5656
</ol>
5757
</nav>
58-
<h2 th:text="|${Tutorial.title}|">Headline</h2>
58+
<div class="d-flex flex-row g-0 justify-content-between align-items-center"><div class="d-flex g-0"><h2 th:text="|${Tutorial.title}|">Headline</h2></div><div th:if="${canGoToAdminSide}" class="d-flex g-0"><a class="btn btn-outline-primary" role="button" th:href="@{'/admin/tutorial/' + ${Tutorial.id} + '/detail'}">ADMIN</a></div></div>
5959
<br/>
6060
<p th:text="${Tutorial.summary}"></p>
6161
<br/>

src/main/resources/templates/admin_Exercise_detail.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,12 @@
6060
<nav aria-label="breadcrumb">
6161
<ol class="breadcrumb">
6262
<li class="breadcrumb-item"> <a th:href="@{/admin}">Admin Home</a> </li>
63-
<li class="breadcrumb-item"> <a th:href="@{/admin/exercise}">Exercises</a> </li>
6463
<li class="breadcrumb-item"> <a th:href="@{/admin/tutorial/{id}/detail(id=${tutorialDto.id})}" th:text="|${tutorialDto.title}|">link</a> </li>
6564
<li class="breadcrumb-item"> <a th:href="@{/admin/module/{id}/detail(id=${moduleDto.id})}" th:text="|Module ${moduleDto.number}: ${moduleDto.title}|">link</a> </li>
6665
<li class="breadcrumb-item"> <a th:href="@{/admin/session/{id}/detail(id=${sessionDto.id})}" th:text="|Session ${sessionDto.number}|">link</a> </li>
6766
<li class="breadcrumb-item active" aria-current="page">Exercise</li>
6867
</ol>
6968
</nav>
70-
<h2 th:text="|Exercise ${exerciseDto.number}|"></h2>
7169
<div class="container">
7270

7371
<table class="table">

src/main/resources/templates/admin_Module_detail.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,11 @@
6060
<nav aria-label="breadcrumb">
6161
<ol class="breadcrumb">
6262
<li class="breadcrumb-item"> <a th:href="@{/admin}">Admin Home</a> </li>
63-
<li class="breadcrumb-item"> <a th:href="@{/admin/module}">Modules</a> </li>
6463
<li class="breadcrumb-item"> <a th:href="@{/admin/tutorial/{id}/detail(id=${tutorialDto.id})}" th:text="|${tutorialDto.title}|">link</a> </li>
6564
<li class="breadcrumb-item active" aria-current="page">Module</li>
6665
</ol>
6766
</nav>
68-
<h2 th:text="|Module ${moduleDto.number}: ${moduleDto.title}|"></h2>
67+
<div class="d-flex flex-row g-0 justify-content-between align-items-center"><div class="d-flex g-0"><h2 th:text="|Module ${moduleDto.number}: ${moduleDto.title}|"></h2></div><div class="d-flex g-0"><a class="btn btn-outline-primary" role="button" th:href="@{'/module/' + ${moduleDto.id}}">VIEW</a></div></div>
6968
<div class="container">
7069

7170
<table class="table">

0 commit comments

Comments
 (0)