package com.idega.content.lucid.business; import java.rmi.RemoteException; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; 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.model.SelectItem; import org.jdom.Document; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import com.idega.block.web2.business.JQuery; import com.idega.block.web2.business.Web2Business; import com.idega.block.web2.business.Web2BusinessBean; import com.idega.builder.bean.AdvancedProperty; import com.idega.builder.business.BuilderLogicWrapper; import com.idega.content.business.ContentConstants; import com.idega.content.business.ContentItemChecker; import com.idega.content.business.ContentUtil; import com.idega.content.lucid.bean.LucidApplicationInfo; import com.idega.content.themes.business.ThemesEngine; import com.idega.content.themes.business.ThemesEngineBean; import com.idega.content.themes.helpers.bean.PageAccessibilityProperty; import com.idega.content.themes.helpers.bean.Setting; import com.idega.content.themes.helpers.bean.Theme; import com.idega.content.themes.helpers.bean.TreeNodeStructure; import com.idega.content.themes.helpers.business.ThemesConstants; import com.idega.content.themes.helpers.business.ThemesHelper; import com.idega.content.themes.presentation.PageInfo; import com.idega.content.themes.presentation.SiteInfo; import com.idega.core.accesscontrol.business.AccessController; import com.idega.core.accesscontrol.business.StandardRoles; import com.idega.core.builder.business.BuilderService; import com.idega.core.builder.business.ICBuilderConstants; import com.idega.core.builder.data.CachedDomain; import com.idega.core.builder.data.ICDomain; import com.idega.core.builder.data.ICPage; import com.idega.core.builder.data.ICPageBMPBean; import com.idega.core.data.ICTreeNode; import com.idega.core.localisation.business.ICLocaleBusiness; import com.idega.data.TreeableEntity; import com.idega.idegaweb.IWBundle; import com.idega.idegaweb.IWMainApplication; import com.idega.idegaweb.IWMainApplicationSettings; import com.idega.idegaweb.IWResourceBundle; import com.idega.presentation.IWContext; import com.idega.servlet.filter.IWWelcomeFilter; import com.idega.user.data.GroupBMPBean; import com.idega.util.ArrayUtil; import com.idega.util.CoreConstants; import com.idega.util.CoreUtil; import com.idega.util.ListUtil; import com.idega.util.LocaleUtil; import com.idega.util.StringUtil; import com.idega.util.expression.ELUtil; @Scope(BeanDefinition.SCOPE_SINGLETON) @Service(LucidEngine.SPRING_BEAN_IDENTIFIER) public class LucidEngineImpl implements LucidEngine { private static final long serialVersionUID = 201381337142886542L; private static final Logger LOGGER = Logger.getLogger(LucidEngineImpl.class.getName()); private static final String PAGE_URI = "pageUri"; private static final String PAGE_TITLE = "pageTitle"; private static final String ARTICLE_VIEWER_NAME = "Article Viewer"; private static final String ARTICLE_VIEWER_SUBTYPE = "viewer"; private String pathToImagesFolder = null; @Autowired private Web2Business web2; @Autowired private JQuery jQuery; @Autowired private BuilderLogicWrapper builderLogic; @Autowired private ThemesEngine themesEngine; @Autowired private ThemesHelper themesHelper; public String getJavaScriptResources() { // DWR StringBuilder js = new StringBuilder(CoreConstants.DWR_UTIL_SCRIPT).append(CoreConstants.COMMA); js.append(CoreConstants.DWR_ENGINE_SCRIPT).append(CoreConstants.COMMA); js.append("/dwr/interface/ThemesEngine.js,/dwr/interface/BuilderService.js,/dwr/interface/LucidEngine.js,"); // MooTools try { js.append(web2.getBundleURIToMootoolsLib()).append(CoreConstants.COMMA); } catch (RemoteException e) { LOGGER.log(Level.WARNING, "Error getting URI to MooTools script", e); } // jQuery js.append(jQuery.getBundleURIToJQueryLib()).append(CoreConstants.COMMA); js.append(web2.getBundleUriToContextMenuScript(false)).append(CoreConstants.COMMA); // Helpers IWBundle bundle = ContentUtil.getBundle(); js.append(bundle.getVirtualPathWithFileNameString("javascript/drag-drop-folder-tree.js")).append(CoreConstants.COMMA); js.append(bundle.getVirtualPathWithFileNameString("javascript/ThemesHelper.js")).append(CoreConstants.COMMA); js.append(bundle.getVirtualPathWithFileNameString("javascript/LucidHelper.js")).append(CoreConstants.COMMA); js.append(bundle.getVirtualPathWithFileNameString("javascript/tree.js")).append(CoreConstants.COMMA); js.append(bundle.getVirtualPathWithFileNameString("javascript/SiteManagerHelper.js")); return js.toString(); } public String getJavaScriptResourcesForThemes() { StringBuilder js = new StringBuilder(); // MooTools try { js.append(web2.getBundleURIToMootoolsLib()).append(CoreConstants.COMMA); } catch (RemoteException e) { LOGGER.log(Level.WARNING, "Error getting URI to MooTools script", e); } js.append(web2.getReflectionForMootoolsScriptFilePath()).append(CoreConstants.COMMA); js.append(web2.getBundleUriToMooRainbowScript()).append(CoreConstants.COMMA); // jQuery js.append(jQuery.getBundleURIToJQueryLib()).append(CoreConstants.COMMA); js.append(web2.getBundleUriToContextMenuScript(false)).append(CoreConstants.COMMA); // DWR js.append(CoreConstants.DWR_ENGINE_SCRIPT).append(CoreConstants.COMMA).append("/dwr/interface/ThemesEngine.js,/dwr/interface/LucidEngine.js,"); // Helpers IWBundle bundle = ContentUtil.getBundle(); js.append(bundle.getVirtualPathWithFileNameString("javascript/ThemesManagerHelper.js")).append(CoreConstants.COMMA); js.append(bundle.getVirtualPathWithFileNameString("javascript/ThemesSliderHelper.js")).append(CoreConstants.COMMA); js.append(bundle.getVirtualPathWithFileNameString("javascript/ThemesHelper.js")); return js.toString(); } public String getStyleSheetResources() { return ContentUtil.getBundle().getVirtualPathWithFileNameString("style/content.css"); } public String getStyleSheetResourcesForThemes() { return new StringBuilder(ContentUtil.getBundle().getVirtualPathWithFileNameString("style/content.css")).append(CoreConstants.COMMA) .append(web2.getBundleUriToMooRainbowStyle()).append(CoreConstants.COMMA) .append(ContentUtil.getBundle().getVirtualPathWithFileNameString("style/themes_manager.css")) .toString(); } public Web2Business getWeb2() { return web2; } public void setWeb2(Web2Business web2) { this.web2 = web2; } public BuilderLogicWrapper getBuilderLogic() { return builderLogic; } public void setBuilderLogic(BuilderLogicWrapper builderLogic) { this.builderLogic = builderLogic; } private List<String> getThickBoxResources() { List<String> resources = new ArrayList<String>(); try { resources.add(web2.getThickboxStyleFilePath()); } catch (RemoteException e) { LOGGER.log(Level.WARNING, "Error getting URI to Thickbox style", e); } resources.add(jQuery.getBundleURIToJQueryLib()); try { resources.add(web2.getThickboxScriptFilePath()); } catch (RemoteException e) { LOGGER.log(Level.WARNING, "Error getting URI to Thickbox script", e); } return resources; } public List<String> getPermissionWindowResources() { List<String> resources = getThickBoxResources(); List<AdvancedProperty> parameters = Arrays.asList(new AdvancedProperty(ICBuilderConstants.UI_COMPONENT_IS_IN_LIGHTBOX, Boolean.TRUE.toString())); resources.add(0, getBuilderLogic().getBuilderService(IWMainApplication.getDefaultIWApplicationContext()).getUriToPagePermissionsWindow(parameters)); return resources; } public List<String> getPropertiesWindowResources() { List<String> resources = getThickBoxResources(); List<AdvancedProperty> parameters = Arrays.asList( new AdvancedProperty(ICBuilderConstants.IB_CONTROL_PARAMETER, ICBuilderConstants.ACTION_EDIT), new AdvancedProperty(ICBuilderConstants.IC_OBJECT_INSTANCE_ID_PARAMETER, String.valueOf(-1)), new AdvancedProperty(ICBuilderConstants.UI_COMPONENT_IS_IN_LIGHTBOX, Boolean.TRUE.toString()) ); resources.add(0, getBuilderLogic().getBuilderService(IWMainApplication.getDefaultIWApplicationContext()).getUriToPagePropertiesWindow(parameters)); return resources; } public boolean isContentEditor() { if (isSuperAdmin()) { return true; } try { return CoreUtil.getIWContext().hasRole(StandardRoles.ROLE_KEY_EDITOR); } catch(Exception e) { LOGGER.log(Level.WARNING, "Error while determining if user is content editor", e); } return false; } public boolean isSuperAdmin() { IWContext iwc = CoreUtil.getIWContext(); if (iwc == null) { return false; } try { if (!iwc.isLoggedOn()) { return false; } } catch(Exception e) { LOGGER.log(Level.WARNING, "Error while determining if user is logged", e); return false; } return iwc.isSuperAdmin(); } public Collection<SelectItem> getAvailableLocales() { List<SelectItem> availableLocales = new ArrayList<SelectItem>(); List<Locale> locales = ICLocaleBusiness.getListOfLocalesJAVA(); if (ListUtil.isEmpty(locales)) { return availableLocales; } Locale currentLocale = null; IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return availableLocales; } currentLocale = iwc.getCurrentLocale(); if (currentLocale == null) { currentLocale = Locale.ENGLISH; } for (Locale locale: locales) { availableLocales.add(new SelectItem(locale.toString(), locale.getDisplayName(currentLocale))); } availableLocales.add(new SelectItem(String.valueOf(-1), ContentUtil.getBundle().getResourceBundle(currentLocale).getLocalizedString("lucid.change_locale", "Change locale"))); return availableLocales; } public boolean setLocale(String locale) { if (StringUtil.isEmpty(locale)) { return false; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } Locale newLocale = LocaleUtil.getLocale(locale); if (newLocale != null && !newLocale.equals(locale)) { iwc.setCurrentLocale(newLocale); return true; } return false; } public String getCurrentLocaleValue() { IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc != null) { Locale locale = iwc.getCurrentLocale(); if (locale != null) { return locale.toString(); } } return String.valueOf(-1); } public String changePageUri(String pageKey, String pageUri, boolean needSetPageTitle) { return changePageUri(pageKey, pageUri, ":method:1:implied:void:setTitle:java.lang.String:", needSetPageTitle); } private String changePageUri(String pageKey, String pageUri, String methodName, boolean needSetPageTitle) { if (pageKey == null || pageUri == null) { return null; } if (ThemesConstants.MINUS_ONE.equals(pageKey)) { return null; } ICPage page = getThemesHelper().getThemesService().getICPage(pageKey); if (page == null) { return null; } if (pageUri.equals(page.getDefaultPageURI())) { return null; } boolean changePageUri = true; if (needSetPageTitle) { if (!setPageTitle(pageKey, pageUri, methodName)) return null; IWContext iwc = CoreUtil.getIWContext(); Locale currentLocale = iwc.getCurrentLocale(); IWMainApplication iwma = iwc.getIWMainApplication(); Locale defaultLocale = iwma.getDefaultLocale(); changePageUri = currentLocale != null && defaultLocale != null && currentLocale.toString().equals(defaultLocale.toString()); } if (!changePageUri) return page.getDefaultPageURI(); ICDomain domain = null; IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return null; } else { domain = iwc.getDomain(); } if (domain == null) { return null; } if (domain.getStartPageID() == Integer.valueOf(page.getId())) { // Is page a root page? return page.getDefaultPageURI(); } ICTreeNode parentNode = page.getParentNode(); String parentId = null; if (parentNode != null) { parentId = parentNode.getId(); } if (getThemesHelper().getThemesService().getBuilderService().changePageUriByTitle(parentId, page, pageUri, domain.getID())) { setNewLinkInArticleFile(page.getId(), CoreConstants.getArticleItemViewerClass().getName(), page.getDefaultPageURI()); return page.getDefaultPageURI(); } return null; } public boolean setNewLinkInArticleFile(String pageKey, String moduleClass, String pageUri) { if (pageKey == null || moduleClass == null || pageUri == null) { return false; } BuilderService builder = getBuilderService(); IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } List<String> moduleIds = builder.getModuleId(pageKey, moduleClass); if (moduleIds == null) { return false; } String propertyName = "resourcePath"; String[] linkToArticle = null; for (int i = 0; i < moduleIds.size(); i++) { linkToArticle = builder.getPropertyValues(iwc.getIWMainApplication(), pageKey, moduleIds.get(i), propertyName, null, false); } if (linkToArticle == null) { return false; } if (linkToArticle.length == 0) { return false; } List<Locale> locales = ICLocaleBusiness.getListOfLocalesJAVA(); if (locales == null) { return false; } StringBuffer link = new StringBuffer(getThemesHelper().getFullWebRoot()).append(linkToArticle[0]); if (!link.toString().endsWith(ContentConstants.SLASH)) { link.append(ContentConstants.SLASH); } Locale l = null; boolean result = true; for (int i = 0; i < locales.size(); i++) { l = locales.get(i); if (l.getLanguage() != null) { result = getThemesHelper().setNewLinkInArticleFile(iwc, link.toString(), l.getLanguage(), linkToArticle[0], pageUri); } } return result; } public String savePageInfo(String pageKey, String[] keywords, String[] values) { if (pageKey == null || keywords == null || values == null) { return null; } if (ThemesConstants.MINUS_ONE.equals(pageKey)) { return null; } if (keywords.length != values.length) { return null; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return null; } IWMainApplication appl = iwc.getIWMainApplication(); if (appl == null) { return null; } String changedPageUri = null; List<Setting> settings = getThemesHelper().getPageSettings(); if (ListUtil.isEmpty(settings)) { return null; } int index = 0; String currentValue = null; String[] currentValues = null; String[] newValues = null; boolean changedPageTitle = false; boolean needSetValue = true; for (Setting s: settings) { needSetValue = true; currentValue = values[index]; currentValues = getThemesHelper().getThemesService().getBuilderService().getPropertyValues(appl, pageKey, ThemesConstants.MINUS_ONE, s.getMethod(), null, true); if (StringUtil.isEmpty(currentValue)) { if (currentValues != null) { getThemesHelper().getThemesService().getBuilderService().removeProperty(appl, pageKey, ThemesConstants.MINUS_ONE, s.getMethod(), currentValues); } } else { if (s.getCode().equals(PAGE_URI)) { if (!changedPageTitle) { changedPageUri = setPageUri(pageKey, currentValue); // Setting user's uri } } else if (ContentConstants.HIDE_MENU_IN_PAGE.equals(s.getCode())) { setValueForPage(pageKey, currentValue, ICPageBMPBean.HIDE_PAGE_IN_MENU); } else if (ContentConstants.PUBLISH_PAGE_IN_LUCID_CODE.equals(s.getCode())) { setValueForPage(pageKey, currentValue, ICPageBMPBean.PAGE_IS_PUBLISHED); } else if (ContentConstants.SET_PAGE_LOCKED_IN_LUCID_CODE.equals(s.getCode())) { setPageAvailability(iwc, pageKey, currentValue); setValueForPage(pageKey, currentValue, ICPageBMPBean.PAGE_IS_LOCKED); } else if (ContentConstants.PAGE_IS_CATEGORY_TYPE.equals(s.getCode())) { setValueForPage(pageKey, currentValue, ICPageBMPBean.IS_CATEGORY, false); getBuilderService().clearAllCaches(); } else { newValues = getThemesHelper().getPageValues(s, currentValue); if (newValues == null) { needSetValue = false; } if (Arrays.deepEquals(newValues, currentValues)) { needSetValue = false; } if (needSetValue) { if (s.getCode().equals(PAGE_TITLE)) { changedPageUri = changePageUri(pageKey, currentValue, s.getMethod(), true); // Changing uri by new name } else { getThemesHelper().getThemesService().getBuilderService().setProperty(pageKey, ThemesConstants.MINUS_ONE, s.getMethod(), newValues, appl); } } } } index++; } if (changedPageUri != null) { getThemesEngine().updateSiteTree(false); } return changedPageUri; } public String[] getPageInfoValues(String pageKey, String[] keywords) { if (pageKey == null || keywords == null) { return null; } if (ThemesConstants.MINUS_ONE.equals(pageKey)) { return null; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return null; } IWMainApplication appl = iwc.getIWMainApplication(); if (appl == null) { return null; } List<Setting> settings = getThemesHelper().getPageSettings(); if (ListUtil.isEmpty(settings)) { return null; } List<String> values = new ArrayList<String>(keywords.length); String[] propValues = null; StringBuffer value = null; ICPage page = getThemesHelper().getThemesService().getICPage(pageKey); for (Setting s: settings) { value = new StringBuffer(); propValues = getThemesHelper().getThemesService().getBuilderService().getPropertyValues(appl, pageKey, ThemesConstants.MINUS_ONE, s.getMethod(), null, true); if (propValues != null) { for (int j = 0; j < propValues.length; j++) { if (!s.getDefaultValue().equals(propValues[j])) { value.append(propValues[j]); if (j + 1 < propValues.length) { value.append(ThemesConstants.COMMA); } } } } else { if (s.getCode().equals(PAGE_URI)) { if (page != null) { value.append(page.getDefaultPageURI()); } } if (ContentConstants.HIDE_MENU_IN_PAGE.equals(s.getCode())) { value.append(page.isHidePageInMenu()); } if (ContentConstants.PUBLISH_PAGE_IN_LUCID_CODE.equals(s.getCode())) { value.append(page.isPublished()); } if (ContentConstants.SET_PAGE_LOCKED_IN_LUCID_CODE.equals(s.getCode())) { value.append(page.isLocked()); } if (ContentConstants.PAGE_IS_CATEGORY_TYPE.equals(s.getCode())) { value.append(page.isCategory()); } } values.add(value.toString()); } return ArrayUtil.convertListToArray(values); } public String[] getPageInfoElements() { Collection<Setting> c = getThemesHelper().getPageSettings(); if (c == null) { return null; } return getElements(c); } public String[] getSiteInfoElements() { Collection <Setting> c = getThemesHelper().getThemeSettings(); if (c == null) { return null; } return getElements(c); } public String[] getSiteInfoValues(String[] keywords, String language) { if (keywords == null || language == null) { return null; } Collection <Setting> c = getThemesHelper().getThemeSettings(); if (c == null) { return null; } String[] values = new String[keywords.length]; IWMainApplication application = ContentUtil.getBundle().getApplication(); IWMainApplicationSettings settings = application.getSettings(); ICDomain domain = application.getIWApplicationContext().getDomain(); // Cached domain for (int i = 0; i < keywords.length; i++) { values[i] = getSiteInfoValue(keywords[i], language, settings, domain); } return values; } public String getSiteInfoValue(String keyword, String language, IWMainApplicationSettings settings, ICDomain domain) { if (keyword == null || language == null || settings == null) { return ThemesConstants.EMPTY; } keyword = keyword.indexOf("_PAGE_URI") == -1 ? ThemesConstants.THEMES_PROPERTY_START + keyword + CoreConstants.DOT + language : keyword; if (keyword.indexOf(ThemesConstants.SYSTEM_SETTINGS) == -1 && keyword.indexOf("_PAGE_URI") == -1) { return settings.getProperty(keyword); } else if (keyword.indexOf(ThemesConstants.SYSTEM_SETTINGS) != -1) { // System Settings if (domain == null) { IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc != null) { domain = iwc.getDomain(); } } if (domain == null) { return ThemesConstants.EMPTY; } else { if (keyword.indexOf(ThemesConstants.DOMAIN_NAME) != -1) { return domain.getDomainName(); } if (keyword.indexOf(ThemesConstants.DOMAIN_SERVER_NAME) != -1) { return domain.getServerName(); } } } else if (keyword.indexOf("_PAGE_URI") != -1) { String applicationProperty = settings.getProperty(keyword); return StringUtil.isEmpty(applicationProperty) ? CoreConstants.EMPTY : applicationProperty; } return ThemesConstants.EMPTY; } private String[] getElements(Collection <Setting> c) { if (c == null) { return null; } try { String[] elements = null; List <Setting> settings = new ArrayList<Setting>(c); elements = new String[settings.size()]; for (int i = 0; i < settings.size(); i++) { elements[i] = settings.get(i).getCode(); } return elements; } catch (Exception e) { e.printStackTrace(); } return null; } private boolean saveSiteInfoValue(String language, String keyword, String value, IWMainApplicationSettings settings, ICDomain domain, ICDomain cachedDomain) { if (language == null || keyword == null) { return false; } if (keyword.indexOf(ThemesConstants.SYSTEM_SETTINGS) == -1 && keyword.indexOf("_PAGE_URI") == -1) { if (settings == null) { return false; } String key = new StringBuffer(ThemesConstants.THEMES_PROPERTY_START).append(keyword).append(language).toString(); if (value == null) { settings.removeProperty(key); } else { if (value.equals(" ") || value.equals(ContentConstants.SPACE)) { value = ContentConstants.EMPTY; } settings.setProperty(ThemesConstants.THEMES_PROPERTY_START + keyword + language, value); } } else if (keyword.indexOf(ThemesConstants.SYSTEM_SETTINGS) != -1) { // Saving System Settings if (cachedDomain == null) { return false; } if (domain == null) { domain = getThemesHelper().getThemesService().getDomain(); } if (value != null && !ThemesConstants.EMPTY.equals(value)) { if (domain != null) { if (keyword.indexOf(ThemesConstants.DOMAIN_NAME) != -1) { domain.setDomainName(value); domain.setName(value); cachedDomain.setDomainName(value); cachedDomain.setName(value); } if (keyword.indexOf(ThemesConstants.DOMAIN_SERVER_NAME) != -1) { domain.setServerName(value); cachedDomain.setServerName(value); } domain.store(); } } } else if (keyword.indexOf("_PAGE_URI") != -1) { if (settings == null) { return false; } if (StringUtil.isEmpty(value)) { settings.removeProperty(keyword); } else { settings.setProperty(keyword, value); } } return true; } public boolean saveSiteInfoValue(String keyword, String value) { if (keyword == null || value == null) { return false; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } String language = getThemesHelper().getCurrentLanguage(iwc); if (language == null) { return false; } language = CoreConstants.DOT + language; keyword = getThemesHelper().extractValueFromString(keyword, 0, keyword.lastIndexOf(CoreConstants.UNDER)); IWMainApplication appl = ContentUtil.getBundle().getApplication(); ICDomain cachedDomain = null; if (appl != null) { cachedDomain = appl.getIWApplicationContext().getDomain(); } return saveSiteInfoValue(language, keyword, value, appl.getSettings(), null, cachedDomain); } public boolean saveSiteInfo(String language, String[] keywords, String[] values) { if (language == null || keywords == null || values == null) { return false; } if (keywords.length != values.length) { return false; } IWMainApplication application = ContentUtil.getBundle().getApplication(); IWMainApplicationSettings settings = application.getSettings(); language = CoreConstants.DOT + language; ICDomain domain = null; ICDomain cachedDomain = application.getIWApplicationContext().getDomain(); for (int i = 0; i < keywords.length; i++) { saveSiteInfoValue(language, keywords[i], values[i], settings, domain, cachedDomain); } getThemesEngine().updateSiteTree(false); return true; } public List <String> createPage(List<TreeNodeStructure> struct, Boolean isTopLevelPage, String numberInLevel, List<String> followingNodes) { List <String> newIds = new ArrayList<String>(); if (struct == null || numberInLevel == null) { return newIds; } if (struct.size() == 0) { return newIds; } struct.get(0).setTreeOrder(numberInLevel); struct = getOrderInLevel(struct); IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return newIds; } BuilderService builder = getBuilderService(); ICDomain domain = getThemesHelper().getThemesService().getDomain(); int pageID = -1; int domainID = -1; boolean isRootPage = false; if (domain != null) { domainID = domain.getID(); } String uri = null; String pageType = builder.getPageKey(); String format = builder.getIBXMLFormat(); String pageKey = null; List<String> createdPages = new ArrayList<String>(); TreeNodeStructure node = null; for (int i = 0; i < struct.size(); i++) { node = struct.get(i); if (domain != null && node.getParentId() == null) { if (domain.getStartPage() == null) { uri = ContentConstants.SLASH; isRootPage = true; } } pageID = createPage(node.getParentId(), node.getNodeName(), pageType, null, uri, node.getPageType(), domainID, format, null, node.getTreeOrder()); if (pageID < 0) { // Error break; } pageKey = String.valueOf(pageID); createdPages.add(pageKey); if (domain != null) { if ((domain.getStartPage() == null) && (isTopLevelPage)) { // Marking page as top level page domain.setIBPage(getThemesHelper().getThemesService().getICPage(pageID)); domain.store(); } } if (isRootPage) { // Creating root page and root template createRootPage(pageID, domain, builder, domainID, format); createRootTemplate(domain, builder, domainID, format); initializeCachedDomain(ThemesConstants.DEFAULT_DOMAIN_NAME, domain); IWWelcomeFilter.unload(); } uri = null; isRootPage = false; preparePage(node.getTemplateFile(), node.getPageType(), pageID, pageKey, false); for (int j = i; j < struct.size(); j++) { if (struct.get(j).getParentId() != null) { if ((struct.get(j).getParentId()).equals(node.getNodeId())) { struct.get(j).setParentId(pageKey); } } } newIds.add(pageKey); } // Clearing cache builder.clearAllCachedPages(); // Setting template id for new page(s) String lastUsedTemplate = getThemesHelper().getLastUsedTheme(); if (lastUsedTemplate != null && !CoreConstants.EMPTY.equals(lastUsedTemplate)) { String createdPageKey = null; Theme theme = getThemesHelper().getThemeByTemplateKey(lastUsedTemplate); for (int i = 0; i < createdPages.size(); i++) { createdPageKey = createdPages.get(i); getThemesEngine().setLastUsedTemplate(createdPageKey, lastUsedTemplate); addExtraRegionsToPage(createdPageKey, theme); } } // Creating new tree order changeNodesOrderInLevel(followingNodes, -1, null); getThemesEngine().updateSiteTree(false); return newIds; } private boolean addExtraRegionsToPage(String pageKey, Theme theme) { if (pageKey == null || theme == null) { return false; } List<AdvancedProperty> extraRegions = theme.getExtraRegions(); if (extraRegions == null || extraRegions.size() == 0) { return true; } BuilderService service = getBuilderService(); for (int i = 0; i < extraRegions.size(); i++) { if (!getThemesEngine().addExtraRegionToPage(pageKey, extraRegions.get(i), service)) { return false; } } return true; } private int createPage(String parentId, String name, String type, String templateId, String pageUri, String subType, int domainId, String format, String sourceMarkup) { return createPage(parentId, name, type, templateId, pageUri, subType, domainId, format, sourceMarkup, null); } private boolean preparePage(String templateFile, String pageType, int pageID, String realID, boolean clearCache) { if (templateFile == null || pageType == null || pageID < 0 || realID == null) { return false; } if (ThemesConstants.EMPTY.equals(templateFile)) { return false; } List<String> articlesPaths = getThemesHelper().createArticle(templateFile, pageID); String uriToPage = getThemesHelper().loadPageToSlide(pageType, templateFile, articlesPaths, pageID); if (uriToPage == null) { return false; } return getThemesHelper().getThemesService().updatePageWebDav(pageID, uriToPage, clearCache); } private int createPage(String parentId, String name, String type, String templateId, String pageUri, String subType, int domainId, String format, String sourceMarkup, String treeOrder) { int id = -1; if (pageUri != null) { if (pageUri.equals(ThemesConstants.EMPTY)) { pageUri = null; } } try { id = getThemesHelper().getThemesService().createIBPage(parentId, name, type, templateId, pageUri, subType, domainId, format, sourceMarkup, treeOrder); } catch (RemoteException e) { e.printStackTrace(); return -1; } return id; } public boolean deletePage(String pageId, boolean deleteChildren) { return deletePageAndDecrease(pageId, deleteChildren, null); } public boolean deletePageAndDecrease(String pageId, boolean deleteChildren, List<String> followingNodes) { if (pageId == null) { return false; } try { changeNodesOrderInLevel(followingNodes, -1, null); getThemesHelper().getThemesService().deleteIBPage(pageId, deleteChildren, true); } catch (RemoteException e) { e.printStackTrace(); return false; } getThemesEngine().updateSiteTree(false); return true; } private boolean isPageDeleted(String pageID) { if (pageID == null) { return true; } ICPage page = getThemesHelper().getThemesService().getICPage(pageID); if (page == null) { return true; } return page.getDeleted(); } public String getPageIdByUri(String uri) { if (uri == null) { return null; } try { return getBuilderService().getPageKeyByURI(uri); } catch(Exception e) { } return null; } public String getPageId() { String id = getThemesHelper().getLastVisitedPage(); if (id != null) { if (!ThemesConstants.MINUS_ONE.equals(id)) { if (isPageDeleted(id)) { return String.valueOf(getRootPageId()); } return id; } } id = String.valueOf(getRootPageId()); if (ThemesConstants.MINUS_ONE.equals(id)) { return ThemesConstants.MINUS_ONE; } if (isPageDeleted(id)) { return ThemesConstants.MINUS_ONE; } getThemesHelper().setLastVisitedPage(id); return id; } public boolean setPageId(String id) { if (id == null) { return false; } getThemesHelper().setLastVisitedPage(id); return true; } public boolean movePage(int newParentId, int nodeId, int numberInLevel, List<String> nodesToIncrease, List<String> nodesToDecrease) { IWContext iwc = getThemesEngine().getContextAndCheckRights(); boolean result = false; if (iwc == null) { return false; } BuilderService service = getBuilderService(); ICPage page = getThemesHelper().getThemesService().getICPage(nodeId); page.setTreeOrder(numberInLevel); page.store(); service.setTreeOrder(nodeId, numberInLevel); if (nodesToIncrease != null) { changeNodesOrderInLevel(nodesToIncrease, 1, service); } if (nodesToDecrease != null) { changeNodesOrderInLevel(nodesToDecrease, -1, service); } if (newParentId < 0) { result = service.movePageToTopLevel(nodeId, iwc); } else { result = service.movePage(newParentId, nodeId, iwc.getDomain()); } if (result) { getThemesEngine().updateSiteTree(false); } return result; } public String getPathToImageFolder(){ return getPathToImagesFolder(); } public boolean isStartPage(String pageKey) { if (pageKey == null) { pageKey = getThemesHelper().getLastVisitedPage(); } if (pageKey == null) { return true; // Returning true to disable a button } int id = -1; try { id = Integer.valueOf(pageKey); } catch (NumberFormatException e) { e.printStackTrace(); return true; // Returning true to disable a button } if (id < 0) { return true; // Returning true to disable a button } if (id == getRootPageId()) { return true; } return false; } public boolean setAsStartPage(String pageKey) { if (pageKey == null) { return false; } int newRoot = -1; try { newRoot = Integer.valueOf(pageKey).intValue(); } catch (NumberFormatException e) { e.printStackTrace(); return false; } if (newRoot < 0) { return false; } int currentRoot = getRootPageId(); if (currentRoot == newRoot) { return false; } BuilderService builder = getBuilderService(); IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } ICPage newRootPage = getThemesHelper().getThemesService().getICPage(newRoot); if (newRootPage == null) { return false; } // Setting new tree order manageNewSiteTreeOrder(iwc, builder, newRootPage, newRoot); // Setting new page root for ICDomain ICDomain domain = iwc.getDomain(); if (domain != null) { // Setting new start page in ICDomain domain.setIBPage(newRootPage); domain.store(); } // Changing uri to new start page newRootPage.setDefaultPageURI(ContentConstants.SLASH); // New root page now is also top level page builder.createTopLevelPageFromExistingPage(newRoot, domain, iwc); // Setting new tree order newRootPage.setTreeOrder(1); newRootPage.store(); // Changing old root page's properties ICPage rootPage = getThemesHelper().getThemesService().getICPage(currentRoot); if (rootPage == null) { return false; } // Changing page uri from "/" to some other changePageUri(rootPage.getPageKey(), rootPage.getName().toLowerCase(), false); // Old root page now is a simple top level page builder.createTopLevelPageFromExistingPage(currentRoot, domain, iwc); TreeableEntity parent = newRootPage.getParentEntity(); if (parent instanceof ICPage) { ICPage parentPage = (ICPage) parent; try { parentPage.removeChild(newRootPage); // Removing new root as child from his old parent node } catch (SQLException e) { e.printStackTrace(); } } builder.clearAllCaches(); getThemesEngine().updateSiteTree(true, false); return true; } private int getRootPageId() { int id = 1; try { id = getThemesHelper().getThemesService().getBuilderService().getRootPageId(); } catch (Exception e) { e.printStackTrace(); return -1; } return id; } private boolean createRootPage(int pageID, ICDomain domain, BuilderService builder, int domainID, String format) { if (domain.getStartPage() != null) { return true; } if (domain.getDomainName() == null) { domain.setDomainName(ThemesConstants.DEFAULT_DOMAIN_NAME); domain.store(); } builder.unlockRegion(String.valueOf(pageID), ThemesConstants.MINUS_ONE, null); domain.setIBPage(getThemesHelper().getThemesService().getICPage(pageID)); domain.store(); return true; } public String createRootTemplate(ICDomain domain, BuilderService builder, int domainID, String format) { ICPage startTemplate = domain.getStartTemplate(); if (startTemplate != null && !startTemplate.getDeleted()) { return startTemplate.getId(); } int templateId = createPage(null, "Template", builder.getTemplateKey(), null, null, null, domainID, format, null); String templateKey = String.valueOf(templateId); builder.unlockRegion(templateKey, ThemesConstants.MINUS_ONE, null); domain.setStartTemplate(getThemesHelper().getThemesService().getICPage(templateId)); domain.store(); createArticlePreviewTemplate(domainID, builder, format, templateId); return templateKey; } private boolean createArticlePreviewTemplate(int domainID, BuilderService builder, String format, int id) { if (builder == null) { return false; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); String articleTemplateFile = "/idegaweb/bundles/com.idega.block.article.bundle/resources/pages/article_viewer_template.xml"; if (id < 0) { id = getArticleViewerTemplateId(builder, iwc); } if (id == -1) { id = createPage(null, ARTICLE_VIEWER_NAME, builder.getTemplateKey(), null, ContentConstants.ARTICLE_VIEWER_URI, ARTICLE_VIEWER_SUBTYPE, domainID, format, null); } if (id < 0) { return false; } String pageKey = String.valueOf(id); boolean result = preparePage(articleTemplateFile, ARTICLE_VIEWER_SUBTYPE, id, pageKey, true); getThemesEngine().setLastUsedTemplate(pageKey); if (iwc == null) { return result; } iwc.getApplicationSettings().setProperty(ThemesEngineBean.ARTICLE_VIEWER_TEMPLATE_KEY, pageKey); return result; } private int getArticleViewerTemplateId(BuilderService builder, IWContext iwc) { if (builder == null || iwc == null) { return -1; } @SuppressWarnings("rawtypes") Collection templates = builder.getTopLevelTemplates(iwc); if (templates == null) { return -1; } if (templates.size() == 0) { return -1; } Object o = null; ICTreeNode treeNode = null; ICPage page = null; int id = -1; for (@SuppressWarnings("rawtypes") Iterator it = templates.iterator(); it.hasNext();) { o = it.next(); if (o instanceof ICTreeNode) { treeNode = (ICTreeNode) o; if (ARTICLE_VIEWER_NAME.equals(treeNode.getNodeName())) { try { id = Integer.valueOf(treeNode.getId()); } catch (NumberFormatException e) { e.printStackTrace(); return -1; } page = getThemesHelper().getThemesService().getICPage(id); if (page != null) { if (ARTICLE_VIEWER_SUBTYPE.equals(page.getSubType())) { return id; } } } } } return -1; } public boolean initializeCachedDomain(String domainName, ICDomain domain) { ICDomain cachedDomain = IWMainApplication.getDefaultIWMainApplication().getIWApplicationContext().getDomain(); if (cachedDomain.getDomainName() == null) { cachedDomain.setDomainName(domainName); } cachedDomain.setIBPage(domain.getStartPage()); cachedDomain.setStartTemplate(domain.getStartTemplate()); if (cachedDomain instanceof CachedDomain) { CachedDomain ccachedDomain = (CachedDomain)cachedDomain; ccachedDomain.setStartTemplateID(domain.getStartTemplateID()); ccachedDomain.setStartPage(domain.getStartPage()); ccachedDomain.setStartPageID(domain.getStartPageID()); } return true; } private boolean changeNodesOrderInLevel(List<String> nodes, int orderChange, BuilderService service) { if (nodes == null || nodes.isEmpty()) { return false; } if (service == null) { service = getThemesHelper().getThemesService().getBuilderService(); } if (service == null) { return false; } int id = -1; ICPage page = null; for (String nodeId: nodes) { id = -1; page = null; try { id = Integer.valueOf(nodeId); } catch (NumberFormatException e) { e.printStackTrace(); } catch (NullPointerException e) { e.printStackTrace(); } if (id != -1) { page = getThemesHelper().getThemesService().getICPage(nodeId); if (page != null) { page.setTreeOrder(page.getTreeOrder() + orderChange); service.changeTreeOrder(id, orderChange); page.store(); } } } return true; } private List <TreeNodeStructure> getOrderInLevel(List <TreeNodeStructure> struct){ Map<String, Integer> children = new HashMap<String, Integer>(); String ONE = "1"; String parentId = null; Integer number = null; for (int i = 0; i < struct.size(); i++) { if (struct.get(i).getTreeOrder() == null) { parentId = struct.get(i).getParentId(); if (children.containsKey(parentId)) { number = (children.get(parentId)) + 1; children.put(parentId, number); struct.get(i).setTreeOrder(String.valueOf(number)); } else { children.put(parentId, 1); struct.get(i).setTreeOrder(ONE); } } } return struct; } private boolean manageNewSiteTreeOrder(IWContext iwc, BuilderService builder, ICPage newRootPage, int newRoot) { if (iwc == null || builder == null || newRootPage == null || newRoot == -1) { return false; } @SuppressWarnings("unchecked") Collection<ICTreeNode> topLevelPages = builder.getTopLevelPages(iwc); if (topLevelPages == null) { return false; } int nodeOrder = 0; int newRootOrder = 0; ICTreeNode element = null; ICPage page = null; ICPage newPage = null; if (newRootPage.getParentNode() == null) { // Top level page List<String> increaseLevelOnTop = new ArrayList<String>(); for (Iterator<ICTreeNode> iter = topLevelPages.iterator(); iter.hasNext();) { element = iter.next(); page = getThemesHelper().getThemesService().getICPage(element.getId()); newPage = getThemesHelper().getThemesService().getICPage(newRoot); if (page != null && newPage != null) { nodeOrder = page.getTreeOrder(); newRootOrder = newPage.getTreeOrder(); if (nodeOrder < newRootOrder) { increaseLevelOnTop.add(element.getId()); } } } changeNodesOrderInLevel(increaseLevelOnTop, -1, builder); } else { // Not top level page for (Iterator<ICTreeNode> iter = topLevelPages.iterator(); iter.hasNext();) { element = iter.next(); page = getThemesHelper().getThemesService().getICPage(element.getId()); if (page != null) { page.setTreeOrder(page.getTreeOrder()+1); page.store(); } } List<String> decreaseLevelOnTop = new ArrayList<String>(); @SuppressWarnings("unchecked") Collection<ICTreeNode> siblings = newRootPage.getParentNode().getChildren(); if (siblings == null) { return false; } for (Iterator<ICTreeNode> iter = siblings.iterator(); iter.hasNext();) { element = iter.next(); page = getThemesHelper().getThemesService().getICPage(element.getId()); newPage = getThemesHelper().getThemesService().getICPage(newRoot); if (page != null && newPage != null) { nodeOrder = page.getTreeOrder(); newRootOrder = newPage.getTreeOrder(); if (nodeOrder > newRootOrder) { decreaseLevelOnTop.add(element.getId()); } } } changeNodesOrderInLevel(decreaseLevelOnTop, -1, builder); } return true; } private List<String> getLocalizedText(IWContext iwc) { List<String> texts = new ArrayList<String>(); IWResourceBundle iwrb = null; try { iwrb = ContentUtil.getBundle().getResourceBundle(iwc); } catch (Exception e) { e.printStackTrace(); } if (iwrb == null) { return texts; } try { texts.add(iwrb.getLocalizedString("uploading_theme", "Uploading...")); // 0 texts.add(iwrb.getLocalizedString("changing_theme", "Changing...")); // 1 texts.add(iwrb.getLocalizedString("saving", "Saving...")); // 2 texts.add(iwrb.getLocalizedString("generating_preview", "Generating preview...")); // 3 texts.add(iwrb.getLocalizedString("restoring_theme", "Restoring...")); // 4 texts.add(iwrb.getLocalizedString("hide_themes", "Hide Themes")); // 5 texts.add(iwrb.getLocalizedString("show_themes", "Show Themes")); // 6 texts.add(iwrb.getLocalizedString("style_for_current_page", "Select style for current page")); // 7 texts.add(iwrb.getLocalizedString("style_for_site", "Select style for all pages")); // 8 texts.add(iwrb.getLocalizedString("applying_style", "Applying style...")); // 9 texts.add(iwrb.getLocalizedString("close", "Close")); // 10 texts.add(iwrb.getLocalizedString("start_page_text", "Start Page")); // 11 texts.add(iwrb.getLocalizedString("make_start_page", "Start Page")); // 12 texts.add(iwrb.getLocalizedString("changing_structure", "Changing structure...")); // 13 texts.add(iwrb.getLocalizedString("new_page", "New Page")); // 14 texts.add(iwrb.getLocalizedString("moving", "Moving...")); // 15 texts.add(iwrb.getLocalizedString("are_you_sure", "Are you sure?")); // 16 texts.add(iwrb.getLocalizedString("deleting", "Deleting...")); // 17 texts.add(iwrb.getLocalizedString("page", "Page")); // 18 texts.add(iwrb.getLocalizedString("site", "Site")); // 19 texts.add(iwrb.getLocalizedString("drop_templates_here", "Drop templates here")); // 20 texts.add(iwrb.getLocalizedString("no_page_exist", "No page exist")); // 21 texts.add(iwrb.getLocalizedString("loading", "Loading...")); // 22 texts.add(iwrb.getLocalizedString("make_this_page_start_page", "Make This Page As Start Page"));// 23 texts.add(iwrb.getLocalizedString("reloading", "Reloading...")); // 24 texts.add(iwrb.getLocalizedString("show_modules", "Show Modules")); // 25 texts.add(iwrb.getLocalizedString("hide_modules", "Hide Modules")); // 26 texts.add(iwrb.getLocalizedString("redirecting", "Redirecting...")); // 27 texts.add(iwrb.getLocalizedString("creating", "Creating...")); // 28 texts.add(iwrb.getLocalizedString("new_pages", "New Pages")); // 29 texts.add(iwrb.getLocalizedString("preparing", "Preparing...")); // 30 texts.add(iwrb.getLocalizedString("style_for_page_and_children", "Select style for current page and all children"));// 31 texts.add(iwrb.getLocalizedString("choose_style_for_page_and_children", "Page*")); // 32 texts.add(iwrb.getLocalizedString("select_template_first", "Select template first!")); // 33 texts.add(iwrb.getLocalizedString("are_you_sure_you_want_apply_this_template", "Are you sure you want to apply this template?")); // 34 texts.add(iwrb.getLocalizedString("insufficient_rights_for_this_action", "Sorry, you have insufficient rights for this action!")); // 35 texts.add(iwrb.getLocalizedString("theme_can_not_be_deleted", "Sorry, selected theme can not be deleted.")); // 36 texts.add(iwrb.getLocalizedString("error_in_lucid", "Sorry, error occurred... Reloading page might help to avoid it. Do you want to reload page?")); // 37 } catch (Exception e) { e.printStackTrace(); } return texts; } private boolean startBuilderApplication(IWContext iwc) { // IWContext iwc = getThemesEngine().getContextAndCheckRights(); // if (iwc == null) { // return false; // } BuilderService builder = getBuilderService(); builder.startBuilderSession(iwc); return true; } public boolean canUserActAsBuilderUser() { IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } if (iwc.isSuperAdmin()) { return true; } ICPage page = getThemesHelper().getThemesService().getICPage(iwc.getCurrentIBPageID()); if (page == null) { return false; } if (page.isPublished() && !iwc.hasRole(StandardRoles.ROLE_KEY_EDITOR)) { return false; } return iwc.hasRole(StandardRoles.ROLE_KEY_EDITOR) || iwc.hasRole(StandardRoles.ROLE_KEY_AUTHOR); } public String getPageUri(String pageKey) { if (pageKey == null || ThemesConstants.MINUS_ONE.equals(pageKey)) { return null; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return null; } String uri = null; BuilderService builderService = getBuilderService(); try { uri = builderService.getPageURI(iwc, pageKey, true); if (uri != null) { builderService.setCurrentPageId(iwc, String.valueOf(pageKey)); } } catch (Exception e) { e.printStackTrace(); return null; } return uri; } public boolean changePageName(int id, String newName) { IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } if (changePageName(id, newName, iwc)) { getThemesEngine().updateSiteTree(false); return true; } return false; } private boolean changePageName(int id, String newName, IWContext iwc) { if (id < 0 || newName == null) { return false; } BuilderService builder = getBuilderService(); if (builder.changePageName(id, newName, iwc)) { builder.clearAllCaches(); return true; } return false; } @SuppressWarnings("unchecked") public boolean deleteArticlesFromDeletedPages(String pageKey) { if (pageKey == null) { return false; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } Object o = iwc.getSessionAttribute(ContentConstants.DELETED_PAGE_IN_LUCID_PROPERTIES_FOR_ARTICLE); if (o instanceof List) { @SuppressWarnings("rawtypes") List ids = (List) o; iwc.removeSessionAttribute(ContentConstants.DELETED_PAGE_IN_LUCID_PROPERTIES_FOR_ARTICLE); return deleteArticlesInPagesBeingDeleted(ids, getBuilderService()); } return false; } private boolean deleteArticlesInPagesBeingDeleted(List<String> ids, BuilderService builder) { if (ids == null || builder == null) { return false; } for (int i = 0; i < ids.size(); i++) { deleteArticlesInThisPage(ids.get(i), builder); } return true; } private boolean deleteArticlesInThisPage(String pageKey, BuilderService builder) { if (pageKey == null) { return false; } if (builder == null) { return false; } Class<?> articleClass = CoreConstants.getArticleItemViewerClass(); if (articleClass == null) { return false; } List<String> ids = builder.getModuleId(pageKey, articleClass.getName()); if (ids == null) { return true; } List<String> paths = new ArrayList<String>(); String path = null; for (int i = 0; i < ids.size(); i++) { path = builder.getProperty(pageKey, ids.get(i), CoreConstants.ARTICLE_RESOURCE_PATH_PROPERTY_NAME); if (path != null) { paths.add(path); } } if (paths.size() == 0) { return true; } ContentItemChecker checker = ELUtil.getInstance().getBean(ContentItemChecker.class); if (checker == null) { return false; } return checker.deleteDummyArticles(paths); } public boolean deleteArticle(String resourcePath) { if (resourcePath == null) { return false; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } ContentItemChecker checker = ELUtil.getInstance().getBean(ContentItemChecker.class); if (checker == null) { return false; } return checker.deleteContentItem(resourcePath, iwc.getCurrentLocale()); } public Document getRenderedPageInfo(String pageKey, String id, String styleClass) { PageInfo pageInfo = new PageInfo(); pageInfo.setPageKey(pageKey); pageInfo.setStyleClass(styleClass); pageInfo.setId(id); return getThemesHelper().getThemesService().getBuilderService().getRenderedComponent(getThemesEngine().getContextAndCheckRights(), pageInfo, false); } public Document getReRenderedSiteInfo(String id, String styleClass) { SiteInfo siteInfo = new SiteInfo(); siteInfo.setId(id); siteInfo.setStyleClass(styleClass); return getThemesHelper().getThemesService().getBuilderService().getRenderedComponent(getThemesEngine().getContextAndCheckRights(), siteInfo, false); } public List<PageAccessibilityProperty> getPageAccessibilityProperties(String pageKey) { if (pageKey == null) { return null; } ICPage page = null; try { page = getThemesHelper().getThemesService().getICPage(pageKey); } catch(Exception e) { e.printStackTrace(); } if (page == null) { return null; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return null; } IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(ContentConstants.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc); List<PageAccessibilityProperty> properties = new ArrayList<PageAccessibilityProperty>(); boolean published = page.isPublished(); String localization = published ? iwrb.getLocalizedString("unpublish_page", "Unpublish page") : iwrb.getLocalizedString("publish_page", "Publish page"); PageAccessibilityProperty property = new PageAccessibilityProperty(String.valueOf(!published), localization); property.setCode(ContentConstants.PUBLISH_PAGE_IN_LUCID_CODE); property.setColumnName(ICPageBMPBean.PAGE_IS_PUBLISHED); property.setElementId("publishPageButtonCtxMn"); properties.add(property); boolean locked = page.isLocked(); localization = locked ? iwrb.getLocalizedString("unlock_page", "Unclock page") : iwrb.getLocalizedString("lock_page", "Lock page"); property = new PageAccessibilityProperty(String.valueOf(!locked), localization); property.setCode(ContentConstants.SET_PAGE_LOCKED_IN_LUCID_CODE); property.setColumnName(ICPageBMPBean.PAGE_IS_LOCKED); property.setElementId("lockPageButtonCtxMn"); properties.add(property); boolean hidden = page.isHidePageInMenu(); localization = hidden ? iwrb.getLocalizedString("show_page_in_menu", "Show page in menu") : iwrb.getLocalizedString("hide_page_in_menu", "Hide page in menu"); property = new PageAccessibilityProperty(String.valueOf(!hidden), localization); property.setCode(ContentConstants.HIDE_MENU_IN_PAGE); property.setColumnName(ICPageBMPBean.HIDE_PAGE_IN_MENU); property.setElementId("hidePageButtonCtxMn"); properties.add(property); return properties; } public boolean setPageAccessibilityProperty(String pageKey, String code, String value, String columnName) { if (pageKey == null || code == null || columnName == null) { return false; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } if (ContentConstants.SET_PAGE_LOCKED_IN_LUCID_CODE.equals(code)) { if (!setPageAvailability(iwc, pageKey, value)) { return false; } } return setValueForPage(pageKey, value, columnName); } private String getPathToImagesFolder() { if (pathToImagesFolder == null) { pathToImagesFolder = ContentUtil.getBundle().getResourcesPath() + "/images/"; } return pathToImagesFolder; } private boolean setPageTitle(String pageID, String title, String method) { if (pageID == null || title == null) { return false; } if (ThemesConstants.MINUS_ONE.equals(pageID)) { return false; } IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return false; } IWMainApplication appl = iwc.getIWMainApplication(); if (appl == null) { return false; } if (!changePageName(Integer.valueOf(pageID), title, iwc)) return false; return getThemesHelper().getThemesService().getBuilderService().setProperty(pageID, ThemesConstants.MINUS_ONE, method, new String[]{title}, appl); } @SuppressWarnings("unchecked") public String changePageUriAfterPageWasMoved(String pageKey) { if (pageKey == null) { return null; } if (ThemesConstants.MINUS_ONE.equals(pageKey)) { return null; } ICPage page = getThemesHelper().getThemesService().getICPage(pageKey); if (page == null) { return null; } String newUri = changePageUri(pageKey, page.getName(), false); if (newUri == null) { return null; } Collection<ICPage> children = page.getChildren(); if (children != null) { for (Iterator<ICPage> it = children.iterator(); it.hasNext();) { return changePageUriAfterPageWasMoved(it.next().getId()); } } return newUri; } private String setPageUri(String pageKey, String uri) { if (pageKey == null || uri == null) { return null; } if (ThemesConstants.MINUS_ONE.equals(pageKey)) { return null; } ICPage page = getThemesHelper().getThemesService().getICPage(pageKey); if (page == null) { return null; } if (uri.equals(page.getDefaultPageURI())) { return null; } ICDomain domain = null; IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { return null; } else { domain = iwc.getDomain(); } if (domain == null) { return null; } if (domain.getStartPageID() == Integer.valueOf(page.getId())) { // Is page a root page? return page.getDefaultPageURI(); } BuilderService builder = getBuilderService(); if (builder.setPageUri(page, uri, domain.getID())) { setNewLinkInArticleFile(page.getId(), CoreConstants.getArticleItemViewerClass().getName(), page.getDefaultPageURI()); return page.getDefaultPageURI(); } return null; } private boolean setPageAvailability(IWContext iwc, String pageKey, String availability) { if (pageKey == null || availability == null) { return false; } if (availability.equals(CoreConstants.EMPTY) || availability.equalsIgnoreCase("null") || availability.equals(ThemesConstants.MINUS_ONE)) { return false; } boolean restrictedAccess = Boolean.TRUE.toString().equalsIgnoreCase(availability); String usersGroupId = String.valueOf(GroupBMPBean.GROUP_ID_USERS); String everyOneGroupId = String.valueOf(GroupBMPBean.GROUP_ID_EVERYONE); try { iwc.getAccessController().setPermission(AccessController.CATEGORY_PAGE_INSTANCE, iwc, usersGroupId, pageKey, AccessController.PERMISSION_KEY_VIEW, Boolean.TRUE); iwc.getAccessController().setPermission(AccessController.CATEGORY_PAGE_INSTANCE, iwc, everyOneGroupId, pageKey, AccessController.PERMISSION_KEY_VIEW, !restrictedAccess); } catch (Exception e) { e.printStackTrace(); return false; } ICPage page = getThemesHelper().getThemesService().getICPage(pageKey); if (page == null) { return false; } @SuppressWarnings("rawtypes") Collection children = page.getChildren(); if (children != null) { Object o = null; for (@SuppressWarnings("rawtypes") Iterator it = children.iterator(); it.hasNext();) { o = it.next(); if (o instanceof ICTreeNode) { setPageAvailability(iwc, ((ICTreeNode) o).getId(), availability); } } } return true; } private boolean setValueForPage(String pageKey, String value, String columnName) { return setValueForPage(pageKey, value, columnName, true); } @SuppressWarnings("deprecation") private boolean setValueForPage(String pageKey, String value, String columnName, boolean setSameValueForChildren) { if (pageKey == null || value == null) { return false; } if (value.equals(CoreConstants.EMPTY) || value.equalsIgnoreCase("null") || value.equals(ThemesConstants.MINUS_ONE)) { return false; } ICPage page = getThemesHelper().getThemesService().getICPage(pageKey); if (page == null) { return false; } boolean pageValue = false; if (value != null) { pageValue = Boolean.TRUE.toString().equalsIgnoreCase(value); } page.setColumn(columnName, pageValue); page.store(); if (setSameValueForChildren) { @SuppressWarnings("rawtypes") Collection children = page.getChildren(); if (children != null) { Object o = null; for (@SuppressWarnings("rawtypes") Iterator it = children.iterator(); it.hasNext();) { o = it.next(); if (o instanceof ICTreeNode) { setValueForPage(((ICTreeNode) o).getId(), value, columnName, setSameValueForChildren); } } } } return true; } private BuilderService getBuilderService() { return getBuilderLogic().getBuilderService(IWMainApplication.getDefaultIWApplicationContext()); } public LucidApplicationInfo getStartInfo(Boolean fullInfo) { LucidApplicationInfo info = new LucidApplicationInfo(); IWContext iwc = getThemesEngine().getContextAndCheckRights(); if (iwc == null) { LOGGER.warning("Current user has no right for Lucid application!"); return info; } info.setLocalizedTexts(getLocalizedText(iwc)); if (fullInfo != null && fullInfo) { info.setPageId(getPageId()); info.setClassNameForSourceView(getBuilderService().getClassNameForSourceView()); info.setPathToImageFolder(getPathToImageFolder()); info.setPageUri(getPageUri(info.getPageId())); info.setContentEditor(isContentEditor()); info.setStartPage(isStartPage(info.getPageId())); info.setCanActAsBuilderUser(canUserActAsBuilderUser()); info.setPageInfoElements(getPageInfoElements()); startBuilderApplication(iwc); } else { info.setMooRainbowImage(new StringBuilder(iwc.getIWMainApplication().getBundle(Web2BusinessBean.WEB2_BUNDLE_IDENTIFIER).getResourcesPath()) .append("/javascript/moorainbow/1.1/images/").toString()); } return info; } public JQuery getJQuery() { return jQuery; } public void setJQuery(JQuery query) { jQuery = query; } public ThemesHelper getThemesHelper() { return themesHelper; } public void setThemesHelper(ThemesHelper themesHelper) { this.themesHelper = themesHelper; } public ThemesEngine getThemesEngine() { return themesEngine; } public void setThemesEngine(ThemesEngine themesEngine) { this.themesEngine = themesEngine; } }