Friday, September 3, 2021

Update portal ext property

Use below script to update portal-ext property. Change property name which you want to update


import com.liferay.portal.util.PropsUtil;

String google = PropsUtil.get("metatag.google.site.verification");

out.println("google: - "+google);

PropsUtil.set("metatag.google.site.verification","abcdpqrsxyz");

google = PropsUtil.get("metatag.google.site.verification");

out.println("google: - "+google);

Liferay Remove Background Task

 

Remove specific publication process from Staging:


· Fetch backgroundtaskId from database from backgroundtask table specific to publication process.

            Select * from backgroundtask where status =1;

· Run groovy Script provided by Liferay Support team which will remove the background task entry( Stuck In progress) from database .

             import com.liferay.portal.background.task.service.BackgroundTaskLocalServiceUtil;

             BackgroundTaskLocalServiceUtil.deleteBackgroundTask(<backgroundTaskId>);


Groovy Script:

import java.util.List;

import com.liferay.portal.background.task.model.BackgroundTask;

import com.liferay.portal.background.task.service.BackgroundTaskLocalServiceUtil;


List<BackgroundTask> btasks=BackgroundTaskLocalServiceUtil.getBackgroundTasks(328022L,1);

for(BackgroundTask btask : btasks){

if(btask != null) {

out.println(btask.getBackgroundTaskId());

out.println(btask.getName());

//BackgroundTaskLocalServiceUtil.deleteBackgroundTask(btask.getBackgroundTaskId());

}

}


Liferay groovy script to create user groups, roles and user

 

Create UserGroup:

import com.liferay.portal.kernel.model.User;

import com.liferay.portal.kernel.service.UserGroupLocalServiceUtil;

import com.liferay.portal.kernel.service.UserLocalServiceUtil;

import com.liferay.portal.kernel.util.PortalUtil;

long companyId = PortalUtil.getDefaultCompanyId();

User user = UserLocalServiceUtil.getUserByEmailAddress(companyId, "test@liferay.com");

//User user = UserLocalServiceUtil.getUser(20105);

String[] userGroupNames = new String[3];

userGroupNames[0] = "test_content_editor";

userGroupNames[1] = "test_content_reviewer";

userGroupNames[2] = "test_documentUploader";


for(String userGroupName : userGroupNames){

try {

  UserGroupLocalServiceUtil.addUserGroup(user.getUserId(),user.getCompanyId(),userGroupName,"Description for :" + userGroupName,null);

out.println(userGroupName + " UserGroup created successfully.");

} catch (Exception e) {

     out.println("Error:" + e.getMessage());

    }

}


Create Role:


import java.util.Locale;

import java.util.Map;

import com.liferay.portal.kernel.model.Role;

import com.liferay.portal.kernel.model.RoleConstants;

import com.liferay.portal.kernel.model.User;

import com.liferay.portal.kernel.service.RoleLocalServiceUtil;

import com.liferay.portal.kernel.service.UserGroupLocalServiceUtil;

import com.liferay.portal.kernel.service.UserLocalServiceUtil;

import com.liferay.portal.kernel.util.PortalUtil;

import com.liferay.portal.kernel.model.UserGroup;

 

try {

long companyId = PortalUtil.getDefaultCompanyId();

User user = UserLocalServiceUtil.getUserByEmailAddress(companyId, "test@liferay.com");


List< UserGroup> userGroups = UserGroupLocalServiceUtil.getUserGroups(companyId);


for (UserGroup userGroup : userGroups) {

    String userGroupName = userGroup.getName();

Map<Locale, String> titleMap = null;

Map<Locale, String> descMap = null; 



titleMap = new HashMap<Locale, String>();

titleMap.put(Locale.getDefault(),userGroupName );

descMap = new HashMap<Locale, String>();

descMap.put(Locale.getDefault(),"Description for: " + userGroupName );

 // adding the role

 Role role = RoleLocalServiceUtil.addRole(user.getUserId(),null,0,userGroupName ,titleMap, descMap,RoleConstants.TYPE_REGULAR,null,null); out.println(role + "... role created successfully.");

 // assigning the UserGroup to the role

    GroupLocalServiceUtil.addRoleGroups(role.getRoleId(), [userGroup.getGroupId()] as long[]);


}

} catch (Exception e) {

out.println("Error:" + e.getMessage());

}


Create User:


import com.liferay.portal.kernel.model.User;

import com.liferay.portal.kernel.model.UserGroup;

import com.liferay.portal.kernel.service.UserGroupLocalServiceUtil;

import com.liferay.portal.kernel.service.UserLocalServiceUtil;

import com.liferay.portal.kernel.util.PortalUtil;


import java.util.List;


