001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.announcements.service.impl;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.model.Group;
019    import com.liferay.portal.model.Organization;
020    import com.liferay.portal.model.Role;
021    import com.liferay.portal.model.Team;
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.PortalPermissionUtil;
029    import com.liferay.portal.service.permission.RolePermissionUtil;
030    import com.liferay.portal.service.permission.UserGroupPermissionUtil;
031    import com.liferay.portal.util.PortalUtil;
032    import com.liferay.portal.util.PortletKeys;
033    import com.liferay.portlet.announcements.model.AnnouncementsEntry;
034    import com.liferay.portlet.announcements.service.base.AnnouncementsEntryServiceBaseImpl;
035    import com.liferay.portlet.announcements.service.permission.AnnouncementsEntryPermission;
036    
037    /**
038     * @author Brian Wing Shun Chan
039     */
040    public class AnnouncementsEntryServiceImpl
041            extends AnnouncementsEntryServiceBaseImpl {
042    
043            @Override
044            public AnnouncementsEntry addEntry(
045                            long plid, long classNameId, long classPK, String title,
046                            String content, String url, String type, int displayDateMonth,
047                            int displayDateDay, int displayDateYear, int displayDateHour,
048                            int displayDateMinute, boolean displayImmediately,
049                            int expirationDateMonth, int expirationDateDay,
050                            int expirationDateYear, int expirationDateHour,
051                            int expirationDateMinute, int priority, boolean alert)
052                    throws PortalException {
053    
054                    PermissionChecker permissionChecker = getPermissionChecker();
055    
056                    if (alert) {
057                            AnnouncementsEntryPermission.check(
058                                    permissionChecker, plid, PortletKeys.ALERTS,
059                                    ActionKeys.ADD_ENTRY);
060                    }
061                    else {
062                            AnnouncementsEntryPermission.check(
063                                    permissionChecker, plid, PortletKeys.ANNOUNCEMENTS,
064                                    ActionKeys.ADD_ENTRY);
065                    }
066    
067                    if (classNameId == 0) {
068                            if (!PortalPermissionUtil.contains(
069                                            permissionChecker, ActionKeys.ADD_GENERAL_ANNOUNCEMENTS)) {
070    
071                                    throw new PrincipalException();
072                            }
073                    }
074                    else {
075                            String className = PortalUtil.getClassName(classNameId);
076    
077                            if (className.equals(Group.class.getName()) &&
078                                    !GroupPermissionUtil.contains(
079                                            permissionChecker, classPK,
080                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
081    
082                                    throw new PrincipalException();
083                            }
084    
085                            if (className.equals(Organization.class.getName()) &&
086                                    !OrganizationPermissionUtil.contains(
087                                            permissionChecker, classPK,
088                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
089    
090                                    throw new PrincipalException();
091                            }
092    
093                            if (className.equals(Role.class.getName())) {
094                                    Role role = roleLocalService.getRole(classPK);
095    
096                                    if (role.isTeam()) {
097                                            Team team = teamLocalService.getTeam(role.getClassPK());
098    
099                                            if (!GroupPermissionUtil.contains(
100                                                            permissionChecker, team.getGroupId(),
101                                                            ActionKeys.MANAGE_ANNOUNCEMENTS) ||
102                                                    !RolePermissionUtil.contains(
103                                                            permissionChecker, team.getGroupId(), classPK,
104                                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
105    
106                                                    throw new PrincipalException();
107                                            }
108                                    }
109                                    else if (!RolePermissionUtil.contains(
110                                                            permissionChecker, classPK,
111                                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
112    
113                                            throw new PrincipalException();
114                                    }
115                            }
116    
117                            if (className.equals(UserGroup.class.getName()) &&
118                                    !UserGroupPermissionUtil.contains(
119                                            permissionChecker, classPK,
120                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
121    
122                                    throw new PrincipalException();
123                            }
124                    }
125    
126                    return announcementsEntryLocalService.addEntry(
127                            getUserId(), classNameId, classPK, title, content, url, type,
128                            displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
129                            displayDateMinute, displayImmediately, expirationDateMonth,
130                            expirationDateDay, expirationDateYear, expirationDateHour,
131                            expirationDateMinute, priority, alert);
132            }
133    
134            /**
135             * @deprecated As of 6.2.0, replaced by {@link #addEntry(long, long, long,
136             *             String, String, String, String, int, int, int, int, int,
137             *             boolean, int, int, int, int, int, int, boolean)}
138             */
139            @Deprecated
140            @Override
141            public AnnouncementsEntry addEntry(
142                            long plid, long classNameId, long classPK, String title,
143                            String content, String url, String type, int displayDateMonth,
144                            int displayDateDay, int displayDateYear, int displayDateHour,
145                            int displayDateMinute, int expirationDateMonth,
146                            int expirationDateDay, int expirationDateYear,
147                            int expirationDateHour, int expirationDateMinute, int priority,
148                            boolean alert)
149                    throws PortalException {
150    
151                    return addEntry(
152                            plid, classNameId, classPK, title, content, url, type,
153                            displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
154                            displayDateMinute, false, expirationDateMonth, expirationDateDay,
155                            expirationDateYear, expirationDateHour, expirationDateMinute,
156                            priority, alert);
157            }
158    
159            @Override
160            public void deleteEntry(long entryId) throws PortalException {
161                    AnnouncementsEntryPermission.check(
162                            getPermissionChecker(), entryId, ActionKeys.DELETE);
163    
164                    announcementsEntryLocalService.deleteEntry(entryId);
165            }
166    
167            @Override
168            public AnnouncementsEntry getEntry(long entryId) throws PortalException {
169                    AnnouncementsEntry entry = announcementsEntryLocalService.getEntry(
170                            entryId);
171    
172                    AnnouncementsEntryPermission.check(
173                            getPermissionChecker(), entry, ActionKeys.VIEW);
174    
175                    return entry;
176            }
177    
178            @Override
179            public AnnouncementsEntry updateEntry(
180                            long entryId, String title, String content, String url, String type,
181                            int displayDateMonth, int displayDateDay, int displayDateYear,
182                            int displayDateHour, int displayDateMinute,
183                            boolean displayImmediately, int expirationDateMonth,
184                            int expirationDateDay, int expirationDateYear,
185                            int expirationDateHour, int expirationDateMinute, int priority)
186                    throws PortalException {
187    
188                    AnnouncementsEntryPermission.check(
189                            getPermissionChecker(), entryId, ActionKeys.UPDATE);
190    
191                    return announcementsEntryLocalService.updateEntry(
192                            getUserId(), entryId, title, content, url, type, displayDateMonth,
193                            displayDateDay, displayDateYear, displayDateHour, displayDateMinute,
194                            displayImmediately, expirationDateMonth, expirationDateDay,
195                            expirationDateYear, expirationDateHour, expirationDateMinute,
196                            priority);
197            }
198    
199    }