Merge branch 'develop' into frontend/kathy_neu
This commit is contained in:
commit
645e31deb2
@ -7,21 +7,14 @@
|
|||||||
/>
|
/>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<div class="text-h6">GeoCaching</div>
|
<div class="text-h6">GeoCaching</div>
|
||||||
<div class="text-body2">Willkommen</div>
|
<div class="text-body2">Willkommen, GeoCaching ist eine spielerische Führung, eine Schnitzeljagd, über die
|
||||||
<q-expansion-item
|
Bundesgartenschau.
|
||||||
rounded-borders
|
Es gibt mehrere Routen (Caches), die man durchführen kann. Jeder Cache besteht aus mehreren Stationen, bei
|
||||||
class="text-black shadow-2 full-width q-mt-md"
|
denen Rätsel und Aufgaben gelöst werden müssen, um die jeweils nächste Station zu finden.
|
||||||
label="Was ist GeoCaching?"
|
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
|
||||||
<q-card>
|
Rangliste.
|
||||||
<q-card-section>
|
</div>
|
||||||
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>
|
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
</q-card>
|
</q-card>
|
||||||
<q-card class="my-card" style="max-width: 600px">
|
<q-card class="my-card" style="max-width: 600px">
|
||||||
@ -40,9 +33,8 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
data () {
|
data() {
|
||||||
return {
|
return {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -32,6 +32,7 @@
|
|||||||
<q-input lazy-rules outlined filled stack-label v-model="newTeamName"
|
<q-input lazy-rules outlined filled stack-label v-model="newTeamName"
|
||||||
type="text"
|
type="text"
|
||||||
label="Teamname eingeben"
|
label="Teamname eingeben"
|
||||||
|
color="black"
|
||||||
:rules="[val=>val.length>=2||'Name muss mindestens 5 Zeichen lang sein!']"/>
|
:rules="[val=>val.length>=2||'Name muss mindestens 5 Zeichen lang sein!']"/>
|
||||||
<q-btn
|
<q-btn
|
||||||
:disabled="!newTeamNameValidationSuccesful"
|
:disabled="!newTeamNameValidationSuccesful"
|
||||||
@ -64,18 +65,6 @@
|
|||||||
</q-expansion-item>
|
</q-expansion-item>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-list>
|
</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>
|
</div>
|
||||||
</q-tab-panel>
|
</q-tab-panel>
|
||||||
<q-tab-panel v-if="boolAlreadyInTeam" name="teams" class="q-pa-none">
|
<q-tab-panel v-if="boolAlreadyInTeam" name="teams" class="q-pa-none">
|
||||||
@ -85,6 +74,7 @@
|
|||||||
<p v-show="!boolStatus" class="text-white">
|
<p v-show="!boolStatus" class="text-white">
|
||||||
Unser Status: {{currentTeamStatus}}
|
Unser Status: {{currentTeamStatus}}
|
||||||
<q-btn icon="create"
|
<q-btn icon="create"
|
||||||
|
size=""
|
||||||
unelevated
|
unelevated
|
||||||
class="on-right"
|
class="on-right"
|
||||||
@click="updateStatus()"
|
@click="updateStatus()"
|
||||||
@ -121,15 +111,8 @@
|
|||||||
:pagination.sync="pagination"
|
:pagination.sync="pagination"
|
||||||
/>
|
/>
|
||||||
<br/>
|
<br/>
|
||||||
<div align="center">
|
<p class="text-h5"> Nutzer einladen </p>
|
||||||
<q-btn label="Nutzer einladen"
|
<div align="center" class="row q-mt-sm justify-between">
|
||||||
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">
|
|
||||||
<q-input lazy-rules outlined filled stack-label v-model="inviteMail"
|
<q-input lazy-rules outlined filled stack-label v-model="inviteMail"
|
||||||
type="text" label="Email des Nutzers" color="black" class="col q-mr-sm"
|
type="text" label="Email des Nutzers" color="black" class="col q-mr-sm"
|
||||||
:rules="[val=>validateEmail(val)||'Bitte Email verwenden']"/>
|
:rules="[val=>validateEmail(val)||'Bitte Email verwenden']"/>
|
||||||
@ -138,7 +121,7 @@
|
|||||||
unelevated
|
unelevated
|
||||||
@click="sendTeamInvite()"
|
@click="sendTeamInvite()"
|
||||||
:disabled="!teamInviteChecked"
|
:disabled="!teamInviteChecked"
|
||||||
color="positive"
|
color="primary"
|
||||||
type="submit"/>
|
type="submit"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -98,7 +98,7 @@
|
|||||||
methods: {
|
methods: {
|
||||||
validateEmail(email) {
|
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,}))$/;
|
//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());
|
return re.test(String(email).toLowerCase());
|
||||||
},
|
},
|
||||||
register: function () {
|
register: function () {
|
||||||
|
|||||||
@ -24,11 +24,11 @@
|
|||||||
<q-card class="q-mb-md" v-for="(user) in rankinglist" :key="user.id">
|
<q-card class="q-mb-md" v-for="(user) in rankinglist" :key="user.id">
|
||||||
<q-item class="q-pr-sm ">
|
<q-item class="q-pr-sm ">
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label v-if="username === user.username" @click="gotoProfile"><a class="text-green"
|
<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>
|
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
<q-item-label v-if="username !== user.username"><a class="text-black"
|
<q-item-label v-if="email !== user.username"><a class="text-black"
|
||||||
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
|
style="text-decoration: none"><span>{{user.rank}}. {{user.username}}</span></a>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
<q-item-section side>
|
<q-item-section side>
|
||||||
@ -42,8 +42,10 @@
|
|||||||
<div class="" style="max-width: 440px">
|
<div class="" style="max-width: 440px">
|
||||||
<q-input lazy-rules outlined filled stack-label
|
<q-input lazy-rules outlined filled stack-label
|
||||||
type="text"
|
type="text"
|
||||||
label="Username eingeben"
|
label="Email eingeben"
|
||||||
unelevated color="negative"
|
unelevated color="black"
|
||||||
|
v-model="deleteUser"
|
||||||
|
:rules="[val=>validateEmail(val)||'Bitte Email verwenden']"
|
||||||
></q-input>
|
></q-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -53,6 +55,7 @@
|
|||||||
label="Punkte des Nutzer zurücksetzen"
|
label="Punkte des Nutzer zurücksetzen"
|
||||||
color="negative"
|
color="negative"
|
||||||
class="full-width"
|
class="full-width"
|
||||||
|
@click="resetPoints()"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="hasAdminState" class="row">
|
<div v-if="hasAdminState" class="row">
|
||||||
@ -102,7 +105,9 @@
|
|||||||
tab: 'solo',
|
tab: 'solo',
|
||||||
rankinglist: [],
|
rankinglist: [],
|
||||||
teamRankinglist: [],
|
teamRankinglist: [],
|
||||||
username: null
|
username: null,
|
||||||
|
deleteUser: null,
|
||||||
|
email: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created: function () {
|
created: function () {
|
||||||
@ -111,6 +116,7 @@
|
|||||||
this.fetchRankinglist();
|
this.fetchRankinglist();
|
||||||
this.fetchTeamRankinglist();
|
this.fetchTeamRankinglist();
|
||||||
this.username = JSON.parse(localStorage.getItem('userToken')).name;
|
this.username = JSON.parse(localStorage.getItem('userToken')).name;
|
||||||
|
this.email = JSON.parse(localStorage.getItem('userMail'));
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
hasAdminState() {
|
hasAdminState() {
|
||||||
@ -183,9 +189,57 @@
|
|||||||
// lastSum = ranking.rankingPointsSum;
|
// 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>
|
</script>
|
||||||
|
|||||||
@ -425,7 +425,7 @@ public class Controller {
|
|||||||
for (RankingListHelper rankingListHelper: sendBackUsers) {
|
for (RankingListHelper rankingListHelper: sendBackUsers) {
|
||||||
logger.debug("RankingList Helper " + rankingListHelper.getUsername());
|
logger.debug("RankingList Helper " + rankingListHelper.getUsername());
|
||||||
logger.debug("User: " + user.getUsername());
|
logger.debug("User: " + user.getUsername());
|
||||||
if(rankingListHelper.getUsername().equals(user.getUsername())){
|
if(rankingListHelper.getUsername().equals(user.getEmail())){
|
||||||
userAlreadyInRankingList = true;
|
userAlreadyInRankingList = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -435,7 +435,7 @@ public class Controller {
|
|||||||
ResponseEntity singlePlace = getRankingPlace(user.getEmail());
|
ResponseEntity singlePlace = getRankingPlace(user.getEmail());
|
||||||
|
|
||||||
if (singlePlace.getStatusCodeValue() == 200) {
|
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()));
|
logger.debug(String.valueOf((Integer) singlePlace.getBody()));
|
||||||
sendBackUsers.add(rankingListHelper);
|
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)")
|
@ApiOperation(value = "Test method (Changes its purpose often)")
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(code = 404, message = "Database error"),
|
@ApiResponse(code = 404, message = "Database error"),
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface UserRepository extends CrudRepository<User, Integer> {
|
public interface UserRepository extends CrudRepository<User, Integer> {
|
||||||
User findByEmail(String email);
|
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" +
|
// @Query(value = "SELECT DISTINCT u.id AS ID, username AS Name, ui.ranking_points_sum AS Ranglistenpunkte\n" +
|
||||||
// "FROM user u,\n" +
|
// "FROM user u,\n" +
|
||||||
@ -19,7 +20,7 @@ public interface UserRepository extends CrudRepository<User, Integer> {
|
|||||||
// "LIMIT 10;", nativeQuery = true)
|
// "LIMIT 10;", nativeQuery = true)
|
||||||
// List<Object[]> getRankingList();
|
// 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" +
|
"FROM user u,\n" +
|
||||||
" user_info ui,\n" +
|
" user_info ui,\n" +
|
||||||
" user_roles ur\n" +
|
" user_roles ur\n" +
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user