try {

long companyId = PortalUtil.getDefaultCompanyId();

User user = UserLocalServiceUtil.getUserByEmailAddress(companyId, "test@liferay.com");


List<UserGroup> userGroups = UserGroupLocalServiceUtil.getUserGroups(companyId);


for (UserGroup userGroup : userGroups) {

String userGroupName = userGroup.getName();

                                UserLocalServiceUtil.addUser(Long.valueOf(user.getUserId()), Long.valueOf(companyId), Boolean.valueOf(false), 

"password", "password", Boolean.valueOf(true), userGroupName+"_user", 

userGroupName+"_user@liferay.com", 0, null, Locale.UK,

userGroupName+"_user", "", userGroupName, 123, 345, true, 00, 01, 1970, 

"developer", null, null, null, [userGroup.getUserGroupId()] as long[], false, null);

                                out.println("user created");

                        }

} catch (Exception e) {

out.println(e.getMessage());

out.println(e.printStackTrace());

}


Liferay groovy script to delete documents


Use below script to delete site specific documents.


import com.liferay.document.library.kernel.service.DLAppServiceUtil;

import com.liferay.portal.kernel.exception.PortalException;

import com.liferay.portal.kernel.repository.model.FileEntry;

import com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil;

import java.util.List;

import java.util.Calendar;

import java.util.Date;


List<FileEntry> fileEntries = DLAppServiceUtil.getGroupFileEntries(106502, 20130, 0, 2);

        

        for(FileEntry fileEntry : fileEntries) {


                out.println("UserId:"+fileEntry.getUserId()+ " GroupId:"+fileEntry.getGroupId()+"             FileEntryId:"+fileEntry.getFileEntryId()+" FileName:"+fileEntry.getFileName() + " FolderId:" + fileEntry.getFolderId()+ " CreateDate:" +fileEntry.getCreateDate());

            Date date = fileEntry.getCreateDate();

            Calendar today = Calendar.getInstance();

            Calendar specifiedDate  = Calendar.getInstance();

            specifiedDate.setTime(date);


            if(today.get(Calendar.DAY_OF_MONTH) == specifiedDate.get(Calendar.DAY_OF_MONTH)

                &&  today.get(Calendar.MONTH) == specifiedDate.get(Calendar.MONTH)

                &&  today.get(Calendar.YEAR) == specifiedDate.get(Calendar.YEAR)) {


DLFileEntryLocalServiceUtil.deleteDLFileEntry(fileEntry.getFileEntryId());

                        out.println("Date specified [" + specifiedDate + "] is today [" + today + "]");


            }

out.println("---------------------------");


    }


Liferay check master node

Use below groovy script to find the master node.


import com.liferay.portal.kernel.cluster.*;

out.println("** Master: "+ ClusterMasterExecutorUtil.isMaster());


Thursday, September 2, 2021

Liferay DXP Theme Template Context Contributor

 Create project in Liferay Developer Studio:

 Right click on project workspace -> New -> Liferay Module Project -> Select Project Template Name as "template-context-contributor"



package com.test.context.contributor;


import com.liferay.portal.kernel.template.TemplateContextContributor;


import java.util.Map;


import javax.servlet.http.HttpServletRequest;


import org.osgi.service.component.annotations.Component;

import org.osgi.service.component.annotations.Reference;



@Component(

immediate = true,

property = {"type=" + TemplateContextContributor.TYPE_THEME},

service = TestTemplateContextContributor.class

)

public class TestTemplateContextContributor

implements TemplateContextContributor {


@Override

public void prepare(

Map<String, Object> contextObjects, HttpServletRequest request) {

contextObjects.put("testVar", "Liferay");

contextObjects.put("navItemHelper", navItemHelper);

}


@Reference(unbind="-")

NavItemHelper navItemHelper;

}


Note: Use public methods of NavItemHelper class by annotate with @Reference and NavItemHelper class must be a component. We can access public methods through  navItemHelper variable from context in theme ftl.


/**

 * 

 */

package com.test.context.contributor;


import com.liferay.portal.kernel.model.Layout;

import com.liferay.portal.kernel.theme.NavItem;

import com.liferay.portal.kernel.theme.ThemeDisplay;

import com.liferay.portal.kernel.util.WebKeys;


import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.Map;


import javax.servlet.http.HttpServletRequest;


import org.osgi.service.component.annotations.Component;


@Component(

immediate = true,

service = NavItemHelper.class

)

public class NavItemHelper {


public List<NavItem> fromLayouts(

HttpServletRequest request, List<Layout> layouts,

Map<String, Object> contextObjects) {


if ((layouts == null) || layouts.isEmpty()) {

return Collections.emptyList();

}


ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(

WebKeys.THEME_DISPLAY);


List<NavItem> navItems = new ArrayList<>(layouts.size());


for (Layout layout : layouts) {

navItems.add(

new NavItem(request, themeDisplay, layout, contextObjects));

}

return navItems;

}

}


Usage: In theme navigation.ftl use below code to retrieve public pages through context contributor variable i.e., navItemHelper.fromLayouts(request,publicPages, null)


<#assign

layoutlocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")

publicPages = layoutlocalService.getLayouts(themeDisplay.getScopeGroupId(),false,0)

navItemClass = staticUtil["com.liferay.portal.kernel.theme.NavItem"]

public_nav_items = navItemHelper.fromLayouts(request,publicPages, null)

/>

<#list public_nav_items as nav_item>

<#assign

nav_item_attr_has_popup = ""

nav_item_attr_selected = ""

nav_item_css_class = ""

nav_item_layout = nav_item.getLayout()

/>

</#list>