From c65f64ce313f7bb4d58a390d33dfbe4eb1d6c276 Mon Sep 17 00:00:00 2001 From: trangvh Date: Fri, 18 Sep 2015 14:11:02 +0700 Subject: [PATCH 01/46] COMMONS-446: Remove cometd 3 dependencies in the main pom --- pom.xml | 42 ------------------------------------------ 1 file changed, 42 deletions(-) diff --git a/pom.xml b/pom.xml index c373d23a94..ce6e82a9fb 100644 --- a/pom.xml +++ b/pom.xml @@ -290,48 +290,6 @@ pom import - - - org.cometd.java - bayeux-api - 3.0.3 - - - org.cometd.java - cometd-java-common - 3.0.3 - - - org.cometd.java - cometd-java-websocket-javax-server - 3.0.3 - - - org.cometd.java - cometd-java-websocket-common-server - 3.0.3 - - - org.cometd.java - cometd-java-annotations - 3.0.3 - - - org.cometd.java - cometd-java-oort - 3.0.3 - - - org.cometd.java - cometd-java-server - 3.0.3 - - - org.cometd.javascript - cometd-javascript-jquery - 3.0.3 - war - From 4b97aa4fe07df8fada7f50fff17ac3009a7376cb Mon Sep 17 00:00:00 2001 From: Benoit de Chateauvieux Date: Mon, 31 Aug 2015 11:15:16 +0700 Subject: [PATCH 02/46] Load all available Hibernate and Datasource JNDI settings from exo.properties --- .../impl/EntityManagerService.java | 58 +++++++++++++------ .../main/resources/META-INF/persistence.xml | 2 +- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java index 8365d7ece2..201c06bb22 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java @@ -18,6 +18,9 @@ */ package org.exoplatform.commons.persistence.impl; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; import javax.persistence.EntityManager; @@ -26,8 +29,9 @@ import javax.persistence.Persistence; import org.apache.commons.lang.StringUtils; -import org.exoplatform.commons.api.notification.service.setting.UserSettingService; -import org.exoplatform.commons.utils.CommonsUtils; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.ejb.HibernatePersistence; + import org.exoplatform.commons.utils.PropertyManager; import org.exoplatform.container.ExoContainer; import org.exoplatform.container.component.ComponentRequestLifecycle; @@ -36,8 +40,7 @@ /** * This service is responsible to create a single EntityManagerFactory, with the - * persistence unit name passed from service init-params - * persistence.unit.name. + * persistence unit name exo-pu. *

* The service is also bound to use of the RequestLifecycle that there is only * one EntityManager will be created at beginning of the request lifecycle. The @@ -48,29 +51,50 @@ * @version $Revision$ */ public class EntityManagerService implements ComponentRequestLifecycle { + private static final Log LOGGER = ExoLogger.getLogger(EntityManagerService.class); + private static final String EXO_JPA_DATASOURCE_NAME = "exo.jpa.datasource_name"; + private static final String PERSISTENCE_UNIT_NAME = "exo-pu"; + private static final String EXO_PREFIX_FOR_HIB_SETTINGS = "exo.jpa."; - public static final String[] HIBERNATE_PROPERTIES = new String[] { "hibernate.show_sql", - "hibernate.format_sql", - "hibernate.use_sql_comments"}; - private final static Log LOGGER = ExoLogger.getLogger(EntityManagerService.class); - private static final String PERSISTENCE_UNIT_NAME = "exo-pu"; private static EntityManagerFactory entityManagerFactory; - private ThreadLocal instance = new ThreadLocal<>(); + + private ThreadLocal instance = new ThreadLocal<>(); public EntityManagerService() { - // Get Hibernate properties in eXo global properties final Properties properties = new Properties(); - for (String propertyName : HIBERNATE_PROPERTIES) { - String propertyValue = PropertyManager.getProperty(propertyName); + // Setting datasource JNDI name + String datasourceName = PropertyManager.getProperty(EXO_JPA_DATASOURCE_NAME); + if (StringUtils.isNotBlank(datasourceName)) { + properties.put(HibernatePersistence.NON_JTA_DATASOURCE, datasourceName); + LOGGER.info("EntityManagerFactory [{}] - Creating with datasource {}.", PERSISTENCE_UNIT_NAME, datasourceName); + } else { + LOGGER.info("EntityManagerFactory [{}] - Creating with default datasource.", PERSISTENCE_UNIT_NAME); + } + + // Get Hibernate properties in eXo global properties + for (String propertyName : getHibernateAvailableSettings()) { + String propertyValue = PropertyManager.getProperty(EXO_PREFIX_FOR_HIB_SETTINGS + propertyName); if (StringUtils.isNotBlank(propertyValue)) { properties.put(propertyName, propertyValue); - LOGGER.info("Setting [" + propertyName + "] to [" + propertyValue + "]"); + LOGGER.info("EntityManagerFactory [{}] - Setting [{}] to [{}]", PERSISTENCE_UNIT_NAME, propertyName, propertyValue); } } + entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties); - if (LOGGER.isInfoEnabled()) { - LOGGER.info("Created EntityManagerFactory instance: {}", PERSISTENCE_UNIT_NAME); + LOGGER.info("EntityManagerFactory [{}] - Created.", PERSISTENCE_UNIT_NAME); + } + + private List getHibernateAvailableSettings() { + List result = new ArrayList<>(); + for (Field field : AvailableSettings.class.getDeclaredFields()) { + try { + result.add((String) field.get(null)); + } catch (IllegalAccessException e) { + // Noting to do: we log and continue + LOGGER.error("Error while getting Hibernate available settings.", e); + } } + return result; } /** @@ -88,7 +112,7 @@ public EntityManager getEntityManager() { /** * Return a completely new instance of EntityManager. The EntityManager * instance is put in the threadLocal for further use. - * + * * @return return a completely new instance of EntityManager. */ EntityManager createEntityManager() { diff --git a/commons-component-common/src/main/resources/META-INF/persistence.xml b/commons-component-common/src/main/resources/META-INF/persistence.xml index 389f53b826..6adde08b62 100644 --- a/commons-component-common/src/main/resources/META-INF/persistence.xml +++ b/commons-component-common/src/main/resources/META-INF/persistence.xml @@ -5,6 +5,6 @@ org.hibernate.ejb.HibernatePersistence - java:/comp/env/exo-jcr_portal + java:/comp/env/exo-jpa_portal \ No newline at end of file From 492a221a5713223b97085ac008c8bc5efbfe1144 Mon Sep 17 00:00:00 2001 From: Benoit de Chateauvieux Date: Mon, 14 Sep 2015 18:39:09 +0700 Subject: [PATCH 03/46] Use a property to execute ExoEntityScanner only if PU = 'exo-pu' --- .../impl/EntityManagerService.java | 11 ++- .../persistence/impl/ExoEntityScanner.java | 69 ++++++++++--------- .../main/resources/META-INF/persistence.xml | 5 +- .../test/resources/META-INF/persistence.xml | 1 + 4 files changed, 48 insertions(+), 38 deletions(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java index 201c06bb22..4e9a9ca597 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java @@ -51,14 +51,13 @@ * @version $Revision$ */ public class EntityManagerService implements ComponentRequestLifecycle { - private static final Log LOGGER = ExoLogger.getLogger(EntityManagerService.class); - private static final String EXO_JPA_DATASOURCE_NAME = "exo.jpa.datasource_name"; - private static final String PERSISTENCE_UNIT_NAME = "exo-pu"; - private static final String EXO_PREFIX_FOR_HIB_SETTINGS = "exo.jpa."; - + public static final String PERSISTENCE_UNIT_NAME = "exo-pu"; + private static final Log LOGGER = ExoLogger.getLogger(EntityManagerService.class); + private static final String EXO_JPA_DATASOURCE_NAME = "exo.jpa.datasource_name"; + private static final String EXO_PREFIX_FOR_HIB_SETTINGS = "exo.jpa."; private static EntityManagerFactory entityManagerFactory; - private ThreadLocal instance = new ThreadLocal<>(); + private ThreadLocal instance = new ThreadLocal<>(); public EntityManagerService() { final Properties properties = new Properties(); diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ExoEntityScanner.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ExoEntityScanner.java index ae8bfc8728..f1add36dd4 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ExoEntityScanner.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ExoEntityScanner.java @@ -16,22 +16,21 @@ */ package org.exoplatform.commons.persistence.impl; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.Enumeration; - import org.exoplatform.commons.api.persistence.ExoEntityProcessor; +import org.exoplatform.services.log.ExoLogger; +import org.exoplatform.services.log.Log; import org.hibernate.cfg.Configuration; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.integrator.spi.Integrator; import org.hibernate.metamodel.source.MetadataImplementor; import org.hibernate.service.spi.SessionFactoryServiceRegistry; -import org.exoplatform.services.log.ExoLogger; -import org.exoplatform.services.log.Log; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Enumeration; /** * This integrator is called by Hibernate at run time, when JPA creates the PLF @@ -45,43 +44,51 @@ * @version $Revision$ */ public class ExoEntityScanner implements Integrator { - private final static Log LOGGER = ExoLogger.getLogger(ExoEntityScanner.class); + private static final Log LOGGER = ExoLogger.getLogger(ExoEntityScanner.class); + private static final String PU_FIELD_NAME = "persistenceUnitName"; public void integrate(Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { try { - // get all the exo-entities.idx in classpath - Enumeration urls = Thread.currentThread().getContextClassLoader().getResources(ExoEntityProcessor.ENTITIES_IDX_PATH); - while (urls.hasMoreElements()) { - InputStream stream = urls.nextElement().openStream(); - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); - String entityClassName; - while ((entityClassName = reader.readLine()) != null) { - try { - if (configuration.getClassMapping(entityClassName) == null) { - configuration.addAnnotatedClass(Class.forName(entityClassName)); + if (isExoPersistenceUnit(configuration)) { + // get all the exo-entities.idx in classpath + Enumeration urls = Thread.currentThread().getContextClassLoader().getResources(ExoEntityProcessor.ENTITIES_IDX_PATH); + while (urls.hasMoreElements()) { + InputStream stream = urls.nextElement().openStream(); + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + String entityClassName; + while ((entityClassName = reader.readLine()) != null) { + try { + if (configuration.getClassMapping(entityClassName) == null) { + configuration.addAnnotatedClass(Class.forName(entityClassName)); + } + } catch (ClassNotFoundException e) { + LOGGER.error("Error while trying to register entity [" + entityClassName + "] in Persistence Unit", e); } - } catch (ClassNotFoundException e) { - LOGGER.error("Error while trying to register entity [" + entityClassName + "] in Persistence Unit", e); + } + } finally { + try { + stream.close(); + } catch (IOException e) { + LOGGER.error("Error while closing stream", e); } } - } finally { - try { - stream.close(); - } catch (IOException e) { - LOGGER.error("Error while closing stream", e); - } - } + } } - } catch (IOException e) { + } catch (IOException | IllegalAccessException e) { LOGGER.error("Error while loading entities in PLF Persistence Unit", e); } configuration.buildMappings(); } + private boolean isExoPersistenceUnit(Configuration configuration) throws IllegalAccessException { + // this scanner is used only for exo-pu (should have a property named "persistenceUnitName" set to "exo-pu") + return EntityManagerService.PERSISTENCE_UNIT_NAME.equals(configuration.getProperty(PU_FIELD_NAME)); + } + public void integrate(MetadataImplementor metadata, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { diff --git a/commons-component-common/src/main/resources/META-INF/persistence.xml b/commons-component-common/src/main/resources/META-INF/persistence.xml index 6adde08b62..fe153db9da 100644 --- a/commons-component-common/src/main/resources/META-INF/persistence.xml +++ b/commons-component-common/src/main/resources/META-INF/persistence.xml @@ -5,6 +5,9 @@ org.hibernate.ejb.HibernatePersistence - java:/comp/env/exo-jpa_portal + java:/comp/env/exo-jpa_portal + + + \ No newline at end of file diff --git a/commons-component-common/src/test/resources/META-INF/persistence.xml b/commons-component-common/src/test/resources/META-INF/persistence.xml index 716d5ea840..c787e30f40 100644 --- a/commons-component-common/src/test/resources/META-INF/persistence.xml +++ b/commons-component-common/src/test/resources/META-INF/persistence.xml @@ -15,6 +15,7 @@ + \ No newline at end of file From c22884496cafd936a869a787d7e399bbd382acb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Delhom=C3=A9nie?= Date: Mon, 31 Aug 2015 11:40:32 +0200 Subject: [PATCH 04/46] Add DataInitializer interface and LiquibaseDataInitializer startable service to centralize the initialization of data with Liquibase --- .../api/persistence/DataInitializer.java | 10 + commons-component-common/pom.xml | 5 + .../persistence/impl/ChangeLogsPlugin.java | 37 ++++ .../impl/EntityManagerService.java | 39 ++-- .../impl/LiquibaseDataInitializer.java | 193 ++++++++++++++++++ .../resources/conf/portal/configuration.xml | 15 ++ .../impl/LiquibaseDataInitializerTest.java | 102 +++++++++ 7 files changed, 386 insertions(+), 15 deletions(-) create mode 100644 commons-api/src/main/java/org/exoplatform/commons/api/persistence/DataInitializer.java create mode 100644 commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ChangeLogsPlugin.java create mode 100644 commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java create mode 100644 commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java diff --git a/commons-api/src/main/java/org/exoplatform/commons/api/persistence/DataInitializer.java b/commons-api/src/main/java/org/exoplatform/commons/api/persistence/DataInitializer.java new file mode 100644 index 0000000000..839c787058 --- /dev/null +++ b/commons-api/src/main/java/org/exoplatform/commons/api/persistence/DataInitializer.java @@ -0,0 +1,10 @@ +package org.exoplatform.commons.api.persistence; + +/** + * Interface for data initialization + */ +public interface DataInitializer { + public void initData(); + + public void initData(String datasourceName); +} diff --git a/commons-component-common/pom.xml b/commons-component-common/pom.xml index 0f392942b3..39d4588ed6 100644 --- a/commons-component-common/pom.xml +++ b/commons-component-common/pom.xml @@ -143,6 +143,11 @@ javax.servlet-api provided + + org.liquibase + liquibase-core + 3.3.2 + junit junit diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ChangeLogsPlugin.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ChangeLogsPlugin.java new file mode 100644 index 0000000000..8b65d90675 --- /dev/null +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ChangeLogsPlugin.java @@ -0,0 +1,37 @@ +package org.exoplatform.commons.persistence.impl; + +import org.exoplatform.container.component.BaseComponentPlugin; +import org.exoplatform.container.xml.InitParams; +import org.exoplatform.container.xml.ValuesParam; + +import java.util.ArrayList; +import java.util.List; + +/** + * Changelog plugin to add Liquibase changelog path during the data initialization + */ +public class ChangeLogsPlugin extends BaseComponentPlugin { + + public static final String CHANGELOGS_PARAM_NAME = "changelogs"; + + private List changelogPaths = new ArrayList(); + + public ChangeLogsPlugin(InitParams initParams) { + if(initParams != null) { + ValuesParam changelogs = initParams.getValuesParam(CHANGELOGS_PARAM_NAME); + + if (changelogs != null) { + changelogPaths.addAll(changelogs.getValues()); + } + } + } + + public List getChangelogPaths() { + return changelogPaths; + } + + public void setChangelogPaths(List changelogPaths) { + this.changelogPaths = changelogPaths; + } + +} diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java index 4e9a9ca597..4f883c4873 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java @@ -18,25 +18,23 @@ */ package org.exoplatform.commons.persistence.impl; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.Persistence; - import org.apache.commons.lang.StringUtils; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.ejb.HibernatePersistence; - import org.exoplatform.commons.utils.PropertyManager; import org.exoplatform.container.ExoContainer; import org.exoplatform.container.component.ComponentRequestLifecycle; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.ejb.HibernatePersistence; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.Persistence; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; /** * This service is responsible to create a single EntityManagerFactory, with the @@ -59,9 +57,12 @@ public class EntityManagerService implements ComponentRequestLifecycle { private ThreadLocal instance = new ThreadLocal<>(); + private final Properties properties; + public EntityManagerService() { - final Properties properties = new Properties(); - // Setting datasource JNDI name + properties = new Properties(); + + // Setting datasource JNDI name. Get it directly from eXo global properties so it is not overridable by addons. String datasourceName = PropertyManager.getProperty(EXO_JPA_DATASOURCE_NAME); if (StringUtils.isNotBlank(datasourceName)) { properties.put(HibernatePersistence.NON_JTA_DATASOURCE, datasourceName); @@ -83,6 +84,14 @@ public EntityManagerService() { LOGGER.info("EntityManagerFactory [{}] - Created.", PERSISTENCE_UNIT_NAME); } + public String getDatasourceName() { + return (String) properties.get(HibernatePersistence.NON_JTA_DATASOURCE); + } + + public void setDatasourceName(String datasourceName) { + properties.put(HibernatePersistence.NON_JTA_DATASOURCE, datasourceName); + } + private List getHibernateAvailableSettings() { List result = new ArrayList<>(); for (Field field : AvailableSettings.class.getDeclaredFields()) { diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java new file mode 100644 index 0000000000..65491c8126 --- /dev/null +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java @@ -0,0 +1,193 @@ +package org.exoplatform.commons.persistence.impl; + +import liquibase.Liquibase; +import liquibase.database.Database; +import liquibase.database.DatabaseFactory; +import liquibase.database.jvm.JdbcConnection; +import liquibase.exception.DatabaseException; +import liquibase.exception.LiquibaseException; +import liquibase.resource.ClassLoaderResourceAccessor; +import org.exoplatform.commons.api.persistence.DataInitializer; +import org.exoplatform.container.xml.InitParams; +import org.exoplatform.container.xml.ValueParam; +import org.picocontainer.Startable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.sql.DataSource; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * Startable service to initialize all the data with Liquibase. + * Changelog files are added by external plugins. + */ +public class LiquibaseDataInitializer implements Startable, DataInitializer { + private static final Logger LOG = LoggerFactory.getLogger(LiquibaseDataInitializer.class); + + public static final String LIQUIBASE_DATASOURCE_PARAM_NAME = "liquibase.datasource"; + public static final String LIQUIBASE_CONTEXTS_PARAM_NAME = "liquibase.contexts"; + public static final String LIQUIBASE_DEFAULT_DATASOURCE_NAME = "java:/comp/env/exo-jpa_portal"; + public static final String LIQUIBASE_DEFAULT_CONTEXTS = "production"; + + private String datasourceName; + + private String liquibaseContexts; + + private List changeLogsPlugins = new ArrayList(); + + public LiquibaseDataInitializer(InitParams initParams) { + if(initParams != null) { + ValueParam liquibaseDatasourceNameParam = initParams.getValueParam(LIQUIBASE_DATASOURCE_PARAM_NAME); + if (liquibaseDatasourceNameParam != null && liquibaseDatasourceNameParam.getValue() != null) { + datasourceName = liquibaseDatasourceNameParam.getValue(); + } else { + datasourceName = LIQUIBASE_DEFAULT_DATASOURCE_NAME; + } + + ValueParam liquibaseContextsParam = initParams.getValueParam(LIQUIBASE_CONTEXTS_PARAM_NAME); + if (liquibaseContextsParam != null && liquibaseContextsParam.getValue() != null) { + liquibaseContexts = liquibaseContextsParam.getValue(); + } else { + liquibaseContexts = LIQUIBASE_DEFAULT_CONTEXTS; + } + + LOG.info("LiquibaseDataInitializer created with : datasourceName=" + datasourceName + ", contexts=" + liquibaseContexts); + } else { + datasourceName = LIQUIBASE_DEFAULT_DATASOURCE_NAME; + liquibaseContexts = LIQUIBASE_DEFAULT_CONTEXTS; + LOG.info("No InitParams found for LiquibaseDataInitializer - default values are used : datasourceName=" + + LIQUIBASE_DEFAULT_DATASOURCE_NAME + + ", contexts=" + + LIQUIBASE_DEFAULT_CONTEXTS); + } + } + + public String getDatasourceName() { + return datasourceName; + } + + public void setDatasourceName(String datasourceName) { + this.datasourceName = datasourceName; + } + + public String getContexts() { + return liquibaseContexts; + } + + public void setContexts(String liquibaseContexts) { + this.liquibaseContexts = liquibaseContexts; + } + + /** + * Add a changelogs plugin + * @param changeLogsPlugin Changelogs plugin to add + */ + public void addChangeLogsPlugin(ChangeLogsPlugin changeLogsPlugin) { + this.changeLogsPlugins.add(changeLogsPlugin); + } + + + @Override + public void start() { + initData(); + } + + @Override + public void stop() { + } + + /** + * Initialize the data with Liquibase with the default datasource. + */ + @Override + public void initData() { + initData(this.datasourceName); + } + + /** + * Initialize the data with Liquibase with the given datasource. + * Iterates over all the changelogs injected by the change logs plugins and executes them. + */ + @Override + public void initData(String datasourceName) { + if(!changeLogsPlugins.isEmpty()) { + try { + LOG.info("Starting data initialization with Liquibase with datasource " + datasourceName); + + DataSource datasource = getDatasource(datasourceName); + + if(datasource != null) { + Database database = getDatabase(datasource); + + for (ChangeLogsPlugin changeLogsPlugin : this.changeLogsPlugins) { + LOG.info("Processing changelogs of " + changeLogsPlugin.getName()); + try { + for (String changelogsPath : changeLogsPlugin.getChangelogPaths()) { + LOG.info(" * processing changelog " + changelogsPath); + applyChangeLog(database, changelogsPath); + } + } catch (LiquibaseException e) { + LOG.error("Error while processing changelogs of plugin " + changeLogsPlugin.getName() + " - Cause : " + e.getMessage(), e); + } + } + } else { + LOG.error("Data initialization aborted because the datasource " + datasourceName + " has not been found."); + } + } catch (DatabaseException e) { + LOG.error("Error while initializing liquibase database - Cause : " + e.getMessage(), e); + } catch (SQLException e) { + LOG.error("Error while getting a JDBC connection from datasource " + datasourceName + " - Cause : " + e.getMessage(), e); + } + } else { + LOG.info("No data to initialize with Liquibase"); + } + } + + /** + * Get a Liquibase Database from a Datasource + * @param datasource + * @return + * @throws DatabaseException + * @throws SQLException + */ + protected Database getDatabase(DataSource datasource) throws DatabaseException, SQLException { + return DatabaseFactory.getInstance() + .findCorrectDatabaseImplementation(new JdbcConnection(datasource.getConnection())); + } + + /** + * Apply changelog with Liquibase + * @param database + * @param changelogsPath + * @throws LiquibaseException + */ + protected void applyChangeLog(Database database, String changelogsPath) throws LiquibaseException { + Liquibase liquibase = new Liquibase(changelogsPath, new ClassLoaderResourceAccessor(), database); + liquibase.update(liquibaseContexts); + } + + /** + * Lookup for a datasource with the given name + * @param datasourceName Name of the datasource to retrieve + * @return The datasource with the given name + */ + protected DataSource getDatasource(String datasourceName) { + DataSource dataSource = null; + try { + Context initCtx = new InitialContext(); + + // Look up our data source + dataSource = (DataSource) initCtx.lookup(datasourceName); + } catch (NamingException e) { + LOG.error("Cannot find datasource " + datasourceName + " - Cause : " + e.getMessage(), e); + } + + return dataSource; + } + +} diff --git a/commons-component-common/src/main/resources/conf/portal/configuration.xml b/commons-component-common/src/main/resources/conf/portal/configuration.xml index 7cea44082a..806b02d206 100644 --- a/commons-component-common/src/main/resources/conf/portal/configuration.xml +++ b/commons-component-common/src/main/resources/conf/portal/configuration.xml @@ -61,6 +61,21 @@ + + org.exoplatform.commons.api.persistence.DataInitializer + org.exoplatform.commons.persistence.impl.LiquibaseDataInitializer + + + liquibase.datasource + java:comp/env/exo-jcr_portal + + + liquibase.contexts + production + + + + org.exoplatform.commons.chromattic.ChromatticManager diff --git a/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java b/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java new file mode 100644 index 0000000000..a1db6d7e88 --- /dev/null +++ b/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java @@ -0,0 +1,102 @@ +package org.exoplatform.commons.persistence.impl; + +import liquibase.database.Database; +import liquibase.exception.LiquibaseException; +import org.apache.commons.dbcp.BasicDataSource; +import org.exoplatform.container.xml.InitParams; +import org.exoplatform.container.xml.ValueParam; +import org.exoplatform.container.xml.ValuesParam; +import org.junit.Assert; +import org.junit.Test; +import org.mockito.Mockito; + +import javax.sql.DataSource; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * Test class for Liquibase data initialization + */ +public class LiquibaseDataInitializerTest { + + @Test + public void shouldSetDatasourceNameWhenDatasourceNameIsDefinedInConfiguration() { + InitParams initParams = new InitParams(); + ValueParam datasourceNameValueParam = new ValueParam(); + datasourceNameValueParam.setName(LiquibaseDataInitializer.LIQUIBASE_DATASOURCE_PARAM_NAME); + datasourceNameValueParam.setValue("datasource1"); + initParams.addParam(datasourceNameValueParam); + + LiquibaseDataInitializer liquibaseDataInitializer = new LiquibaseDataInitializer(initParams); + + Assert.assertEquals(liquibaseDataInitializer.getDatasourceName(), "datasource1"); + } + + @Test + public void shouldUseDefaultDatasourceNameWhenDatasourceNameIsNotDefinedInConfiguration() { + InitParams initParams = new InitParams(); + + LiquibaseDataInitializer liquibaseDataInitializer = new LiquibaseDataInitializer(initParams); + + Assert.assertEquals(liquibaseDataInitializer.getDatasourceName(), LiquibaseDataInitializer.LIQUIBASE_DEFAULT_DATASOURCE_NAME); + } + + @Test + public void shouldSetContextsWhenContextsAreDefinedInConfiguration() { + InitParams initParams = new InitParams(); + ValueParam contextsValueParam = new ValueParam(); + contextsValueParam.setName(LiquibaseDataInitializer.LIQUIBASE_CONTEXTS_PARAM_NAME); + contextsValueParam.setValue("context1"); + initParams.addParam(contextsValueParam); + + LiquibaseDataInitializer liquibaseDataInitializer = new LiquibaseDataInitializer(initParams); + + Assert.assertEquals(liquibaseDataInitializer.getContexts(), "context1"); + } + + @Test + public void shouldUseDefaultContextsWhenContextsAreNotDefinedInConfiguration() { + InitParams initParams = new InitParams(); + + LiquibaseDataInitializer liquibaseDataInitializer = new LiquibaseDataInitializer(initParams); + + Assert.assertEquals(liquibaseDataInitializer.getContexts(), LiquibaseDataInitializer.LIQUIBASE_DEFAULT_CONTEXTS); + } + + @Test + public void shouldNotCallLiquibaseWhenNoChangeLogs() throws LiquibaseException { + // Init service with default values + LiquibaseDataInitializer liquibaseDataInitializer = Mockito.spy(new LiquibaseDataInitializer(null)); + + liquibaseDataInitializer.initData(); + + Mockito.verify(liquibaseDataInitializer, Mockito.never()).applyChangeLog(Mockito.any(Database.class), Mockito.any(String.class)); + } + + @Test + public void shouldCallLiquibaseWhenChangeLogsAreAdded() throws LiquibaseException, SQLException { + // Init service with default values + LiquibaseDataInitializer liquibaseDataInitializer = Mockito.spy(new LiquibaseDataInitializer(null)); + Mockito.doNothing().when(liquibaseDataInitializer).applyChangeLog(Mockito.any(Database.class), Mockito.any(String.class)); + Mockito.doReturn(new BasicDataSource()).when(liquibaseDataInitializer).getDatasource(Mockito.any(String.class)); + Mockito.doReturn(null).when(liquibaseDataInitializer).getDatabase(Mockito.any(DataSource.class)); + + List changeLogsPaths = new ArrayList<>(3); + changeLogsPaths.add("changelog1"); + changeLogsPaths.add("changelog2"); + changeLogsPaths.add("changelog3"); + + InitParams changeLogsPluginInitParams = new InitParams(); + ValuesParam changeLogsValuesParam = new ValuesParam(); + changeLogsValuesParam.setName(ChangeLogsPlugin.CHANGELOGS_PARAM_NAME); + changeLogsValuesParam.setValues(changeLogsPaths); + changeLogsPluginInitParams.addParam(changeLogsValuesParam); + ChangeLogsPlugin changeLogsPlugin = new ChangeLogsPlugin(changeLogsPluginInitParams); + liquibaseDataInitializer.addChangeLogsPlugin(changeLogsPlugin); + + liquibaseDataInitializer.initData(); + + Mockito.verify(liquibaseDataInitializer, Mockito.times(3)).applyChangeLog(Mockito.any(Database.class), Mockito.any(String.class)); + } +} From 88637ea871580c8b9720f2a955d1445aa51b615f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Delhom=C3=A9nie?= Date: Tue, 15 Sep 2015 12:37:12 +0200 Subject: [PATCH 05/46] Define exo jpa datasource through exo.properties --- .../commons/persistence/impl/EntityManagerService.java | 2 +- .../src/main/resources/conf/portal/configuration.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java index 4f883c4873..d2e571c9e7 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/EntityManagerService.java @@ -51,7 +51,7 @@ public class EntityManagerService implements ComponentRequestLifecycle { public static final String PERSISTENCE_UNIT_NAME = "exo-pu"; private static final Log LOGGER = ExoLogger.getLogger(EntityManagerService.class); - private static final String EXO_JPA_DATASOURCE_NAME = "exo.jpa.datasource_name"; + private static final String EXO_JPA_DATASOURCE_NAME = "exo.jpa.datasource.name"; private static final String EXO_PREFIX_FOR_HIB_SETTINGS = "exo.jpa."; private static EntityManagerFactory entityManagerFactory; diff --git a/commons-component-common/src/main/resources/conf/portal/configuration.xml b/commons-component-common/src/main/resources/conf/portal/configuration.xml index 806b02d206..9d9accb23d 100644 --- a/commons-component-common/src/main/resources/conf/portal/configuration.xml +++ b/commons-component-common/src/main/resources/conf/portal/configuration.xml @@ -67,7 +67,7 @@ liquibase.datasource - java:comp/env/exo-jcr_portal + ${exo.jpa.datasource.name} liquibase.contexts From 909372e245a4dd0a1a058beeacb438b22abd15a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Delhom=C3=A9nie?= Date: Tue, 15 Sep 2015 14:05:01 +0200 Subject: [PATCH 06/46] Use default value set in configuration instead of defining it in the service --- .../impl/LiquibaseDataInitializer.java | 36 +++++++++---------- .../resources/conf/portal/configuration.xml | 2 +- .../impl/LiquibaseDataInitializerTest.java | 32 ++++++++++++----- 3 files changed, 41 insertions(+), 29 deletions(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java index 65491c8126..4216dc3248 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java @@ -31,7 +31,6 @@ public class LiquibaseDataInitializer implements Startable, DataInitializer { public static final String LIQUIBASE_DATASOURCE_PARAM_NAME = "liquibase.datasource"; public static final String LIQUIBASE_CONTEXTS_PARAM_NAME = "liquibase.contexts"; - public static final String LIQUIBASE_DEFAULT_DATASOURCE_NAME = "java:/comp/env/exo-jpa_portal"; public static final String LIQUIBASE_DEFAULT_CONTEXTS = "production"; private String datasourceName; @@ -41,30 +40,27 @@ public class LiquibaseDataInitializer implements Startable, DataInitializer { private List changeLogsPlugins = new ArrayList(); public LiquibaseDataInitializer(InitParams initParams) { - if(initParams != null) { - ValueParam liquibaseDatasourceNameParam = initParams.getValueParam(LIQUIBASE_DATASOURCE_PARAM_NAME); - if (liquibaseDatasourceNameParam != null && liquibaseDatasourceNameParam.getValue() != null) { - datasourceName = liquibaseDatasourceNameParam.getValue(); - } else { - datasourceName = LIQUIBASE_DEFAULT_DATASOURCE_NAME; - } + if(initParams == null) { + throw new IllegalArgumentException("No InitParams found for LiquibaseDataInitializer service. The datasource name (" + + LIQUIBASE_DATASOURCE_PARAM_NAME + ") should be defined at least."); + } - ValueParam liquibaseContextsParam = initParams.getValueParam(LIQUIBASE_CONTEXTS_PARAM_NAME); - if (liquibaseContextsParam != null && liquibaseContextsParam.getValue() != null) { - liquibaseContexts = liquibaseContextsParam.getValue(); - } else { - liquibaseContexts = LIQUIBASE_DEFAULT_CONTEXTS; - } + ValueParam liquibaseDatasourceNameParam = initParams.getValueParam(LIQUIBASE_DATASOURCE_PARAM_NAME); + if (liquibaseDatasourceNameParam != null && liquibaseDatasourceNameParam.getValue() != null) { + datasourceName = liquibaseDatasourceNameParam.getValue(); + } else { + throw new IllegalArgumentException("Datasource name for LiquibaseDataInitializer must be defined in the init params (" + + LIQUIBASE_DATASOURCE_PARAM_NAME + ")"); + } - LOG.info("LiquibaseDataInitializer created with : datasourceName=" + datasourceName + ", contexts=" + liquibaseContexts); + ValueParam liquibaseContextsParam = initParams.getValueParam(LIQUIBASE_CONTEXTS_PARAM_NAME); + if (liquibaseContextsParam != null && liquibaseContextsParam.getValue() != null) { + liquibaseContexts = liquibaseContextsParam.getValue(); } else { - datasourceName = LIQUIBASE_DEFAULT_DATASOURCE_NAME; liquibaseContexts = LIQUIBASE_DEFAULT_CONTEXTS; - LOG.info("No InitParams found for LiquibaseDataInitializer - default values are used : datasourceName=" - + LIQUIBASE_DEFAULT_DATASOURCE_NAME - + ", contexts=" - + LIQUIBASE_DEFAULT_CONTEXTS); } + + LOG.info("LiquibaseDataInitializer created with : datasourceName=" + datasourceName + ", contexts=" + liquibaseContexts); } public String getDatasourceName() { diff --git a/commons-component-common/src/main/resources/conf/portal/configuration.xml b/commons-component-common/src/main/resources/conf/portal/configuration.xml index 9d9accb23d..3d68214d69 100644 --- a/commons-component-common/src/main/resources/conf/portal/configuration.xml +++ b/commons-component-common/src/main/resources/conf/portal/configuration.xml @@ -67,7 +67,7 @@ liquibase.datasource - ${exo.jpa.datasource.name} + ${exo.jpa.datasource.name:java:/comp/env/exo-jpa_portal} liquibase.contexts diff --git a/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java b/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java index a1db6d7e88..97c991eb18 100644 --- a/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java +++ b/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java @@ -33,18 +33,20 @@ public void shouldSetDatasourceNameWhenDatasourceNameIsDefinedInConfiguration() Assert.assertEquals(liquibaseDataInitializer.getDatasourceName(), "datasource1"); } - @Test - public void shouldUseDefaultDatasourceNameWhenDatasourceNameIsNotDefinedInConfiguration() { + @Test(expected = IllegalArgumentException.class) + public void shouldThrowExceptionWhenDatasourceNameIsNotDefinedInConfiguration() { InitParams initParams = new InitParams(); LiquibaseDataInitializer liquibaseDataInitializer = new LiquibaseDataInitializer(initParams); - - Assert.assertEquals(liquibaseDataInitializer.getDatasourceName(), LiquibaseDataInitializer.LIQUIBASE_DEFAULT_DATASOURCE_NAME); } @Test public void shouldSetContextsWhenContextsAreDefinedInConfiguration() { InitParams initParams = new InitParams(); + ValueParam datasourceNameValueParam = new ValueParam(); + datasourceNameValueParam.setName(LiquibaseDataInitializer.LIQUIBASE_DATASOURCE_PARAM_NAME); + datasourceNameValueParam.setValue("datasource1"); + initParams.addParam(datasourceNameValueParam); ValueParam contextsValueParam = new ValueParam(); contextsValueParam.setName(LiquibaseDataInitializer.LIQUIBASE_CONTEXTS_PARAM_NAME); contextsValueParam.setValue("context1"); @@ -58,6 +60,10 @@ public void shouldSetContextsWhenContextsAreDefinedInConfiguration() { @Test public void shouldUseDefaultContextsWhenContextsAreNotDefinedInConfiguration() { InitParams initParams = new InitParams(); + ValueParam datasourceNameValueParam = new ValueParam(); + datasourceNameValueParam.setName(LiquibaseDataInitializer.LIQUIBASE_DATASOURCE_PARAM_NAME); + datasourceNameValueParam.setValue("datasource1"); + initParams.addParam(datasourceNameValueParam); LiquibaseDataInitializer liquibaseDataInitializer = new LiquibaseDataInitializer(initParams); @@ -66,8 +72,13 @@ public void shouldUseDefaultContextsWhenContextsAreNotDefinedInConfiguration() { @Test public void shouldNotCallLiquibaseWhenNoChangeLogs() throws LiquibaseException { - // Init service with default values - LiquibaseDataInitializer liquibaseDataInitializer = Mockito.spy(new LiquibaseDataInitializer(null)); + InitParams initParams = new InitParams(); + ValueParam datasourceNameValueParam = new ValueParam(); + datasourceNameValueParam.setName(LiquibaseDataInitializer.LIQUIBASE_DATASOURCE_PARAM_NAME); + datasourceNameValueParam.setValue("datasource1"); + initParams.addParam(datasourceNameValueParam); + + LiquibaseDataInitializer liquibaseDataInitializer = Mockito.spy(new LiquibaseDataInitializer(initParams)); liquibaseDataInitializer.initData(); @@ -76,8 +87,13 @@ public void shouldNotCallLiquibaseWhenNoChangeLogs() throws LiquibaseException { @Test public void shouldCallLiquibaseWhenChangeLogsAreAdded() throws LiquibaseException, SQLException { - // Init service with default values - LiquibaseDataInitializer liquibaseDataInitializer = Mockito.spy(new LiquibaseDataInitializer(null)); + InitParams initParams = new InitParams(); + ValueParam datasourceNameValueParam = new ValueParam(); + datasourceNameValueParam.setName(LiquibaseDataInitializer.LIQUIBASE_DATASOURCE_PARAM_NAME); + datasourceNameValueParam.setValue("datasource1"); + initParams.addParam(datasourceNameValueParam); + + LiquibaseDataInitializer liquibaseDataInitializer = Mockito.spy(new LiquibaseDataInitializer(initParams)); Mockito.doNothing().when(liquibaseDataInitializer).applyChangeLog(Mockito.any(Database.class), Mockito.any(String.class)); Mockito.doReturn(new BasicDataSource()).when(liquibaseDataInitializer).getDatasource(Mockito.any(String.class)); Mockito.doReturn(null).when(liquibaseDataInitializer).getDatabase(Mockito.any(DataSource.class)); From da7851b8aa880b84aadabaddad3b691d9b6c5654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Delhom=C3=A9nie?= Date: Tue, 15 Sep 2015 22:26:50 +0200 Subject: [PATCH 07/46] Close database connection after liquibase update --- .../persistence/impl/LiquibaseDataInitializer.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java index 4216dc3248..0b8efef83a 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java @@ -112,13 +112,14 @@ public void initData() { @Override public void initData(String datasourceName) { if(!changeLogsPlugins.isEmpty()) { + Database database = null; try { LOG.info("Starting data initialization with Liquibase with datasource " + datasourceName); DataSource datasource = getDatasource(datasourceName); if(datasource != null) { - Database database = getDatabase(datasource); + database = getDatabase(datasource); for (ChangeLogsPlugin changeLogsPlugin : this.changeLogsPlugins) { LOG.info("Processing changelogs of " + changeLogsPlugin.getName()); @@ -138,6 +139,14 @@ public void initData(String datasourceName) { LOG.error("Error while initializing liquibase database - Cause : " + e.getMessage(), e); } catch (SQLException e) { LOG.error("Error while getting a JDBC connection from datasource " + datasourceName + " - Cause : " + e.getMessage(), e); + } finally { + if(database != null) { + try { + database.close(); + } catch (DatabaseException e) { + LOG.error("Error while closing database connection - Cause : " + e.getMessage(), e); + } + } } } else { LOG.info("No data to initialize with Liquibase"); From b8ce03a31cebf4dc92de5ea17f40301886d40381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Delhom=C3=A9nie?= Date: Wed, 16 Sep 2015 10:38:18 +0200 Subject: [PATCH 08/46] Use a new database connection for each Liquibase changelogs file --- .../impl/LiquibaseDataInitializer.java | 82 ++++++++----------- .../impl/LiquibaseDataInitializerTest.java | 9 +- 2 files changed, 37 insertions(+), 54 deletions(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java index 0b8efef83a..74b40d8863 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializer.java @@ -112,41 +112,20 @@ public void initData() { @Override public void initData(String datasourceName) { if(!changeLogsPlugins.isEmpty()) { - Database database = null; - try { - LOG.info("Starting data initialization with Liquibase with datasource " + datasourceName); - - DataSource datasource = getDatasource(datasourceName); - - if(datasource != null) { - database = getDatabase(datasource); - - for (ChangeLogsPlugin changeLogsPlugin : this.changeLogsPlugins) { - LOG.info("Processing changelogs of " + changeLogsPlugin.getName()); - try { - for (String changelogsPath : changeLogsPlugin.getChangelogPaths()) { - LOG.info(" * processing changelog " + changelogsPath); - applyChangeLog(database, changelogsPath); - } - } catch (LiquibaseException e) { - LOG.error("Error while processing changelogs of plugin " + changeLogsPlugin.getName() + " - Cause : " + e.getMessage(), e); - } - } - } else { - LOG.error("Data initialization aborted because the datasource " + datasourceName + " has not been found."); - } - } catch (DatabaseException e) { - LOG.error("Error while initializing liquibase database - Cause : " + e.getMessage(), e); - } catch (SQLException e) { - LOG.error("Error while getting a JDBC connection from datasource " + datasourceName + " - Cause : " + e.getMessage(), e); - } finally { - if(database != null) { - try { - database.close(); - } catch (DatabaseException e) { - LOG.error("Error while closing database connection - Cause : " + e.getMessage(), e); + LOG.info("Starting data initialization with Liquibase with datasource " + datasourceName); + + DataSource datasource = getDatasource(datasourceName); + + if(datasource != null) { + for (ChangeLogsPlugin changeLogsPlugin : this.changeLogsPlugins) { + LOG.info("Processing changelogs of " + changeLogsPlugin.getName()); + for (String changelogsPath : changeLogsPlugin.getChangelogPaths()) { + LOG.info(" * processing changelog " + changelogsPath); + applyChangeLog(datasource, changelogsPath); } } + } else { + LOG.error("Data initialization aborted because the datasource " + datasourceName + " has not been found."); } } else { LOG.info("No data to initialize with Liquibase"); @@ -154,26 +133,31 @@ public void initData(String datasourceName) { } /** - * Get a Liquibase Database from a Datasource + * Apply changelogs with Liquibase * @param datasource - * @return - * @throws DatabaseException - * @throws SQLException - */ - protected Database getDatabase(DataSource datasource) throws DatabaseException, SQLException { - return DatabaseFactory.getInstance() - .findCorrectDatabaseImplementation(new JdbcConnection(datasource.getConnection())); - } - - /** - * Apply changelog with Liquibase - * @param database * @param changelogsPath * @throws LiquibaseException */ - protected void applyChangeLog(Database database, String changelogsPath) throws LiquibaseException { - Liquibase liquibase = new Liquibase(changelogsPath, new ClassLoaderResourceAccessor(), database); - liquibase.update(liquibaseContexts); + protected void applyChangeLog(DataSource datasource, String changelogsPath) { + Database database = null; + try { + database = DatabaseFactory.getInstance() + .findCorrectDatabaseImplementation(new JdbcConnection(datasource.getConnection())); + Liquibase liquibase = new Liquibase(changelogsPath, new ClassLoaderResourceAccessor(), database); + liquibase.update(liquibaseContexts); + } catch (SQLException e) { + LOG.error("Error while getting a JDBC connection from datasource " + datasourceName + " - Cause : " + e.getMessage(), e); + } catch (LiquibaseException e) { + LOG.error("Error while applying liquibase changelogs " + changelogsPath + " - Cause : " + e.getMessage(), e); + } finally { + if(database != null) { + try { + database.close(); + } catch (DatabaseException e) { + LOG.error("Error while closing database connection - Cause : " + e.getMessage(), e); + } + } + } } /** diff --git a/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java b/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java index 97c991eb18..06cb24771f 100644 --- a/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java +++ b/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/LiquibaseDataInitializerTest.java @@ -1,6 +1,5 @@ package org.exoplatform.commons.persistence.impl; -import liquibase.database.Database; import liquibase.exception.LiquibaseException; import org.apache.commons.dbcp.BasicDataSource; import org.exoplatform.container.xml.InitParams; @@ -70,6 +69,7 @@ public void shouldUseDefaultContextsWhenContextsAreNotDefinedInConfiguration() { Assert.assertEquals(liquibaseDataInitializer.getContexts(), LiquibaseDataInitializer.LIQUIBASE_DEFAULT_CONTEXTS); } + @Test public void shouldNotCallLiquibaseWhenNoChangeLogs() throws LiquibaseException { InitParams initParams = new InitParams(); @@ -82,7 +82,7 @@ public void shouldNotCallLiquibaseWhenNoChangeLogs() throws LiquibaseException { liquibaseDataInitializer.initData(); - Mockito.verify(liquibaseDataInitializer, Mockito.never()).applyChangeLog(Mockito.any(Database.class), Mockito.any(String.class)); + Mockito.verify(liquibaseDataInitializer, Mockito.never()).applyChangeLog(Mockito.any(DataSource.class), Mockito.any(String.class)); } @Test @@ -94,9 +94,8 @@ public void shouldCallLiquibaseWhenChangeLogsAreAdded() throws LiquibaseExceptio initParams.addParam(datasourceNameValueParam); LiquibaseDataInitializer liquibaseDataInitializer = Mockito.spy(new LiquibaseDataInitializer(initParams)); - Mockito.doNothing().when(liquibaseDataInitializer).applyChangeLog(Mockito.any(Database.class), Mockito.any(String.class)); + Mockito.doNothing().when(liquibaseDataInitializer).applyChangeLog(Mockito.any(DataSource.class), Mockito.any(String.class)); Mockito.doReturn(new BasicDataSource()).when(liquibaseDataInitializer).getDatasource(Mockito.any(String.class)); - Mockito.doReturn(null).when(liquibaseDataInitializer).getDatabase(Mockito.any(DataSource.class)); List changeLogsPaths = new ArrayList<>(3); changeLogsPaths.add("changelog1"); @@ -113,6 +112,6 @@ public void shouldCallLiquibaseWhenChangeLogsAreAdded() throws LiquibaseExceptio liquibaseDataInitializer.initData(); - Mockito.verify(liquibaseDataInitializer, Mockito.times(3)).applyChangeLog(Mockito.any(Database.class), Mockito.any(String.class)); + Mockito.verify(liquibaseDataInitializer, Mockito.times(3)).applyChangeLog(Mockito.any(DataSource.class), Mockito.any(String.class)); } } From 5635afcab18ccc3503963a106aa14e2968113115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20Gr=C3=A9au?= Date: Wed, 23 Sep 2015 13:06:41 +0200 Subject: [PATCH 09/46] PLF-6422: Upgrade to JCR 1.16.2-GA --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index ce6e82a9fb..a982fd4c4d 100644 --- a/pom.xml +++ b/pom.xml @@ -51,10 +51,10 @@ 11-SNAPSHOT - 2.5.1-GA - 2.6.1-GA - 2.4.1-GA - 1.16.1-GA + 2.5.2-GA + 2.6.2-GA + 2.4.2-GA + 1.16.2-GA 4.3.x-PLF-SNAPSHOT From 1d4e0c7aa2e477089c5cd30dc92b5981147adc28 Mon Sep 17 00:00:00 2001 From: thanhvc Date: Wed, 15 Jul 2015 11:03:38 +0700 Subject: [PATCH 10/46] COMMONS-430: [Intranet Notification] NotificationInfo clones without Title value Fix description: * Set message title in NotificationInfo.clone * Return a new MessageInfo with only message title when the plugin uses the default TemplateBuilder. --- .../channel/template/PluginTemplateBuilderAdapter.java | 2 +- .../commons/api/notification/model/NotificationInfo.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/commons-api/src/main/java/org/exoplatform/commons/api/notification/channel/template/PluginTemplateBuilderAdapter.java b/commons-api/src/main/java/org/exoplatform/commons/api/notification/channel/template/PluginTemplateBuilderAdapter.java index 7932feb329..f6802e1f58 100644 --- a/commons-api/src/main/java/org/exoplatform/commons/api/notification/channel/template/PluginTemplateBuilderAdapter.java +++ b/commons-api/src/main/java/org/exoplatform/commons/api/notification/channel/template/PluginTemplateBuilderAdapter.java @@ -41,7 +41,7 @@ protected MessageInfo makeMessage(NotificationContext ctx) { AbstractNotificationPlugin abstractPlugin = (AbstractNotificationPlugin) basePlugin; return abstractPlugin.buildMessage(ctx); } - return null; + return new MessageInfo().body(ctx.getNotificationInfo().getTitle()); } @Override diff --git a/commons-api/src/main/java/org/exoplatform/commons/api/notification/model/NotificationInfo.java b/commons-api/src/main/java/org/exoplatform/commons/api/notification/model/NotificationInfo.java index 628d2c189a..4647655fac 100644 --- a/commons-api/src/main/java/org/exoplatform/commons/api/notification/model/NotificationInfo.java +++ b/commons-api/src/main/java/org/exoplatform/commons/api/notification/model/NotificationInfo.java @@ -451,6 +451,7 @@ public NotificationInfo clone(boolean isNew) { NotificationInfo message = instance(); message.setFrom(from) .key(key) + .setTitle(title) .setOrder(order) .setOwnerParameter(new HashMap(ownerParameter)) .setSendToDaily(arrayCopy(sendToDaily)) From 518952f50f86280e124cd00ac28ec1fa08333dbe Mon Sep 17 00:00:00 2001 From: TRAN Trung-Thanh Date: Wed, 25 Mar 2015 17:35:45 +0700 Subject: [PATCH 11/46] COMMONS-400: Several issues when sharing video on Activity Stream Fix descripiton: - Remove hard-coded protocol - Correct patterns for vimeo, slideshare and dailymotion --- .../commons/embedder/AbstractEmbedder.java | 18 ++++++++ .../commons/embedder/OembedEmbedder.java | 19 +++++++- .../commons/embedder/YoutubeEmbedder.java | 24 ++++++---- .../resources/conf/portal/configuration.xml | 12 ++--- .../commons/embedder/EmbedderTest.java | 46 ++++++++++++++++++- 5 files changed, 102 insertions(+), 17 deletions(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/embedder/AbstractEmbedder.java b/commons-component-common/src/main/java/org/exoplatform/commons/embedder/AbstractEmbedder.java index 7dfee00060..42f6c2b0dd 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/embedder/AbstractEmbedder.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/embedder/AbstractEmbedder.java @@ -18,12 +18,14 @@ import java.io.BufferedReader; import java.io.InputStreamReader; +import java.net.URI; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.regex.Pattern; +import javax.ws.rs.core.UriBuilder; import org.exoplatform.container.xml.InitParams; import org.exoplatform.container.xml.ValueParam; import org.exoplatform.services.log.Log; @@ -60,6 +62,22 @@ public void setUrl(String url) { this.url = url; } + /** Correct URI String + * + * @param URI URI string to correct + * @param scheme scheme to set + * @param force if force is false, only set again scheme when scheme is missing. Otherwise, always set it + * @return + */ + + public String correctURIString(String uriString, String scheme, boolean force) { + URI uri = UriBuilder.fromUri(uriString).build(); + if (uri.getScheme() == null || force) { + uri = UriBuilder.fromUri(uri.toString()).scheme(scheme).build(); + } + return uri.toString(); + } + protected JSONObject getJSONObject(URL url) { BufferedReader bufferedReader; diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/embedder/OembedEmbedder.java b/commons-component-common/src/main/java/org/exoplatform/commons/embedder/OembedEmbedder.java index f988d0557d..601b00e2cc 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/embedder/OembedEmbedder.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/embedder/OembedEmbedder.java @@ -19,6 +19,8 @@ import org.exoplatform.container.xml.InitParams; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; +import org.exoplatform.portal.application.PortalRequestContext; +import org.exoplatform.portal.webui.util.Util; import org.json.JSONException; import org.json.JSONObject; @@ -55,6 +57,8 @@ public class OembedEmbedder extends AbstractEmbedder { private static final String EMBED_THUMBNAIL = "thumbnail"; + private static final Pattern SECURE_SHORTEN_DAILY_MOTION_PATTERN = Pattern.compile("https://dai\\.ly/.*"); + /** * constructor * @@ -92,7 +96,20 @@ private URL getOembedUrl(String url) { Matcher matcher = pattern.matcher(url); if (matcher.find()) { String endpoint = schemeEndpointMap.get(pattern); - return new URL(String.format(endpoint, url)); + String scheme = "http"; + try { + PortalRequestContext portalRequestContext = Util.getPortalRequestContext(); + scheme = portalRequestContext.getRequest().getScheme(); + } catch (Exception e) { + LOG.info("Cannot get scheme from Portal Request Context"); + } + // COMMONS-400: Workaround for share secure daily motion pattern by using oEmbed + // https://www.dailymotion.com/services/oembed?format=json&url=https://dai.ly/xxxxx does not work + Matcher shortenMatcher = SECURE_SHORTEN_DAILY_MOTION_PATTERN.matcher(url); + if (shortenMatcher.find()) { + url = correctURIString(url, "http", true); + } + return new URL(correctURIString(String.format(endpoint, url),scheme, false)); } } } catch (MalformedURLException e) { diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/embedder/YoutubeEmbedder.java b/commons-component-common/src/main/java/org/exoplatform/commons/embedder/YoutubeEmbedder.java index b341e09588..c73d693cd1 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/embedder/YoutubeEmbedder.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/embedder/YoutubeEmbedder.java @@ -24,7 +24,8 @@ import org.exoplatform.container.xml.InitParams; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; -import org.json.JSONArray; +import org.exoplatform.portal.application.PortalRequestContext; +import org.exoplatform.portal.webui.util.Util; import org.json.JSONException; import org.json.JSONObject; @@ -38,7 +39,7 @@ public class YoutubeEmbedder extends AbstractEmbedder { private static final Pattern YOUTUBE_ID_PATTERN = Pattern .compile("(youtu\\.be\\/|youtube\\.com\\/(watch\\?(.*&)?v=|(embed|v)\\/))([^\\?&\"'>]+)"); - private static final String YOUTUBE_SRC = "http://www.youtube.com/embed/%s?enablejsapi=1"; + private static final String YOUTUBE_SRC = "//www.youtube.com/embed/%s?enablejsapi=1"; private static final String YOUTUBE_V3_API_KEY_PROPERTY = "youtube.v3.api.key"; /** @@ -60,10 +61,17 @@ public Pattern getYouTubeURLPattern() { */ public ExoMedia getExoMedia() { String feedsURL = null; + String scheme = "http"; for(Pattern pattern : schemeEndpointMap.keySet()) { Matcher matcher = pattern.matcher(url); if(matcher.find()) { feedsURL = schemeEndpointMap.get(pattern); + try { + PortalRequestContext portalRequestContext = Util.getPortalRequestContext(); + scheme = portalRequestContext.getRequest().getScheme(); + } catch (Exception e) { + LOG.info("Cannot get scheme from Portal Request Context"); + } } else { return null; } @@ -79,9 +87,8 @@ public ExoMedia getExoMedia() { while (matcher.find()) { youtubeId = matcher.group(5); } - - // - String html = buildIFramePlayer(youtubeId); + + String html = buildIFramePlayer(youtubeId,scheme); if (html == null) { return null; @@ -97,7 +104,7 @@ public ExoMedia getExoMedia() { } String youTubeFeedURL = String.format(feedsURL, youtubeV3APIKey, youtubeId); - URL reqURL = new URL(youTubeFeedURL); + URL reqURL = new URL(correctURIString(youTubeFeedURL, scheme, false)); JSONObject jsonObject = getJSONObject(reqURL); JSONObject snippetObject = jsonObject.getJSONArray("items").getJSONObject(0).getJSONObject("snippet"); @@ -136,7 +143,8 @@ public ExoMedia getExoMedia() { } } - private String buildIFramePlayer(String youtubeId) throws JSONException { + private String buildIFramePlayer(String youtubeId, String scheme) throws JSONException { + if (youtubeId == null) { LOG.info("Returned content url not match the pattern to get content source."); return null; @@ -144,7 +152,7 @@ private String buildIFramePlayer(String youtubeId) throws JSONException { String youTubeSRC = String.format(YOUTUBE_SRC, youtubeId); StringBuilder contentURL = new StringBuilder(); contentURL.append(""); + .append(" src=\"").append(correctURIString(youTubeSRC,scheme,false)).append("\">").append(" "); return contentURL.toString(); } diff --git a/commons-component-common/src/main/resources/conf/portal/configuration.xml b/commons-component-common/src/main/resources/conf/portal/configuration.xml index 3d68214d69..8c58c78885 100644 --- a/commons-component-common/src/main/resources/conf/portal/configuration.xml +++ b/commons-component-common/src/main/resources/conf/portal/configuration.xml @@ -32,16 +32,16 @@ org.exoplatform.commons.embedder.OembedEmbedder - https?://www\.dailymotion\.com/video/.* - http://www.dailymotion.com/services/oembed?format=json&url=%s&maxwidth=330&maxheight=200 + http(s)?://(www\.dailymotion\.com\/(embed\/)?video|dai\.ly)/.* + //www.dailymotion.com/services/oembed?format=json&url=%s&maxwidth=330&maxheight=200 - https?://vimeo\.com/.* - http://vimeo.com/api/oembed.json?url=%s&maxwidth=330&maxheight=200 + http(s)?://(player.)?vimeo\.com/.* + //vimeo.com/api/oembed.json?url=%s&maxwidth=330&maxheight=200 https?://www\.slideshare\.net/.*/.* - http://www.slideshare.net/api/oembed/2?url=%s&format=json&maxwidth=330&maxheight=200 + //www.slideshare.net/api/oembed/2?url=%s&format=json&maxwidth=330&maxheight=200 https?://www\.flickr\.com/photos/.* @@ -55,7 +55,7 @@ org.exoplatform.commons.embedder.YoutubeEmbedder - (?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$ + (?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$ https://www.googleapis.com/youtube/v3/videos?key=%s&part=snippet&id=%s diff --git a/commons-component-common/src/test/java/org/exoplatform/commons/embedder/EmbedderTest.java b/commons-component-common/src/test/java/org/exoplatform/commons/embedder/EmbedderTest.java index 6fd2f7e74e..2f88e84135 100644 --- a/commons-component-common/src/test/java/org/exoplatform/commons/embedder/EmbedderTest.java +++ b/commons-component-common/src/test/java/org/exoplatform/commons/embedder/EmbedderTest.java @@ -19,6 +19,10 @@ import org.exoplatform.commons.testing.BaseCommonsTestCase; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; +import org.exoplatform.portal.application.PortalRequestContext; +import org.exoplatform.portal.webui.util.Util; +import org.exoplatform.webui.application.WebuiRequestContext; +import org.mockito.Mockito; public class EmbedderTest extends BaseCommonsTestCase { @@ -32,6 +36,10 @@ public EmbedderTest() throws Exception { @Override public void setUp() throws Exception { super.setUp(); + WebuiRequestContext context = Mockito.mock(WebuiRequestContext.class); + WebuiRequestContext.setCurrentInstance(context); + PortalRequestContext ctx = Mockito.mock(PortalRequestContext.class); + Mockito.when(Util.getPortalRequestContext()).thenReturn(ctx); } @Override @@ -64,7 +72,7 @@ public void testYoutube() { } /** - * test slideshare link + * Test if slideShare link can be shared as video in AS */ public void testSlideShare() { String slideShareURL = "http://www.slideshare.net/sh1mmer/using-nodejs-to-make-html5-work-for-everyone"; @@ -72,10 +80,44 @@ public void testSlideShare() { embedder = EmbedderFactory.getInstance(slideShareURL); ExoMedia slideObj = embedder.getExoMedia(); if(slideObj == null) { - LOG.warn("Can't connect to slideshare"); + LOG.warn("Can't connect to slideshare"); } else { assertEquals("SlideShare", slideObj.getProvider()); } + assertRetrurnedData("http://www.slideshare.net/thanhc0110m/social-media-trends-exo-platform-company"); + assertRetrurnedData("https://www.slideshare.net/thanhc0110m/social-media-trends-exo-platform-company"); + assertRetrurnedData("http://www.slideshare.net/slideshow/embed_code/43654545"); + assertRetrurnedData("https://www.slideshare.net/slideshow/embed_code/43654545"); + } + + public void testDailyMotionShare() { + String dailyMotion = "http://www.dailymotion.com/video/x2g4jx_exo-platform-theserverside-video-te_news"; + // Dailymotion oembed response + embedder = EmbedderFactory.getInstance(dailyMotion); + ExoMedia dailyObj = embedder.getExoMedia(); + if(dailyObj == null) { + LOG.warn("Can't connect to dailymotion"); + } + assertRetrurnedData("http://www.dailymotion.com/video/x2g4jx_exo-platform-theserverside-video-te_news"); + assertRetrurnedData("https://www.dailymotion.com/video/x2g4jx_exo-platform-theserverside-video-te_news"); + assertRetrurnedData("http://dai.ly/x2g4jx"); + assertRetrurnedData("https://dai.ly/x2g4jx"); + assertRetrurnedData("http://www.dailymotion.com/embed/video/x2g4jx"); + assertRetrurnedData("https://www.dailymotion.com/embed/video/x2g4jx"); + } + + public void testVimeoShare() { + String dailyMotion = "http://vimeo.com/72407771"; + // Vimeo oembed response + embedder = EmbedderFactory.getInstance(dailyMotion); + ExoMedia vimeoObj = embedder.getExoMedia(); + if(vimeoObj == null) { + LOG.warn("Can't connect to vimeo"); + } + assertRetrurnedData("http://vimeo.com/72407771"); + assertRetrurnedData("https://vimeo.com/72407771"); + assertRetrurnedData("http://player.vimeo.com/video/72407771"); + assertRetrurnedData("https://player.vimeo.com/video/72407771"); } /** From da519389f7aac64e1be4ea47c10a01b9bb441d34 Mon Sep 17 00:00:00 2001 From: trangvh Date: Tue, 29 Sep 2015 12:37:38 +0700 Subject: [PATCH 12/46] COMMONS-400: Add dependency exo.portal.webui.portal --- commons-component-common/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/commons-component-common/pom.xml b/commons-component-common/pom.xml index 39d4588ed6..bd3b1714f3 100644 --- a/commons-component-common/pom.xml +++ b/commons-component-common/pom.xml @@ -84,6 +84,10 @@ org.gatein.portal exo.portal.component.common + + org.gatein.portal + exo.portal.webui.portal + org.owasp.antisamy antisamy From 76125bba0324a814d92a0a003eac41ac7d98026b Mon Sep 17 00:00:00 2001 From: Nguyen Thi Nhu Quynh Date: Fri, 11 Sep 2015 17:30:36 +0700 Subject: [PATCH 13/46] COMMONS-443: UserStateService cache is always missed Fix description: * Create user state node (VideoCalls) when it doesn't exist. --- .../org/exoplatform/services/user/UserStateService.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/services/user/UserStateService.java b/commons-component-common/src/main/java/org/exoplatform/services/user/UserStateService.java index c8687e09b5..c234fc1ef2 100644 --- a/commons-component-common/src/main/java/org/exoplatform/services/user/UserStateService.java +++ b/commons-component-common/src/main/java/org/exoplatform/services/user/UserStateService.java @@ -118,7 +118,12 @@ public UserStateModel getUserState(String userId) { SessionProvider sessionProvider = new SessionProvider(state); try { Node userNodeApp = nodeHierarchyCreator.getUserApplicationNode(sessionProvider, userId); - Node userState = userNodeApp.getNode(VIDEOCALLS_BASE_PATH); + Node userState; + if (userNodeApp.hasNode(VIDEOCALLS_BASE_PATH)) { + userState = userNodeApp.getNode(VIDEOCALLS_BASE_PATH); + } else { + userState = userNodeApp.addNode(VIDEOCALLS_BASE_PATH, USER_STATATUS_NODETYPE); + } model = new UserStateModel(); model.setUserId(userState.getProperty(USER_ID_PROP).getString()); model.setLastActivity(userState.getProperty(LAST_ACTIVITY_PROP).getLong()); @@ -223,4 +228,4 @@ public int compare(UserStateModel u1, UserStateModel u2) { private ExoCache getUserStateCache() { return cacheService.getCacheInstance(UserStateService.class.getName() + CommonsUtils.getRepository().getConfiguration().getName()) ; } -} \ No newline at end of file +} From b0563d0f977dcdafb03d29929da58858bfdd0c4b Mon Sep 17 00:00:00 2001 From: Benoit de Chateauvieux Date: Mon, 19 Oct 2015 17:09:43 +0700 Subject: [PATCH 14/46] ExoTransactionalAspect -> log RuntimeExceptions that rollback the transaction --- .../commons/persistence/impl/ExoTransactionalAspect.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ExoTransactionalAspect.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ExoTransactionalAspect.java index f6f5cc421f..f53ad38537 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ExoTransactionalAspect.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/ExoTransactionalAspect.java @@ -69,6 +69,9 @@ public Object around(ProceedingJoinPoint point) throws Throwable { try { Object result = point.proceed(); return result; + } catch (RuntimeException e) { + LOG.error("Error while processing transactional method.", e); + throw e; } finally { // Do we need to end Transaction ? if ((begunTx) && (entityManager.getTransaction().isActive())) { From 264699cc7088134f5ba788ca38217c0811439a0d Mon Sep 17 00:00:00 2001 From: tu-vu-duy Date: Mon, 3 Aug 2015 16:42:47 +0700 Subject: [PATCH 15/46] DEP-97 | Create DependencyManagement entry for org.hibernate.hibernate-entitymanager --- commons-component-common/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/commons-component-common/pom.xml b/commons-component-common/pom.xml index bd3b1714f3..623a73528f 100644 --- a/commons-component-common/pom.xml +++ b/commons-component-common/pom.xml @@ -183,6 +183,12 @@ org.hibernate hibernate-entitymanager + + + org.jboss.spec.javax.transaction + jboss-transaction-api_1.1_spec + + 4.1.12.Final From 6b383f840ab1c5342c05e836342cec4a9a36fcfe Mon Sep 17 00:00:00 2001 From: binhdv Date: Thu, 20 Aug 2015 16:26:58 +0700 Subject: [PATCH 16/46] Fix error pom.xml --- commons-component-common/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/commons-component-common/pom.xml b/commons-component-common/pom.xml index 623a73528f..957c29836c 100644 --- a/commons-component-common/pom.xml +++ b/commons-component-common/pom.xml @@ -190,12 +190,6 @@ 4.1.12.Final - - - org.jboss.spec.javax.transaction - jboss-transaction-api_1.1_spec - - From a0871bac9fea6dfc628ac19357da94cbaa5d6d8f Mon Sep 17 00:00:00 2001 From: Minh Dang Date: Wed, 28 Oct 2015 17:22:15 +0700 Subject: [PATCH 17/46] PLF-6397 fix problem with missing alias which cause the WARN not valid js identifier --- .../main/webapp/WEB-INF/gatein-resources.xml | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml b/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml index 180533c299..799beccbfe 100644 --- a/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml +++ b/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml @@ -1,10 +1,10 @@ + xsi:schemaLocation="http://www.gatein.org/xml/ns/gatein_resources_1_3 http://www.gatein.org/xml/ns/gatein_resources_1_3" + xmlns="http://www.gatein.org/xml/ns/gatein_resources_1_3"> + - commons-document @@ -13,15 +13,15 @@ /javascript/eXo/commons/commons-Document.js - commons-CssIconFile - CssIconFile + commons-CssIconFile + CssIconFile - bts_tooltip - + bts_tooltip + - jquery - jQuery + jquery + jQuery base @@ -46,23 +46,23 @@ - UISpaceSwitcher - - - jquery - jQuery - + UISpaceSwitcher + + + jquery + jQuery + - - xss-utils - - - + + xss-utils + XSSUtils + + juzu-ajax @@ -71,8 +71,8 @@ /juzu/ajax/script.js - jquery - jQuery + jquery + jQuery From f0604ca0d020f8a4e62f622b428976fb058489eb Mon Sep 17 00:00:00 2001 From: toannh Date: Tue, 15 Sep 2015 15:25:43 +0700 Subject: [PATCH 18/46] UI-4008: Update responsive left compnay navigation --- .../main/webapp/WEB-INF/gatein-resources.xml | 11 +++++ .../webapp/javascript/eXo/commons/Utils.js | 40 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 commons-webui-resources/src/main/webapp/javascript/eXo/commons/Utils.js diff --git a/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml b/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml index 799beccbfe..3d22d7fb11 100644 --- a/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml +++ b/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml @@ -75,5 +75,16 @@ jQuery + + + common-utils + + + jquery + jQuery + + diff --git a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/Utils.js b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/Utils.js new file mode 100644 index 0000000000..d09bb359e6 --- /dev/null +++ b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/Utils.js @@ -0,0 +1,40 @@ +/** + * Created by The eXo Platform SEA + * Author : eXoPlatform + * toannh@exoplatform.com + * On 15/09/15 + * Utils commons + * + */ +(function(gj) { + + var Utils = function() {} + + Utils.prototype.checkDevice = function(){ + var body = gj('body:first').removeClass('phoneDisplay').removeClass('phoneSmallDisplay').removeClass('tabletDisplay').removeClass('tabletLDisplay'); + var isMobile = body.find('.visible-phone:first').css('display') !== 'none'; + var isSmallMobile = body.find('.visible-phone-small:first').css('display') !== 'none'; + var isTablet = body.find('.visible-tablet:first').css('display') !== 'none'; + var isTabletL = body.find('.visible-tabletL:first').css('display') !== 'none'; + if (isMobile) { + body.addClass('phoneDisplay'); + } + if (isSmallMobile) { + body.addClass('phoneSmallDisplay'); + } + if (isTablet) { + body.addClass('tabletDisplay'); + } + if (isTabletL) { + body.addClass('tabletLDisplay'); + } + return {'isMobile' : isMobile,'isSmallMobile' : isSmallMobile, 'isTablet' : isTablet, 'isTabletL' : isTabletL}; + } + + if(!eXo.commons) eXo.commons={}; + eXo.commons.Utils = new Utils(); + return { + Utils : eXo.commons.Utils + }; + +})(jQuery); \ No newline at end of file From 74c1a00991164eda5b407369db6ecdd5640a3811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20Gr=C3=A9au?= Date: Fri, 30 Oct 2015 08:31:30 +0100 Subject: [PATCH 19/46] SWF-3473: Upgrade to JCR 1.16.3-GA --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index a982fd4c4d..1d6e9c182b 100644 --- a/pom.xml +++ b/pom.xml @@ -51,10 +51,10 @@ 11-SNAPSHOT - 2.5.2-GA - 2.6.2-GA - 2.4.2-GA - 1.16.2-GA + 2.5.3-GA + 2.6.3-GA + 2.4.3-GA + 1.16.3-GA 4.3.x-PLF-SNAPSHOT From 9f1d470cf8b26bb9eb4bf59e10f7d807bb003b2b Mon Sep 17 00:00:00 2001 From: aboughzela Date: Mon, 2 Nov 2015 12:18:23 +0100 Subject: [PATCH 20/46] COMMONS-456 : Allow to configure dialect in ISPNCacheableLockManagerImpl --- .../commons-extension/jcr/repository-configuration.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/commons-extension-webapp/src/main/webapp/WEB-INF/conf/commons-extension/jcr/repository-configuration.xml b/commons-extension-webapp/src/main/webapp/WEB-INF/conf/commons-extension/jcr/repository-configuration.xml index b1fa14dc8e..6720176539 100644 --- a/commons-extension-webapp/src/main/webapp/WEB-INF/conf/commons-extension/jcr/repository-configuration.xml +++ b/commons-extension-webapp/src/main/webapp/WEB-INF/conf/commons-extension/jcr/repository-configuration.xml @@ -89,6 +89,7 @@ + @@ -158,6 +159,7 @@ + @@ -226,6 +228,7 @@ + @@ -292,6 +295,7 @@ + @@ -360,6 +364,7 @@ + @@ -425,6 +430,7 @@ + @@ -491,6 +497,7 @@ + From afb7ea27a58e9477b7cdab0d52ddf860474f0010 Mon Sep 17 00:00:00 2001 From: toannh Date: Wed, 19 Aug 2015 18:16:42 +0700 Subject: [PATCH 21/46] Doc Auto Implement Document Selector --- .../eXo/commons/commons-Document.js | 124 ++++++++++++++---- 1 file changed, 101 insertions(+), 23 deletions(-) diff --git a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js index dc29374b6d..ca57a49f70 100644 --- a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js +++ b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js @@ -25,6 +25,9 @@ function DocumentSelector(){ this.selectedItem = null; this.noFolderOrFileLabel = "There is no folder or file."; this.noDriveLabel = "There is no drive."; + this.listFiles=[]; + this.listFileName=[]; + this.existingBehavior = "keepBoth" }; function DocumentItem(){ @@ -204,7 +207,8 @@ DocumentSelector.prototype.renderDetailsFolder = function(documentItem) { var folderList = folderContainer.getElementsByTagName("Folder"); var fileContainer = data.getElementsByTagName("Files")[0]; var fileList = fileContainer.getElementsByTagName("File"); - + eXo.commons.DocumentSelector.listFiles=[]; + eXo.commons.DocumentSelector.listFileName=[]; var listRecords = jQuery('#ListRecords'); if ((!fileList || fileList.length <= 0) @@ -266,6 +270,9 @@ DocumentSelector.prototype.renderDetailsFolder = function(documentItem) { var nodeType = fileList[j].getAttribute("nodeType"); var nodeTypeIcon = nodeType.replace(":", "_") + "48x48Icon Folder"; var node = fileList[j].getAttribute("name"); + var isVersion = fileList[j].getAttribute("isVersioned"); + eXo.commons.DocumentSelector.listFiles.push({"name":node, "value":isVersion}); + eXo.commons.DocumentSelector.listFileName.push(node); var title = fileList[j].getAttribute("title"); var size = fileList[j].getAttribute("size"); if (size < 1024) @@ -690,12 +697,12 @@ function UIDSUpload() { uploadHTML += " "; uploadHTML += " "; uploadHTML += " "; } else { uploadHTML += " "; - uploadHTML += " "; + uploadHTML += " "; uploadHTML += " "; } uploadHTML += " "; @@ -805,7 +812,7 @@ function UIDSUpload() { url += "action=save" + "&workspaceName=" + selectedItem.workspaceName + "&driveName=" + selectedItem.driveName + "¤tFolder=" + selectedItem.currentFolder + "¤tPortal=" + eXo.env.portal.portalName + "&language=" - + eXo.env.portal.language +"&uploadId=" + uploadId + "&fileName=" + fileName; + + eXo.env.portal.language +"&uploadId=" + uploadId + "&fileName=" + fileName+"&existenceAction="+_module.DocumentSelector.existingBehavior; url = encodeURI(url); var responseText = ajaxAsyncGetRequest(url, false); }; @@ -884,6 +891,91 @@ function UIDSUpload() { input.value = "false"; }; + /** + * Pre upload file + */ + UIDSUpload.prototype.preUpload = function(clickEle, id) { + var me = _module.UIDSUpload; + var selectedItem = _module.DocumentSelector.selectedItem; + var container = window.document.getElementById(id); + var uploadIFrame = window.document.getElementById(id+"UploadIframe"); + var uploadFrame = window.document.getElementById(id+"uploadFrame"); + if (!selectedItem || !selectedItem.driveName) { + alert(uploadIFrame.getAttribute("select_drive")); + file.value == ''; + return; + } + + var canAddChild = selectedItem.canAddChild; + if (canAddChild == "false") { + alert(uploadIFrame.getAttribute("permission_required")); + file.value == ''; + return; + } + + var form = uploadFrame.contentWindow.document.getElementById(id); + var file = jQuery(clickEle ,form); + if(file.attr("value") == null || file.attr("value") == '') return; + var fileName = file.attr("value").replace(/C:\\fakepath\\/i, ''); + + if(eXo.commons.DocumentSelector.listFileName.indexOf(fileName) != -1){ + var documentAuto = "

"; + documentAuto += "
Existing file file.png
"; + documentAuto += "Cancel "; + documentAuto += " or  "; + if(checkVersExistedFile(eXo.commons.DocumentSelector.listFiles, fileName)) { + documentAuto += "Create a new version"; + }else { + documentAuto += " Replace"; + } + documentAuto += ""; + documentAuto += "Keep both"; + documentAuto += "
"; + + var autoVersionDiv = jQuery("#auto-versioning-actions"); + if(autoVersionDiv.length<1) { + jQuery(documentAuto).insertBefore(jQuery("#UIDocumentSelector #ListRecords")); + autoVersionDiv = jQuery("#auto-versioning-actions"); + } + + autoVersionDiv.removeClass("hidden"); + jQuery("#auto-versioning-actions .fileName").html(fileName); + + jQuery("#auto-versioning-actions .cancel").bind("click", function(){ + jQuery("#auto-versioning-actions").addClass("hidden"); + }) + + jQuery("#auto-versioning-actions .keep-both").unbind(); + jQuery("#auto-versioning-actions .keep-both").bind("click", function(){ + jQuery("#auto-versioning-actions").addClass("hidden"); + eXo.commons.DocumentSelector.existingBehavior = "keep"; + eXo.commons.UIDSUpload.upload(clickEle, id); + }) + + jQuery("#auto-versioning-actions .create-version").unbind(); + jQuery("#auto-versioning-actions .create-version").bind("click", function(){ + jQuery("#auto-versioning-actions").addClass("hidden"); + eXo.commons.DocumentSelector.existingBehavior = "createVersion"; + eXo.commons.UIDSUpload.upload(clickEle, id); + }) + + }else{ + eXo.commons.DocumentSelector.existingBehavior = "keep"; + eXo.commons.UIDSUpload.upload(clickEle, id); + } + } + + + + var checkVersExistedFile = function(listFiles, fileName){ + for (var i = 0; i < listFiles.length; i++) { + if(listFiles[i].name === fileName && listFiles[i].value === "true"){ + return true; + } + } + return false; + } + /** * Start upload file * @@ -895,22 +987,8 @@ function UIDSUpload() { UIDSUpload.prototype.upload = function(clickEle, id) { //var DOMUtil = eXo.core.DOMUtil; var me = _module.UIDSUpload; - var selectedItem = _module.DocumentSelector.selectedItem; var container = window.document.getElementById(id); - var uploadIFrame = window.document.getElementById(id+"UploadIframe"); var uploadFrame = window.document.getElementById(id+"uploadFrame"); - if (!selectedItem || !selectedItem.driveName) { - alert(uploadIFrame.getAttribute("select_drive")); - file.value == ''; - return; - } - - var canAddChild = selectedItem.canAddChild; - if (canAddChild == "false") { - alert(uploadIFrame.getAttribute("permission_required")); - file.value == ''; - return; - } var form = uploadFrame.contentWindow.document.getElementById(id); @@ -934,12 +1012,12 @@ function UIDSUpload() { var uploadIframe = jQuery("#"+id+"UploadIframe",container); uploadIframe.hide(); - var progressIframe = jQuery("#"+id+"ProgressIframe",container); - progressIframe.hide(); + var progressIframe = jQuery("#"+id+"ProgressIframe",container); + progressIframe.hide(); + + var tmp = progressIframe.parent(); + var temp = tmp.parent(); - var tmp = progressIframe.parent(); - var temp = tmp.parent(); - form.submit() ; var list = me.listUpload; From 8997e853c4164d8ed1110f85e8cf2d9d60dbee70 Mon Sep 17 00:00:00 2001 From: toannh Date: Thu, 20 Aug 2015 10:27:53 +0700 Subject: [PATCH 22/46] Doc Auto Replace on Document Selector --- .../javascript/eXo/commons/commons-Document.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js index ca57a49f70..e55f66ad20 100644 --- a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js +++ b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js @@ -926,17 +926,18 @@ function UIDSUpload() { if(checkVersExistedFile(eXo.commons.DocumentSelector.listFiles, fileName)) { documentAuto += "Create a new version"; }else { - documentAuto += " Replace"; + documentAuto += " Replace"; } documentAuto += ""; documentAuto += "Keep both"; documentAuto += ""; var autoVersionDiv = jQuery("#auto-versioning-actions"); - if(autoVersionDiv.length<1) { - jQuery(documentAuto).insertBefore(jQuery("#UIDocumentSelector #ListRecords")); - autoVersionDiv = jQuery("#auto-versioning-actions"); + if(autoVersionDiv.length>0) { + jQuery("#auto-versioning-actions").remove(); } + jQuery(documentAuto).insertBefore(jQuery("#UIDocumentSelector #ListRecords")); + autoVersionDiv = jQuery("#auto-versioning-actions"); autoVersionDiv.removeClass("hidden"); jQuery("#auto-versioning-actions .fileName").html(fileName); @@ -959,6 +960,13 @@ function UIDSUpload() { eXo.commons.UIDSUpload.upload(clickEle, id); }) + jQuery("#auto-versioning-actions .replace").unbind(); + jQuery("#auto-versioning-actions .replace").bind("click", function(){ + jQuery("#auto-versioning-actions").addClass("hidden"); + eXo.commons.DocumentSelector.existingBehavior = "replace"; + eXo.commons.UIDSUpload.upload(clickEle, id); + }) + }else{ eXo.commons.DocumentSelector.existingBehavior = "keep"; eXo.commons.UIDSUpload.upload(clickEle, id); From 1b1abeede0123213b9205717a72ed338357e6378 Mon Sep 17 00:00:00 2001 From: toannh Date: Mon, 24 Aug 2015 10:58:53 +0700 Subject: [PATCH 23/46] Update UI for Document selector --- .../main/webapp/javascript/eXo/commons/commons-Document.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js index e55f66ad20..a7828cf557 100644 --- a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js +++ b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js @@ -919,8 +919,8 @@ function UIDSUpload() { var fileName = file.attr("value").replace(/C:\\fakepath\\/i, ''); if(eXo.commons.DocumentSelector.listFileName.indexOf(fileName) != -1){ - var documentAuto = "
"; - documentAuto += "
Existing file file.png
"; + var documentAuto = "
"; + documentAuto += "
Existing file file.png
"; documentAuto += "Cancel "; documentAuto += " or  "; if(checkVersExistedFile(eXo.commons.DocumentSelector.listFiles, fileName)) { From c9775e2fd8e1c599d71dc696ff30bf5d8f1d8d85 Mon Sep 17 00:00:00 2001 From: toannh Date: Mon, 24 Aug 2015 16:35:52 +0700 Subject: [PATCH 24/46] Document Auto update resource bundle --- .../locale/commons/Commons_en.properties | 30 ++++++++++------ .../eXo/commons/commons-Document.js | 35 +++++++++++++------ 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_en.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_en.properties index b6228838be..22a1946ae9 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_en.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_en.properties @@ -1,16 +1,16 @@ ################################################################## # org.exoplatform.webui.commons.UISaveAttachment ################################################################## -UIPopupWindow.title.UISaveAttachment=Save Attachment +UIPopupWindow.title.UISaveAttachment=Save Attachment UIPopupWindow.title.UIAddAttachment=Attach a file from the server -UISaveAttachment.label.SaveFile=Save a file to the server +UISaveAttachment.label.SaveFile=Save a file to the server UISaveAttachment.label.Save=#{word.save} UISaveAttachment.label.Cancel=#{word.cancel} UISaveAttachment.msg.file-name-not-null=File name is required. UISaveAttachment.msg.not-a-folder=The selected item is not a folder. -UISaveAttachment.msg.not-valid-name={0} are not allowed in the file name. -UISaveAttachment.msg.saved-successfully=File was saved successfully. -UISaveAttachment.msg.save-file-not-allow=You are not allowed to save the file here. +UISaveAttachment.msg.not-valid-name={0} are not allowed in the file name. +UISaveAttachment.msg.saved-successfully=File was saved successfully. +UISaveAttachment.msg.save-file-not-allow=You are not allowed to save the file here. ################################################################## # org.exoplatform.webui.commons.UIAddAttachment ################################################################## @@ -26,7 +26,7 @@ UIDocumentSelector.label.root-folder=Root Folder UIDocumentSelector.label.require-drive=Select a drive to add new folder. UIDocumentSelector.label.enter-folder-name=Please enter new folder's name. UIDocumentSelector.label.empty-folder-name=Folder's name can not be empty. -UIDocumentSelector.label.invalid-folder-name=Please enter a valid folder name. +UIDocumentSelector.label.invalid-folder-name=Please enter a valid folder name. UIDocumentSelector.label.Name=Name UIDocumentSelector.label.Date=Date UIDocumentSelector.label.Size=Size @@ -35,16 +35,16 @@ UIDocumentSelector.label.NoFolderOrFile=There is no folder or file. UIDocumentSelector.label.NoDrive=There is no drive. UIDocumentSelector.label.select-drive=Select Drive UIDocumentSelector.label.general-drives= General Drives -UIDocumentSelector.label.group-drives=Group Drives +UIDocumentSelector.label.group-drives=Group Drives UIDocumentSelector.label.personal-drives= Personal Drives -UIDocumentSelector.label.new-folder-not-allow=You are not allowed to create a new folder here. +UIDocumentSelector.label.new-folder-not-allow=You are not allowed to create a new folder here. ################################################################### # org.exoplatform.webui.commons.UIUploadInput # ################################################################### UIDSUploadInput.msg.uploadFile=Upload file UIDSUploadInput.msg.select-drive=Select a drive to upload file. -UIDSUploadInput.msg.permission-required=You are not allowed to upload the file to this folder. -UIFormUploadInput.msg.upload_failed=Upload failed. There is an exception when uploading a file +UIDSUploadInput.msg.permission-required=You are not allowed to upload the file to this folder. +UIFormUploadInput.msg.upload_failed=Upload failed. There is an exception when uploading a file ################################################################### # org.exoplatform.webui.TimeConvertUtils # ################################################################### @@ -67,8 +67,16 @@ TimeConvert.type.DECADES={0} decades ago # UISpaceSwitcher ############################################################################# UISpaceSwitcher.title.select-location=Select location -UISpaceSwitcher.msg.filter-spaces=Filter Spaces +UISpaceSwitcher.msg.filter-spaces=Filter Spaces UISpaceSwitcher.msg.no-space=No Spaces UISpaceSwitcher.title.my-space=My Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Space + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel \ No newline at end of file diff --git a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js index a7828cf557..e4120a3379 100644 --- a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js +++ b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js @@ -27,7 +27,13 @@ function DocumentSelector(){ this.noDriveLabel = "There is no drive."; this.listFiles=[]; this.listFileName=[]; - this.existingBehavior = "keepBoth" + this.existingBehavior = "keepBoth"; + this.document_auto_label_existing = eXo.ecm.WCMUtils.getBundle("DocumentAuto.label.existing", eXo.env.portal.language); + this.document_auto_label_cancel = eXo.ecm.WCMUtils.getBundle("DocumentAuto.label.cancel", eXo.env.portal.language); + this.document_auto_label_or = eXo.ecm.WCMUtils.getBundle("DocumentAuto.label.or", eXo.env.portal.language) + this.document_auto_label_createVersion = eXo.ecm.WCMUtils.getBundle("DocumentAuto.label.createVersion", eXo.env.portal.language); + this.document_auto_label_replace = eXo.ecm.WCMUtils.getBundle("DocumentAuto.label.createVersion", eXo.env.portal.language); + this.document_auto_label_keepBoth = eXo.ecm.WCMUtils.getBundle("DocumentAuto.label.keepBoth", eXo.env.portal.language); }; function DocumentItem(){ @@ -271,7 +277,8 @@ DocumentSelector.prototype.renderDetailsFolder = function(documentItem) { var nodeTypeIcon = nodeType.replace(":", "_") + "48x48Icon Folder"; var node = fileList[j].getAttribute("name"); var isVersion = fileList[j].getAttribute("isVersioned"); - eXo.commons.DocumentSelector.listFiles.push({"name":node, "value":isVersion}); + var isVersionSupport = fileList[j].getAttribute("isVersionSupport"); + eXo.commons.DocumentSelector.listFiles.push({"name":node, "value":isVersion, "isVersionSupport":isVersionSupport}); eXo.commons.DocumentSelector.listFileName.push(node); var title = fileList[j].getAttribute("title"); var size = fileList[j].getAttribute("size"); @@ -918,18 +925,19 @@ function UIDSUpload() { if(file.attr("value") == null || file.attr("value") == '') return; var fileName = file.attr("value").replace(/C:\\fakepath\\/i, ''); - if(eXo.commons.DocumentSelector.listFileName.indexOf(fileName) != -1){ + if(eXo.commons.DocumentSelector.listFileName.indexOf(fileName) != -1 + && checkSupportVersion(eXo.commons.DocumentSelector.listFiles, fileName)){ var documentAuto = "
"; - documentAuto += "
Existing file file.png
"; - documentAuto += "Cancel "; - documentAuto += " or  "; + documentAuto += "
"+eXo.ecm.DocumentSelector.document_auto_label_existing+"file.png
"; + documentAuto += ""+eXo.ecm.DocumentSelector.document_auto_label_cancel+""; + documentAuto += " "+eXo.ecm.DocumentSelector.document_auto_label_or+"  "; if(checkVersExistedFile(eXo.commons.DocumentSelector.listFiles, fileName)) { - documentAuto += "Create a new version"; + documentAuto += ""+eXo.ecm.DocumentSelector.document_auto_label_createVersion+""; }else { - documentAuto += " Replace"; + documentAuto += " "+eXo.ecm.DocumentSelector.document_auto_label_replace+""; } documentAuto += ""; - documentAuto += "Keep both"; + documentAuto += ""+eXo.ecm.DocumentSelector.document_auto_label_keepBoth+""; documentAuto += "
"; var autoVersionDiv = jQuery("#auto-versioning-actions"); @@ -973,7 +981,14 @@ function UIDSUpload() { } } - + var checkSupportVersion = function(listFiles, fileName){ + for (var i = 0; i < listFiles.length; i++) { + if(listFiles[i].name === fileName && listFiles[i].isVersionSupport === "true"){ + return true; + } + } + return false; + } var checkVersExistedFile = function(listFiles, fileName){ for (var i = 0; i < listFiles.length; i++) { From 7daafab82f9804c15c2d56564b845999bbc7f922 Mon Sep 17 00:00:00 2001 From: toannh Date: Wed, 26 Aug 2015 09:35:48 +0700 Subject: [PATCH 25/46] Correct Document selector js --- .../javascript/eXo/commons/commons-Document.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js index e4120a3379..0dc6b4a970 100644 --- a/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js +++ b/commons-webui-resources/src/main/webapp/javascript/eXo/commons/commons-Document.js @@ -928,16 +928,16 @@ function UIDSUpload() { if(eXo.commons.DocumentSelector.listFileName.indexOf(fileName) != -1 && checkSupportVersion(eXo.commons.DocumentSelector.listFiles, fileName)){ var documentAuto = "
"; - documentAuto += "
"+eXo.ecm.DocumentSelector.document_auto_label_existing+"file.png
"; - documentAuto += ""+eXo.ecm.DocumentSelector.document_auto_label_cancel+""; - documentAuto += " "+eXo.ecm.DocumentSelector.document_auto_label_or+"  "; + documentAuto += "
"+eXo.commons.DocumentSelector.document_auto_label_existing+"file.png
"; + documentAuto += ""+eXo.commons.DocumentSelector.document_auto_label_cancel+""; + documentAuto += " "+eXo.commons.DocumentSelector.document_auto_label_or+"  "; if(checkVersExistedFile(eXo.commons.DocumentSelector.listFiles, fileName)) { - documentAuto += ""+eXo.ecm.DocumentSelector.document_auto_label_createVersion+""; + documentAuto += ""+eXo.commons.DocumentSelector.document_auto_label_createVersion+""; }else { - documentAuto += " "+eXo.ecm.DocumentSelector.document_auto_label_replace+""; + documentAuto += " "+eXo.commons.DocumentSelector.document_auto_label_replace+""; } documentAuto += ""; - documentAuto += ""+eXo.ecm.DocumentSelector.document_auto_label_keepBoth+""; + documentAuto += ""+eXo.commons.DocumentSelector.document_auto_label_keepBoth+""; documentAuto += "
"; var autoVersionDiv = jQuery("#auto-versioning-actions"); From 26f94767bb3c0155eb8e104a5d8f8a7e5c76d395 Mon Sep 17 00:00:00 2001 From: toannh Date: Wed, 4 Nov 2015 08:55:21 +0700 Subject: [PATCH 26/46] Merge translation W45 --- .../CommonsNotification_ar.properties | 24 ++-- .../CommonsNotification_cs.properties | 6 +- .../CommonsNotification_de.properties | 26 ++-- .../CommonsNotification_el.properties | 4 +- .../CommonsNotification_fa.properties | 8 +- .../CommonsNotification_it.properties | 14 +- .../CommonsNotification_lt.properties | 20 +-- .../CommonsNotification_no.properties | 2 +- .../CommonsNotification_pt_BR.properties | 30 ++--- .../CommonsNotification_ru.properties | 24 ++-- .../CommonsNotification_sq.properties | 36 +++--- .../CommonsNotification_tr.properties | 24 ++-- .../CommonsNotification_zh_CN.properties | 24 ++-- .../CommonsNotification_zh_TW.properties | 4 +- .../locale/commons/Commons_ar.properties | 12 +- .../locale/commons/Commons_ca.properties | 18 ++- .../locale/commons/Commons_cs.properties | 8 ++ .../locale/commons/Commons_de.properties | 20 ++- .../locale/commons/Commons_el.properties | 10 +- .../locale/commons/Commons_es_ES.properties | 16 ++- .../locale/commons/Commons_fa.properties | 10 +- .../locale/commons/Commons_fi.properties | 40 +++--- .../locale/commons/Commons_fr.properties | 8 ++ .../locale/commons/Commons_it.properties | 8 ++ .../locale/commons/Commons_ja.properties | 10 +- .../locale/commons/Commons_lt.properties | 10 +- .../locale/commons/Commons_no.properties | 8 ++ .../locale/commons/Commons_pl.properties | 10 +- .../locale/commons/Commons_pt_BR.properties | 12 +- .../locale/commons/Commons_ro.properties | 8 ++ .../locale/commons/Commons_ru.properties | 10 +- .../locale/commons/Commons_sq.properties | 120 ++++++++++-------- .../locale/commons/Commons_sv_SE.properties | 8 ++ .../locale/commons/Commons_tr.properties | 12 +- .../locale/commons/Commons_uk.properties | 8 ++ .../locale/commons/Commons_vi.properties | 8 ++ .../locale/commons/Commons_zh_CN.properties | 8 ++ .../locale/commons/Commons_zh_TW.properties | 8 ++ 38 files changed, 415 insertions(+), 221 deletions(-) diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_ar.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_ar.properties index 7635c70657..b61966a412 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_ar.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_ar.properties @@ -1,25 +1,25 @@ -UINotification.label.group.General=\u0639\u0627\u0645\u0651 +UINotification.label.group.General=General UINotification.label.group.Connections=\u0627\u062A\u0635\u0627\u0644\u0627\u062A UINotification.label.group.Spaces=\u0641\u0636\u0627\u0621\u0627\u062A UINotification.label.group.ActivityStream=\u0622\u062E\u0631 \u0627\u0644\u0623\u062E\u0628\u0627\u0631 -UINotification.label.group.Other=\u0622\u062E\u0631 +UINotification.label.group.Other=Other ############################################################################# # DigestPlugin # ############################################################################# -Notification.subject.DigestDailyPlugin=\u062A\u062D\u064A\u064A\u0646\u0627\u062A $PORTAL_NAME \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643 \u0644\u0647\u0630\u0627 \u0627\u0644\u064A\u0648\u0645 -Notification.subject.DigestWeeklyPlugin=\u062A\u062D\u064A\u064A\u0646\u0627\u062A $PORTAL_NAME \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643 \u0644\u0647\u0630\u0627 \u0627\u0644\u0623\u0633\u0628\u0648\u0639 +Notification.subject.DigestDailyPlugin=Your $PORTAL_NAME updates for today +Notification.subject.DigestWeeklyPlugin=Your $PORTAL_NAME updates for this week -Notification.title.DigestDailyPlugin=\u0627\u0644\u062A\u062D\u064A\u064A\u0646\u0627\u062A \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643 {0} \u0644\u0647\u0630\u0627 \u0627\u0644\u064A\u0648\u0645 -Notification.title.DigestWeeklyPlugin=\u0627\u0644\u062A\u062D\u064A\u064A\u0646\u0627\u062A \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643 {0} \u0644\u0647\u0630\u0627 \u0627\u0644\u0623\u0633\u0628\u0648\u0639 +Notification.title.DigestDailyPlugin=Your {0} updates for today +Notification.title.DigestWeeklyPlugin=Your {0} updates for this week -Notification.message.DigestProvider=\u064A\u0645\u0643\u0646\u0643 \u0627\u0644\u0627\u0637\u0651\u0644\u0627\u0639 \u0645\u0627 \u064A\u062D\u062F\u062B \u0627\u0644\u0622\u0646 \u0641\u064A {0} +Notification.message.DigestProvider=Here's what's been happening in {0} -Notification.label.Today=\u0627\u0644\u064A\u0648\u0645 -Notification.label.ThisWeek=\u0647\u0630\u0627 \u0627\u0644\u0623\u0633\u0628\u0648\u0639 +Notification.label.Today=today +Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=\u0645\u0631\u062D\u0628\u0627 -Notification.label.ClickHere=\u0627\u0636\u063A\u0637 \u0647\u0646\u0627 +Notification.label.SayHello=Hi +Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform -Notification.footer.DigestProvider=\u0625\u0630\u0627 \u0643\u0646\u062A \u0644\u0627 \u062A\u0631\u064A\u062F \u0623\u0646 \u062A\u0644\u0642\u064A \u0645\u062B\u0644 \u0647\u0630\u0647 \u0627\u0644\u0625\u062E\u0637\u0627\u0631\u0627\u062A\u060C {0} \u062A\u063A\u064A\u064A\u0631 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0625\u062E\u0637\u0627\u0631. +Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_cs.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_cs.properties index 432618c3c8..b9e7f6a15a 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_cs.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_cs.properties @@ -1,5 +1,5 @@ UINotification.label.group.General=Hlavn\u00ED -UINotification.label.group.Connections=Seznam kontakt\u016F +UINotification.label.group.Connections=Kontakty UINotification.label.group.Spaces=Skupiny UINotification.label.group.ActivityStream=Sled aktivit UINotification.label.group.Other=Ostatn\u00ED @@ -17,8 +17,8 @@ Notification.message.DigestProvider=Tady je to, co se d\u011Bje v {0} Notification.label.Today=dnes Notification.label.ThisWeek=tento t\u00FDden -Notification.label.Daily=day -Notification.label.Weekly=week +Notification.label.Daily=den +Notification.label.Weekly=t\u00FDden Notification.label.SayHello=Ahoj Notification.label.ClickHere=klikn\u011Bte zde Notification.label.CompanyName=eXo Platform diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_de.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_de.properties index 30651f45ba..675d23cacb 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_de.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_de.properties @@ -1,25 +1,25 @@ -UINotification.label.group.General=Allgemein +UINotification.label.group.General=General UINotification.label.group.Connections=Verbindungen UINotification.label.group.Spaces=R\u00E4ume -UINotification.label.group.ActivityStream=Aktivit\u00E4tsfluss -UINotification.label.group.Other=Andere +UINotification.label.group.ActivityStream=Activity Stream +UINotification.label.group.Other=Other ############################################################################# # DigestPlugin # ############################################################################# -Notification.subject.DigestDailyPlugin=Ihre $PORTAL_NAME-Updates f\u00FCr heute -Notification.subject.DigestWeeklyPlugin=Ihre $PORTAL_NAME-Updates f\u00FCr diese Woche +Notification.subject.DigestDailyPlugin=Your $PORTAL_NAME updates for today +Notification.subject.DigestWeeklyPlugin=Your $PORTAL_NAME updates for this week -Notification.title.DigestDailyPlugin=Ihre {0}-Updates f\u00FCr heute -Notification.title.DigestWeeklyPlugin=Ihre {0}-Updates f\u00FCr diese Woche +Notification.title.DigestDailyPlugin=Your {0} updates for today +Notification.title.DigestWeeklyPlugin=Your {0} updates for this week -Notification.message.DigestProvider=Hier ist, was sich in {0} getan hat +Notification.message.DigestProvider=Here's what's been happening in {0} -Notification.label.Today=heute -Notification.label.ThisWeek=diese Woche +Notification.label.Today=today +Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=Hallo -Notification.label.ClickHere=Hier klicken +Notification.label.SayHello=Hi +Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform -Notification.footer.DigestProvider=Wenn Sie diese Benachrichtigungen nicht mehr erhalten wollen, {0} zum \u00C4ndern Ihrer Benachrichtigungseinstellungen. +Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_el.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_el.properties index 6dbd8a551f..28379c54e9 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_el.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_el.properties @@ -17,8 +17,8 @@ Notification.message.DigestProvider=\u0391\u03C5\u03C4\u03AC \u03AD\u03C7\u03BF\ Notification.label.Today=\u03C3\u03AE\u03BC\u03B5\u03C1\u03B1 Notification.label.ThisWeek=\u03B1\u03C5\u03C4\u03AE \u03C4\u03B7\u03BD \u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B1 -Notification.label.Daily=day -Notification.label.Weekly=week +Notification.label.Daily=\u03B7\u03BC\u03AD\u03C1\u03B1 +Notification.label.Weekly=\u03B5\u03B2\u03B4\u03BF\u03BC\u03AC\u03B4\u03B1 Notification.label.SayHello=\u0393\u03B5\u03B9\u03B1 \u03C3\u03B1\u03C2 Notification.label.ClickHere=\u03BA\u03AC\u03BD\u03C4\u03B5 \u03BA\u03BB\u03B9\u03BA \u03B5\u03B4\u03CE Notification.label.CompanyName=eXo Platform diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_fa.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_fa.properties index bfd10c513b..adbf55c146 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_fa.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_fa.properties @@ -1,7 +1,7 @@ UINotification.label.group.General=General -UINotification.label.group.Connections=\u0627\u0631\u062A\u0628\u0627\u0637\u0627\u062A -UINotification.label.group.Spaces=\u0641\u0636\u0627\u0647\u0627 -UINotification.label.group.ActivityStream=\u062C\u0631\u06CC\u0627\u0646 \u0641\u0639\u0627\u0644\u06CC\u062A +UINotification.label.group.Connections=Connections +UINotification.label.group.Spaces=Spaces +UINotification.label.group.ActivityStream=Activity Stream UINotification.label.group.Other=Other ############################################################################# @@ -19,7 +19,7 @@ Notification.label.Today=today Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=\u0633\u0644\u0627\u0645 +Notification.label.SayHello=Hi Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_it.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_it.properties index cbe2934e7c..52017d9f2f 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_it.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_it.properties @@ -1,8 +1,8 @@ -UINotification.label.group.General=Generale -UINotification.label.group.Connections=Connessioni +UINotification.label.group.General=General +UINotification.label.group.Connections=Connections UINotification.label.group.Spaces=Spazi UINotification.label.group.ActivityStream=Flusso Attivit\u00E0 -UINotification.label.group.Other=Altri +UINotification.label.group.Other=Other ############################################################################# # DigestPlugin # @@ -15,11 +15,11 @@ Notification.title.DigestWeeklyPlugin=Your {0} updates for this week Notification.message.DigestProvider=Here's what's been happening in {0} -Notification.label.Today=oggi -Notification.label.ThisWeek=Questa settimana +Notification.label.Today=today +Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=Ciao -Notification.label.ClickHere=clicca qui +Notification.label.SayHello=Hi +Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_lt.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_lt.properties index bd09c09c25..6f4ce8df50 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_lt.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_lt.properties @@ -1,8 +1,8 @@ -UINotification.label.group.General=Bendras +UINotification.label.group.General=General UINotification.label.group.Connections=Jungtys UINotification.label.group.Spaces=Erdv\u0117s UINotification.label.group.ActivityStream=Veiklos srautas -UINotification.label.group.Other=Kitas +UINotification.label.group.Other=Other ############################################################################# # DigestPlugin # @@ -10,16 +10,16 @@ UINotification.label.group.Other=Kitas Notification.subject.DigestDailyPlugin=Your $PORTAL_NAME updates for today Notification.subject.DigestWeeklyPlugin=Your $PORTAL_NAME updates for this week -Notification.title.DigestDailyPlugin=J\u016Bs\u0173 {0} atnaujinimai \u0161iandien -Notification.title.DigestWeeklyPlugin=J\u016Bs\u0173 {0} atnaujinimai \u0161i\u0105 savait\u0119 +Notification.title.DigestDailyPlugin=Your {0} updates for today +Notification.title.DigestWeeklyPlugin=Your {0} updates for this week -Notification.message.DigestProvider=\u0160tai kas vyko {0} +Notification.message.DigestProvider=Here's what's been happening in {0} -Notification.label.Today=\u0161iandien -Notification.label.ThisWeek=\u0161i\u0105 savait\u0119 +Notification.label.Today=today +Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=Labas -Notification.label.ClickHere=Spauskite \u010Dia +Notification.label.SayHello=Hi +Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform -Notification.footer.DigestProvider=Jei nenorite gauti toki\u0173 prane\u0161im\u0173, {0} pakeiskite savo prane\u0161im\u0173 nustatymuose. +Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_no.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_no.properties index bce347c1cd..5472aad947 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_no.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_no.properties @@ -19,7 +19,7 @@ Notification.label.Today=today Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=Hei +Notification.label.SayHello=Hi Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_pt_BR.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_pt_BR.properties index 991c895617..adbf55c146 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_pt_BR.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_pt_BR.properties @@ -1,25 +1,25 @@ -UINotification.label.group.General=Geral -UINotification.label.group.Connections=Conex\u00F5es -UINotification.label.group.Spaces=Espa\u00E7os -UINotification.label.group.ActivityStream=Fluxo de Atividade -UINotification.label.group.Other=Outros +UINotification.label.group.General=General +UINotification.label.group.Connections=Connections +UINotification.label.group.Spaces=Spaces +UINotification.label.group.ActivityStream=Activity Stream +UINotification.label.group.Other=Other ############################################################################# # DigestPlugin # ############################################################################# -Notification.subject.DigestDailyPlugin=Suas atualiza\u00E7\u00F5es de $PORTAL_NAME para hoje -Notification.subject.DigestWeeklyPlugin=Suas atualiza\u00E7\u00F5es de $PORTAL_NAME para esta semana +Notification.subject.DigestDailyPlugin=Your $PORTAL_NAME updates for today +Notification.subject.DigestWeeklyPlugin=Your $PORTAL_NAME updates for this week -Notification.title.DigestDailyPlugin=Suas atualiza\u00E7\u00F5es de {0} para hoje -Notification.title.DigestWeeklyPlugin=Suas atualiza\u00E7\u00F5es de {0} para esta semana +Notification.title.DigestDailyPlugin=Your {0} updates for today +Notification.title.DigestWeeklyPlugin=Your {0} updates for this week -Notification.message.DigestProvider=Aqui \u00E9 o que est\u00E1 acontecendo em {0} +Notification.message.DigestProvider=Here's what's been happening in {0} -Notification.label.Today=hoje -Notification.label.ThisWeek=esta semana +Notification.label.Today=today +Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=Oi -Notification.label.ClickHere=clique aqui +Notification.label.SayHello=Hi +Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform -Notification.footer.DigestProvider=Se voc\u00EA n\u00E3o deseja receber tais notifica\u00E7\u00F5es, {0} altere suas configura\u00E7\u00F5es de notifica\u00E7\u00E3o. +Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_ru.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_ru.properties index ebb4f8067f..349ac1e66a 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_ru.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_ru.properties @@ -1,25 +1,25 @@ -UINotification.label.group.General=\u041E\u0431\u0449\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 +UINotification.label.group.General=General UINotification.label.group.Connections=\u0421\u043F\u0438\u0441\u043E\u043A \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043E\u0432 UINotification.label.group.Spaces=\u041E\u0431\u043B\u0430\u0441\u0442\u0438 UINotification.label.group.ActivityStream=\u041B\u0435\u043D\u0442\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0438 -UINotification.label.group.Other=\u0414\u0440\u0443\u0433\u0438\u0435 +UINotification.label.group.Other=Other ############################################################################# # DigestPlugin # ############################################################################# -Notification.subject.DigestDailyPlugin=\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F $PORTAL_NAME \u0437\u0430 \u0441\u0435\u0433\u043E\u0434\u043D\u044F -Notification.subject.DigestWeeklyPlugin=\u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F $PORTAL_NAME \u0437\u0430 \u043D\u0435\u0434\u0435\u043B\u044E +Notification.subject.DigestDailyPlugin=Your $PORTAL_NAME updates for today +Notification.subject.DigestWeeklyPlugin=Your $PORTAL_NAME updates for this week -Notification.title.DigestDailyPlugin=\u0423 \u0432\u0430\u0441 {0} \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439 \u0437\u0430 \u0441\u0435\u0433\u043E\u0434\u043D\u044F -Notification.title.DigestWeeklyPlugin=\u0423 \u0432\u0430\u0441 {0} \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0439 \u0437\u0430 \u043D\u0435\u0434\u0435\u043B\u044E +Notification.title.DigestDailyPlugin=Your {0} updates for today +Notification.title.DigestWeeklyPlugin=Your {0} updates for this week -Notification.message.DigestProvider=\u0427\u0442\u043E \u043D\u043E\u0432\u043E\u0433\u043E \u0432 {0} +Notification.message.DigestProvider=Here's what's been happening in {0} -Notification.label.Today=\u0441\u0435\u0433\u043E\u0434\u043D\u044F -Notification.label.ThisWeek=\u043D\u0430 \u044D\u0442\u043E\u0439 \u043D\u0435\u0434\u0435\u043B\u0435 +Notification.label.Today=today +Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=\u041F\u0440\u0438\u0432\u0435\u0442 -Notification.label.ClickHere=\u041D\u0430\u0436\u043C\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044C +Notification.label.SayHello=Hi +Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform -Notification.footer.DigestProvider=\u0435\u0441\u043B\u0438 \u0432\u044B \u043D\u0435 \u0445\u043E\u0442\u0438\u0442\u0435 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0441\u0442\u043E\u043B\u044C\u043A\u043E \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0439, {0} \u0447\u0442\u043E\u0431\u044B \u0438\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0439. +Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_sq.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_sq.properties index e7c8fcb2b5..b74ea210a8 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_sq.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_sq.properties @@ -1,25 +1,25 @@ -UINotification.label.group.General=crwdns6819514:0crwdne6819514:0 -UINotification.label.group.Connections=crwdns6819515:0crwdne6819515:0 -UINotification.label.group.Spaces=crwdns6819516:0crwdne6819516:0 -UINotification.label.group.ActivityStream=crwdns6819517:0crwdne6819517:0 -UINotification.label.group.Other=crwdns6819518:0crwdne6819518:0 +UINotification.label.group.General=crwdns6794586:0crwdne6794586:0 +UINotification.label.group.Connections=crwdns6794587:0crwdne6794587:0 +UINotification.label.group.Spaces=crwdns6794588:0crwdne6794588:0 +UINotification.label.group.ActivityStream=crwdns6794589:0crwdne6794589:0 +UINotification.label.group.Other=crwdns6794590:0crwdne6794590:0 ############################################################################# # DigestPlugin # ############################################################################# -Notification.subject.DigestDailyPlugin=crwdns6819519:0crwdne6819519:0 -Notification.subject.DigestWeeklyPlugin=crwdns6819520:0crwdne6819520:0 +Notification.subject.DigestDailyPlugin=crwdns6794591:0crwdne6794591:0 +Notification.subject.DigestWeeklyPlugin=crwdns6794592:0crwdne6794592:0 -Notification.title.DigestDailyPlugin=crwdns6819521:0{0}crwdne6819521:0 -Notification.title.DigestWeeklyPlugin=crwdns6819522:0{0}crwdne6819522:0 +Notification.title.DigestDailyPlugin=crwdns6794593:0{0}crwdne6794593:0 +Notification.title.DigestWeeklyPlugin=crwdns6794594:0{0}crwdne6794594:0 -Notification.message.DigestProvider=crwdns6819523:0{0}crwdne6819523:0 +Notification.message.DigestProvider=crwdns6794595:0{0}crwdne6794595:0 -Notification.label.Today=crwdns6819524:0crwdne6819524:0 -Notification.label.ThisWeek=crwdns6819525:0crwdne6819525:0 -Notification.label.Daily=crwdns6819526:0crwdne6819526:0 -Notification.label.Weekly=crwdns6819527:0crwdne6819527:0 -Notification.label.SayHello=crwdns6819528:0crwdne6819528:0 -Notification.label.ClickHere=crwdns6819529:0crwdne6819529:0 -Notification.label.CompanyName=crwdns6819530:0crwdne6819530:0 -Notification.footer.DigestProvider=crwdns6819531:0{0}crwdne6819531:0 +Notification.label.Today=crwdns6794596:0crwdne6794596:0 +Notification.label.ThisWeek=crwdns6794597:0crwdne6794597:0 +Notification.label.Daily=crwdns6794598:0crwdne6794598:0 +Notification.label.Weekly=crwdns6794599:0crwdne6794599:0 +Notification.label.SayHello=crwdns6794600:0crwdne6794600:0 +Notification.label.ClickHere=crwdns6794601:0crwdne6794601:0 +Notification.label.CompanyName=crwdns6794602:0crwdne6794602:0 +Notification.footer.DigestProvider=crwdns6794603:0{0}crwdne6794603:0 diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_tr.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_tr.properties index 2b6643aabc..5bf3349a7d 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_tr.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_tr.properties @@ -1,25 +1,25 @@ -UINotification.label.group.General=Genel +UINotification.label.group.General=General UINotification.label.group.Connections=Ba\u011Flant\u0131lar UINotification.label.group.Spaces=Alanlar UINotification.label.group.ActivityStream=Etkinlik Ak\u0131\u015F\u0131 -UINotification.label.group.Other=Di\u011Fer +UINotification.label.group.Other=Other ############################################################################# # DigestPlugin # ############################################################################# -Notification.subject.DigestDailyPlugin=Senin i\u00E7in bug\u00FCnk\u00FC $PORTAL_NAME g\u00FCncellemeleri -Notification.subject.DigestWeeklyPlugin=Senin i\u00E7in bu haftaki $PORTAL_NAME g\u00FCncellemeleri +Notification.subject.DigestDailyPlugin=Your $PORTAL_NAME updates for today +Notification.subject.DigestWeeklyPlugin=Your $PORTAL_NAME updates for this week -Notification.title.DigestDailyPlugin=Senin i\u00E7in bug\u00FCnk\u00FC {0} g\u00FCncellemeleri -Notification.title.DigestWeeklyPlugin=Senin i\u00E7in bu haftaki {0} g\u00FCncellemeleri +Notification.title.DigestDailyPlugin=Your {0} updates for today +Notification.title.DigestWeeklyPlugin=Your {0} updates for this week -Notification.message.DigestProvider={0} da olanlar +Notification.message.DigestProvider=Here's what's been happening in {0} -Notification.label.Today=bug\u00FCn -Notification.label.ThisWeek=bu hafta +Notification.label.Today=today +Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=Merhaba -Notification.label.ClickHere=buraya t\u0131klay\u0131n +Notification.label.SayHello=Hi +Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform -Notification.footer.DigestProvider={0} bu gibi bildirileri almak istemiyorsan\u0131z, bildiri ayarlar\u0131n\u0131 de\u011Fi\u015Ftireblirsiz. +Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_zh_CN.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_zh_CN.properties index 37c22d5f39..15daa9c98f 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_zh_CN.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_zh_CN.properties @@ -1,25 +1,25 @@ -UINotification.label.group.General=\u5E38\u89C4 +UINotification.label.group.General=General UINotification.label.group.Connections=\u8054\u7CFB\u4EBA UINotification.label.group.Spaces=\u7A7A\u95F4 UINotification.label.group.ActivityStream=\u6D3B\u52A8\u6D41 -UINotification.label.group.Other=\u5176\u4ED6 +UINotification.label.group.Other=Other ############################################################################# # DigestPlugin # ############################################################################# -Notification.subject.DigestDailyPlugin=\u60A8\u4ECA\u5929\u7684 $PORTAL_NAME \u66F4\u65B0 -Notification.subject.DigestWeeklyPlugin=\u4F60\u8FD9\u5468\u7684 $PORTAL_NAME \u66F4\u65B0 +Notification.subject.DigestDailyPlugin=Your $PORTAL_NAME updates for today +Notification.subject.DigestWeeklyPlugin=Your $PORTAL_NAME updates for this week -Notification.title.DigestDailyPlugin=\u60A8\u4ECA\u65E5\u7684 {0} \u66F4\u65B0 -Notification.title.DigestWeeklyPlugin=\u4F60\u8FD9\u5468\u7684 {0} \u66F4\u65B0 +Notification.title.DigestDailyPlugin=Your {0} updates for today +Notification.title.DigestWeeklyPlugin=Your {0} updates for this week -Notification.message.DigestProvider=\u8FD9\u91CC\u662F {0} \u4E2D\u53D1\u751F\u4E86\u4EC0\u4E48 +Notification.message.DigestProvider=Here's what's been happening in {0} -Notification.label.Today=\u4ECA\u5929 -Notification.label.ThisWeek=\u8FD9\u5468 +Notification.label.Today=today +Notification.label.ThisWeek=this week Notification.label.Daily=day Notification.label.Weekly=week -Notification.label.SayHello=\u4F60\u597D -Notification.label.ClickHere=\u8BF7\u5355\u51FB\u6B64\u5904 +Notification.label.SayHello=Hi +Notification.label.ClickHere=click here Notification.label.CompanyName=eXo Platform -Notification.footer.DigestProvider=\u5982\u679C\u60A8\u4E0D\u60F3\u6536\u5230\u8FD9\u6837\u7684\u901A\u77E5\uFF0C{0} \u6765\u66F4\u6539\u60A8\u7684\u901A\u77E5\u8BBE\u7F6E\u3002 +Notification.footer.DigestProvider=If you do not want to receive such notifications, {0} to change your notification settings. diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_zh_TW.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_zh_TW.properties index 80a5cf41b0..fadc8084de 100644 --- a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_zh_TW.properties +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_zh_TW.properties @@ -17,8 +17,8 @@ Notification.message.DigestProvider=\u9019\u88E1\u767C\u751F\u4E86\u4EC0\u9EBC\u Notification.label.Today=\u4ECA\u5929 Notification.label.ThisWeek=\u9019\u4E00\u5468 -Notification.label.Daily=day -Notification.label.Weekly=week +Notification.label.Daily=\u5929 +Notification.label.Weekly=\u9031 Notification.label.SayHello=\u4F60\u597D Notification.label.ClickHere=\u9EDE\u64CA\u9019\u88E1 Notification.label.CompanyName=eXo Platform diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ar.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ar.properties index 1af8d20daa..3f5f85faa4 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ar.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ar.properties @@ -22,7 +22,7 @@ UIAddAttachment.label.Cancel=#{word.cancel} # org.exoplatform.webui.commons.UIDocumentSelector # ################################################################### UIDocumentSelector.label.new-folder=\u0645\u062C\u0644\u062F \u062C\u062F\u064A\u062F -UIDocumentSelector.label.root-folder=\u0627\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u062C\u0630\u0631 +UIDocumentSelector.label.root-folder=Root Folder UIDocumentSelector.label.require-drive=\u0642\u0645 \u0628\u0627\u062E\u062A\u064A\u0627\u0631 \u0642\u0631\u0635 \u0644\u0625\u0636\u0627\u0641\u0629 \u0645\u062C\u0644\u062F \u062C\u062F\u064A\u062F. UIDocumentSelector.label.enter-folder-name=\u0627\u0644\u0631\u062C\u0627\u0621 \u0625\u062F\u062E\u0627\u0644 \u0627\u0633\u0645 \u0644\u0644\u0645\u062C\u0644\u062F \u0627\u0644\u062C\u062F\u064A\u062F. UIDocumentSelector.label.empty-folder-name=\u0644\u0627 \u064A\u0645\u0643\u0646 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0627\u0633\u0645 \u0627\u0644\u0645\u062C\u0644\u062F \u0641\u0627\u0631\u063A\u0640\u0627. @@ -32,7 +32,7 @@ UIDocumentSelector.label.Date=\u062A\u0627\u0631\u064A\u062E UIDocumentSelector.label.Size=\u0627\u0644\u062D\u062C\u0645 UIDocumentSelector.label.Action=\u0627\u062C\u0631\u0627\u0621 UIDocumentSelector.label.NoFolderOrFile=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062C\u0644\u062F \u0623\u0648 \u0645\u0644\u0641. -UIDocumentSelector.label.NoDrive=\u0644\u0627 \u064A\u0648\u062C\u062F \u0645\u062D\u0631\u0643 \u0623\u0642\u0631\u0627\u0635. +UIDocumentSelector.label.NoDrive=There is no drive. UIDocumentSelector.label.select-drive=\u062D\u062F\u062F \u0645\u062D\u0631\u0643 \u0627\u0644\u0623\u0642\u0631\u0627\u0635 UIDocumentSelector.label.general-drives=\u0627\u0644\u0623\u0642\u0631\u0627\u0635 \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629 UIDocumentSelector.label.group-drives=\u0645\u062D\u0631\u0643\u0627\u062A \u0623\u0642\u0631\u0627\u0635 \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u0644\u0627 \u062A\u0648\u062C\u062F \u0641\u0636\ UISpaceSwitcher.title.my-space=\u0648\u064A\u0643\u064A \u062E\u0627\u0635\u0629 UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=\u0627\u0644\u0641\u0636\u0627\u0621 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ca.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ca.properties index 57dfd220a4..16ce3b9f57 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ca.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ca.properties @@ -1,15 +1,15 @@ ################################################################## # org.exoplatform.webui.commons.UISaveAttachment ################################################################## -UIPopupWindow.title.UISaveAttachment=Desa l'adjunt +UIPopupWindow.title.UISaveAttachment=Desa adjunt UIPopupWindow.title.UIAddAttachment=Adjunta un fitxer des del servidor -UISaveAttachment.label.SaveFile=Desa el fitxer al servidor +UISaveAttachment.label.SaveFile=Deseu el fitxer al servidor UISaveAttachment.label.Save=#{word.save} UISaveAttachment.label.Cancel=#{word.cancel} UISaveAttachment.msg.file-name-not-null=Es requereix el nom del fitxer. UISaveAttachment.msg.not-a-folder=L'element seleccionat no \u00E9s una carpeta. UISaveAttachment.msg.not-valid-name={0} no son admesos al nom del fitxer. -UISaveAttachment.msg.saved-successfully=El fitxer s'ha desat correctament. +UISaveAttachment.msg.saved-successfully=Fitxer s'ha desat correctament. UISaveAttachment.msg.save-file-not-allow=No t\u00E9 perm\u00EDs per desar l'arxiu aqu\u00ED. ################################################################## # org.exoplatform.webui.commons.UIAddAttachment @@ -26,14 +26,14 @@ UIDocumentSelector.label.root-folder=Carpeta arrel UIDocumentSelector.label.require-drive=Selecciona una unitat per afegir la nova carpeta. UIDocumentSelector.label.enter-folder-name=Introdu\u00EFu el nom de la nova carpeta. UIDocumentSelector.label.empty-folder-name=El nom de la carpeta no pot estar buit. -UIDocumentSelector.label.invalid-folder-name=Si us plau, introdu\u00EFu un nom de carpeta v\u00E0lid. +UIDocumentSelector.label.invalid-folder-name=Si us plau, introdu\u00EFu un nom de carpeta v\u00E0lida. UIDocumentSelector.label.Name=Nom UIDocumentSelector.label.Date=Data UIDocumentSelector.label.Size=Mida UIDocumentSelector.label.Action=Acci\u00F3 UIDocumentSelector.label.NoFolderOrFile=No hi ha cap carpeta o arxiu. UIDocumentSelector.label.NoDrive=No hi ha cap unitat. -UIDocumentSelector.label.select-drive=Seleccioneu la unitat +UIDocumentSelector.label.select-drive=Selecciona unitat UIDocumentSelector.label.general-drives=Unitats Generals UIDocumentSelector.label.group-drives=Unitats de grups UIDocumentSelector.label.personal-drives=Unitats personals @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Sense espais UISpaceSwitcher.title.my-space=El Meu Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Espai + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_cs.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_cs.properties index da2cff9936..6ff1bbc866 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_cs.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_cs.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u017D\u00E1dn\u00E9 skupiny UISpaceSwitcher.title.my-space=Moje Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Skupina + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_de.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_de.properties index 06b186075e..150c87722c 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_de.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_de.properties @@ -4,8 +4,8 @@ UIPopupWindow.title.UISaveAttachment=Anhang speichern UIPopupWindow.title.UIAddAttachment=eine Datei vom Server hinzuf\u00FCgen UISaveAttachment.label.SaveFile=eine Datei auf dem server speichern -UISaveAttachment.label.Save=#{word.save} -UISaveAttachment.label.Cancel=#{word.cancel} +UISaveAttachment.label.Save=Speichern +UISaveAttachment.label.Cancel=Abbrechen UISaveAttachment.msg.file-name-not-null=Ein Dateiname ist erforderlich. UISaveAttachment.msg.not-a-folder=Das ausgew\u00E4hlte Element ist kein Ordner. UISaveAttachment.msg.not-valid-name={0} sind in Dateinamen nicht erlaubt. @@ -16,13 +16,13 @@ UISaveAttachment.msg.save-file-not-allow=Ihnen fehlt die Berechtigung,diese Date ################################################################## UIAddAttachment.label.Attach=Anh\u00E4ngen UIAddAttachment.label.AttachLink=Verkn\u00FCpfung Anh\u00E4ngen -UIAddAttachment.label.Save=#{word.save} -UIAddAttachment.label.Cancel=#{word.cancel} +UIAddAttachment.label.Save=Speichern +UIAddAttachment.label.Cancel=Abbrechen ################################################################### # org.exoplatform.webui.commons.UIDocumentSelector # ################################################################### UIDocumentSelector.label.new-folder=Neuer Ordner -UIDocumentSelector.label.root-folder=Stammordner +UIDocumentSelector.label.root-folder=Root Folder UIDocumentSelector.label.require-drive=W\u00E4hlen Sie ein Laufwerk,um den neuen Ordner hinzuzuf\u00FCgen. UIDocumentSelector.label.enter-folder-name=Bitte geben Sie den Name des neuen Ordners ein. UIDocumentSelector.label.empty-folder-name=Der Ordnername darf nicht leer sein. @@ -70,5 +70,13 @@ UISpaceSwitcher.title.select-location=Ort ausw\u00E4hlen UISpaceSwitcher.msg.filter-spaces=R\u00E4ume filtern UISpaceSwitcher.msg.no-space=Keinen Raum gefunden UISpaceSwitcher.title.my-space=Mein Wiki -UISpaceSwitcher.title.close=#{word.close} +UISpaceSwitcher.title.close=Schliessen UISpaceSwitcher.title.space=Raum + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_el.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_el.properties index e91168881e..7ae7e709c0 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_el.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_el.properties @@ -32,7 +32,7 @@ UIDocumentSelector.label.Date=\u0397\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u UIDocumentSelector.label.Size=\u039C\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 UIDocumentSelector.label.Action=\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1 UIDocumentSelector.label.NoFolderOrFile=\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03C6\u03AC\u03BA\u03B5\u03BB\u03BF\u03B9 \u03AE \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1. -UIDocumentSelector.label.NoDrive=There is no drive. +UIDocumentSelector.label.NoDrive=\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03BC\u03BF\u03BD\u03AC\u03B4\u03B1 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7\u03C2. UIDocumentSelector.label.select-drive=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03C5\u03C4\u03B9\u03BA\u03BF\u03CD \u03C7\u03CE\u03C1\u03BF\u03C5 UIDocumentSelector.label.general-drives=\u0393\u03B5\u03BD\u03B9\u03BA\u03AD\u03C2 \u03BC\u03BF\u03BD\u03AC\u03B4\u03B5\u03C2 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7\u03C2 UIDocumentSelector.label.group-drives=\u0394\u03AF\u03C3\u03BA\u03BF\u03B9 \u039F\u03BC\u03AC\u03B4\u03B1\u03C2 @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u UISpaceSwitcher.title.my-space=To Wiki \u03BC\u03BF\u03C5 UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=\u03A7\u03CE\u03C1\u03BF\u03C2 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_es_ES.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_es_ES.properties index 49073d39c0..e8158bebe0 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_es_ES.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_es_ES.properties @@ -10,7 +10,7 @@ UISaveAttachment.msg.file-name-not-null=Se requiere el nombre de archivo. UISaveAttachment.msg.not-a-folder=El elemento seleccionado no es una carpeta. UISaveAttachment.msg.not-valid-name={0} no son permitidos en el nombre de archivo. UISaveAttachment.msg.saved-successfully=El archivo se guard\u00F3 correctamente. -UISaveAttachment.msg.save-file-not-allow=No se puede guardar el archivo aqu\u00ED. +UISaveAttachment.msg.save-file-not-allow=No le est\u00E1 permitido guardar el archivo aqu\u00ED. ################################################################## # org.exoplatform.webui.commons.UIAddAttachment ################################################################## @@ -32,18 +32,18 @@ UIDocumentSelector.label.Date=Fecha UIDocumentSelector.label.Size=Tama\u00F1o UIDocumentSelector.label.Action=Acci\u00F3n UIDocumentSelector.label.NoFolderOrFile=No hay ninguna carpeta o archivo. -UIDocumentSelector.label.NoDrive=There is no drive. +UIDocumentSelector.label.NoDrive=No hay ninguna unidad. UIDocumentSelector.label.select-drive=Seleccione unidad UIDocumentSelector.label.general-drives=Unidades generales UIDocumentSelector.label.group-drives=Unidades de grupos UIDocumentSelector.label.personal-drives=Unidades personales -UIDocumentSelector.label.new-folder-not-allow=No puede crear nueva carpeta aqu\u00ED. +UIDocumentSelector.label.new-folder-not-allow=o le est\u00E1 permitido crear un nueva carpeta aqu\u00ED. ################################################################### # org.exoplatform.webui.commons.UIUploadInput # ################################################################### UIDSUploadInput.msg.uploadFile=Subir documento UIDSUploadInput.msg.select-drive=Seleccione una unidad para cargar el archivo. -UIDSUploadInput.msg.permission-required=No puede cargar el archivo en esta carpeta. +UIDSUploadInput.msg.permission-required=No le est\u00E1 permitido cargar el archivo en esta carpeta. UIFormUploadInput.msg.upload_failed=Error al cargar. Existe una excepci\u00F3n al cargar archivo ################################################################### # org.exoplatform.webui.TimeConvertUtils # @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Sin espacios UISpaceSwitcher.title.my-space=Mi Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Espacio + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_fa.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_fa.properties index f0bf58ec4a..156bb24aea 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_fa.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_fa.properties @@ -41,7 +41,7 @@ UIDocumentSelector.label.new-folder-not-allow=\u0634\u0645\u0627 \u0645\u062C\u0 ################################################################### # org.exoplatform.webui.commons.UIUploadInput # ################################################################### -UIDSUploadInput.msg.uploadFile=\u0622\u067E\u0644\u0648\u062F \u0641\u0627\u06CC\u0644 +UIDSUploadInput.msg.uploadFile=Upload file UIDSUploadInput.msg.select-drive=\u0628\u0631\u0627\u06CC \u0622\u067E\u0644\u0648\u062F \u0641\u0627\u06CC\u0644 \u06CC\u06A9 \u062F\u0631\u0627\u06CC\u0648 \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F. UIDSUploadInput.msg.permission-required=\u0634\u0645\u0627 \u0645\u062C\u0627\u0632 \u0628\u0647 \u0622\u067E\u0644\u0648\u062F \u0627\u06CC\u0646 \u0641\u0627\u06CC\u0644 \u062F\u0631 \u0627\u06CC\u0646 \u067E\u0648\u0634\u0647 \u0646\u06CC\u0633\u062A\u06CC\u062F. UIFormUploadInput.msg.upload_failed=\u0622\u067E\u0644\u0648\u062F \u0646\u0634\u062F. \u062F\u0631 \u062D\u06CC\u0646 \u0622\u067E\u0644\u0648\u062F \u0641\u0627\u06CC\u0644 \u062E\u0637\u0627\u06CC\u06CC \u0631\u062E \u062F\u0627\u062F\u0647 \u0627\u0633\u062A @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u0641\u0636\u0627\u06CC\u06CC \u0648\u062C\u0648\u UISpaceSwitcher.title.my-space=\u0648\u06CC\u06A9\u06CC \u0645\u0646 UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=\u0641\u0636\u0627 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_fi.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_fi.properties index e6246f6e3f..83c809dfb0 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_fi.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_fi.properties @@ -22,6 +22,7 @@ UIAddAttachment.label.Cancel=#{word.cancel} # org.exoplatform.webui.commons.UIDocumentSelector # ################################################################### UIDocumentSelector.label.new-folder=New Folder +UIDocumentSelector.label.root-folder=Root Folder UIDocumentSelector.label.require-drive=Select a drive to add new folder. UIDocumentSelector.label.enter-folder-name=Please enter new folder's name. UIDocumentSelector.label.empty-folder-name=Folder's name can not be empty. @@ -31,6 +32,7 @@ UIDocumentSelector.label.Date=Date UIDocumentSelector.label.Size=Size UIDocumentSelector.label.Action=Action UIDocumentSelector.label.NoFolderOrFile=There is no folder or file. +UIDocumentSelector.label.NoDrive=There is no drive. UIDocumentSelector.label.select-drive=Select Drive UIDocumentSelector.label.general-drives=General Drives UIDocumentSelector.label.group-drives=Group Drives @@ -39,7 +41,7 @@ UIDocumentSelector.label.new-folder-not-allow=You are not allowed to create a ne ################################################################### # org.exoplatform.webui.commons.UIUploadInput # ################################################################### -UIDSUploadInput.msg.uploadFile=Upload file. +UIDSUploadInput.msg.uploadFile=Upload file UIDSUploadInput.msg.select-drive=Select a drive to upload file. UIDSUploadInput.msg.permission-required=You are not allowed to upload the file to this folder. UIFormUploadInput.msg.upload_failed=Upload failed. There is an exception when uploading a file @@ -47,20 +49,20 @@ UIFormUploadInput.msg.upload_failed=Upload failed. There is an exception when up # org.exoplatform.webui.TimeConvertUtils # ################################################################### TimeConvert.type.JUSTNOW=Just Now -TimeConvert.type.MINUTE=minute ago -TimeConvert.type.MINUTES=minutes ago -TimeConvert.type.HOUR=hour ago -TimeConvert.type.HOURS=hours ago -TimeConvert.type.DAY=day ago -TimeConvert.type.DAYS=days ago -TimeConvert.type.WEEK=week ago -TimeConvert.type.WEEKS=weeks ago -TimeConvert.type.MONTH=month ago -TimeConvert.type.MONTHS=months ago -TimeConvert.type.YEAR=year ago -TimeConvert.type.YEARS=years ago -TimeConvert.type.DECADE=decade ago -TimeConvert.type.DECADES=decades ago +TimeConvert.type.MINUTE={0} minute ago +TimeConvert.type.MINUTES={0} minutes ago +TimeConvert.type.HOUR={0} hour ago +TimeConvert.type.HOURS={0} hours ago +TimeConvert.type.DAY={0} day ago +TimeConvert.type.DAYS={0} days ago +TimeConvert.type.WEEK={0} week ago +TimeConvert.type.WEEKS={0} weeks ago +TimeConvert.type.MONTH={0} month ago +TimeConvert.type.MONTHS={0} months ago +TimeConvert.type.YEAR={0} year ago +TimeConvert.type.YEARS={0} years ago +TimeConvert.type.DECADE={0} decade ago +TimeConvert.type.DECADES={0} decades ago ############################################################################# #UISpaceSwitcher ############################################################################# @@ -70,3 +72,11 @@ UISpaceSwitcher.msg.no-space=No Spaces UISpaceSwitcher.title.my-space=My Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Space + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_fr.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_fr.properties index a6cfcecf67..1e572b5eaf 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_fr.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_fr.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Aucun Espace UISpaceSwitcher.title.my-space=Mon Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Espace + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_it.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_it.properties index 2dcacde011..0f99080f7b 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_it.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_it.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Nessun Spazio UISpaceSwitcher.title.my-space=Il mio Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Spazio + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ja.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ja.properties index 73267d8199..c3ae504866 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ja.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ja.properties @@ -41,7 +41,7 @@ UIDocumentSelector.label.new-folder-not-allow=\u3053\u3053\u3067\u65B0\u3057\u30 ################################################################### # org.exoplatform.webui.commons.UIUploadInput # ################################################################### -UIDSUploadInput.msg.uploadFile=\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9 +UIDSUploadInput.msg.uploadFile=Upload file UIDSUploadInput.msg.select-drive=\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u30C9\u30E9\u30A4\u30D6\u3092\u9078\u629E UIDSUploadInput.msg.permission-required=\u3053\u306E\u30D5\u30A9\u30EB\u30C0\u30FC\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093 UIFormUploadInput.msg.upload_failed=\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u3068\u304D\u306B\u3001\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u30B9\u30DA\u30FC\u30B9\u304C\u5B58\u5728\u3057\u3 UISpaceSwitcher.title.my-space=Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=\u30B9\u30DA\u30FC\u30B9 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_lt.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_lt.properties index 79a3a0a057..a5f05bfdd0 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_lt.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_lt.properties @@ -22,7 +22,7 @@ UIAddAttachment.label.Cancel=#{word.cancel} # org.exoplatform.webui.commons.UIDocumentSelector # ################################################################### UIDocumentSelector.label.new-folder=Naujas aplankas -UIDocumentSelector.label.root-folder=Pagrindinis aplankas +UIDocumentSelector.label.root-folder=Root Folder UIDocumentSelector.label.require-drive=Pasirinkite disk\u0105 kuriame norite prid\u0117ti nauj\u0105 aplank\u0105. UIDocumentSelector.label.enter-folder-name=Pra\u0161ome \u012Fra\u0161yti naujo aplanko pavadinim\u0105. UIDocumentSelector.label.empty-folder-name=Aplanko pavadinimas negali b\u016Bti tu\u0161\u010Dias. @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=N\u0117ra erdvi\u0173 UISpaceSwitcher.title.my-space=Mano Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Erdv\u0117 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_no.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_no.properties index a7267d50aa..a217fee3f1 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_no.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_no.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Ingen Fellesskap UISpaceSwitcher.title.my-space=Min Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Fellesskap + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_pl.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_pl.properties index 07c221b73a..60fa8e6940 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_pl.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_pl.properties @@ -32,7 +32,7 @@ UIDocumentSelector.label.Date=Data UIDocumentSelector.label.Size=Rozmiar UIDocumentSelector.label.Action=Dzia\u0142anie UIDocumentSelector.label.NoFolderOrFile=Brak plik\u00F3w i katalog\u00F3w. -UIDocumentSelector.label.NoDrive=Brak nap\u0119du. +UIDocumentSelector.label.NoDrive=There is no drive. UIDocumentSelector.label.select-drive=Wybierz dysk UIDocumentSelector.label.general-drives=Dyski og\u00F3lne UIDocumentSelector.label.group-drives=Dyski grupowe @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Brak Przestrzeni UISpaceSwitcher.title.my-space=M\u00F3j Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Przestrze\u0144 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_pt_BR.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_pt_BR.properties index d448111ca1..d4f6ccad56 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_pt_BR.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_pt_BR.properties @@ -22,7 +22,7 @@ UIAddAttachment.label.Cancel=#{word.cancel} # org.exoplatform.webui.commons.UIDocumentSelector # ################################################################### UIDocumentSelector.label.new-folder=Nova pasta -UIDocumentSelector.label.root-folder=Pasta Raiz +UIDocumentSelector.label.root-folder=Root Folder UIDocumentSelector.label.require-drive=Selecione uma unidade para adicionar a nova pasta. UIDocumentSelector.label.enter-folder-name=Por favor insira o nome da nova pasta. UIDocumentSelector.label.empty-folder-name=Nome da pasta n\u00E3o pode ser vazio. @@ -41,7 +41,7 @@ UIDocumentSelector.label.new-folder-not-allow=Voc\u00EA n\u00E3o tem permiss\u00 ################################################################### # org.exoplatform.webui.commons.UIUploadInput # ################################################################### -UIDSUploadInput.msg.uploadFile=Anexar arquivo +UIDSUploadInput.msg.uploadFile=Upload file UIDSUploadInput.msg.select-drive=Selecione uma unidade para carregar o arquivo. UIDSUploadInput.msg.permission-required=Voc\u00EA n\u00E3o tem permiss\u00E3o para carregar arquivos para esta pasta. UIFormUploadInput.msg.upload_failed=Falha ao carregar. H\u00E1 uma exce\u00E7\u00E3o ao carregar arquivo @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=N\u00E3o h\u00E1 espa\u00E7os UISpaceSwitcher.title.my-space=Meu Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Espa\u00E7o + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ro.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ro.properties index 7fbd5c136f..b0856d461d 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ro.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ro.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=F\u0103r\u0103 spa\u021Bii UISpaceSwitcher.title.my-space=Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Spa\u0163iu + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ru.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ru.properties index 6f542f4d6b..470a134bd3 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ru.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ru.properties @@ -22,7 +22,7 @@ UIAddAttachment.label.Cancel=#{word.cancel} # org.exoplatform.webui.commons.UIDocumentSelector # ################################################################### UIDocumentSelector.label.new-folder=\u041D\u043E\u0432\u0430\u044F \u043F\u0430\u043F\u043A\u0430 -UIDocumentSelector.label.root-folder=\u041A\u043E\u0440\u043D\u0435\u0432\u0430\u044F \u043F\u0430\u043F\u043A\u0430 +UIDocumentSelector.label.root-folder=Root Folder UIDocumentSelector.label.require-drive=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0438\u0441\u043A, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u043F\u0430\u043F\u043A\u0443. UIDocumentSelector.label.enter-folder-name=\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043C\u044F \u043D\u043E\u0432\u043E\u0439 \u043F\u0430\u043F\u043A\u0438. UIDocumentSelector.label.empty-folder-name=\u0418\u043C\u044F \u043F\u0430\u043F\u043A\u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0443\u0441\u0442\u044B\u043C. @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u041D\u0435\u0442 \u041E\u0431\u043B\u0430\u0441\u UISpaceSwitcher.title.my-space=\u041C\u043E\u044F \u0412\u0438\u043A\u0438-\u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=\u041E\u0431\u043B\u0430\u0441\u0442\u044C + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_sq.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_sq.properties index 97c8e79aec..32d63d64ff 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_sq.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_sq.properties @@ -1,74 +1,82 @@ ################################################################## # org.exoplatform.webui.commons.UISaveAttachment ################################################################## -UIPopupWindow.title.UISaveAttachment=crwdns6819458:0crwdne6819458:0 -UIPopupWindow.title.UIAddAttachment=crwdns6819459:0crwdne6819459:0 -UISaveAttachment.label.SaveFile=crwdns6819460:0crwdne6819460:0 -UISaveAttachment.label.Save=crwdns6819461:0{word.save}crwdne6819461:0 -UISaveAttachment.label.Cancel=crwdns6819462:0{word.cancel}crwdne6819462:0 -UISaveAttachment.msg.file-name-not-null=crwdns6819463:0crwdne6819463:0 -UISaveAttachment.msg.not-a-folder=crwdns6819464:0crwdne6819464:0 -UISaveAttachment.msg.not-valid-name=crwdns6819465:0{0}crwdne6819465:0 -UISaveAttachment.msg.saved-successfully=crwdns6819466:0crwdne6819466:0 -UISaveAttachment.msg.save-file-not-allow=crwdns6819467:0crwdne6819467:0 +UIPopupWindow.title.UISaveAttachment=crwdns6789617:0crwdne6789617:0 +UIPopupWindow.title.UIAddAttachment=crwdns6789618:0crwdne6789618:0 +UISaveAttachment.label.SaveFile=crwdns6789619:0crwdne6789619:0 +UISaveAttachment.label.Save=crwdns6789620:0{word.save}crwdne6789620:0 +UISaveAttachment.label.Cancel=crwdns6789621:0{word.cancel}crwdne6789621:0 +UISaveAttachment.msg.file-name-not-null=crwdns6789622:0crwdne6789622:0 +UISaveAttachment.msg.not-a-folder=crwdns6789623:0crwdne6789623:0 +UISaveAttachment.msg.not-valid-name=crwdns6789624:0{0}crwdne6789624:0 +UISaveAttachment.msg.saved-successfully=crwdns6789625:0crwdne6789625:0 +UISaveAttachment.msg.save-file-not-allow=crwdns6789626:0crwdne6789626:0 ################################################################## # org.exoplatform.webui.commons.UIAddAttachment ################################################################## -UIAddAttachment.label.Attach=crwdns6819468:0crwdne6819468:0 -UIAddAttachment.label.AttachLink=crwdns6819469:0crwdne6819469:0 -UIAddAttachment.label.Save=crwdns6819470:0{word.save}crwdne6819470:0 -UIAddAttachment.label.Cancel=crwdns6819471:0{word.cancel}crwdne6819471:0 +UIAddAttachment.label.Attach=crwdns6789627:0crwdne6789627:0 +UIAddAttachment.label.AttachLink=crwdns6789628:0crwdne6789628:0 +UIAddAttachment.label.Save=crwdns6789629:0{word.save}crwdne6789629:0 +UIAddAttachment.label.Cancel=crwdns6789630:0{word.cancel}crwdne6789630:0 ################################################################### # org.exoplatform.webui.commons.UIDocumentSelector # ################################################################### -UIDocumentSelector.label.new-folder=crwdns6819472:0crwdne6819472:0 -UIDocumentSelector.label.root-folder=crwdns6819473:0crwdne6819473:0 -UIDocumentSelector.label.require-drive=crwdns6819474:0crwdne6819474:0 -UIDocumentSelector.label.enter-folder-name=crwdns6819475:0crwdne6819475:0 -UIDocumentSelector.label.empty-folder-name=crwdns6819476:0crwdne6819476:0 -UIDocumentSelector.label.invalid-folder-name=crwdns6819477:0crwdne6819477:0 -UIDocumentSelector.label.Name=crwdns6819478:0crwdne6819478:0 -UIDocumentSelector.label.Date=crwdns6819479:0crwdne6819479:0 -UIDocumentSelector.label.Size=crwdns6819480:0crwdne6819480:0 -UIDocumentSelector.label.Action=crwdns6819481:0crwdne6819481:0 -UIDocumentSelector.label.NoFolderOrFile=crwdns6819482:0crwdne6819482:0 -UIDocumentSelector.label.NoDrive=crwdns6819483:0crwdne6819483:0 -UIDocumentSelector.label.select-drive=crwdns6819484:0crwdne6819484:0 -UIDocumentSelector.label.general-drives=crwdns6819485:0crwdne6819485:0 -UIDocumentSelector.label.group-drives=crwdns6819486:0crwdne6819486:0 -UIDocumentSelector.label.personal-drives=crwdns6819487:0crwdne6819487:0 -UIDocumentSelector.label.new-folder-not-allow=crwdns6819488:0crwdne6819488:0 +UIDocumentSelector.label.new-folder=crwdns6789631:0crwdne6789631:0 +UIDocumentSelector.label.root-folder=crwdns6796310:0crwdne6796310:0 +UIDocumentSelector.label.require-drive=crwdns6789632:0crwdne6789632:0 +UIDocumentSelector.label.enter-folder-name=crwdns6789633:0crwdne6789633:0 +UIDocumentSelector.label.empty-folder-name=crwdns6789634:0crwdne6789634:0 +UIDocumentSelector.label.invalid-folder-name=crwdns6789635:0crwdne6789635:0 +UIDocumentSelector.label.Name=crwdns6789636:0crwdne6789636:0 +UIDocumentSelector.label.Date=crwdns6789637:0crwdne6789637:0 +UIDocumentSelector.label.Size=crwdns6789638:0crwdne6789638:0 +UIDocumentSelector.label.Action=crwdns6789639:0crwdne6789639:0 +UIDocumentSelector.label.NoFolderOrFile=crwdns6789640:0crwdne6789640:0 +UIDocumentSelector.label.NoDrive=crwdns6812525:0crwdne6812525:0 +UIDocumentSelector.label.select-drive=crwdns6789641:0crwdne6789641:0 +UIDocumentSelector.label.general-drives=crwdns6789642:0crwdne6789642:0 +UIDocumentSelector.label.group-drives=crwdns6789643:0crwdne6789643:0 +UIDocumentSelector.label.personal-drives=crwdns6789644:0crwdne6789644:0 +UIDocumentSelector.label.new-folder-not-allow=crwdns6789645:0crwdne6789645:0 ################################################################### # org.exoplatform.webui.commons.UIUploadInput # ################################################################### -UIDSUploadInput.msg.uploadFile=crwdns6819489:0crwdne6819489:0 -UIDSUploadInput.msg.select-drive=crwdns6819490:0crwdne6819490:0 -UIDSUploadInput.msg.permission-required=crwdns6819491:0crwdne6819491:0 -UIFormUploadInput.msg.upload_failed=crwdns6819492:0crwdne6819492:0 +UIDSUploadInput.msg.uploadFile=crwdns6812527:0crwdne6812527:0 +UIDSUploadInput.msg.select-drive=crwdns6789647:0crwdne6789647:0 +UIDSUploadInput.msg.permission-required=crwdns6789648:0crwdne6789648:0 +UIFormUploadInput.msg.upload_failed=crwdns6789649:0crwdne6789649:0 ################################################################### # org.exoplatform.webui.TimeConvertUtils # ################################################################### -TimeConvert.type.JUSTNOW=crwdns6819493:0crwdne6819493:0 -TimeConvert.type.MINUTE=crwdns6819494:0{0}crwdne6819494:0 -TimeConvert.type.MINUTES=crwdns6819495:0{0}crwdne6819495:0 -TimeConvert.type.HOUR=crwdns6819496:0{0}crwdne6819496:0 -TimeConvert.type.HOURS=crwdns6819497:0{0}crwdne6819497:0 -TimeConvert.type.DAY=crwdns6819498:0{0}crwdne6819498:0 -TimeConvert.type.DAYS=crwdns6819499:0{0}crwdne6819499:0 -TimeConvert.type.WEEK=crwdns6819500:0{0}crwdne6819500:0 -TimeConvert.type.WEEKS=crwdns6819501:0{0}crwdne6819501:0 -TimeConvert.type.MONTH=crwdns6819502:0{0}crwdne6819502:0 -TimeConvert.type.MONTHS=crwdns6819503:0{0}crwdne6819503:0 -TimeConvert.type.YEAR=crwdns6819504:0{0}crwdne6819504:0 -TimeConvert.type.YEARS=crwdns6819505:0{0}crwdne6819505:0 -TimeConvert.type.DECADE=crwdns6819506:0{0}crwdne6819506:0 -TimeConvert.type.DECADES=crwdns6819507:0{0}crwdne6819507:0 +TimeConvert.type.JUSTNOW=crwdns6789650:0crwdne6789650:0 +TimeConvert.type.MINUTE=crwdns6789651:0{0}crwdne6789651:0 +TimeConvert.type.MINUTES=crwdns6789652:0{0}crwdne6789652:0 +TimeConvert.type.HOUR=crwdns6789653:0{0}crwdne6789653:0 +TimeConvert.type.HOURS=crwdns6789654:0{0}crwdne6789654:0 +TimeConvert.type.DAY=crwdns6789655:0{0}crwdne6789655:0 +TimeConvert.type.DAYS=crwdns6789656:0{0}crwdne6789656:0 +TimeConvert.type.WEEK=crwdns6789657:0{0}crwdne6789657:0 +TimeConvert.type.WEEKS=crwdns6789658:0{0}crwdne6789658:0 +TimeConvert.type.MONTH=crwdns6789659:0{0}crwdne6789659:0 +TimeConvert.type.MONTHS=crwdns6789660:0{0}crwdne6789660:0 +TimeConvert.type.YEAR=crwdns6789661:0{0}crwdne6789661:0 +TimeConvert.type.YEARS=crwdns6789662:0{0}crwdne6789662:0 +TimeConvert.type.DECADE=crwdns6789663:0{0}crwdne6789663:0 +TimeConvert.type.DECADES=crwdns6789664:0{0}crwdne6789664:0 ############################################################################# #UISpaceSwitcher ############################################################################# -UISpaceSwitcher.title.select-location=crwdns6819508:0crwdne6819508:0 -UISpaceSwitcher.msg.filter-spaces=crwdns6819509:0crwdne6819509:0 -UISpaceSwitcher.msg.no-space=crwdns6819510:0crwdne6819510:0 -UISpaceSwitcher.title.my-space=crwdns6819511:0crwdne6819511:0 -UISpaceSwitcher.title.close=crwdns6819512:0{word.close}crwdne6819512:0 -UISpaceSwitcher.title.space=crwdns6819513:0crwdne6819513:0 +UISpaceSwitcher.title.select-location=crwdns6789665:0crwdne6789665:0 +UISpaceSwitcher.msg.filter-spaces=crwdns6789666:0crwdne6789666:0 +UISpaceSwitcher.msg.no-space=crwdns6789667:0crwdne6789667:0 +UISpaceSwitcher.title.my-space=crwdns6789668:0crwdne6789668:0 +UISpaceSwitcher.title.close=crwdns6789669:0{word.close}crwdne6789669:0 +UISpaceSwitcher.title.space=crwdns6789670:0crwdne6789670:0 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_sv_SE.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_sv_SE.properties index b8dab4d5a1..6f6f68530a 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_sv_SE.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_sv_SE.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Inga webb-ytor UISpaceSwitcher.title.my-space=Min Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Webb-yta + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_tr.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_tr.properties index 80cd8c5741..37bc946214 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_tr.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_tr.properties @@ -22,7 +22,7 @@ UIAddAttachment.label.Cancel=#{word.cancel} # org.exoplatform.webui.commons.UIDocumentSelector # ################################################################### UIDocumentSelector.label.new-folder=Yeni Klas\u00F6r -UIDocumentSelector.label.root-folder=K\u00F6k Klas\u00F6r\u00FC +UIDocumentSelector.label.root-folder=Root Folder UIDocumentSelector.label.require-drive=Yeni klas\u00F6r eklemek i\u00E7in bir s\u00FCr\u00FCc\u00FC se\u00E7in. UIDocumentSelector.label.enter-folder-name=L\u00FCtfen yeni klas\u00F6r\u00FCn ad\u0131n\u0131 girin. UIDocumentSelector.label.empty-folder-name=Klas\u00F6r ad\u0131 bo\u015F olamaz. @@ -53,7 +53,7 @@ TimeConvert.type.MINUTE={0} dakika \u00F6nce TimeConvert.type.MINUTES={0} dakika \u00F6nce TimeConvert.type.HOUR={0} saat \u00F6nce TimeConvert.type.HOURS={0} saat \u00F6nce -TimeConvert.type.DAY={0} g\u00FCn \u00F6nce +TimeConvert.type.DAY={0} day ago TimeConvert.type.DAYS={0} g\u00FCn \u00F6nce TimeConvert.type.WEEK={0} hafta \u00F6nce TimeConvert.type.WEEKS={0} hafta \u00F6nce @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Alan Yok UISpaceSwitcher.title.my-space=Wikim UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Alan + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_uk.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_uk.properties index 5cfae09416..0683dea58e 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_uk.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_uk.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u041D\u0435\u043C\u0430\u0454 \u041E\u0431\u043B\u UISpaceSwitcher.title.my-space=\u041C\u043E\u044F \u0432\u0456\u043A\u0456-\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0430 UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=\u041E\u0431\u043B\u0430\u0441\u0442\u044C + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_vi.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_vi.properties index dd90399545..5b6885d7bc 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_vi.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_vi.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=Kh\u00F4ng c\u00F3 Kh\u00F4ng gian Nh\u00F3m n\u00E UISpaceSwitcher.title.my-space=Wiki C\u00E1 nh\u00E2n UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=Kh\u00F4ng gian Nh\u00F3m + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_zh_CN.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_zh_CN.properties index c9f47f4ddb..16234997ce 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_zh_CN.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_zh_CN.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u4E0D\u80FD\u6709\u7A7A\u683C UISpaceSwitcher.title.my-space=\u6211\u7684 Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=\u7A7A\u95F4 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_zh_TW.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_zh_TW.properties index 14e547dc82..cca1bd58f5 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_zh_TW.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_zh_TW.properties @@ -72,3 +72,11 @@ UISpaceSwitcher.msg.no-space=\u6C92\u6709\u7A7A\u9593 UISpaceSwitcher.title.my-space=\u6211\u7684 Wiki UISpaceSwitcher.title.close=#{word.close} UISpaceSwitcher.title.space=\u7A7A\u9593 + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Replace +DocumentAuto.label.or=or +DocumentAuto.label.cancel=Cancel From 71d2a72db858c20088ae1c7905c9d1e447c2f862 Mon Sep 17 00:00:00 2001 From: toannh Date: Thu, 5 Nov 2015 08:53:35 +0700 Subject: [PATCH 27/46] Update translation W45 --- .../resources/locale/commons/Commons_ar.properties | 8 ++++---- .../resources/locale/commons/Commons_ca.properties | 8 ++++---- .../resources/locale/commons/Commons_cs.properties | 8 ++++---- .../resources/locale/commons/Commons_de.properties | 8 ++++---- .../resources/locale/commons/Commons_el.properties | 8 ++++---- .../locale/commons/Commons_es_ES.properties | 8 ++++---- .../resources/locale/commons/Commons_fa.properties | 8 ++++---- .../resources/locale/commons/Commons_fr.properties | 8 ++++---- .../resources/locale/commons/Commons_it.properties | 8 ++++---- .../resources/locale/commons/Commons_ja.properties | 8 ++++---- .../resources/locale/commons/Commons_lt.properties | 8 ++++---- .../resources/locale/commons/Commons_no.properties | 8 ++++---- .../resources/locale/commons/Commons_pl.properties | 8 ++++---- .../locale/commons/Commons_pt_BR.properties | 8 ++++---- .../resources/locale/commons/Commons_ro.properties | 8 ++++---- .../resources/locale/commons/Commons_ru.properties | 8 ++++---- .../resources/locale/commons/Commons_sq.properties | 12 ++++++------ .../locale/commons/Commons_sv_SE.properties | 8 ++++---- .../resources/locale/commons/Commons_tr.properties | 8 ++++---- .../resources/locale/commons/Commons_uk.properties | 8 ++++---- .../resources/locale/commons/Commons_vi.properties | 8 ++++---- .../locale/commons/Commons_zh_CN.properties | 8 ++++---- .../locale/commons/Commons_zh_TW.properties | 8 ++++---- 23 files changed, 94 insertions(+), 94 deletions(-) diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ar.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ar.properties index 3f5f85faa4..ed0c735f09 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ar.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ar.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=\u0627\u0644\u0641\u0636\u0627\u0621 # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=\u0627\u0644\u0627\u062D\u062A\u0641\u0627\u0638 \u0628\u0643\u0644\u064A\u0647\u0645\u0627 DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u062A\u0639\u0648\u064A\u0636 +DocumentAuto.label.or=\u0623\u0648 +DocumentAuto.label.cancel=\u0627\u0644\u063A\u0627\u0621 diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ca.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ca.properties index 16ce3b9f57..fb094fec5c 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ca.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ca.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Espai # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Conserva'ls ambd\u00F3s DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Substitueix +DocumentAuto.label.or=o +DocumentAuto.label.cancel=Cancel\u00B7la diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_cs.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_cs.properties index 6ff1bbc866..29707d21a6 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_cs.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_cs.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Skupina # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Zachovat ob\u011B DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Nahradit +DocumentAuto.label.or=nebo +DocumentAuto.label.cancel=Zru\u0161it diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_de.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_de.properties index 150c87722c..14f91580c5 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_de.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_de.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Raum # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Beide behalten DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Ersetzen +DocumentAuto.label.or=oder +DocumentAuto.label.cancel=Abbrechen diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_el.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_el.properties index 7ae7e709c0..789900ed3b 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_el.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_el.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=\u03A7\u03CE\u03C1\u03BF\u03C2 # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=\u0394\u03B9\u03B1\u03C4\u03AE\u03C1\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03C4\u03C9\u03BD \u03B4\u03CD\u03BF DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u0391\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 +DocumentAuto.label.or=\u03AE +DocumentAuto.label.cancel=\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7 diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_es_ES.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_es_ES.properties index e8158bebe0..9cdb07b271 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_es_ES.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_es_ES.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Espacio # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Mantenga ambas DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Reemplazar +DocumentAuto.label.or=o +DocumentAuto.label.cancel=Cancelar diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_fa.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_fa.properties index 156bb24aea..350253faee 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_fa.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_fa.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=\u0641\u0636\u0627 # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=\u0646\u06AF\u0647 \u062F\u0627\u0634\u062A\u0646 \u0647\u0631 \u062F\u0648 DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646 +DocumentAuto.label.or=\u06CC\u0627 +DocumentAuto.label.cancel=\u0627\u0646\u0635\u0631\u0627\u0641 diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_fr.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_fr.properties index 1e572b5eaf..1d76c88953 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_fr.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_fr.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Espace # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Garder les deux DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Remplacer +DocumentAuto.label.or=ou +DocumentAuto.label.cancel=Annuler diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_it.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_it.properties index 0f99080f7b..83cad1aa62 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_it.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_it.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Spazio # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Tenere entrambi DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Sostituisci +DocumentAuto.label.or=o +DocumentAuto.label.cancel=Annulla diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ja.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ja.properties index c3ae504866..f87001eeca 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ja.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ja.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=\u30B9\u30DA\u30FC\u30B9 # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=\u4E21\u65B9\u3092\u7DAD\u6301\u3057\u307E\u3059\u3002 DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u7F6E\u63DB +DocumentAuto.label.or=\u307E\u305F\u306F +DocumentAuto.label.cancel=\u30AD\u30E3\u30F3\u30BB\u30EB diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_lt.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_lt.properties index a5f05bfdd0..b6546b687f 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_lt.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_lt.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Erdv\u0117 # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Pasilikti abu DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Pakeisti +DocumentAuto.label.or=arba +DocumentAuto.label.cancel=At\u0161aukti diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_no.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_no.properties index a217fee3f1..70d0f883c1 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_no.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_no.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Fellesskap # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Behold begge DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Erstatt +DocumentAuto.label.or=eller +DocumentAuto.label.cancel=Avbryt diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_pl.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_pl.properties index 60fa8e6940..9f39aed4ae 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_pl.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_pl.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Przestrze\u0144 # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Zachowaj oba DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Zamie\u0144 +DocumentAuto.label.or=lub +DocumentAuto.label.cancel=Anuluj diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_pt_BR.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_pt_BR.properties index d4f6ccad56..cf403fe9bd 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_pt_BR.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_pt_BR.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Espa\u00E7o # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Manter os dois DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Substituir +DocumentAuto.label.or=ou +DocumentAuto.label.cancel=Cancelar diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ro.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ro.properties index b0856d461d..4f0a28b537 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ro.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ro.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Spa\u0163iu # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=P\u0103stra\u021Bi ambele DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u00CEnlocuire +DocumentAuto.label.or=sau +DocumentAuto.label.cancel=Renun\u021B\u0103 diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_ru.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_ru.properties index 470a134bd3..e1d8addfbd 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_ru.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_ru.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=\u041E\u0431\u043B\u0430\u0441\u0442\u044C # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=\u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043E\u0431\u0430 DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C +DocumentAuto.label.or=\u0438\u043B\u0438 +DocumentAuto.label.cancel=\u041E\u0442\u043C\u0435\u043D\u0430 diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_sq.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_sq.properties index 32d63d64ff..291b94caab 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_sq.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_sq.properties @@ -74,9 +74,9 @@ UISpaceSwitcher.title.close=crwdns6789669:0{word.close}crwdne6789669:0 UISpaceSwitcher.title.space=crwdns6789670:0crwdne6789670:0 # Document Auto Versioning -DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both -DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.existing=crwdns6825021:0crwdne6825021:0 +DocumentAuto.label.keepBoth=crwdns6825022:0crwdne6825022:0 +DocumentAuto.label.createVersion=crwdns6825023:0crwdne6825023:0 +DocumentAuto.label.replace=crwdns6825024:0crwdne6825024:0 +DocumentAuto.label.or=crwdns6825025:0crwdne6825025:0 +DocumentAuto.label.cancel=crwdns6825026:0crwdne6825026:0 diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_sv_SE.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_sv_SE.properties index 6f6f68530a..93b03def11 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_sv_SE.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_sv_SE.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Webb-yta # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Beh\u00E5ll b\u00E5da DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Ers\u00E4tt +DocumentAuto.label.or=eller +DocumentAuto.label.cancel=Avbryt diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_tr.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_tr.properties index 37bc946214..5c1f047596 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_tr.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_tr.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Alan # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Her ikisinide koru DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=De\u011Fi\u015Ftir +DocumentAuto.label.or=ya da +DocumentAuto.label.cancel=\u0130ptal diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_uk.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_uk.properties index 0683dea58e..3a6708210b 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_uk.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_uk.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=\u041E\u0431\u043B\u0430\u0441\u0442\u044C # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=\u0422\u0440\u0438\u043C\u0430\u0442\u0438 \u043E\u0431\u0438\u0434\u0432\u0430 DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u0417\u0430\u043C\u0456\u043D\u0438\u0442\u0438 +DocumentAuto.label.or=\u0430\u0431\u043E +DocumentAuto.label.cancel=\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438 diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_vi.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_vi.properties index 5b6885d7bc..4b51a43aed 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_vi.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_vi.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=Kh\u00F4ng gian Nh\u00F3m # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=Gi\u1EEF c\u1EA3 hai DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=Thay th\u1EBF +DocumentAuto.label.or=ho\u1EB7c +DocumentAuto.label.cancel=H\u1EE7y b\u1ECF diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_zh_CN.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_zh_CN.properties index 16234997ce..119d987d54 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_zh_CN.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_zh_CN.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=\u7A7A\u95F4 # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=\u7559\u7740\u4E24\u4E2A DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u66FF\u6362 +DocumentAuto.label.or=\u6216 +DocumentAuto.label.cancel=\u53D6\u6D88 diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_zh_TW.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_zh_TW.properties index cca1bd58f5..4a91b150c2 100644 --- a/commons-webui-component/src/main/resources/locale/commons/Commons_zh_TW.properties +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_zh_TW.properties @@ -75,8 +75,8 @@ UISpaceSwitcher.title.space=\u7A7A\u9593 # Document Auto Versioning DocumentAuto.label.existing=Existing file -DocumentAuto.label.keepBoth=Keep both +DocumentAuto.label.keepBoth=\u8A18\u4F4F\u9019\u5169\u500B DocumentAuto.label.createVersion=Create a new version -DocumentAuto.label.replace=Replace -DocumentAuto.label.or=or -DocumentAuto.label.cancel=Cancel +DocumentAuto.label.replace=\u66FF\u63DB +DocumentAuto.label.or=\u6216 +DocumentAuto.label.cancel=\u53D6\u6D88 From 8a55da35ceb0ece63b9b73eeeec32f86435c8826 Mon Sep 17 00:00:00 2001 From: thanhvc Date: Thu, 5 Nov 2015 14:35:40 +0700 Subject: [PATCH 28/46] COMMONS-426 | Digest email notification job runs very slow --- .../plugin/NotificationPluginUtils.java | 6 +- .../impl/service/NotificationServiceImpl.java | 75 ------------------- .../setting/PluginSettingServiceImpl.java | 4 +- .../impl/setting/UserSettingServiceImpl.java | 11 +-- .../settings/impl/ExoFeatureServiceImpl.java | 4 +- .../settings/impl/UserSettingServiceTest.java | 17 ++++- 6 files changed, 24 insertions(+), 93 deletions(-) diff --git a/commons-api/src/main/java/org/exoplatform/commons/api/notification/plugin/NotificationPluginUtils.java b/commons-api/src/main/java/org/exoplatform/commons/api/notification/plugin/NotificationPluginUtils.java index 4ac49847a7..a7dd893282 100644 --- a/commons-api/src/main/java/org/exoplatform/commons/api/notification/plugin/NotificationPluginUtils.java +++ b/commons-api/src/main/java/org/exoplatform/commons/api/notification/plugin/NotificationPluginUtils.java @@ -113,12 +113,12 @@ public static String getFrom(String from) { } public static String getEmailFrom() { - SettingValue mail = getSettingService().get(Context.GLOBAL, Scope.GLOBAL, NOTIFICATION_SENDER_EMAIL); + SettingValue mail = getSettingService().get(Context.GLOBAL, Scope.GLOBAL.id(null), NOTIFICATION_SENDER_EMAIL); return mail != null ? (String) mail.getValue() : System.getProperty("gatein.email.smtp.from", "noreply@exoplatform.com"); } public static String getSenderName() { - SettingValue name = getSettingService().get(Context.GLOBAL, Scope.GLOBAL, NOTIFICATION_SENDER_NAME); + SettingValue name = getSettingService().get(Context.GLOBAL, Scope.GLOBAL.id(null), NOTIFICATION_SENDER_NAME); return name != null ? (String) name.getValue() : System.getProperty("exo.notifications.portalname", "eXo"); } @@ -127,7 +127,7 @@ public static String getSenderName() { * @return */ public static String getBrandingPortalName() { - SettingValue name = getSettingService().get(Context.GLOBAL, Scope.GLOBAL, BRANDING_PORTAL_NAME); + SettingValue name = getSettingService().get(Context.GLOBAL, Scope.GLOBAL.id(null), BRANDING_PORTAL_NAME); return name != null ? (String) name.getValue() : "eXo"; } diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/service/NotificationServiceImpl.java b/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/service/NotificationServiceImpl.java index 029f6f2052..eaa2f27f2b 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/service/NotificationServiceImpl.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/service/NotificationServiceImpl.java @@ -17,7 +17,6 @@ package org.exoplatform.commons.notification.impl.service; import java.util.ArrayList; -import java.util.Calendar; import java.util.Collection; import java.util.List; import java.util.Map; @@ -44,11 +43,8 @@ import org.exoplatform.commons.notification.impl.AbstractService; import org.exoplatform.commons.notification.impl.NotificationContextImpl; import org.exoplatform.commons.utils.CommonsUtils; -import org.exoplatform.commons.utils.ListAccess; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; -import org.exoplatform.services.organization.OrganizationService; -import org.exoplatform.services.organization.User; public class NotificationServiceImpl extends AbstractService implements NotificationService { private static final Log LOG = ExoLogger.getLogger(NotificationServiceImpl.class); @@ -142,7 +138,6 @@ public void digest(NotificationContext notifContext) throws Exception { * + limit = 50 time lost: 44873ms user settings 70630ms default user settings. * + limit = 100 time lost: 26997ms user settings 60051ms default user settings. */ - List sentUsers = new ArrayList(); long startTime = System.currentTimeMillis(); int limit = 100; int offset = 0; @@ -153,7 +148,6 @@ public void digest(NotificationContext notifContext) throws Exception { } send(notifContext, userDigestSettings); offset += limit; - sentUsers.addAll(userDigestSettings); } LOG.debug("Time to run process users have settings: " + (System.currentTimeMillis() - startTime) + "ms."); long startTimeDefault = System.currentTimeMillis(); @@ -166,82 +160,13 @@ public void digest(NotificationContext notifContext) throws Exception { } sendDefault(notifContext, defaultMixinUsers, defaultConfigPlugins); offset += limit; - sentUsers.addAll(defaultMixinUsers); } - //provided the sentUser for excluding to process sending mail - //get list of user who has the isActivate = FALSE - sentUsers.addAll(this.userService.getUserSettingWithDeactivate()); - // - sendUserWithNoSetting(notifContext, defaultConfigPlugins, sentUsers); //Clear all stored message storage.removeMessageAfterSent(); LOG.debug("Time to run process users used default settings: " + (System.currentTimeMillis() - startTimeDefault) + "ms."); } - /** - * Process these users who isn't existing any setting and default mixin type in the Setting. - * Must use the Organization service to get these users and excluded sentUsers - * - * @param context - * @param defaultSetting - * @param sentUsers - * @throws Exception - */ - private void sendUserWithNoSetting(NotificationContext context, - UserSetting defaultSetting, - List sentUsers) throws Exception { - - OrganizationService organizationService = CommonsUtils.getService(OrganizationService.class); - CommonsUtils.startRequest(organizationService); - ListAccess allUsers = null; - try { - allUsers= organizationService.getUserHandler().findAllUsers(); - } finally { - CommonsUtils.endRequest(organizationService); - } - int size = allUsers.getSize(), limit = 200; - int index = 0, length = Math.min(limit, size); - //only lazy adding mixin-type(defaultSetting) when the user's size > sent notification's size. - if (size > sentUsers.size()) { - List addMixinUsers = new ArrayList(); - List usersDefaultSettings = new ArrayList(); - - while (index < size && length > 0) { - usersDefaultSettings = new ArrayList(); - // - LOG.debug(String.format("Load from %s to %s, length %s", index, (index + length), length)); - User[] users = allUsers.load(index, length); - if (users.length == 0) { - break; - } - UserSetting userSetting; - Calendar cal = Calendar.getInstance(); - for (int i = 0; i < users.length; i++) { - userSetting = UserSetting.getInstance().setUserId(users[i].getUserName()); - if (!sentUsers.contains(userSetting) && users[i].getCreatedDate()!=null) { - // - cal.setTime(users[i].getCreatedDate()); - usersDefaultSettings.add(userSetting.setLastUpdateTime(cal)); - // - addMixinUsers.add(users[i]); - } - } - // - sendDefault(context, usersDefaultSettings, defaultSetting); - - index += length; - length = Math.min(limit, size - index); - } - - LOG.debug("Done sent notification for " + addMixinUsers.size() + " users must addMixin."); - // - long startTime = System.currentTimeMillis(); - userService.addMixin(addMixinUsers.toArray(new User[addMixinUsers.size()])); - LOG.debug("Done addMixin for " + addMixinUsers.size() + " users, time: " + (System.currentTimeMillis() - startTime) + "ms."); - } - } - private void send(NotificationContext context, List userSettings) { final boolean stats = NotificationContextFactory.getInstance().getStatistics().isStatisticsEnabled(); diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/setting/PluginSettingServiceImpl.java b/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/setting/PluginSettingServiceImpl.java index 2b879590be..6a552c4a17 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/setting/PluginSettingServiceImpl.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/setting/PluginSettingServiceImpl.java @@ -161,7 +161,7 @@ private void saveActivePlugins(String pluginId, List channels) { } private void saveActivePlugins(String pluginId, String channelIds) { - settingService.set(Context.GLOBAL, Scope.GLOBAL, (NAME_SPACES + pluginId), SettingValue.create(channelIds)); + settingService.set(Context.GLOBAL, Scope.GLOBAL.id(null), (NAME_SPACES + pluginId), SettingValue.create(channelIds)); } private List getSettingPlugins(String pluginId, List defaultValue) { @@ -173,7 +173,7 @@ private List getSettingPlugins(String pluginId) { } private String getSetting(String pluginId, String defaultValues) { - SettingValue sValue = settingService.get(Context.GLOBAL, Scope.GLOBAL, (NAME_SPACES + pluginId)); + SettingValue sValue = settingService.get(Context.GLOBAL, Scope.GLOBAL.id(null), (NAME_SPACES + pluginId)); String channels = defaultValues; String values = ""; if (sValue != null) { diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/setting/UserSettingServiceImpl.java b/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/setting/UserSettingServiceImpl.java index 134b775327..ca1ee14a67 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/setting/UserSettingServiceImpl.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/setting/UserSettingServiceImpl.java @@ -52,7 +52,7 @@ public class UserSettingServiceImpl extends AbstractService implements UserSetti private static final Log LOG = ExoLogger.getLogger(UserSettingServiceImpl.class); /** Setting Scope on Common Setting **/ - private static final Scope NOTIFICATION_SCOPE = Scope.GLOBAL; + private static final Scope NOTIFICATION_SCOPE = Scope.GLOBAL.id(null); private SettingService settingService; private ChannelManager channelManager; @@ -474,12 +474,9 @@ public List getDigestDefaultSettingForAllUser(int offset, int limit NodeIterator iter = getDefaultDailyIterator(sProvider, offset, limit); while (iter.hasNext()) { Node node = iter.nextNode(); - //make sure that have the mixin-type defaultSetting and don't have child node for notification setting - if (!node.getNodes().hasNext()) { - users.add(UserSetting.getInstance() - .setUserId(node.getName()) - .setLastUpdateTime(node.getProperty(EXO_LAST_MODIFIED_DATE).getDate())); - } + users.add(UserSetting.getInstance() + .setUserId(node.getName()) + .setLastUpdateTime(node.getProperty(EXO_LAST_MODIFIED_DATE).getDate())); } } } catch (Exception e) { diff --git a/commons-component-common/src/main/java/org/exoplatform/settings/impl/ExoFeatureServiceImpl.java b/commons-component-common/src/main/java/org/exoplatform/settings/impl/ExoFeatureServiceImpl.java index 8c250c9bad..fe65c4f692 100644 --- a/commons-component-common/src/main/java/org/exoplatform/settings/impl/ExoFeatureServiceImpl.java +++ b/commons-component-common/src/main/java/org/exoplatform/settings/impl/ExoFeatureServiceImpl.java @@ -34,13 +34,13 @@ public ExoFeatureServiceImpl(SettingService settingService) { @Override public boolean isActiveFeature(String featureName) { - SettingValue sValue = settingService.get(Context.GLOBAL, Scope.GLOBAL, (NAME_SPACES + featureName)); + SettingValue sValue = settingService.get(Context.GLOBAL, Scope.GLOBAL.id(null), (NAME_SPACES + featureName)); return (sValue != null) ? (Boolean) sValue.getValue() : true; } @Override public void saveActiveFeature(String featureName, boolean isActive) { - settingService.set(Context.GLOBAL, Scope.GLOBAL, (NAME_SPACES + featureName), SettingValue.create(isActive)); + settingService.set(Context.GLOBAL, Scope.GLOBAL.id(null), (NAME_SPACES + featureName), SettingValue.create(isActive)); } diff --git a/commons-component-common/src/test/java/org/exoplatform/settings/impl/UserSettingServiceTest.java b/commons-component-common/src/test/java/org/exoplatform/settings/impl/UserSettingServiceTest.java index 2cdf2f9af5..b875e778cc 100644 --- a/commons-component-common/src/test/java/org/exoplatform/settings/impl/UserSettingServiceTest.java +++ b/commons-component-common/src/test/java/org/exoplatform/settings/impl/UserSettingServiceTest.java @@ -155,10 +155,19 @@ private void initSettingHome() throws Exception { } private void addLastUpdateTime(String userId) throws Exception { - Node rootNode = session.getRootNode().getNode("settings").getNode("user").getNode(userId); - if(rootNode.canAddMixin("exo:datetime")) { - rootNode.addMixin("exo:datetime"); - rootNode.setProperty("exo:lastModifiedDate", Calendar.getInstance()); + Node rootNode = session.getRootNode().getNode("settings").getNode("user"); + Node userNode = null; + if (!rootNode.hasNode(userId)) { + userNode = rootNode.addNode(userId, "stg:simplecontext"); + } else { + userNode = rootNode.getNode(userId); + } + if (userNode.canAddMixin("mix:defaultSetting")) { + userNode.addMixin("mix:defaultSetting"); + } + if(userNode.canAddMixin("exo:datetime")) { + userNode.addMixin("exo:datetime"); + userNode.setProperty("exo:lastModifiedDate", Calendar.getInstance()); session.save(); } } From f29573be24a53c1d339cf25e09d2bd65974de2c7 Mon Sep 17 00:00:00 2001 From: thanhvc Date: Thu, 5 Nov 2015 14:43:21 +0700 Subject: [PATCH 29/46] COMMONS-432 | [Social notification] Email validation is not correct with some domain part values --- .../exoplatform/commons/notification/NotificationUtils.java | 2 +- .../commons/notification/NotificationUtilsTest.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/notification/NotificationUtils.java b/commons-component-common/src/main/java/org/exoplatform/commons/notification/NotificationUtils.java index 4310d2eda7..221658c74e 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/notification/NotificationUtils.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/notification/NotificationUtils.java @@ -56,7 +56,7 @@ public class NotificationUtils { private static final Pattern LINK_PATTERN = Pattern.compile("]+)>([^<]+)"); - private static final Pattern EMAIL_PATTERN = Pattern.compile("^[_a-zA-Z0-9-+]+(\\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*(\\.[a-zA-Z]{2,5})$"); + private static final Pattern EMAIL_PATTERN = Pattern.compile("^[_a-zA-Z0-9-+]+(\\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*(\\.[a-zA-Z]{2,})$"); private static final String styleCSS = " style=\"color: #2f5e92; text-decoration: none;\""; diff --git a/commons-component-common/src/test/java/org/exoplatform/commons/notification/NotificationUtilsTest.java b/commons-component-common/src/test/java/org/exoplatform/commons/notification/NotificationUtilsTest.java index ccfd490d7f..7a85ce0da8 100644 --- a/commons-component-common/src/test/java/org/exoplatform/commons/notification/NotificationUtilsTest.java +++ b/commons-component-common/src/test/java/org/exoplatform/commons/notification/NotificationUtilsTest.java @@ -97,6 +97,10 @@ public void testIsValidEmailAddresses() { assertEquals(true, NotificationUtils.isValidEmailAddresses(emails)); emails = "test+test@test.com, demo+aaa@demo.com, "; assertEquals(true, NotificationUtils.isValidEmailAddresses(emails)); + emails = "Justin Dickey"; + assertEquals(true, NotificationUtils.isValidEmailAddresses(emails)); + emails = "eXo Admin"; + assertEquals(true, NotificationUtils.isValidEmailAddresses(emails)); } public void testProcessLinkInActivityTitle() throws Exception { From c0273620fc6a5246ca172a5c88449e945f735a30 Mon Sep 17 00:00:00 2001 From: thanhvc Date: Thu, 5 Nov 2015 15:38:20 +0700 Subject: [PATCH 30/46] SOC-4797 | Still receive Digest emails after check "never notify me" in My notification setting --- .../commons/notification/NotificationUtils.java | 15 +++++++++++++++ .../impl/service/NotificationServiceImpl.java | 7 +++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/notification/NotificationUtils.java b/commons-component-common/src/main/java/org/exoplatform/commons/notification/NotificationUtils.java index 221658c74e..7209e46722 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/notification/NotificationUtils.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/notification/NotificationUtils.java @@ -32,6 +32,11 @@ import org.apache.commons.lang.StringUtils; import org.exoplatform.commons.api.notification.plugin.config.PluginConfig; import org.exoplatform.commons.api.notification.template.Element; +import org.exoplatform.commons.api.settings.SettingService; +import org.exoplatform.commons.api.settings.SettingValue; +import org.exoplatform.commons.api.settings.data.Context; +import org.exoplatform.commons.api.settings.data.Scope; +import org.exoplatform.commons.notification.impl.AbstractService; import org.exoplatform.commons.notification.template.DigestTemplate; import org.exoplatform.commons.notification.template.SimpleElement; import org.exoplatform.commons.notification.template.TemplateUtils; @@ -245,6 +250,16 @@ public static boolean isDeletedMember(String userName) { } } + public static boolean isActiveSetting(String userId) { + try { + SettingService settingService = CommonsUtils.getService(SettingService.class); + SettingValue value = (SettingValue) settingService.get(Context.USER.id(userId), Scope.GLOBAL, AbstractService.EXO_IS_ACTIVE); + return (value.getValue() == null) ? true : value.getValue(); + } catch (Exception e) { + return false; + } + } + /** * Add the style css for a link in the activity title to display a link without underline * diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/service/NotificationServiceImpl.java b/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/service/NotificationServiceImpl.java index eaa2f27f2b..0595a36543 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/service/NotificationServiceImpl.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/notification/impl/service/NotificationServiceImpl.java @@ -171,7 +171,9 @@ private void send(NotificationContext context, List userSettings) { final boolean stats = NotificationContextFactory.getInstance().getStatistics().isStatisticsEnabled(); for (UserSetting userSetting : userSettings) { - if (!userSetting.isChannelActive(MailChannel.ID) || NotificationUtils.isDeletedMember(userSetting.getUserId())) { + if (!userSetting.isChannelActive(MailChannel.ID) + || NotificationUtils.isDeletedMember(userSetting.getUserId()) + || !NotificationUtils.isActiveSetting(userSetting.getUserId())) { continue; } @@ -196,7 +198,8 @@ private void sendDefault(NotificationContext context, List userSett final boolean stats = NotificationContextFactory.getInstance().getStatistics().isStatisticsEnabled(); for (UserSetting userSetting : userSettings) { - if (NotificationUtils.isDeletedMember(userSetting.getUserId())) { + if (NotificationUtils.isDeletedMember(userSetting.getUserId()) + || !NotificationUtils.isActiveSetting(userSetting.getUserId())) { continue; } From 66dc2f73b5539e92f302291c93e9b9082a076c0b Mon Sep 17 00:00:00 2001 From: Benoit de Chateauvieux Date: Thu, 5 Nov 2015 17:40:37 +0700 Subject: [PATCH 31/46] Remove @ExoTransactional on GenericDAOJPAImpl.findAll() --- .../commons/persistence/impl/GenericDAOJPAImpl.java | 13 ++++++++++++- .../commons/persistence/impl/TaskDao.java | 10 ++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/GenericDAOJPAImpl.java b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/GenericDAOJPAImpl.java index ace9b76327..f2f0b49c11 100644 --- a/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/GenericDAOJPAImpl.java +++ b/commons-component-common/src/main/java/org/exoplatform/commons/persistence/impl/GenericDAOJPAImpl.java @@ -61,8 +61,19 @@ public E find(ID id) { return (E) getEntityManager().find(modelClass, id); } + /** + * This method makes 2 calls to getEntityManager(): + * 1- The first one to get the CriteriaBuilder + * 2- The second one to create the query + * If there is no EntityManager in the threadLocal (i.e: EntityManagerService.getEntityManager() returns null), + * the EntityManagerHolder will return 2 distinct EntityManager instances. + * This will result in a org.hibernate.SessionException: Session is closed!. + * + * Thus, this method shall always be invoked with an EntityManager in the ThreadLocal + * (for example, from a request managed by the portal lifecycle or from a method annotated with @ExoTransactional) + */ + //Another option is to implement something similar to Spring's DeferredQueryInvocationHandler @Override - @ExoTransactional public List findAll() { CriteriaBuilder cb = getEntityManager().getCriteriaBuilder(); CriteriaQuery query = cb.createQuery(modelClass); diff --git a/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/TaskDao.java b/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/TaskDao.java index ff8dc56c0b..4e529d37db 100644 --- a/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/TaskDao.java +++ b/commons-component-common/src/test/java/org/exoplatform/commons/persistence/impl/TaskDao.java @@ -4,6 +4,8 @@ import org.exoplatform.commons.api.persistence.ExoTransactional; +import java.util.List; + public class TaskDao extends GenericDAOJPAImpl { @ExoTransactional @@ -22,4 +24,12 @@ public void createWithCommit(Task task) { getEntityManager().persist(task); getEntityManager().getTransaction().commit(); } + + @Override + @ExoTransactional + //We invoke this method within an @ExoTransactional context because + //our TU are not run within a portal lifecycle => there is no EM in the threadLocal + public List findAll() { + return super.findAll(); + } } From 80ad83f834a9bacdd1e9e3227cdef3ea2ad19668 Mon Sep 17 00:00:00 2001 From: trangvh Date: Mon, 9 Nov 2015 13:41:28 +0700 Subject: [PATCH 32/46] UI-4008, COMMONS-440: Add alias for common-utils module --- .../src/main/webapp/WEB-INF/gatein-resources.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml b/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml index 3d22d7fb11..1af147e5a5 100644 --- a/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml +++ b/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml @@ -78,6 +78,7 @@ common-utils + common_utils From cdb7d39b2e66ca0b37411895bdf5532b9ab82196 Mon Sep 17 00:00:00 2001 From: eXo CI server Date: Tue, 10 Nov 2015 03:44:17 +0100 Subject: [PATCH 33/46] sl injection on 20151110-034402 --- .../CommonsNotification_sl.properties | 25 ++++++ .../locale/commons/Commons_sl.properties | 82 +++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_sl.properties create mode 100644 commons-webui-component/src/main/resources/locale/commons/Commons_sl.properties diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_sl.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_sl.properties new file mode 100644 index 0000000000..ebdbe313ff --- /dev/null +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_sl.properties @@ -0,0 +1,25 @@ +UINotification.label.group.General=Splo\u0161no +UINotification.label.group.Connections=Povezave +UINotification.label.group.Spaces=Skupine/prostori +UINotification.label.group.ActivityStream=\u010Casovnica +UINotification.label.group.Other=Ostalo + +############################################################################# +# DigestPlugin # +############################################################################# +Notification.subject.DigestDailyPlugin=Dana\u0161nje novosti na $PORTAL_NAME +Notification.subject.DigestWeeklyPlugin=Novosti tega tedna na $PORTAL_NAME + +Notification.title.DigestDailyPlugin=Tvojih {0} dana\u0161njih novosti +Notification.title.DigestWeeklyPlugin=Tvojih {0} novosti tega tedna + +Notification.message.DigestProvider=Tukaj je kaj se je dogajalo v {0} + +Notification.label.Today=danes +Notification.label.ThisWeek=ta teden +Notification.label.Daily=dan +Notification.label.Weekly=teden +Notification.label.SayHello=Pozdravljeni +Notification.label.ClickHere=Kliknite tukaj +Notification.label.CompanyName=eXo platforma +Notification.footer.DigestProvider=\u010Ce ne \u017Eelite prejemati teh obvestil, {0} za spreminjanje nastavitev obvestil. diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_sl.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_sl.properties new file mode 100644 index 0000000000..81606e3cc1 --- /dev/null +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_sl.properties @@ -0,0 +1,82 @@ +################################################################## +# org.exoplatform.webui.commons.UISaveAttachment +################################################################## +UIPopupWindow.title.UISaveAttachment=Shrani priloge +UIPopupWindow.title.UIAddAttachment=Prilo\u017Ei datoteko s stre\u017Enika +UISaveAttachment.label.SaveFile=Shranite datoteko na stre\u017Enik +UISaveAttachment.label.Save=#{word.save} +UISaveAttachment.label.Cancel=#{word.cancel} +UISaveAttachment.msg.file-name-not-null=Ime datoteke je obvezno. +UISaveAttachment.msg.not-a-folder=Izbrani element ni mapa. +UISaveAttachment.msg.not-valid-name={0} niso dovoljene v imenu datoteke. +UISaveAttachment.msg.saved-successfully=Datoteka je bila uspe\u0161no shranjena. +UISaveAttachment.msg.save-file-not-allow=Nimate dovoljenja, da bi tukaj shranili datoteko. +################################################################## +# org.exoplatform.webui.commons.UIAddAttachment +################################################################## +UIAddAttachment.label.Attach=Prilo\u017Ei +UIAddAttachment.label.AttachLink=Prilo\u017Ei povezavo +UIAddAttachment.label.Save=#{word.save} +UIAddAttachment.label.Cancel=#{word.cancel} +################################################################### + # org.exoplatform.webui.commons.UIDocumentSelector # +################################################################### +UIDocumentSelector.label.new-folder=Nova mapa +UIDocumentSelector.label.root-folder=Korenska mapa +UIDocumentSelector.label.require-drive=Izberi pogon za novo mapo. +UIDocumentSelector.label.enter-folder-name=Vnesite ime nove mape. +UIDocumentSelector.label.empty-folder-name=Ime mape ne sme biti prazno. +UIDocumentSelector.label.invalid-folder-name=Vnesite veljavno ime mape. +UIDocumentSelector.label.Name=Ime +UIDocumentSelector.label.Date=Datum +UIDocumentSelector.label.Size=Velikost +UIDocumentSelector.label.Action=Dejanje +UIDocumentSelector.label.NoFolderOrFile=Ni mape ali datoteke. +UIDocumentSelector.label.NoDrive=Ni pogonov. +UIDocumentSelector.label.select-drive=Izberi pogon +UIDocumentSelector.label.general-drives=Splo\u0161ni pogoni +UIDocumentSelector.label.group-drives=Pogoni skupine +UIDocumentSelector.label.personal-drives=Osebni pogoni +UIDocumentSelector.label.new-folder-not-allow=Nimate dovoljenja, da bi tukaj ustvarili novo mapo. +################################################################### + # org.exoplatform.webui.commons.UIUploadInput # +################################################################### +UIDSUploadInput.msg.uploadFile=Prenesi datoteko +UIDSUploadInput.msg.select-drive=Izberi pogon za prenos datoteke. +UIDSUploadInput.msg.permission-required=Nimate dovoljenja za prenos datoteke v to mapo. +UIFormUploadInput.msg.upload_failed=Prenos ni uspel. Pri prenosu je pri\u0161lo do izjemnega primera +################################################################### + # org.exoplatform.webui.TimeConvertUtils # +################################################################### +TimeConvert.type.JUSTNOW=Ravnokar +TimeConvert.type.MINUTE={0} minuto nazaj +TimeConvert.type.MINUTES=pred {0} minutami +TimeConvert.type.HOUR=pred {0} uro +TimeConvert.type.HOURS=pred {0} urami +TimeConvert.type.DAY=pred {0} dnevom +TimeConvert.type.DAYS=pred {0} dnevi +TimeConvert.type.WEEK=pred {0} tednom +TimeConvert.type.WEEKS=pred {0} tedni +TimeConvert.type.MONTH=pred {0} mesecem +TimeConvert.type.MONTHS=pred {0} meseci +TimeConvert.type.YEAR=pred {0} letom +TimeConvert.type.YEARS=pred {0} leti +TimeConvert.type.DECADE=pred {0} desetletjem +TimeConvert.type.DECADES=pred {0} desetletji +############################################################################# +#UISpaceSwitcher +############################################################################# +UISpaceSwitcher.title.select-location=Izberite lokacijo +UISpaceSwitcher.msg.filter-spaces=Filtriraj prostore +UISpaceSwitcher.msg.no-space=Ni prostorov +UISpaceSwitcher.title.my-space=Moj Wiki +UISpaceSwitcher.title.close=#{word.close} +UISpaceSwitcher.title.space=Prostor + +# Document Auto Versioning +DocumentAuto.label.existing=Obstoje\u010Da datoteka +DocumentAuto.label.keepBoth=Ohrani obe +DocumentAuto.label.createVersion=Ustvarite novo razli\u010Dico +DocumentAuto.label.replace=Zamenjaj +DocumentAuto.label.or=ali +DocumentAuto.label.cancel=Prekli\u010Di From 32203bac3f26d763e7e47a9ac747b81c73ed0838 Mon Sep 17 00:00:00 2001 From: anhvurz90 Date: Fri, 6 Feb 2015 14:01:19 +0700 Subject: [PATCH 34/46] ECMS-6637 add workaround: set focus on textarea before submitting form --- .../webui/form/UIFormRichtextInput.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java b/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java index 6d45e17bb3..13a79f2d0a 100644 --- a/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java +++ b/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java @@ -172,7 +172,7 @@ private String buildEditorLayout() throws Exception { builder.append("
"); builder.append(" "); // - builder.append(" \n"); builder.append("\n"); From eabff6951fc614e92a5478079f4e876671878804 Mon Sep 17 00:00:00 2001 From: phuong_vu Date: Tue, 15 Sep 2015 15:38:06 +0700 Subject: [PATCH 35/46] COMMONS-442 [Unified Search] Allow to configure unified search connector disabled by default --- .../api/search/SearchServiceConnector.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/commons-api/src/main/java/org/exoplatform/commons/api/search/SearchServiceConnector.java b/commons-api/src/main/java/org/exoplatform/commons/api/search/SearchServiceConnector.java index c1ad768b22..d5be15a52f 100644 --- a/commons-api/src/main/java/org/exoplatform/commons/api/search/SearchServiceConnector.java +++ b/commons-api/src/main/java/org/exoplatform/commons/api/search/SearchServiceConnector.java @@ -15,6 +15,7 @@ public abstract class SearchServiceConnector extends BaseComponentPlugin { private String searchType; //search type name private String displayName; //for use when rendering + private boolean enable = true; /** * Gets a search type. @@ -51,6 +52,21 @@ public String getDisplayName() { public void setDisplayName(String displayName) { this.displayName = displayName; } + + /** + * is enable by default + */ + public boolean isEnable() { + return enable; + } + + /** + * set enable by default + */ + public void setEnable(boolean enable) { + this.enable = enable; + } + /** * Initializes a search service connector. The constructor is default that connectors must implement. * @param initParams The parameters which are used for initializing the search service connector from configuration. @@ -60,6 +76,7 @@ public SearchServiceConnector(InitParams initParams) { PropertiesParam param = initParams.getPropertiesParam("constructor.params"); this.searchType = param.getProperty("searchType"); this.displayName = param.getProperty("displayName"); + this.setEnable(Boolean.parseBoolean(param.getProperty("enable"))); } /** From daabd69af08773be363e647d487f66622e8f67c9 Mon Sep 17 00:00:00 2001 From: TRAN Trung Thanh Date: Mon, 6 Oct 2014 14:45:20 +0700 Subject: [PATCH 36/46] COMMONS-361: Syntax error displays when deleting web content with long name Fix description: - Do not set format for antisamy's output to avoid automatically wrapping html --- .../src/main/resources/conf/portal/antisamy.xml | 2 +- .../java/org/exoplatform/services/deployment/UtilsTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/commons-component-common/src/main/resources/conf/portal/antisamy.xml b/commons-component-common/src/main/resources/conf/portal/antisamy.xml index 805ebe884c..acc8abe715 100644 --- a/commons-component-common/src/main/resources/conf/portal/antisamy.xml +++ b/commons-component-common/src/main/resources/conf/portal/antisamy.xml @@ -15,7 +15,7 @@ http://www.w3.org/TR/html401/struct/global.html - + diff --git a/commons-component-common/src/test/java/org/exoplatform/services/deployment/UtilsTest.java b/commons-component-common/src/test/java/org/exoplatform/services/deployment/UtilsTest.java index a40f3c8855..0c50cc4733 100644 --- a/commons-component-common/src/test/java/org/exoplatform/services/deployment/UtilsTest.java +++ b/commons-component-common/src/test/java/org/exoplatform/services/deployment/UtilsTest.java @@ -165,6 +165,12 @@ public void testImportNode() throws Exception { assertTrue(importedNode.hasNode("subFolder2")); } + public void testSanitization() throws Exception { + assertEquals(Utils.sanitize("12345 78 0"), "12345 78 0"); + assertEquals(Utils.sanitize("12345 78 012345 78 012345 78 012345 78 012345 78 012345 78 012345 78 012345 78 012345 78 0"), + "12345 78 012345 78 012345 78 012345 78 012345 78 012345 78 012345 78 012345 78 012345 78 0"); + } + /** * Export a node to XML with document view or system view * From 37767b40e8fb04007e2fdca678eee84b2d061ca6 Mon Sep 17 00:00:00 2001 From: trangvh Date: Tue, 13 Oct 2015 17:31:44 +0700 Subject: [PATCH 37/46] COMMONS-452: [Dynamic portlet container] Invalid default name Fix description: * Remove the space character in the name of Dynamic Row/Column Container. --- .../portal/webui/container/ContainerConfigOption.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/commons-extension-webapp/src/main/webapp/WEB-INF/conf/uiconf/portal/webui/container/ContainerConfigOption.groovy b/commons-extension-webapp/src/main/webapp/WEB-INF/conf/uiconf/portal/webui/container/ContainerConfigOption.groovy index 6ec8edb38b..6235e120dc 100644 --- a/commons-extension-webapp/src/main/webapp/WEB-INF/conf/uiconf/portal/webui/container/ContainerConfigOption.groovy +++ b/commons-extension-webapp/src/main/webapp/WEB-INF/conf/uiconf/portal/webui/container/ContainerConfigOption.groovy @@ -42,7 +42,7 @@ import org.exoplatform.webui.core.model.SelectItemOption ; "ThreeRowContainerLayout")); row.addSelectItemOption(new SelectItemOption("pluginContainer", "" + - "Dynamic ContaineraddonContainer" + + "DynamicContaineraddonContainer" + "", "PluginContainerLayout")); templates.add(row); @@ -71,7 +71,7 @@ import org.exoplatform.webui.core.model.SelectItemOption ; "ThreeColumnContainerLayout")) ; column.addSelectItemOption(new SelectItemOption("pluginColumnContainer", "" + - "Dynamic Column ContaineraddonContainer" + + "DynamicColumnContaineraddonContainer" + "", "PluginColumnContainerLayout")); templates.add(column); @@ -156,4 +156,4 @@ import org.exoplatform.webui.core.model.SelectItemOption ; "OneRow2Column1RowContainerLayout")) ; templates.add(mixed); -return templates; \ No newline at end of file +return templates; From 0fad6b05edaf2d0153ab52eecf55db10b278681f Mon Sep 17 00:00:00 2001 From: CrowdIn Date: Mon, 16 Nov 2015 13:26:30 +0700 Subject: [PATCH 38/46] nl injection on 20151116-132603 --- .../CommonsNotification_nl.properties | 25 ++++++ .../locale/commons/Commons_nl.properties | 82 +++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_nl.properties create mode 100644 commons-webui-component/src/main/resources/locale/commons/Commons_nl.properties diff --git a/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_nl.properties b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_nl.properties new file mode 100644 index 0000000000..3f52464296 --- /dev/null +++ b/commons-extension-webapp/src/main/resources/locale/notification/template/CommonsNotification_nl.properties @@ -0,0 +1,25 @@ +UINotification.label.group.General=Algemeen +UINotification.label.group.Connections=Connecties +UINotification.label.group.Spaces=Ruimtes +UINotification.label.group.ActivityStream=Activiteiten Stream +UINotification.label.group.Other=Andere + +############################################################################# +# DigestPlugin # +############################################################################# +Notification.subject.DigestDailyPlugin=Uw $PORTAL_NAME updates voor vandaag +Notification.subject.DigestWeeklyPlugin=Uw $PORTAL_NAME updates voor deze week + +Notification.title.DigestDailyPlugin=Uw {0} updates voor vandaag +Notification.title.DigestWeeklyPlugin=Uw {0} updates voor deze week + +Notification.message.DigestProvider=Hier is wat er is gebeurd in {0} + +Notification.label.Today=Vandaag +Notification.label.ThisWeek=deze week +Notification.label.Daily=dag +Notification.label.Weekly=week +Notification.label.SayHello=Hallo +Notification.label.ClickHere=klik hier +Notification.label.CompanyName=eXo Platform +Notification.footer.DigestProvider=Als u deze berichtgeving niet wil ontvangen, {0} om u notificatie settings te wijzigen. diff --git a/commons-webui-component/src/main/resources/locale/commons/Commons_nl.properties b/commons-webui-component/src/main/resources/locale/commons/Commons_nl.properties new file mode 100644 index 0000000000..189822f0fb --- /dev/null +++ b/commons-webui-component/src/main/resources/locale/commons/Commons_nl.properties @@ -0,0 +1,82 @@ +################################################################## +# org.exoplatform.webui.commons.UISaveAttachment +################################################################## +UIPopupWindow.title.UISaveAttachment=Bijlage opslaan +UIPopupWindow.title.UIAddAttachment=Voeg een bestand toe van de server +UISaveAttachment.label.SaveFile=Een bestand op de server opslaan +UISaveAttachment.label.Save=#{word.save} +UISaveAttachment.label.Cancel=#{word.cancel} +UISaveAttachment.msg.file-name-not-null=Bestandsnaam is vereist. +UISaveAttachment.msg.not-a-folder=Het geselecteerde item is geen map. +UISaveAttachment.msg.not-valid-name={0} zijn niet toegestaan in de bestandsnaam. +UISaveAttachment.msg.saved-successfully=Bestand is met succes opgeslagen. +UISaveAttachment.msg.save-file-not-allow=U hebt geen toestemming hier een bestand op te slaan. +################################################################## +# org.exoplatform.webui.commons.UIAddAttachment +################################################################## +UIAddAttachment.label.Attach=Bijlage toevoegen +UIAddAttachment.label.AttachLink=Link bijvoegen +UIAddAttachment.label.Save=#{word.save} +UIAddAttachment.label.Cancel=#{word.cancel} +################################################################### + # org.exoplatform.webui.commons.UIDocumentSelector # +################################################################### +UIDocumentSelector.label.new-folder=Nieuwe Map +UIDocumentSelector.label.root-folder=Hoofdmap +UIDocumentSelector.label.require-drive=Selecteer een station om een nieuwe map toe te voegen. +UIDocumentSelector.label.enter-folder-name=Voer a.u.b. de naam in van de nieuwe map. +UIDocumentSelector.label.empty-folder-name=De mapnaam kan niet leeg zijn. +UIDocumentSelector.label.invalid-folder-name=Geef a.u.b. een geldige foldernaam. +UIDocumentSelector.label.Name=Naam +UIDocumentSelector.label.Date=Datum +UIDocumentSelector.label.Size=Grootte +UIDocumentSelector.label.Action=Actie +UIDocumentSelector.label.NoFolderOrFile=Er is geen map of bestand. +UIDocumentSelector.label.NoDrive=Er is geen drive. +UIDocumentSelector.label.select-drive=Selecteer station +UIDocumentSelector.label.general-drives=Algemene stations +UIDocumentSelector.label.group-drives=Groep schijven +UIDocumentSelector.label.personal-drives=Persoonlijke stations +UIDocumentSelector.label.new-folder-not-allow=U hebt niet de toestemming om hier een nieuwe map te maken. +################################################################### + # org.exoplatform.webui.commons.UIUploadInput # +################################################################### +UIDSUploadInput.msg.uploadFile=Bestand uploaden +UIDSUploadInput.msg.select-drive=Selecteer een station om bestand te uploaden. +UIDSUploadInput.msg.permission-required=U hebt niet de toestemming voor het uploaden van het bestand naar deze map. +UIFormUploadInput.msg.upload_failed=Upload mislukt. Er is een uitzondering bij het uploaden van een bestand +################################################################### + # org.exoplatform.webui.TimeConvertUtils # +################################################################### +TimeConvert.type.JUSTNOW=Net nu +TimeConvert.type.MINUTE={0} minuut geleden +TimeConvert.type.MINUTES={0} minuten geleden +TimeConvert.type.HOUR={0} uur geleden +TimeConvert.type.HOURS={0} uur geleden +TimeConvert.type.DAY={0} dag geleden +TimeConvert.type.DAYS={0} dagen geleden +TimeConvert.type.WEEK={0} week geleden +TimeConvert.type.WEEKS={0} weken geleden +TimeConvert.type.MONTH={0} maand geleden +TimeConvert.type.MONTHS={0} maanden geleden +TimeConvert.type.YEAR={0} jaar geleden +TimeConvert.type.YEARS={0} jaren geleden +TimeConvert.type.DECADE={0} tien jaar geleden +TimeConvert.type.DECADES={0} decennia geleden +############################################################################# +#UISpaceSwitcher +############################################################################# +UISpaceSwitcher.title.select-location=selecteer locatie +UISpaceSwitcher.msg.filter-spaces=Filter spaces +UISpaceSwitcher.msg.no-space=Geen ruimte +UISpaceSwitcher.title.my-space=Mijn Wiki +UISpaceSwitcher.title.close=#{word.close} +UISpaceSwitcher.title.space=Space + +# Document Auto Versioning +DocumentAuto.label.existing=Existing file +DocumentAuto.label.keepBoth=Houd zowel +DocumentAuto.label.createVersion=Create a new version +DocumentAuto.label.replace=Vervangen +DocumentAuto.label.or=of +DocumentAuto.label.cancel=Annuleren From a2f5d3b1296cde78f3791c5a3e2d9521ffb0a98c Mon Sep 17 00:00:00 2001 From: nguyenthienhuong Date: Wed, 17 Jun 2015 09:45:48 +0700 Subject: [PATCH 39/46] COMMONS-420 : [IE11] Impossible to upload file from Top Navigation bar from a page with URL containing accented characters --- .../groovy/webui/commons/UIDocumentSelector.gtmpl | 4 ++-- .../resources/groovy/webui/commons/UIDropDownControl.gtmpl | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/commons-webui-component/src/main/resources/groovy/webui/commons/UIDocumentSelector.gtmpl b/commons-webui-component/src/main/resources/groovy/webui/commons/UIDocumentSelector.gtmpl index a77aee2174..2e986869a9 100644 --- a/commons-webui-component/src/main/resources/groovy/webui/commons/UIDocumentSelector.gtmpl +++ b/commons-webui-component/src/main/resources/groovy/webui/commons/UIDocumentSelector.gtmpl @@ -39,8 +39,8 @@ requireJs.addScripts("jq('#createNew').click(function() {commonDocument.DocumentSelector.newFolder(this);});"); %>
- - + +
<%= _ctx.appRes(uicomponent.id + '.label.select-drive')%>:   <% uicomponent.renderChild(UIDropDownControl.class);%> diff --git a/commons-webui-component/src/main/resources/groovy/webui/commons/UIDropDownControl.gtmpl b/commons-webui-component/src/main/resources/groovy/webui/commons/UIDropDownControl.gtmpl index a7fbb4a1ca..dab520bf75 100644 --- a/commons-webui-component/src/main/resources/groovy/webui/commons/UIDropDownControl.gtmpl +++ b/commons-webui-component/src/main/resources/groovy/webui/commons/UIDropDownControl.gtmpl @@ -33,14 +33,15 @@
  • <% String label = _ctx.appRes(uicomponent.getId() + ".item." + option.label); + String seletedItem = uicomponent.event(selectedIndex); if(label.length() > 30) { %> - <%=label.substring(0,25)%>... + <%=label.substring(0,25)%>... <% } else { %> - <%=label%> + <%=label%> <% } %>
  • <% selectedIndex++;}%> -
    \ No newline at end of file +
    From 10fc0ddbcc9dfff3c0a2afc73a4f02ba312354d9 Mon Sep 17 00:00:00 2001 From: TRAN Trung Thanh Date: Mon, 5 Jan 2015 16:54:36 +0700 Subject: [PATCH 40/46] COMMONS-378: Product information can't be stored in JCR during upgrade progress Problem analysis - Label of version must be unique. However, the version label prefix is only current year. It might lead to label duplication. Fix descripiton - Instead of using current year as prefix, use current time to avoid the label duplication --- .../exoplatform/commons/info/ProductInformations.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/commons-component-product/src/main/java/org/exoplatform/commons/info/ProductInformations.java b/commons-component-product/src/main/java/org/exoplatform/commons/info/ProductInformations.java index d9345ebe52..d9b361afdd 100644 --- a/commons-component-product/src/main/java/org/exoplatform/commons/info/ProductInformations.java +++ b/commons-component-product/src/main/java/org/exoplatform/commons/info/ProductInformations.java @@ -38,6 +38,8 @@ import javax.jcr.version.Version; import javax.jcr.version.VersionHistory; import java.io.*; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -545,10 +547,9 @@ public void setPreviousVersionsIfFirstRun(String defaultVersion) { } } - private static int currentFlag () { - - return Calendar.getInstance(TimeZone.getDefault()).get(Calendar.YEAR); - + private static String currentFlag () { + DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + return dateFormat.format(Calendar.getInstance(TimeZone.getDefault()).getTime()); } } From 418cd8e1dd5324156aa8eb276465268be311176f Mon Sep 17 00:00:00 2001 From: trangvh Date: Fri, 31 Jul 2015 18:16:26 +0700 Subject: [PATCH 41/46] COMMONS-433: [CKEditor] Add more buttons to Forum's WYSIWYG --- .../plugins/smiley/images/angel_smile.gif | Bin 465 -> 1245 bytes .../plugins/smiley/images/angel_smile.png | Bin 0 -> 1172 bytes .../plugins/smiley/images/angry_smile.gif | Bin 443 -> 1219 bytes .../plugins/smiley/images/angry_smile.png | Bin 0 -> 1220 bytes .../plugins/smiley/images/broken_heart.gif | Bin 192 -> 732 bytes .../plugins/smiley/images/broken_heart.png | Bin 0 -> 1139 bytes .../plugins/smiley/images/confused_smile.gif | Bin 464 -> 1202 bytes .../plugins/smiley/images/confused_smile.png | Bin 0 -> 1101 bytes .../plugins/smiley/images/cry_smile.gif | Bin 468 -> 795 bytes .../plugins/smiley/images/cry_smile.png | Bin 0 -> 1214 bytes .../plugins/smiley/images/devil_smile.gif | Bin 436 -> 1239 bytes .../plugins/smiley/images/devil_smile.png | Bin 0 -> 1220 bytes .../plugins/smiley/images/embaressed_smile.gif | Bin 442 -> 786 bytes .../smiley/images/embarrassed_smile.gif | Bin 442 -> 786 bytes .../smiley/images/embarrassed_smile.png | Bin 0 -> 1145 bytes .../plugins/smiley/images/envelope.gif | Bin 426 -> 506 bytes .../plugins/smiley/images/envelope.png | Bin 0 -> 760 bytes .../ckeditor/plugins/smiley/images/heart.gif | Bin 183 -> 692 bytes .../ckeditor/plugins/smiley/images/heart.png | Bin 0 -> 999 bytes .../ckeditor/plugins/smiley/images/kiss.gif | Bin 241 -> 683 bytes .../ckeditor/plugins/smiley/images/kiss.png | Bin 0 -> 1003 bytes .../plugins/smiley/images/lightbulb.gif | Bin 368 -> 660 bytes .../plugins/smiley/images/lightbulb.png | Bin 0 -> 919 bytes .../plugins/smiley/images/omg_smile.gif | Bin 451 -> 820 bytes .../plugins/smiley/images/omg_smile.png | Bin 0 -> 1122 bytes .../plugins/smiley/images/regular_smile.gif | Bin 450 -> 1209 bytes .../plugins/smiley/images/regular_smile.png | Bin 0 -> 1084 bytes .../plugins/smiley/images/sad_smile.gif | Bin 460 -> 782 bytes .../plugins/smiley/images/sad_smile.png | Bin 0 -> 1115 bytes .../plugins/smiley/images/shades_smile.gif | Bin 449 -> 1231 bytes .../plugins/smiley/images/shades_smile.png | Bin 0 -> 1204 bytes .../plugins/smiley/images/teeth_smile.gif | Bin 442 -> 1201 bytes .../plugins/smiley/images/teeth_smile.png | Bin 0 -> 1183 bytes .../plugins/smiley/images/thumbs_down.gif | Bin 408 -> 715 bytes .../plugins/smiley/images/thumbs_down.png | Bin 0 -> 985 bytes .../plugins/smiley/images/thumbs_up.gif | Bin 396 -> 714 bytes .../plugins/smiley/images/thumbs_up.png | Bin 0 -> 959 bytes .../plugins/smiley/images/tongue_smile.gif | Bin 446 -> 1210 bytes .../plugins/smiley/images/tongue_smile.png | Bin 0 -> 1132 bytes .../plugins/smiley/images/tounge_smile.gif | Bin 446 -> 1210 bytes .../images/whatchutalkingabout_smile.gif | Bin 452 -> 775 bytes .../images/whatchutalkingabout_smile.png | Bin 0 -> 1039 bytes .../plugins/smiley/images/wink_smile.gif | Bin 458 -> 1202 bytes .../plugins/smiley/images/wink_smile.png | Bin 0 -> 1114 bytes .../src/main/webapp/eXoConfig.js | 4 ++-- 45 files changed, 2 insertions(+), 2 deletions(-) create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/envelope.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/heart.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/kiss.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/teeth_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_down.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png create mode 100755 commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.png diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/angel_smile.gif index 2cf4894758f019612996cb5bd2a716e2a81ec1fc..21f81a2fab5b772bf1dcef0fe0a5f1965a08927d 100644 GIT binary patch literal 1245 zcmeH`{ZrBh9Du(lA_^p;f{GZh*>#>vg-WcpVe_qxHdcBkoV$~DTj}X$YrA=EDa>g& z&*{`%<>ta9P8XRelEYV&Qp))T8!O927}m5CoeM?2-_Nc;VZZPB{rTm&dom8C3zB6F zgn_sb2b2H6P=zl~MZ2{D;a2Jzo;_r2&>&;$%H}zL_%76gqX0@u--14#&){LIjEU~ z{`wM3?SSc*!4~Ve7Z3Mdf&1~x6Z=q8qI-&m&LnNkC4f}`c0OuIfq}PSP>kJr(`yuC z4|2V?3tiScn0tS9uFz{cwed$W*h;{12D6ody#O4iVet%1%fWIM?pA=c3g#|ge>QvP zFJkjQtvf0)XEiL;V#~Ger$2(@61Jq;c&70#x5Hl@n5z{W-LTN(eXIwk0hW3_t}f4N zH~P;Y_WYLDZARU9yc=e8;|{D?QO_*qv0xq>tlov^53sF=nAZ-QiLTo&>ABenv;5hD-eD`W%;^8#U8LFm)N%ET{bOMdwzM#Rc2N$sz)D(i+t+^<6; zMzWL^_O4tV(X1G)7I2TzCUkA-_`t9PaUGR&uqI7P;vKVQ(lo+Cy^?yp;xJp3%1n$U z5~|K8e@={%UP+o!?LTE=XwEvaqHG;_3p{Uif_K#{+dwiL(8l~ zQi51oVP#aZx~DQw6vvSTQk(O95Jb)nBOO1_nJea!Ig;SC)ZmJvV&TcAf_S9Ss z!Fu%FBF$Gt%=@kix^y$en7>OUl;g;`#W-JovP<#Nd&=P%VRcTYq98WTj;H4cPMQd^ qnmi+y@WBWnC*p*PN$AgJ8}Wtsm7K8Ln>^|JO!qF{At9X#BAx{?0`Dx;)aD zGyl~%>82e2z90Yp|NFit|Kn8uvlaW|lKt_;{Oh&;_t^j7P5=7m^4DGbv@HG3T-nEZ z{_mje&v%|^4Ex`GiCPT6P890YrTn}u`lurR{r3OPF8=-R|JrKb$CCfoC-ApP`tsxb z!Zp;hXZ5ii_qiX=v6}tKJogD&popkQ#;>n3v*QYSisZ#&!g!}sV{QLd?|NHch zEC2uhA^8LW002J#EC2ui02BZe000K=z@KnPEEkt{;i9a;a1( zsLX-1a&0BW_ zEeI{UvbD07r3Ffnvgoy?Q1G%SU|8D=m;24nGxOaGTuK^WeE28d%$)O^Gv}OdCcrtf z6!3q^ZvelAur~NC?*7*-x8pPAnW)2>y@6Ub8xGnw+E#qTx6NAZ!{h22^MkwRD=oA8+NhhM zuc0Vjc^vQHnJvO{zK0rqSx&tl21P@!!uUzJJq*q~C{9w^N3D&oYKD8E#^VQ{y>j64 z%0Gp^<6*hFv2Hb?=JQdr0-DN(u{Yr6F#*bElb@qzen8!pgRb_k`)P(|`KM*c@zVU@ zQD!Sw%8iBf}F)U&F;Mw$j zD3y8G_*Cv&Tn&)eZqP> z73<)t7)fgyo{>{`z$Goui=pJaHFZNe%9brq6K$eInPA%+aI_GjQ1$!pTt1FrZAwcv zS3iKCA_bD{RT95`5y@y?tUuHjtrY*y+z19vhKXMkluM^I9>l792E*D^&_g(@;7o`O z@oK7OH-&HQpgt#*k=!U2%VJq9jbZfL2%2+3`0>pk#!Hh7n6d~wEk{r#a$?Qe)Qa*G ztxZw=gdM$(PD{FBZRk;YPbE=%BAnC50y+J9AT{rYapjvt+}E@0KuW?Q@t+gs!XVSI(L?MoyJ zaVTqyfltIloQp%fK%LWVpl5=`E>I+6?W28#ahGQfX$1nL>lU miK<1DUR8VN4sT7vR{aZh|2Vqsev4870000v5$^6lp{j(L@cWd@v)@&bbIe*!4{2R~Nk+whll|Kio{Rvd~AE5XvNcDG+ z>i=Ms|G{d%Lbd*fY5$AR{t>13KT_{~gu&-n_*H+!FG`#I74bCTuP zB&%;}cK;Kt{-#*|O11x=Vmmd`V`{YLg$%EY*?w0_qyDEmeam$Enc?_9!})Kn^WSWj z|Jm;Uvpv2P`g|?&{aWJxx5)p0ap1r5;6IhYe`>@3RY(7+kNR5^d#x(rMnn3E&cb_> z>%R77|L@5B*_;1$V*bCrqL;I4e@!g^Ke6=3^t#`(>wnE`_%W;D$Lz+xGaG-*YyGjH z{r94-zl(c+EbD)|YUZzHlm4%t{bI|~7u#0+*|PA@wncxpFa5i7`I`en7bZLUvj}rN5l-fsqRGU-@L~cBCwnJj z-5Z7}?);8k5-BGv91b-1YUkeLNorZz$j389s7h!`bAY^2{EmXc87!w3`TDacioDP~ z!=vQU$`aYte1w^Wm8Yjb(6w*ILQZSbOTui&x(%wON`o{$PZCzIQYd_6!Z~4@+Vl-# zDVtJ#r|HCO@_E?Fk~zVpYX;9(mS&Ghhl}rA33OKBm}Qms;Kc$(6``Jmy&8XBG#+M< zcAm;7btEL=sH8-1%DeCmfJ?>^>=`)j04$ zp-6|{OrvtH)Tk*=E1bO4-YjAKth(G;!?RCdLFZ=8R@J6{p9wp)pB@v^2$-Uv8N}?t zuQYR>jgnSd`=lSt9wDqk?g5Gy8LTfPuqlPtI!Oq)yL7aOdzy$H;dgSGxPaSErD&!@ z^&9~ge(|mY4vc&eAK8>=NhBTMip|(~++nW7!9#q~5sI@i+BGg57I1swCZZs^BjE|B sstbc7GndMS1FXUfMKXa?Bmx^*C2Kw~P7#uDJUJ!hEypqkMn(o}0F!L1cmMzZ literal 443 zcmV;s0Yv^sNk%w1VH5xq0M$DH_m4mIZzS|)9r~w4>`o5$WfGM{2lt0F@K+f6dMW+1 zOZb&h_JTrrPz(8+KkT}W z4-Zyb9DL7*ga9!v9srB@Hyv1Gi;P95*6|+F2?2EsWIJ6369xt$0308RiUJG_LjwyU zGA9%;2_6{~E;b|>1O$}}8X71R85Sd-HyR`e1Ok-@4-XX;2^J+5DjOR*2n7hYZwwC{ zBO!1~_$vI}!m2+6^%xARsIT8+Ani5)u~;6A=0kG$sWF l*)G8PE}06T|mq1*rf diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/angry_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..c05d2be3a7972ec4f2d9f5354a9c1dae719d1805 GIT binary patch literal 1220 zcmV;#1UvhQP)3$g6vq)-cAK&zV!#CqTMKRJ22-XBFbvCp1xi~f6p+QnASfX&h4R5DCScGI0!>sv zs_~1dwxE7MBPC)83Q80bAgxls*4UJ1JJXr>-p_O1Oq*6(gNZNs=e^u}&hMUk&w1ze z`mNFE)t!JCkw;W2sua~nR2do5xtN~(RXu@ySk~>(xi1O4`x-4T`nc;I<4C`COy|@_ zZSM;%hC@Wht-7li>(Xdhmrn3-8CK0n__G0;8nMowCUopgTDN35HfpOr>f0mS0o!(6 zpyDm=<_xz3hjw9}sm40K4}1T1cww1nDIC}VpOnL`TC6WV#F#(IRv-2K=K`JK#{(z! zW8_XGSn;-P9o_@a`=De#Y|ep=nXthH#p$pn1=h>^)CbUTlh#ccsIM~af$OC z8EXd*?6mDy3I*y3gSX6uO_R54o9nRjab3!1zemaQ76OGiBK>dR!xHylc4%2)~ORHLs{)rq;OBD zrWzwN7HhjN0&^1-;Dvk_O~tNo#O>hKi8QU6&IMmQ!4;EX`IEB9R3`_m8#7RrGTY&$ zf$}~0y<@{?svwDSjXRaNq-5enhrAL|Q8?m5o3=)^Cn?_ z`?;+wWp;(YTL5Cz#t0V_oD?<~va!NRPQmXcq(hRVJOQqp>_7v)$7!55hU=~&{E#$&Gt>I;-SlXhvWH3fMq;l|rET9< zl-2oIO8rN6nhqBZgHpT1n1(T zVBRpS=d$rXn@QkES(k)*LT5h1nBCvmGPx6IT|Az%64lQyujNj41+Bkcqr1mnUrWuj z-jFjC^QBx2X>7{sT#7N6q1%SkZ`-^P&NxQ^|`Nbig78EN4ijpZ37xfn*XJC+7l3^&sTaa~}) zBt>&^Mjx&wMiFxLvy9ZcAxkc& z%)#Iu2pRopOOK*if>9s!?Xl%X77!8@=Cz;X{1Pxyqwvc@!3;Sr_aNJzGr$hc>We?E z4@U9>j*Z%?kNV#4HMd+6)2Nx(($d=1pF^eJTDneEh>hC*r#rOMl_zZy?L<|gTM<=7 i#(dpfZTAKLKlC@^jn9nmDT4q20000*pUa&T;8X5PrcvW10Z2NTmi28K-> z99w~ihiA2bz$!t(wPIpxB_-F($*q@{-zzA%K}l(guI>(V^PM&}yX@_c@bO(>WxdSF zd7Y2%pn$+p0fFN}LWe{}kBEt#78gG&BXdzu@QR4YO+mriLPB@M#O{lWUz3);C@+6g zTKb-(R`4+WMcZ?SDJFJx)%0-Q4zhcpMB0Ivf^uI3nUmWaP29xRaTgr}OeI zR8?K9tGm?DaJjYhYFF3wzP{`I{kNu1zcXjf-TCwHFIn+|z>vkD12PE| zCl2iY8?u_3TUy(iGWo3SdV1~Tg89w+daU^}TQj}cW#`V5j?&nb-`Qx0y&dJ-O1)8hR;%({Z!f zSw-G0Ide8BcU)X-%~fNm^jIT^^PRzw7mi!m`&TpS^*ng^Sc`v^p;3a7@I%+$&FS$B z42|1zyE#NG1rs?ZEJ|<`mU<%=V)&rzSg#-790$iAEs2M@XZ=xaIo83*H$hQaqv_cq VDI+l!4S|Hlo~KE&(^;7qtO2)m5uX46 literal 192 zcmZ?wbhEHb6k!ly*v!qaMW5-RKhJG1uA`PLmmS$YHtM{qQh%MV@GMH`b&ABJ5WfHa z|1%%~#h)yU3=G^1Iv_ES84N7B1t&dM@3nZmz)4`Lq8#Vb$|eUN*X#)$C3RYcI%~PT zWqogKk9jz?<75ppLqg&SK|!v_Q_Ety++1HUv98hMODHgWwOC8N)5K}_3f@WSr=k`z j?0o3$&8|}U*w|FGP?9k}PO7Q7L!`31uYW?nAcHjkUg|+l diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/broken_heart.png new file mode 100755 index 0000000000000000000000000000000000000000..a711c0d8d8505409f0285fd92257eda1ba3a42cd GIT binary patch literal 1139 zcmV-(1dRKMP)@G9Ar!Qd8U24;$Cpiyu=eyrI zbMEBYM#544uW&4UD9%?4f!)A6KoO7xt^!|Zy3w_OYXIxFS5&aMyZavCSAh3N zIy)<3eSOrdT$%A;lJPh|`IDg`3Ot^SVt}=!rI^>Q@#xH%Rlo-hplSHzNqj{`NGgRa zfM0St*<4*sZ+km{yR5B^YtbmCX<}EDj0LKSigi$t(YGh>D(CP-Qqv$t-s((7H6vrLmeA`zCgv;g$mL}ZmYHTCN^m6dM4 z-A=CCoz~4nEXMWGQOfi3D9_8wJdQc;w#~+yLqjo#s`?a7H|{xeaz3d$c8r1XaiXzU z`XM=;c-?MNsnnte8I8pVhQrhyKaN9HKh|_(c>aI-w5YYUr}pSk`p3qYiN{Hr<}+EM zsz@r8ww^Ri;)w+PV`J0=0=&FsOAqiFfC8ZD#w_qwSzB9Q#i2t4b)ER^>@%G$vD@+3 z?P(n+Op}3dnAHakP`+o+O<i&rnp1&?$q`0+}lASvZ zo88`~=|;yt?R}wquD}}LJ-`nP0LL}mxc{Pk|4RN}<8SCtmNuhtj6nbZ002ovPDHLk FV1m;NClUYv literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.gif index a52db7a4e5c61690dfd5e8485ef9eb0af1d69a68..0e420cba4af510c616dbfcad2b48acddc94da29f 100644 GIT binary patch literal 1202 zcmeH`{ZrEg0EfSuV{dG-$zU%q+QtG-5g|_*LB}>d*gWYlIj^$rT$8esy7S7e@XDDiyjSv78BwnbPCKBc7Y5TDa4v^_I9rBav}SEKb`+XKlS_r&)swPR2nNZ zB_=T;CgKFqeu!u{5#6uT`i{}Re2?#ai*d!0bk)iXG_xj8@#a6_{?y5z>JUwJrmu8z z=bWOY9_cSG9^4ynaRb~ebTRQc6K*yxa?rIAJ#6%F(94CFhk=w8PwHx)IQE4Ao=xbM zp(lgvm9O^8R=<|VeVgDDkOM*tr(z@(qiMJ-#$ZN#RDvrKjLE5fC3Q)OAqCl=58rlb zvq^44xDtV>+2#_WsK z;tPrI>TuhIi-t!u?s?58=-+9xNgr#lw4`)&Yw6pZ}_W za*aVFh!!IMk?_$IS~iFjPNru1L)|V$D!0bnaN?tuT!JVx=~ZlT!GUu{=4OS0C$CWt z|D`szZj@_|c)iZu&E*{auv5vZ66HSKk!O77u(4BDvZN3l$!k5SFj(^@gD*{T(}bCC z`h_`D(`V{KhowcTR@qZcq5$twcIBsKHujon)?Df6Njh$b+*H5P$Sjo>YGsXfxqKJ@ z6kC7c{fKIxi_M|07z159{`o-C-PMqsF5Q=}Ewm5}^#PY4vRrFBf97aG-Lk)9oSB@y z+2HUp`@*+}%nzP(H!(O{k3J0B*D4s&vRC~z9@WcsM`^ZgGw-x%ulQWa@f@XI9c zq6(?Up=WLL7cJ=JjITttEjEXRMpwsZtg=JSfVSzL-@2bAidlp;&qi#5Ebq=nezCvS qkdbCPP2badOmMdDHD1f|W5tGQU6Qv-VPzC2Oc(Slx$U5qDE$}COQpd8 literal 464 zcmV;>0WbbXNk%w1VH5xq0M$PLyoVdum>K`mJOAZd|Ns1}b`|iZ7@KDe{^eu;vlaj1 zQvbFV|KLsk+erW4Q2)ar|Gyvp{qOj&8UOm{|KeAPS`7coEPYkF|JXtQ&N2JqlKbC% zYA~hz>$U&gN0)NF`?MMU=xWWo-u=#8{@q&o^5eay)c(aV^|2lQ?1cWe8UFX!|KCdP z=;Hpm9Os}I{?tSNafrI6eI-c9(j9N*OK|JrK(@x{uN zF8}}kA^8LW002J#EC2ui02BZe000K3*4k-i|92W#E zJuMs@9}yZ5e?pN2A|E0I2ptn97bX!K5D7yuAuBWy1QP-R8Y^=pH!iY53Ihxj8zdPR z7#SxcBPT8@!#@}-9tb2bySvg0DhmnK4j9=KGXMnuF98eh;*UQW83H~P6$SVe2R1ej z)r2s3@Swm810W0lI8Xrqhy?NkLO>xw0tgTi0vsp+5eq>b6f2I4XoR4+aRHsET*;D1 G5CA*YUCMv} diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/confused_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..e0b8e5c6f11467dbe09785ebf3aafcdc9c581e1f GIT binary patch literal 1101 zcmV-T1hV^yP)4^ zUWYx{4*}Ue^73GgnR!>qSdt0#UH_41XsWqa81?H2(hEkxf@2Fg}a`DzSmDB z?ELd}@K_|YkKEPMoEa8p+tW12b)`%aL_9TSWe3JU`!47`4qpulyMIu$Zrs1r10^D@ zhW?rQ7$R-K9gS!w4aV_Ob`6<~<26wrlXb~t-RgN>Jh%ur3rPGVta}X77XEG!00yzg zp(zNiQ#Yq~b~h4T-{O6DHG)XZIS7l3UgSm~VkyBA%U0`4i)p;O2C-*0oku zU~#%Ga}8L82Vh}QFV*^X)HsHjRGG_va>=Xo*(!@d3O z^z^pV5^X^TG~@~}mxsA|C{@4+(iBBli`Hvk&u9`A*qE^Mx$637Cr)!_2-+GAT5G4X zoj^|n3JX540ELoYrln>IA{q&VjV{e<_WT0v{nhoaySOIaJIKYiA=GRLG-wQ9+-lux zr)J5z#^8!(+i~bWT6b~jn#nm#-;p?5jzO-XDHOq}tUfWuK*a&mpxOE^^c{%n4%KSdo|VdqI`-~2i7YQoOXt_rVlasY8o@b@EKzN|4Jx|!Ez$*zm|HZ!`tHFH-9l#^NHekTF0KWm_zCCyA({@|%|3m%(uJ36& TLW+k600000NkvXXu0mjf7P}Gl literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/cry_smile.gif index 1ef6ba4fb5c4b06e3a9162a55c92623f547e8a09..b51334278289b1429515bdc44d559c768e7de4bd 100644 GIT binary patch literal 795 zcmV+$1LXWiNk%w1VHW@w0QLX?mtX*!WCEXR1fy*Pr*j9bdI`6B1-N|&v3?7-h!MSu z5XXrK$&3ohnikWb71gU8|D*)}sRsY03;wJM|FRDMsulmM8|Sqf{%2Grvors@HvhIc|GYl;#2){`8vn^3@4z7M&MW`SBLC7R{?#e} z+AjXYGXKgm|I0o7(Kr9qIQ`-^|GiEBzEJqdP5stH{@6kP&`tcoQ2*0i{@q;r&2IkM zWdG4<`Ok9w)^zdPbpPIT|JHo{;%xondKah59H+}0tIr#((I2+lA*swUvCl29&^Wc# zJ-XK=zU4!@)k3}5Cd2D7#_V0g+Tb|Kg(l>#Y9dwEyP1|LeGx(7~6|%B$4Jj@|H{b1|med z2tRLz~DRs6Vy)7@y5v>KTnio`Ed1U0RaXDAeb;ALI)3XmLT!NB#IUfSFg61 z!Ffgt3K1q)kRXT3WI1s7fPp{(L)z9D8b^o#0RpZ#SG0A35J9i(*|odm(pD!#ZQjQr Zgs3w-m6|RzCea|Grg@`9ix33@06R_ikOlw% literal 468 zcmV;_0W1DTNk%w1VH5xq0M$PL|K(hjWDft}OxLF{{@g_W-%6==7W}#>`m-6;m>cM^ zE$OBl|Kd{rz8(Mn{{O@)|JFMFjSHQ&dQ|LksvZ)kglo^9&wutlMWAZX#D_n7@0qo}S+myKGf~0N z<*5Hl|2PRGN=u|n$tU$j#cfpec2r+bwmoCBvH zf#!#yaXOrO2u`HI@hOtNd$+>1ZtZX(*4HwIz}+18pMji2GZ4ry=FBsK&Xj||EdncVY;^Avcw#O_mY=li{oT9 z9V8{Ej!F3qY-*~dqg<&u^{5Iv(<@%p1h=5qTW8ZzkD)3=KAV!LPw3u z67x=Y)p+OIhAO7}dsug-M`>B;70p6z;cR{nC3`#E@1=tBB!X?SMEtv#1 z6X+-xe7@IO7Ix5+vws}NzlOR%8yp)iHxAUmJ(BN6@|ZxnK$t2v;p9zvURS_cYLb zWuU-yH1ODk>tdT|nkYe(|^8?m>*+gHWm%Z%qnzJ&8amO{!&`*36p;4JRi1SQl@6w?K*DH+k93eL8lh%ou~8WNmq1B zfmvSEc_T2n@i>L44m%U54qal#kr2u1I17)j?EAfNW9Oxw%VE<%%LdpPt3^gR6eoH) z^=bP)J@;uLJ614K(T>o`sh?=qFl+CS6@%-ma&GIn+MU_h7aV%z8s{9%pXqFqbDo^{ zBt&u=KNOl1C%b4#-`2iLhn-nBo6m3_BkcFx+!_P<=vqup~J>`7E2osXy_GPdmQ ctL=9E0q?RJ6Dta$D*ylh07*qoM6N<$g2RVY9smFU literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.gif index bfb25077de87204f3edacb9c492a329c80c9b5b5..9b2a10055beadd67b13405cafb86829f57fffb2a 100644 GIT binary patch literal 1239 zcma*m`%hB`7{>7fltL|qLuo0r6uDI^K~PYv!&{ZmO~v3Ak*P$`Y372{4cTyWA|Qhq z7lb*@s7@{7L<=%*BDKiHsR-5rm(L%TN~c_1XWiT^QfZf$u-nV?A0MAFxqM0{qh+#}At7VI!4`$$ zY#ebmp1Ab6^`(8*m-pLTIl#J+!qcVL-AQ3r9I>xF%9-2}h`n+g4wzP{#13|2(fLPtcSnY-W1SwduU;;|rnzHP?Kei!(yxilMPazBM#9$hScO zQ#%x}aK#pXFxa?ii>quDGVE~84*B*d;Glpzp>@JFdt7I5=)yVBa!|ySiy|(H=b)I2 z8w>}OFnIWrhf+tBF`Q8DG@v1ewW85t(L@o6YhwDk7}q6Kk#w|FJX$V!TH!HzQ;G@_ zmCm@y;G@a~w_H%o5I`ryZ6Wlos1f0g2$hm)og41BK`*6Cy;0>wl?I?Jgf0t3`4U>U z7`jkYet_zglzugCub!@#PT%!JtsCkX?x<&o(ICcM3Dw{M#$O(|FU5UNJn%&0-0272 z)B`W7(HjrF(8TaYvp4m~7ms{k@I|8xkNohMF%L#Rw8+rPn1?pTe3<5=U5*aM0(AJJ z)Bjyh5PBA(I|#i&=nJA+md!p{1d{^o3Jio`FoddBLLUkJCe%dH_tsM#;dGbMQWu4` zSh{bA`KPe*qK zOg~xrFVOwJV>lZ_c^FZnBOgN=%d0}XD8^73hAS*1l^CtY%PQ2?!el~wJG#0s-iC1# zUUy@v4{!TnHdEtfOqntB6z`sao&{|IO#vYO-+9lltO#O~2zWn#{}Y5gO^h_ERV5ee z(rs-Gzno1NP^QkA8@l6a+>ZJKhOZC5PHXC3mN`+s(oLRCu#zSWZwJ>UY!CZ(Kx6eH zaZ|s7?f79JX^dl?jPE%`<;ph1EIrh{D@#ER*ff%a^}%D`Xxj@vxws@Yt^Bz-j3n5n z4pwQ2w7A>FY1?!{zHfL>`|Ku&spv74v1%bcuUm|C!JzaNLs z;+!CrhI65Zj8-qAOFngv+!pk6ssr0$Bp|V?WO20CU3s{wCnj(I^VSUR8Na@0Q$(bD ztm$CRo3yMPS;UvIxA@H`wu}ewd6hgFd?d;z;-p{!e?=8f^0#rQVq<;{xz&9vD{yBt zZ`JzKD{GItB)IM|#JR-uB-=p~E|8~meY{cG`|9FO$?lkAb)4yB8UF8}*QYT5+G_9X_}RyL=D$Ge z%1ry;ef`c{=-A8m!y@#_Bmd4L_w@Py?1bmYV(f_}?az0ygLwV!z5mWJ`uYF*s3P&Y zG5`PnA^8LW002J#EC2ui02BZe000Kjz@KnPEEIu(gT z6f2A>3N?`dJPI5hmqQdTBQy#n5Hc_dusR#1LKG<+A_));J0~0^2`{rn0}U5>GXiWe z7YiN>v_B384FU!RY#9Xw9}+zWMLQYSHvkOh784Q@7~n+&9~T+`^z<5*(Lxa(9uFD_ e03TF1aDY!76DBZpSV*v7lOGiZHgrcM2mm`bZN3Ho diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/devil_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..53247a8835b09d1ef67dba3a11f18fafc9551fd3 GIT binary patch literal 1220 zcmV;#1UvhQP) zYfM~46vqjaS1GU*S&)}YUt*)8t*MQPX*9+*O|&&pn;1=eB#j!4ADSkmo-{nDf# zGy$;|gqF8FTcInDR!d7;3cDH_ukI1l7oz!7zONVbEH*s`*Yx@y+B!tlKe}bjEN0x%{gD9r3E*(Y!Obk z1;0L?mInX!?SR)S0|WT8A82?CXxaw!z7PDy$SshwcpaE#1p5g;vqRa4EiekV8*>{s zVtVUVX}4SOUvFe)VsPzR=p4jHF9KgBz~6fS{@+WWjeQ7x=w`rH6!G-C$_GJp*6A7G!AtTsr34(w5szgtkylF6>ML{u%}vABVvr(}HKC>r-Yv zj^3GDH#K>Ruvdc&P1dDgvL<=CU75(Tq|PJ&KgL7vJ;dFz{DnoP1+RwlS>=JmGeFwq z^{C2;Hl$t1fY$Cg~1}zf={3{S(2mSe7Z`ONdC`ryF;v) zYgsCJt&H)&14;p4)Z2K0IN+aX&*&AS9LDkXFn;wS$BF~1f0>YAwtDgWr ztWjmvtYBA;uE9uw?N+GeEtBufkAmw+1m{KbUS*{@cR*|8`4Cn>LU&=T7B~^6Af~43 zQ&IfhDm3MUV>mw=vlTYXmd9cwFAB{$Vfg;t5R8{68emjJ!QZ+UdKq^ttbkICf$p0^ z-6P6-@lM2Q@C`nM&SQyaI24KFZw2G{o5866I0Bb=h!zL3lp|%4&}&#pH9SDV5SDd_ zmaf=y;W$dVmlPg#AB-4R1#=0aNI2k7P8VdMM$Xqf4ADlpV954S- zxW1qXCzpnsK#A#XpeI6U7fi7&b7U?Vw}qPvuoO^?85c{8AtHSA(DUTlQFTO?VTR%|9Z*ej6?%+6V*|Z irs~YTJuAboQvU$jo*OjDtdS-F0000k z;I~CWf0u~-TPgZyq0INSQvX&-Kieepf2-jCJ)(a%N&nj;`?Fc`XOGgasY<_REB%_O z|89lKuSF_<)+oQ;uJU)Q^50E5zZYBo+id)Qx7q(~mj8F#em^Yt|B&SWlXBmVD*Qd5 z`v0`jzmvNEFRA^%rt$x_{=aL6|F2s7e`@x7naiKOj{o=i{@)ky_kzQ}) z_~%s4|J%ubj+OnnUi|-R)!#=se;-%PLrPO~ zOLALsOJ`HCoUX2(ff6I5(j*2!Q4tZpfZ&#R31MM5sin&#CAhd0CE`1iLk+?M9qjG4 z+gRE}CYXhGG$p%;#Gz5il|$H};lTmMCGM;o{BjE(2r)^BbBibh z{P@t+(9qAsv7z9?f<`mF^~)l5EKqDd&269`vBBVI?2g$M+@&*%Qf^PwjLi{S_2}VA zF-@-)j?5<39trd!MIy9t#75(h+viz4-x? z1j8I%yWFkWcurU?IMCiB&=IlH%)F&5>A06pjK`tFhciSrg@~}EIvwfdFq@%Zn8d=) z#>XQuA@E4>21#L+kQWI_9og3%oiqw2C>`S|*q~E!B4L%P4>xz(KQ8lUr+a2zrF zIRF3u{pV@_%qjlNH~;2b?db6S&P0@F6#w8&|J_GwFs1&x9{<=viCPT$s3Q24QTdxc zc~A@f@1XpYG5xJt|G^mlz7qfb`}(Un=D$Gu;*#gcV*m0_`lm$wv`f^pXRdb?_JTsn zlrH$OA-|n;?!hzu_t^i}C+DCT{p2>eha&X8YyaXv|Lju#?p^BCrT^M$``>;3)I<9D z|NsC0A^8LW002J#EC2ui02BZe000Kpz@KnPEEks*DGD_$0vpuSZnh)T8wVU57&93j!v;tc76Jn5><0!e83yHx k76Q6hfnkL{1pcf9EXL44LMK9s89?X|qQ#3Civ$4xJDD%WfB*mh diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.gif index d9cedc56bdb0cdd234679cceabafc9256bc2852c..8d39f252bb7fa7ec9fdef6d88624e1a08bcecb72 100644 GIT binary patch literal 786 zcmZ?wbhEHb6lV};_{P96D~@q`BEza2hV}KlyX)9CSMdL=75iBwb*)e6^lZ^TQ~3YQ z<9ym9_NztoSGUN|7MWi?QqSi|{hloHXO{4k z;I~CWf0u~-TPgZyq0INSQvX&-Kieepf2-jCJ)(a%N&nj;`?Fc`XOGgasY<_REB%_O z|89lKuSF_<)+oQ;uJU)Q^50E5zZYBo+id)Qx7q(~mj8F#em^Yt|B&SWlXBmVD*Qd5 z`v0`jzmvNEFRA^%rt$x_{=aL6|F2s7e`@x7naiKOj{o=i{@)ky_kzQ}) z_~%s4|J%ubj+OnnUi|-R)!#=se;-%PLrPO~ zOLALsOJ`HCoUX2(ff6I5(j*2!Q4tZpfZ&#R31MM5sin&#CAhd0CE`1iLk+?M9qjG4 z+gRE}CYXhGG$p%;#Gz5il|$H};lTmMCGM;o{BjE(2r)^BbBibh z{P@t+(9qAsv7z9?f<`mF^~)l5EKqDd&269`vBBVI?2g$M+@&*%Qf^PwjLi{S_2}VA zF-@-)j?5<39trd!MIy9t#75(h+viz4-x? z1j8I%yWFkWcurU?IMCiB&=IlH%)F&5>A06pjK`tFhciSrg@~}EIvwfdFq@%Zn8d=) z#>XQuA@E4>21#L+kQWI_9og3%oiqw2C>`S|*q~E!B4L%P4>xz(KQ8lUr+a2zrF zIRF3u{pV@_%qjlNH~;2b?db6S&P0@F6#w8&|J_GwFs1&x9{<=viCPT$s3Q24QTdxc zc~A@f@1XpYG5xJt|G^mlz7qfb`}(Un=D$Gu;*#gcV*m0_`lm$wv`f^pXRdb?_JTsn zlrH$OA-|n;?!hzu_t^i}C+DCT{p2>eha&X8YyaXv|Lju#?p^BCrT^M$``>;3)I<9D z|NsC0A^8LW002J#EC2ui02BZe000Kpz@KnPEEks*DGD_$0vpuSZnh)T8wVU57&93j!v;tc76Jn5><0!e83yHx k76Q6hfnkL{1pcf9EXL44LMK9s89?X|qQ#3Civ$4xJDD%WfB*mh diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/embarrassed_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..34904b666773b70bb2bee3839d83a29debcd6933 GIT binary patch literal 1145 zcmV-<1cv*GP) zO=w(I7>1wk%p@~O(=^FU+p!JSA82S(qcK0&Sc)k4(}fM{Mq9MsjnFX#lTH_6kKp)TpbO!=R1xf-xrJelzTI=O{@YZ<4e$;-%^mhrIBsfXPCjFnW z9*74@JTQ%z=hIGp@IT?L@rGvLedd2Z$j~9EsY2`h5bK2vyFmo5jKb^)OnwXH3f%h% zG;SXN4yT>`+?sG7tfTz)-p%}aRK1Qv!p2^t_zO~=KuUjr0+Dv8+XXF;LUss-UsZO! zF6?+|0_3ix4X%ZM#<_P6>YpFrbv&m=X2cYK1kVLe!CLU_)tOpoeGQr)grNhlMTLS=Tqu(|b(z%AWlF^=rJ_e_IK#-0gPXHx zQP6^7&%6uGeNa;aQzsKZ-x9osYzk{5urQA;cxXYyYAvXtF z1iL8Md>L=-W4P%)$ff{#!U4P+X9O)qpyUCd7Bpnp6ssYzZ9M>+H`anGiEZl%yM|ap z7@hTCQNe=#bsD|rDdfU&fbOgCYznQ0RSPNrViY2ZDOTuz<~INImoi|L{sXt5b70Ro zSQm6rKtZw>u#tp@vME^!4^FF4QvV~OXvLxxi%eyL#01HioIz&=tqN2GTtEf13hvA@ z&n(x9SQk<)3pRi(D~R5;vVoSPs%WGMoDm_`1&~?=H{mkWSYO6N@EAW|BAapl0e4-G z%L{;52w4bwNPPp68)FH+WJ{7*7p86ziPZc4hWv#aceHS3c!Igv@~RrNxv`ErI<~^a z91;<~mLy_GE(JSY0Z6WRMAdP=+MTdd=kdx>B%+vli)@J^x5lBiW))m>W%TR}_EHgb z1=G@uY^uYUDC`@aM#62YpMP%bIA8YSxpkIWV@%XT)>)9iSLN!ZdKS$a?4m)dg4x_? zO?B3=?`LRg?@v4V!6na0JNZGH+6U-*lTh@EF|`#-jpqk`*=rB1=g(>(^w3-=TW3uGUAndkhgYXBwR(pE=b7G`4;RvG65X^w`S1- zd`Rx>lbm`Ma-$G3ev>e0V2NPy?P>0WJ)c6;uFruN(@uW&M%vsHX!RHuzloC_VOiiu zZAn`nc98H3X(#{14foI$EpIPyH_#Q#0H=YGVE$ocYrA3i{~dn=Ck15*vEe9t00000 LNkvXXu0mjfxmX{o literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/envelope.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/envelope.gif index 94e0b1fa59d04474bad8443fdc072c41f1fc905e..5294ec488dbe44117f3ae6836b932fd3b6a27b52 100644 GIT binary patch delta 482 zcmV<80UiFT1NsAhM@dFFIbjz77XbAD0H>&>tFET5udK1Mu(h_dwz;vlxV5>tx4ONy zy1KZ#yt%x;xWK@^#>d6S$-~FU#>mRV%FM^j&dkow&Ck%y*4NY3*3{kI+}_{Z;o{%p z+I_7?d$IE?C{e7k zJ^v{cW@uLz3mGLPBPAq_j*lc63l~Q;F9!gbnF=qJLNgKxF;FTdAS5vf6KYrjAWVO; zPJbyN0!>CFE3LF1t@2PdM+9wC@0D&&CDnv94>@NvevAXvYtgRs(%y-Fxzzu zO)n@UARZuf4cMO+1TV5LDI_Z|1Qu#D8v=gUocKZ^V8g8!Bs$Cs_@V;|8EN!vF#*9t zga8;ZM(6;+#F>b=wqRI*f<=pyEl^A%1}}1p3PCDjvM3o-MTiP2wnRJt0)>bd6F`Fs Y4f+$rfh#gD7|_JDsU`y#@B{$>JM{PLk^lez literal 426 zcmZ?wbhEHb6k!lyxT?YM?~>2||NrmL6nnlv;@|baw<}Hmyx#ilu+6JQI`22?JesZa zdbRw&Gaesz8UEN|{bgVFt@-l*&O7`)Y4dcW?*2C6Z`;-W|NZu1nZ)l$lm31@`eD20 zv;7ViCWv2OZg6Uf-oLw1k5@YU`t+Z^ zfkA^o2V@w?PYi6w9i|j`=t%XSc(P$ZfC!gYQep#x?ebHZ3sYY7adj|Wk*G^CTJE6G zaxg>SgQ8Poh0PU}t#$#P8g0ySY*}Jr)m02U^-fHje9cvCA&h(so!uHt>^$rf*tpr1 z#KqZJ7?_>;rcR6HTq?xP%q7ge!ikS_8V@t?(rFC5%*+Bz-rUnf**TXnu$(){bkvFU zIPcE=`rYZ)90%}|sHtfs)0IYVDqC(=uKA*+wKS|OBd=S%NS)@IT29m1T$$Q(D)Z7T zEnbwh%*#~NMDPHnP=GPO6olp!Cs(;03qM%wc`lE`TjcV7|6Jt% zTI6&10-jJL5G@Ip{s<+~l~t)^Rkk9Pi8nUZr=K7XmQ>ofgsgx?ULZw!!H7bo( zt=U#udnclx4YJ<}iC9hqo?{7gljfL_J5iE1FkCjux|?)+F#xxO5Oa=8EYgscZUTb5h&- z1;LV4O!#1Uj-a?wJ8N z1O-n?Nu80Fz9}epTS(}(sOWuh@$1skcO)e4NlM<9m3=HNeMM36mV&}vRn`0I>dzDu zUa6`+)YN>Uqw`Kv^Odgd2YvlddV22+489r}eKs@uYHt41-28{7S1y*DOJx;b^~ z?U^(0E?jtj$&v>vS3X+1_R;$FFZS(wd*;lCYuCQNeEH+`>!0u6|Nivp&$n-XfByXc z?;itQfZ|UUMh1pB1|5)Xpg3`0|KAYT)ZEhA))dQPWZKi)*WY6(5ZfB-#4a^cdbSk1 z>y)W>a@I?hm~q>4n=iGomUUbZ7sRNhvu*p1?JCS6?JY6B;{F@=#l`wL2#UFdO^FS4 z5oWdZ-5BejZDnnB=kDDl_qCm4V?AUHUc7wu`URiYHBTm`&tH_(KPxhMA8Cscxab`2807v|h#c9;71X`w=M^maDEh84CgtxOFp3|c9U86FD{IxtuR08VrG Am;e9( literal 183 zcmZ?wbhEHb6k!ly*v!qaMW5-RKhJG1uA`PLmmS$YHtM{qQh%MV@GMH`b&ABJ5WfHa z|1%%~#h)yU3=G^1Iv_ES84N5b1t&dM@3qLz`Q;hBfTb}(bj3$SZci>I$AvFnO*1s~ zDOsr2A=tOzwkOY)_z$Ae3=EU|*mtzNoELC1aW^a1>~rd>j&32v4|R^N35e*9IP=2R bBm2VFA8He>=d0A!3uiU8wzW$NGFSrun#)1b diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/heart.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/heart.png new file mode 100755 index 0000000000000000000000000000000000000000..df409e62f55f9915efc6b88d3543786ada9c2897 GIT binary patch literal 999 zcmVy=EE0+jENy_ca@j?ofHzuh@e-|#F+P|WlD;$zCVk-#;IW1m6Vq6W z5q+R(qBeCC64H7>h>&Olkt!=1O9|{r5IHP#_qgDm<^1{rhRcdX(r@y6n3?Z8-MF*NcLMkd*b8I=eZW27CrvkkZ-9ZRFoCHs zBC<;?>-qE6R=IohsQi|lEuCd$@}RL%W}iF}5&2O>wu{Km)BXL@*U%uoyga$;a>?zw zI(c^fyohCui^#qu<`TGOZgSG>I&?^WPfeAvf&vLwR*GI)DnmIra^2~akt=FANKKVH2M);m%a<_``64hCMiG%j;IFQO2lHKiKV`YO zD2lS;>_U+U-F`nQH8s5I>7mBs!I_k_!XqN|kBkthsG!>Cdjgc$fbYhxUCW>A>x&Bp zNKHqDcO%o%*tZy>Q#Vh2T(lw=n<~;bYijC1}@n8N=Zs$=HWvCuLDRmLm_P2wh=SU zO~Vxt%uoox=>UdY9#7Tm#02SEw{99fV;H1)JOGbvz+h%o730AmG1J_1jR%8dR#yWI zDkAc6bar;AW5+Ei8!>+2$nr>*e#n6`Q?@{?FYR&X2^h`g%{E z%nJE@}i00BlK5i%MY*nRnO0NAJLMqs&T4SX@6(27Ry-92(7J=WcgJ0W3>XDk{e z`S4+?Z`=qfc6*hk8^fzTap8*ryJF#R*X{cHWc$DXnRfe|v5AERY literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/kiss.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/kiss.gif index 70e52551417b6d1c551a5217f837e71674118695..ffb23db05a76e7e530ce7a26d658152a37028ef1 100644 GIT binary patch literal 683 zcmZ?wbhEHb6lV};_{PAnjFE92GxKUTwsq|6E4jGVaB!^R=ikiEzMYkIFFX4N4vtMc zJllbYmv;vT$39NZwc_IIq@_0~DeW*f-(_cah?DauKmSQCt~1=+S9y642n!z)6+I&$ za6(M%l$h87Ny(#fa;K%G&&kMK6coHIB643|{(+?ABRRPz^75yZm2c_kJylS6tgik{ zP3@(!@=G9y? zCQZ6Ib?WWev;WSV`FHm0e{<*FU%K?+nl=9xF8sHA`QwcnpKRLnY{!m&yLZ1iefr(` z^B=BW{dn`{*T;{)J$?G)&6_{pzWx3A^Z)<<47h>fPZmZ7hH?fSkP=XwII#b3C~sDsNi*seQi3)VEpJ;D4#m?5=hS?>)tgWmlAxM~&MIify)8%EMTozuQmWs?umd@UeQX(ZS+044;#%6}n+)NBi z+|v5S@Aa9}ww0HUcd|2Lcd^(1|9}4d{c}4@=iJ6wudXcp|NlP&A)xq^g^>Yhl@3TD$W8{z zPfS!-6obZaqZ~!60w9*;zw}97x7lvs~?8Fe6H4k|81Hjj*c>Hr~ zYRV~875Cx8e*>MskHAO3r!U6GOKi)+<@b{v2n+$uhH3r0D?H%U4*`9~-Ma?|o0`xp zi&Q!d#l^hd*vNs?rVoEeqM( z%RpZr+L<#{x3z_UZ-I6prTiw;+WN)p{rfCDc)-bEknHMeWGsf9oP=~5q}(js=5EUw zfSpRw`|KIHb#)Y@41M=QwutYCljX!t+Z6ym~h9@V6^hs>9c=QR(-i2(jKz0!7mhstT%# zOeT@GO*)ZS3u_wbl@+F=QDWugob2oSN2uyC!?ga|+KN7;9C*~&SZZ~35%hRaoKA$x z1**DMS1CbJQ1bF{`2EOuoYj#LOv_?AD~pexK25obias<<>nGSU{)TDI1-yFwySHxj zKZd+tJ31(HyKxJFT3U+3=R?WQN6~ds^Yhr#)2xh*5st-(78deBcQ>x0qOUf<+lFXE z0k8fx@ZBG`Z&wVRKhM79WpY%NY(*hkQILR@N@1l^M3YI}b#>Hsbl6$@_kU@aR_j*Q zOYn6A4QPqa%ru9)yOqfBFpDE2L`O#f@Kjadt*N1~wwB`hdP6uIpBbh#kjdE*zQrU6 zybl}&jv{5blu{9jG6+0cUk?q_THY!DmGB+R1Rye>-`%w9d%lwl(~@Ki?W^?v{pR)* Z{vUNCpEyW^ic0_h002ovPDHLkV1jyk-jo0U literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/lightbulb.gif index d44c2ffe6a0ac0f4fdb9bd8bb2921d931ed6b8e9..ceb6e2d9ea3a6496e3df43e6f815567f0d840bb8 100644 GIT binary patch delta 625 zcmV-%0*?Lg0+a=RM@dFFIbjz77XbDE0GD6@nq>%{Y7nV=EUkh!)`$Vyjsx6{0oacY z+mR31kP+LJ6y28_=avKLm<9Bp1^=lB@S+Iur3?S93jebY|FjS6su1_J6#TOg|F;qR zw-f)l6aT#z|GyaBn<3nqC*Gei-k>wzp*G*6IpU)w?Y1d@__!tSwKo648vn!__`w|i z#T@_0ANIi_|H>f$&m;fMCjZJU|I#M^(<=YeFaO9k|JOgblTo^rRlb{F=CDKKu2I9I zY{aE+$f|eAta|3PVdl7I=ecPA*g^l z{Oh#m+r{bK$@b*N_vp^<<<i_@$k)bS+ zum^u3`2+y~0B-;+000007XTLkKnL-FZ-Rq^Zia@0iG*$+M=>iaEG#ZAFD@z{ZiU5frl&6%sq4uZ2AV1UX^3x^Hez9#m&+Ur7s3!HRAo zSVO7QGc6*{qY5S*-Q6817YMGxY6cGw=?{MgV#0-4I6qEcZQ1Vkn{H!4AP68qW9)H) zqGOGfA~c97sX_vZz+pn9ETNWaNQoc<-5|IE`D`4JJUCK-58$o`t-OD8Mv?7Nmu^__#43001UX3#IAOga-*$ Le1$r_3IqT8OQ>PKUo+V7<3tQK)OMGVqoh%Fs;BtN2=dLnZbdFgQwT6&@*Kl6Z1ud zfC`?q#~7X;n!zEUlW!!DF~>t(ec^671256f3MTqm|H8{e+1c1QSh!hry}4YOm^nE7 z*;%wZJaw5gTiCfZWvN&!5cw07D#C~!Zp0GtE9mSpvpW?G>UJQfM~fDiQb`4{q6KSIy`ikVO14h`ZF zA0#yVBA&jHkAYVtS=HNy$0C6+RDP0wem7CP_8HM5Z_q71g3#&1DbAy3XUP8e3A;vK zC35i1-$59YWL2r%8Ojna!2&G<*xOk_00BU_J+9bv2Rbm6C4ixJ;F(Up7`Jm*>2kWk(RVcBZ2#~1-)oaVFum2EQdJf87FfA}`u&Q6v0?WRYSJzd1{f7W%+ks!`9X-KDGKo>h zgI%sd?JD&4SkITpWy^!5Do{ zonh1U0E;P;#gxHf%4CE4h&(ohxBnnO!)LeIlj{ajKy+umQYoV3Cy6g^-9cSy2o z)MM1UL;y&#YQ`b~CB5)%^!nm=6xLU`v6ke<#-BKr&gkU(grWzoGy*q;SK}W;%iUYt zTqPtX7#Ne+RmP3CWNT%b66*oEFTT z71E&>)uk8bp$zAw5C5VA|Dyx{r33$_1^=lB|Dy>1r3?S34*#kM|Emc9tPB6I3;(kY z|FaMOv=8R37yqde|Ee1Qs~i2T9pDoE)W;EJ9cX%GthW2Hooqdi*mz?dS%i4q&4+UQb6 zD9k!#s)Ptpr3@Xb3Ww^!aU;x}K7H<-p@KsX*r7O>WI-ZjNs^pI@*Yt_;qZP^f5n!a;xl4We#HxkUsWm}n?W(4ZlO5+x-j zNO&N@%-gWIa~HH@#!3hgR?OJBT~N&jFmlLnfda*gn>}$rsJX4j!j~utgg8m!kjRrE z45sjr0ilOroeWKk95G@LEImB&;Wr15?sLK0}s%E2XP7=bP#R<0RTHW+Mxab literal 451 zcmV;!0X+UkNk%w1VH5xq0M$PLxrZVB zRl4rz;(1UD{mxwe{qdZ2F#Y5<+M74|^y>5R`}Y0+`I|r3$FJk5K;^M5``>-{xgXTC zXaE2IA^8LW002J#EC2ui02BZe000Kyz@KnPEE93mJleFmOUi911oFEeA6`37P%2z z0?h(6DJdEf$3F`sB@qK9ItMi-4-XpS6=Fgd6cHsGCxA5o0yrBL)j}2+7$hj|3NA7a tDCn6Rat}j~4<>RP5FkR}6$}$Z2w(%iVUu$h06d^q@1n<#Ab$h_06QGh!|nh8 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/omg_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..abc4e2d0fd657fdb681356a836a798f6b97255c8 GIT binary patch literal 1122 zcmV-o1fBbdP)&{j}T+buSenpo44P)$uX$!0s7P4<#xcW2J=VP-a)CRM=$-wgk`{LVMu zoQs&bo92G4A?T|Hx`9rh!x4b)Xc&k@jZA8*_r?9-4ME>=l>C&~_aTg7Foq#9Y~KuY zLeNp@XbhqCM~%$Tzrq`WzFOcTQj;gSavHoQG&}`?F4*xn2m#BZus8xU-$A|rJ)c4K zBZI(eQ6rPw5^jUlD7QY`!;SOGI&fOBvkS30hR9DN)^39WDq5hb75vXZ;tE`SQ_=di zVBhQ0AP%`5+zbDln;)E1Qy*jPKcg1s#>B$p&&2*p(b5)RcViV;5;JG=!^IdiwUvbS zpCH_Mma<>Y!0zYa(KiO8M&{H8ctg;4oYcfueAA`Owii+P3Gv&tTZA8~!5{YFHP;Yp z1&|V?!m6zyZLBc&#}a;jE1@F;@O6jcnI8q!d;6kBW=PE3P1~bFSrdGFIHY#uQGP#~ zH3QW?Fipr6AfE?I7U5_bRF*?!1te2Y{|;CcFn$4!U5+8j_G(Td-OODIv3diw-HVo+ z2FrrvGNiKT5d&RM6~X#g7X5k}l4+QYLwW@!&%@3q!0Uy%OCg}!)Pbwga$hrx&DJ zuY(@Qt%0RLN<``=R#QloC3H~=x0~z2ZAzh87Ja9hZMU;=P>Q~n9<-ylGjBU~or?nG z7K*RCvFHTaVI`-PMp9HX4$+16`p!H|&6h-COL^c!9{TS$o_bs3hbsvpZ1Ajzod-)S@k3gMDWK zhF#|o!o4xJAArp27EUc9W2?jyCh>$x3uX zfUE@tQ*MgJTk`MAy&%``DJf6|Q)=lc=otXv>5m$jlz}r{7f|K}W-kUwj8GKVL(NsV*Fbn)i5i(N?`7Ndy$hvS~s0{{R307*qoM6N<$f*}_dBLDyZ literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/regular_smile.gif index e5bc34be362f6774593dda685a0e6b6ddd963dfd..fdcf5c33e3973c6fd0bf87b615ba4bbdc3b7e38b 100644 GIT binary patch literal 1209 zcmeH`{ZrF*0LMT3GPk)0SsSu7wzZuPkcY8=Y@XxXkYJc`vj^-hEJ-UX(mJTq4h7@} zjUQyoJ9$VW2By-gAwv-k-DKK8PKQ$-N{I24m7O=PYbE=B-<|(NKlSN zvYC?tv{5(}hc+%wb8u!EI=DC`!08o>u6T6t;1a+sM5hQ{@$ke?JH>M@8O}=3Aw!1( z-z3rBsuny+3l~(l@ECfe=uJR>BF-m8`{cMRN56_Wr)4}^`dliyGT_N%`kqGL26XGu zn??6;j$Tnk{c3pS7*N2UL=Px&Rf&KagHJ>QS~{S?kOntaVQ>v@u0?P)LTeF9#%K!0 z);;_&4R_Npna23j>5*q~M~`p@-D^UB0WMjXYg_5j9A?}U^H~tu$xIf-hDz|$?xl&h zVq>KkJAlw3X6!IMQ$o*vieM#1st~HhgcY}KxN{Vv^|7fIX6nnOa5d)YG24v!FEHJT zS!eA2S^V}LX1g%g9h*OogZQd7@HIva4&>uUZTg?QT8tZfND3d6gQisHn52 zRCf2+0^cUtaqIrYo$ePt(|s~r)|5W~ywdn_uID2C3ngE_tuZBk#%;D=Dxz%1|K6gj z=R9e)uYO#j@vcz)@!Fnp7VihOv#^jIdEIZWqMj2+evWq(M`~WNir@^!_%t qkE1T}vTO=}p^q(bnUvZ?!^Fpy?lJmG#KS@EM|@S8cpr;JHvJ1$jidMg literal 450 zcmV;z0X_alNk%w1VH5xq0M$PL{pX9mh8O?kTd|Fx|L14_-c$LzC;#G7{k9tawif^Y z{{P}h|KCgh!y*6ONB`PJ|FRSQx*h+s75?v_iCPS5Fr|@W589s}|H~}=>$U#(*#F%_ zo@fmJ{`&Q?9skxn{>CQ%;#dFNJNC*n|NZv=z99SGeg4u+{{8&_&Lhx}7yso|{<|6f z&N1%6GyeVW^YQ!5yWaoULauid=-A8q;&J=_|9w@uy{FXw=SKh1H0HlRrI6c@VVRe5 zz5oCJA^8LW002J#EC2ui02BZe000Kxz@KnPEEVjE9cUBr_ohz>dP?A{ZDT4Im>1x(KP6 zN)A=S4J9oy5eNwh%Rd4iTO%q93l0n30oM?3KOZd{I}`yI@BtJT5)j!!ZWu1|791A+ s$|Rt}7tO#73lu1Dh#)~=7B?j#c<|8Bp%a1)JlK5R@j)5J6RLpzX z+6!S{k^OTh{cgg}o%>ICG#qLMzG8l&k4r}(;6U^RXx#;kyFn?qHv)HuVfq(XEWxwi zLBo@0fc}J?ORoy|z%s($UvA<0fVf>p6>Ymv`D>`fII3_H1gP(TU?;S^45>>n^pVi{ zvEr!@;-H=>2UrO|&5bYmWb$j=r{58+ZY!Pt6Wk)W0>*%AmOXV4Jq|4gVDNQ#v4pa20YmH~mD9U(9V>*{?#=xMKC4!Z4AaO+|0B)l{@ zhpO4G{fg{i=0b%0b!2@2U5qbfR#+%u4c@`JbcaITp^$g6hLTuAHif(k#^24v0JJ>^ zfdI^0hyZ)a@Lp0DtgAyiDKL(=W!I2SJKiA*q%$t*jJy1t6%Q@~&H@rY1)KIk$^z)E z_2E6(!%!ap*QsjFjT`ESY+djDZmR>4ist|ni(ckNAZ;O$BdE!<06oj_lm(k=4X)8B z|6c*^x*UG%aWC81BpBiF8;^PK<8xI9t>$mwZjDGy%2JhZ&y0WiWfSrIOw#WdzXa2_ zmup?=RSAl>mzI}nZqeEe3q@V7^#jRNO9C6f9#*t=16bAYVyR-W%hhXHrl#_1f~RK| z8J#G2WpNFn8&H`sR>EVnc0+y+3) zFMYT))z(k@u{d1=FkjN-i%a!ivs+3Im>SKF&!GKS9Oy5@R=X@(fN#i*zQ*9&kQsp* z?OhTY@iSEze@D$bVDBkt>iiyfKVj$Yt_iOQas+Wsa_i?XsbQ7`UN@Ar`9&L5`(DD% z{jid;CfpCu3_K6)1iF0>@E0)b`-_!V+XKV@ul)-&_G~mzY8N8_0000M9sjoy|GE?Vx)%St75~2%|F#?V zyBPn!82`N;;I|>-x+4CxA^ox}|FbjxyD|T}HvhFa|F$~)y+8lFKlj2N_rxCm!y5m@ z8~wu^|HdBw$RGE}A^*%F|IH%*$tC~KCi2ZH|Ij4=)hPemFaE?b{n0o7)HwgWP5-`7 z{>DoE)mLV{?~r};%xondjHUX|IvZ} z(uM!oh5yuv|J9EF){p$&pZ?yS`{9HCPuv|Ns5~0000000000A^8LW004aeEC2ui z02crk06+)-fPI34gM5a3go%P+CqzU;L?!?LB_)#}E-ETqTVI5B6&#H~9Hkr?7%M;* zBo=jvd}K0cT}nwwNRL59Yk4+hh=P1hCq2eJE-ou8Dkvu>9;G!_PQkEnU``?;PGE3* zim-P$Hd=3bdURqsICs{CH%n1SxD5@D3=GCDYHT;bd_?pBLXe;mCB_amJJErK91+3b zOwgp_0|5jNjvRS_V1NTuQ$)al6{Z3OR2VQ^puiG>gfQ>I$(#vmPM9YnMmz~KCnl^i zA+osfQl&|gD{1hw5dlom9Sc~b+`^S>2*Dmy@`$)YD9!~YMvx#85+DGN9c5cEdx1ws z9AQptRsvER`34MbOOqmYJCFs@Zkf82e1SN^^r|I$1EA)I_y``>;3_t^gLp#T2*`tsxd z`seP!Gw9gMy{FXWu`QQt8Tqgk%9Jku(lr0uNB`R}v4eQ(<@f*n_VuwH{Oh&awLFw+ ztN;K1A^8LW002J#EC2ui02BZe000K*z@KnPEEqrhw~o=Hn2lCdxh zHY;)wNldtw#iLVkIIhshM59S$zP3uuJ%UqsrJ|6@(B?K@WA1j`pLLw771hpg%8!QAXD=8NPus;kL3nVQ(B^3z) zDk=dcz`+$v2?ZS(*ccT60|&1|6&()~7A`U;5)v^02N2$lKW-v45+3&G0s{~Y!9oTA z4g^R*5F!Ku2?7rAgC}IcfC0ZQTmZ0R#zHI?AV5%{;DE;l42@_U>G6rllPI4A0RTIR CY|IM) diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/sad_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..f20f3bf3c09d5f95f64deb2b0779bd1cf1a20acd GIT binary patch literal 1115 zcmV-h1f=_kP)9(E6o9{bJJSIi`ZF^v4{5+CinJ9hZAm~>q6?G-5JO^AG~!AVgVCUIWsDfN#-9Xt zlGwz=xPX|Tm>8lK8|_puP@sf}PKPpW-*l$aY3J{~dtAKN&J;^z;Z07?yLriX{?ApT zlQS%J+G61bU^~zY^!Nf0_hk_HC28k#O9BA36ud1K-iw&eNc~`84}v`i=|S&jv=?H& zSdXVr`sJjZKk=XNwph3s_?X<41DrVsK?m9%gXmUh+y+X)^f{Osg3<4xT!Du^hlcz5 zfI~?;pIH*_f#n>RK3dE9BjRp4sA$=WD*S;eCs4(!AV8=CmUlvA52Vk)z?(wn+lq~^ zB|tq`YoHeX1s6X&AlE*@ec&b0YFz2U&)}B86)*-|Q`OW%+glLX1^v&$olimg>wQT( z|NJ6&TP(bn+{kfGZWU+C)6~gTrA!J$JTYcz1I9qpA%1oi5PI4}Rio?Q12+W2N8!o-6sm4R($42J zu${3}7KQW3${@OwSn#YkS0Ua%LHx`F#ezez;1VC0BtBqMEVy9&Xs#TAmWLr2gt1eW z-@<61mvkIf)T5m=7{?3QHDof5S44qK)+Lj5tM?i4;3DA6A&FzKdMBjg__IL(=)oR> zP!L>aQJ=1At;bro()(_y2a%e45K1M_b0d(6Bi4S@wd3FqoCiKui2>YJ9%ln^5Eh@CiUBq2yNnJXwYT@27e)Z>%h^NOU{f_ZdFgjk%b*)wv zD2*?QTmx~U-7r_u^SQn)F^ffltzZu+qTS%_9s)jm4}YD8Wua@I|qny7GkV1^cJIrsOpvSV!n z2-t~f{v6Ko)u}u?yF#pqYR{KIGkWSb*!Tu`8*_e$oDoiLvv4lMa?ks-SIR`z$5?ky z7_u`kTlCVgVi`28WHeb|dSskV%OD{O;SRK32D=ARsKAD#ozGRrKRbM!lfBSbZ_rv} zMZK+OXZk?Br%BuqDB{|G`oL=rjCX2*8oX7e}bltJ~qD#)3ch2W4Jy6 z6PcPKx?o&Sy9UOm;O`qKr)>1>m}c`k(A3dayW4e5=NzK_aDq)oAXm{8N>$LUx~1ZP zsnc}55ABB&z@ge!y!o++0H2b*@C^MgLiQZgY44HH2qNGbh4JU0xeIn2gQm_efmf4u ze(IL+8YBA==P1{|i;*5;K>(uNRax_djS9SywDVv83vw&CZ=e}?1lR&}`x@YPV93`$ h-TbuO7X1G>{{Vo&VsT>6tr7qL002ovPDHLkV1nEx7S8|x literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.gif index b4540175035281da7afa2b185641392121bde669..7d93474c32aa7d066bde566fdd746483f5dd0aea 100644 GIT binary patch literal 1231 zcmd^;{ZrBh9Du*Rqo#-COCgz}9k}mLE)5)f;Ya`Ll)G~LSHB&!Zf5)C5p5LDzp2OUDlq&K;e2`ZN zauAKC(kU^FC~6EE!$9ebkLXO4!J;zbqFL-{_MxbxqvWJxlsGoZj;FEMA0{6o%TK*u zm=T&Oj?5C$awXx4%*YG!=<_+~`CNJmpLvoWo01ZDQos^^&K3&eMW;DwX&iC-QIR-7 zB2AEHCKY6H#8STW+;K&ryhDa)FF95gMwBTcM~j^Xl)=+C+*cZKOW)!_Wd|*G(E6X9 zpv?i)j?jXER@aSAH|W4Xw=4YM3cYUgE!fp|EVSdG0}r=-x4ZViPdK=<8?;_9;=Q0f zuyV(LM-#BqAF!75=;lfTp0Wjx;+-NHbYsPiCUkbtj|*5&j>K1 zU^xg@3OtFfE=pBaoKRNqm0t=PYSS8T3LEQ1b@h^_`qOQV8O`5hshZEIROzag4DIc7 zZP!_?CR24QZ+j>fMiOC^XX=rd`ZJ6JXN`k0(~!(Kn!TmxJ)Qbw=TWN3kZ-z|Z@OP# zG!||>5W~Z?t(iQSQEbo4wyhUnsu-p#VXhp^Rq$Ii{C@4t<5F0-28;DzRc)=d!*VxR z`(R-Jo(#dtAgq~TeHJzz!K-=LT!Ni9u(O5yKM458-UdPXkdU{zZ=Yad07-WyaC(~b z#qGozwb_Z+iral^Sj{Z?wJ}D?<1s1WUn}=>stHduaphdE(Ban>y`joe;2YW?J5+{IC3Z}B%e=xIb zn$z5+PB6(`ygN^Pw<}q?==*{CfQsBq?YpsSZ>WSb(%E5arg+*0ZmfEUnB2cewoEl6 z+2YJk#MpYMSd~0~#Ac6Bx4-m7FekuXPMqZVT%5#^z9Qpn9aB literal 449 zcmV;y0Y3gmNk%w1VH5xq0M$PL|JOpBY7_tCRQAI>sCF0s-c$eLK>y%O|K(f%(>vXq z8~*&i_3>{9K|ci6|TYA~hLvuD4Zbm+J@|MYL#n>YX5JMO_VkYSmcXLio9n&YWJv4eR3 zvJ?Kd8S9=1|LIB5sZ#Ff;`Of-_q7?nh7AN}Mu{<S z11BdJ7dK>z?d7Ms3Y diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/shades_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..fdaa28b786cef4fdbd48a3f1fbf7c7aafc456d97 GIT binary patch literal 1204 zcmV;l1WWsgP)O_$|bO}9oX#bzD? z1cc;fz$uc@1Tu?2Nt-RX2#Mxgo0W3jPrv7V&(VX*W^MiP-QM?kzrWA(Jip)b{9c!? z{y$v)FAezt@DN3dvPI>h9=pozW9pm7zlKXtESjyC^L6m!TTs6QO1urJXEmn2DUW#X z3NFU6qCBpghC}nf8UP)caG?zT7S6Rk=&ym(0{dr44kf zXW(KHwyw=+XIH{WGqj6-PJ(XnTs;e27AT&m=`kwymI<8Ud7RvVRyBp|=ibz8ooTYd zS#W9wv`vTB$Kk{@I6eiM9~H@aPcHn~DLb5xidBr;;Cha){6zmAFKtssG?7vBh=??i zneIzp8|eFZlBO8WH84(vHqhHwXeKzs zOk(mPcI{4KS8fW)s}~X!96-1A2?PA?Wcq5SiZ6h~Rng*0*1gGV;s^?PmhOB>o3I?G z$VER=-PLS(VJ0bS7SYs{MZw-wT}@4ytVxe0J=vG)4`xuEGo5uQvkl*|%$vS%#P{+t zG7_Y~!ct5JJe$_7goc~2SXN`LNN2~EmAb4IX;|`7nQJx?800T2_9H0NjAh?TSWDO5 z^p&i}^67f!hX$fpis^ut^W|c~Bh7r0yNagzSJ?A@k}mbUH#d>MU^9O;Ji@iZ-h_#7 z??(wV)ui3@Rj*~=?hHaA1THMabijKkp2X%2CK3{&Xtt))d~B1Ux-^oKqIvCA$z|gt zXn4@@y%A)bbzhb) z_9r&RpKY1GT<-9PqYue;C&;ZFuTOGC#O#z)fOZ9wbphuU%QxtB3f$4uz7`%XTEtuYu|T^Kscsi4txRYIYg z0ddGWp0*D?xLD+AKx+hgNIFEdCsz-Qp)=3ZSWuZel)5v}umr6{QleN+M^P@(^6{BK@YPt3aq-qp!xeY3PB~VsW;A#}R$W3Fvt498CW85;#@F=f}k=VQa z%`KC{^y`&ZM@yYubvcyOvl>(1lt;Y()e5EkM=kneMl8{Y(*&Xdix=zRUZP!^Sxr3T8vcT~$o+Co#{RP(N>%i&Mj0vv6D zzg?k22N}A^(2c@X3Utz-I{>cI-Mw`9F$nsC;ASwWLhM}(M;~kLItD$V(943}NVv}N z{S@s`aU4HK|31KWXRpGkJ@jXu;0vH9{3P$ zXE`*V5_hG1OXz8?n^7V=IT{dRS?3o34Si9qb)mR}Vbx1N#6h4|-SB z8`j(4(7@`@=HoGsa~jr+TdQ-h_5jxBVci0oOW?7?_LH5>r(Vw=zU{w&*a0Ar|MwpX z;M=Glf;1xh=Z@!}NTC5D2#6B)E61cLGw_Sfyi8>k4?$u@;yh}E;Ka2|d!@A_kW{T^KUlDD1Pa@!w+o={LShVfi25`t;l60a!f>7T)VDC{ZanZ zXW7mpEJmDWBpw~+T@E=#^t1CPr0h59yrs?_#RW=IPOG8t8J3xg=f#xeq-9~135Of^ z)FsC;^dU8g8+VJAQw`I6fkK~gi<^RQ(_A6BGh0EeJ&i~>%0TH1IabnLBqCF3hEo5R z7Z?_CD^&QdYk}EQ1!0BQM nSLqg&lireGWl>tn5RD#+GA6>_JupT>h1}y^V*X?}hP?g{8;sL8 literal 442 zcmV;r0Y&~tNk%w1VH5xq0M$PLZZn^eV-Nq$H2&sg{N#rJ*+c%_TL1t5|K(f%wG{u= zJlU=`|NH9y!zcgZQUBmg|KCdfy&?bo_WbL$u6Gpw;#b(mudRtb_w@Py#HCC#xCXE@_kjh|Nr~`@1V`Q-v8!N{?9=u{*lMB(f;3ChP1fr1n8RxV@-_5S4w{Ll{JnkVH?VP|!=1 zfr1Y$WJJ(|m81p{)~-S`n-iPLs*)SxXPued|9t%a_xA9g{g@c7hYlRhy&09{xD8fGE`J)643(KE^ zo;Q!D_2Tn&@JP_Jll<5TzTc$G*wZwrYeL8jC}pdZjU7k{OSeJy`|w@AV*6QvZ}qOZ z8VIG74`q#UYHL`vRZxCEnwbItC`iPoK|%ip4@gPk!VIA3?{P0U?LG*W8!jG!Cx$YJ zrqyY^nAd>KOq>a0jH0|wv~p@bveImo#LyiQ!*?hdCMClnaek7-d7YABfvjb7N~vg4E?M}4E;O#b2LUM+y_FCIXOT`N>pb|i zdz(R3P>y!Asb68uey}Gd8gP!TfehaDP&B}jw0DP?x^VQqV5KakMh?>+^`V>{h`ZMi zEz6;6AOoBO(9(J_k8tc`%OK2HP&K7L;HEHkj9l{AJ;66mzKFw_qP1E!`k7pQq2@0do6@+C$yMqN#FyQ7S z+?j&5Uf4PaOV@n~yq4CBQ;Vps6ng#d`7^&Hx|M|83C;0y%e*?UTJd8_R+}i*E002ovPDHLkV1fcuF9kzfs$k!`f9tnk?6+Zm?YUy@x@GdhZ}h`+^u%-Y z#B}t(2V58 zljg~q=gXb=(vkVollj$``q!KK*PZ&>(j0K*`fQ}ru^Nh{NJtZ*tgf()7jkC z-{0Qw-of20;M?)w#`5CI^X1OshA9B`t<7i_wV@l`2YX^ zk&!%+peKJJ`2+y~0ABzs000007XTLkKnMSTUxI^#g@%G&FIrbvS}!V)D=jrUKqv(P znFUgaUY?&t2`G>o8D58pT1-rikgh5&Ei5V?3R{DzTDp%aEG{@dLr6oeDI6H5hk`x` z5(qxZUQRMEFEUP2BNq+>0Nw%(OUa0eP*AOqEGd62I5@5-3p1y=yRIyh!8xxIG+$ma zT|9M(VW2~bND~Bj10cWvg(}JfNlD-ez_^GQBYyhiZ==UT|E%b;0wY0%4kbp(O7Y>q z6GEw)G(l&t1_%I|0z^obiV78)EPUnI@yY}NF8&m0$pW-Rjvqo=yn0|HsjhmETG-eT zYQi^qw4j@F5C{b|`g#{6wD5h1r76kzbNGTxn@OaUX7Y!8-o>0&?qZbAt SRD@tq*zgn{QyPB>1OPjQK|#g< literal 408 zcmZ?wbhEHb6k!lyxT?kQcZ>JGqalCx2Hu)&{_m2{+m)vO_Syf~Vg3J-^}q8DzgAoB zY*#upMep%ShexxO{+;o-FhTs)BAxp)#r~eOSywLddLGBG~|BNrQG?N7|#Ke;&g8FSwa4`@0CXJpO@c*)LSW(_eh~ zxvyh;2fD5UkV>Vv-1j}3MvhXu{tooodc3{>9=!%BRfN=VoIDgA?CIYb=|4~Fp|1%v zJ@}?+*(Vm@67c16IdokoVNH^-Ced}B0vfHm4iRqIL10}IRsJASs^u&dAyg1x)NP<~ z>!S>QdXQY|<{Oca@z4TXUD}3}$}LPuK}eOEKgYR#x!ZMg<-^@d+mYDmNXUqqmYs0H zRaFCAGg;1-DoB-@a0}6WuPpkVVu7K)GfZ51tG;2^v6H}lxinEzRW!A78C+LAh=h!F?#dMnA;cP0YbDK9AH_nBUoW1dkk2f}NJV4L8o?iF zZ*;*unrC%U%2h91qImt>z57L1$nXzm$t1_|N7@@)vPdaWq|3GRw7emuO%Xyts`|1h zk1xP{avY#RU3R*H38|FiC=XOfm3+}*;9M6t?tY8D2$9ZLZyk=*TwtVzwR zziwP(ChG-Qzmf(OV5MAnS#P11HpW}yt~j4%K9xlA=m3riq%}>euC6xldQ0zCCX+!S z&o39=r*Z3J1a5Dln4N{}ECs+E>?JW8TPBC%F)+gS(7gAU19S_=aZbhKV~3YLTy5J3 zia)q|Y9GxVPvY~}Ekfc07YN>ag!=8zSN1ps3_o1@&>`7DZ3`oOG-tE35X*E6TjnwI_4N@|MLeio6C;Rj+vpB-*i?CXSEc9djG z&v5O>^W69P#FS~-p_TGi9jIy9v%qs3?th8t$>Bx6x4MSx>?A9@DbZ{|Ub2k|@v#^qQ94zgGM|?gu;u literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.gif index b6332848df0540a77f8c192a6174186e94f0a258..9cc37029a9dc201ab9e0bd3a7cba4083cf56b874 100644 GIT binary patch delta 631 zcmV--0*L*L1Ih(|M@dFFIbjz77XbDE0Ks?z!+8V2c?80H2*rL3#C{LOfDgxk5y*rU z$AuirhZ)IWyyKiZu++n+tupib4KRo16k*Qs9M zr%25SiTBTn_t1;@(2eB9 zljg~q=gXb=(vkVpmHE||`q!KK*q`XkpzG7E``MxU+ot^8sr=uq?bx^1+SA$G*5BXW z@ZQ1Q;M(yl;KuUe%Jb#U;^g1;>DJ@p;pXS$=ji3@?CR|7>hA9B`t<7i_wV@l`2YX^ zk#Ss+fCqme`2+y~0ABzs000007XTLkKnMSTUxI^#g@%Jv69oW_00I&xD3TlmFI`?< zT`*o>UNH(LDJLg2H7b#kC@oq~Pg*UUhF$=v2vLWFG7+gLHbX!-EGen0TE?)1UP=rC zjROr9AyG{*EiEujv4%be5eGiF;a(UTk|qd5nCgF+ofjLtLq|eCH!Q@)$DC0F00996 zCV=RmG3?$IE3dR|Nx(r;iWMgcN?NsKNy2a#Gj@`~Ly9(yg1j*Jfa1e~j~cxsC?SbL z29$-?Ve0W9m52jSs9D2?2}A`GsgfWW5+sMPiTDzFvEa`i02)Su>>zj#AF?72c&QMw z!^S@;RI9LLxyXe830^wt@lvH_%9M+pCm=Kp;9-U+UaOcefh)*~fesOenHa%=0sj?Xb!aB)Qr(# zVSXm~p~tJ6!NH+GS8r3RbNLPq5v56m2?_!tT5`=Mh8#EENAjiI)MMGy(7@rIn^)h+ zz{SqN!7T2~$&)K6#vm10-o@1KB*`PpBP!3wH+5zi*92xEQC>dYbz*{C5^QYj63)!b z?84Ig{JetfEbQBQik!HZcz6#8@vv};a0*=GIO)X7B)fn`MDhyD?wc;GtjsL0UM0VM J=jO;@4FGr*ZsY&} diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/thumbs_up.png new file mode 100755 index 0000000000000000000000000000000000000000..d4e8b22a3cc95d0d6e7e2de697e9e7fe910ce9ff GIT binary patch literal 959 zcmV;w13>(VP){U?kWlzfV zL6}8_flmtBt?C|RR2^u$tg zC4YQ!u($L2xo+lu@8$ZrZYBqNp90?4jB>4#Ev6Cr6L+K^CQgt)z8$>=PkfzrV;8jjgV~`Aysczw;3Uur z)Za;uB)Z7`b{1pT9ss;vABpzEjP|`vjq$+IoZ89I)j?d>1;FR?)poQWI3ABTdNiff zA!qu}zR|BwYSzRx3QKD$Ow))aIxt(yEuNhkBQ^X3<82@F{E=h${eA%Q`8<6WzTw5A zFF88UlfHaL3;HFAXI{gjZ(9Kb?tdJlK)Mb}I7rts@DBH^y~?A>7teuS5Pg4i&Bb!KTrlw)fi1k%}ZNX z5B}i2Ws{UxfRfirio3#Hu~d3ng?lntYg!LP`Wm|5;nvmub)HJGh+3`^?%thD|=u6{?gEg?cUvO z2MOta*LZ)HP9K zG!u;NqyE9e%!qo1l0$bkE;`x|5RW&W-w3V&?*p#_=9-@jut)pI&@VyM6!w002ovPDHLkV1lw`)rbH9 literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.gif index b2e657fa323f04ac09ecbe2900ad1351c1e2367f..81e05b0f6adccdc330a951fbc4f7f109da3d2ebc 100644 GIT binary patch literal 1210 zcmeH`ZBJ8o96@tQaa*$%W_VD>+DZ|P*6Y;77abX!Ca^%}vb}Ii zHYk*IPZ7cvY1kABI4pKrv<#tuPzn|$h^ayu%AjSHITK}DsDs}7Tl^Axwetl|a+0%W zZ*g9JnGgw4457XP<`hD6S?q@j#bcGKSI2BWLTi2pHJ72zD%y`9V3(^o-sV@hs<7i{RD|FD!kJhtJ|uozmME@KPX>Kkpg$G7X>eT#KTBd>5e$oANJd>zQXb`B z?pMewYPkA3cy>_UEb!()ZypT1K@Pnc^T}doC#Hx)4b5=>^m zZ57O^ZwpV#l!Vw;^@HJ+S_OOaGS|}@V ziz-f_ghZOl8baHQwn8Se-?`->TcA47QlM@+p3)|(;<3`dt2Z_(vQG~m>+YfB{Pf~g zRA(%oDyVR`=`0x>`9+p(W4WhpN~W(}clG)a1DQS=v%t+EA{(-hhAHq@QZep4F(6X5J62NAzrArpd1U@Kk5ukj7$q z)~vK=`UM&L&WQ9iD8OCMIzDJ$>$07594i(4UW!fD(v7^eR^Ha0HoEj^8sE;g%6?mV zOPoLMV`v90wM4}?ieGUq!E;zs^Rxy=p?UcZk^jYv0XGn32`EWK=;#LrQ6eXIMO&h; uEZ6!P2nJ7w5_LVJNn-QJ#7XN@%NSh}aEEZAxrX-Q*vlW!==$UsharxLs|J_H$IRyT`Am5o5{qe=$$C7#HB^ zi6!6E?f=d(=-A8j(o6sJTL0`)|JrK%;*$T^LjT`T|K?HUu`TGhH`vFo|I#$WTo0FP z8UO$PA^8LW002J#EC2ui02BZe000Ktz@KnPEE^$ZJ}wu^Wb#NN9?j>(!L?8+ zh^z5w0hk?L5}1d<5}^zb2nFZ>7==OxgDKuU9(frKfq?}yZ9@+L1uhB-1t=K|5DF>~ zAqxwN02w=vAvFjhDUUEBCYwTw7C169F9Q}75xnX o=QOEP6sAQ#avGAQ%Yxv*3UL}VEo`z5frb+jDQeuvu}BaAJJJrr?*IS* diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/tongue_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..56553fbe115199b50ad06acb77c781dbe0cc4561 GIT binary patch literal 1132 zcmV-y1e5!TP)Ro)n>H;i4*bEF-~Ge+{LcNJ z-#J%Ir*fM3pSIVRZBhbUY@l;eov4bVVC2W;34Ezd)G1jgRi?EX;j z=(}+ck5>zH`rNzmGnQfn7b3YrhVj?dtS9?iku1&zA~5@vo# zOs8^AS7>{ZANPlJQyJaTg0$iw01ZYY3mSU5e4rG@6qm+5qUS zci}ylQE2dhZLMg{)~#Mb+c!JcTfCrk&AkUoC1>VJL&iXdjv#KH1L#?Xrw!OvudtOw zxKA}m+h*Xkhn?B}lLDm~c;zAIeLT5hp~b>=?Cl|4mo`K#+zI8bel@gq@=VI@7}tX7 z*=4V5v#3C6c4>IkbAv!P+%3tf*Y_l~Qrfc>%%~vH4PdNUXW&{@IChobQDuuR=L$3Vi&4^?d;VdjTu?ii%=W0+r*R4j#3P_bdLNY-z1 zD;DEcEJoIELcZV}w@M+bvXYB4lFpByxnr<;wlBfmI8OVCID1aPLPb(2IsPZpgip4y zsmsTvE+65OZE!o~cwMnT)k(TOh4vG1;CL0b*3Y5^I8FB2OANmb*>UjH!PWqTgU)73 z+<|1;=^B3*>^}?5yT1e8NtpS$b>THdj-ahG-2N#@I?9s3>4vHvc-BPJznw7i->+t@ y3wI0nfv14IK)0I#{sf|KzF7NfyJz_Sjeh|_A8f6S!_bca0000@tQaa*$%W_VD>+DZ|P*6Y;77abX!Ca^%}vb}Ii zHYk*IPZ7cvY1kABI4pKrv<#tuPzn|$h^ayu%AjSHITK}DsDs}7Tl^Axwetl|a+0%W zZ*g9JnGgw4457XP<`hD6S?q@j#bcGKSI2BWLTi2pHJ72zD%y`9V3(^o-sV@hs<7i{RD|FD!kJhtJ|uozmME@KPX>Kkpg$G7X>eT#KTBd>5e$oANJd>zQXb`B z?pMewYPkA3cy>_UEb!()ZypT1K@Pnc^T}doC#Hx)4b5=>^m zZ57O^ZwpV#l!Vw;^@HJ+S_OOaGS|}@V ziz-f_ghZOl8baHQwn8Se-?`->TcA47QlM@+p3)|(;<3`dt2Z_(vQG~m>+YfB{Pf~g zRA(%oDyVR`=`0x>`9+p(W4WhpN~W(}clG)a1DQS=v%t+EA{(-hhAHq@QZep4F(6X5J62NAzrArpd1U@Kk5ukj7$q z)~vK=`UM&L&WQ9iD8OCMIzDJ$>$07594i(4UW!fD(v7^eR^Ha0HoEj^8sE;g%6?mV zOPoLMV`v90wM4}?ieGUq!E;zs^Rxy=p?UcZk^jYv0XGn32`EWK=;#LrQ6eXIMO&h; uEZ6!P2nJ7w5_LVJNn-QJ#7XN@%NSh}aEEZAxrX-Q*vlW!==$UsharxLs|J_H$IRyT`Am5o5{qe=$$C7#HB^ zi6!6E?f=d(=-A8j(o6sJTL0`)|JrK%;*$T^LjT`T|K?HUu`TGhH`vFo|I#$WTo0FP z8UO$PA^8LW002J#EC2ui02BZe000Ktz@KnPEE^$ZJ}wu^Wb#NN9?j>(!L?8+ zh^z5w0hk?L5}1d<5}^zb2nFZ>7==OxgDKuU9(frKfq?}yZ9@+L1uhB-1t=K|5DF>~ zAqxwN02w=vAvFjhDUUEBCYwTw7C169F9Q}75xnX o=QOEP6sAQ#avGAQ%Yxv*3UL}VEo`z5frb+jDQeuvu}BaAJJJrr?*IS* diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif index 77098821c622975362f3afbc4e83a515f88dc814..eef4fc00ab286211a8e33bf5762d3424c8c4eff8 100644 GIT binary patch literal 775 zcma*k|5M9x0LSrnN!xByQ_H@ztwy;pVVtIv<+8-(rgHgun#5t;Sm)A_Y0a7L)VZU{ zA$46}d}%kNFG{A{N+SA-IIMOKcerzQw9n_|{0E*tKYn|rrm2-Hw0y!RzX++wAr)HE zs3T1$XLKH))>$;YuaehyWfrRaQ8NuS4Acdpk%3wk>Vj~Cg_|rivC+hVJqUM$J-7L2 z2tlI=H^Qk~5|3Tvxi3NUOtglgJq(?EG>3cJ1$ZbxhlIAv=({qsL{fG+?kuI-m!N$) z?kUk6Pj#%qgH>LK#M>=JmjDhC9*d~QVz{K}k$QV%cq*g%=b(Q!dZY1tE(W479D~;j zF}{fIR!}eEFr;w+v~wLbl0uIq`yOd9xPyMX-S-mAifRZ#~6OSh1ZQgpFmFmH2IHYzXSXT$tUuE_TLi~1IGMflgV(} zP+}?07O#vi3nxS*Iv*AhA<4?jEIBwMRLtXr)`oItayY@lAf3gqEqdoBRZ>!7ymEQM zF8%!NXNnDKvBKrDMo1+RvAA~L2DQVsH(Sl;tF!kWIcqy4pP#Yk@ZkenV%?py# z5?dIIw!lEwY;EoWhk?ImOrYd4%Y}*}U(e5{DV1!;Gx_)O2BWc5uqebBsqHl{wb_>C zaQ*yC7{OT!RaK-kLBBZHkztx-269qu^~YGHrRJEto6CfX36?c(cWglBgwu}~eP2K6 z*jRI#GglwmA}jHn;z|<>$C+H>WZPxC3Iso#(<`;=-ASDB3%OmS@#wyS?_GWt{{DR8 ztY2bUtPonQiI+(=yL(Lt*QL4Gd#OHyyOr0fSQ~Vf)oElxS{4=fV gS8FUP_VX^CCTg=ywW&COsj;=*`ZRFedWw*QzjS1D6#xJL literal 452 zcmV;#0XzOjNk%w1VH5xq0M$PL|J6JG>WKH(QvS3R|Ns8~`se@JME>b>{mnA&s2cvt zSoXIj|KLrPXcqp$CH}@P|KwEv;Yt3t8UM>H_^=p>S`7X1#s2T0zlIa&xHtH+9QCms z{<{4nlrMZV9%9Jke>-hWMee23h|JW-0>$U&RBbRc$&AZ*||G^mU!88B24FBIsqI4PYx-s|k`Tza%=D$Gy=3VE=V)f8O{?tRzkQe*n zWdHyFA^8LW002J#EC2ui02BZe000Kzz@KnPEEEg~i&As#4<4yHm85CIpv0RjjL76kr%>69@n^86O`Q_!!_6)m=_(@o3#G=M=QbG<10suQ9l+BC) diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..f9714d1b3ba5e9324a1a1663549ba28b45af9638 GIT binary patch literal 1039 zcmV+q1n~QbP)4=F;lf`~OS)ZA#arZuHf*sO8W+|6z`n`}0F?;IcQ-DJ0{X&*drm^%#jcjlb` zoEbH{utX(miPY8s2Y_Cn$9DkB_X*&qxSh>Z1OTcMyd_e56fvKY_%4b)0rmtWC%na` zUWoV}J(NJ{m*RHz%uV4fk=h2}BQlqdGj;-k4zxT9O?^h2u^2I6)$RT1uiWr|B5-pPeQard53H20x$zoFJ*sMRYVK&TyRI-v0hNRGky8$!oh ziaoE!K;2&&pcMW&7e6>IS3kzR??usSUg_MA;O4;JU*I0RkgsxYD?h@P%_N1bz8@#)x1fDOH{OsNwygnCj4WjE%>1j&g z0bqirZn(4tweEUK-=9lkFBaI$BH=0?>DmGU5@ z{=8==Y^~W8&eAgc{udI8BHV`7Tj0oe0u^YD+u6)U`=_Ue8R>=kYJ=8#UC`ncAZ&;# zMKJ{tjRcyEUR~52IS=9X_4d~QaXWj4aQhJZ-hu1Onu24>>+0)Z+;TmPK{;ziFVAWA zy$#{^q0+lumn1nr+sPPv2O(3?YY_+KrDzBk&37Kb~gv z1xQapmG&M9jUWQ9Q5e5m4V`fCG=w|80A7jP*~R~amjpS6IH&mgn+VBC)*ZZ~R`i{Z z*{HzFaXb5ECA}-c{QwQXLqHeM?T-Mz0F(ZB?#8F>mf-(~{R;@jTLnf*B0a2 literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.gif b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.gif index b21029548f7d4b48f9a0237e7e89a075750a4abf..6d3d64bd126a56382452a47faa20e3e0e8185a01 100644 GIT binary patch literal 1202 zcmeH`drwmb07q|2ffgD%3r#Ptv=s!@suUKf%GMUUQ4Mni_oAx}+P+B#W9t zc`384uRy9(c??$YRj7s02u08!1_wiIJA=Vix``y#Y!e&W`&;}H`)lV5oa7{@c-Onq zZ5lqoCsqierJVS&lGb*B-mYa_Js8{b9n*0r)_#aN(#-L+ut&{nMo;tZT9W)0=1i{u z9dxuup(6_2F|fvjPqd%W= zO5ogz>ryzjW9Y4wo9P%!!L2mh5d>~;h)f7^SA;1M?ySSFS(wfY&The64%}jR#Q1#^ zyj!U8yvR(!>ciYu^ZAkaT+B)FI4?4!z>Pf^R#UfkM;<6Ck0Ly(#_VU*{HNhbEgn{^ zdMm^3D!8jLdzf+`iTJb;|M!^IW2Oeb)x%ql`$sWn!~;|K(FN+!`PIh;JTbvZ2Jw6r&+p@f2QTNb;zQ^UP^$n%{Lg<|Konxo2%?@4 zzt+BfLe2yc&q|Y;&59yMVw|$7wrMO{VU|{x(g}TnMdb>`1%8$FIrV-+gD(uoXDH;IDdB|9~>2iP04OUyz2P0L_K z)idKS*;BkVYp-;A4LiO#%h4>iKFzC~Y?11h>b~3?Hbv)ttP6b0tg~@8*T`L_wAR?M z#EfE95~(LtoaW7zd&GDKr*z|n1~#qlRMQDTkx=d8OpIwfjrot4!hSyC|6!7HG{yai$rao}e-0@~E!k<%WdMdG-dz-lMHG mG1sQDXpDj5@2CU?g~HL3TxHM|Rq%J|xf8L;ou9~w9sdH=NT%Qb literal 458 zcmV;*0X6E^0JL{_-^Ugy4&p`IW zJpcdyA^8LW002J#EC2ui02BZe000K(z@KnPEEZb5*x`vp%Gy=oX~>D;Gq#B z8pq^XgeDA@hoNxd`EHYOF`0fmEGPOA8IoAO{OE z3mm->2qFU;!wA+60U6B>5JM3W1O^=y0?`BkI{^U<5RE??8WA`E AT>t<8 diff --git a/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.png b/commons-webui-resources/src/main/webapp/ckeditor/plugins/smiley/images/wink_smile.png new file mode 100755 index 0000000000000000000000000000000000000000..7c99c3fc54c753dcfe19ff73e225733a2ad7261e GIT binary patch literal 1114 zcmV-g1f~0lP)kxuNha}UkKykNhbfsO}d(O{?d$--fh(36dZ+^M==6-(X zoZt6%jv5`CWUi4)G)IB8Krhha3n1-l0Qf2E6bo|#05umpm1y3I*bm4ZPvQ)KGXVJk z?_<0d626ifb13~n)+v7eukci&xgB_y!ucJX+zDY9QV&CXHMFh)rQq6WxH<@<-$1nn z>pp_$y@!BZS*JKYC)@+eX?}a>9?tF+vtp-W{%TbD462$zOg@Vw<4vDY)}- z=zQf+)+s(y2TvuMw^A5B%#qdNu6lw7xuBHIfruw-=T2ZPv~7f?`{2tSVbcjkblJA) z8YmHoB4(Jc*C(a5io{}QHv=Z(Y_q2VOiEG z7BsMyOUIIw&mt{hbR`4UGWzFrK0TD-;D;l8|LqvIW|%4)(*0wk`yHmrW;W^hy)gel z2#4X)v7~QdG|)>v4f7h&ZXT=)#xn9(mG#>ev*r0NVvE|CELp}UjK3NfpY&HG0&WS( z9Ds!nK|YP&8-#!!oI!|$!MHOv+OVz_Y#FA?tXL9;N|ly*jU+o-0Jvj*7%CNiy9CD5 zNOC)Bsbr|tEUnQ{z%hOty%H#JAgUTvuGDp?2GYd4p;XZr&thZOgs+a~sg@1X?{1Q< zmxLF9GpLAngLn1>;Fa3Uj~!hJQj1$Seqx-;TnTLOS-@CCM^O_)+z1~a-VNm{7~|>k z7;7KvU|w5pC7-Y2x&lBf)=1A1MJler3KB^o+>X|_!RG!PDzq%?6brNMKQVNe zBfZetXwh0D9*9^J+N03aNX1ozG3a6$MlM3tMMNW^xYbivHJg8iwyxRsuRFMg-rB*L z*P*$|qLrR$|7j_}we{{X)?!4nY9Dm%sXMrIz&X3<+?`>?UMSQw<%(Z}K=Ep(zNj@9 zY=dUyo6xyC1MCV~@y5#{2E5P2uTRqVEKHn+2JKxE8u4eUu>OkLSHk)O(6;#j!}ROrR5Q~c~E$gSXhf_7j7unOq*Bfu$O(2qad gc(wf}`2R8f0lW)%aFGbSlmGw#07*qoM6N<$f??$muK)l5 literal 0 HcmV?d00001 diff --git a/commons-webui-resources/src/main/webapp/eXoConfig.js b/commons-webui-resources/src/main/webapp/eXoConfig.js index 14ec220a9a..4fa4ca4c56 100644 --- a/commons-webui-resources/src/main/webapp/eXoConfig.js +++ b/commons-webui-resources/src/main/webapp/eXoConfig.js @@ -86,10 +86,10 @@ CKEDITOR.editorConfig = function( config ){ ] ; config.toolbar_Forum = [ - ['Maximize','-','Cut','Copy','PasteText','-','Undo','Redo','-','Bold','Italic','Underline'], + ['Source','Maximize','-','Cut','Copy','PasteText','-','Undo','Redo','-','Bold','Italic','Underline'], ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], ['NumberedList','BulletedList','Outdent','Indent','-','TextColor'], - ['Blockquote', 'Syntaxhighlight','helpBBCode.btn'] + ['Link','Unlink','-','Blockquote', 'Syntaxhighlight','Smiley','helpBBCode.btn'] ] ; config.toolbar_FAQ = [ From 8e40c9cb70e25ce60cd58413ceaa952875425d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maxime=20Gr=C3=A9au?= Date: Mon, 16 Nov 2015 10:55:23 +0100 Subject: [PATCH 42/46] SWF-3473: Upgrade to JCR 1.16.4-GA --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 1d6e9c182b..e7525e69d8 100644 --- a/pom.xml +++ b/pom.xml @@ -51,10 +51,10 @@ 11-SNAPSHOT - 2.5.3-GA - 2.6.3-GA - 2.4.3-GA - 1.16.3-GA + 2.5.4-GA + 2.6.4-GA + 2.4.4-GA + 1.16.4-GA 4.3.x-PLF-SNAPSHOT From 28e290a4e633e297a94e990d2ca1df54d28da04d Mon Sep 17 00:00:00 2001 From: thibaultclem Date: Mon, 16 Nov 2015 17:33:07 +0700 Subject: [PATCH 43/46] Update SearchServiceConnector to have connector activated by default if enable property is missing --- .../commons/api/search/SearchServiceConnector.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/commons-api/src/main/java/org/exoplatform/commons/api/search/SearchServiceConnector.java b/commons-api/src/main/java/org/exoplatform/commons/api/search/SearchServiceConnector.java index d5be15a52f..28ccf27476 100644 --- a/commons-api/src/main/java/org/exoplatform/commons/api/search/SearchServiceConnector.java +++ b/commons-api/src/main/java/org/exoplatform/commons/api/search/SearchServiceConnector.java @@ -1,13 +1,14 @@ package org.exoplatform.commons.api.search; -import java.util.Collection; - +import org.apache.commons.lang.StringUtils; import org.exoplatform.commons.api.search.data.SearchContext; import org.exoplatform.commons.api.search.data.SearchResult; import org.exoplatform.container.component.BaseComponentPlugin; import org.exoplatform.container.xml.InitParams; import org.exoplatform.container.xml.PropertiesParam; +import java.util.Collection; + /** * Is extended by all SearchService connectors, and allows to build configuration needed by a list of connectors that is used for the Unified Search. * @@ -76,7 +77,7 @@ public SearchServiceConnector(InitParams initParams) { PropertiesParam param = initParams.getPropertiesParam("constructor.params"); this.searchType = param.getProperty("searchType"); this.displayName = param.getProperty("displayName"); - this.setEnable(Boolean.parseBoolean(param.getProperty("enable"))); + if (StringUtils.isNotBlank(param.getProperty("enable"))) this.setEnable(Boolean.parseBoolean(param.getProperty("enable"))); } /** From 31c22087966dc9fd764738d1b5b149b0eda34e6c Mon Sep 17 00:00:00 2001 From: thanhvc Date: Wed, 18 Nov 2015 13:39:33 +0700 Subject: [PATCH 44/46] FORUM-1188 | [Responsive] The Message field is duplicated when creating a new topic --- .../webui/form/UIFormRichtextInput.java | 85 +++++++++---------- .../main/webapp/WEB-INF/gatein-resources.xml | 2 +- 2 files changed, 41 insertions(+), 46 deletions(-) diff --git a/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java b/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java index 13a79f2d0a..df37a63b5c 100644 --- a/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java +++ b/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java @@ -155,7 +155,7 @@ private static String encodeURLComponent(String s) { return result; } - private String buildEditorLayout() throws Exception { + private String buildEditorLayout(WebuiRequestContext context) throws Exception { if (toolbar == null) toolbar = BASIC_TOOLBAR; if (width == null) width = "98%"; if (height == null) height = "'200px'"; @@ -174,66 +174,61 @@ private String buildEditorLayout() throws Exception { // builder.append(" \n"); - - builder.append("\n"); - - builder.append("
    "); - if (isMandatory()) { - builder.append("  *"); - } - builder.append("
    "); + jsBuilder + .append("var instance = CKEDITOR.instances['").append(name).append("'];\n") + .append("if (instance) { ") + .append(" CKEDITOR.remove(instance); instance = null;\n") + .append("}\n") + + .append("CKEDITOR.replace('").append(name).append("', {toolbar:'Forum', height:'200px', contentsCss:\"/CommonsResources/ckeditor/contents.css\", enterMode:CKEDITOR.ENTER_P, forcePasteAsPlainText: true, forceEnterMode:false, shiftEnterMode:CKEDITOR.ENTER_BR});\n") + .append("instance = CKEDITOR.instances['").append(name).append("'];\n") + .append("instance.on( 'change', function(e) { \n") + .append(" document.getElementById('").append(name).append("').value = instance.getData(); \n") + .append("});\n") + + .append("var textarea = document.getElementById('").append(name).append("'); \n") + .append("var form = textarea; \n") + .append("while (form && (form.nodeName.toLowerCase() != 'form')) { \n") + .append(" form = form.parentNode;\n") + .append("} \n") + .append("if (form) {\n") + .append(" form.textareaName = '").append(name).append("'; \n") + .append(" form.onmouseover=function() { \n") + .append(" this.onmouseover=''; \n") + .append(" var textarea = document.getElementById('").append(name).append("'); \n") + .append(" textarea.style.display='block'; \n") + .append(" textarea.style.visibility='visible'; \n") + .append(" textarea.focus(); \n") + .append(" textarea.style.display='none'; \n") + .append(" } \n") + .append("} \n"); + + context.getJavascriptManager().require("/CommonsResources/ckeditor/ckeditor.js").addScripts(jsBuilder.toString()); // return builder.toString(); } public void processRender(WebuiRequestContext context) throws Exception { // - context.getWriter().write(buildEditorLayout()); + context.getWriter().write(buildEditorLayout(context)); } public void decode(Object input, WebuiRequestContext context) { diff --git a/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml b/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml index 1af147e5a5..7dbbf7be5e 100644 --- a/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml +++ b/commons-webui-resources/src/main/webapp/WEB-INF/gatein-resources.xml @@ -41,7 +41,7 @@ commons-editor ckeditor
    From 7004fd8eab984f424708909433f2161f92ca7b57 Mon Sep 17 00:00:00 2001 From: thanhvc Date: Thu, 19 Nov 2015 15:15:06 +0700 Subject: [PATCH 45/46] FORUM-1188 | Fixed the hardcode Forum toolbar --- .../org/exoplatform/webui/form/UIFormRichtextInput.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java b/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java index df37a63b5c..e43ec0f19e 100644 --- a/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java +++ b/commons-webui-component/src/main/java/org/exoplatform/webui/form/UIFormRichtextInput.java @@ -197,8 +197,11 @@ private String buildEditorLayout(WebuiRequestContext context) throws Exception { .append("if (instance) { ") .append(" CKEDITOR.remove(instance); instance = null;\n") .append("}\n") - - .append("CKEDITOR.replace('").append(name).append("', {toolbar:'Forum', height:'200px', contentsCss:\"/CommonsResources/ckeditor/contents.css\", enterMode:CKEDITOR.ENTER_P, forcePasteAsPlainText: true, forceEnterMode:false, shiftEnterMode:CKEDITOR.ENTER_BR});\n") + .append(" CKEDITOR.replace('").append(name).append("', {toolbar:'").append(toolbar).append("', height:") + .append(height).append(", contentsCss:").append(css).append(", enterMode:").append(enterMode) + .append((isPasteAsPlainText) ? ", forcePasteAsPlainText: true" : "") + .append(", forceEnterMode:").append(forceEnterMode) + .append(", shiftEnterMode:").append(shiftEnterMode).append("});\n") .append("instance = CKEDITOR.instances['").append(name).append("'];\n") .append("instance.on( 'change', function(e) { \n") .append(" document.getElementById('").append(name).append("').value = instance.getData(); \n") From 9bf05bbad92fd3da2ba4b3cb1be017cde8a77d28 Mon Sep 17 00:00:00 2001 From: thanhvc Date: Thu, 19 Nov 2015 17:33:47 +0700 Subject: [PATCH 46/46] Revert "COMMONS-420 : [IE11] Impossible to upload file from Top Navigation bar from a page with URL containing accented characters" This reverts commit a2f5d3b1296cde78f3791c5a3e2d9521ffb0a98c. --- .../groovy/webui/commons/UIDocumentSelector.gtmpl | 4 ++-- .../resources/groovy/webui/commons/UIDropDownControl.gtmpl | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/commons-webui-component/src/main/resources/groovy/webui/commons/UIDocumentSelector.gtmpl b/commons-webui-component/src/main/resources/groovy/webui/commons/UIDocumentSelector.gtmpl index 2e986869a9..a77aee2174 100644 --- a/commons-webui-component/src/main/resources/groovy/webui/commons/UIDocumentSelector.gtmpl +++ b/commons-webui-component/src/main/resources/groovy/webui/commons/UIDocumentSelector.gtmpl @@ -39,8 +39,8 @@ requireJs.addScripts("jq('#createNew').click(function() {commonDocument.DocumentSelector.newFolder(this);});"); %>
    - - + +
    <%= _ctx.appRes(uicomponent.id + '.label.select-drive')%>:   <% uicomponent.renderChild(UIDropDownControl.class);%> diff --git a/commons-webui-component/src/main/resources/groovy/webui/commons/UIDropDownControl.gtmpl b/commons-webui-component/src/main/resources/groovy/webui/commons/UIDropDownControl.gtmpl index dab520bf75..a7fbb4a1ca 100644 --- a/commons-webui-component/src/main/resources/groovy/webui/commons/UIDropDownControl.gtmpl +++ b/commons-webui-component/src/main/resources/groovy/webui/commons/UIDropDownControl.gtmpl @@ -33,15 +33,14 @@
  • <% String label = _ctx.appRes(uicomponent.getId() + ".item." + option.label); - String seletedItem = uicomponent.event(selectedIndex); if(label.length() > 30) { %> - <%=label.substring(0,25)%>... + <%=label.substring(0,25)%>... <% } else { %> - <%=label%> + <%=label%> <% } %>
  • <% selectedIndex++;}%> -
    +
    \ No newline at end of file