TWiki Reference Manual (01-Sep-2001)
This page contains all documentation topics as one long, complete reference sheet. Doubleclick anywhere to return to the top of the page.
Server and client system requirements for TWiki 01-Sep-2001
Overview
Maintaining minimum client and server requirements is necessary to keep TWiki deployment as broad as possible.
Server Requirements
TWiki is written in Perl 5, uses a number of shell commands, and requires RCS (Revision Control System), a GNU Free Software package. TWiki is developed in a basic Linux/Apache environment. It also works with Microsoft Windows, and should have no problem on any other platform that meets the requirements:
Required Server Environment
Resource
Unix
Windows
Perl
5.005_03 or higher
Non standard Perl modules
Net::SMTP (or sendmail)
Net::SMTP, MIME::Base64, Digest::SHA1
RCS
5.7 or higher
Other external programs
ls, fgrep, egrep
Web server
Apache; others (with support for CGI, authentication, extended path) *
Current documentation covers Linux only. A TWikiOnWindows installation guide is next.
generates XHTML 1.0 pages that are compatible with HTML 3.2
minimal use of JavaScript in the user interface (degrades gracefully)
no cookies
no CSS
You can easily add capabilities, through customizing the templates, for one, while tailoring the browser requirements to your situation.
Known Issues
The new TWikiPlugins feature currently does not have compatibility guidelines for developers. Plugins can require just about anything: browser-specific functions, stylesheets (CSS), DHTML, Java applets, cookies.
Installation instructions for the TWiki 01-Sep-2001 production release
Overview
These installation steps are based on the Apache Web server on Linux. TWiki runs on other Web servers and Unix systems, and should be fine with any OS and server that meet the system requirements. Documentation for other platforms is currently limited. For Windows, check TWiki:Codev/TWikiOnWindows. Search the TWiki:Codev web for other intallation notes.
Standard Installation
Request and download the TWiki 01-Sep-2001 distribution in Unix ZIP format from http://TWiki.org/download.html. (To install TWiki on SourceForge, for use on a software development project, read TWiki:Codev/SourceForgeHowTo.)
Step 1: Create & Configure the Directories
NOTE:If you don't have access to your Web server configuration files - for example, if you're installing on an ISP-hosted account - use the alternative Step 1 instead.
Create directory /home/httpd/twiki and unzip the TWiki distribution into this directory.
The twiki/bin directory of TWiki must be set as a cgi-bin directory. Add /home/httpd/twiki/bin to file /etc/httpd/httpd.conf with only ExecCGI option.
The twiki/pub directory of TWiki must be set so that it is visible as a URL. Add /home/httpd/twiki to file httpd.conf with normal access options (copy from /home/httpd/html ).
Now add ScriptAlias for /twiki/bin and Alias for /twiki to file httpd.conf .
NOTE: The ScriptAliasmust come before the Alias, otherwise, Apache will fail to correctly set up /twiki/bin/, by treating it as just another subdirectory of the /twiki/ alias.
Example httpd.conf entries:
ScriptAlias /twiki/bin/ "/home/httpd/twiki/bin/"
Alias /twiki/ "/home/httpd/twiki/"
<Directory "/home/httpd/twiki/bin">
Options +ExecCGI
SetHandler cgi-script
AllowOverride all
Allow from all
</Directory>
<Directory "/home/httpd/twiki/pub">
Options FollowSymLinks +Includes
AllowOverride None
Allow from all
</Directory>
Restart Apache by /etc/rc.d/rc5.d/S85httpd restart .
Test that the twiki/bin directory is CGI-enabled by trying visiting it in your browser:
Enter the URL for the bin directory, http://yourdomain.com/twiki/bin/.
Your settings are OK if you get a message like "Forbidden. You don't have permission to access /twiki/bin/ on this server".
Settings are NOT correct if you get something like "Index of /twiki/bin" - recheck your httpd.conf file.
Make sure Perl 5 and the Perl CGI library are installed on your system. The default location of Perl is /usr/bin/perl. If it's elsewhere, change the path to Perl in the first line of each script in the twiki/bin directory, or create a symbolic link from /usr/bin/perl.
IMPORTANT: On ISP-hosted accounts, Perl CGI scripts usually require a .cgi extension to run. Some systems need .pl, the regular Perl extension. Modify all twiki/bin script filenames if necessary.
Set the file permission of all Perl scripts in the twiki/bin directory as executable to -rwxr-xr-x (755).
To be able to edit the Perl scripts and .tmpl files it is necessary to chown and chgrp -R twiki so all the files have the owner you want.
NOTE: This Guide assumes user nobody ownership for all files manipulated by the CGI scripts (executed by the Web server), and user twiki for all other files. You can:
replace nobody with another user if your server executes scripts under a different name (ex: default for Debian is www-data).
HINT: Run the testenv script from your browser: http://yourdomain.com/twiki/bin/testenv. It will show you the user name of the CGI scripts, a table listing all CGI environment variables, and a test of your twiki/lib/TWiki.cfg configuration file (you'll configure that in a minute).
replace user twiki with your own username
Set the permission of all files below twiki/data so that they are writable by user nobody. A simple way is to chmod them to -rw-rw-r-- (664) and to chown them to nobody.
Set the permission of the twiki/data directory and its subdirectories so that files in there are writable by user nobody. A simple way is to chmod them to drwxrwxr-x (775) and to chown them to nobody.
Set the permission of the twiki/pub directory and all its subdirectories so that files in there are writable by user nobody. A simple way is to chmod them to drwxrwxr-x (775) and to chown them to nobody.
NOTE: The twiki/data/*/*.txt,v RCS repository files in the installation package are locked by user nobody. If your CGI scripts are not running as user nobody, it's not possible to check in files (you'll see that the revision number won't increase after saving a topic). In this case, you need to unlock all repository files (check the RCS man pages) and lock them with a different user, ex www-data, or delete them all - new files will be automatically created the first time each topic is edited. A simple way to change ownership is with a search-and-replace in all files; for example, using sed: for f in *,v; do sed 's/nobody\:/www-data\:/' $f > x; mv x $f; done
Step 3: Set the Main Configuration File
Edit the file twiki/lib/TWiki.cfg, setting the variables to your needs.
Set the file extension in the $scriptSuffix variable to cgi or pl if required.
Make sure RCS is installed. Set $rcsDir in twiki/lib/TWiki.cfg to mach the location of your RCS binaries.
Security issue: Directories twiki/data , twiki/templates and all its subdirectories should be set so that they are not visible as a URL. (Alternatively, move the directories to a place where they are not visible, and change the variables in twiki/lib/TWiki.cfg accordingly)
Test your settings by running the testenv script from your browser: http://yourdomain.com/twiki/bin/testenv. Check if your twiki/lib/TWiki.cfg configuration file settings are correct.
Step 4: Finish Up from Your Browser
Point your Web browser at http://yourdomain.com/twiki/bin/view and start TWiki-ing away!
Edit the TWikiPreferences topic in the TWiki:TWiki web to set the WIKIWEBMASTER email address, and other preferences.
Edit the WebPreferences topic in each web, if necessary: set individual WEBCOPYRIGHT messages, and other preferences.
Enable email notification of topic changes, TWikiSiteTools has more.
Edit the WebNotify topic in all webs and add the users you want to notify.
That's it for the standard virgin installation of TWiki. Read on for server-level customization options.
Additional Server-Level Options
With your new TWiki installation up and running, you can manage most aspects of your site from the browser interface. Only a few functions require access to the server file system, via Telnet or FTP. You can make these server-level changes during installation, and at any time afterwards.
Enabling Authentication of Users
If TWiki is installed on a non-authenticated server - not using SSL - and you'd like to authenticate users:
Rename file .htaccess.txt in the twiki/bin directory to .htaccess and change it to your needs. For details, consult the HTTP server documentation (for Apache server: [1], [2]). In particular, the following red part needs to be configured correctly: Redirect /urlpath/to/TWiki/index.html http://your.domain.com/urlpath/to/TWiki/bin/view AuthUserFile /filepath/to/TWiki/data/.htpasswd ErrorDocument 401 /urlpath/to/TWiki/bin/oops/TWiki/TWikiRegistration?template=oopsauth
NOTE: In case you renamed the CGI script files to have a file extension you need to reflect that in the edit, view, preview, etc entries in .htaccess.
NOTE: The browser should ask for login name and password when you click on the Edit link. In case .htaccess does not have the desired effect you need to enable it: Add "AllowOverride All" to the Directory section of access.conf for your twiki/bin directory.
Copy the TWikiRegistrationPub topic to TWikiRegistration. Do that by either editing the topics in theTWiki web, or by renaming the .txt and .txt,v files in the twiki/data/TWiki directory.
HINT: You can customize the registration form by deleting or adding input tags. The name="" parameter of the input tags must start with: "Twk0..." (if this is an optional entry), or "Twk1..." (if this is a required entry). This ensures that the fields are processed correctly.
NOTE: When a user registers, a new line with the username and encrypted password is added to the data/.htpasswd file. The .htpasswd file that comes with the TWiki installation includes user accounts for TWiki core team members that are used for testing on TWiki.org. You can edit the file and delete those lines.
Create a new topic to check if authentication works.
Edit the TWikiAdminGroup topic in the TWiki:Main web to include users with system administrator status.
Edit the WebPreferences topic in each web, if necessary: set access priviliges.
Adding a New Web
To create a new web:
Create a new web data directory under twiki/data and check the file permission of the directory.
Use a name starting with characters A..Z, followed by a..z and/or 0..9 characters, but not a WikiWord.
Copy all files from the twiki/data/_default directory to the new data directory, preserving the original files' owner, group and permissions (on Unix, use cp -p). The data files must be writable by the owner the CGI scripts are running on (usually, nobody).
HINT: You can set permissions of .txt and .txt,v files to -rw-rw-rw- (666) and then edit the topic using your browser; RCS will restore the file permissions correctly when saving the topic.
Add the new web to the web list (visible in the upper right corner of each topic) by editing the site-level preferences, TWikiPreferences:
Add the new web to the %WIKIWEBLIST% variable.
Update the web settings by editing the WebPreferences topic of the new web:
Customize the %WEBTOPICLIST% variable to contain the web-specific links you prefer.
Set the WEBBGCOLOR variable to a color. The number represents the unique color for the web.
Set Plugins, access privileges, custom variables, other web-level options (ex: %WEBCOPYRIGHT% can be set for an individual web).
Add the new web to the color-coded web directory table by editing the TWikiWebsTable topic.
Test the new web: view pages, create a new page.
That's it for a basic new web set-up!
Optionally, you can also:
Create custom web-specific templates in a new twiki/templates/Someweb directory (otherwise, templates are inherited from twiki/templates).
Add TWikiForms for form-based page input that's stored separately from the main free-form topic text.
NOTE: User home topics are located in the netfrag.org.Main web - don't try to move them or create them in other webs. From any other web, user signatures have to point to netfrag.org.Main web, using a Main.UserName or %MAINWEB%.UserName format. (The %MAINWEB% variable is an advantage if you ever change the Main web name, but the standard Main.UserName is easier for users to enter, which is the bottom line!
Upgrade from TWiki 01-Dec-2000 or TWiki 01-Sep-2001 to TWiki 01-Dec-2001 (previous to new full release)
Overview
This guide describes how to upgrade either from TWiki 01-Dec-2000 or TWiki 01-Sep-2001 to TWiki 01-Dec-2001.
The latest version of TWiki (01-Dec-2001) is a small incremental release over the 01-Sep-2001 version.
The 01-Sep-2001 version involves several major new features and numerous enhancements to the last full version (01-Dec-2000). The file system set-up is almost identical, but much of the underlying data structure and processes is new. With all the changes, the upgrade procedure is straightforward, and your existing page data is imported directly.
Upgrade Requirements
To upgrade from a 01-Dec-2000 or 01-Sep-2001 standard installation to the latest 01-Dec-2001 TWiki Production Release, follow the instructions below.
To upgrade from a Beta of the new release, or if you made custom modifications to the application, read through all new reference documentation, then use the procedure below as a guideline.
Major Changes from TWiki 01-Sep-2001
The latest 01-Dec-2001 release includes the following new features and enhancements compared to the 01-Sep-2001 release:
FormattedSearch - New format="" parameter in %SEARCH{}% variable for database like reporting.
Various bug fixes
Major Changes from TWiki 01-Dec-2000
The 01-Sep-2001 release includes the following new features and enhancements compared to the 01-Dec-2000 release:
TWikiPlugins - Easily install program enhancements using external plug-in modules. Developers can create plug-ins in Perl, with the TWiki Plugin API.
InterwikiPlugin (preinstalled) - Link to external sites with text aliases, SiteAlias:Page; rules are defined in InterWikis. (Get more Plugins from the TWiki:Plugins web.)
SuperAdministrator Group - Lets you to make the members of one user group - by default, TWikiAdminGroup - into TWiki superusers, with the ability to overwrite locked topics from the browser interface. (This gets around the problem of topic lockouts, caused by typos in access privilege definitions.)
HierarchicalNavigation uses new Meta Data variables to link hierarchically.
Convert to XHTML - Pages are rendered for display in XHTML 1.0, as far as possible without breaking HTML 3.2 compliance.
TWiki Directory Structure and File Names
The TWiki directory structure remains the same, with one exception, the TWiki configuration file and Perl modules have been moved from the twiki/bin directory into it's own twiki/lib directory tree. The following files have been renamed and moved:
A new twiki/lib/TWiki/Plugins directory contains the new Plugin modules.
Standard Upgrade Procedure from 01-Sep-2001 to 01-Dec-2001 Release
This incremental update can be performed easily.
The following steps describe the upgrade assuming that $TWIKIROOT is the root of your current 01-Sep-2001 release.
Back up and prepare:
Back up all existing TWiki directories $TWIKIROOT/bin, $TWIKIROOT/pub, $TWIKIROOT/data, $TWIKIROOT/templates.
Create a temporary directory and unpack the ZIP file there.
Update files in TWiki root:
Overwrite all *.html and *.txt files in $TWIKIROOT with the new ones.
Update template files:
Overwrite all template files in $TWIKIROOT/templates with the new ones.
Update script files:
Overwrite all script files in $TWIKIROOT/bin with the new ones.
Update library files:
Overwrite the TWiki.pm library in $TWIKIROOT/lib with the new one.
Overwrite all *.pm library files in $TWIKIROOT/lib/TWiki and $TWIKIROOT/lib/TWiki/Plugins with the new ones.
Update data/TWiki files: (in case you want the updated docs)
Using your browser, merge the new TWiki.TWikiRegistration topic (or TWiki.TWikiRegistrationPub in case you used that one) into your existing TWiki.TWikiRegistration topic.
In the temporary twiki/data/TWiki directory where you unzipped the installation package:
Remove the files you do not want to upgrade: TWikiPreferences.*, TWikiWebsTable.*, WebNotify.*, WebPreferences.*, WebStatistics.* and all WebTopic* files.
In case the cgi-scripts are not running as user nobody: The *,v RCS repository files delivered with the installation package are locked by user nobody and need to be changed the user of your cgi-scripts, i.e. www-data. A simple way to switch the locker of the RCS files is to use sed:
for f in *,v; do sed 's/nobody\:/www-data\:/' $f > x; mv x $f; done
Move all remaining *.txt and *.txt,v files from the temporary data/TWiki directory to your $TWIKIROOT/data/TWiki directory.
Update pub/TWiki files:
Move the new pub/TWiki/TWikiDocGraphics directory into your $TWIKIROOT/pub/TWiki directory.
Standard Upgrade Procedure from 01-Dec-2000 to 01-Dec-2001 Release
The idea is to have the new and old installation work in parallel so that you can test the new installation before switching over. That way you can make the switch on your live TWiki installation within one minute without affecting the users.
Before Switch:
After Switch:
Current 01-Dec-2000:
New 01-Dec-2001:
Obsolete 01-Dec-2000:
New 01-Dec-2001:
twiki/templates/
twiki/templates2/
twiki/templates1/
twiki/templates/
twiki/bin/
twiki/bin/2/
(overwritten)
twiki/bin/
(N/A)
twiki/bin/lib/
(N/A)
twiki/lib/
twiki/data/TWiki
twiki/data/TWiki2
twiki/data/TWiki1
twiki/data/TWiki
(other directories do not change)
Alternatively you could move the existing installation away, install the 01-Dec-2001 release into it's place and move your webs and pub files back.
Follow this step-by-step guide to upgrade from the 01-Dec-2000 TWiki to the 01-Dec-2001 release, importing your original page data and related files:
Pre-Upgrade Preparation
Two major areas of TWiki functionality - TWikiTemplates and TWikiForms (input forms associated with a topic)- are entirely different in the new TWiki. If you've customized your templates or use Category Tables, read those sections before starting your upgrade.
The following steps describe the upgrade on Unix. Windows setup is very similar. It's assumed that $TWIKIROOT is the root of your current 01-Dec-2000 release, ex: export TWIKIROOT=/some/dir/
Step 1: Backup & Unpack
Back up all existing TWiki directories twiki/bin, twiki/pub, twiki/data, twiki/templates.
Create a temporary directory and unpack the ZIP file there:
mkdir -p ~/tmp/ cp -p ~/downloads/TWiki20011201.zip ~/tmp/ cd ~/tmp/ unzip ~/tmp/TWiki20011201.zip
Step 2: Upgrade TWiki document files
Move the document files to your TWiki root ( twiki ):
mv ~/tmp/TWiki*.html $TWIKIROOT mv ~/tmp/index.html $TWIKIROOT mv ~/tmp/readme.txt $TWIKIROOT mv ~/tmp/license.txt $TWIKIROOT
Step 3: Install new template files
Move & rename the template directory to a temporary twiki/templates2 directory, ex:
mv ~/tmp/templates $TWIKIROOT/templates2
Pay attention to the file and directory permissions (security issue). Set file permissions, ex:
chmod 644 *.cgi
Step 4: Install new data and pub files
Move the TWiki web to a temporary TWiki2 twiki/data/TWiki2 directory. Do the same to files attached to this web, ex:
mv ~/tmp/data/TWiki $TWIKIROOT/data/TWiki2 mv ~/tmp/pub/TWiki $TWIKIROOT/pub/TWiki2
Move & rename the Know web to a temporary twiki/data/Know2 directory, ex:
mv ~/tmp/data/Know $TWIKIROOT/data/Know2 mv ~/tmp/pub/Know $TWIKIROOT/pub/Know2
Move the _default and Trash web, ex:
mv ~/tmp/data/_default $TWIKIROOT/data mv ~/tmp/data/Trash $TWIKIROOT/data
Move the MIME types file, ex:
mv ~/tmp/data/mime.types $TWIKIROOT/data
Move the TWiki logo files, ex:
mv ~/tmp/pub/*.gif $TWIKIROOT/pub
Pay attention to the file permissions of the TWiki2 and Know2 directories and its files. The files must be writable by the cgi-scripts (usually user nobody).
In case the cgi-scripts are not running as user nobody: The *,v RCS repository files delivered with the installation package are locked by user nobody and need to be changed the user of your cgi-scripts, i.e. www-data. A simple way to switch the locker of the RCS files is to use sed:
for f in *,v; do sed 's/nobody\:/www-data\:/' $f > x; mv x $f; done
Step 5: Install new CGI scripts
Move & rename the CGI script directory to a temporary twiki/bin/2 directory, ex:
mv ~/tmp/bin $TWIKIROOT/bin/2
If necessary, change the script names to include the required extension, ex: .cgi
Copy any additional scripts you might have from the 01-Dec-2000 release, ex:
cp -p $TWIKIROOT/bin/somescript $TWIKIROOT/bin/2
In case you use basic authentication, rename .htaccess.txt to .htaccess and customize it, ex:
cd $TWIKIROOT/bin/2 mv .htaccess.txt .htaccess diff ../.htaccess . and merge the content
Pay attention to the file and directory permissions (security issue). Set permissions, ex:
chmod 755 *.cgi
Step 6: Install new Perl library files
Move the lib directory to a temporary twiki/bin/lib directory, ex:
mv ~/tmp/lib $TWIKIROOT/bin
Pay attention to the file and directory permissions (security issue). Set permissions, ex:
chmod 644 *.pm
Step 7: Set configurations and test installation
Merge the content of the old twiki/bin/wikicfg.pm into the new twiki/lib/TWiki.cfg configuration file. Use the diff command to find out the differences, ex:
cd $TWIKIROOT/bin/lib diff ../wikicfg.pm TWiki.cfg
Make sure to set the correct temporary location of templates and scripts, ex:
$scriptUrlPath = "/twiki/bin/2"; $templateDir = "/home/httpd/twiki/templates2";
Do not merge the functions extendHandleCommonTags, extendGetRenderedVersionOutsidePRE, extendGetRenderedVersionInsidePRE from the old twiki/bin/wikicfg.pm. This is now handled by the Default plugin twiki/lib/TWiki/Plugins/Default.pm
Test your new TWiki installation to see if you can view topics. Point your browser to the old installation and fix the URL to see the new installation, ex:
Old URL: http://localhost/cgi-bin/view
New URL: http://localhost/cgi-bin/2/view
Step 8: Update topics
You can do the following changes using your old TWiki 01-Dec-2000 or new TWiki 01-Dec-2001 installation. Pointing your browser to the old installation for edit-copy-edit-paste operations is recommended, so that users don't get surprised by meta data content showing up in topics.
Remember that you now have two TWiki webs:
The original TWiki web.
The new TWiki2 web, which gets renamed to TWiki when you switch over the installation.
In case you customized TWiki.TWikiRegistration, merge your changes back into TWiki2.TWikiRegistration.
Copy TWiki.TWikiWebsTable to TWiki2.TWikiWebsTable.
Do the same for any other topics you might have created in the TWiki web.
In TWiki2.TWikiPreferences, merge the old TWiki.TWikiPreferences settings and customize it.
Add your webs to WIKIWEBLIST
Set the WIKIWEBMASTER
Set the SMTPMAILHOST
In WebPreferences of all webs, add or change the following web preferences: (see TWiki.WebPreferences)
Add a NOSEARCHALL in case you want to exclude the web from a web="all" search:
* Set NOSEARCHALL = on
In WEBTOPICLIST, remove the %WEB% . {} decoration from the list (it is now in the templates), ex:
* Set WEBTOPICLIST = <a href="Home">Home</a> | <a href="WebChanges">Changes</a> | <a href="WebIndex">Index</a> | <a href="WebSearch">Search</a> | Go <input type="text" name="topic" size="16" />
Add a these new preferences:
* Set DENYWEBVIEW = * Set ALLOWWEBVIEW = * Set DENYWEBRENAME = * Set ALLOWWEBRENAME =
Set the FINALPREFERENCES:
* Set FINALPREFERENCES = WEBTOPICLIST, DENYWEBVIEW, ALLOWWEBVIEW, DENYWEBCHANGE, ALLOWWEBCHANGE, DENYWEBRENAME, ALLOWWEBRENAME
Optional: In WebSearch of all webs, replace content with this one line:
%INCLUDE{"%TWIKIWEB%.WebSearch"}%
Optional: In WebChanges of all webs, replace content with this one line:
%INCLUDE{"%TWIKIWEB%.WebChanges"}%
Step 9: Customize template files
NOTE: Skip this step if you did not customize your template files.
Remember that you have now two template directories:
The original twiki/templates.
The new twiki/templates2, which gets renamed to twiki/templates when you switch over the installation.
Customized templates and skins need to be upgraded to the new TWikiTemplates. This isn't difficult, but you have be familiar with the new template set-up before starting the conversion. The safest way is to use the new templates as a base and to merge your changes back. Changes in new templates:
Templates are now rendered by TWiki. You can use all TextFormattingRules, but you have to escape unwanted ones. Also, remove empty lines unless you want a =<p /> tag added.
Create a replacement WebForm topic based on twikicatitems.tmpl in each web that uses a Category Table. See details in TWikiForms and compare with the settings in the Know2.WebPreferences topic.
NOTE: Do not remove the twikicatitems.tmpl file, it is still used for topics that are of the old format.
Searches need to be adjusted to deal with format change. It is possible to define a regular expression search that can deal at the same time with topics in the old format and new format.
Example: List all topics in the Know web that have a TopicClassification? of PublicFAQ?: %SEARCH{ "[T]opicClassification.*?(td..td|value\=).*?[P]ublicFAQ" casesensitive="on" regex="on" nosearch="on" web="Know"}% (The [T] and [P] is done so that search does not find the topic where this search string is located in!)
Example: Create a link that lists all topics in the Know web with a TopicClassification? of PublicFAQ?: [[%SCRIPTURL%/search%SCRIPTSUFFIX%/Know/?scope=text &search=%5BT%5DopicClassification.*%3F%28td..td%7C value%5C%3D%29.*%3F%5BP%5DublicFAQ®ex=on][All Public FAQ]] All Public FAQ
For each web that has a custom notedited.tmpl template, create an equivalent WebTopicEditTemplate to conform with the new TemplateTopics. The new format replaces the notedited.tmpl, notext.tmpl and notwiki.tmpl templates.
Step 10: Switch over to new installation
In this step, you move the working 01-Dec-2001 installation to the old 01-Dec-2000 installation, so that users don't have to change the URL.
Test your new 01-Dec-2001 installation under twiki/bin/2/view to make sure everything works as expected.
NOTE: Don't worry about the Plugins, they'll work after the switch.
Edit $TWIKIROOT/bin/2/TWiki.cfg and remove the /2 from $scriptUrlPath and $templateDir, ex:
$scriptUrlPath = "/twiki/bin"; $templateDir = "/home/httpd/twiki/templates";
Rename the TWiki2 web to TWiki, including attachments, ex:
cd $TWIKIROOT/data mv TWiki TWiki1 mv TWiki2 TWiki cd $TWIKIROOT/pub mv TWiki TWiki1 mv TWiki2 TWiki
Rename the templates2 directory to templates, ex:
cd $TWIKIROOT mv templates templates1 mv templates2 templates
Move the lib directory one level up from $TWIKIROOT/bin/lib to $TWIKIROOT/lib, ex:
cd $TWIKIROOT mv bin/lib .
Copy content of bin/2 to bin, ex:
cd $TWIKIROOT/bin cp -p bin/2/* . cp -p bin/2/.htaccess .
Point your browser to the original URL and make sure the relocated 01-Dec-2001 installation works as expected: check browsing, searching and user registration.
The EmptyPlugin, DefaultPlugin, and InterwikiPlugin should be preinstalled. To check the InterwikiPlugin, go to its page.
If you have customized the functions extendHandleCommonTags, extendGetRenderedVersionOutsidePRE and extendGetRenderedVersionInsidePRE in twiki/bin/wikicfg.pm:
Merge those changes back into twiki/lib/TWiki/Plugins/Default.pm
General Format Changes
The format of the %GMTIME{"..."}% and %SERVERTIME{"..."}% variables is now "$hour:$min" instead of "hour:min". More in TWikiVariables.
ExtendingTableSyntax: Enhanced table syntax might have unwanted side effect: | *bold* | cells, | center aligned | and | right aligned | cells, span multiple columns using | empty cells |||. More in TextFormattingRules.
Use Net::SMTP module instead of sendmail if installed.
Use <verbatim> ... </verbatim> tags instead of <pre> ... </pre> tags where appropriate. More in TextFormattingRules.
New variable %STARTINCLUDE% and %STOPINCLUDE% variables to control what gets included of a topic. More in TWikiVariables.
Upgrading of imported pagess is done automatically after first edit, on save. "In memory" upgrade is done on topic view.
Attachments are now under revision control: $attachAsciiPath in TWiki.cfg defines which file types are stored in ASCII, otherwise, binary format is used. This means that the RCS version used should support binary files.
Handling for topic-specific templates like edit.new.tmpl has been removed and replaced by template topics in the new TWikiTemplates.
A new file warning.txt file can appear in the data directory. It may contain diagnostic info identifying problems that need fixing. This file could get fairly large if you have a lot of problems your site - you can delete it at any time.
TWiki site access control and user activity tracking
Overview
TWiki does not authenticate users internally, it depends on the REMOTE_USER environment variable. This variable is set when you enable Basic Authentication (.htaccess) or SSL "secure server" authentication (https protocol).
TWiki uses visitor identification to keep track of who made changes to topics at what time and to manage a wide range of personal site settings. This gives a complete audit trail of changes and activity.
Authentication Options
No special installation steps are required if the server is already authenticated. If it isn't, you have three standard options for controlling user access:
Forget about authentication to make your site completely public - anyone can browse and edit freely, in classic Wiki mode. All visitors are assigned the TWikiGuest? default identity, so you can't track individual user activity.
Use SSL (Secure Sockets Layer; HTTPS) to authenticate and secure the whole server.
Use Basic Authentication (.htaccess) to control access by protecting key scripts: attach, edit=, installpasswd, preview, rename, save, upload using the .htaccess file. The TWikiInstallationGuide has step-by-step instructions.
Partial Authentication
Tracking by IP address is an experimental feature, enabled in lib/TWiki.cfg. It lets you combine open access to some functions, with authentication on others, with full user activity tracking:
Normally, the REMOTE_USER environment variable is set for the scripts that are under authentication. If, for example, the edit, save and preview scripts are authenticated, but not view, you would get your WikiName in preview for the %WIKIUSERNAME% variable, but view will show TWikiGuest instead of your WikiName.
TWiki can be configured to remember the IP address/username pair whenever an authentication happens (edit topic, attach file). Once remembered, the non-authenticated scripts, like view, will show the correct username instead of TWikiGuest?.
Enable this feature by setting the $doRememberRemoteUser flag in TWiki.cfg. TWiki then persistently stores the IP address/username pairs in the file, $remoteUserFilename, which is "$dataDir/remoteusers.txt" by default.
NOTE: This approach can fail if the IP address changes due to dynamically assigned IP addresses or proxy servers.
Quick Authentication Test - Use the %WIKIUSERNAME% variable to return your current identity:
This section applies only if your netfrag.org is installed on a server that is both authenticated and on an intranet.
netfrag.org internally manages two usernames: Login username and TWiki username.
Login username: When you login to the intranet, you use your existing login username, ex: pthoeny. This name is normally passed to netfrag.org by the REMOTE_USER environment variable, and used by internally by netfrag.org. Login usernames are maintained by your system administrator.
TWiki username: Your name in WikiNotation, ex: PeterThoeny, is recorded when you register using TWikiRegistration; doing so also generates a personal home page in the Main web.
netfrag.org can automatically map an intranet username to a TWiki username, provided that the username pair exists in the TWikiUsers topic. This is also handled automatically when you register.
NOTE:To correctly enter a WikiName - your own or someone else's - be sure to include the Main web name in front of the Wiki username, followed by a period, and no spaces. Ex:
Main.WikiUsername or %MAINWEB%.WikiUsername
This points WikiUser to the netfrag.org.Main web, where user registration pages are stored, no matter which web it's entered in. Without the web prefix, the name appears as a NewTopic? everywhere but in the Main web.
Changing Passwords
Change and reset passwords using forms on regular pages. Use TWikiAccessControl to restrict use as required.
Change password Forgot your old password? Then use ResetPassword instead. Please only use ResetPassword in case you really forgot your password. Thank you.
After submitting this form your password will be changed.
Request for reset of password
Please only use this ResetPassword form in case you really forgot your password. Otherwise just change it using ChangePassword. Thank you.
After submitting this form you will receive a page with yor new password appearing encrypted.
Restricting read and write access to topics and webs, by users and groups
Overview
TWikiAccessControl allows you restrict access to single topics and entire webs, by individual user and by user groups, in three main areas: view; edit & attach; and rename/move/delete. These controls, combined with TWikiUserAuthentication, let you easily create and manage an extremely flexible, fine-grained privilege system.
An Important Control Consideration
Open, freeform editing is the essence of the WikiCulture - it's what makes TWiki different and often more effective than other collaboration tools. So, it is strongly recommended that decisions to restrict read or write access to a web or a topic are made with care. Experience shows that unrestricted write access works very well because:
Peer influence is enough to ensure that only relevant content is posted.
Peer editing - the ability to rearrange anything on a page - keeps topics focussed.
All content is preserved under revision control.
Edits can be undone by the TWikiAdminGroup (the default administrators group; see #ManagingGroups).
Users are encouraged to edit and refactor (condense a long topic), since there's a safety net.
As a collaboration guideline:
Create broad groups (more and varied input), and...
Avoid creating view-only users (if you can read it, you can contribute to it).
Users and Groups
Access control is based on users and groups. Users are defined by their WikiNames, an then organized into unlimited combinations under different user groups.
Managing Users
A user is created by with the TWikiRegistration form. The process generates a topic in the Main web in the new user's WikiName. The default visitor name is TWikiGuest?.
Users can be authenticated using Basic Authentication or SSL. TWikiUserAuthentication is required in order to track user identities.
Managing Groups
Groups are defined by group topics in the Main web, like the TWikiAdminGroup. To start a new group:
Create a new topic with A name that ends in Group, SomeGroup
Define two variables:
Set GROUP = < list of users and groups >
Set ALLOWTOPICCHANGE = < list of users and groups >
GROUP is a comma-separated list of users and of other groups: Set GROUP = Main.SomeUser, Main.OtherUser, Main.SomeOtherGroup
ALLOWTOPICCHANGE defines who is allowed to change the group topic; it is a comma delimited list of users and groups. You typically want to restrict that to the members of the group itself, so it should contain the name of the topic, Set ALLOWTOPICCHANGE = Main.TWikiAdminGroup
for the TWikiAdminGroup topic. (This prevents users not in the group from editing the topic and from gaining unauthorized membership to the group.)
Restricting Write Access
You can define who is allowed to make changes to a web or a topic.
Deny Editing by Topic
Denying editing of a topic also restricts attaching files to it; both privileges are assigned together.
Define one or both of these variables in a topic, preferably at the end of the page:
Set DENYTOPICCHANGE = < list of users and groups >
Set ALLOWTOPICCHANGE = < list of users and groups >
DENYTOPICCHANGE defines users or groups that are not allowed to make changes to the topic. It is a comma delimited list of users and groups. Example: * Set DENYTOPICCHANGE = Main.SomeBadBoy, Main.SomeBadGirl, Main.SomeHackerGroup
ALLOWTOPICCHANGE defines users or groups that are allowed to make changes to the topic. It is a comma delimited list of users and groups. Example: * Set ALLOWTOPICCHANGE = Main.SomeGoodGuy, Main.SomeGoodGirl, Main.TWikiAdminGroup
DENYTOPICCHANGE is evaluated before ALLOWTOPICCHANGE. Access is denied if the authenticated person is in the DENYTOPICCHANGE list, or not in the ALLOWTOPICCHANGE list. Access is granted in case DENYTOPICCHANGE and ALLOWTOPICCHANGE is not defined.
Deny Editing by Web
Restricting web-level editing blocks creating new topics, changing topics or attaching files.
Define one or both of these variable in the WebPreferences topic:
Set DENYWEBCHANGE = < list of users and groups >
Set ALLOWWEBCHANGE = < list of users and groups >
The same rules apply as for restricting topics, with these additions:
DENYTOPICCHANGE (in topic) overrides DENYWEBCHANGE (in WebPreferences)
ALLOWTOPICCHANGE (in topic) overrides ALLOWWEBCHANGE (in WebPreferences)
Restricting Rename Access
You can define who is allowed to rename, move or delete a topic, or rename a web.
Deny Renaming by Topic
To allow a user to rename, move or delete a topic, they also need write (editing) permission. They also need write access to change references in referring topics.
Define one or both of these variables in a topic, preferably at the end of the topic:
Set DENYTOPICRENAME = < list of users and groups >
Set ALLOWTOPICRENAME = < list of users and groups >
DENYTOPICCRENAME defines users or groups that are not allowed to rename the topic. It is a comma delimited list of users and groups. Example: * Set DENYTOPICRENAME = Main.SomeBadBoy, Main.SomeBadGirl, Main.SomeHackerGroup
ALLOWTOPICRENAME defines users or groups that are allowed to rename the topic. It is a comma delimited list of users and groups. Example: * Set ALLOWTOPICRENAME = Main.SomeGoodGuy, Main.SomeGoodGirl, Main.TWikiAdminGroup
DENYTOPICRENAME is evaluated before ALLOWTOPICRENAME. Access is denied if the authenticated person is in the DENYTOPICRENAME list, or not in the ALLOWTOPICRENAME list. Access is granted in case DENYTOPICRENAME and ALLOWTOPICRENAME is not defined.
Deny Renaming by Web
You can define restrictions of who is allowed to rename a netfrag.org web.
Define one or both of these variable in the WebPreferences topic:
Set DENYWEBRENAME = < list of users and groups >
Set ALLOWWEBRENAME = < list of users and groups >
The same rules apply as for topics, with these additions:
DENYTOPICRENAME (in topic) overrides DENYWEBRENAME (in WebPreferences)
ALLOWTOPICRENAME (in topic) overrides ALLOWWEBRENAME (in WebPreferences)
Restricting Read Access
You can define restrictions of who is allowed to view a netfrag.org web.
Define one or both of these variable in the WebPreferences topic:
Set DENYWEBVIEW = < list of users and groups >
Set ALLOWWEBVIEW = < list of users and groups >
Known Issues
The view restriction is not suitable for very sensitive content since there is a way to circumvent the read access restriction.
Read access restriction only works if the view script is authenticated, that means that users need to log on also just to read topics. TWikiInstallationGuide has more on Basic Authentication based on the .htaccess file.
Selective Unrestricted Web Access
There is a workaround if you prefer to have unrestricted access to view topics located in normal webs, and to authenticate users only for webs where view restriction is enabled:
Omit the view script from the .htaccess file.
Enable the $doRememberRemoteUser flag in lib/TWiki.cfg as described in TWikiUserAuthentication. netfrag.org will now remember the IP address of an authenticated user.
Copy the view script to viewauth (or better, create a symbolic link)
Addviewauth to the list of authenticated scripts in the .htaccess file.
When a user accesses a web where you enabled view restriction, netfrag.org will redirect from the view script to the viewauth script once (this happens only if the user has never edited a topic). Doing so will ask for authentication. The viewauth script shows the requested topic if the user could log on and if the user is authorized to see that web.
If you enable view restriction for a web, it is recommended to restrict search "all webs" from searching this web. Enable this restriction with the NOSEARCHALL variable in its WebPreferences, like:
Set NOSEARCHALL = on
It is not recommended to restrict view access to individual topics since all content is searchable within a web.
Hiding Control Settings
To hide access control settings from normal browser viewing, place them in comment markers.
<!--
Set DENYTOPICCHANGE = Main.SomeGroup
-->
The SuperAdminGroup
By mistyping a user or group name in the ALLOWTOPICCHANGE setting, it's possible to lock a topic so that it no-one can edit it from a browser. To avoid this:
Set the $superAdminGroup variable in lib/TWiki.cfg to the name of a group of users that are always allowed to edit/view topics.
Skins overlay regular templates with alternate header/footer layouts; topic text is not affected
Overview
Skins are customized TWikiTemplates files. You can use skins to change the look of a netfrag.org topic, for example, the layout of the header and footer. Rendered text between header and footer does not change. You can also use skins to define an alternate view, like a view optimized for printing.
Defining Skins
Skin files are located in the twiki/templates directory and are named with the syntax: <scriptname>.<skin>.tmpl. For example, the Printable skin for the view template is view.print.tmpl.
The ?skin=name URL parameter overrides the SKIN Preference value.
-- PeterThoeny - 14 Jul 2001
TWiki Variables
Text strings expanded on the fly to display data or system info
Overview
TWikiVariables are text strings - %VARIABLE% - that expand into content whenever a page is opened. Variables are replaced by their actual values: stored data, or system info (like the date, or the current user). There are predefined variables, and Preference variables that you set. You can also define custom variables, with new names and values.
Predefined Variables
Most predefined variables return values that were either defined when TWiki was installed, or taken from server info (like current username, or date and time). Many of the variables let you control how the formatted results appear.
netfrag.org expands the following variables (enclosed in % percent signs):
Variable:
Expanded to:
%WIKIHOMEURL%
The base script URL of netfrag.org, is the link of the Home icon in the upper left corner, is http://TWiki.org/
%SCRIPTURL%
The script URL of netfrag.org, is https://netfrag.org/twiki/bin
%SCRIPTURLPATH%
The path of the script URL of netfrag.org, is /twiki/bin
%SCRIPTSUFFIX%
The script suffix, ex: .pl, .cgi is
%PUBURL%
The public URL of TWiki, is https://netfrag.org/twiki/pub
%PUBURLPATH%
The path of the public URL of netfrag.org, is /twiki/pub
%ATTACHURL%
The attachment URL of the current topic, is https://netfrag.org/twiki/pub/TWiki/TWikiVariables Example: If you attach a file you can refer to it as %ATTACHURL%/image.gif
%ATTACHURLPATH%
The path of the attachment URL of the current topic, is /twiki/pub/TWiki/TWikiVariables
%URLPARAM{"name"}%
Returns the value of a URL parameter. Ex: %URLPARAM{"skin"}% returns print for a .../view/TWiki/TWikiVariables?skin=print URL. Is
%WIKITOOLNAME%
Name of wiki tool, is netfrag.org
%WIKIVERSION%
Wiki tool version is 04 Sep 2004 $Rev: 1742 $
%USERNAME%
Your login username is guest
%WIKINAME%
Your Wiki username. Same as %USERNAME% if not defined in the TWikiUsers topic. Is TWikiGuest
%WIKIUSERNAME%
Your %WIKINAME% including the Main web name. Usefull for signatures. Is Main.TWikiGuest
%MAINWEB%
The Main web containing TWikiUsers, OfficeLocations? and TWikiGroups?. Is Main
%TWIKIWEB%
The web containing all documentation and configuration of netfrag.org is TWiki
%WEB%
The current web is TWiki
%BASEWEB%
The web name where the includes started, e.g. the web of the first topic of nested includes. Same as %WEB% in case there is no include.
%INCLUDINGWEB%
The web name of the topic that includes the current topic. Same as %WEB% in case there is no include.
The index topic of all registered users. Is TWikiUsers
%WIKIPREFSTOPIC%
The web preferences topic. Is TWikiPreferences
%WEBPREFSTOPIC%
The web preferences topic. Is WebPreferences
%STATISTICSTOPIC%
The web statistics topic. Is WebStatistics
%TOPIC%
The current topic name, is TWikiVariables
%BASETOPIC%
The name of the topic where the includes started, e.g. the first topic of nested includes. Same as %TOPIC% in case there is no include.
%INCLUDINGTOPIC%
The name of the topic that includes the current topic. Same as %TOPIC% in case there is no include.
%SPACEDTOPIC%
The current topic name with added spaces, for regular expression search of Ref-By, is TWiki%20*Variables
%TOPICLIST{"format"}%
Topic index of a web. The "format" defines the format of one topic item. It may include variables: The $name variable gets expanded to the topic name; the $web variable gets expanded to the name of the web.
Parameters are format, separator and web:
Format of one line, may include $name and $web variables
"$name"
format="format"
(Alternative to above)
"$name"
separator=", "
line separator
"\n" (new line)
web="Name"
Name of web
Current web
Examples:
%TOPICLIST{" * $web.$name"}% creates a bullet list of all topics.
%TOPICLIST{separator=", "}% creates a comma separated list of all topics.
%TOPICLIST{" <option>$name</option>"}% creates an option list (for drop down menus).
%WEBLIST{"format"}%
Web index, e.g. list of all webs. Hidden webs are excluded, e.g. webs with a NOSEARCHALL=on preference variable. The "format" defines the format of one web item. The $name variable gets expanded to the name of the web, $qname gets expanded to double quoted name, $marker to marker where web matches selection.
Parameters are format, separator and web:
comma sep list of Web, public expands to all non-hidden
"public"
marker="selected"
Text for $marker where item matches selection, otherwise equals ""
"selected"
selection="%WEB%"
Current value to be selected in list
section="%WEB%"
Examples: %WEBLIST{" * [[$name.Home]]"}% creates a bullet list of all webs.
%WEBLIST{"" webs="Trash,public" selection="TWiki" separator=" "}% Dropdown of all public Webs + Trash Web, current Web highlighted.
Variables can be shortened to 3 characters. Example: %GMTIME{"$day $month, $year - $hour:$min:$sec"}% is 24 Nov, 2024 - 15:34:53
%SERVERTIME%
Server time, is 24 Nov 2024 - 16:34
%SERVERTIME{"format"}%
Formatted server time. Example: %SERVERTIME{"$hou:$min"}% is 16:34
%HTTP_HOST%
HTTP_HOST environment variable, is netfrag.org
%REMOTE_ADDR%
REMOTE_ADDR environment variable, is 3.131.13.24
%REMOTE_PORT%
REMOTE_PORT environment variable, is 16642
%REMOTE_USER%
REMOTE_USER environment variable, is
%INCLUDE{"page" ...}%
Server side include to IncludeTopicsAndWebPages. Parameters are page name, and an optional pattern="(reg-exp)". The page name is:
"SomeTopic"
The name of a topic located in the current web, i.e. %INCLUDE{"WebNotify"}%
"Web.Topic"
A topic in another web, i.e. %INCLUDE{"TWiki.TWikiWebsTable"}%
"http://..."
A full qualified URL, i.e. %INCLUDE{"http://twiki.org/"}%
%STARTINCLUDE%
If present in included topic, start to include text from this location up to the end, or up to the location of the %STOPINCLUDE% variable. A normal view of the topic shows everyting exept the %STARTINCLUDE% variable itself.
%STOPINCLUDE%
If present in included topic, stop to include text at this location and ignore the remaining text. A normal view of the topic shows everyting exept the %STOPINCLUDE% variable itself.
%TOC%
Table of Contents of current topic.
%TOC{"SomeTopic" ...}%
Table of Contents. Shows a TOC that is generated automatically based on headings of a topic. Headings in WikiSyntax ("---++ text") and HTML ("<h2>text<h2>") are taken into account. (But not "<H2>text</H2>", which can be used to exclude a heading from the TOC.) Parameters are topic name, web and depth:
What sort of search is required? "topicmoved" if search for a topic that may have been moved "parent" if searcing for topics that have a specific parent i.e. its children
required
web="%WEB%"
Wiki web to search: A web, a list of webs separated by whitespace, or all webs.
required
topic="%TOPIC%"
The topic the search relates to
required
title="Title"
Text the is pre-pended to any search results
required
Example: %METASEARCH{type="topicmoved" web="%WEB%" topic="%TOPIC%" title="This topic used to exist and was moved to: "}%, you may want to use this in WebTopicViewTemplate and WebTopicNonWikiTemplate %METASEARCH{type="parent" web="%WEB%" topic="%TOPIC%" title="Children: "}%
%VAR{"NAME" web="Web"}%
Get a preference value from a web other then the current one. Example: To get %WEBBGCOLOR% of the Main web write %VAR{"WEBBGCOLOR" web="Main"}%, is #444444
[1] Note: The search form uses identical names for input fields.
[2] Note: A web can be excluded from a web="all" search if you define a NOSEARCHALL=on variable in its WebPreferences.
Preferences Variables
Additional variables are defined in the preferences ( site-level ( SL ) in TWikiPreferences, web-level ( WL ) in WebPreferences of each web, and user level ( UL ) preferences in individual user topics):
Variable:
Level:
What:
%WIKIWEBMASTER%
SL
Webmaster email address (sender of email notifications) , is webmaster@netfrag.org
%WIKIWEBLIST%
SL
List of netfrag.org webs (in upper right corner of topics)
%WEBTOPICLIST%
WL
Common links of web (second line of topics)
%WEBCOPYRIGHT%
SL , WL
Copyright notice (bottom right corner of topics)
%WEBBGCOLOR%
WL
Background color of web
%NOSEARCHALL%
WL
Exclude web from a web="all" search (set variable to on for hidden webs)
%NEWTOPICBGCOLOR%
SL , UL
Background color of non existing topic. ( UL needs authentication for topic views )
%NEWTOPICFONTCOLOR%
SL , UL
Font color of non existing topic. ( UL needs authentication for topic views )
%EDITBOXWIDTH%
SL , UL
Horizontal size of edit box, is 100
%EDITBOXHEIGHT%
SL , UL
Vertical size of edit box, is 20
%RELEASEEDITLOCKCHECKBOX%
SL , UL
Default state of the "Release edit lock" (UnlockTopic) check box in preview. Checkbox is initially checked if Set RELEASEEDITLOCKCHECKBOX = checked="checked", or unchecked if empty. If checked, make sure to click on Edit to do more changes; do not go back in your browser to the edit page, or you risk that someone else will edit the topic at the same time! Value is: checked
%DONTNOTIFYCHECKBOX%
SL , UL
Default state of the "Minor Changes, Don't Notify" (DontNotify) check box in preview. Check box is initially checked if Set DONTNOTIFYCHECKBOX = checked="checked", or unchecked if empty. Value is: checked
%ATTACHLINKBOX%
SL , UL
Default state of the link check box in the attach file page. Check box is initially checked if value is set to CHECKED , unchecked if empty. If checked, a link is created to the attached file at the end of the topic. Value is:
%HTTP_EQUIV_ON_VIEW%
SL
http-equiv meta tags for view, rdiff, attach, search* scripts.
%HTTP_EQUIV_ON_EDIT%
SL , UL
http-equiv meta tags for edit script.
%HTTP_EQUIV_ON_PREVIEW%
SL , UL
http-equiv meta tags for preview script.
%DENYWEBCHANGE%
WL
List of users and groups who are not allowed to change topics in the netfrag.org web. (More in TWikiAccessControl)
%ALLOWWEBCHANGE%
WL
List of users and groups who are allowed to change topics in the netfrag.org web. (More in TWikiAccessControl)
%DENYTOPICCHANGE%
(any topic)
List of users and groups who are not allowed to change the current topic. (More in TWikiAccessControl)
%ALLOWTOPICCHANGE%
(any topic)
List of users and groups who are allowed to change the current topic. (More in TWikiAccessControl)
%DENYWEBRENAME%
WL
List of users and groups who are not allowed to rename topics in the netfrag.org web. (More in TWikiAccessControl)
%ALLOWWEBRENAME%
WL
List of users and groups who are allowed to rename topics in the netfrag.org web. (More in TWikiAccessControl)
%DENYTOPICRENAME%
(any topic)
List of users and groups who are not allowed to rename the current topic. (More in TWikiAccessControl)
%ALLOWTOPICRENAME%
(any topic)
List of users and groups who are allowed to rename the current topic. (More in TWikiAccessControl)
%FINALPREFERENCES%
SL , WL
List of preferences that are not allowed to be overridden by next level preferences
Setting Preferences
The syntax for Preferences variables is the same anywhere in TWiki. In Edit mode, from the start of a new line: [6 spaces] * [space] Set [space] VARIABLENAME [space] = [value] Example:
Set VARIABLENAME = value
Creating Custom Variables
You can add your own preference variables for an entire site, a single web, or a single topic, using the standard syntax. Whatever you include in your variable will be expanded on display, and treated exactly as if it had been written out. So you can place formatted text, page links, image paths.
Example: Create a custom logo variable
To place a logo anywhere in a web by typing %MYLOGO%, simply define the variable on the web's WebPreferences page. You also have to upload logo.gif - this can be done by attaching a file to LogoTopic (any topic name you choose):
Set MYLOGO = %PUBURL%/%MAINWEB%/LogoTopic/logo.gif
Additional topic data, program-generated or from TWikiForms, is stored in META variable name/value pairs
Overview
TWikiMetaData uses META variables to store topic data that's separate from the main free-form content. This includes program-generated info like FileAttachment and topic movement data, and user-defined TWikiForms info. Use META variables to format and display Meta Data.
Meta Data Syntax
Format is the same as in TWikiVariables, except all fields have a key.
%META:<type>{key1="value1" key2="value2" ...}%
Order of fields within the meta variables is not defined, except that if there is a field with key name, this appears first for easier searching (note the order of the variables themselves is defined).
Each meta variable is on one line.
\n (new line) is represented in values by %_N_ and " (double-quotes) by %_Q_%.
Example of Format
%META:TOPICINFO{version="1.6" date="976762663" author="PeterThoeny" format="1.0"}%
text of the topic
%META:TOPICMOVED{from="Codev.OldName" to="Codev.NewName"
by="JohnTalintyre" date="976762680"}%
%META:TOPICPARENT{name="NavigationByTopicContext"}%
%META:FILEATTACHMENT{name="Sample.txt" version="1.3" ... }%
%META:FILEATTACHMENT{name="Smile.gif" version="1.1" ... }%
%META:FORM{name="WebFormTemplate"}%
%META:FIELD{name="OperatingSystem" value="OsWin"}%
%META:FIELD{name="TopicClassification" value="PublicFAQ"}%
Meta Data Specifications
The current version of Meta Data is 1.0, with support for the following variables.
Format of this topic, will be used for automatic format conversion
META:TOPICMOVED
This is optional, exists if topic has ever been moved. If a topic is moved more than once, only the most recent META:TOPICMOVED meta variable exists in the topic, older ones are to be found in the rcs history.
%META:TOPICMOVED{from="Codev.OldName" to="Codev.NewName" by="talintj" date="976762680"}%
The topic from which this was created, WebHome if done from Go, othewise topic where ? or form used. Normally just topic, but is full web.topic format if parent is in a different Web. Renaming a Web will then only break a few of these references or they can be scanned and fixed.
There is no absolute need for Meta Data variables to be listed in a specific order within a topic, but it makes sense to do so a couple of good reasons:
form fields remain in the order they are defined
the diff function output appears in a logical order
The recommended sequence is:
META:TOPICINFO
text of topic
META:TOPICMOVED (optional)
META:TOPICPARENT (optional)
META:FILEATTACHMENT (0 or more entries)
META:FORM (optional)
META:FIELD (0 or more entries; FORM required)
Viewing Meta Data in Page Source
When viewing a topic the Raw Text link can be clicked to show the text of a topic (ie: as seen when editing). This is done by adding raw=on to URL. raw=debug shows the meta data as well as the topic data, ex: debug view for this topic
Rendering Meta Data
Meta Data is rendered with the %META% variable. This is mostly used in the view, preview and edit scripts.
Current support covers:
Prefix for parents, only if there are parents; default ""
suffix="..."
Suffix, only appears if there are parents; default ""
separator="..."
Separator between parents, default is " > "
Known Issues
At present, there is no Meta Data support for Plugins. However, the format is readily extendable and the Meta.pm code that supports the format needs only minor alteration.
-- JohnTalintyre - 29 Aug 2001
-- MikeMannix - 03 Dec 2001
TWiki Plugins
Plug-in enhanced feature add-ons, with a Plugin API for developers
Overview
You can add Plugins to extend TWiki's functionality, without altering the core program code. A plug-in approach lets you:
add virtually unlimited features while keeping the main TWiki code compact and efficient;
heavily customize an installation and still do clean updates to new versions of TWiki;
rapidly develop new TWiki functions in Perl using the Plugin API.
Everything to do with TWiki Plugins - demos, new releases, downloads, development, general discussion - is available at TWiki.org, in the TWiki:Plugins web.
Preinstalled Plugins
TWiki comes with three Plugins as part of the standard installation.
DefaultPlugin optionally handles some legacy variables from older versions of TWiki. You can control this option from TWikiPreferences. (Perl programmers can also add rules for simple custom processing.)
EmptyPlugin is a fully functional module, minus active code; it does nothing and serves as a template for new Plugin development.
InterwikiPlugin is preinstalled but can be disabled or removed. Use it for shorthand linking to remote sites, ex: TWiki:Plugins expands to TWiki:Plugins on TWiki.org. You can edit the predefined set of of Wiki-related sites, and add your own.
Installing Plugins
Each TWikiPlugin comes with full documentation: step-by-step installation instructions, a detailed description of any special requirements, version details, and a working example for testing.
Most Plugins can be installed in three easy steps, with no programming skills required:
Download the zip file containing the Plugin, documentation, and any other required files, from TWiki:Plugins.
Distribute the files to their proper locations - unzip the zip archive in your TWiki installation directory - if have a standard TWiki installation, this will distribute automatically. Otherwise, place the files according to the directory paths listed on the Plugin top in TWiki:Plugins.
Check the demo example on the Plugin topic: if it's working, the installation was fine!
Special Requests: Some Plugins need certain Perl modules to be preinstalled on the host system. Plugins may also use other resources, like graphics, other modules, applications, templates. In these cases, detailed instructions are in the Plugin documentation.
Each Plugin has a standard release page, located in the TWiki:Plugins web at TWiki.org. In addition to the documentation topic (SomePlugin), there's a separate development page.
Doc page: Read all available info about the Plugin; download the attached distribution files.
Dev page: Post feature requests, bug reports and general dev comments; topic title ends in Dev (SomePluginDev).
User support: Post installation, how to use type questions (and answers, if you have them) in the TWiki:Support web.
On-Site Pretesting
To test new Plugins on your installation before making them public, you may want to use one of these two approaches:
Method 1: Safely test on-the-fly by creating separate Production and Test branches in your live TWiki installation.
Duplicate the twiki/bin and twiki/lib directories for the Test version, adjusting the paths in the new lib/TWiki.cfg, the twiki/data; the twiki/templates and twiki/pub directories are shared.
Test Plugins and other new features in the Test installation until you're satisfied.
If you modify topics using the new features, live users will likely see unfamiliar new META tags showing up on their pages - to avoid this, create and edit test-only topics to try out new features.
Copy the modified files to the Production installation. You can update a TWiki installation live and users won't even notice.
Method 2: List the Plugin under Test in the DISABLEDPLUGINS variable in TWikiPreferences. Redefine the DISABLEDPLUGINS variable in the Test web and do the testing there.
Managing Plugins
When you finish installing a Plugin, you should be able to read the user instructions and go. In fact, some Plugins require additional settings or offer extra options that you have to select. Also, you may want to make a Plugin available only in certain webs, or temporarily disable it. And may want to list all available Plugins in certain topics. You can handle all of these management tasks with simple procedures.
Setting Preferences
Installed Plugins can be toggled on or off, site-wide or by web, through TWikiPreferences and individual WebPreferences:
All Plugin modules present in the lib/TWiki/Plugins directory are activated automatically unless disabled by the DISABLEDPLUGINS Preferences variable in TWikiPreferences. You can optionally list the installed Plugins in the INSTALLEDPLUGINS Preferences variable. This is useful to define the sequence of Plugin execution, or to specify other webs than the netfrag.org web for the Plugin topics. Settings in TWikiPreferences are:
Set INSTALLEDPLUGINS = DefaultPlugin, ...
Set DISABLEDPLUGINS = EmptyPlugin, ...
Plugin execution order in TWiki is determined by searching Plugin topics in a specific sequence: First, full web.topicname name, if specified in INSTALLEDPLUGINS; next, the TWiki web is searched; and finally, the current web.
Plugin-specific settings are done in individual Plugin topics. Two settings are standard for each Plugin:
One line description, used to form the bullets describing the Plugins in the TextFormattingRules topic:
Set SHORTDESCRIPTION = Blah blah woof woof.
Debug Plugin, output can be seen in data/debug.txt. Set to 0=off or 1=on:
Set DEBUG = 0
The settings can be retrieved as Preferences variables like %<pluginname>_<var>%, ex: %DEFAULTPLUGIN_SHORTDESCRIPTION% shows the description of the DefaultPlugin.
Listing Active Plugins
Plugin status variables let you list all active Plugins wherever needed. There are two list formats:
The %ACTIVATEDPLUGINS% variable lists activated Plugins by name. (This variable is displayed in TWikiPreferences for debugging use.)
The %PLUGINDESCRIPTIONS% variable displays a bullet list with a one-line description of each active Plugins. This variable is based on the %<plugin>_SHORTDESCRIPTION% Preferences variables of individual topics and is shown in TextFormattingRules.
DefaultPlugin: This plugin can be used to specify some simple custom rendering rules. It also renders deprecated *_text_* as bold italic text.
HeadlinesPlugin: Build news portals that show headline news based on RSS news feeds from news sites.
InterwikiPlugin: Link ExternalSite:Page text to external sites based on aliases defined in the InterWikis topic.
TablePlugin: Control attributes of tables and sorting of table columns
VisualConfirmPlugin: Plugin for visual confirmation of new user registration.
The TWiki Plugin API
The Application Programming Interface (API) for TWikiPlugins provides the specifications for hooking into the core TWiki code from your external Perl Plugin module. The Plugin API is new to the Production version of TWiki with the 01-Sep-2001 release.
Available Core Functions
The lib/TWiki/Func.pm implements ALL official Plugin functions. Plugins should ONLY use functions published in this module.
If you use functions not in Func.pm, you run the risk of creating security holes. Also, your Plugin will likely break and require updating when you upgrade to a new version of TWiki.
For best performance, enable only the functions you really need. NOTE: outsidePREHandler and insidePREHandler are particularly expensive.
Predefined Hooks
In addition to TWiki core functions, Plugins can use predefined hooks, or call backs, listed in the lib/TWiki/Plugins/EmptyPlugin.pm module.
All but the initPlugin are disabled. To enable a call back, remove DISABLE_ from the function name.
Plugin Version Detection
To eliminate the incompatibility problems bound to arise from active open Plugin development, a Plugin versioning system and an API GetVersion detection routine are provided for automatic compatibility checking.
All modules require a $VERSION='0.000' variable, beginning at 1.000.
The initPlugin handler should check all dependencies and return TRUE if the initialization is OK or FALSE if something went wrong.
The Plugin initialization code does not register a Plugin that returns FALSE (or that has no initPlugin handler).
With a reasonable knowledge of the Perl scripting language, you can create new Plugins or modify and extend existing ones. Basic plug-in architecture uses an Application Programming Interface (API), a set of software instructions that allow external code to interact with the main program. The TWiki Plugin API Plugins by providing a programming interface for TWiki.
The DefaultPlugin Alternative
DefaultPlugin can handle some outdated TWiki variables, found, for example, in sites recently updated from an old version. Settings are in DefaultPlugin topic. You can also add your own simple custom processing rules here, though in all but very simple cases, writing a new Plugin is preferable.
Anatomy of a Plugin
A basic TWiki Plugin consists of two elements:
a Perl module, ex: MyFirstPlugin.pm
a documentation topic, ex: MyFirstPlugin.txt
The Perl module can be a block of code that connects with TWiki alone, or it can include other elements, like other Perl modules (including other Plugins), graphics, TWiki templates, external applications (ex: a Java applet), or just about anything else it can call.
In particular, files that should be web-accessible (graphics, Java applets ...) are best placed as attachments of the MyFirstPlugin topic. Other needed Perl code is best placed in a lib/TWiki/Plugins/MyFirstPlugin/ directory.
The Plugin API handles the details of connecting your Perl module with main TWiki code. When you're familiar with the Plugin API, you're ready to develop Plugins.
Creating the Perl Module
Copy file lib/TWiki/Plugins/EmptyPlugin.pm to <name>Plugin.pm. EmptyPlugin.pm contains no executable code, so it does nothing, but it's ready to be used. Customize it. Refer to the Plugin API specs for more information.
Writing the Documentation Topic
The Plugin documentation topic contains usage instructions and version details. It serves the Plugin files as FileAttachments for downloading. (The doc topic is also included in the distribution package.) To create a documentation topic:
Copy the Plugin topic template from EmptyPlugin. To copy the text, go to the page and:
click Edit
select all in the Edit box & copy
Cancel the edit
paste & save as a text file or new topic on your site
Customize the template for your Plugin; you'll probably want to post a working version on your local TWiki site.
Save your topic as a text file, for use in packaging and publishing your Plugin.
OUTLINE: Doc Topic Contents
Check EmptyPlugin on TWiki.org for the latest Plugin doc topic template. Here's a quick overview of what's covered:
Syntax Rules: <Describe any special text formatting that will be rendered.>"
MyFirstPlugin Settings: <Description and settings for custom Plugin %VARIABLES%, and those required by TWiki.>"
Plugins Preferences <If user settings are needed, explain... Entering valuse works exactly like TWikiPreferences and WebPreferences: six (6) spaces and then:>"
Set <EXAMPLE = value added>
How-to Instructions: <Step-by-step set-up guide, user help, whatever it takes to install and run, goes here.>"
Test Example: <Include an example of the Plugin in action: if it works, the installation was a success!>"
Plugin Info: <Version, credits, history, requirements - entered in a form, displayed as a table. Both are automatically generated when you create or edit a page in the TWiki:Plugins web.>"
Packaging for Distribution
A minimum Plugin release consists of a Perl module with a WikiName that ends in Plugin, ex: MyFirstPlugin.pm, and a documentation page with the same name(MyFirstPlugin.txt).
Distribute the Plugin files in a directory structure that mirrors TWiki. If your Plugin uses additional files, include them ALL:
Create a zip archive with the Plugin name (MyFirstPlugin.zip) and add the entire directory structure from Step 1. The archive should look like this:
lib/TWiki/Plugins/MyFirstPlugin.pm
data/TWiki/MyFirstPlugin.txt
pub/TWiki/MyFirstPlugin/uparrow.gif
Publishing for Public Use
You can release your tested, packaged Plugin to the TWiki community through the TWiki:Plugins web. All Plugins submitted to TWiki.org are available for download and further development in TWiki:Plugins. Publish your Plugin in three steps:
Post the Plugin documentation topic in the TWiki:Plugins web:
create a new topic using the Plugin name, ex: MyFirstPlugin.txt
Attach the distribution zip file to the topic, ex: MyFirstPlugin.zip
Link from the doc page to a new, blank page named after the Plugin, and ending in Dev, ex: MyFirstPluginDev. This is the discussion page for future development. (User support for Plugins is handled in TWiki:Support.)
Browser-based rename, move, and delete for individual topics
Overview
Use browser controls while viewing a topic, to change its name, move it to another TWiki web, or delete it to a hidden Trash web.
How to Rename/Move/Delete a Topic
Click on [More] (bottom right of page) on the topic to be changed, then, in the new screen, on [Rename/move].
Select target web if other than the current web - chose Trash to delete a topic
Enter the new topic name - default is current name NOTE: You will be warned if there are locks or if there is a name conflict.
Select from the list of referring links any topics NOT to be updated with the new name (by default, all referring links will be updated).
Click on [Rename/Move]: the topic will be renamed and links to the topic updated as requested.
If any of the referring pages are locked then they will be listed.
You can correct these later by again pressing [Rename/Move].
Referring Topics
Referring topics are found using the the %SEARCH% variable, see the template searchrenameview.tmpl. First, matching topics in the current Web are listed - matches are to topic. Next, all Webs (including the current one) are listed that match web.topic. Because %SEARCH% is used, Webs marked in WebPreferences as NOSEARCHALL will not show up in the search for refernces to the topic being changed.
Changed references are kept are as short as possible, ex: topic is used in preference to web.topic.
About Deleting a Topic
Deleted topics are moved to the Trash web - NOT physically erased from the server. All webs share Trash - in case of a name conflict with a topic already Trash, the user is alerted and asked to choose a new name.
Clearing the Trash
The Trash web should be be cleared periodically, by archiving the contents if required (recommended), then deleting the files from the Trash directory.
%<nop>METASEARCH{type="topicmoved" web="%WEB%" topic="%TOPIC%"
title="This topic used to exist and was moved to: "}%
Effect of Access Settings
Permissions affect the rename function in various ways. To rename a topic, you need both change and rename permissions. To alter refer4ing topics, you need change permission. See TWikiAccessControl for information on setting up access permissions.
How Rename/move Works
%SEARCH%, with a special template, finds and displays all occurrences of the topic name in other topics, site-wide. These referring links are by default automatically changed to the new topic and/or web name. This includes relevant TWikiMetaData definitions.
User can omit one or more topics from the update list.
<pre> and <verbatim> are honoured - no changes are made to text within these areas.
The topic is moved (if locks allow).
References are changed (locks and permissions permitting).
Any referring topics that can't be changed due to locks are listed - user can change them at another time.
Known Limitations
Rename/move in is fairly complicated due to the dynamic generation of links. Ideally, it would be possible to run the required part of rendering in a way that would allow identification of the text to be changed. Unfortunately, these hooks don't exist in TWiki at present. Instead, %SEARCH% is used with a special template to show the text to be changed, and the selected topics are then altered. One drawback is that search can show matches that will not be updated because of case differences. Other mismatches to actual rendered output are also possible as the approaches are so different.
The following shows some limitations of square bracket processing.
[[Old Topic]] => [[NewTopic][Old Topic]]
[[old topic]] => [[NewTopic][old topic]]
[[old t opic]] => not changed
[[OldTopic]] => [[NewTopic]]
Adding, renaming and deleting webs are manual operations done directly on the server
Overview
Managing TWiki webs requires direct access to the installation files on the host server. There are currently no browser-based equivalents of the Rename/move/delete topic tools for working with webs.
Adding a New Web
Adding new webs is quick and easy - you can have a basic web up and running in a couple of minutes:
Create a new directory under twiki/data/, ex: twiki/data/Newweb
the name has to start with a capital and cannot be a WikiWord
NOTE: If you plan to rename the netfrag.org.Main web, remember that TWiki stores user and group topics in %MAINWEB%, default named Main. That means, every WikiName signature - Main.SomeUserName - points to it and would need updating (unless the variable, %MAINWEB%.SomeUserName, is used throughout).
Prepare your site: Search each web for links to the target web, searching topic text for Oldwebname., including the dot so you'll find references like Oldwebname.SomeTopic.
Make changes as required, to Newwebname.SomeTopic or better yet, to %MAINWEB%.SomeTopic.
Edit the TWikiPreferences topic: Rename or delete the web from the WIKIWEBLIST variable.
Edit the TWikiWebsTable topic: Rename or delete the web from the table.
Login to the netfrag.org server, via Telnet or FTP.
Go to twiki/data and rename or remove the web directory.
Go to twiki/templates and rename or remove the web directory if present.
Go to twiki/pub and rename or remove the web directory if present.