Generate multiple avatar sizes

This commit is contained in:
Čarodej
2021-11-02 16:11:53 +01:00
parent 9b2dbe06c7
commit dc8ec5f20b
18 changed files with 197 additions and 75 deletions

View File

@@ -12,4 +12,19 @@ return [
'colors' => [
'#9ad2bf', '#9ad2cd', '#d29a9a', '#d2ce9a', '#9aadd2', '#c59ad2',
],
'avatar_sizes' => [
[
'size' => 160,
'name' => 'md',
],
[
'size' => 60,
'name' => 'sm',
],
[
'size' => 42,
'name' => 'xs',
],
]
];

View File

@@ -11,7 +11,7 @@
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.js?id=bbbd57ba43e4f381946f",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~1bec6fe4.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~1bec6fe4.js?id=510e6c1b1017a73a40a6",
"/chunks/admin~chunks/platform.js": "/chunks/admin~chunks/platform.js?id=90270d0c5aeb5c50dacf",
"/chunks/admin~chunks/platform~chunks/settings.js": "/chunks/admin~chunks/platform~chunks/settings.js?id=892ef3945a5b63ccd634",
"/chunks/admin~chunks/platform~chunks/settings.js": "/chunks/admin~chunks/platform~chunks/settings.js?id=61e970ffb679245686c3",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js?id=f005b83de750bfec241f",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=66048f6dddf596913bbd",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=aa284736dda7647d5c9e",
@@ -32,7 +32,7 @@
"/chunks/contact-us.js": "/chunks/contact-us.js?id=b7be3b643318f6c29dcc",
"/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js": "/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js?id=65ee559ca803555be568",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=55135fff8801bdf735c4",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=893fabb6cb786b7e071b",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=cf8c40eec87a01f07b6b",
"/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-i~0e2a0654.js": "/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-i~0e2a0654.js?id=0391ad036c47d999f159",
"/chunks/database.js": "/chunks/database.js?id=f6272904ff77ab215903",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=6c86916c6c6f679fa86b",
@@ -46,7 +46,7 @@
"/chunks/homepage.js": "/chunks/homepage.js?id=b89dd81804b8a0bd3f0b",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=6f5255c42bac60a88220",
"/chunks/invitation.js": "/chunks/invitation.js?id=c9cd3541ee362ae8d5f7",
"/chunks/invoices.js": "/chunks/invoices.js?id=fe45319300d75d185b81",
"/chunks/invoices.js": "/chunks/invoices.js?id=efcfdd569278c114f51a",
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=ea129760157c8e44f324",
"/chunks/not-found.js": "/chunks/not-found.js?id=034287ee0ecb036320d3",
"/chunks/page-edit.js": "/chunks/page-edit.js?id=87f50fa5a1bd393c49da",
@@ -55,7 +55,7 @@
"/chunks/plan-create.js": "/chunks/plan-create.js?id=d939086958e81fafdd65",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=96f48131997a0092be4b",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=19c260a6aa85d20c8042",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=49030c784af215623608",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=99854b8b4518fbebc79f",
"/chunks/plans.js": "/chunks/plans.js?id=6fca685daa45f22e4c8f",
"/chunks/platform.js": "/chunks/platform.js?id=7e53bcf8da2d3f9ce731",
"/chunks/platform~chunks/settings-subscription~chunks/shared~chunks/user-subscription.js": "/chunks/platform~chunks/settings-subscription~chunks/shared~chunks/user-subscription.js?id=8656b69a97cace919251",
@@ -64,7 +64,7 @@
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=58edfb3a35062e1ba4e0",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=f8b2619e393a5823bf29",
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=22f629caf127051898e9",
"/chunks/settings.js": "/chunks/settings.js?id=c5be6ba6929a8a260165",
"/chunks/settings.js": "/chunks/settings.js?id=78cc8845537b13463df4",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=c8b08d42c6692d171884",
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=a9a6286b9a416c949003",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=5875aa689f3d14a37494",
@@ -78,7 +78,7 @@
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=8b9ac9ed9afd8dd15229",
"/chunks/shared/files.js": "/chunks/shared/files.js?id=8ed7578e7f74e385da95",
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=f2fb680ebf4873ff4436",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=8ea75353ce2e8f0ff63e",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=04b378323ff1494fa85d",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=0307551ea7ad8e9bd3c2",
"/chunks/status-check.js": "/chunks/status-check.js?id=7de8baaff011e2f1bab9",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=6b94c5fda72871b8d2bd",
@@ -89,7 +89,7 @@
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=2bffa85e82a5cda1dcd2",
"/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=f59d97c1cbf6649b7057",
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=460e6f80d824b5a93adf",
"/chunks/user.js": "/chunks/user.js?id=4cd68f8304d855e39d6c",
"/chunks/user.js": "/chunks/user.js?id=fe26116ebc97069cf7f9",
"/chunks/user-create.js": "/chunks/user-create.js?id=f7ff89074c03e72e3d06",
"/chunks/user-delete.js": "/chunks/user-delete.js?id=36e7149e777f1ecd71e9",
"/chunks/user-detail.js": "/chunks/user-detail.js?id=6218f429f4040d0524ac",
@@ -97,7 +97,7 @@
"/chunks/user-password.js": "/chunks/user-password.js?id=22725c9c88b862276b34",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=3be3b8a695ef8b69792a",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=370b3df08b2ee39bf6ac",
"/chunks/users.js": "/chunks/users.js?id=d16275ff233f8203a705",
"/chunks/users.js": "/chunks/users.js?id=562f40bdfc51d8c5d4dd",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~24b428d3.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~24b428d3.js?id=ee89932f7ee76e74483e",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~b505e62a.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~b505e62a.js?id=8163e0eab55c50f8afb8",
"/vendors~chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunk~40ccbae3.js": "/vendors~chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunk~40ccbae3.js?id=37ce1e1ab9968c100712",
@@ -574,7 +574,7 @@
"/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~34b5eb22.a14b8f8cb897fb6ae4ab.hot-update.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~34b5eb22.a14b8f8cb897fb6ae4ab.hot-update.js",
"/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~34b5eb22.86b4136c22d756f423b4.hot-update.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~34b5eb22.86b4136c22d756f423b4.hot-update.js",
"/js/main.3e07bae3987249743b99.hot-update.js": "/js/main.3e07bae3987249743b99.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.js?id=4acbc8f93ca64c3b896f",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.js?id=8b63f1df2980adfabef3",
"/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.3e07bae3987249743b99.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.3e07bae3987249743b99.hot-update.js",
"/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~34b5eb22.3e07bae3987249743b99.hot-update.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~34b5eb22.3e07bae3987249743b99.hot-update.js",
"/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~bf3ddedc.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~bf3ddedc.js?id=d8ecc7af25c633e36fc7",
@@ -1201,5 +1201,42 @@
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.429a9317e1068a4ca919.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.429a9317e1068a4ca919.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.7cbeb4df64d14d05a742.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.7cbeb4df64d14d05a742.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.9322a66e6a4b684d7efa.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.9322a66e6a4b684d7efa.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.40e7fa6c551730545b85.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.40e7fa6c551730545b85.hot-update.js"
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.40e7fa6c551730545b85.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.40e7fa6c551730545b85.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.c004e53916d113657982.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.c004e53916d113657982.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.97c81accb2c71051894a.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.97c81accb2c71051894a.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings.c2115bf92c3dc767fb5e.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings.c2115bf92c3dc767fb5e.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings.c815ed9acb34b14b6cb8.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings.c815ed9acb34b14b6cb8.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings.27b6b67bcd900662a010.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings.27b6b67bcd900662a010.hot-update.js",
"/chunks/settings.5d3079acdf7023371fe5.hot-update.js": "/chunks/settings.5d3079acdf7023371fe5.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings.e7ac6844f4d00d4bb9aa.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings.e7ac6844f4d00d4bb9aa.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings.9172f20079efc5fb96a9.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings.9172f20079efc5fb96a9.hot-update.js",
"/js/main.e5bc9b9e0036dfe816b7.hot-update.js": "/js/main.e5bc9b9e0036dfe816b7.hot-update.js",
"/chunks/user.98483a14a32a1cd3f377.hot-update.js": "/chunks/user.98483a14a32a1cd3f377.hot-update.js",
"/chunks/settings.81dac7b0d287fea465ec.hot-update.js": "/chunks/settings.81dac7b0d287fea465ec.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.399dd5e2fe325a039db4.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.399dd5e2fe325a039db4.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.75551917db852b68e5f5.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.75551917db852b68e5f5.hot-update.js",
"/chunks/dashboard.414e45f0d379f497150e.hot-update.js": "/chunks/dashboard.414e45f0d379f497150e.hot-update.js",
"/chunks/invoices.414e45f0d379f497150e.hot-update.js": "/chunks/invoices.414e45f0d379f497150e.hot-update.js",
"/chunks/plan-subscribers.414e45f0d379f497150e.hot-update.js": "/chunks/plan-subscribers.414e45f0d379f497150e.hot-update.js",
"/chunks/platform.414e45f0d379f497150e.hot-update.js": "/chunks/platform.414e45f0d379f497150e.hot-update.js",
"/chunks/users.414e45f0d379f497150e.hot-update.js": "/chunks/users.414e45f0d379f497150e.hot-update.js",
"/chunks/sign-in.f4f216ea1c4ccae30b9e.hot-update.js": "/chunks/sign-in.f4f216ea1c4ccae30b9e.hot-update.js",
"/chunks/sign-in.7837ad144a480299b638.hot-update.js": "/chunks/sign-in.7837ad144a480299b638.hot-update.js",
"/js/main.a652a80fe2e260f247c0.hot-update.js": "/js/main.a652a80fe2e260f247c0.hot-update.js",
"/chunks/platform.c80dd57639c19a32d654.hot-update.js": "/chunks/platform.c80dd57639c19a32d654.hot-update.js",
"/chunks/platform.609b8dd4f5e4bf092303.hot-update.js": "/chunks/platform.609b8dd4f5e4bf092303.hot-update.js",
"/js/main.b3d88816d47f567e8421.hot-update.js": "/js/main.b3d88816d47f567e8421.hot-update.js",
"/js/main.a9946285ff64c7882e2e.hot-update.js": "/js/main.a9946285ff64c7882e2e.hot-update.js",
"/js/main.f839f73b41807cafd307.hot-update.js": "/js/main.f839f73b41807cafd307.hot-update.js",
"/chunks/platform.c1b9b12da455df5edf71.hot-update.js": "/chunks/platform.c1b9b12da455df5edf71.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.a1d4f7e91eb9bcd853a0.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.a1d4f7e91eb9bcd853a0.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.f3d3358cf5a9c49ec0ff.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.f3d3358cf5a9c49ec0ff.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.4d7c571d5ba286095e18.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.4d7c571d5ba286095e18.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.9406dec390d3f606f711.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.9406dec390d3f606f711.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.ba2f1bd17f1899e6337b.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.ba2f1bd17f1899e6337b.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.9756411e4c2795dd28c0.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.9756411e4c2795dd28c0.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.0e3361cf05f5491c3fe4.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.0e3361cf05f5491c3fe4.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.dbb98b7c9552aee75229.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.dbb98b7c9552aee75229.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.a46cfa472ddcfedfd1d3.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.a46cfa472ddcfedfd1d3.hot-update.js",
"/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.81dddd2a458fbea706b1.hot-update.js": "/chunks/admin~chunks/files~chunks/invitation~chunks/my-shared-items~chunks/platform~chunks/recent-upl~dfa67595.81dddd2a458fbea706b1.hot-update.js"
}

