Skip to content
Snippets Groups Projects
process.js 4.59 KiB
Newer Older
Andreas Fräder's avatar
Andreas Fräder committed
import("DocumentTemplate_lib");
import("system.vars");
import("Placeholder_lib");
import("Binary_lib");
import("system.db");
import("system.util");
import("Sql_lib");
import("KeywordRegistry_basic");
import("system.tools");

//saves a Mosaico Template
function restpost(pRequest)
{
    var request = JSON.parse(pRequest);
    var body = JSON.parse(util.decodeBase64String(request.body, "UTF-8"));
    var mosaicoTemplateId = body.id;
    var userId = body.user;
    var employee = tools.getUserByAttribute(tools.NAME, userId, tools.PROFILE_DEFAULT);
    if(mosaicoTemplateId)
    {
        //check if template exists in db
        var name = newSelect("NAME")
                .from("MOSAICOTEMPLATE")
                .where("MOSAICOTEMPLATE.MOSAICOTEMPLATEID", mosaicoTemplateId)
                .cell(true);  
        
        if (name)
        {
            newWhere("MOSAICOTEMPLATE.MOSAICOTEMPLATEID", mosaicoTemplateId)
            .updateFields({
                "METADATA": body.metadata,
                "CONTENT": body.content,
                "USER_EDIT":employee[tools.TITLE],
                "DATE_EDIT":vars.get("$sys.date")
            });  
            
            SingleBinaryUtils.set("MOSAICOTEMPLATE", "DOCUMENT", mosaicoTemplateId, util.encodeBase64String(body.html),name +".html","");
            
            var bulkMailsWithTemplate = newSelect(["BULKMAIL.BULKMAILID", "BULKMAIL.NAME"])
                                    .from("BULKMAIL")
                                    .where("BULKMAIL.MOSAICOTEMPLATE_ID", mosaicoTemplateId)
                                    .table();
            
            //update all bulkmails which use the template with the new html  file
            bulkMailsWithTemplate.forEach(function ([pBulkMailId, pBulkMailName])
            {
                var metaData = SingleBinaryUtils.getMetadata("BULKMAIL", "DOCUMENT", pBulkMailId);
                SingleBinaryUtils.set("BULKMAIL", "DOCUMENT", pBulkMailId, util.encodeBase64String(body.html), metaData[db.BINARY_FILENAME] || (pBulkMailName+".html"));
            });
                                                          
            request.response.httpStatusCode = 200;
        }
        else
        {
            request.response.httpStatusCode = 500;
        }
    }
    else
    {
        request.response.httpStatusCode = 500;
    }
    return JSON.stringify(request);
}

//get information about the template, links and placeholders for use in the mosaico editor
function restget(pRequest)
{
    var responseBody = {}
    var request = JSON.parse(pRequest);
    var mosaicoTemplateId = request.query.id;
    var userName = request.query.user;
    
    if (mosaicoTemplateId && userName)
    {   
        var mosaicoTemplateData = newSelect(["METADATA","CONTENT"])
            .from("MOSAICOTEMPLATE")
            .where("MOSAICOTEMPLATE.MOSAICOTEMPLATEID", mosaicoTemplateId)
            .arrayRow();
        if (mosaicoTemplateData.length > 0)
        {
            responseBody = {"metadata": mosaicoTemplateData[0], "content": mosaicoTemplateData[1]};
        }
        responseBody.links = _getMosaicoLinks();       
        responseBody.placeholders = _getMosaicoPlaceholders(userName);
        responseBody.colors = KeywordUtils.getEntryArray($KeywordRegistry.mosaicoColor());

        if(responseBody.hasOwnProperty("metadata"))
        {
            request.response.httpStatusCode = 200; //ok
        }
        else
        {
            request.response.httpStatusCode = 404; //not found
        }
    }
    else
    {
        request.response.httpStatusCode = 400; //bad request
    }
     
    request.response.body = JSON.stringify(responseBody);

    return JSON.stringify(request);
}


function _getMosaicoLinks()
{
    return newSelect("PLACEHOLDER")
            .from("WEBLINK")
            .where("WEBLINK.PLACEHOLDER is not null")
            .orderBy("PLACEHOLDER asc")
            .arrayColumn();
}

function _getMosaicoPlaceholders(pUserName)
{
    var employee = tools.getUserByAttribute(tools.NAME, pUserName, tools.PROFILE_DEFAULT);
    var employeeContactId = employee[tools.PARAMS][tools.CONTACTID];
Andreas Fräder's avatar
Andreas Fräder committed
    var replacements =  new DocumentTemplate().getReplacementsByContactIds([employeeContactId],null,true)


    var mosaicoPlaceholders = PlaceholderUtils.getPlaceholders()
    .map( function(pPlaceholder) 
    {
        return {title: pPlaceholder.title,
                preview: replacements[employeeContactId][pPlaceholder.getFormattedName()],
                placeholder: pPlaceholder.getFormattedName(),
                variableName: pPlaceholder.placeholderName};
    });
        
    return mosaicoPlaceholders 
}