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.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, SystemException {
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 (!permissionChecker.isOmniadmin()) {
069                                    throw new PrincipalException();
070                            }
071                    }
072                    else {
073                            String className = PortalUtil.getClassName(classNameId);
074    
075                            if (className.equals(Group.class.getName()) &&
076                                    !GroupPermissionUtil.contains(
077                                            permissionChecker, classPK,
078                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
079    
080                                    throw new PrincipalException();
081                            }
082    
083                            if (className.equals(Organization.class.getName()) &&
084                                    !OrganizationPermissionUtil.contains(
085                                            permissionChecker, classPK,
086                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
087    
088                                    throw new PrincipalException();
089                            }
090    
091                            if (className.equals(Role.class.getName())) {
092                                    Role role = roleLocalService.getRole(classPK);
093    
094                                    if (role.isTeam()) {
095                                            Team team = teamLocalService.getTeam(role.getClassPK());
096    
097                                            if (!GroupPermissionUtil.contains(
098                                                            permissionChecker, team.getGroupId(),
099                                                            ActionKeys.MANAGE_ANNOUNCEMENTS) ||
100                                                    !RolePermissionUtil.contains(
101                                                            permissionChecker, team.getGroupId(), classPK,
102                                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
103    
104                                                    throw new PrincipalException();
105                                            }
106                                    }
107                                    else if (!RolePermissionUtil.contains(
108                                                            permissionChecker, classPK,
109                                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
110    
111                                            throw new PrincipalException();
112                                    }
113                            }
114    
115                            if (className.equals(UserGroup.class.getName()) &&
116                                    !UserGroupPermissionUtil.contains(
117                                            permissionChecker, classPK,
118                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
119    
120                                    throw new PrincipalException();
121                            }
122                    }
123    
124                    return announcementsEntryLocalService.addEntry(
125                            getUserId(), classNameId, classPK, title, content, url, type,
126                            displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
127                            displayDateMinute, displayImmediately, expirationDateMonth,
128                            expirationDateDay, expirationDateYear, expirationDateHour,
129                            expirationDateMinute, priority, alert);
130            }
131    
132            /**
133             * @deprecated As of 6.2.0, replaced by {@link #addEntry(long, long, long,
134             *             String, String, String, String, int, int, int, int, int,
135             *             boolean, int, int, int, int, int, int, boolean)}
136             */
137            @Override
138            public AnnouncementsEntry addEntry(
139                            long plid, long classNameId, long classPK, String title,
140                            String content, String url, String type, int displayDateMonth,
141                            int displayDateDay, int displayDateYear, int displayDateHour,
142                            int displayDateMinute, int expirationDateMonth,
143                            int expirationDateDay, int expirationDateYear,
144                            int expirationDateHour, int expirationDateMinute, int priority,
145                            boolean alert)
146                    throws PortalException, SystemException {
147    
148                    return addEntry(
149                            plid, classNameId, classPK, title, content, url, type,
150                            displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
151                            displayDateMinute, false, expirationDateMonth, expirationDateDay,
152                            expirationDateYear, expirationDateHour, expirationDateMinute,
153                            priority, alert);
154            }
155    
156            @Override
157            public void deleteEntry(long entryId)
158                    throws PortalException, SystemException {
159    
160                    AnnouncementsEntryPermission.check(
161                            getPermissionChecker(), entryId, ActionKeys.DELETE);
162    
163                    announcementsEntryLocalService.deleteEntry(entryId);
164            }
165    
166            @Override
167            public AnnouncementsEntry getEntry(long entryId)
168                    throws PortalException, SystemException {
169    
170                    AnnouncementsEntry entry = announcementsEntryLocalService.getEntry(
171                            entryId);
172    
173                    AnnouncementsEntryPermission.check(
174                            getPermissionChecker(), entry, ActionKeys.VIEW);
175    
176                    return entry;
177            }
178    
179            @Override
180            public AnnouncementsEntry updateEntry(
181                            long entryId, String title, String content, String url, String type,
182                            int displayDateMonth, int displayDateDay, int displayDateYear,
183                            int displayDateHour, int displayDateMinute, int expirationDateMonth,
184                            int expirationDateDay, int expirationDateYear,
185                            int expirationDateHour, int expirationDateMinute, int priority)
186                    throws PortalException, SystemException {
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                            expirationDateMonth, expirationDateDay, expirationDateYear,
195                            expirationDateHour, expirationDateMinute, priority);
196            }
197    
198    }