Merge remote-tracking branch 'origin/moreStuff'

master
Andrew Woodlee 2 years ago
commit 39c4efabef

@ -32,6 +32,8 @@ class SettingsController extends SiteController {
router.post('/', this.postUpdateSettings.bind(this));
router.post('/images/updateSiteIcon', imageUpload.single('imageFile'), this.postUpdateSiteIcon.bind(this));
router.post('/images/updatePostImage', imageUpload.single('imageFile'), this.postUpdatePostImage.bind(this));
router.get('/', this.getSettingsView.bind(this));
@ -65,6 +67,7 @@ class SettingsController extends SiteController {
res.locals.pageTitle = `Image settings for ${this.dtp.config.site.name}`;
try {
res.locals.siteIcon = await imageService.getSiteIconInfo();
res.locals.postImage = await imageService.getPostImageInfo();
res.render('admin/settings/images');
} catch (error) {
return next(error);
@ -95,6 +98,30 @@ class SettingsController extends SiteController {
}
}
async postUpdatePostImage (req, res) {
const { image: imageService } = this.dtp.services;
try {
const displayList = this.createDisplayList('site-post-image');
await imageService.updatePostImage(req.body, req.file);
displayList.showNotification(
'Post Image updated successfully.',
'success',
'bottom-center',
2000,
);
res.status(200).json({
success: true,
displayList,
});
} catch (error) {
this.log.error('failed to update site icon', { error });
return res.status(error.statusCode || 500).json({
success: false,
message: error.message,
});
}
}
}
module.exports = {

@ -7,7 +7,7 @@
const express = require('express');
const multer = require('multer');
const { SiteController, SiteError} = require('../../lib/site-lib');
const { SiteController, SiteError } = require('../../lib/site-lib');
class PostController extends SiteController {

@ -241,6 +241,59 @@ class ImageService extends SiteService {
return icon;
}
async getPostImageInfo() {
const siteImagesDir = path.join(this.dtp.config.root, 'client', 'img');
let icon;
try {
await fs.promises.access(siteImagesDir);
const iconMetadata = await sharp(path.join(siteImagesDir, 'default-poster.jpg')).metadata();
icon = {
metadata: iconMetadata,
path: `/img/default-poster.jpg`,
};
} catch (error) {
icon = null;
}
return icon;
}
async updatePostImage(imageDefinition, file) {
this.log.debug('updating site icon', { imageDefinition, file });
try {
const siteImagesDir = path.join(this.dtp.config.root, 'client', 'img');
const sourceIconFilePath = file.path;
await sharp(sourceIconFilePath).resize({
fit: sharp.fit.inside,
width: 540,
height: 960,
}).jpeg()
.toFile(path.join(siteImagesDir, `default-poster.jpg`));
return path.join(siteImagesDir, 'default-poster.jpg');
} catch (error) {
this.log.error('failed to update site icon', { error });
throw error;
} finally {
this.log.info('removing uploaded image from local file system', { file: file.path });
await fs.promises.rm(file.path);
}
}
async updateSiteIcon(imageDefinition, file) {
this.log.debug('updating site icon', { imageDefinition, file });
@ -261,15 +314,13 @@ class ImageService extends SiteService {
for (var size of sizes) {
await sharp(sourceIconFilePath).resize({
fit: sharp.fit.contain,
fit: sharp.fit.inside,
width: size,
height: size,
}).png()
.toFile(path.join(siteIconDir, `icon-${size}x${size}.png`));
}
await fs.promises.cp(sourceIconFilePath, path.join(siteIconDir, `${siteDomain}.png`));
await fs.promises.cp(sourceIconFilePath, path.join(siteImagesDir, 'social-cards', `${siteDomain}.png`));
return path.join(siteIconDir, 'icon-512x512.png');
} catch (error) {

@ -25,12 +25,6 @@ ul(uk-nav).uk-nav-default
i.fas.fa-cog
span.uk-margin-small-left Otp Settings
li(class={ 'uk-active': (adminView === 'otp') })
a(href="/admin/otp")
span.nav-item-icon
i.fas.fa-cog
span.uk-margin-small-left Otp Settings
li.uk-nav-divider
li(class={ 'uk-active': (adminView === 'announcement') })

@ -22,7 +22,26 @@ block content
'site-icon-upload',
'site-icon-file',
'site-icon-picture',
`/img/icon/dtp-base.png`,
`/img/icon/dtp-sites.png`,
siteIcon,
{ aspectRatio: 1 },
)
div(uk-grid).uk-flex-middle
.uk-width-expand
fieldset
legend Default poster
.uk-margin
if postImage
p.uk-card-title Replace your default post image below.
else
p.uk-card-title You do not currently have a default post image. Add one below.
+renderFileUploadImage(
`/admin/settings/images/updatePostImage`,
'site-post-upload',
'site-post-file',
'site-post-picture',
`/img/default-poster.jpg`,
postImage,
{ aspectRatio: 16/9 },
)
Loading…
Cancel
Save