How to keep last Document library location in document selector?

thumbnail
Mahammad Ashik A, modified 1 Year ago. Junior Member Posts: 81 Join Date: 7/17/17 Recent Posts

Hi,

The objetive is to avoid multiple clicks when the last folder path used  in the process of select of documents to create or edit a web content is searched.
Steps:
Create or edit a web content wich structure have a field of document-library or image type.
When the select button is clicked:
If it's the first selection, showing the default directory.
If already exists a document selected, show the last directory opened.
How to keep always the last path selected, regardless if another selector is used in liferay 7.4.

we are tracking a per-user state and Current session.

In Liferay 7.0, we successfully achieved this by customizing the document-library-item-selector-web module. The approach used in 7.0 is outlined below

<%
DLItemSelectorViewDisplayContext dlItemSelectorViewDisplayContext = (DLItemSelectorViewDisplayContext)request.getAttribute(DLItemSelectorView.DL_ITEM_SELECTOR_VIEW_DISPLAY_CONTEXT);

long folderId = dlItemSelectorViewDisplayContext.getFolderId(request);
String lastSelectedFolderId = CookieKeys.getCookie(request, "lastSelectedFolderId");

if(request.getParameter("folderId") == null){
    if(lastSelectedFolderId != null && lastSelectedFolderId.trim().length() > 0){
        try{
            long temporaryFolderId = Long.parseLong(lastSelectedFolderId);
            Folder tempFolder =  DLAppServiceUtil.getFolder(temporaryFolderId);
            if (tempFolder != null){
                folderId = temporaryFolderId;
            }
        }catch (Exception e){
            System.out.println("line 55 - resources/documents.jsp=" + e.getMessage());
        }
    }
}
%>

<script>
document.cookie = "lastSelectedFolderId=<%=String.valueOf(folderId)%>; expires=Thu, 18 Dec 2043 12:00:00 UTC; path=/";
</script>

<%
//This fix for reading from cookies.
PortletURL portletURL = dlItemSelectorViewDisplayContext.getPortletURL(request, liferayPortletResponse);
portletURL.setParameter("folderId", String.valueOf(folderId));

PortletURL uploadURL = dlItemSelectorViewDisplayContext.getUploadURL(request, liferayPortletResponse);
uploadURL.setParameter("folderId", String.valueOf(folderId));

<liferay-item-selector:repository-entry-browser
    emptyResultsMessage='<%= LanguageUtil.get(request, "there-are-no-documents-or-media-files-in-this-folder") %>'
    itemSelectedEventName="<%= dlItemSelectorViewDisplayContext.getItemSelectedEventName() %>"
    portletURL="<%= portletURL %>"
    repositoryEntries="<%= repositoryEntries %>"
    repositoryEntriesCount="<%= repositoryEntriesCount %>"
    showBreadcrumb="<%= true %>"
    tabName="<%= dlItemSelectorViewDisplayContext.getTitle(locale) %>"
    uploadURL="<%= uploadURL %>"
/>


Currently, we are attempting a similar approach in Liferay 7.4 by fetching the last selected folderId and appending it to the portletURL in the liferay-item-selector, but we have not had any success.

<%
    DLItemSelectorViewDisplayContext dlItemSelectorViewDisplayContext = (DLItemSelectorViewDisplayContext) request
            .getAttribute(DLItemSelectorWebKeys.DL_ITEM_SELECTOR_VIEW_DISPLAY_CONTEXT);

    long folderId = 0;
    String lastSelectedFolderId = null;
    long temporaryFolderId = 0;
    folderId = dlItemSelectorViewDisplayContext.getFolderId();
    System.out.println("folderId-->"+folderId);
    lastSelectedFolderId = (String) session.getAttribute("lastSelectedFolderId");
    System.out.println("lastSelectedFolderId-->"+lastSelectedFolderId);
    if (request.getParameter("folderId") == null) {
        if (lastSelectedFolderId != null && lastSelectedFolderId.trim().length() > 0) {
            try {
                temporaryFolderId = Long.parseLong(lastSelectedFolderId);
                Folder tempFolder = DLAppServiceUtil.getFolder(temporaryFolderId);
                if (tempFolder != null) {
                    folderId = temporaryFolderId;
                }
            } catch (Exception e) {
                System.out.println("line 55 - resources/documents.jsp=" + e.getMessage());
            }
        }
    }
    session.removeAttribute("lastSelectedFolderId");
    session.setAttribute("lastSelectedFolderId", String.valueOf(folderId));

    PortletURL portletURL = dlItemSelectorViewDisplayContext.getPortletURL(liferayPortletResponse);
    portletURL.setParameter("folderId", String.valueOf(folderId));

    PortletURL uploadURL = dlItemSelectorViewDisplayContext.getUploadURL(liferayPortletResponse);
    uploadURL.setParameter("folderId", String.valueOf(folderId));
    
%>

<liferay-item-selector:repository-entry-browser
    allowedCreationMenuUIItemKeys="<%=dlItemSelectorViewDisplayContext.getAllowedCreationMenuUIItemKeys()%>"
    editImageURL="<%=dlItemSelectorViewDisplayContext.getEditImageURL(liferayPortletResponse)%>"
    emptyResultsMessage='<%=LanguageUtil.get(request, "there-are-no-documents-or-media-files-in-this-folder")%>'
    folderId="<%=folderId%>"
    itemSelectedEventName="<%=dlItemSelectorViewDisplayContext.getItemSelectedEventName()%>"
    itemSelectorReturnTypeResolver="<%=dlItemSelectorViewDisplayContext.getItemSelectorReturnTypeResolver()%>"
    portletURL="<%=portletURL%>"
    repositoryEntries="<%=dlItemSelectorViewDisplayContext.getRepositoryEntries()%>"
    repositoryEntriesCount="<%=dlItemSelectorViewDisplayContext.getRepositoryEntriesCount()%>"
    showBreadcrumb="<%=true%>"
    showDragAndDropZone="<%=dlItemSelectorViewDisplayContext.isShowDragAndDropZone()%>"
    tabName="<%=dlItemSelectorViewDisplayContext.getTitle()%>"
    uploadURL="<%=uploadURL%>" 
    />
    


Your suggestions would be greatly appreciated. Thank you...