Tags:
create new tag
view all tags

Implemented: Flag for edit script to avoid overwrite of existing topic text and form data

This pages describes a workaround for accidential overwriting of Form data when using HTML forms to create new topics

1 Problem

If you use a HTML form to associate a TWiki Form with a TWiki template (as described in TWiki Topic templates in Action) you will without warning overwrite existing TWiki Form data, if you accidentially enter an exiting Topic name.

See TWikiTemplates for HansruediHaenni original problem describtion.

2 Quick patch

2.1 Idea

Add CGI parameter to TWiki edit script, making it possible to abandon edit, if topic exists.

2.2 The patch

2.2.a Patch .../twiki/bin/edit script

Locate the edit script.

Right after the text:

    if( ! &TWiki::Store::webExists( $webName ) ) {
        my $url = &TWiki::getOopsUrl( $webName, $topic, "oopsnoweb" );
        TWiki::redirect( $query, $url );
        return;
    }

You add:

    # Prevent editing existing topic?
    if($query->param( 'onlynewtopic' ) && &TWiki::Store::topicExists( $webName, $topic ))
    {
       # Topic exists and user requested oops if it exists
       my $url = &TWiki::getOopsUrl( $webName, $topic, "oopscreatenewtopic" );
       print $query->redirect( $url );
       return;       
    }    

2.2.b Create new oops template

In your .../twiki/templates directory create a template file called oopscreatenewtopic.tmpl with the following content:

%TMPL:INCLUDE{"twiki"}%
%TMPL:DEF{"titleaction"}%(oops, topic exists)%TMPL:END%
%TMPL:DEF{"webaction"}% *Attention* %TMPL:END%
%TMPL:DEF{"heading"}%The "%TOPIC%" topic already exists%TMPL:END%
%TMPL:DEF{"message"}%
  Cannot create %TOPIC% because it already exists.

  Please go _back_ in browser and try a new name %TMPL:END%
%TMPL:DEF{"topicaction"}% %TMPL:END%

3 Then the workaround becomes...

Instead of writing
<form name="new" action="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%INTURLENCODE{"%WEB%"}%/">
   * New example topic: 
     <input type="text" name="topic" value="ExampleTopic%SERVERTIME{$yearx$mox$day}%" size="23" />
     <input type="hidden" name="templatetopic" value="ExampleTopicTemplate" />
     <input type="hidden" name="topicparent" value="%TOPIC%" />
     <input type="hidden" name="onlywikiname" value="on" />
     <input type="submit" value="Create" />
     (date format is <nop>YYYYxMMxDD)
</form>
as described in TWiki Topic templates in Action write:

<form name="new" action="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%INTURLENCODE{"%WEB%"}%/">
   * New example topic: 
     <input type="text" name="topic" value="ExampleTopic%SERVERTIME{$yearx$mox$day}%" size="23" />
     <input type="hidden" name="templatetopic" value="ExampleTopicTemplate" />
     <input type="hidden" name="topicparent" value="%TOPIC%" />
     <input type="hidden" name="onlywikiname" value="on" />
     <input type="hidden" name="onlynewtopic" value="on" />
     <input type="submit" value="Create" />
     (date format is <nop>YYYYxMMxDD)
</form>

Now you will get an error, if you try to create an already existing topic big grin

Contributors:
-- NielsKoldso - 30 Dec 2003
-- PeterThoeny - 31 Dec 2003

Discussions

Thanks Niels for the patch. Good idea, can be taken into the core code. Changes I did:

  • Moved the topic from the TWiki web to the Codev web
  • Changed the name of the flag from existsoops to onlynewtopic to make it consistent with the onlywikiname flag name
  • Renamed oopstopicexists2.tmpl to oopsonlynewtopic.tmpl

-- PeterThoeny - 31 Dec 2003

This is now in TWikiAlphaRelease and TWiki.org.

-- PeterThoeny - 31 Dec 2003

Edit | Attach | Watch | Print version | History: r6 < r5 < r4 < r3 < r2 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r6 - 2006-01-03 - PeterThoeny
 
  • Learn about TWiki  
  • Download TWiki
This site is powered by the TWiki collaboration platform Powered by Perl Hosted by OICcam.com Ideas, requests, problems regarding TWiki? Send feedback. Ask community in the support forum.
Copyright © 1999-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.