UNPKG

@kldit/cms

Version:

A CMS Framework for @kldit/mvc

276 lines (229 loc) 6.56 kB
/** * @author Orlando Leite * * EditContent class */ //That is not an db update. It updates the fields, just like in //validation, except for validation //public function const CMS = require('@kldit/cms/lib/CMS'); module.exports = class EditContent extends CMS { init() { super.init(); this.loadModel("Edit"); // this.loadModel("Access"); // this.loadModel("Util"); } prepare(ctx) { ctx.cms.post = ctx.cms.values = {}; var vars = Object.clone(ctx.uri.vars); var path = vars.shift(); path = path.replace(/-/g, "_"); path = path.split(","); ctx.cms.currentTable = Object.clone(path); var mapName = ctx.cms.mapName = path.shift(); ctx.cms.rawMapId = vars.length ? vars.shift() : ""; ctx.cms.ids = CMS.parseMapId(ctx.cms.rawMapId.split("&"), mapName); //console.log( mapName, CMS.config ); ctx.cms.layout = CMS.config[mapName].layout; ctx.cms.path = path; if(path.length > 0) { var field = path[path.length - 1]; fields = page.subpages[field].list.fields; ctx.cms.fields = fields; ctx.cms.map = CMS.config[mapName].map; ctx.cms.page = CMS.config[mapName].page; ctx.cms.submap = ctx.cms.map.fields[field]; ctx.cms.subpage = ctx.cms.page.subpages[field]; } else { ctx.cms.map = CMS.config[mapName].map; ctx.cms.page = CMS.config[mapName].page; } } async index(ctx) { this.prepare(ctx); ctx.cms.operation = "edit"; //var access = this.model.access.check("get", mapName, map, path, ids); if(false && access.length > 0) { ctx.cms.invalidFields = access; ctx.cms.success = false; } else { var result = await this.model.edit.get(ctx); // CMS.addGlobalValue("POST", result.item); ctx.cms.post = ctx.cms.values = result.item; ctx.cms.request = result.request; ctx.cms.mapId = ctx.cms.ids; ctx.cms.success = true; } if(ctx.cms.success) ctx.body = await this.renderView("Edit", ctx.cms); else ctx.body = await this.renderView("ValidationError", ctx.cms); } async validate(ctx) { this.prepare(ctx); ctx.cms.operation = "validate"; ctx.cms.values = {}; if( ctx.request.body.__form__ ) { ctx.cms.form = JSON.parse(ctx.request.body.__form__); delete ctx.request.body.__form__; } ctx.cms.post = ctx.cms.values = ctx.request.body; var result = await this.model.edit.validation(ctx, false); var updates = []; var temp = Object.keys(ctx.request.body); var request = result.request; for(var name of Object.values(temp)) { var column = request.column(name); if(column) { var list = column.field.validationUpdates(); updates.push(name); updates = updates.concat(list); } } var rsearch = request.search; if(rsearch) { for(var name of Object.values(temp)) { column = rsearch.column(name); if(column) { list = column.field.validationUpdates(); updates.push(name); updates = updates.concat(list); } } } ctx.cms.updates = updates; ctx.cms.validation = result.validation; ctx.cms.request = result.request; ctx.body = await this.renderView("EditUpdate", ctx.cms); } // That is not an db update. It updates the fields, just like in // validation, except for validation // TODO: Foget to mention when this is used. async updateForm(ctx) //$this->viewVars['validation'] = $result['validation']; { this.prepare(ctx); ctx.cms.operation = "update-form"; ctx.cms.values = {}; ctx.cms.form = JSON.parse(ctx.request.body.__form__); delete ctx.request.body.__form__; ctx.cms.post = ctx.request.body; // throw new Error('YOU CALLED update-form! Nice!'); var result = this.model.edit.validation(ctx, false); var updates = []; var temp = Object.keys(ctx.request.body); var request = result.request; for(var name of Object.values(temp)) { var column = request.column(name); if(column) { var list = column.field.validationUpdates(); updates.push(name); updates = array_merge(updates, list); } } ctx.cms.updates = updates; ctx.cms.request = result.request; ctx.body = await this.renderView("EditUpdate", this.viewVars); } async save(ctx) { this.prepare(ctx); ctx.cms.operation = "update"; ctx.cms.fastEdit = false; ctx.cms.mapId = ctx.cms.ids; // console.log( ctx.request.body ); ctx.cms.post = ctx.cms.values = ctx.request.body; var result = await this.model.edit.validation(ctx); ctx.cms.invalidFields = {}; if(Object.keys(result.validation).length > 0) { ctx.cms.invalidFields = result.validation; ctx.cms.success = false; } else { result = await this.model.edit.get(ctx); ctx.cms.currentValues = result.item; // CMS.addGlobalValue("CURRENT_VALUES", result.item); var update = await this.model.edit.update(ctx); // console.log( update ); if( update ) ctx.cms.success = true; } if(ctx.cms.success) ctx.body = await this.renderView("EditResult", ctx.cms); else { ctx.cms.updates = true; ctx.cms.validation = result.validation; ctx.cms.request = result.request; ctx.cms.error = true; // console.log( ctx.cms.updates ); ctx.body = await this.renderView("EditUpdate", ctx.cms); } } async fastSave(vars) { this.prepare(vars, mapName, path, ids, fields, map, page); ctx.cms.operation = "fast-save"; vars.shift(); vars.shift(); var values = this.parseSlashGet(vars, Array()); for(var field in values) { var v = values[field]; if(!(-1 !== page["fast-edit"].fields.indexOf(field))) delete values[field]; } var result = this.model.edit.validation(ctx); ctx.cms.fastEdit = true; ctx.cms.mapId = ids; ctx.cms.values = values; ctx.cms.invalidFields = []; if(result.validation.length > 0) { ctx.cms.invalidFields = result.validation; ctx.cms.success = false; } else //print_r( $values );exit; { result = this.model.edit.get(mapName, map, path, ids); CMS.addGlobalValue("CURRENT_VALUES", result.item); var columns = Object.keys(values); var rupdate = this.model.edit.update(mapName, map, path, ids, values, columns); ctx.cms.request = rupdate.request; ctx.cms.success = true; result = this.model.edit.get(mapName, map, path, ids); ctx.cms.values = result.item; } if(ctx.cms.success) { ctx.body = await this.renderView("EditResult", this.viewVars); } else { ctx.cms.updates = true; ctx.cms.validation = result.validation; ctx.cms.request = result.request; ctx.cms.error = true; ctx.body = await this.renderView("EditUpdate", this.viewVars); } } };