Added the voting system
This commit is contained in:
@@ -7,6 +7,7 @@ import com.github.cato447.AbizeitungVotingSystem.repositories.CandidateRepositor
|
|||||||
import com.github.cato447.AbizeitungVotingSystem.repositories.CategoryRepository;
|
import com.github.cato447.AbizeitungVotingSystem.repositories.CategoryRepository;
|
||||||
import com.github.cato447.AbizeitungVotingSystem.repositories.VoterRepository;
|
import com.github.cato447.AbizeitungVotingSystem.repositories.VoterRepository;
|
||||||
import com.github.cato447.AbizeitungVotingSystem.table.TableAction;
|
import com.github.cato447.AbizeitungVotingSystem.table.TableAction;
|
||||||
|
import org.apache.juli.logging.Log;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.mail.SimpleMailMessage;
|
import org.springframework.mail.SimpleMailMessage;
|
||||||
import org.springframework.mail.javamail.JavaMailSender;
|
import org.springframework.mail.javamail.JavaMailSender;
|
||||||
@@ -71,7 +72,7 @@ public class VotingController {
|
|||||||
|
|
||||||
return "start.html";
|
return "start.html";
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendSimpleMessage(
|
public void sendSimpleMessage(
|
||||||
String to, String subject, String text) {
|
String to, String subject, String text) {
|
||||||
SimpleMailMessage message = new SimpleMailMessage();
|
SimpleMailMessage message = new SimpleMailMessage();
|
||||||
@@ -94,7 +95,7 @@ public class VotingController {
|
|||||||
List<Category> categories = categoryRepository.findAll();
|
List<Category> categories = categoryRepository.findAll();
|
||||||
model.addAttribute("candidates", candidates);
|
model.addAttribute("candidates", candidates);
|
||||||
model.addAttribute("categories", categories);
|
model.addAttribute("categories", categories);
|
||||||
sendSimpleMessage(name,"test", "test");
|
//sendSimpleMessage(name,"test", "test");
|
||||||
LOGGER.info(name + " is voting now");
|
LOGGER.info(name + " is voting now");
|
||||||
return "voting.html";
|
return "voting.html";
|
||||||
}
|
}
|
||||||
@@ -108,8 +109,14 @@ public class VotingController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping("/processVote")
|
@RequestMapping("/processVote")
|
||||||
public String ProcessVote(@RequestParam String name) {
|
public String ProcessVote(@RequestParam String voteValues) {
|
||||||
LOGGER.info(name + " has voted");
|
String[] partVoteValues = voteValues.split(",");
|
||||||
|
for (String s: partVoteValues) {
|
||||||
|
long candidateID = Long.valueOf(s);
|
||||||
|
Candidate candidate = candidateRepository.findById(candidateID).get();
|
||||||
|
candidate.votedFor();
|
||||||
|
candidateRepository.save(candidate);
|
||||||
|
}
|
||||||
return "success.html";
|
return "success.html";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,7 +125,6 @@ public class VotingController {
|
|||||||
try {
|
try {
|
||||||
if (password.equals("admin")) {
|
if (password.equals("admin")) {
|
||||||
List<Voter> voters = voterRepository.findAll();
|
List<Voter> voters = voterRepository.findAll();
|
||||||
List<Candidate> candidates = candidateRepository.findAll();
|
|
||||||
List<Category> categories = categoryRepository.findAll();
|
List<Category> categories = categoryRepository.findAll();
|
||||||
model.addAttribute("voters", voters);
|
model.addAttribute("voters", voters);
|
||||||
model.addAttribute("categories", categories);
|
model.addAttribute("categories", categories);
|
||||||
@@ -126,7 +132,6 @@ public class VotingController {
|
|||||||
} else {
|
} else {
|
||||||
LOGGER.error("Wrong Password");
|
LOGGER.error("Wrong Password");
|
||||||
}
|
}
|
||||||
LOGGER.error("Wrong Username");
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.fatal("voters table is not existing!");
|
LOGGER.fatal("voters table is not existing!");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,14 @@ import com.github.cato447.AbizeitungVotingSystem.entities.Candidate;
|
|||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface CandidateRepository extends JpaRepository<Candidate, Integer> {
|
public interface CandidateRepository extends JpaRepository<Candidate, Integer> {
|
||||||
|
|
||||||
public Candidate findByName(String name);
|
public Candidate findByName(String name);
|
||||||
|
|
||||||
|
Optional<Candidate> findById(Long id);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,16 +20,33 @@ h2.categoryHeader {
|
|||||||
color: #FFF;
|
color: #FFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.candidate {
|
button {
|
||||||
color: #fff;
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
color: #FFF;
|
||||||
font-size: .875rem;
|
font-size: .875rem;
|
||||||
font-weight: 300;
|
font-weight: normal;
|
||||||
letter-spacing: .125rem;
|
letter-spacing: .125rem;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
text-align: right;
|
text-align: center;
|
||||||
transition: opacity .25s .5s;
|
transition: opacity .25s .5s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#submitButton {
|
||||||
|
margin-top: 5%;
|
||||||
|
padding: .25em 0;
|
||||||
|
border: 0;
|
||||||
|
outline: 0;
|
||||||
|
background: #bb1515;
|
||||||
|
color: rgba(255, 255, 255, 0.85);
|
||||||
|
font-size: 2rem;
|
||||||
|
width: 500px;
|
||||||
|
letter-spacing: .0625rem;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 3px 5px 1px rgba(0, 0, 0, 0.25);
|
||||||
|
text-shadow: 0 -2px 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(255, 255, 255, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
html,
|
html,
|
||||||
body {
|
body {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
@@ -7,14 +7,56 @@
|
|||||||
<link th:href="@{/styles/voting.css}" rel="stylesheet" />
|
<link th:href="@{/styles/voting.css}" rel="stylesheet" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
||||||
<body class="center-screen">
|
<body class="center-screen">
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function setColor(button) {
|
||||||
|
groupButtons = document.querySelectorAll('[id^= ' + button.id.split("_")[0] + ']');
|
||||||
|
groupButtons.forEach(button => {
|
||||||
|
button.style.background = 'transparent';
|
||||||
|
button.style.fontWeight = 'normal';
|
||||||
|
});
|
||||||
|
button.style.background = "#bb1515";
|
||||||
|
button.style.fontWeight = 'bold';
|
||||||
|
}
|
||||||
|
|
||||||
|
function rgbToHex(rgb) {
|
||||||
|
rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
|
||||||
|
var color = (rgb && rgb.length === 4) ? "#" +
|
||||||
|
("0" + parseInt(rgb[1], 10).toString(16)).slice(-2) +
|
||||||
|
("0" + parseInt(rgb[2], 10).toString(16)).slice(-2) +
|
||||||
|
("0" + parseInt(rgb[3], 10).toString(16)).slice(-2) : '';
|
||||||
|
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getVotes() {
|
||||||
|
groupButtons = document.querySelectorAll(".inputButton");
|
||||||
|
var voteIds = [];
|
||||||
|
groupButtons.forEach(button => {
|
||||||
|
if (button.style.fontWeight == 'bold') {
|
||||||
|
var str = button.id.split("_");
|
||||||
|
voteIds.push(str[1].replace(/\D/g, ""));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
input = document.getElementById("voteValues");
|
||||||
|
input.value = voteIds;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
<h1>Wähle deine Kandidaten:</h1>
|
<h1>Wähle deine Kandidaten:</h1>
|
||||||
<div th:each="category,iter : ${categories}">
|
<div th:each="category,iter : ${categories}">
|
||||||
<h2 class="categoryHeader" th:text="${category.name}"></h2>
|
<h2 class="categoryHeader" th:text="${category.name}"></h2>
|
||||||
<div th:each="candidate : ${category.candidateList}">
|
<div th:each="candidate : ${category.candidateList}" class="voteDiv">
|
||||||
<a class="candidate" th:text="${candidate.name}"></a>
|
<button class="inputButton" th:id="|category${category.id}_candidate${candidate.id}|" th:text="${candidate.name}" th:onclick="|setColor(category${category.id}_candidate${candidate.id})|"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<form action="#" th:action="@{/processVote}" method="post">
|
||||||
|
<input id="voteValues" type="hidden" name="voteValues" value="" />
|
||||||
|
<button type="submit" id="submitButton" onclick="getVotes()">Auswahl bestätigen</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
Reference in New Issue
Block a user