lelmarir
lelmarir

Reputation: 611

Override Alfresco pickerresults.lib.ftl

I've found a bug in pickerresults.lib.ftl that i have already reported

Briefly: if the user does not have the permission on a file parent, the line

<#if row.item.parent??>"parentName": "${row.item.parent.name!""}",

will fail, failing the entire script (and the user can't see any file)

So, waiting for the bug being resolved i need to patch this. I'd like to override the macro "pickerResultsJSON" defined in the file removong the line or putting a string value in place of "${row.item.parent.name!""}" that cause the exception

I have no idea of how to redefine the macro and where to place the file inside my amp. Can someone help me?

UPDATE

I'm using the Alfresck SDK 2.0 and my project structure is:

Project Structure

I've tryed to put a file "custom-pickerresults.lib.ftl" with the following content (as suggested by sev) but it does not seem to be the right position. Or should i "register" it in some way?

<#macro pickerResultsJSON results>
    <#-- new code here -->
</#macro>
<#global pickerResultsJSON = pickerResultsJSON />

Upvotes: 1

Views: 437

Answers (2)

lelmarir
lelmarir

Reputation: 611

Many thanks to sev, he pointed me the right way.

I realized that pickerresults.lib.ftl is used by the webservice pickerchildren.get.desc.xml and pickerchildren.post.desc.xmlso, the solution is to copy the web service definition and files along with the library in

/alfresco-myamp-repo/src/main/amp/config/alfresco/extension/templates/webscripts/com/my/repository/forms/

(repository/forms/ just becouse the original files are inside config/alfresco/templates/webscripts/org/alfresco/repository/forms/ but any other folder under /alfresco-myamp-repo/src/main/amp/config/alfresco/extension shuld do)

and change the library like this:

                ...
                "type": "${row.item.typeShort}",
                "parentType": "${row.item.parentTypeShort!""}",
<#-- from here -->
                <#attempt>
                    <#if row.item.parent??>"parentName": "${row.item.parent.name!""}",</#if>
                <#recover>
                    "parentName": "<unknown>",
                </#attempt>
<#-- to here -->
                "isContainer": ${row.item.isContainer?string},
                <#if row.container??>"container": "${row.container!""}",</#if>
                ...

This way even if the user has not the permissions to read the parent's name the template can complete without errors (i don't know if the value "unknown" in place of the parent name can cause any troubles, but i did not notice nothing right now)

Upvotes: 1

ratherblue
ratherblue

Reputation: 2108

Since macros are just variables, you might be able to do something like this:

<#macro pickerResultsJSON>
    <#-- new code here -->
</#macro>
<#global pickerResultsJSON = pickerResultsJSON />

As to where you would put that... you could put it in any file that is included globally on your project. It might require a little trial and error since I'm not sure what your project structure is.

Upvotes: 2

Related Questions