/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.frontend.image.editor.integration.document.library.internal.display.context.logic; import com.liferay.document.library.kernel.util.DLUtil; import com.liferay.document.library.web.constants.DLPortletKeys; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.model.Image; import com.liferay.portal.kernel.portlet.LiferayPortletResponse; import com.liferay.portal.kernel.portlet.LiferayWindowState; import com.liferay.portal.kernel.portlet.PortletProvider; import com.liferay.portal.kernel.portlet.PortletProviderUtil; import com.liferay.portal.kernel.portlet.PortletURLFactoryUtil; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.repository.model.FileVersion; import com.liferay.portal.kernel.security.permission.ActionKeys; import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptMenuItem; import com.liferay.portal.kernel.servlet.taglib.ui.JavaScriptToolbarItem; import com.liferay.portal.kernel.settings.PortletInstanceSettingsLocator; import com.liferay.portal.kernel.settings.Settings; import com.liferay.portal.kernel.settings.SettingsFactoryUtil; import com.liferay.portal.kernel.settings.TypedSettings; import com.liferay.portal.kernel.template.Template; import com.liferay.portal.kernel.template.TemplateConstants; import com.liferay.portal.kernel.template.TemplateManagerUtil; import com.liferay.portal.kernel.template.URLTemplateResource; import com.liferay.portal.kernel.theme.PortletDisplay; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.kernel.util.JavaConstants; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.util.PropsValues; import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission; import java.util.ResourceBundle; import javax.portlet.ActionRequest; import javax.portlet.PortletRequest; import javax.portlet.PortletResponse; import javax.portlet.PortletURL; import javax.servlet.http.HttpServletRequest; /** * @author Sergio González */ public class ImageEditorDLDisplayContextHelper { public ImageEditorDLDisplayContextHelper( FileVersion fileVersion, HttpServletRequest request) { _fileVersion = fileVersion; _request = request; _themeDisplay = (ThemeDisplay)request.getAttribute( WebKeys.THEME_DISPLAY); try { FileEntry fileEntry = null; if (fileVersion != null) { fileEntry = fileVersion.getFileEntry(); } _fileEntry = fileEntry; } catch (PortalException pe) { throw new SystemException( "Unable to create image editor document library display " + "context helper for file version " + fileVersion, pe); } } public JavaScriptMenuItem getJavacriptEditWithImageEditorMenuItem( ResourceBundle resourceBundle) throws PortalException { JavaScriptMenuItem javascriptMenuItem = new JavaScriptMenuItem(); javascriptMenuItem.setKey("#edit-with-image-editor"); javascriptMenuItem.setLabel( LanguageUtil.get(resourceBundle, "edit-with-image-editor")); javascriptMenuItem.setOnClick(_getOnclickMethod()); javascriptMenuItem.setJavaScript(_getJavaScript()); return javascriptMenuItem; } public JavaScriptToolbarItem getJavacriptEditWithImageEditorToolbarItem( ResourceBundle resourceBundle) throws PortalException { JavaScriptToolbarItem javascriptToolbarItem = new JavaScriptToolbarItem(); javascriptToolbarItem.setKey("#edit-with-image-editor"); javascriptToolbarItem.setLabel( LanguageUtil.get(resourceBundle, "edit-with-image-editor")); javascriptToolbarItem.setOnClick(_getOnclickMethod()); javascriptToolbarItem.setJavaScript(_getJavaScript()); return javascriptToolbarItem; } public boolean isShowActions() throws PortalException { PortletDisplay portletDisplay = _themeDisplay.getPortletDisplay(); String portletName = portletDisplay.getPortletName(); if (portletName.equals(DLPortletKeys.DOCUMENT_LIBRARY_ADMIN)) { return true; } Settings settings = SettingsFactoryUtil.getSettings( new PortletInstanceSettingsLocator( _themeDisplay.getLayout(), portletDisplay.getId())); TypedSettings typedSettings = new TypedSettings(settings); return typedSettings.getBooleanValue("showActions"); } public boolean isShowImageEditorAction() throws PortalException { if (_showImageEditorAction != null) { return _showImageEditorAction; } if (!isShowActions()) { _showImageEditorAction = false; } else if (!DLFileEntryPermission.contains( _themeDisplay.getPermissionChecker(), _fileEntry, ActionKeys.UPDATE) || (_fileEntry.isCheckedOut() && !_fileEntry.hasLock())) { _showImageEditorAction = false; } else if (!ArrayUtil.contains( PropsValues.DL_FILE_ENTRY_PREVIEW_IMAGE_MIME_TYPES, _fileEntry.getMimeType())) { _showImageEditorAction = false; } else { _showImageEditorAction = true; } return _showImageEditorAction; } private String _getJavaScript() throws PortalException { String javaScript = "/com/liferay/frontend/image/editor/integration/document/library" + "/internal/display/context/dependencies" + "/edit_with_image_editor_js.ftl"; Class<?> clazz = getClass(); URLTemplateResource urlTemplateResource = new URLTemplateResource( javaScript, clazz.getResource(javaScript)); Template template = TemplateManagerUtil.getTemplate( TemplateConstants.LANG_TYPE_FTL, urlTemplateResource, false); template.put("editLanguageKey", LanguageUtil.get(_request, "edit")); LiferayPortletResponse liferayPortletResponse = _getLiferayPortletResponse(); template.put("namespace", liferayPortletResponse.getNamespace()); UnsyncStringWriter unsyncStringWriter = new UnsyncStringWriter(); template.processTemplate(unsyncStringWriter); return unsyncStringWriter.toString(); } private LiferayPortletResponse _getLiferayPortletResponse() { PortletResponse portletResponse = (PortletResponse)_request.getAttribute( JavaConstants.JAVAX_PORTLET_RESPONSE); return PortalUtil.getLiferayPortletResponse(portletResponse); } private String _getOnclickMethod() { String imageEditorPortletId = PortletProviderUtil.getPortletId( Image.class.getName(), PortletProvider.Action.EDIT); PortletURL imageEditorURL = PortletURLFactoryUtil.create( _request, imageEditorPortletId, PortletRequest.RENDER_PHASE); imageEditorURL.setParameter( "mvcRenderCommandName", "/image_editor/view"); try { imageEditorURL.setWindowState(LiferayWindowState.POP_UP); } catch (Exception e) { throw new SystemException("Unable to set window state", e); } LiferayPortletResponse liferayPortletResponse = _getLiferayPortletResponse(); PortletURL editURL = liferayPortletResponse.createActionURL(); editURL.setParameter( ActionRequest.ACTION_NAME, "/document_library/edit_file_entry_with_image_editor"); editURL.setParameter( "fileEntryId", String.valueOf(_fileEntry.getFileEntryId())); String fileEntryPreviewURL = DLUtil.getPreviewURL( _fileEntry, _fileVersion, _themeDisplay, StringPool.BLANK); StringBundler sb = new StringBundler(10); sb.append(liferayPortletResponse.getNamespace()); sb.append("editWithImageEditor('"); sb.append(imageEditorURL.toString()); sb.append("', '"); sb.append(editURL.toString()); sb.append("', '"); sb.append(_fileEntry.getFileName()); sb.append("', '"); sb.append(fileEntryPreviewURL); sb.append("');"); return sb.toString(); } private final FileEntry _fileEntry; private final FileVersion _fileVersion; private final HttpServletRequest _request; private Boolean _showImageEditorAction; private final ThemeDisplay _themeDisplay; }