Liferay Portal额外研究(4):修改用户登录后的默认布局和内容


Liferay额外研究(一): http://blog.csdn.net/james999/archive/2006/07/26/979938.aspx  
Liferay额外研究(二): http://blog.csdn.net/james999/archive/2006/07/27/986386.aspx 
Liferay额外研究(三):http://blog.csdn.net/james999/archive/2006/08/08/1037326.aspx

    Liferay在用户第一次登陆后,都会为其产生一个默认的私有首页Layout。 在Liferay早期版本,可以在系统管理员管理界面中,配置默认的group layout。但是在4.1版本中已经没有这个功能,所以默认情况下,新注册的用户,在登陆后,首先看到的其私有place都是一样的内容,而这些内容都是liferay提供的。
 
    对我们自定的 Company来说,这肯定是不合适的,我们需要自己定义用户登录后,默认显示的内容和布局。
 
    后来在Liferay forum中,找到了一篇帖子,给了解决此种问题的解决办法:在portlet-ext.properties中配置一个 default.user.layout.group 属性(自定义的),用于指明默认的layout-group。在ServicePreAction类的扩展修改 addDefaultLayouts 操作,满足特定的需求应用。这种扩展的方式就是,将指定layout-group拷贝给用户第一默认的,这样就不会再使用liferay默认的了。—— 当然这样的方式是比较简单的,可能在系统实施过程中,有比这更加复杂的需求。

 
新建默认的Community
首先,通过新增一个新的 Community,命名为User_Default,并新增一个private的page与内容.
 
配置默认的Community
首先在 ext项目的 ext-ejb目录下,修改portal-ext.properties文件,增加如下设置:
 
default.user.layout.group=User_Default

然后通过 build,将portal-ext.properties移动到 ext项目的
    ext\servers\tomcat\webapps\ROOT\WEB-INF\classes 目录下。
 
