Merge branch 'develop' into frontend/kathy_neu

This commit is contained in:
Katharina Will 2019-06-06 14:59:50 +02:00
commit 645e31deb2
6 changed files with 143 additions and 52 deletions

View File

@ -7,21 +7,14 @@
/>
<q-card-section>
<div class="text-h6">GeoCaching</div>
<div class="text-body2">Willkommen</div>
<q-expansion-item
rounded-borders
class="text-black shadow-2 full-width q-mt-md"
label="Was ist GeoCaching?"
>
<q-card>
<q-card-section>
GeoCaching ist eine spielerische Führung, eine Schnitzeljagd, über die Bundesgartenschau.
Es gibt mehrere Routen (Caches), von denen man wählen kann. Auf jedem Cache gibt es mehrere Stationen, bei denen Rätsel und Aufgaben gelöst werden müssen, um die nächste zu finden.
Eine Station ist eine QR-Code, bei dessen einscannen das nächste Rätsel freigeschaltet wird.
Findet ein Cacher alle Stationen eines Caches erhält er eine kleine Belohnung und sammelt Punkte für eine Rangliste.
</q-card-section>
</q-card>
</q-expansion-item>
<div class="text-body2">Willkommen, GeoCaching ist eine spielerische Führung, eine Schnitzeljagd, über die
Bundesgartenschau.
Es gibt mehrere Routen (Caches), die man durchführen kann. Jeder Cache besteht aus mehreren Stationen, bei
denen Rätsel und Aufgaben gelöst werden müssen, um die jeweils nächste Station zu finden.
Eine Station wird durch einen QR-Code repräsentiert, den man einscannen muss um das Rätsel angezeigt zu bekommen.
Findet der Cacher alle Stationen eines Caches in der richtigen Reihenfolge erhält er eine kleine Belohnung und sammelt Punkte für eine
Rangliste.
</div>
</q-card-section>
</q-card>
<q-card class="my-card" style="max-width: 600px">
@ -40,9 +33,8 @@
<script>
export default {
data () {
return {
}
data() {
return {}
}
}
</script>

View File

@ -32,6 +32,7 @@
<q-input lazy-rules outlined filled stack-label v-model="newTeamName"
type="text"
label="Teamname eingeben"
color="black"
:rules="[val=>val.length>=2||'Name muss mindestens 5 Zeichen lang sein!']"/>
<q-btn
:disabled="!newTeamNameValidationSuccesful"
@ -64,18 +65,6 @@
</q-expansion-item>
</q-card>
</q-list>
<!--<div v-show="hasAdminState">-->
<!--<p class="text-h5 q-mt-sm"> Neuen Admin hinzufügen </p>-->
<!--<q-input lazy-rules outlined filled stack-label v-model="newAdminMail"-->
<!--type="text" label="Email des Nutzers" class="col-9"-->
<!--:rules="[val=>validateEmail(val)||'Bitte Email verwenden']"/>-->
<!--<q-btn class="col-3"-->
<!--icon="arrow_right_alt"-->
<!--@click="getUser()"-->
<!--:disabled="!adminInviteChecked"-->
<!--color="positive"-->
<!--type="submit"/>-->
<!--</div>-->
</div>
</q-tab-panel>
<q-tab-panel v-if="boolAlreadyInTeam" name="teams" class="q-pa-none">
@ -85,6 +74,7 @@
<p v-show="!boolStatus" class="text-white">
Unser Status: {{currentTeamStatus}}
<q-btn icon="create"
size=""
unelevated
class="on-right"
@click="updateStatus()"
@ -121,15 +111,8 @@
:pagination.sync="pagination"
/>
<br/>
<div align="center">
<q-btn label="Nutzer einladen"
unelevated
@click="activateInvite()"
color="primary"
class="full-width q-mt-sm"
type="submit"/>
</div>
<div v-if="inviteActivated" align="center" class="row q-mt-sm justify-between">
<p class="text-h5"> Nutzer einladen </p>
<div align="center" class="row q-mt-sm justify-between">
<q-input lazy-rules outlined filled stack-label v-model="inviteMail"
type="text" label="Email des Nutzers" color="black" class="col q-mr-sm"
:rules="[val=>validateEmail(val)||'Bitte Email verwenden']"/>
@ -138,7 +121,7 @@
unelevated
@click="sendTeamInvite()"
:disabled="!teamInviteChecked"
color="positive"
color="primary"
type="submit"/>
</div>
</div>

View File

@ -98,7 +98,7 @@
methods: {
validateEmail(email) {
//var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
let re = new RegExp('^[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$');
let re = new RegExp('/^(([^<>()\\[\\]\\\\.,;:\\s@"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@"]+)*)|(".+"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/');
return re.test(String(email).toLowerCase());
},
register: function () {

View File

@ -24,11 +24,11 @@
<q-card class="q-mb-md" v-for="(user) in rankinglist" :key="user.id">
<q-item class="q-pr-sm ">
<q-item-section>
<q-item-label v-if="username === user.username" @click="gotoProfile"><a class="text-green"
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
<q-item-label v-if="email === user.username" @click="gotoProfile"><a class="text-green"
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
</q-item-label>
<q-item-label v-if="username !== user.username"><a class="text-black"
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
<q-item-label v-if="email !== user.username"><a class="text-black"
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
</q-item-label>
</q-item-section>
<q-item-section side>
@ -42,8 +42,10 @@
<div class="" style="max-width: 440px">
<q-input lazy-rules outlined filled stack-label
type="text"
label="Username eingeben"
unelevated color="negative"
label="Email eingeben"
unelevated color="black"
v-model="deleteUser"
:rules="[val=>validateEmail(val)||'Bitte Email verwenden']"
></q-input>
</div>
</div>
@ -53,6 +55,7 @@
label="Punkte des Nutzer zurücksetzen"
color="negative"
class="full-width"
@click="resetPoints()"
/>
</div>
<div v-if="hasAdminState" class="row">
@ -102,7 +105,9 @@
tab: 'solo',
rankinglist: [],
teamRankinglist: [],
username: null
username: null,
deleteUser: null,
email: null,
}
},
created: function () {
@ -111,6 +116,7 @@
this.fetchRankinglist();
this.fetchTeamRankinglist();
this.username = JSON.parse(localStorage.getItem('userToken')).name;
this.email = JSON.parse(localStorage.getItem('userMail'));
},
computed: {
hasAdminState() {
@ -183,9 +189,57 @@
// lastSum = ranking.rankingPointsSum;
// }
},
resetPoints(username){
resetPoints() {
if (this.deleteUser != null) {
let username = this.deleteUser;
let token = JSON.parse(localStorage.getItem('userToken')).token;
if (this.validateEmail(this.email)) {
console.log(this.validateEmail(this.email));
this.$axios.put('/api/resetSingleUser', null, {params: {token, username}})
.then((response) => {
console.log("Rankinglist: ");
console.log(response.data);
this.fetchRankinglist();
}).catch((error) => {
let msg;
let title;
if (error.response) {
title = "Bitte Eingaben überprüfen!";
msg = error.response.data;
} else if (error.request) {
title = "Verbindungsfehler!";
msg = "Es konnte keine Verbindung zum Server aufgebaut werden. Versuchen Sie es später noch einmal!"
console.log(error.request);
} else {
title = "Error";
msg = error.message;
console.log('Error', error.message);
}
console.log(error.config);
this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {message: msg, title: title,});
})
} else {
this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {
message: "Bitte geben Sie eine gültige Email ein",
title: "Ungültige Email",
color: "negative"
});
}
} else {
this.$store.commit('dialog/NEW_MESSAGE_DIALOG', {
message: "Zum zurücksetzen der Punkte eines Nutzers gib bitte einen Usernamen ein",
title: "Fehlender Username",
color: "negative"
});
}
},
validateEmail(email) {
let re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
},
}
}
</script>

