Merge branch 'develop' into frontend/kathy_neu
This commit is contained in:
commit
645e31deb2
@ -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>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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 () {
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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"),
|
||||
|
||||
@ -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" +
|
||||
|
||||
Loading…
Reference in New Issue
Block a user