/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.wcs.newsletter.controller; /* * #%L * Webstar Newsletter * %% * Copyright (C) 2013 Webstar Csoport Kft. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import com.liferay.counter.service.CounterLocalServiceUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.repository.model.FileEntry; import com.liferay.portal.kernel.util.GetterUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import com.liferay.portal.model.Layout; import com.liferay.portal.model.LayoutConstants; import com.liferay.portal.security.permission.ActionKeys; import com.liferay.portal.service.LayoutLocalServiceUtil; import com.liferay.portal.service.ServiceContext; import com.liferay.portal.theme.ThemeDisplay; import com.liferay.portal.util.LayoutLister; import com.liferay.portal.util.LayoutView; import com.liferay.portal.util.PortalUtil; import com.liferay.portlet.documentlibrary.model.DLFileEntry; import com.liferay.portlet.documentlibrary.model.DLFolder; import com.liferay.portlet.documentlibrary.model.DLFolderConstants; import com.liferay.portlet.documentlibrary.model.DLSync; import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil; import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil; import com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil; import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil; import com.liferay.portlet.documentlibrary.service.DLSyncLocalServiceUtil; import com.wcs.newsletter.model.Category; import com.wcs.newsletter.model.NewsletterConfig; import com.wcs.newsletter.model.Subscription; import com.wcs.newsletter.model.SubscriptionCategory; import com.wcs.newsletter.model.impl.CategoryImpl; import com.wcs.newsletter.model.impl.NewsletterConfigImpl; import com.wcs.newsletter.service.CategoryLocalServiceUtil; import com.wcs.newsletter.service.NewsletterConfigLocalServiceUtil; import com.wcs.newsletter.service.SubscriptionCategoryLocalServiceUtil; import com.wcs.newsletter.util.AppMessageBundle; import com.wcs.newsletter.util.LiferayUtil; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.model.SelectItem; import org.apache.commons.io.IOUtils; /** * * @author csaba */ @ManagedBean @ViewScoped public class ConfigController extends AbstractController { private static final String SAVE_SUCCESS = "admin_newsletters_save_success"; private static final String CLEAR_SUCCESS = "admin_newsletters_clear_success"; private boolean updateTemplate; private List<FileEntry> templateList; private FileEntry selectedTemplate; private boolean syncUsers; private boolean installedDefaults; private SelectItem[] layoutsForSelect; private String selectedLayout; public String getSelectedLayout() { return selectedLayout; } public void setSelectedLayout(String selectedLayout) { this.selectedLayout = selectedLayout; } public SelectItem[] getLayoutsForSelect() { return layoutsForSelect; } public void setLayoutsForSelect(SelectItem[] layoutsForSelect) { this.layoutsForSelect = layoutsForSelect; } public boolean isInstalledDefaults() { return installedDefaults; } public void setInstalledDefaults(boolean installedDefaults) { this.installedDefaults = installedDefaults; } public void save() { try { if (selectedTemplate != null) { List<NewsletterConfig> configs = NewsletterConfigLocalServiceUtil.findByConfigKey("emailTemplate"); NewsletterConfig emailTemplateConfig; if (configs.isEmpty()) { emailTemplateConfig = new NewsletterConfigImpl(); emailTemplateConfig.setConfigKey("emailTemplate"); emailTemplateConfig.setConfigValue(String.valueOf(selectedTemplate.getFileEntryId())); NewsletterConfigLocalServiceUtil.addNewsletterConfig(emailTemplateConfig); } else { emailTemplateConfig = configs.get(0); emailTemplateConfig.setConfigValue(String.valueOf(selectedTemplate.getFileEntryId())); NewsletterConfigLocalServiceUtil.updateNewsletterConfig(emailTemplateConfig); } } //configs List<NewsletterConfig> configs = NewsletterConfigLocalServiceUtil.findByConfigKey("syncUsers"); NewsletterConfig syncUserConfig; if (configs.isEmpty()) { syncUserConfig = new NewsletterConfigImpl(); syncUserConfig.setConfigKey("syncUsers"); syncUserConfig.setConfigValue(syncUsers ? "1" : "0"); NewsletterConfigLocalServiceUtil.addNewsletterConfig(syncUserConfig); } else { syncUserConfig = configs.get(0); syncUserConfig.setConfigValue(syncUsers ? "1" : "0"); NewsletterConfigLocalServiceUtil.updateNewsletterConfig(syncUserConfig); } //configs configs = NewsletterConfigLocalServiceUtil.findByConfigKey("subscriptionActionLayout"); NewsletterConfig subscriptionActionLayout; if (configs.isEmpty()) { subscriptionActionLayout = new NewsletterConfigImpl(); subscriptionActionLayout.setConfigKey("subscriptionActionLayout"); subscriptionActionLayout.setConfigValue(selectedLayout); NewsletterConfigLocalServiceUtil.addNewsletterConfig(subscriptionActionLayout); } else { subscriptionActionLayout = configs.get(0); subscriptionActionLayout.setConfigValue(selectedLayout); NewsletterConfigLocalServiceUtil.updateNewsletterConfig(subscriptionActionLayout); } //end configs addSuccessMessage(SAVE_SUCCESS); } catch (Exception ex) { logger.error(ex); addErrorMessage(ex); } } public boolean isSyncUsers() { return syncUsers; } public void setSyncUsers(boolean syncUsers) { this.syncUsers = syncUsers; } @Override public void initController() { listLayouts(); initConfigs(); } public void canSetTemplate() { updateTemplate = true; } public void initConfigs() { try { List<NewsletterConfig> configs = NewsletterConfigLocalServiceUtil.getNewsletterConfigs(0, NewsletterConfigLocalServiceUtil.getNewsletterConfigsCount()); if (!configs.isEmpty()) { HashMap<String, String> configMap = new HashMap<String, String>(); for (NewsletterConfig conf : configs) { configMap.put(conf.getConfigKey(), conf.getConfigValue()); } syncUsers = "1".equals(configMap.get("syncUsers")); installedDefaults = "1".equals(configMap.get("defaultsInstalled")); if (!updateTemplate) { selectedTemplate = DLAppServiceUtil.getFileEntry(Long.valueOf(configMap.get("emailTemplate"))); } selectedLayout = ""; selectedLayout = configMap.get("subscriptionActionLayout"); } } catch (PortalException ex) { Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex); } catch (SystemException ex) { Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex); } } public FileEntry getSelectedTemplate() { return selectedTemplate; } public void setSelectedTemplate(FileEntry selectedTemplate) { this.selectedTemplate = selectedTemplate; } public List<FileEntry> getTemplateList() { if (templateList == null || !(templateList.size() > 0)) { templateList = new ArrayList<FileEntry>(); long galleryRootFolder = 0; try { List<DLFileEntry> files = DLFileEntryLocalServiceUtil.getDLFileEntries(0, DLFileEntryLocalServiceUtil.getDLFileEntriesCount());//getFileEntries(getThemeDisplay().getScopeGroupId(), DLFolderConstants.DEFAULT_PARENT_FOLDER_ID);//.getFileEntries(templateFolder.getRepositoryId(), folderId); for (DLFileEntry fil : files) { FileEntry newsletterTemplate = DLAppServiceUtil.getFileEntry(fil.getFileEntryId()); if (newsletterTemplate.getMimeType().equals("text/html")) { templateList.add(newsletterTemplate); } } } catch (PortalException ex) { logger.error(ex); } catch (SystemException ex) { logger.error(ex); } } return templateList; } public void setTemplateList(List<FileEntry> templateList) { this.templateList = templateList; } public void installDefaultContents() { try { long id = CounterLocalServiceUtil.increment(); ThemeDisplay themeDisplay = LiferayUtil.getThemeDisplay(); DLFolder folder = DLFolderLocalServiceUtil.createDLFolder(id); folder.setName("Webstar-Newsletter"); folder.setParentFolderId(0); folder.setDescription("Folder for default Webstar-Newsletter contents"); folder.setGroupId(themeDisplay.getScopeGroupId()); folder.setCompanyId(themeDisplay.getCompanyId()); folder.setUserId(themeDisplay.getRealUserId()); folder.setParentFolderId(DLFolderConstants.DEFAULT_PARENT_FOLDER_ID); long defaultRepoId = DLFolderConstants.getDataRepositoryId(themeDisplay.getScopeGroupId(), DLFolderConstants.DEFAULT_PARENT_FOLDER_ID); folder.setRepositoryId(defaultRepoId); Date allDate = new Date(); folder.setCreateDate(allDate); folder.setModifiedDate(allDate); folder.setLastPostDate(allDate); folder = DLFolderLocalServiceUtil.addDLFolder(folder); ServiceContext serviceContext = new ServiceContext(); serviceContext.setScopeGroupId(folder.getGroupId()); serviceContext.setAddGuestPermissions(true); serviceContext.setGuestPermissions(new String[]{ActionKeys.ACCESS}); long syncId = CounterLocalServiceUtil.increment(); DLSync foldersSync = DLSyncLocalServiceUtil.createDLSync(syncId); foldersSync.setFileId(folder.getFolderId()); foldersSync.setParentFolderId(folder.getParentFolderId()); foldersSync.setCompanyId(folder.getCompanyId()); foldersSync.setFileUuid(folder.getUuid()); foldersSync.setRepositoryId(folder.getRepositoryId()); foldersSync.setName(folder.getName()); foldersSync.setEvent("add"); foldersSync.setType("folder"); foldersSync.setVersion("-1"); foldersSync.setCreateDate(allDate); foldersSync.setModifiedDate(allDate); DLSyncLocalServiceUtil.updateDLSync(foldersSync); /* Confirm tempalte 1*/ long fileId = CounterLocalServiceUtil.increment(); InputStream inputStream = getClass().getClassLoader().getResourceAsStream("install/HU_Confirm_Email.html"); String filename = "Confirm_Template_HU.html"; File confTemp1 = File.createTempFile("temp", ".tmp"); FileOutputStream out = new FileOutputStream(confTemp1); IOUtils.copy(inputStream, out); DLFileEntry templateFile = DLFileEntryServiceUtil.addFileEntry(folder.getGroupId(), folder.getRepositoryId(), folder.getFolderId(), confTemp1.getName(), "text/html", filename, filename, "", folder.getDefaultFileEntryTypeId(), null, confTemp1, null, confTemp1.getUsableSpace(), serviceContext); DLFileEntryLocalServiceUtil.updateFileEntry(folder.getUserId(), templateFile.getFileEntryId(), filename, "text/html", filename, filename, "", true, templateFile.getFileEntryTypeId(), null, confTemp1, null, confTemp1.getUsableSpace(), serviceContext); confTemp1.deleteOnExit(); /* Confirm tempalte 2*/ fileId = CounterLocalServiceUtil.increment(); inputStream = getClass().getClassLoader().getResourceAsStream("install/EN_Confirm_Email.html"); filename = "Confirm_Template_EN.html"; File confTemp2 = File.createTempFile("temp2", ".tmp"); out = new FileOutputStream(confTemp2); IOUtils.copy(inputStream, out); templateFile = DLFileEntryServiceUtil.addFileEntry(folder.getGroupId(), folder.getRepositoryId(), folder.getFolderId(), confTemp2.getName(), "text/html", filename, filename, "", folder.getDefaultFileEntryTypeId(), null, confTemp2, null, confTemp2.getUsableSpace(), serviceContext); DLFileEntryLocalServiceUtil.updateFileEntry(folder.getUserId(), templateFile.getFileEntryId(), filename, "text/html", filename, filename, "", true, templateFile.getFileEntryTypeId(), null, confTemp2, null, confTemp2.getUsableSpace(), serviceContext); confTemp2.deleteOnExit(); /*Set default confirm template to EN version */ List<NewsletterConfig> configs = NewsletterConfigLocalServiceUtil.findByConfigKey("emailTemplate"); NewsletterConfig defaultTemplate; if (configs.isEmpty()) { defaultTemplate = new NewsletterConfigImpl(); defaultTemplate.setConfigKey("emailTemplate"); defaultTemplate.setConfigValue(String.valueOf(templateFile.getFileEntryId())); NewsletterConfigLocalServiceUtil.addNewsletterConfig(defaultTemplate); } else { defaultTemplate = configs.get(0); defaultTemplate.setConfigValue(String.valueOf(templateFile.getFileEntryId())); NewsletterConfigLocalServiceUtil.updateNewsletterConfig(defaultTemplate); } /* Newsletter tempalte 1*/ fileId = CounterLocalServiceUtil.increment(); inputStream = getClass().getClassLoader().getResourceAsStream("install/HU_newsletterTemplate.html"); filename = "Newsletter_Template_HU.html"; File newsletterTemp1 = File.createTempFile("temp3", ".tmp"); out = new FileOutputStream(newsletterTemp1); IOUtils.copy(inputStream, out); templateFile = DLFileEntryServiceUtil.addFileEntry(folder.getGroupId(), folder.getRepositoryId(), folder.getFolderId(), newsletterTemp1.getName(), "text/html", filename, filename, "", folder.getDefaultFileEntryTypeId(), null, newsletterTemp1, null, newsletterTemp1.getUsableSpace(), serviceContext); DLFileEntryLocalServiceUtil.updateFileEntry(folder.getUserId(), templateFile.getFileEntryId(), filename, "text/html", filename, filename, "", true, templateFile.getFileEntryTypeId(), null, newsletterTemp1, null, newsletterTemp1.getUsableSpace(), serviceContext); newsletterTemp1.deleteOnExit(); /* Newsletter tempalte 2*/ fileId = CounterLocalServiceUtil.increment(); inputStream = getClass().getClassLoader().getResourceAsStream("install/EN_newsletterTemplate.html"); filename = "Newsletter_Template_EN.html"; File newsletterTemp2 = File.createTempFile("temp4", ".tmp"); out = new FileOutputStream(newsletterTemp2); IOUtils.copy(inputStream, out); templateFile = DLFileEntryServiceUtil.addFileEntry(folder.getGroupId(), folder.getRepositoryId(), folder.getFolderId(), newsletterTemp2.getName(), "text/html", filename, filename, "", folder.getDefaultFileEntryTypeId(), null, newsletterTemp2, null, newsletterTemp2.getUsableSpace(), serviceContext); DLFileEntryLocalServiceUtil.updateFileEntry(folder.getUserId(), templateFile.getFileEntryId(), filename, "text/html", filename, filename, "", true, templateFile.getFileEntryTypeId(), null, newsletterTemp2, null, newsletterTemp2.getUsableSpace(), serviceContext); newsletterTemp2.deleteOnExit(); NewsletterConfig defaultsInstalledConfig = new NewsletterConfigImpl(); defaultsInstalledConfig.setConfigKey("defaultsInstalled"); defaultsInstalledConfig.setConfigValue("1"); NewsletterConfigLocalServiceUtil.addNewsletterConfig(defaultsInstalledConfig); Category actualCategory = null; Locale[] localesForDefaultCategories = LiferayUtil.getAvailableLocales(); for (Locale local : localesForDefaultCategories) { actualCategory = new CategoryImpl(); actualCategory.setLocale(local.toString()); actualCategory.setName("Default_" + local); CategoryLocalServiceUtil.addCategory(actualCategory); } } catch (IOException ex) { Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex); } catch (PortalException ex) { Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex); } catch (SystemException ex) { Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex); } } public void listLayouts() { try { Layout rootLayout = null; long rootLayoutId = LayoutConstants.DEFAULT_PARENT_LAYOUT_ID; LayoutLister layoutLister = new LayoutLister(); String rootNodeName = StringPool.BLANK; LayoutView layoutView = layoutLister.getLayoutView(getThemeDisplay().getScopeGroupId(), false, rootNodeName, getThemeDisplay().getLocale()); List layoutList = layoutView.getList(); Map<String, String> layoutMap = new HashMap<String, String>(); layoutMap.put("", AppMessageBundle.getString("choose")); for (int i = 0; i < layoutList.size(); i++) { // id | parentId | ls | obj id | name | img | depth String layoutDesc = (String) layoutList.get(i); String[] nodeValues = StringUtil.split(layoutDesc, '|'); long objId = GetterUtil.getLong(nodeValues[3]); String name = nodeValues[4]; int depth = 0; if (i != 0) { depth = GetterUtil.getInteger(nodeValues[6]); } for (int j = 0; j < depth; j++) { name = "- " + name; } Layout curRootLayout = null; try { curRootLayout = LayoutLocalServiceUtil.getLayout(objId); } catch (Exception e) { } if (curRootLayout != null) { layoutMap.put(String.valueOf(curRootLayout.getPlid()), name); } } layoutsForSelect = new SelectItem[layoutMap.size()]; int arrayHelper = 0; for (String key : layoutMap.keySet()) { layoutsForSelect[arrayHelper] = new SelectItem(key, layoutMap.get(key)); arrayHelper++; } } catch (PortalException ex) { Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex); } catch (SystemException ex) { Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex); } } public void clearCategorySubscriptions() { try { List<Category> categoryList = CategoryLocalServiceUtil.getCategories(); List<SubscriptionCategory> subscriptionList = SubscriptionCategoryLocalServiceUtil.getSubscriptionCategories(0, SubscriptionCategoryLocalServiceUtil.getSubscriptionCategoriesCount()); // System.out.println("categoryList" + categoryList); // System.out.println("subscriptionList" + subscriptionList); List<Long> catIds = new ArrayList<Long>(); for(Category cat :categoryList){ catIds.add(cat.getCategoryId()); } for (SubscriptionCategory sCat : subscriptionList) { if (!catIds.contains(sCat.getCategoryId())) { SubscriptionCategoryLocalServiceUtil.deleteSubscriptionCategory(sCat); } } addSuccessMessage(CLEAR_SUCCESS); } catch (SystemException ex) { Logger.getLogger(ConfigController.class.getName()).log(Level.SEVERE, null, ex); } } }