View File

@@ -6,7 +6,7 @@
<td style="width: 300px">
<router-link :to="{name: 'UserDetail', params: {id: row.data.id}}">
<DatatableCellImage
:image="row.data.relationships.settings.data.attributes.avatar"
:image="row.data.relationships.settings.data.attributes.avatar.sm"
:title="row.data.relationships.settings.data.attributes.name"
:description="row.data.attributes.email"
/>

View File

@@ -3,11 +3,10 @@
<img
:style="{width: size + 'px', height: size + 'px'}"
v-if="member.data.attributes.avatar"
:src="member.data.attributes.avatar"
:alt="member.data.attributes.name"
:src="avatar"
:class="[borderRadius, {'border-3 border-white dark:border-dark-background': isBorder}]"
class=""
>
/>
<div
v-else
class="flex items-center justify-center"
@@ -41,7 +40,6 @@
return this.size > 32 ? 'rounded-xl' : 'rounded-lg'
},
fontSize() {
if (this.size > 42) {
return 'text-lg'
} else if (this.size > 32) {
@@ -50,6 +48,15 @@
return 'text-sm'
}
},
avatar() {
if (this.size > 62) {
return this.member.data.attributes.avatar.md
} else if (this.size > 32) {
return this.member.data.attributes.avatar.sm
} else {
return this.member.data.attributes.avatar.xs
}
},
}
}
</script>

