001    /**
002     * Copyright (c) 2000-2013 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.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.Team;
023    import com.liferay.portal.model.UserGroup;
024    import com.liferay.portal.security.auth.PrincipalException;
025    import com.liferay.portal.security.permission.ActionKeys;
026    import com.liferay.portal.security.permission.PermissionChecker;
027    import com.liferay.portal.service.permission.GroupPermissionUtil;
028    import com.liferay.portal.service.permission.OrganizationPermissionUtil;
029    import com.liferay.portal.service.permission.PortalPermissionUtil;
030    import com.liferay.portal.service.permission.RolePermissionUtil;
031    import com.liferay.portal.service.permission.UserGroupPermissionUtil;
032    import com.liferay.portal.util.PortalUtil;
033    import com.liferay.portal.util.PortletKeys;
034    import com.liferay.portlet.announcements.model.AnnouncementsEntry;
035    import com.liferay.portlet.announcements.service.base.AnnouncementsEntryServiceBaseImpl;
036    import com.liferay.portlet.announcements.service.permission.AnnouncementsEntryPermission;
037    
038    /**
039     * @author Brian Wing Shun Chan
040     */
041    public class AnnouncementsEntryServiceImpl
042            extends AnnouncementsEntryServiceBaseImpl {
043    
044            @Override
045            public AnnouncementsEntry addEntry(
046                            long plid, long classNameId, long classPK, String title,
047                            String content, String url, String type, int displayDateMonth,
048                            int displayDateDay, int displayDateYear, int displayDateHour,
049                            int displayDateMinute, boolean displayImmediately,
050                            int expirationDateMonth, int expirationDateDay,
051                            int expirationDateYear, int expirationDateHour,
052                            int expirationDateMinute, int priority, boolean alert)
053                    throws PortalException, SystemException {
054    
055                    PermissionChecker permissionChecker = getPermissionChecker();
056    
057                    if (alert) {
058                            AnnouncementsEntryPermission.check(
059                                    permissionChecker, plid, PortletKeys.ALERTS,
060                                    ActionKeys.ADD_ENTRY);
061                    }
062                    else {
063                            AnnouncementsEntryPermission.check(
064                                    permissionChecker, plid, PortletKeys.ANNOUNCEMENTS,
065                                    ActionKeys.ADD_ENTRY);
066                    }
067    
068                    if (classNameId == 0) {
069                            if (!PortalPermissionUtil.contains(
070                                            permissionChecker, ActionKeys.ADD_GENERAL_ANNOUNCEMENTS)) {
071    
072                                    throw new PrincipalException();
073                            }
074                    }
075                    else {
076                            String className = PortalUtil.getClassName(classNameId);
077    
078                            if (className.equals(Group.class.getName()) &&
079                                    !GroupPermissionUtil.contains(
080                                            permissionChecker, classPK,
081                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
082    
083                                    throw new PrincipalException();
084                            }
085    
086                            if (className.equals(Organization.class.getName()) &&
087                                    !OrganizationPermissionUtil.contains(
088                                            permissionChecker, classPK,
089                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
090    
091                                    throw new PrincipalException();
092                            }
093    
094                            if (className.equals(Role.class.getName())) {
095                                    Role role = roleLocalService.getRole(classPK);
096    
097                                    if (role.isTeam()) {
098                                            Team team = teamLocalService.getTeam(role.getClassPK());
099    
100                                            if (!GroupPermissionUtil.contains(
101                                                            permissionChecker, team.getGroupId(),
102                                                            ActionKeys.MANAGE_ANNOUNCEMENTS) ||
103                                                    !RolePermissionUtil.contains(
104                                                            permissionChecker, team.getGroupId(), classPK,
105                                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
106    
107                                                    throw new PrincipalException();
108                                            }
109                                    }
110                                    else if (!RolePermissionUtil.contains(
111                                                            permissionChecker, classPK,
112                                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
113    
114                                            throw new PrincipalException();
115                                    }
116                            }
117    
118                            if (className.equals(UserGroup.class.getName()) &&
119                                    !UserGroupPermissionUtil.contains(
120                                            permissionChecker, classPK,
121                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
122    
123                                    throw new PrincipalException();
124                            }
125                    }
126    
127                    return announcementsEntryLocalService.addEntry(
128                            getUserId(), classNameId, classPK, title, content, url, type,
129                            displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
130                            displayDateMinute, displayImmediately, expirationDateMonth,
131                            expirationDateDay, expirationDateYear, expirationDateHour,
132                            expirationDateMinute, priority, alert);
133            }
134    
135            /**
136             * @deprecated As of 6.2.0, replaced by {@link #addEntry(long, long, long,
137             *             String, String, String, String, int, int, int, int, int,
138             *             boolean, int, int, int, int, int, int, boolean)}
139             */
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, SystemException {
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)
161                    throws PortalException, SystemException {
162    
163                    AnnouncementsEntryPermission.check(
164                            getPermissionChecker(), entryId, ActionKeys.DELETE);
165    
166                    announcementsEntryLocalService.deleteEntry(entryId);
167            }
168    
169            @Override
170            public AnnouncementsEntry getEntry(long entryId)
171                    throws PortalException, SystemException {
172    
173                    AnnouncementsEntry entry = announcementsEntryLocalService.getEntry(
174                            entryId);
175    
176                    AnnouncementsEntryPermission.check(
177                            getPermissionChecker(), entry, ActionKeys.VIEW);
178    
179                    return entry;
180            }
181    
182            @Override
183            public AnnouncementsEntry updateEntry(
184                            long entryId, String title, String content, String url, String type,
185                            int displayDateMonth, int displayDateDay, int displayDateYear,
186                            int displayDateHour, int displayDateMinute,
187                            boolean displayImmediately, int expirationDateMonth,
188                            int expirationDateDay, int expirationDateYear,
189                            int expirationDateHour, int expirationDateMinute, int priority)
190                    throws PortalException, SystemException {
191    
192                    AnnouncementsEntryPermission.check(
193                            getPermissionChecker(), entryId, ActionKeys.UPDATE);
194    
195                    return announcementsEntryLocalService.updateEntry(
196                            getUserId(), entryId, title, content, url, type, displayDateMonth,
197                            displayDateDay, displayDateYear, displayDateHour, displayDateMinute,
198                            displayImmediately, expirationDateMonth, expirationDateDay,
199                            expirationDateYear, expirationDateHour, expirationDateMinute,
200                            priority);
201            }
202    
203    }