diff --git a/helpers/providers.helper.js b/helpers/providers.helper.js new file mode 100644 index 0000000..43b1215 --- /dev/null +++ b/helpers/providers.helper.js @@ -0,0 +1,87 @@ +const config = require('../config'); +const Vimeo = require('vimeo').Vimeo; +const client = new Vimeo(config.vimeo.CLIENT_ID, config.vimeo.CLIENT_SECRET, config.vimeo.ACCESS_TOKEN); + +function parseVideo(url) { + // - Supported YouTube URL formats: + // - http://www.youtube.com/watch?v=My2FRPA3Gf8 + // - http://youtu.be/My2FRPA3Gf8 + // - https://youtube.googleapis.com/v/My2FRPA3Gf8 + // - Supported Vimeo URL formats: + // - http://vimeo.com/25451551 + // - http://player.vimeo.com/video/25451551 + // - Also supports relative URLs: + // - //player.vimeo.com/video/25451551 + + var type = undefined; + url.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/); + + if (RegExp.$3.indexOf('youtu') > -1) { + type = 'youtube'; + } else if (RegExp.$3.indexOf('vimeo') > -1) { + type = 'vimeo'; + } + + return { + type: type, + id: RegExp.$6, + class: type ? 'video' : 'unknown', + }; +} + + +function getIframeSource(iframeHtml) { + const groups = iframeHtml.match(/\ }, create: async (values, context) => { - console.log('CREAAAAAAAAAAAAAAAAAAAAAAAAAATE44444'); - console.log(values); - return await model.scope(context.scopes).create(values); + if (extraMethods.beforeCreate) { + values = extraMethods.beforeCreate(values, context); + } + var result = await model.scope(context.scopes).create(values); + if (extraMethods.afterCreate) { + result = extraMethods.beforeCreate(result, context); + } + return result; }, update: async (params, values, context) => { @@ -216,7 +221,13 @@ const generateService = (model, extraMethods = {}, options = defaultOptions) => delete: async (params, context) => { const findOptions = parseParamsToFindOptions(params); const numAffectedRows = await model.scope(context.scopes).destroy(findOptions); - return (numAffectedRows > 0); + + var result = (numAffectedRows > 0); + + if (extraMethods.afterDelete) { + extraMethods.afterDelete(values, findOptions, context); + } + return result; }, search: async (params, context) => { diff --git a/helpers/vimeo.helper.js b/helpers/vimeo.helper.js deleted file mode 100644 index 5f5a174..0000000 --- a/helpers/vimeo.helper.js +++ /dev/null @@ -1,47 +0,0 @@ -const config = require('../config'); -const Vimeo = require('vimeo').Vimeo; -const client = new Vimeo(config.vimeo.CLIENT_ID, config.vimeo.CLIENT_SECRET, config.vimeo.ACCESS_TOKEN); - -function getIframeSource(iframeHtml) { - const groups = iframeHtml.match(/\ { if (multimedia.provider === 'vimeo') { - multimedia.providerInfo = getVimeoVideoInfo(multimedia.code) + multimedia.providerInfo = extractProviderInfo(multimedia.code) } else if (multimedia.provider === 'cdn') { multimedia.url = cdnHelper.getCDNMediaUrl(multimedia.url); } diff --git a/modules/multimedia/multimedia_file.controller.js b/modules/multimedia/multimedia_file.controller.js index 3bd68be..c61b806 100644 --- a/modules/multimedia/multimedia_file.controller.js +++ b/modules/multimedia/multimedia_file.controller.js @@ -49,9 +49,9 @@ const extraControllers = { try { if (req.file) { data.url = req.file.path.replace(configuration.uploads.path, ''); + data.provider = 'cdn'; + data.class = 'picture'; } - var data = req.body; - console.log(data); const context = buildContext(req, config); const result = await multimediaFileService.create(data, context); diff --git a/modules/multimedia/multimedia_file.model.js b/modules/multimedia/multimedia_file.model.js index 65b0f4b..281e25e 100644 --- a/modules/multimedia/multimedia_file.model.js +++ b/modules/multimedia/multimedia_file.model.js @@ -42,9 +42,14 @@ module.exports = function (sequelize, DataTypes) { MultimediaFile.addScope('includeMultimedias', () => { return { - include: [ - { model: sequelize.models.Multimedia, as: { singular: 'multimedia', plural: 'multimedias' } } - ] + include: [{ + model: sequelize.models.Multimedia, + as: { + singular: 'multimedia', + plural: 'multimedias' + }, + required: false, + }] } }); diff --git a/modules/multimedia/multimedia_file.routes.js b/modules/multimedia/multimedia_file.routes.js index 589ed5c..e33a88f 100644 --- a/modules/multimedia/multimedia_file.routes.js +++ b/modules/multimedia/multimedia_file.routes.js @@ -21,7 +21,7 @@ routes.get('/multimediafiles', cacheSuccesses('24 hours'), invalidFields: generalInvalidFields }), PaginateMiddleware.middleware(), - //SortMiddleware.middleware({ default: "init_available_date" }), + SortMiddleware.middleware({ default: "createdAt" }), multimediaFileController.find({ scopes: ['includeMultimedias'] }) @@ -58,5 +58,13 @@ routes.put('/admin/multimediafiles/:id', multimediaFileController.update() ); +// Borrado +routes.delete('/admin/multimediafiles/:id', + isAdministratorUser, + SchemaValidator(multimediaFilesInputType, true), + cdnUpload().single('file'), + multimediaFileController.delete() +); + module.exports = routes; \ No newline at end of file diff --git a/modules/multimedia/multimedia_file.service.js b/modules/multimedia/multimedia_file.service.js index e3b0236..103d376 100644 --- a/modules/multimedia/multimedia_file.service.js +++ b/modules/multimedia/multimedia_file.service.js @@ -13,13 +13,13 @@ const sharp = require('sharp'); const config = require('../../config'); const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); const models = require('../../core/models'); -const getVimeoVideoInfo = require('../../helpers/vimeo.helper'); +const { determineProviderInfo, extractProvciderInfo } = require('../../helpers/providers.helper'); const providerComposer = (multimedia) => { return getVimeoVideoInfo(multimedia.code) } -const _generateThumbFileName = function (fileName, prefix) { +/*const _generateThumbFileName = function (fileName, prefix) { prefix = prefix || config.uploads.thumb_prefix; return Path.join( Path.dirname(fileName), @@ -72,7 +72,7 @@ const _uploadFile = function (file, filename, options) { } }); }); -} +}*/ const extraMethods = { removeFile: function (filename) { @@ -102,8 +102,16 @@ const extraMethods = { }) }, - create: async function(values, context) { + beforeCreate: function(values, context) { + if (values.provider != 'cdn') { + var info = determineProviderInfo(values.url); + values.provider = info.provider; + values.code = info.code; + values.class = info.class; + } + + return values; }, afterFetchOne: async (result, params, context) => { @@ -122,4 +130,4 @@ const extraMethods = { } -module.exports = generateService(models.MultimediaFile, extraMethods); \ No newline at end of file +module.exports = generateService(models.MultimediaFile, extraMethods); \ No newline at end of file