Hi,
As suggested by Thomas in the thread relative to renaming document events
(see http://xwiki.markmail.org/thread/62a3yaxiuosx4f6o ), I would like to
introduce a new module, xwiki-legacy, to host backward compatibility code
for modules. Rule would be that of course nothing should ever depend on
xwiki-legacy.
It will also help developers that relies on XWiki modules to upgrade to new
code when we deprecate things, since as soon as they upgrade their
dependency, they will not be able to build unless they fix the deprecated
calls (It would not be the case if each module would host its
backward-compatibility code).
First use case would be for renamed events. A listener in xwiki-legacy would
listen to the new document events, and notify the old corresponding ones.
WDYT ?
I'm +1
Jerome.
Hi devs,
The default standalone distribution currently uses HSQLDB 1.8 as the
database engine, wrapped by Hibernate 3.2.6 as the ORM engine. Both are
a bit deprecated.
One option is to use the 2.0 version of HSQLDB, which brings lots of
improvements. Unfortunately, a direct replacement of the old jar with
the new one doesn't work. It complains when trying to open an existing
database, and even with a new database it complains when using boolean
fields in queries, which means all searchDocuments calls will fail
because of the "doc.hidden <> true" condition.
Another option is to use H2, which is a reimplementation of HSQLDB,
originally intended to be version 2 of HSQLDB. On their
http://www.h2database.com/html/features.html#comparison feature
comparison, H2 seems to have more meta-features than HSQLDB2.
A third option which was already partially implemented is to use Derby.
Personally I prefer H2, which seems to be more maintained than the
others, with new releases every 2-3 weeks, and also has better
performance and more features.
--
Sergiu Dumitriu
http://purl.org/net/sergiu/
Hello devs,
I have a proposal to make about the IRCbot Application. As you know, the
bot logs the channel and saves
the content in order to make it viewable from the xwiki designated page.
I would like to propose two things :
Proposal 1
In order to make archive logs more easily readable and more easy to
follow, I would like to change the
way the logs are saved.
I would like to use a standard format (also used my all major IRC
clients like Pidgin, IRC, XChat, irssi, etc).
Because date/time will have always the same length, aligning it and
putting it at the begginning of the line, makes the text more easy to
follow.
So, the proposals are :
Version 1 (the one we have now)
user1 - (20:07): You can comment if you have edit right
JohnDoe - (20:07): ok, thx for the answer
IreallyLoveXWiki - (20:07): I’m off for today, bye
XWikiNormalUser left at 20:07 (Quit: Leaving.
EnterpriseUser joined #xwiki at 20:38
EnterpriseUser left at 20:38 (Client Quit
sburjan is now known as sburjan1 (~sburjan(a)this.is.areally.long.address.ro
Note that the ")" doesn't appear on logs, so this should be fixed any way.
Version 2
[11:05] XWikiNormalUser : How can I edit a page?
[11:05] IreallyLoveXWiki : You have to be logged in order to do that
[11:05] JohnDoe : I love Open Source !
[22:55] EnterpriseUser : joined #xwiki at 20:38
[22:56] EnterpriseUser : left at 20:38 (Client Quit
[14:22] sburjan is now known as sburjan1
(~sburjan(a)this.is.areally.long.address.ro)
Version 3
[11:05] <XWikiNormalUser> How can I edit a page?
[11:05] <IreallyLoveXWiki> You have to be logged in order to do that
[11:05] <JohnDoe> I love Open Source !
[22:55] <EnterpriseUser> joined #xwiki at 20:38
[22:56] <EnterpriseUser> left at 20:38 (Client Quit)
Version 1 : keep these addresses in log (like we have now)
sburjan is now known as sburjan1 (~sburjan(a)this.is.areally.long.address.ro
Version 2 : remove then from logging
sburjan is now known as sburjan1
I am +1 for 1.3 and +1 for 2.1
Please send your feedback and even your proposals if you have one.
WDYT ?
Regards,
Sorin B. [14:22] sburjan is now known as sburjan1
(~sburjan(a)this.is.areally.long.address.ro)
Proposal 2
We also log the user ip/host addresses when user joins. This also makes
the line much longer with information that it's not needed IMO.
This could be also a privacy concert, because your ip/host address is
exposed to anyone who uses xwiki.org .
Version 1 : keep these addresses in log (like we have now)
sburjan is now known as sburjan1 (~sburjan(a)this.is.areally.long.address.ro
Version 2 : remove then from logging
sburjan is now known as sburjan1
I am +1 for 1.3 and +1 for 2.1
Please send your feedback and even your proposals if you have one.
WDYT ?
Regards,
Sorin B.
According to this page http://platform.xwiki.org/xwiki/bin/view/DevGuide/FAQTutorial I should have an XWiki space on the default home page. It says I should be able to search for 'XWikiClasses' and find it in the XWiki space. I see neither the XWiki space under the "Spaces" heading nor do I get anything from the search result. Not sure if that tutorial is referencing some older version of the software or what.
I am unable to complete the installation using either the Windows .exe or the jar file. I get to the unpacking step and the 'next arrow' doesn't do anything. I am running Windows 7 64-bit. I am running as administrator. In the command window I get:
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
could not create shortcut instance
java.lang.Exception: error loading library
java.lang.Exception: can't locate library
at com.izforge.izpack.util.Librarian.loadArchSpecificLibrary(Unknown Sou
rce)
at com.izforge.izpack.util.Librarian.loadLibrary(Unknown Source)
at com.izforge.izpack.util.os.ShellLink.initialize(Unknown Source)
at com.izforge.izpack.util.os.ShellLink.<init>(Unknown Source)
at com.izforge.izpack.util.os.Win_Shortcut.initialize(Unknown Source)
at com.izforge.izpack.panels.ShortcutPanel.panelActivate(Unknown Source)
at com.izforge.izpack.installer.InstallerFrame.switchPanel(Unknown Sourc
e)
at com.izforge.izpack.installer.InstallerFrame.navigateNext(Unknown Sour
ce)
at com.izforge.izpack.installer.InstallerFrame.navigateNext(Unknown Sour
ce)
at com.izforge.izpack.installer.InstallerFrame$NavigationHandler.actionP
erformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.lang.NullPointerException
at com.izforge.izpack.util.os.Win_Shortcut.getProgramsFolder(Unknown Sou
rce)
at com.izforge.izpack.panels.ShortcutPanel.getProgramsFolder(Unknown Sou
rce)
at com.izforge.izpack.panels.ShortcutPanel.panelActivate(Unknown Source)
at com.izforge.izpack.installer.InstallerFrame.switchPanel(Unknown Sourc
e)
at com.izforge.izpack.installer.InstallerFrame.navigateNext(Unknown Sour
ce)
at com.izforge.izpack.installer.InstallerFrame.navigateNext(Unknown Sour
ce)
at com.izforge.izpack.installer.InstallerFrame$NavigationHandler.actionP
erformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Hello devs,
I'm encountering some problems on the http://imigrant.myxwiki.org
1) Email confirmation upon user registration:
Although I've correctly configured the SMTP server (using my gmail account)
and tested it with the "Send page" feature, new users don't receive any
confirmation messages upon their registration.
2) Wrong main menu (upper left horizontal area) labels
These are displayed as: Space__SEPARATOR__XWiki,
Page__SEPARATOR__XWikiPreferences aso.
I strongly believe this being an issue related to the update of the "latest
XAR" provided by default.
While it is recommendable to always update to latest XAR, I find it also
awkward as the site would be of no interest till the admin makes the
upgrade.
Perhaps I have skipped some configuration steps and thus any advice/hint is
welcomed!
Best regards,
--
ing. Flueras Bogdan
Hi devs,
When importing an office document using the "Add > Page from Office"
menu the page title is given by
org.xwiki.officeimporter.document.XDOMOfficeDocument#getTitle() which
looks for the first heading (org.xwiki.rendering.block.HeaderBlock) in
the document content.
This is fine most of the time, but if the title of the office document
is not set using heading style (e.g. a custom defined style is used
instead) then:
(1) The page title is wrong.
(2) The first heading is hidden because it equals the page title. This
is very bad when there is text before the first heading.
WDYT about modifying XDOMOfficeDocument#getTitle() to take into account
the first paragraph also when looking for the page title?
Note that I have many Word documents with this problem so fixing them to
use heading style for their titles is not a good option for me.
Thanks,
Marius
Hi Sergiu,
I don't like several of the changes here since I believe they're increasing our technical debt so I'd like we find a better way. Here's some feedback/ideas:
1) com.xpn.util.Util and com.xpn.xwiki.web.Utils are deprecated and shouldn't be used. On the contrary we should work towards removing stuff from them, not adding to them :) I see you've added a new method which isn't too good IMO.
2) The EscapeTool you've added to the velocity module doesn't belong there IMO since I don't see why it would be restricted to Velocity. It's not about a language limitation that would be only needed for Velocity. I believe other scripts and even other java part of XWiki might need to escape XML. In addition you haven't commented why there's a need to write a new class when an escape tool already exists and is provided by the Velocity Tools project (in a few days/months we'll wonder why).
For 2) what I think is best is to add the escape code to the xwiki-xml module and have a ScriptService to make it available to all scripts. BTW there's already a XMLUtils in there and which already does xml escaping (and which I don't like and it could a good time to extract part of its stuff into an Escaper/Encoder component).
So XML and HTML escaping should go in xwiki-xml IMO and URL escaping should go in the xwiki-URL module (should we need them).
WDYT?
Thanks
-Vincent
On Dec 8, 2010, at 4:47 AM, sdumitriu (SVN) wrote:
> Author: sdumitriu
> Date: 2010-12-08 04:47:08 +0100 (Wed, 08 Dec 2010)
> New Revision: 33301
>
> Added:
> platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/tools/EscapeTool.java
> platform/core/trunk/xwiki-velocity/src/test/java/org/xwiki/velocity/tools/EscapeToolTest.java
> Modified:
> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java
> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/Utils.java
> platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/main/java/org/xwiki/rendering/internal/renderer/printer/XHTMLWriter.java
> platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/internal/DefaultVelocityConfiguration.java
> Log:
> XWIKI-5514: "apostrophe" character badly displayed in Internet Explorer
> XWIKI-5763: Remove entity encoding from UTF-8 text in XHTML
> Fixed.
>
> Modified: platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java
> ===================================================================
> --- platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java 2010-12-07 16:01:32 UTC (rev 33300)
> +++ platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/XWiki.java 2010-12-08 03:47:08 UTC (rev 33301)
> @@ -5806,12 +5806,12 @@
> try {
> userdoc = getDocument(user, context);
> if (userdoc == null) {
> - return StringEscapeUtils.escapeXml(user);
> + return Utils.escapeXml(user);
> }
>
> BaseObject userobj = userdoc.getObject("XWiki.XWikiUsers");
> if (userobj == null) {
> - return StringEscapeUtils.escapeXml(userdoc.getName());
> + return Utils.escapeXml(userdoc.getName());
> }
>
> Set<String> proplist = userobj.getPropertyList();
> @@ -5832,7 +5832,7 @@
> + context.getDoc().getPrefixedFullName() + ">", vcontext, context);
> }
>
> - text = StringEscapeUtils.escapeXml(text.trim());
> + text = Utils.escapeXml(text.trim());
>
> if (link) {
> text =
>
> Modified: platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java
> ===================================================================
> --- platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java 2010-12-07 16:01:32 UTC (rev 33300)
> +++ platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/util/Util.java 2010-12-08 03:47:08 UTC (rev 33301)
> @@ -51,7 +51,6 @@
> import org.apache.commons.io.FileUtils;
> import org.apache.commons.io.IOUtils;
> import org.apache.commons.lang.ArrayUtils;
> -import org.apache.commons.lang.StringEscapeUtils;
> import org.apache.commons.lang.StringUtils;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> @@ -623,8 +622,8 @@
>
> public static String getHTMLExceptionMessage(XWikiException xe, XWikiContext context)
> {
> - String title = StringEscapeUtils.escapeXml(xe.getMessage());
> - String text = StringEscapeUtils.escapeXml(xe.getFullMessage());
> + String title = Utils.escapeXml(xe.getMessage());
> + String text = Utils.escapeXml(xe.getFullMessage());
> String id = (String) context.get("xwikierrorid");
> if (id == null) {
> id = "1";
>
> Modified: platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/Utils.java
> ===================================================================
> --- platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/Utils.java 2010-12-07 16:01:32 UTC (rev 33300)
> +++ platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/Utils.java 2010-12-08 03:47:08 UTC (rev 33301)
> @@ -40,8 +40,6 @@
> import org.apache.commons.lang.StringUtils;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> -import org.apache.ecs.Filter;
> -import org.apache.ecs.filter.CharacterFilter;
> import org.apache.log4j.MDC;
> import org.apache.struts.upload.MultipartRequestWrapper;
> import org.xwiki.component.manager.ComponentLookupException;
> @@ -512,14 +510,58 @@
> map.put(name, newValues);
> }
>
> + /**
> + * Escapes the XML special characters in a <code>String</code> using numerical XML entities.
> + *
> + * @param value the text to escape, may be null
> + * @return a new escaped <code>String</code>, <code>null</code> if null input
> + * @deprecated starting with 2.7 use {@link #escapeXml(String)}
> + */
> + @Deprecated
> public static String formEncode(String value)
> {
> - Filter filter = new CharacterFilter();
> - filter.removeAttribute("'");
> - String svalue = filter.process(value);
> - return svalue;
> + return escapeXml(value);
> }
>
> + /**
> + * Escapes the XML special characters in a <code>String</code> using numerical XML entities.
> + *
> + * @param value the text to escape, may be {@code null}
> + * @return a new escaped {@code String}, {@code null} if {@code null} input
> + */
> + public static String escapeXml(String value)
> + {
> + if (value == null) {
> + return null;
> + }
> + StringBuilder result = new StringBuilder((int) (value.length() * 1.1));
> + int length = value.length();
> + char c;
> + for (int i = 0; i < length; ++i) {
> + c = value.charAt(i);
> + switch (c) {
> + case '&':
> + result.append("&");
> + break;
> + case '<':
> + result.append("<");
> + break;
> + case '>':
> + result.append(">");
> + break;
> + case '"':
> + result.append(""");
> + break;
> + case '\'':
> + result.append("'");
> + break;
> + default:
> + result.append(c);
> + }
> + }
> + return result.toString();
> + }
> +
> public static String SQLFilter(String text)
> {
> try {
>
> Modified: platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/main/java/org/xwiki/rendering/internal/renderer/printer/XHTMLWriter.java
> ===================================================================
> --- platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/main/java/org/xwiki/rendering/internal/renderer/printer/XHTMLWriter.java 2010-12-07 16:01:32 UTC (rev 33300)
> +++ platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/main/java/org/xwiki/rendering/internal/renderer/printer/XHTMLWriter.java 2010-12-08 03:47:08 UTC (rev 33301)
> @@ -44,6 +44,19 @@
> super(writer, DEFAULT_XHTML_FORMAT);
>
> // escape all non US-ASCII to have as less encoding problems as possible
> - setMaximumAllowedCharacter(127);
> + setMaximumAllowedCharacter(-1);
> }
> +
> + /**
> + * Escapes a string to be used as an attribute value. Unlike the original method in {@link XMLWriter}, apostrophes
> + * are replaced by a numerical entity &#38;, since &apos; is not valid in HTML documents.
> + *
> + * @param text the attribute value to escape
> + * @return the text with all occurrences of special XML characters replaced by entity references.
> + */
> + @Override
> + protected String escapeAttributeEntities(String text)
> + {
> + return super.escapeAttributeEntities(text).replace("'", "&");
> + }
> }
>
> Modified: platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/internal/DefaultVelocityConfiguration.java
> ===================================================================
> --- platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/internal/DefaultVelocityConfiguration.java 2010-12-07 16:01:32 UTC (rev 33300)
> +++ platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/internal/DefaultVelocityConfiguration.java 2010-12-08 03:47:08 UTC (rev 33301)
> @@ -22,7 +22,6 @@
> import java.util.Properties;
>
> import org.apache.velocity.tools.generic.ComparisonDateTool;
> -import org.apache.velocity.tools.generic.EscapeTool;
> import org.apache.velocity.tools.generic.ListTool;
> import org.apache.velocity.tools.generic.MathTool;
> import org.apache.velocity.tools.generic.NumberTool;
> @@ -37,6 +36,7 @@
> import org.xwiki.velocity.VelocityConfiguration;
> import org.xwiki.velocity.introspection.ChainingUberspector;
> import org.xwiki.velocity.introspection.DeprecatedCheckUberspector;
> +import org.xwiki.velocity.tools.EscapeTool;
> import org.xwiki.velocity.tools.RegexTool;
>
> /**
>
> Added: platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/tools/EscapeTool.java
> ===================================================================
> --- platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/tools/EscapeTool.java (rev 0)
> +++ platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/tools/EscapeTool.java 2010-12-08 03:47:08 UTC (rev 33301)
> @@ -0,0 +1,72 @@
> +/*
> + * See the NOTICE file distributed with this work for additional
> + * information regarding copyright ownership.
> + *
> + * This is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU Lesser General Public License as
> + * published by the Free Software Foundation; either version 2.1 of
> + * the License, or (at your option) any later version.
> + *
> + * This software is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this software; if not, write to the Free
> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
> + */
> +
> +package org.xwiki.velocity.tools;
> +
> +/**
> + * Tool for working with escaping in Velocity templates. It provides methods to escape outputs for Velocity, Java,
> + * JavaScript, HTML, XML and SQL.
> + *
> + * @version $Id$
> + * @since 2.7RC1
> + */
> +public class EscapeTool extends org.apache.velocity.tools.generic.EscapeTool
> +{
> + /**
> + * Escapes the XML special characters in a <code>String</code> using numerical XML entities.
> + *
> + * @param value the text to escape, may be {@code null}
> + * @return a new escaped {@code String}, {@code null} if {@code null} input
> + */
> + @Override
> + public String xml(Object source)
> + {
> + if (source == null) {
> + return null;
> + }
> + String str = String.valueOf(source);
> + StringBuilder result = new StringBuilder((int) (str.length() * 1.1));
> + int length = str.length();
> + char c;
> + for (int i = 0; i < length; ++i) {
> + c = str.charAt(i);
> + switch (c) {
> + case '&':
> + result.append("&");
> + break;
> + case '<':
> + result.append("<");
> + break;
> + case '>':
> + result.append(">");
> + break;
> + case '"':
> + result.append(""");
> + break;
> + case '\'':
> + result.append("'");
> + break;
> + default:
> + result.append(c);
> + }
> + }
> + return result.toString();
> + }
> +}
>
>
> Property changes on: platform/core/trunk/xwiki-velocity/src/main/java/org/xwiki/velocity/tools/EscapeTool.java
> ___________________________________________________________________
> Added: svn:keywords
> + Author Id Revision HeadURL
> Added: svn:eol-style
> + native
>
> Added: platform/core/trunk/xwiki-velocity/src/test/java/org/xwiki/velocity/tools/EscapeToolTest.java
> ===================================================================
> --- platform/core/trunk/xwiki-velocity/src/test/java/org/xwiki/velocity/tools/EscapeToolTest.java (rev 0)
> +++ platform/core/trunk/xwiki-velocity/src/test/java/org/xwiki/velocity/tools/EscapeToolTest.java 2010-12-08 03:47:08 UTC (rev 33301)
> @@ -0,0 +1,70 @@
> +/*
> + * See the NOTICE file distributed with this work for additional
> + * information regarding copyright ownership.
> + *
> + * This is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU Lesser General Public License as
> + * published by the Free Software Foundation; either version 2.1 of
> + * the License, or (at your option) any later version.
> + *
> + * This software is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this software; if not, write to the Free
> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
> + */
> +
> +package org.xwiki.velocity.tools;
> +
> +import org.junit.Assert;
> +import org.junit.Test;
> +
> +/**
> + * Unit tests for {@link EscapeTool}.
> + *
> + * @version $Id$
> + * @since 2.7RC1
> + */
> +public class EscapeToolTest
> +{
> + @Test
> + public void testEscapeSimpleXML()
> + {
> + EscapeTool tool = new EscapeTool();
> + String escapedText = tool.xml("a < a' && a' < a\" => a < a\"");
> +
> + Assert.assertFalse("Failed to escape <", escapedText.contains("<"));
> + Assert.assertFalse("Failed to escape >", escapedText.contains(">"));
> + Assert.assertFalse("Failed to escape '", escapedText.contains("'"));
> + Assert.assertFalse("Failed to escape \"", escapedText.contains("\""));
> + Assert.assertFalse("Failed to escape &", escapedText.contains("&&"));
> + }
> +
> + @Test
> + public void testEscapeXMLApos()
> + {
> + EscapeTool tool = new EscapeTool();
> +
> + Assert.assertFalse("' wrongly escaped to non-HTML '", tool.xml("'").equals("'"));
> + }
> +
> + @Test
> + public void testEscapeXMLWithNull()
> + {
> + EscapeTool tool = new EscapeTool();
> +
> + Assert.assertNull("null should be null", tool.xml(null));
> + }
> +
> + @Test
> + public void testEscapeXMLNonAscii()
> + {
> + EscapeTool tool = new EscapeTool();
> +
> + Assert.assertTrue("Non-ASCII characters shouldn't be escaped", tool.xml("\u0123").equals("\u0123"));
> + }
> +}
>
>
> Property changes on: platform/core/trunk/xwiki-velocity/src/test/java/org/xwiki/velocity/tools/EscapeToolTest.java
> ___________________________________________________________________
> Added: svn:keywords
> + Author Id Revision HeadURL
> Added: svn:eol-style
> + native
Hi devs,
I have a serious problem. I'm using a fresh XE 2.6 with MySql (fresh db
+ XE 2.6 XAR import) and I'm doing this:
1. Create a class Main.TestClass with only one property (say "city") of
type "String".
2. Add an object of type Main.TestClass to Main.TestClass page and set
the value of "city" to a large string (say 270 characters).
3. Save.
I get:
----------8<----------
org.hibernate.exception.DataException: could not insert:
[com.xpn.xwiki.objects.StringProperty]
...
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too
long for column 'XWS_VALUE' at row 1
---------->8----------
IMO "Data too long" should be only a warning. Why isn't the string
simply truncated if it's too long?
If I go back to the object editor the value of the "city" property is
empty. If I try to set the value to a short string, say "Paris" and then
save, I get:
----------8<----------
Failed to commit or rollback transaction. Root cause []
...
Wrapped Exception:
org.hibernate.StaleObjectStateException: Row was updated or deleted by
another transaction (or unsaved-value mapping was incorrect):
[com.xpn.xwiki.objects.StringProperty#<?xml version="1.0" encoding="UTF-8"?>
<city>Paris</city>
]
---------->8----------
So how can I fix this? If I delete the object and then create a new one,
setting the value of "city" to "Rome" I get the same exception as
before, but with:
<city>Rome</city>
Is this related to my configuration?
Thanks,
Marius
On Dec 7, 2010, at 2:30 AM, sdumitriu (SVN) wrote:
> Author: sdumitriu
> Date: 2010-12-07 02:30:38 +0100 (Tue, 07 Dec 2010)
> New Revision: 33282
>
> Modified:
> platform/xwiki-plugins/trunk/activitystream/src/main/java/com/xpn/xwiki/plugin/activitystream/api/ActivityStream.java
> platform/xwiki-plugins/trunk/activitystream/src/main/java/com/xpn/xwiki/plugin/activitystream/impl/ActivityStreamImpl.java
> platform/xwiki-plugins/trunk/activitystream/src/main/java/com/xpn/xwiki/plugin/activitystream/plugin/ActivityStreamPluginApi.java
> Log:
> XPLUCENE-74: Add a method to return the list of pages with events grouped by days and sorted by the event date
Error in JIRA issue?
Thanks
-Vincent
Hi devs,
This is a buy one, get two proposal.
I propose that first we rename DocumentUpdateEvent and
DocumentSaveEvent to respectively DocumentUpdatedEvent and
DocumentCreatedEvent. Which would be both more clear and would comply
to the naming rules we've agreed on (see
http://xwiki.markmail.org/thread/frzfzookl2lstsfj ). By rename I don't
mean real rename, but deprecation of the old events and creation of
two new ones.
Then I propose we introduce two new events : DocumentCreatingEvent and
DocumentUpdatingEvent, that would be fired before the actual save.
This is a pretty common use case for code that needs to hook on save
to perform any kind of verification/pre-computation/etc. This is the
same idea as the "preverify" method of the legacy notification
mechanism. The events would actually be fired from the same place as
the preverify method in old XWiki.java.
WDYT ?
I'm +1 and if we agree I volunteer to make those changes on 3.0 branch
- and maybe the 2.7 too if we agree we want that too (I do).
On Tue, Dec 7, 2010 at 11:39, Jean-Vincent Drean <jv(a)xwiki.com> wrote:
> On Tue, Dec 7, 2010 at 11:26 AM, jvdrean
> <platform-notifications(a)xwiki.org> wrote:
>> Author: jvdrean
>> Date: 2010-12-07 11:26:25 +0100 (Tue, 07 Dec 2010)
>> New Revision: 33290
>>
>> Modified:
>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
>> platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/importer/import.js
>> platform/web/trunk/standard/src/main/webapp/templates/importinline.vm
>> platform/web/trunk/standard/src/main/webapp/templates/javascript.vm
>> Log:
>> XWIKI-5724 : On import document author is not the current user
>>
>> Replaced the need of programming rights by a dedicated right retrieved from the packager plugin (impl: admin rights on the same wiki).
>
> read: _main_ wiki.
Note that it's possible to modify a svn log.
>
>> Modified: platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
>> ===================================================================
>> --- platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java 2010-12-07 04:42:49 UTC (rev 33289)
>> +++ platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java 2010-12-07 10:26:25 UTC (rev 33290)
>> @@ -121,6 +121,25 @@
>> {
>> this.plugin.setBackupPack(backupPack);
>> }
>> +
>> + /**
>> + * Indicate if the current user has the right to import a package as a backup pack. In this implementation, to be
>> + * able to import has backup pack the user must have the admin right on the XWiki.XWikiPreferences document from
>> + * the main wiki (xwiki:XWiki.XWikiPreferences). The goal is to prevent local wiki administrators from importing
>> + * documents saved with a global administrator as the author (rights escalation).
>> + *
>> + * @return true if the current user has the rights to import a package as a backup pack, false otherwise
>> + */
>> + public boolean hasBackupPackImportRights()
>> + {
>> + try {
>> + return context.getWiki().getRightService()
>> + .hasAccessLevel("admin", context.getUser(), "xwiki:XWiki.XWikiPreferences", context);
>> + } catch (XWikiException e) {
>> + e.printStackTrace();
>> + return false;
>> + }
>> + }
>>
>> public boolean isVersionPreserved()
>> {
>>
>> Modified: platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/importer/import.js
>> ===================================================================
>> --- platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/importer/import.js 2010-12-07 04:42:49 UTC (rev 33289)
>> +++ platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/importer/import.js 2010-12-07 10:26:25 UTC (rev 33290)
>> @@ -252,7 +252,7 @@
>> .insert( new Element("input", { 'type':'radio','name':'historyStrategy', 'value': 'reset' }) )
>> .insert(translations["resetHistory"] ) );
>>
>> - if (XWiki.hasProgramming) {
>> + if (XWiki.hasBackupPackImportRights) {
>> var importAsBackupCheckbox = new Element("input", { 'type':'checkbox', 'name':'importAsBackup', 'value':'true' });
>> if (infos.backup) {
>> importAsBackupCheckbox.checked = true;
>>
>> Modified: platform/web/trunk/standard/src/main/webapp/templates/importinline.vm
>> ===================================================================
>> --- platform/web/trunk/standard/src/main/webapp/templates/importinline.vm 2010-12-07 04:42:49 UTC (rev 33289)
>> +++ platform/web/trunk/standard/src/main/webapp/templates/importinline.vm 2010-12-07 10:26:25 UTC (rev 33290)
>> @@ -194,7 +194,7 @@
>> $msg.get('core.importer.resetHistory')
>> </div>
>> </div>
>> - #if($xwiki.hasProgrammingRights())
>> + #if($packager.hasBackupPackImportRights())
>> <div class="importOption">
>> <input type="checkbox" name="importAsBackup" value="true" #if($packager.isBackupPack())checked="checked"#end/>
>> $msg.get('core.importer.importAsBackup')
>>
>> Modified: platform/web/trunk/standard/src/main/webapp/templates/javascript.vm
>> ===================================================================
>> --- platform/web/trunk/standard/src/main/webapp/templates/javascript.vm 2010-12-07 04:42:49 UTC (rev 33289)
>> +++ platform/web/trunk/standard/src/main/webapp/templates/javascript.vm 2010-12-07 10:26:25 UTC (rev 33290)
>> @@ -40,6 +40,7 @@
>> XWiki.blacklistedSpaces = [ #foreach($space in $blacklistedSpaces)#if($velocityCount > 1),#end"$space"#end ];
>> XWiki.hasEdit = $hasEdit;
>> XWiki.hasProgramming = $hasProgramming;
>> +XWiki.hasBackupPackImportRights = $xwiki.package.hasBackupPackImportRights();
>> window.docviewurl = "${doc.getURL('view')}";
>> window.docediturl = "${doc.getURL('edit')}";
>> window.docsaveurl = "${doc.getURL('save')}";
>>
>> _______________________________________________
>> notifications mailing list
>> notifications(a)xwiki.org
>> http://lists.xwiki.org/mailman/listinfo/notifications
>>
> _______________________________________________
> notifications mailing list
> notifications(a)xwiki.org
> http://lists.xwiki.org/mailman/listinfo/notifications
>
--
Thomas Mortagne
On Tue, Dec 7, 2010 at 11:33, jvdrean <platform-notifications(a)xwiki.org> wrote:
> Author: jvdrean
> Date: 2010-12-07 11:33:35 +0100 (Tue, 07 Dec 2010)
> New Revision: 33291
>
> Modified:
> platform/core/branches/xwiki-core-2.6/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
> Log:
> XWIKI-5724 : On import document author is not the current user
>
> Replaced the need of programming rights by a dedicated right retrieved from the packager plugin (impl: admin rights on the same wiki). It is equivalent
> with one exception, this method allows guests to import the initial XAR as backup pack in an empty wiki.
>
> Merged from trunk @ r33290.
>
>
>
> Modified: platform/core/branches/xwiki-core-2.6/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java
> ===================================================================
> --- platform/core/branches/xwiki-core-2.6/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java 2010-12-07 10:26:25 UTC (rev 33290)
> +++ platform/core/branches/xwiki-core-2.6/xwiki-core/src/main/java/com/xpn/xwiki/plugin/packaging/PackageAPI.java 2010-12-07 10:33:35 UTC (rev 33291)
> @@ -121,6 +121,25 @@
> {
> this.plugin.setBackupPack(backupPack);
> }
> +
> + /**
> + * Indicate if the current user has the right to import a package as a backup pack. In this implementation, to be
> + * able to import has backup pack the user must have the admin right on the XWiki.XWikiPreferences document from
> + * the main wiki (xwiki:XWiki.XWikiPreferences). The goal is to prevent local wiki administrators from importing
> + * documents saved with a global administrator as the author (rights escalation).
> + *
> + * @return true if the current user has the rights to import a package as a backup pack, false otherwise
> + */
> + public boolean hasBackupPackImportRights()
> + {
> + try {
> + return context.getWiki().getRightService()
> + .hasAccessLevel("admin", context.getUser(), "xwiki:XWiki.XWikiPreferences", context);
You should never use "xwiki" and instead as the main wiki name to the API.
> + } catch (XWikiException e) {
> + e.printStackTrace();
> + return false;
> + }
> + }
>
> public boolean isVersionPreserved()
> {
>
> _______________________________________________
> notifications mailing list
> notifications(a)xwiki.org
> http://lists.xwiki.org/mailman/listinfo/notifications
>
--
Thomas Mortagne
Hello,
The current searchUniquePages() method from the activitystream plugin
returns the list unique page names sorted by max(event.date) desc.
Because each page appears once in the list, the events for a page on
previous days are not being displayed in the activity stream (on
dashboard, user profile and tags).
What searchUniquePages() method should actually return is the list of
unique pages GROUPED and ordered BY DAY.
Since this method is used only once, in the activity macro, the query
inside it could be modified, so that the result list to match the
activity stream requirements.
Otherwise, I would have to create a new method, something like:
searchUniquePagesPerDay() and depricate the searchUniquePages()
method.
What do you think that the best solution would be in this case?
Raluca.
Hi devs,
I'd like to propose removing the log to xwiki.log by default in our log4j.properties file.
The rationale is:
* This is causing problems with a lot of users since by default we log in the current directory and there are lots of cases when users start xwiki from a directory where you don't have correct permissions
* We don't control where xwiki.log is created
Proposal:
* We only log to stdout:
** tomcat is already configured to capture stdout/stderr and to redirect them to catalina.out
** I have a modification ready for Jetty to do the same, here it is in case you want to see it:
<!-- =========================================================== -->
<!-- Redirect stdout & stderr to a log file -->
<!-- =========================================================== -->
<New id="ServerLog" class="java.io.PrintStream">
<Arg>
<New class="org.mortbay.util.RolloverFileOutputStream">
<Arg><SystemProperty name="jetty.home" default="."/>/logs/yyyy_mm_dd.stderrout.log</Arg>
<Arg type="boolean">false</Arg>
<Arg type="int">90</Arg>
<Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg>
<Get id="ServerLogName" name="datedFilename"/>
</New>
</Arg>
</New>
<Call class="org.mortbay.log.Log" name="info"><Arg>Redirecting stderr/stdout to <Ref id="ServerLogName"/></Arg></Call>
<Call class="java.lang.System" name="setErr"><Arg><Ref id="ServerLog"/></Arg></Call>
<Call class="java.lang.System" name="setOut"><Arg><Ref id="ServerLog"/></Arg></Call>
WDYT?
Thanks
-Vincent
I'm sending this message again because I think it didn't get on the
mailing list.
Raluca.
On Sat, Dec 4, 2010 at 6:02 PM, Raluca Stavro <raluca.morosan(a)xwiki.com> wrote:
> Hello,
>
> The current searchUniquePages() method from the activitystream plugin
> returns the list unique page names sorted by max(event.date) desc.
> Because each page appears once in the list, the events for a page on
> previous days are not being displayed in the activity stream (on
> dashboard, user profile and tags).
> What searchUniquePages() method should actually return is the list of
> unique pages GROUPED and ordered BY DAY.
> Since this method is used only once, in the activity macro, the query
> inside it could be modified, so that the result list to match the
> activity stream requirements.
> Otherwise, I would have to create a new method, something like:
> searchUniquePagesPerDay() and depricate the searchUniquePages()
> method.
> What do you think that the best solution would be in this case?
>
> Raluca.
>
I now have a working model of attachment storage in the sandbox.
http://svn.xwiki.org/svnroot/xwiki/contrib/sandbox/xwiki-store/xwiki-store-…
I can upload and download attachments with it simply by adding the .jar file to the /lib/ dir and
changing the attachment store in the xwiki.cfg.
This introduces a 2 major changes to the storage direction which I want to go over:
1. TransactionRunnable. This is a closure (like java.lang.Runnable) which does a job inside of a
transaction, it also provides hooks for rollback, commit and complete events. The underlying concept
is that code which is to run inside of a transaction is passed as an object to the storage engine
where the transaction is opened and it is run. This will make the exception catching generic for all
storage and Transaction is an interface independent of Hibernate or SQL.
See the bottom part of:
http://svn.xwiki.org/svnroot/xwiki/contrib/sandbox/xwiki-store/xwiki-store-…
NOTE: I have TransactionRunnable as a nested class while it is in development and I intend to move
it out when it becomes more mature.
2. Filesystem hierarchical storage: An attachment called 30579.jpg a document called
xwiki:Main.WebHome will be stored in a file at the path:
work/storage/xwiki/Main/WebHome/~this/attachments/30579.jpg/30579.jpg
The names are URL encoded for security. The directory ~this contains a character which is URL
invalid and thus insures that if nested spaces are implemented, a document called
xwiki:Main.WebHome.attachments will not cause a collision.
The "attachments" directory is a directory dedicated to attachments for the given document.
The "30579.jpg" directory under the attachments directory is dedicated to all information related to
that directory. This opens the possibility for attachment history to be stored along side the
attachment content.
WDYT?
Caleb
PS. This code currently contains no tests, I do not want to go any further until I know this path is
agreed upon.
Hey Guys,
I asked this in the user group a couple of days ago and I didn't get a
response so I figured I would try to ask here. In the creation of List type
properties for Xwiki objects, the option for relational storage is
presented.
My question is mainly what do I gain/lose by checking the relational storage
option? How does it affect how the list is stored so on so forth?
Thanks
Martin Bryant
--
View this message in context: http://xwiki.475771.n2.nabble.com/Questions-Regarding-Relational-storage-tp…
Sent from the XWiki- Dev mailing list archive at Nabble.com.
fyi.... At some point we'll need to migrate.
Some things I've noticed from the release notes:
- their new syntax #[[...]]# is going to be fun for us... :(
- the velocimacro.context.localscope replacement is important for us
-Vincent
Begin forwarded message:
> From: Nathan Bubna <nbubna(a)apache.org>
> Date: December 1, 2010 7:46:29 AM GMT+01:00
> To: announce(a)apache.org, Velocity Developers List <dev(a)velocity.apache.org>, Velocity Users List <user(a)velocity.apache.org>, general <general(a)velocity.apache.org>
> Subject: [ANNOUNCE] Apache Velocity Engine 1.7
>
> The Apache Velocity Team announces the immediate availability of the
> of Apache Velocity Engine 1.7. This release is fully compatible with
> the previous release and includes significant improvements in
> performance, stability and features.
>
> Apache Velocity is well-known in the Java field as a lightweight,
> easy-to-use templating library for creating dynamic web sites and
> performing other text-generation tasks.
>
> Much work in this release has gone to making Velocity more
> user-friendly, adding some long-desired features and improving many
> others. Apart from this, numerous bugs were fixed (both common and
> obscure), deprecation warnings were added to push people toward the
> eventual 2.0 version, and performance continues to be improved. Some
> details are listed below:
>
> * There are four new syntax features:
> - #[[ This is a literal text block. It is not parsed, but directly
> fed into the output. ]]#
> - #@yourMacro() can now have body content. Just remember to add the
> @ when calling it with a body! #end
> - You can use brackets to get and set values in lists (and arrays).
> e.g. #set( $foo[2] = $bar[$i] )
> - Quotes, both single and double, may be escaped in string literals
> via doubling. e.g. #set( $foo = "Like ""this""!" )
>
> * There are five notable deprecations:
> - $velocityCount should be changed to $foreach.index (0-base) or
> $foreach.count (1-base)
> - $velocityHasNext should be changed to $foreach.hasNext,
> $foreach.last or $foreach.first
> - The #literal directive has been replaced by #[[ the much superior
> textblock ]]#
> - The velocimacro.context.localscope setting is being phased out;
> please get/set local #macro references as members of the optional,
> context-aware and self-documenting $macro "namespace" object. (e.g.
> #set( $macro.foo = 'bar' ) and $macro.foo). Enable this by setting
> macro.provide.scope.control=true in your properties.
> - The directive.evaluate.context.class setting is being phased out;
> please get/set local #evaluate references as members of the $evaluate
> "namespace" object. Enable this by setting
> evaluate.provide.scope.control=true in your properties.
>
> * The are three important changes:
> - The #stop directive now stops rendering instead of parsing, making
> it much more useful.
> - The #break directive can now be used in any scope, not just in a
> nested #foreach. It will terminate the nearest content "block",
> whether a directive, a macro body, or an entire template.
> - All templates, standard block (aka "content") directives, macros,
> macro bodies, #evaluate content and #define blocks can be easily
> configured to have an automatically-provided, context-aware and
> self-documenting namespace reference in which you can safely and
> securely #set and get any "local" references to keep them out of the
> global context.
>
> See the change log for a more complete explanation of any and all of
> these, or ask us about them at user(a)velocity.apache.org.
>
> Documentation Velocity 1.7 can be found here:
> http://velocity.apache.org/engine/releases/velocity-1.7/
>
> The change log is here:
> http://velocity.apache.org/engine/releases/velocity-1.7/changes-report.html
>
> Apache Velocity 1.7 can be downloaded here:
> http://velocity.apache.org/download.cgi
>
> For the Apache Velocity Team
> Nathan Bubna
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: announce-unsubscribe(a)apache.org
> For additional commands, e-mail: announce-help(a)apache.org
>
>
Hi!
Just a one line to congratulate the whole XWiki team and community for
getting XWiki farm running in the 2.6 XE/XEM featuring colibri skin. It
looks great!
Thanks for your work!
Ricardo
--
Ricardo Rodríguez
CTO
eBioTIC.
Life Sciences, Data Modeling and Information Management Systems
Hi,
I think we should provide default template providers in default XE. This thread is about deciding which ones to have by default.
Candidates:
==========
1- Wiki Macro
2- Blog Post
3- Scheduler Job
4- Class (same result as creating a class from the class wizard)
5- Color Theme
6- Panel
7- Skin
For some of these we have home pages to create them (For example: Blog, Scheduler, Class, Color Theme, Panel) so we need to decide if it's ok to provide 2 locations from where to create them.
In addition some of the candidates above are technical things and they shouldn't be displayed to simple users IMO: Wiki Macro, Scheduler Job, Class, Color Theme, Panel, Skin.
Thus I'd also like to discuss having a mechanism for a Template Provider to say to whom it's addressed. Could be done by adding an "Audience" field to the Template Provider class.
WDYT?
Thanks
-Vincent
Hi,
I've recently had the need to modify the list of blacklisted spaces on one
of my wikis. I had to override a .vm file to do that. I was reminded of this
issue while reading Vincent's email about default template providers and the
need to hide technical items. Hiding some specific spaces is a frequent use
case, for instance I often create a "Code" space to hold all my code files
and I'd like to hide it from the main dashboard but there's no easy way to
do that right now.
It would be great if instead I could simply edit a field in the
"Programming" section of the administration to define which spaces should be
blacklisted.
Here's my +1 for that.
WDYT?
Guillaume