Group Page corrected

This commit is contained in:
paoloar77
2022-08-09 17:31:49 +02:00
parent 4cde86c113
commit 0c25bed597
18 changed files with 240 additions and 54 deletions

View File

@@ -71,6 +71,8 @@ export const shared_consts = {
BLOCK_GROUP: 1155,
FIND_GROUP: 1166,
DELETE_GROUP: 1170,
ADDADMIN_OFMYGROUP: 1180,
REMOVEADMIN_OFMYGROUP: 1185,
},
PUBTOSHARE: {

View File

@@ -1006,6 +1006,8 @@ export default defineComponent({
'profile.mygroups': 1,
'profile.qualifica': 1,
reported: 1,
date_report: 1,
username_who_report: 1,
}
},
lookup3: {
@@ -1071,6 +1073,8 @@ export default defineComponent({
'profile.mygroups': 1,
'profile.qualifica': 1,
reported: 1,
date_report: 1,
username_who_report: 1,
}
},
lookup3: {
@@ -1185,6 +1189,8 @@ export default defineComponent({
'profile.mygroups': 1,
'profile.qualifica': 1,
reported: 1,
date_report: 1,
username_who_report: 1,
}
},
lookup3: {

View File

@@ -71,8 +71,8 @@ export default defineComponent({
const myoptions = computed(() => {
const mybutt = []
mybutt.push({ label: t('mypages.find_group'), value: costanti.FIND_GROUP })
// mybutt.push({ label: t('mypages.manage_my_groups') + ' (' + numManageGroups.value + ')', value: costanti.MANAGE_GROUPS })
mybutt.push({ label: t('mypages.follow_groups') + ' (' + numMyGroups.value + ')', value: costanti.MY_GROUPS })
// mybutt.push({ label: t('mypages.manage_my_groups') + ' (' + numManageGroups.value + ')', value: costanti.MANAGE_GROUPS })
if (numAskSentGroups.value > 0 || props.modelValue === costanti.ASK_SENT_GROUP)
mybutt.push({

View File

@@ -7,11 +7,12 @@
</q-avatar>
</q-item-section>
<q-item-section @click="naviga(`/my/` + contact.username)">
<q-item-label v-if="labelextra"><strong>{{ labelextra }}</strong></q-item-label>
<q-item-label v-if="contact.name || contact.surname">{{ contact.username }} <span v-if="contact.name">({{ contact.name }} {{ contact.surname }})</span>
</q-item-label>
<q-item-label v-if="contact.reported" caption lines="1"><em style="color: red; font-weight: bold">{{ $t('db.reporteduser') }}</em></q-item-label>
<q-item-label v-if="contact.reported" caption lines="1"><em style="color: red; font-weight: bold">{{ $t('db.reporteduser', {date_report: tools.getstrDateTimeShort(contact.date_report)}) }}</em></q-item-label>
<q-item-label v-if="contact.profile" caption lines="1"><em>{{ contact.profile.qualifica }}</em></q-item-label>
<q-item-label caption lines="1"></q-item-label>
<q-item-label v-if="labelFooter" lines="1"><em>{{ labelFooter }}</em></q-item-label>
@@ -97,8 +98,20 @@
<q-item-label v-if="contact.username !== userStore.my.username">
<q-btn rounded icon="fas fa-ellipsis-h">
<q-menu>
<q-list style="min-width: 150px">
<q-item clickable v-close-popup @click="tools.removeFromMyGroups($q, contact.username, groupname)">
<q-list style="min-width: 150px">
<q-item clickable v-if="!tools.isUserAdminGroup(groupname, contact.username)" v-close-popup @click="tools.addtoAdminOfMyGroup($q, contact.username, groupname)">
<q-item-section avatar>
<q-icon color="positive" name="fas fa-user-shield"/>
</q-item-section>
<q-item-section>{{ $t('groups.addasadmin') }}</q-item-section>
</q-item>
<q-item clickable v-if="tools.isUserAdminGroup(groupname, contact.username) && tools.iAmTheCreatorOfTheGroup(groupname)" v-close-popup @click="tools.removeAdminOfMyGroup($q, contact.username, groupname)">
<q-item-section avatar>
<q-icon color="negative" name="fas fa-user-times"/>
</q-item-section>
<q-item-section>{{ $t('groups.remove_as_admin') }}</q-item-section>
</q-item>
<q-item clickable v-if="!tools.isUserTheCreatorOfTheGroup(groupname, contact.username)" v-close-popup @click="tools.removeFromMyGroups($q, contact.username, groupname)">
<q-item-section avatar>
<q-icon color="negative" name="fas fa-user-minus"/>
</q-item-section>
@@ -165,33 +178,35 @@
<q-btn v-if="contact.username !== userStore.my.username" rounded
:icon="userStore.IsMyFriendByUsername(contact.username) ? `fas fa-ellipsis-h` : `fas fa-user`">
<q-menu>
<q-list v-if="(!userStore.IsMyFriendByUsername(contact.username) && !userStore.IsAskedFriendByUsername(contact.username))"
style="min-width: 200px">
<q-item clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.REQFRIEND, userStore.my.username, true, contact.username)">
<q-list style="min-width: 200px">
<q-item v-if="(!userStore.IsMyFriendByUsername(contact.username) && !userStore.IsAskedFriendByUsername(contact.username))"
clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.REQFRIEND, userStore.my.username, true, contact.username)">
<q-item-section avatar>
<q-icon color="positive" name="fas fa-user-plus"/>
</q-item-section>
<q-item-section>{{ $t('friends.ask_friend') }}</q-item-section>
</q-item>
</q-list>
<q-list v-else-if="(!userStore.IsMyFriendByUsername(contact.username) && userStore.IsAskedFriendByUsername(contact.username))"
style="min-width: 200px">
<q-item clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.REQFRIEND, userStore.my.username, false, contact.username)">
<q-item v-else-if="(!userStore.IsMyFriendByUsername(contact.username) && userStore.IsAskedFriendByUsername(contact.username))"
clickable v-close-popup @click="setCmd($q, shared_consts.FRIENDSCMD.REQFRIEND, userStore.my.username, false, contact.username)">
<q-item-section avatar>
<q-icon color="negative" name="fas fa-user-minus"/>
</q-item-section>
<q-item-section>{{ $t('friends.cancel_ask_friend') }}</q-item-section>
</q-item>
</q-list>
<q-list v-else-if="userStore.IsMyFriendByUsername(contact.username)" style="min-width: 200px">
<q-item clickable v-close-popup
<q-item v-else-if="userStore.IsMyFriendByUsername(contact.username)" style="min-width: 200px"
clickable v-close-popup
@click="setCmd($q, shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS, userStore.my.username, '', contact.username)">
<q-item-section avatar>
<q-icon color="negative" name="fas fa-user-minus"/>
</q-item-section>
<q-item-section>{{ $t('friends.remove_from_myfriends') }}</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="tools.reportUser($q, userStore.my.username, contact.username)">
<q-item-section avatar>
<q-icon color="negative" name="fas fa-flag"/>
</q-item-section>
<q-item-section>{{ $t('friends.report_user') }}</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn>

View File

@@ -28,6 +28,7 @@ export interface IMyGroup {
link_telegram?: string
username_who_block?: string
date_blocked?: Date
createdBy?: string
}
export interface ICalcStat {

View File

@@ -100,9 +100,9 @@
class="bg-red text-white"
style="text-align: center;"
>
<em style="font-weight: bold">{{ $t('db.reporteduser') }}<br>
<em style="font-weight: bold">{{ $t('db.reporteduser', {date_report: tools.getstrDateTimeShort(myuser.date_report)}) }}<br>
da: {{ myuser.username_who_report }}<br>
in Data: {{ tools.getstrshortDateTime(myuser.date_report) }} </em>
</em>
</q-banner>
<q-btn color="green" :label="`Sblocca ` + myuser.username" @click="tools.unblockUser($q, getMyUsername(), myuser.username)"></q-btn>

View File

@@ -158,6 +158,7 @@ const msg_es = {
domanda_removegroup: 'Rimuovere dal Gruppo {username} ?',
removedfriend: 'Rimosso dalla lista di Amici',
removedgroup: 'Rimosso dal Gruppo',
addedtoadmin: 'Aggiunto {username} come amministratore',
domanda_addtofriend: 'Aggiungere agli amici {username}?',
domanda_addtogroup: 'Aggiungi {username} al gruppo {groupname}?',
addedfriend: 'Aggiunto alla lista di Amici',
@@ -180,7 +181,7 @@ const msg_es = {
rejected: 'Rifiutato la Fiducia',
domanda_blockuser: 'Bloccare {username}?',
domanda_blockgroup: 'Bloccare il gruppo {groupname}?',
reporteduser: 'Utente Segnalato',
reporteduser: 'Utente Segnalato in data {date_report}',
blockedfriend: 'Utente Bloccato',
domanda: 'Domanda',
},

View File

@@ -198,8 +198,12 @@ const msg_it = {
domanda_exit_fromgroup: 'Uscire dal Gruppo {groupname} ?',
domanda_remove_group: 'Sicuro di voler Eliminare il Gruppo {groupname} ?',
domanda_removegroup: 'Rimuovere dal Gruppo {username} ?',
domanda_addadminofmygroup: 'Aggiungere {username} come Amministratore del Gruppo {groupname} ?',
domanda_removeadminofmygroup: 'Rimuovere {username} dall\' incarico di Amministratore del Gruppo {groupname} ?',
removedfriend: 'Rimosso dalla lista di Amici',
removedgroup: 'Rimosso dal Gruppo',
addedtoadmin: 'Aggiunto {username} come amministratore',
removedtoadmin: 'Rimosso {username} come amministratore',
refusedgroup: 'Rifiutato a {username} la richiesta di entrare nel Gruppo',
youarerefusedgroup: 'Ti è stato rifiutata la richiesta di entrare in questo Gruppo (per info chiedi all\'amministratore del gruppo)',
deletedgroup: 'Gruppo Eliminato',
@@ -228,7 +232,7 @@ const msg_it = {
domanda_unblockuser: 'Sbloccare {username}?',
domanda_reportuser: 'Segnalare l\'utente {username}?',
domanda_blockgroup: 'Bloccare il gruppo {groupname}?',
reporteduser: 'Utente Segnalato',
reporteduser: 'Utente Segnalato in data {date_report}',
blockedfriend: 'Utente Bloccato',
unblockedfriend: 'Utente Sbloccato',
domanda: 'Domanda',
@@ -677,7 +681,7 @@ const msg_it = {
endwork_estimate: 'Data fine lavori stimata',
privacyread: 'Chi lo puo vedere:',
privacywrite: 'Chi lo puo modificare:',
createdby: 'Creato da:',
createdby: 'Creato da',
tipovisu: 'Visualizzazione:',
totalphases: 'Totale Fasi',
themecolor: 'Tema Colore',
@@ -969,8 +973,8 @@ const msg_it = {
mypages: {
find_people: 'Cerca Persone',
find_group: 'Cerca Gruppo',
manage_my_groups: 'Gruppi che Gestisco',
follow_groups: 'Miei Gruppi (di cui fai parte)',
manage_my_groups: 'Amministratore',
follow_groups: 'Gruppi di cui fai parte',
create_group: 'Crea Gruppo',
friends: 'Amici',
bacheca: 'Bacheca',
@@ -1014,10 +1018,14 @@ const msg_it = {
removed: 'Rimosso',
admin: 'amministratore',
admins: 'Amministratori',
createdby: 'Creato da {username} in data {date}',
subscribes: 'Iscritti',
ask_group: 'Chiedi di entrare nel Gruppo',
exit_group: 'Esci dal Gruppo',
delete_group: 'Elimina il Gruppo',
accept_group: 'Accetta la richiesta',
addasadmin: 'Aggiungi come Admin del Gruppo',
remove_as_admin: 'Rimuovi come Admin del Gruppo',
remove_from_mygroups: 'Rimuovi dal Gruppo',
block_group: 'Blocca Gruppo',
cancel_ask_group: 'Annulla la richiesta',

View File

@@ -191,6 +191,7 @@ export const costanti = {
USER_GROUPS: 22,
CREATE_GROUP: 30,
MANAGE_GROUPS: 31,
ADMIN_GROUPS: 40,
CMD_DELETE: 1,
CMD_MODIFY: 2,

View File

@@ -596,6 +596,7 @@ export const colmyUserGroup = [
fieldtype: costanti.FieldType.multiselect,
jointable: 'friendsandme',
field_outtype: costanti.FieldType.object,
showWhen: costanti.showWhen.InView_OnlyifExist,
}),
AddCol({
name: 'date_created', label_trans: 'reg.pub_created', fieldtype: costanti.FieldType.onlydate,

View File

@@ -4811,6 +4811,54 @@ export const tools = {
})
},
addtoAdminOfMyGroup($q: any, username: string, groupnameDest: string, domanda: any = '') {
const userStore = useUserStore()
$q.dialog({
message: domanda ? domanda : t('db.domanda_addadminofmygroup', { username, groupnameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setGroupsCmd($q, t, username, groupnameDest, shared_consts.GROUPSCMD.ADDADMIN_OFMYGROUP, null).then((res) => {
if (res) {
const mygrp = userStore.my.profile.manage_mygroups.find((rec: IMyGroup) => rec.groupname === groupnameDest)
console.log('mygrp', mygrp)
if (mygrp && mygrp.admins) {
mygrp.admins = [...mygrp.admins, {username, date: new Date}]
console.log('mygrp.admins', mygrp.admins)
tools.showPositiveNotif($q, t('db.addedtoadmin', { username }))
}
}
})
})
},
removeAdminOfMyGroup($q: any, username: string, groupnameDest: string, domanda: any = '') {
const userStore = useUserStore()
$q.dialog({
message: domanda ? domanda : t('db.domanda_removeadminofmygroup', { username, groupnameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setGroupsCmd($q, t, username, groupnameDest, shared_consts.GROUPSCMD.REMOVEADMIN_OFMYGROUP, null).then((res) => {
if (res) {
const mygrp = userStore.my.profile.manage_mygroups.find((rec: IMyGroup) => rec.groupname === groupnameDest)
console.log('mygrp', mygrp)
if (mygrp && mygrp.admins) {
mygrp.admins = mygrp.admins.filter((rec: any) => rec.username !== username)
console.log('mygrp.admins', mygrp.admins)
tools.showPositiveNotif($q, t('db.removedtoadmin', { username }))
}
}
})
})
},
DeleteGroup($q: any, username: string, groupnameDest: string, domanda: any = '') {
const userStore = useUserStore()
@@ -5107,6 +5155,69 @@ export const tools = {
},
iAmTheCreatorOfTheGroup(groupname: string) {
const userStore = useUserStore()
let risultato = false
if (userStore.my.profile.manage_mygroups) {
const ris = userStore.my.profile.manage_mygroups.find((grp: IMyGroup) => {
if (grp.groupname === groupname) {
return true
}
})
// console.log('ris', ris)
return (ris && ris.createdBy === userStore.my.username)
}
return risultato
},
isUserTheCreatorOfTheGroup(groupname: string, username: string) {
const userStore = useUserStore()
let risultato = false
if (userStore.my.profile.manage_mygroups) {
const ris = userStore.my.profile.manage_mygroups.find((grp: IMyGroup) => {
if (grp.groupname === groupname) {
return true
}
})
// console.log('ris', ris)
return (ris && ris.createdBy === username)
}
return risultato
},
isUserAdminGroup(groupname: string, username: string) {
const userStore = useUserStore()
let risultato = false
if (userStore.my.profile.manage_mygroups) {
const ris = userStore.my.profile.manage_mygroups.find((grp: IMyGroup) => {
if (grp.groupname === groupname) {
return true
}
})
// console.log('ris', ris)
if (ris && ris.admins) {
const isadmin = ris.admins.find((user: IFriends) => user.username === username)
risultato = !!isadmin
}
}
return risultato
},
setCmd($q: any, cmd: number, username: string, value: any, dest: string) {
console.log('setcmd', cmd)
if (cmd === shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP) {
@@ -5117,6 +5228,10 @@ export const tools = {
tools.blockGroup($q, username, dest)
} else if (cmd === shared_consts.GROUPSCMD.SETGROUP) {
tools.addToMyGroups($q, username, dest)
} else if (cmd === shared_consts.GROUPSCMD.ADDADMIN_OFMYGROUP) {
tools.addtoAdminOfMyGroup($q, username, dest)
} else if (cmd === shared_consts.GROUPSCMD.REMOVEADMIN_OFMYGROUP) {
tools.removeAdminOfMyGroup($q, username, dest)
} else if (cmd === shared_consts.GROUPSCMD.REQGROUP) {
tools.setRequestGroup($q, username, dest, value)
} else if (cmd === shared_consts.GROUPSCMD.REFUSE_REQ_GROUP) {

View File

@@ -811,7 +811,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
return Api.SendReq('/gettable', 'POST', params)
.then((res) => {
this.serverError = false
// console.table(res)
// if (tools.isDebug())
// console.table(res)
return res.data
})
.catch((error) => {

View File

@@ -117,6 +117,8 @@ export default defineComponent({
'profile.born_city_id': 1,
'profile.qualifica': 1,
reported: 1,
date_report: 1,
username_who_report: 1,
}
},
lookup2: {
@@ -137,6 +139,8 @@ export default defineComponent({
'profile.img': 1,
'profile.qualifica': 1,
reported: 1,
date_report: 1,
username_who_report: 1,
'profile.born_city_id': 1,
}
},

View File

@@ -17,8 +17,10 @@
padding: 5px;
}
.members, .admins{
.members, .admins, .creator{
font-weight: bold;
text-align: center;
vertical-align: center;
padding: 5px;
}

View File

@@ -156,6 +156,8 @@ export default defineComponent({
'profile.mygroups': 1,
'profile.qualifica': 1,
reported: 1,
date_report: 1,
username_who_report: 1,
}
},
}

View File

@@ -36,7 +36,6 @@
</q-banner>
<div>
<q-btn
v-if="!userStore.IsMyGroupByGroupname(mygrp.groupname) && !userStore.IsAskedGroupByGroupname(mygrp.groupname) && !userStore.IsRefusedGroupByGroupname(mygrp.groupname)"
@@ -79,6 +78,10 @@
/>
</div>
</div>
<div v-if="mygrp.descr" class="no-wrap justify-evenly items-center content-start">
<!--
<q-btn
v-if="tools.iAmAdminGroup(groupname)" icon="fas fa-pencil-alt"
@@ -93,7 +96,7 @@
<q-tab label="Info" name="info" icon="fas fa-info"></q-tab>
<q-tab v-if="!!mygrp.note" label="Pagina" name="page" icon="fas fa-file-word"></q-tab>
<q-tab v-if="userStore.IsMyGroupByGroupname(mygrp.groupname) || tools.iAmAdminGroup(groupname)"
label="Iscritti" name="membri" icon="fas fa-users"></q-tab>
:label="t('groups.subscribes')" name="membri" icon="fas fa-users"></q-tab>
<q-tab v-if="tools.iAmAdminGroup(groupname)" label="Richieste" name="rich" icon="fas fa-user-plus"></q-tab>
<q-tab v-if="tools.iAmAdminGroup(groupname)" label="Rifiutati" name="refused" icon="fas fa-user-minus"></q-tab>
</q-tabs>
@@ -114,34 +117,48 @@
</CMyFieldRec>
</q-card>
<q-card>
<div class="members">
<q-icon name="fas fa-users"></q-icon>
{{ numUsers() }} {{ numUsers() === 1 ? t('groups.member') : t('groups.members') }}
</div>
<div class="admins">
<q-icon name="fas fa-user-cog"></q-icon>
{{ numAdmins() }} {{ numAdmins() === 1 ? t('groups.admin') : t('groups.admins') }}
</div>
<div v-for="(user, index) of mygrp.admins" :key="index">
<CMyUser
:mycontact="user"
:visu="costanti.FIND_PEOPLE"
@setCmd="tools.setCmd"
>
</CMyUser>
</div>
<q-card-section>
<div class="text-h6">Attività:</div>
</q-card-section>
<q-separator />
<q-card-section>
<div class="creator">
<q-icon name="fas fa-lightbulb"></q-icon>
{{ $t('groups.createdby', {username: mygrp.createdBy, date: tools.getstrDateLong(mygrp.date_created) }) }}
</div>
<div class="members">
<q-icon name="fas fa-users"></q-icon>
{{ numUsers() }} {{ numUsers() === 1 ? t('groups.member') : t('groups.members') }}
</div>
<div class="admins">
<q-icon name="fas fa-user-cog"></q-icon>
{{ numAdmins() }} {{ numAdmins() === 1 ? t('groups.admin') : t('groups.admins') }}
</div>
<div v-for="(user, index) of mygrp.admins" :key="index">
<CMyUser
:mycontact="user"
:visu="costanti.FIND_PEOPLE"
@setCmd="tools.setCmd"
>
</CMyUser>
</div>
</q-card-section>
</q-card>
</div>
<q-card>
<br>
<div class="col-12 text-h7">
<span v-if="checkifShow('descr')">{{ mygrp.descr }}</span>
</div>
</q-card>
<q-card v-if="mygrp.title">
<q-card-section>
<div class="text-h6">Descrizione:</div>
</q-card-section>
<q-separator />
<q-card-section>
<div class="col-12 text-h7">
<span v-if="checkifShow('descr')">{{ mygrp.descr }}</span>
</div>
<div v-if="mygrp.title" class="myrow justify-evenly items-center q-pa-sm q-ma-sm">
<q-card>
<div class="col-6 q-ma-xs">
<q-btn
@@ -164,9 +181,9 @@
:href="getLinkWebSite()" target="__blank">
</q-btn>
</div>
</q-card>
</div>
</q-card-section>
</q-card>
</q-tab-panel>
@@ -180,7 +197,7 @@
</div>
</q-tab-panel>
<q-tab-panel name="membri">
<q-tab-panel name="membri" style="max-width: 400px;">
<CGridTableRec
ref="tabMembri"
prop_mytable="users"