在liferay 6.1.0中以编程方式将站点模板分配给组织站点

时间:2013-03-30 04:09:35

标签: liferay-6

我创建了用户&组织使用addUser()&分别是addOrganization()方法。

我还可以使用addOrganizationUsers()方法将用户添加到此组织。

现在我已经从liferay控制面板创建了一个网站模板。

众所周知,我们可以创建一个组织网站,在创建网站时,我们可以选择公共网站模板。私人网页。

我们知道。 公共页面 - 对会员+非会员可见 私人页面 - 仅对会员可见。

所以我想创建一个只有私人网页的组织网站,只有组织成员才会看到它。

OrganiztionLocalServiceUtil.addOrganization(
    long userId, long parentOrganizationId, String name, String type,
    boolean recursable, long regionId, long countryId, int statusId,
    String comments, boolean site, ServiceContext serviceContext)

使用上述方法,通过指定布尔站点值'true',将创建一个站点。

现在我想以实用的方式向该组织网站添加一个网站模板,我是从控制面板创建的。

是否有任何API可以将网站模板添加到任何组织网站

1 个答案:

答案 0 :(得分:2)

不幸的是,它没有公共API。

使用LayoutSetPrototypeLocalServiceUtil获取SiteTemplate的ID。要按名称获取SiteTemplate,您必须使用dynamicQuery或迭代LayoutSetPrototypeLocalServiceUtil.getLayoutSetPrototypes(-1,-1)的结果

然后在门户网站的上下文中调用SitesUtil的applyLayoutSetPrototypes。

MethodKey methodKey = new MethodKey("com.liferay.portlet.sites.util.SitesUtil","applyLayoutSetPrototypes", Group.class, long.class, long.class, ServiceContext.class);
PortalClassInvoker.invoke(false, methodKey, organization.getGroup(), publicLayoutSetId, privateLayoutSetId, serviceContext);

为publicLayoutSetId指定-1。

管理员必须登录才能执行此操作。 要在启动时或后台执行此操作,将需要新的ServiceContext。

如下所示

ServiceContext serviceContext = new ServiceContext();
serviceContext.setAddGroupPermissions(true);
serviceContext.setAddGuestPermissions(true);
serviceContext.setSignedIn(false);
// set the following to an admin user / company or default user
User user = UserLocalServiceUtil.getDefaultUser(companyId); // or any user that has the permissions
serviceContext.setUserId(user.getUserId());
serviceContext.setCompanyId(companyId);

而且很可能你还需要设置ThreadPermissionChecker

PrincipalThreadLocal.setName(user.getUserId());
PermissionChecker adminPermissionChecker = PermissionCheckerFactoryUtil.create(user, false);
PermissionThreadLocal.setPermissionChecker(adminPermissionChecker);

不要忘记在最后一个块中重置权限检查器,否则相同的权限检查器可能会用于同一线程上的其他请求。