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.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            @Override
043            public AnnouncementsEntry addEntry(
044                            long plid, long classNameId, long classPK, String title,
045                            String content, String url, String type, int displayDateMonth,
046                            int displayDateDay, int displayDateYear, int displayDateHour,
047                            int displayDateMinute, boolean autoDisplayDate,
048                            int expirationDateMonth, int expirationDateDay,
049                            int expirationDateYear, int expirationDateHour,
050                            int expirationDateMinute, int priority, boolean alert)
051                    throws PortalException, SystemException {
052    
053                    PermissionChecker permissionChecker = getPermissionChecker();
054    
055                    if (alert) {
056                            AnnouncementsEntryPermission.check(
057                                    permissionChecker, plid, PortletKeys.ALERTS,
058                                    ActionKeys.ADD_ENTRY);
059                    }
060                    else {
061                            AnnouncementsEntryPermission.check(
062                                    permissionChecker, plid, PortletKeys.ANNOUNCEMENTS,
063                                    ActionKeys.ADD_ENTRY);
064                    }
065    
066                    if (classNameId == 0) {
067                            if (!permissionChecker.isOmniadmin()) {
068                                    throw new PrincipalException();
069                            }
070                    }
071                    else {
072                            String className = PortalUtil.getClassName(classNameId);
073    
074                            if (className.equals(Group.class.getName()) &&
075                                    !GroupPermissionUtil.contains(
076                                            permissionChecker, classPK,
077                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
078    
079                                    throw new PrincipalException();
080                            }
081    
082                            if (className.equals(Organization.class.getName()) &&
083                                    !OrganizationPermissionUtil.contains(
084                                            permissionChecker, classPK,
085                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
086    
087                                    throw new PrincipalException();
088                            }
089    
090                            if (className.equals(Role.class.getName()) &&
091                                    !RolePermissionUtil.contains(
092                                            permissionChecker, classPK,
093                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
094    
095                                    throw new PrincipalException();
096                            }
097    
098                            if (className.equals(UserGroup.class.getName()) &&
099                                    !UserGroupPermissionUtil.contains(
100                                            permissionChecker, classPK,
101                                            ActionKeys.MANAGE_ANNOUNCEMENTS)) {
102    
103                                    throw new PrincipalException();
104                            }
105                    }
106    
107                    return announcementsEntryLocalService.addEntry(
108                            getUserId(), classNameId, classPK, title, content, url, type,
109                            displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
110                            displayDateMinute, autoDisplayDate, expirationDateMonth,
111                            expirationDateDay, expirationDateYear, expirationDateHour,
112                            expirationDateMinute, priority, alert);
113            }
114    
115            /**
116             * @deprecated As of 6.2.0, replaced by {@link #addEntry(long, long, long,
117             *             String, String, String, String, int, int, int, int, int,
118             *             boolean, int, int, int, int, int, int, boolean)}
119             */
120            @Override
121            public AnnouncementsEntry addEntry(
122                            long plid, long classNameId, long classPK, String title,
123                            String content, String url, String type, int displayDateMonth,
124                            int displayDateDay, int displayDateYear, int displayDateHour,
125                            int displayDateMinute, int expirationDateMonth,
126                            int expirationDateDay, int expirationDateYear,
127                            int expirationDateHour, int expirationDateMinute, int priority,
128                            boolean alert)
129                    throws PortalException, SystemException {
130    
131                    return addEntry(
132                            plid, classNameId, classPK, title, content, url, type,
133                            displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
134                            displayDateMinute, false, expirationDateMonth, expirationDateDay,
135                            expirationDateYear, expirationDateHour, expirationDateMinute,
136                            priority, alert);
137            }
138    
139            @Override
140            public void deleteEntry(long entryId)
141                    throws PortalException, SystemException {
142    
143                    AnnouncementsEntryPermission.check(
144                            getPermissionChecker(), entryId, ActionKeys.DELETE);
145    
146                    announcementsEntryLocalService.deleteEntry(entryId);
147            }
148    
149            @Override
150            public AnnouncementsEntry getEntry(long entryId)
151                    throws PortalException, SystemException {
152    
153                    AnnouncementsEntry entry = announcementsEntryLocalService.getEntry(
154                            entryId);
155    
156                    AnnouncementsEntryPermission.check(
157                            getPermissionChecker(), entry, ActionKeys.VIEW);
158    
159                    return entry;
160            }
161    
162            @Override
163            public AnnouncementsEntry updateEntry(
164                            long entryId, String title, String content, String url, String type,
165                            int displayDateMonth, int displayDateDay, int displayDateYear,
166                            int displayDateHour, int displayDateMinute, int expirationDateMonth,
167                            int expirationDateDay, int expirationDateYear,
168                            int expirationDateHour, int expirationDateMinute, int priority)
169                    throws PortalException, SystemException {
170    
171                    AnnouncementsEntryPermission.check(
172                            getPermissionChecker(), entryId, ActionKeys.UPDATE);
173    
174                    return announcementsEntryLocalService.updateEntry(
175                            getUserId(), entryId, title, content, url, type, displayDateMonth,
176                            displayDateDay, displayDateYear, displayDateHour, displayDateMinute,
177                            expirationDateMonth, expirationDateDay, expirationDateYear,
178                            expirationDateHour, expirationDateMinute, priority);
179            }
180    
181    }