构造LayoutCopy类
public   class  LayoutCopy  ... {
    
    
private static Log _log = LogFactory.getLog(LayoutCopy.class);
    
    
private User user;

    
private String ownerId;

   
private Group userGroup;
   
public LayoutCopy(User user) ...{
       
super();

       
this.user = user;

        
this.ownerId = getOwnerId(user.getGroup().getGroupId(), false);
       
this.userGroup = user.getGroup();
   }


   
public void copyDefaultUserLayout(HttpServletRequest httpReq)
           
throws SystemException, PortalException ...{
      
// set in the portal-ext.properties:
       
// default.user.layout.group=Default User
       
// and create then group/community "Default User" 
       
// CWPPropsUtil.DEFUALT_USER_LAYOUT_GROUP = "default.user.layout.group"
       Group group = GroupLocalServiceUtil.getGroup(user.getCompanyId(),
               PropsUtil.get(
"default.user.layout.group"));

       
try ...{
           String groupOwnerId 
= getOwnerId(group.getGroupId(), true);
           List privateLayouts 
= LayoutLocalServiceUtil
                   .getLayouts(groupOwnerId);

           
for (Iterator itr = privateLayouts.iterator(); itr.hasNext();) ...{
               Layout layout 
= (Layout) itr.next();
               Layout newLayout 
= copyLayout(layout);
               copyPreferences(httpReq, newLayout, layout);
           }

       }
 catch (PortalException e) ...{
           _log.error(
"Cannot copy private layouts", e);
       }
 catch (Exception e) ...{
           _log.error(
"Cannot copy public layouts", e);
       }


       
try ...{
           String groupOwnerId 
= getOwnerId(group.getGroupId(), false);
           List publicLayouts 
= LayoutLocalServiceUtil
                   .getLayouts(groupOwnerId);

           
for (Iterator itr = publicLayouts.iterator(); itr.hasNext();) ...{
               Layout layout 
= (Layout) itr.next();
               Layout newLayout 
= copyLayout(layout);
               copyPreferences(httpReq, newLayout, layout);
           }

       }
 catch (PortalException e) ...{
           _log.error(
"Cannot copy public layouts", e);
       }
 catch (Exception e) ...{
           _log.error(
"Cannot copy public layouts", e);
       }


   }


   
public void resetLayout(HttpServletRequest httpReq) throws SystemException, PortalException ...{
       String ownerId 
= getOwnerId(user.getGroup().getGroupId(), false);
       LayoutLocalServiceUtil.deleteLayouts(ownerId);
       PortletPreferencesLocalServiceUtil.deletePortletPreferences(ownerId);

       ownerId 
= getOwnerId(user.getGroup().getGroupId(), true);
       LayoutLocalServiceUtil.deleteLayouts(ownerId);
       PortletPreferencesLocalServiceUtil.deletePortletPreferences(ownerId);

       copyDefaultUserLayout(httpReq);
   }


   
public Layout copyLayout(Layout groupDefaultLayout) throws SystemException,
           PortalException 
...{
       Layout layout 
= LayoutLocalServiceUtil.addLayout(
               userGroup.getGroupId(), user.getUserId(), groupDefaultLayout
                      .isPrivateLayout(), groupDefaultLayout
                       .getParentLayoutId(), groupDefaultLayout.getName(user
                       .getLocale()), groupDefaultLayout.getType(),
               groupDefaultLayout.isHidden(), 
null);

       LayoutLocalServiceUtil.updateLayout(layout.getLayoutId(), layout
        .getOwnerId(), groupDefaultLayout.getTypeSettings());
       layout 
= LayoutLocalServiceUtil.updateLookAndFeel(layout.getLayoutId(),
               layout.getOwnerId(), groupDefaultLayout.getThemeId(),
               groupDefaultLayout.getColorSchemeId());

       
// layoutMapping.put(groupDefaultLayout.getPrimaryKey(),
       
// layout.getPrimaryKey());

       
return layout;
   }


   
protected void copyPreferences(HttpServletRequest httpReq, Layout layout,
           Layout copyLayout) 
throws Exception ...{

       String companyId 
= layout.getCompanyId();

       LayoutTypePortlet copyLayoutTypePortlet 
= (LayoutTypePortlet) copyLayout
               .getLayoutType();

       List copyPortletIds 
= copyLayoutTypePortlet.getPortletIds();

       
for (int i = 0; i < copyPortletIds.size(); i++...{
           String copyPortletId 
= (String) copyPortletIds.get(i);

           
// Copy preference

           PortletPreferencesPK prefsPK 
= PortletPreferencesFactory
                   .getPortletPreferencesPK(httpReq, copyPortletId, layout
                           .getPlid());

           PortletPreferencesLocalServiceUtil.getPreferences(companyId,
                   prefsPK);

           PortletPreferencesPK copyPrefsPK 
= PortletPreferencesFactory
                   .getPortletPreferencesPK(httpReq, copyPortletId, copyLayout
                           .getPlid());

           PortletPreferencesImpl copyPrefsImpl 
= (PortletPreferencesImpl) PortletPreferencesLocalServiceUtil
                   .getPreferences(companyId, copyPrefsPK);

           PortletPreferencesLocalServiceUtil.updatePreferences(prefsPK,
                   copyPrefsImpl);

           
// Copy portlet setup

           prefsPK 
= new PortletPreferencesPK(copyPortletId, layout
                   .getLayoutId(), layout.getOwnerId());

           PortletPreferencesLocalServiceUtil.getPreferences(companyId,
                   prefsPK);

           copyPrefsPK 
= new PortletPreferencesPK(copyPortletId, copyLayout
                   .getLayoutId(), copyLayout.getOwnerId());

           copyPrefsImpl 
= (PortletPreferencesImpl) PortletPreferencesLocalServiceUtil
                   .getPreferences(companyId, copyPrefsPK);

           PortletPreferencesLocalServiceUtil.updatePreferences(prefsPK,
                   copyPrefsImpl);
       }

   }


   
private String getOwnerId(String groupId, boolean privateLayout) ...{
       
if (privateLayout) ...{
           
return Layout.PRIVATE + groupId;
       }
 else ...{
           
return Layout.PUBLIC + groupId;
       }

   }


}
 
 
修改com.liferay.portal.events.ServicePreAction类
 
    是在 ext工程的 ext-ejb/src下修改,新建com.liferay.portal.events包,并把原始的ServicePreAction类拷贝至此,然后修改,修改后通过ext-ejb下的build.xml编译部署。
 
在 ServicePreAction类中新增一个addDefaultLayouts方法:
protected void addDefaultLayouts(HttpServletRequest httpReq, User user)
                throws PortalException, SystemException {
            if (user.hasPrivateLayouts()) {
                return;
            }
           (new LayoutCopy(user)).copyDefaultUserLayout(httpReq);
}
 
然后,修改 run方法中对原始addDefaultLayouts方法的调用方法:
if (layoutsRequired) { 
    String user_layout_group = PropsUtil.get("default.user.layout.group");
    if(user_layout_group==null || user_layout_group.length()==0){
            addDefaultLayouts(user);
    }else{
            addDefaultLayouts(req, user);
    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值