001    /**
002     * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portlet.announcements.service.impl;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.model.Group;
020    import com.liferay.portal.model.Organization;
021    import com.liferay.portal.model.Role;
022    import com.liferay.portal.model.UserGroup;
023    import com.liferay.portal.security.auth.PrincipalException;
024    import com.liferay.portal.security.permission.ActionKeys;
025    import com.liferay.portal.security.permission.PermissionChecker;
026    import com.liferay.portal.service.permission.GroupPermissionUtil;
027    import com.liferay.portal.service.permission.OrganizationPermissionUtil;
028    import com.liferay.portal.service.permission.RolePermissionUtil;
029    import com.liferay.portal.service.permission.UserGroupPermissionUtil;
030    import com.liferay.portal.util.PortalUtil;
031    import com.liferay.portal.util.PortletKeys;
032    import com.liferay.portlet.announcements.model.AnnouncementsEntry;
033    import com.liferay.portlet.announcements.service.base.AnnouncementsEntryServiceBaseImpl;
034    import com.liferay.portlet.announcements.service.permission.AnnouncementsEntryPermission;
035    
036    /**
037     * @author Brian Wing Shun Chan
038     */
039    public class AnnouncementsEntryServiceImpl
040            extends AnnouncementsEntryServiceBaseImpl {
041    
042            public AnnouncementsEntry addEntry(
043                            long plid, long classNameId, long classPK, String title,
044                            String content, String url, String type, int displayDateMonth,
045                            int displayDateDay, int displayDateYear, int displayDateHour,
046                            int displayDateMinute, int expirationDateMonth,
047                            int expirationDateDay, int expirationDateYear,
048                            int expirationDateHour, int expirationDateMinute, int priority,
049                            boolean alert)
050                    throws PortalException, SystemException {
051    
052                    PermissionChecker permissionChecker = getPermissionChecker();
053    
054                    if (alert) {
055                            AnnouncementsEntryPermission.check(
056                                    permissionChecker, plid, PortletKeys.ALERTS,
057                                    ActionKeys.ADD_ENTRY);
058                    }
059                    else {
060                            AnnouncementsEntryPermission.check(
061                                    permissionChecker, plid, PortletKeys.ANNOUNCEMENTS,
062                                    ActionKeys.ADD_ENTRY);
063                    }
064    
065                    if (classNameId == 0) {
066                            if (!permissionChecker.isOmniadmin()) {
067                                    throw new PrincipalException();
068                            }
069                    }
070                    else {
071                            String className = PortalUtil.getClassName(classNameId);
072    
073                            if (className.equals(Group.class.getName()) &&
074                                    !GroupPermissionUtil.contains(
075                                            permissionChecker, classPK,
076                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
077    
078                                    throw new PrincipalException();
079                            }
080    
081                            if (className.equals(Organization.class.getName()) &&
082                                    !OrganizationPermissionUtil.contains(
083                                            permissionChecker, classPK,
084                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
085    
086                                    throw new PrincipalException();
087                            }
088    
089                            if (className.equals(Role.class.getName()) &&
090                                    !RolePermissionUtil.contains(
091                                            permissionChecker, classPK,
092                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
093    
094                                    throw new PrincipalException();
095                            }
096    
097                            if (className.equals(UserGroup.class.getName()) &&
098                                    !UserGroupPermissionUtil.contains(
099                                            permissionChecker, classPK,
100                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
101    
102                                    throw new PrincipalException();
103                            }
104                    }
105    
106                    return announcementsEntryLocalService.addEntry(
107                            getUserId(), classNameId, classPK, title, content, url, type,
108                            displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
109                            displayDateMinute, expirationDateMonth, expirationDateDay,
110                            expirationDateYear, expirationDateHour, expirationDateMinute,
111                            priority, alert);
112            }
113    
114            public void deleteEntry(long entryId)
115                    throws PortalException, SystemException {
116    
117                    AnnouncementsEntryPermission.check(
118                            getPermissionChecker(), entryId, ActionKeys.DELETE);
119    
120                    announcementsEntryLocalService.deleteEntry(entryId);
121            }
122    
123            public AnnouncementsEntry updateEntry(
124                            long entryId, String title, String content, String url, String type,
125                            int displayDateMonth, int displayDateDay, int displayDateYear,
126                            int displayDateHour, int displayDateMinute, int expirationDateMonth,
127                            int expirationDateDay, int expirationDateYear,
128                            int expirationDateHour, int expirationDateMinute, int priority)
129                    throws PortalException, SystemException {
130    
131                    AnnouncementsEntryPermission.check(
132                            getPermissionChecker(), entryId, ActionKeys.UPDATE);
133    
134                    return announcementsEntryLocalService.updateEntry(
135                            getUserId(), entryId, title, content, url, type, displayDateMonth,
136                            displayDateDay, displayDateYear, displayDateHour, displayDateMinute,
137                            expirationDateMonth, expirationDateDay, expirationDateYear,
138                            expirationDateHour, expirationDateMinute, priority);
139            }
140    
141    }