View File

@@ -1,7 +1,7 @@
<template>
<div class="user-avatar" :class="size">
<span v-if="isIncompletePayment || isNearlyFullStorageCapacity" class="notification"></span>
<img :src="user.data.relationships.settings.data.attributes.avatar" :alt="user.data.relationships.settings.data.attributes.name">
<img :src="user.data.relationships.settings.data.attributes.avatar.sm" :alt="user.data.relationships.settings.data.attributes.name">
</div>
</template>

View File

@@ -128,7 +128,7 @@ const mutations = {
state.user.data.relationships.settings.data.attributes.name = name
},
UPDATE_AVATAR(state, avatar) {
state.user.data.relationships.settings.data.attributes.avatar = avatar
state.user.data.relationships.settings.data.attributes.avatar.sm = avatar
},
REMOVE_ITEM_FROM_FAVOURITES(state, item) {
state.user.data.relationships.favourites.data = state.user.data.relationships.favourites.data.filter(folder => folder.data.id !== item.data.id)

View File

@@ -34,7 +34,7 @@
<router-link v-if="row.relationships" :to="{name: 'UserInvoices', params: {id: row.relationships.user.data.id}}">
<DatatableCellImage
image-size="small"
:image="row.relationships.user.data.attributes.avatar"
:image="row.relationships.user.data.attributes.avatar.sm"
:title="row.relationships.user.data.attributes.name"
/>
</router-link>

View File

@@ -10,7 +10,7 @@
<router-link :to="{name: 'UserDetail', params: {id: row.data.id}}">
<DatatableCellImage
image-size="small"
:image="row.data.relationships.settings.data.attributes.avatar"
:image="row.data.relationships.settings.data.attributes.avatar.sm"
:title="row.data.relationships.settings.data.attributes.name"
/>
</router-link>

View File

@@ -24,7 +24,7 @@
<td style="min-width: 320px">
<router-link :to="{name: 'UserDetail', params: {id: row.data.id}}">
<DatatableCellImage
:image="row.data.relationships.settings.data.attributes.avatar"
:image="row.data.relationships.settings.data.attributes.avatar.sm"
:title="row.data.relationships.settings.data.attributes.name"
:description="row.data.attributes.email"
/>

View File

@@ -8,7 +8,7 @@
<!--User thumbnail-->
<div class="user-thumbnail">
<div class="avatar">
<img :src="user.data.relationships.settings.data.attributes.avatar" :alt="user.data.relationships.settings.data.attributes.name">
<img :src="user.data.relationships.settings.data.attributes.avatar.sm" :alt="user.data.relationships.settings.data.attributes.name">
<!--<img :src="user.data.attributes.avatar" :alt="user.data.attributes.name" class="blurred">-->
</div>
<div class="info">

View File

@@ -34,7 +34,7 @@
<AuthContent name="sign-in" :visible="false">
<div class="user" v-if="checkedAccount">
<img class="user-avatar mx-auto" :src="checkedAccount.avatar" :alt="checkedAccount.name">
<img class="user-avatar mx-auto" :src="checkedAccount.avatar.md" :alt="checkedAccount.name">
<h1>{{ $t('page_sign_in.title', {name: checkedAccount.name}) }}</h1>
<h2>{{ $t('page_sign_in.subtitle') }}:</h2>
</div>
@@ -64,7 +64,7 @@
<AuthContent name="not-verified" :visible="false">
<div class="user" v-if="checkedAccount">
<img class="user-avatar" :src="checkedAccount.avatar" :alt="checkedAccount.name">
<img class="user-avatar" :src="checkedAccount.avatar.md" :alt="checkedAccount.name">
<h1>{{ checkedAccount.name }}</h1>
<h2>{{ $t('page_not_verified.subtitle') }}</h2>
</div>
@@ -78,7 +78,7 @@
<AuthContent name="two-factor-authentication" :visible="false">
<div class="user" v-if="checkedAccount">
<img class="user-avatar" :src="checkedAccount.avatar" :alt="checkedAccount.name">
<img class="user-avatar" :src="checkedAccount.avatar.md" :alt="checkedAccount.name">
<h1> {{ $t('page_sign_in_2fa_title', {name: checkedAccount.name}) }} </h1>
<h2> {{ $t('page_sign_in_2fa_subtitle') }}:</h2>
</div>
@@ -114,7 +114,7 @@
<AuthContent name="two-factor-recovery" :visible="false">
<div class="user" v-if="checkedAccount">
<img class="user-avatar" :src="checkedAccount.avatar" :alt="checkedAccount.name">
<img class="user-avatar" :src="checkedAccount.avatar.md" :alt="checkedAccount.name">
<h1> {{ checkedAccount.name }} </h1>
<h2>{{ $t('page_sign_in.2fa_recovery_subtitle') }}:</h2>
</div>

View File

@@ -26,7 +26,7 @@
<div class="avatar">
<UserImageInput
v-model="avatar"
:avatar="user.data.relationships.settings.data.attributes.avatar"
:avatar="user.data.relationships.settings.data.attributes.avatar.md"
/>
</div>
<div class="info">

View File

@@ -17,6 +17,7 @@ use Domain\Pages\Actions\SeedDefaultPagesAction;
use Domain\Settings\Actions\SeedDefaultSettingsAction;
use Domain\Localization\Actions\SeedDefaultLanguageAction;
use Domain\SetupWizard\Actions\CreateDiskDirectoriesAction;
use Intervention\Image\ImageManagerStatic as Image;
class SetupDevEnvironment extends Command
{
@@ -99,10 +100,12 @@ class SetupDevEnvironment extends Command
'email_verified_at' => now(),
]);
$avatar_name = $this->generate_avatar('avatar-01.png');
$user
->settings()
->create([
'avatar' => 'avatars/avatar-01.png',
'avatar' => $avatar_name,
'storage_capacity' => 5,
'name' => 'Jane Doe',
'address' => $this->faker->address,
@@ -114,8 +117,6 @@ class SetupDevEnvironment extends Command
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
]);
Storage::putFileAs('avatars', storage_path('demo/avatars/avatar-01.png'), 'avatar-01.png', 'private');
// Show user credentials
$this->info('Default admin account created. Email: howdy@hi5ve.digital and Password: vuefilemanager');
}
@@ -158,10 +159,12 @@ class SetupDevEnvironment extends Command
'email_verified_at' => now(),
]);
$avatar_name = $this->generate_avatar($user['avatar']);
$newbie
->settings()
->create([
'avatar' => "avatars/{$user['avatar']}",
'avatar' => $avatar_name,
'storage_capacity' => 5,
'name' => $this->faker->name,
'address' => $this->faker->address,
@@ -173,8 +176,6 @@ class SetupDevEnvironment extends Command
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
]);
Storage::putFileAs('avatars', storage_path("demo/avatars/{$user['avatar']}"), $user['avatar'], 'private');
$this->info("Generated user with email: $newbie->email and Password: vuefilemanager");
});
}
@@ -1119,4 +1120,33 @@ class SetupDevEnvironment extends Command
$this->call('config:clear');
$this->call('view:clear');
}
/**
* @param $avatar
* @return string
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
private function generate_avatar($avatar): string
{
$image = \Illuminate\Support\Facades\File::get(storage_path("/demo/avatars/{$avatar}"));
// Create avatar name
$avatar_name = Str::uuid() . '.png';
// Create intervention image
$img = Image::make($image);
// Generate avatar
collect(config('vuefilemanager.avatar_sizes'))
->each(function ($size) use ($img, $image, $avatar_name) {
// fit thumbnail
$img->fit($size['size'], $size['size'])->stream();
// Store thumbnail to disk
Storage::put("avatars/{$size['name']}-{$avatar_name}", $img);
});
return $avatar_name;
}
}

View File

@@ -1,6 +1,7 @@
<?php
namespace App\Users\Controllers\Account;
use App\Users\Requests\UpdateUserProfileSettingsRequest;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
@@ -12,26 +13,13 @@ class UpdateProfileSettingsController extends Controller
/**
* Update user settings
*/
public function __invoke(Request $request): Response
public function __invoke(UpdateUserProfileSettingsRequest $request): Response
{
// Validate request
// TODO: pridat validator do requestu
$validator = Validator::make($request->all(), [
'avatar' => 'sometimes|file',
'name' => 'string',
'value' => 'string',
]);
// Return error
if ($validator->fails()) {
abort(400, 'Bad input');
}
// Get user
$user = Auth::user();
// Check if is demo
abort_if(is_demo_account($user->email), 204, 'Done.');
abort_if(is_demo_account(), 204, 'Done.');
// Update avatar
if ($request->hasFile('avatar')) {

View File

@@ -16,7 +16,7 @@ class UserSettings extends Model
/**
* Format avatar to full url
*
* @return \Illuminate\Contracts\Routing\UrlGenerator|string
* @return \Illuminate\Contracts\Routing\UrlGenerator|string|array
*/
public function getAvatarAttribute()
{
@@ -27,7 +27,14 @@ class UserSettings extends Model
// Get avatar from local storage
if ($this->attributes['avatar']) {
return url('/' . $this->attributes['avatar']);
$link = [];
foreach (config('vuefilemanager.avatar_sizes') as $item) {
$link[$item['name']] = url("/avatars/{$item['name']}-{$this->attributes['avatar']}");
}
return $link;
}
return null;

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Users\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateUserProfileSettingsRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'avatar' => 'sometimes|file',
'name' => 'string',
'value' => 'string',
];
}
}

