Item9562: Update documentation to clarify Foswiki::Func::pushTopicContext() does not clear set variables

Priority: Normal
Current State: Closed
Released In: 1.1.0
Target Release: minor
Applies To: Engine
Component: Preferences
Reported By: GeorgeClark
Waiting For:
Last Change By: KennethLavrsen
If a topic is missing settings for a variable, then setting from the prior topic context will still be used.

Topic 1
   * Set BLAH = TEST

Topic 2
 [No set statements]

pushTopicContext from Topic1 to Topic2 will leave BLAH set to Test. The variable should not exist when in Topic 2 context.

-- GeorgeClark - 27 Aug 2010

Gilmar, Any thoughts? Given this is a stack that normally inherits from other levels, I suspect that this might be correct, although unexpected behavior. Func documentation states: Change the Foswiki context so it behaves as if it was processing $web.$topic from now on. So I interpreted this as it replaces the Topic in the stack, although it appears to behave as if it added the topic onto the stack.

-- GeorgeClark - 29 Aug 2010

Hi George!

I didn't receive a mail notification about this item.. maybe cause "Foswiki:" prefix inhibit the notification. I was reading IRC logs today and then I came here wink

Well, the behavior you described is exactly how preferences works (it works this way now and it always worked like this): preferences are a stack (I don't remember if the exact order is this, but it's documented somewhere):
  1. DefaultPreferences
  2. Plugins
  3. SitePreferences
  4. User preferences
  5. Web
  6. Topic

The preferences stack is built at initialization time (Foswiki::new), but it changes during the request processing (especially when processing INCLUDE).

It seems to me that what you want/need is to get/check a preference of a topic, no matter what the context is. If so, you should use Foswiki::Meta::getPreference(), instead of Foswiki::Prefs::getPreference(). The former refers to preferences of the object and the second to global preferences stack.

If you're already using Foswiki::Meta::getPreference(), then we probably have a bug.

-- GilmarSantosJr

Hi Gilmar, I'll update the docs then for pushTopicContext. The statement "Change the Foswiki context so it behaves as if it was processing $web.$topic from now on." to me would imply that the topic is replaced on the stack (even though it does say push.) I was not using the Foswiki::Meta::getPreference(). I was using the pushTopicContext followed by Foswiki::Prefs::getPreference(). The difference is pretty subtle, because anything defined in the pushed topic is picked up - it's only when it's undefined in the pushed topic does the stack inheritance become clear.

I'll "fix" this with some documentation changes. Thanks.

-- GeorgeClark - 31 Aug 2010

Stack inheritance takes place if the preference is not defined at the top level topic or if it was finalized at some earlier level wink

-- GilmarSantosJr - 01 Sep 2010

ItemTemplate edit

Summary Update documentation to clarify Foswiki::Func::pushTopicContext() does not clear set variables
ReportedBy GeorgeClark
Codebase trunk
SVN Range
AppliesTo Engine
Component Preferences
Priority Normal
CurrentState Closed
Checkins distro:425b18cbd8e2 distro:935ba14a9983
TargetRelease minor
ReleasedIn 1.1.0
Topic revision: r10 - 04 Oct 2010, KennethLavrsen - This page was cached on 16 Sep 2021 - 18:52.

The copyright of the content on this website is held by the contributing authors, except where stated elsewhere. See Copyright Statement. Creative Commons License    Legal Imprint    Privacy Policy