View File

@ -425,7 +425,7 @@ public class Controller {
for (RankingListHelper rankingListHelper: sendBackUsers) {
logger.debug("RankingList Helper " + rankingListHelper.getUsername());
logger.debug("User: " + user.getUsername());
if(rankingListHelper.getUsername().equals(user.getUsername())){
if(rankingListHelper.getUsername().equals(user.getEmail())){
userAlreadyInRankingList = true;
break;
}
@ -435,7 +435,7 @@ public class Controller {
ResponseEntity singlePlace = getRankingPlace(user.getEmail());
if (singlePlace.getStatusCodeValue() == 200) {
RankingListHelper rankingListHelper = new RankingListHelper(user.getUsername(), (Integer) user_infoRepository.findUser_InfoByUser(user).getRankingPointsSum(), (Integer) getRankingPlace(user.getEmail()).getBody());
RankingListHelper rankingListHelper = new RankingListHelper(user.getEmail(), (Integer) user_infoRepository.findUser_InfoByUser(user).getRankingPointsSum(), (Integer) getRankingPlace(user.getEmail()).getBody());
logger.debug(String.valueOf((Integer) singlePlace.getBody()));
sendBackUsers.add(rankingListHelper);
}
@ -1284,6 +1284,67 @@ public class Controller {
}
@ApiOperation(value = "Resets the points of a single User ")
@ApiResponses(value = {
@ApiResponse(code = 404, message = "Database error"),
@ApiResponse(code = 401, message = "JWT Token expired"),
@ApiResponse(code = 400, message = "Something went wrong at verification")
})
@CrossOrigin(origins = "*", allowedHeaders = "*") // only for dev purpose
@RequestMapping(value = "/api/resetSingleUser", method = RequestMethod.PUT, produces = "application/json")
public ResponseEntity resetSingleUser(@RequestParam String token, @RequestParam String username) {
logger.debug("API CALL: /api/resetSingleUser");
// verify user
ResponseEntity verifyToken = VerificationUtil.verifyToken(token);
if (verifyToken.getStatusCodeValue() != 200) {
return verifyToken;
}
//get User
Claims claims = (Claims) verifyToken.getBody();
ResponseEntity getUser = FinderUtil.findUserFromClaim(claims);
if (getUser.getStatusCodeValue() != 200) {
return getUser;
}
User user = (User) getUser.getBody();
logger.debug("/api/resetRankingList: " + "User verificated: " + user.getEmail());
//----------------------
boolean isAdmin = false;
for (Role role : user.getRoles()) {
if (role.getId() == 7) {
isAdmin = true;
}
}
if (isAdmin) {
User deleteUser = userRepository.findByEmail(username);
if(deleteUser == null) {
return ResponseEntity.status(400).body("Es wurde kein User mit dieser Email gefunden.");
}
User_Info user_info = user_infoRepository.findUser_InfoByUser(deleteUser);
user_info.setRankingPointsSum(0);
user_infoRepository.save(user_info);
for (Bearbeitet bearbeitet : bearbeitetRepository.findByUser(deleteUser)) {
if (bearbeitet.getCacheAccesDefinition().getId() == 1) {
bearbeitetRepository.delete(bearbeitet);
}
}
return ResponseEntity.status(200).body(HttpStatus.OK);
} else {
return ResponseEntity.status(400).body("Der Benutzer ist kein Admin und kann deshalb die Rangliste nicht zurücksetzen.");
}
}
@ApiOperation(value = "Test method (Changes its purpose often)")
@ApiResponses(value = {
@ApiResponse(code = 404, message = "Database error"),

View File

@ -8,6 +8,7 @@ import java.util.List;
public interface UserRepository extends CrudRepository<User, Integer> {
User findByEmail(String email);
User findByUsername(String username);
// @Query(value = "SELECT DISTINCT u.id AS ID, username AS Name, ui.ranking_points_sum AS Ranglistenpunkte\n" +
// "FROM user u,\n" +
@ -19,7 +20,7 @@ public interface UserRepository extends CrudRepository<User, Integer> {
// "LIMIT 10;", nativeQuery = true)
// List<Object[]> getRankingList();
@Query(value = "SELECT DISTINCT u.id AS ID, username AS Name, ui.ranking_points_sum AS Ranglistenpunkte, email Email\n" +
@Query(value = "SELECT DISTINCT u.id AS ID, u.email AS Name, ui.ranking_points_sum AS Ranglistenpunkte, email Email\n" +
"FROM user u,\n" +
" user_info ui,\n" +
" user_roles ur\n" +