View File

@@ -320,40 +320,42 @@ if (! function_exists('is_visitor')) {
if (! function_exists('store_avatar')) {
/**
* Store user avatar to storage
*
* @param $request
* @param $name
* @return string|null
* Generate multiple avatar sizes and store it in app storage
*/
function store_avatar($request, $name)
function store_avatar($request, $name): ?string
{
if (! $request->hasFile($name)) {
// Check if file exist in http request
if (!$request->hasFile($name)) {
return null;
}
// Get file
$image = $request->file($name);
// Store avatar
$image_path = Str::random(16) . '-' . $image->getClientOriginalName();
if (in_array($image->getClientMimeType(), ['image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/webp'])) {
// Create intervention image
$img = Image::make($image->getRealPath());
// Generate thumbnail
$img->fit('150', '150')->stream();
// Store thumbnail to disk
Storage::put("avatars/$image_path", $img);
// Check supported file extension
if (! in_array($image->getClientMimeType(), ['image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/webp'])) {
return null;
}
if ($image->getClientMimeType() === 'image/svg+xml') {
Storage::putFileAs('avatars', $image, $image_path);
}
// Generate avatar name
$avatar_name = Str::uuid() . '.' . $image->getClientOriginalExtension();
// Create intervention image
$intervention = Image::make($image->getRealPath());
// Generate avatar sizes
collect(config('vuefilemanager.avatar_sizes'))
->each(function ($size) use ($intervention, $avatar_name) {
// fit thumbnail
$intervention->fit($size['size'], $size['size'])->stream();
// Store thumbnail to disk
Storage::put("avatars/{$size['name']}-{$avatar_name}", $intervention);
});
// Return path to image
return "avatars/$image_path";
return $avatar_name;
}
}
@@ -374,7 +376,7 @@ if (! function_exists('store_system_image')) {
$image = $request->file($name);
// Store avatar
$filename = Str::random(8) . '-' . str_replace(' ', '', $image->getClientOriginalName());
$filename = Str::uuid() . $image->getClientOriginalExtension();
// Store image to disk
Storage::putFileAs('system', $image, $filename);

View File

@@ -114,8 +114,12 @@ class UserAccountTest extends TestCase
'avatar' => $avatar,
])->assertStatus(204);
Storage::disk('local')
->assertExists($user->settings->getRawOriginal('avatar'));
collect(config('vuefilemanager.avatar_sizes'))
->each(fn ($size) =>
Storage::disk('local')
->assertExists("avatars/{$size['name']}-{$user->settings->getRawOriginal('avatar')}")
);
}
/**