This page contains all documentation topics as one long, complete reference sheet.
configure
Related Topics: TWikiSite, TWikiHistory, TWikiPlannedFeatures, TWikiEnhancementRequests, UserDocumentationCategory, AdminDocumentationCategory
Server and client requirements
Low client and server base requirements are core features that keep TWiki widely deployable, particularly across a range of browser platforms and versions. Many Plugins and contrib modules
exist which enhance and expand TWiki's capabilities; they may have additional 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.
Resource | Required Server Environment * | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Perl | 5.6.1 or higher (5.8.4 or higher is recommended) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RCS | 5.7 or higher (including GNU diff ) Optional, TWiki includes a pure perl implementation of RCS that can be used instead (although it's slower) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNU diff |
GNU diff 2.7 or higher is required when not using the all-Perl RcsLite. Install on PATH if not included with RCS (check version with diff -v ) Must be the version used by RCS, to avoid problems with binary attachments - RCS may have hard-coded path to diff |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNU patch |
For upgrades only: GNU patch is required when using the TWiki:Codev.UpgradeTWiki![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GNU fgrep , egrep |
Modify command line parameters in configure if you use non-GNU grep programs | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Cron/scheduler | • Unix: cron • Windows: cron equivalents
Client RequirementsThe TWiki standard installation has relatively low browser requirements:
CSS and Javascript are used in most skins, although there is a low-fat skin (Classic skin) available that minimises these requirements. Some skins will require more recent releases of browsers. The default skin (Pattern) is tested on IE 6, Safari, and Mozilla 5.0 based browsers (such as Firefox).
You can easily select a balance of browser capability versus look and feel. Try the installed skins at TWikiSkinBrowser and more at TWiki:Plugins.SkinPackage
Important note about TWiki Plugins
Related Topics: AdminDocumentationCategory
TWiki Installation Guide
The following is installation instructions for the TWiki 4.3 production release on an Apache web server on Linux. Visit TWiki:TWiki.InstallingTWiki If you are upgrading from a previous version of TWiki, you probably want to read TWikiUpgradeGuide instead. Both this document and the TWikiUpgradeGuide are also available in the root of the distribution as HTML files.
Preparing to install TWiki
Before attempting to install TWiki, you are encouraged to review the TWiki:TWiki.AdminSkillsAssumptions
To help setup a correct Apache configuration, you are very much encouraged to use the automatic tool TWiki:TWiki.ApacheConfigGenerator
While this installation guide specifically describes installation on an Apache web server on Linux, TWiki should be fine with any web server and OS that meet the system requirements (see below). For additional notes on installing TWiki on other systems, see TWiki:TWiki.InstallingTWiki#OtherPlatforms If you are installing TWiki without Unix/Linux root (administrator) priviledges (for example, on a hosted domain), see "Notes on Installing TWiki on Non-Root Account" below for supplemental instructions to the basic steps presented below.
If you are upgrading from an earlier major version of TWiki such as Cairo (TWiki 3) you will need the information found in TWiki:TWiki.TWikiUpgradeGuide
Upgrading from a recent TWiki4 release is much simpler. Upgraders from earlier TWiki4 versions can follow the steps described in TWiki:TWiki.UpgradingTWiki04x00PatchReleases
One of the more difficult tasks is installation of addition CPAN libraries. See TWiki:TWiki.HowToInstallCpanModules
If you need help, ask a question in the TWiki:Support Basic Installation
You now have a basic, unauthenticated installation running. At this point you can just point your Web browser at
Important Server Security SettingsBefore you continue any further there are some basic and very important security settings you have to make sure are set correctly.
The TWiki:TWiki.ApacheConfigGenerator
Next Steps
Once you have TWiki installed and running, you might consider the following optional steps for setting up and customizing your TWiki site. Many of the references below refer to topics within your TWiki installation. For example, Enable Authentication of Users
This step provides for site access control and user activity tracking on your TWiki site. This is particularly important for sites that are publicly accessible on the web. This guide describes only the most common of several possible authentication setups for TWiki and is suitable for public web sites. For information about other setups, see TWikiUserAuthentication, and TWiki:TWiki.TWikiUserAuthenticationSupplement These are the steps for enabling "Template Login" which asks for a username and password in a web page, and processes them using the Apache 'htpasswd' password manager. Users can log in and log out.
You are strongly encouraged to read TWikiUserAuthentication, TWiki:TWiki.TWikiUserAuthenticationSupplement
Note! The other
<FilesMatch "(attach|edit|manage|rename|save|upload|mail|logon|rest|.*auth).*"> require valid-user </FilesMatch>
The TWiki:TWiki.ApacheConfigGenerator Define the Administrator User(s)Administrators have read and write access to any topic in TWiki, irrespectively of TWiki access controls. When you install TWiki one of the first things you will want to do is define yourself as an administrator. You become an administrator simply by adding yourself to the TWikiAdminGroup. It is the WikiName and not the login name you add to the group. Editing the Main.TWikiAdminGroup topic requires that you are an administrator. So to add the first administrator you need to login using the internal TWiki admin user login and the password you defined in configure.
Set TWiki PreferencesPreferences for customizing many aspects of TWiki are set simply by editing a special topic with TWiki.
Enable Email NotificationEach TWiki web has an automatic email notification service that sends you an email with links to all of the topics modified since the last alert. To enable this service:
Enable Signed Email Notification
TWiki administrative e-mails are an attractive target for SPAM generators and phishing attacks. One good way to protect against this possibility to enable S/MIME signatures on all administrative e-mails. To do this, you need an an X.509 certificate and private key for the the To enable TWiki to sign administrative e-mails:
All out-going administrative e-mails will now be signed.
Enable WebStatisticsYou can generate a listing manually, or on an automated schedule, of visits to individual pages, on a per web basis. For information on setting up this feature, see the TWikiSiteTools topic.
Automate removal of expired sessions and lease files
Per default TWiki cleans out expired session and lease files each time any topic is viewed. This however cost performance. It is an advantage to define a negative value in
Enable Localisation
TWiki now supports displaying of national (non-ascii) characters and presentation of basic interface elements in different languages. To enable these features, see the Tailor New Users Home TopicWhen a new users registers on your TWiki, a home topic is created for them based on the NewUserTemplate topic (and its UserForm). It contains additional resources you can use to:
If you choose to tailor anything you are strongly adviced to copy NewUserTemplate and UserForm to the Main web and tailor the Main web copies. TWiki will look for the NewUserTemplate in the Main web first and if it does not exist it uses the default from the TWiki web. By creating a Main.NewUserTemplate and its Main.UserForm you will not loose your tailorings next time you upgrade TWiki. If you added or removed fields from the user form you may also need to tailor TWikiRegistration.
Install PluginsTWiki:Plugins![]()
You activate installed plugin in the Plugins section of
Some plugins require that you define their settings in
Customize Your TWiki!The real power of TWiki lies in it's flexibility to be customized to meet your needs. You can with small means change the looks of the default skin (called PatternSkin) by reading the PatternSkinCustomization. At the official TWiki website you can find more resources. A good place to start for exploring what's possible is TWiki:TWiki.TWikiAdminCookBook which offers tips and tricks for customizing your TWiki site. Many of these are appropriate to implement immediately after installing TWiki and before adding content so now's a good time to look at these.
Customization of Special PagesSome pages are meant to be customized after choice of authentication. If you do not use the internal TWiki password manager the topics that contains the features for changing and resetting passwords and changing the email address should be changed to a note describing how to perform these tasks in your organization. The topics are:
WYSIWYG vs Raw EditFrom TWiki release 4.2.0 on the WYSIWYG editor has been replaced by a much better and more powerful editor and it was decided that WYSIWYG would be the default edit mode. An Edit Raw link is available for those that have a need or preference for this mode.
However you may prefer to have the same user interface as in TWiki 4.1 where Edit was the raw text editor and you had a WYSIWYG button. You can modify the templates that define the buttons by following the description on TWiki:Codev.TWikiRawEditDefault04x02
Copyright, License and Classification StatementsIn the bottom of each topic you will find a default copyright messages saying "Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors." It is a setting WEBCOPYRIGHT that defines this. This is often not adequate.
You change the copy right statement globally by taking these steps.
Troubleshooting
The first step is to re-run the Failing that, please check TWiki:TWiki.InstallingTWiki on TWiki.org, the supplemental documentation that help you install TWiki on different platforms, environments and web hosting sites. For example:
It is also advisable to review TWiki:Codev/KnownIssuesOfTWiki04x03
If you need help, ask a question in the TWiki:Support
Appendices
TWiki System RequirementsLow client and server base requirements are core features that keep TWiki widely deployable, particularly across a range of browser platforms and versions.
Server RequirementsTWiki 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.
The TWiki Plugin APIThe Application Programming Interface (API) for TWiki plugins provides the specifications for hooking into the core TWiki code from your external Perl plugin module.
Available Core Functions
The TWikiFuncDotPm module (
Predefined Hooks
In addition to TWiki core functions, plugins can use predefined hooks, or callbacks, as described in the
TWiki:Codev/StepByStepRenderingOrder Hints on Writing Fast Plugins
Version DetectionTo eliminate the incompatibility problems that are bound to arise from active open plugin development, a plugin versioning system is provided for automatic compatibility checking.
Security
Creating PluginsWith 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 provides the programming interface for TWiki.
Anatomy of a PluginA (very) basic TWiki plugin consists of two files:
The Perl module can be a block of code that talks to 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 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.
The TWiki:Plugins.BuildContrib
Creating the Perl Module
Copy file
If your plugin uses its own modules and objects, you must include the name of the plugin in the package name. For example, write use TWiki::Plugins::MyFirstPlugin::Attrs; $var = MyFirstPlugin::Attrs->new(); Writing the Documentation TopicThe 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:
OUTLINE: Doc Topic Contents Packaging for Distribution
The TWiki:Plugins.BuildContrib
If you don't want (or can't) use the BuildContrib, then a minimum plugin release consists of a Perl module with a WikiName that ends in
Measuring and Improving the Plugin Performance
A high quality plugin performs well. You can use the TWiki:Plugins.PluginBenchmarkAddOn See also Hints on Writing Fast Plugins. Publishing for Public Use
You can release your tested, packaged plugin to the TWiki community through the TWiki:Plugins Publish your plugin by following these steps:
Thank you very much for sharing your plugin with the TWiki community Recommended Storage of Plugin Specific DataPlugins sometimes need to store data. This can be plugin internal data such as cache data, or data generated for browser consumption such as images. Plugins should store data using TWikiFuncDotPm functions that support saving and loading of topics and attachments.
Plugin Internal Data
You can create a plugin "work area" using the
Web Accessible Data
Topic-specific data such as generated images can be stored in the topic's attachment area, which is web accessible. Use the Recommendation for file name:
Web specific data can be stored in the plugin's attachment area, which is web accessible. Use the Recommendation for file names in plugin attachment area:
Integrating with
Some TWiki extensions have setup requirements that are best integrated into |
BOOLEAN | A true/false value, represented as a checkbox |
COMMAND length | A shell command |
LANGUAGE | A language (selected from {LocalesDir} |
NUMBER | A number |
OCTAL | An octal number |
PASSWORD length | A password (input is hidden) |
PATH length | A file path |
PERL | A perl structure, consisting of arrays and hashes |
REGEX length | A perl regular expression |
SELECT choices | Pick one of a range of choices |
SELECTCLASS root | Select a perl package (class) |
STRING length | A string |
URL length | A url |
URLPATH length | A relative URL path |
All types can be followed by a comma-separated list of attributes.
EXPERT | means this an expert option |
M | means the setting is mandatory (may not be empty) |
H | means the option is not visible in configure |
See lib/TWiki.spec
for many more examples.
Config.spec
files are also used for other (non-plugin) extensions. in this case they are stored under the Contrib
directory instead of the Plugins
directory.
TWiki:TWiki/SpecifyingConfigurationItemsForExtensions has supplemental documentation on configure settings.
Each published plugin has a plugin development topic on TWiki.org. Plugin development topics are named after your plugin and end in Dev
, such as MyFirstPluginDev
. The plugin development topic is a great resource to discuss feature enhancements and to get feedback from the TWiki community.
The plugin interface (TWikiFuncDotPm functions and plugin handlers) evolve over time. TWiki introduces new API functions to address the needs of plugin authors. Plugins using unofficial TWiki internal functions may no longer work on a TWiki upgrade.
Organizations typically do not upgrade to the latest TWiki for many months. However, many administrators still would like to install the latest versions of a plugin on their older TWiki installation. This need is fulfilled if plugins are maintained in a compatible manner.
Tip: Plugins can be written to be compatible with older and newer TWiki releases. This can be done also for plugins using unofficial TWiki internal functions of an earlier release that no longer work on the latest TWiki codebase.
Here is an example; the TWiki:TWiki.TWikiPluginsSupplement#MaintainPlugins
has more details.
if( $TWiki::Plugins::VERSION >= 1.1 ) { @webs = TWiki::Func::getListOfWebs( 'user,public' ); } else { @webs = TWiki::Func::getPublicWebList( ); }
From time-to-time, the TWiki developers will add new functions to the interface (either to TWikiFuncDotPm, or new handlers). Sometimes these improvements mean that old functions have to be deprecated to keep the code manageable. When this happens, the deprecated functions will be supported in the interface for at least one more TWiki release, and probably longer, though this cannot be guaranteed.
When a plugin defines deprecated handlers, a warning will be shown in the list generated by %FAILEDPLUGINS%. Admins who see these warnings should check TWiki.org and if necessary, contact the plugin author, for an updated version of the plugin.
Updated plugins may still need to define deprecated handlers for compatibility with old TWiki versions. In this case, the plugin package that defines old handlers can suppress the warnings in %FAILEDPLUGINS%.
This is done by defining a map from the handler name to the TWiki::Plugins
version in which the handler was first deprecated. For example, if we need to define the endRenderingHandler
for compatibility with TWiki::Plugins
versions before 1.1, we would add this to the plugin:
package TWiki::Plugins::SinkPlugin; use vars qw( %TWikiCompatibility ); $TWikiCompatibility{endRenderingHandler} = 1.1;If the currently-running TWiki version is 1.1 or later, then the handler will not be called and the warning will not be issued. TWiki with versions of
TWiki::Plugins
before 1.1 will still call the handler as required.
Official list of stable TWiki functions for Plugin developers
This module defines official functions that Plugins can use to interact with the TWiki engine and content.
Refer to EmptyPlugin and lib/TWiki/Plugins/EmptyPlugin.pm for a template Plugin and documentation on how to write a Plugin.
Plugins should only use functions published in this module. If you use functions in other TWiki libraries you might create a security hole and you will probably need to change your Plugin when you upgrade TWiki.
Deprecated functions will still work in older code, though they should not be called in new Plugins and should be replaced in older Plugins as soon as possible.
The version of the TWiki::Func module is defined by the VERSION number of the
TWiki::Plugins module, currently 6.10. This can be shown
by the %PLUGINVERSION%
TWiki variable, and accessed in code using
$TWiki::Plugins::VERSION
. The 'Since' field in the function
documentation refers to $TWiki::Plugins::VERSION
.
Notes on use of $TWiki::Plugins::VERSION
(from 1.2 forwards):
1.
) is the same then any plugin coded to use any earlier revision of the 1.
API will still work. No function has been removed from the interface, nor has any API published in that version changed in such a way as to require plugins to be recoded.
TWiki::Plugins::VERSION
also applies to the plugin handlers. The handlers are documented in the EmptyPlugin, and that module indicates what version of TWiki::Plugins::VERSION
it relates to.
Get the skin path, set by the SKIN
and COVER
preferences variables or the skin
and cover
CGI parameters
Return: $skin
Comma-separated list of skins, e.g. 'gnu,tartan'
. Empty string if none.
Since: TWiki::Plugins::VERSION 1.000 (29 Jul 2001)
Get protocol, domain and optional port of script URL
Return: $host
URL host, e.g. "http://example.com:80"
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Compose fully qualified URL
$web
- Web name, e.g. 'Main'
$topic
- Topic name, e.g. 'WebNotify'
$script
- Script name, e.g. 'view'
...
- an arbitrary number of name=>value parameter pairs that will be url-encoded and added to the url. The special parameter name '#' is reserved for specifying an anchor. e.g. getScriptUrl('x','y','view','#'=>'XXX',a=>1,b=>2) will give .../view/x/y?a=1&b=2#XXX
Return: $url
URL, e.g. "http://example.com:80/cgi-bin/view.pl/Main/WebNotify"
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Compose fully qualified view URL
$web
- Web name, e.g. 'Main'
. The current web is taken if empty
$topic
- Topic name, e.g. 'WebNotify'
$url
URL, e.g. "http://example.com:80/cgi-bin/view.pl/Main/WebNotify"
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Get pub URL path
Return: $path
URL path of pub directory, e.g. "/pub"
Since: TWiki::Plugins::VERSION 1.000 (14 Jul 2001)
Get whatever is at the other end of a URL (using an HTTP GET request). Will
only work for encrypted protocols such as https
if the LWP
CPAN module is
installed.
Note that the $url
may have an optional user and password, as specified by
the relevant RFC. Any proxy set in configure
is honoured.
The $response
is an object that is known to implement the following subset of
the methods of LWP::Response
. It may in fact be an LWP::Response
object,
but it may also not be if LWP
is not available, so callers may only assume
the following subset of methods is available:
code() |
message() |
header($field) |
content() |
is_error() |
is_redirect() |
Note that if LWP is not available, this function:
require LWP
.
In the event of the server returning an error, then is_error()
will return
true, code()
will return a valid HTTP status code
as specified in RFC 2616 and RFC 2518, and message()
will return the
message that was received from
the server. In the event of a client-side error (e.g. an unparseable URL)
then is_error()
will return true and message()
will return an explanatory
message. code()
will return 400 (BAD REQUEST).
Note: Callers can easily check the availability of other HTTP::Response methods as follows:
my $response = TWiki::Func::getExternalResource($url); if (!$response->is_error() && $response->isa('HTTP::Response')) { ... other methods of HTTP::Response may be called } else { ... only the methods listed above may be called }
Since: TWiki::Plugins::VERSION 1.2
Get CGI query object. Important: Plugins cannot assume that scripts run under CGI, Plugins must always test if the CGI query object is set
Return: $query
CGI query object; or 0 if script is called as a shell script
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Session keys are stored and retrieved using setSessionValue
and
getSessionValue
.
Since: TWiki::Plugins::VERSION 1.2
Get a session value from the client session module
$key
- Session key
$value
Value associated with key; empty string if not set
Since: TWiki::Plugins::VERSION 1.000 (27 Feb 200)
Set a session value.
$key
- Session key
$value
- Value associated with key
Since: TWiki::Plugins::VERSION 1.000 (17 Aug 2001)
Clear a session value that was set using setSessionValue
.
$key
- name of value stored in session to be cleared. Note that you cannot clear AUTHUSER
.
Since: TWiki::Plugins::VERSION 1.1
Get a hash of context identifiers representing the currently active context.
The context is a set of identifiers that are set during specific phases of TWiki processing. For example, each of the standard scripts in the 'bin' directory each has a context identifier - the view script has 'view', the edit script has 'edit' etc. So you can easily tell what 'type' of script your Plugin is being called within. The core context identifiers are listed in the IfStatements topic. Please be careful not to overwrite any of these identifiers!
Context identifiers can be used to communicate between Plugins, and between Plugins and templates. For example, in FirstPlugin .pm, you might write:
sub initPlugin { TWiki::Func::getContext()->{'MyID'} = 1; ...This can be used in SecondPlugin.pm like this:
sub initPlugin { if( TWiki::Func::getContext()->{'MyID'} ) { ... } ...or in a template, like this:
%TMPL:DEF{"ON"}% Not off %TMPL:END% %TMPL:DEF{"OFF"}% Not on %TMPL:END% %TMPL:P{context="MyID" then="ON" else="OFF"}%or in a topic:
%IF{"context MyID" then="MyID is ON" else="MyID is OFF"}%Note: all plugins have an automatically generated context identifier if they are installed and initialised. For example, if the FirstPlugin is working, the context ID 'FirstPlugin' will be set.
Since: TWiki::Plugins::VERSION 1.1
$web
- new web
$topic
- new topic
$web.$topic
from now on. All the preferences will be reset to those of the new topic.
Note that if the new topic is not readable by the logged in user due to
access control considerations, there will not be an exception. It is the
duty of the caller to check access permissions before changing the topic.
It is the duty of the caller to restore the original context by calling
popTopicContext
.
Note that this call does not re-initialise plugins, so if you have used
global variables to remember the web and topic in initPlugin
, then those
values will be unchanged.
Since: TWiki::Plugins::VERSION 1.2
Returns the TWiki context to the state it was in before the
pushTopicContext
was called.
Since: TWiki::Plugins::VERSION 1.2
Get a preferences value from TWiki or from a Plugin
$key
- Preferences key
$web
- Name of web, optional. Current web if not specified; does not apply to settings of Plugin topics
$value
Preferences value; empty string if not set
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
* Set COLOR = red
"MYPLUGIN_COLOR"
for $key
my $color = TWiki::Func::getPreferencesValue( "MYPLUGIN_COLOR" );
* Set WEBBGCOLOR = #FFFFC0
my $webColor = TWiki::Func::getPreferencesValue( 'WEBBGCOLOR', 'Sandbox' );
NOTE: As of TWiki4.1, if $NO_PREFS_IN_TOPIC
is enabled in the plugin, then
preferences set in the plugin topic will be ignored.
Get a preferences value from your Plugin
$key
- Plugin Preferences key w/o PLUGINNAME_ prefix.
$value
Preferences value; empty string if not set
Note: This function will will only work when called from the Plugin.pm file itself. it will not work if called from a sub-package (e.g. TWiki::Plugins::MyPlugin::MyModule)
Since: TWiki::Plugins::VERSION 1.021 (27 Mar 2004)
NOTE: As of TWiki4.1, if $NO_PREFS_IN_TOPIC
is enabled in the plugin, then
preferences set in the plugin topic will be ignored.
Get a preferences flag from TWiki or from a Plugin
$key
- Preferences key
$web
- Name of web, optional. Current web if not specified; does not apply to settings of Plugin topics
$value
Preferences flag '1'
(if set), or "0"
(for preferences values "off"
, "no"
and "0"
)
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
* Set SHOWHELP = off
"MYPLUGIN_SHOWHELP"
for $key
my $showHelp = TWiki::Func::getPreferencesFlag( "MYPLUGIN_SHOWHELP" );
NOTE: As of TWiki4.1, if $NO_PREFS_IN_TOPIC
is enabled in the plugin, then
preferences set in the plugin topic will be ignored.
Get a preferences flag from your Plugin
$key
- Plugin Preferences key w/o PLUGINNAME_ prefix.
"off"
, "no"
and "0"
, or values not set at all. True otherwise.
Note: This function will will only work when called from the Plugin.pm file itself. it will not work if called from a sub-package (e.g. TWiki::Plugins::MyPlugin::MyModule)
Since: TWiki::Plugins::VERSION 1.021 (27 Mar 2004)
NOTE: As of TWiki4.1, if $NO_PREFS_IN_TOPIC
is enabled in the plugin, then
preferences set in the plugin topic will be ignored.
Set the preferences value so that future calls to getPreferencesValue will
return this value, and %$name%
will expand to the preference when used in
future variable expansions.
The preference only persists for the rest of this request. Finalised preferences cannot be redefined using this function.
Returns 1 if the preference was defined, and 0 otherwise.
Get toolname as defined in TWiki.cfg
Return: $name
Name of tool, e.g. 'TWiki'
Since: TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
Get name of Main web as defined in TWiki.cfg
Return: $name
Name, e.g. 'Main'
Since: TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
Get name of TWiki documentation web as defined in TWiki.cfg
Return: $name
Name, e.g. 'TWiki'
Since: TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
DefaultUserLogin
Return: $loginName
Default user name, e.g. 'guest'
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
$user
can be a login, wikiname or web.wikiname
If $user is undefined, it assumes the currently logged-in user.
Return: $cUID
, an internal unique and portable escaped identifier for
registered users. This may be autogenerated for an authenticated but
unregistered user.
Since: TWiki::Plugins::VERSION 1.2
return the WikiName of the specified user if $user is undefined Get Wiki name of logged in user
Return: $wikiName
Wiki Name, e.g. 'JohnDoe'
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
return the userWeb.WikiName of the specified user if $user is undefined Get Wiki name of logged in user
Return: $wikiName
Wiki Name, e.g. "Main.JohnDoe"
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
$id
- Wiki name, e.g. 'Main.JohnDoe'
or 'JohnDoe'
. Since TWiki 4.2.1, $id may also be a login name. This will normally be transparent, but should be borne in mind if you have login names that are also legal wiki names.
Return: $loginName
Login name of user, e.g. 'jdoe'
, or undef if not
matched.
Note that it is possible for several login names to map to the same wikiname. This function will only return the first login name that maps to the wikiname.
returns undef if the WikiName is not found.
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
$loginName
- Login name, e.g. 'jdoe'
. Since TWiki 4.2.1 this may also be a wiki name. This will normally be transparent, but may be relevant if you have login names that are also valid wiki names.
$dontAddWeb
- Do not add web prefix if "1"
$wikiName
Wiki name of user, e.g. 'Main.JohnDoe'
or 'JohnDoe'
userToWikiName will always return a name. If the user does not exist in the mapping, the $loginName parameter is returned. (backward compatibility)
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
$email
- email address to look up
$dontAddWeb
- Do not add web prefix if "1"
Since: TWiki::Plugins::VERSION 1.2
$user
- wikiname of user to look up
Since TWiki 4.2.1, $user may also be a login name, or the name of a group.
Since: TWiki::Plugins::VERSION 1.2
Test if logged in user is a guest (TWikiGuest )
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Find out if the user is an admin or not. If the user is not given, the currently logged-in user is assumed.
Since: TWiki::Plugins::VERSION 1.2
Find out if $id is in the named group. e.g.
if( TWiki::Func::isGroupMember( "HesperionXXGroup", "jordi" )) { ... }If
$user
is undef
, it defaults to the currently logged-in user.
Since: TWiki::Plugins::VERSION 1.2
Use it as follows:
my $iterator = TWiki::Func::eachUser(); while ($it->hasNext()) { my $user = $it->next(); # $user is a wikiname }
WARNING on large sites, this could be a long list!
Since: TWiki::Plugins::VERSION 1.2
$id
- WikiName or login name of the user. If $id
is undef
, defaults to the currently logged-in user.
Since: TWiki::Plugins::VERSION 1.2
Use it as follows:
my $iterator = TWiki::Func::eachGroup(); while ($it->hasNext()) { my $group = $it->next(); # $group is a group name e.g. TWikiAdminGroup }
WARNING on large sites, this could be a long list!
Since: TWiki::Plugins::VERSION 1.2
Checks if $group
is the name of a group known to TWiki.
Use it as follows:
my $iterator = TWiki::Func::eachGroupMember('RadioheadGroup'); while ($it->hasNext()) { my $user = $it->next(); # $user is a wiki name e.g. 'TomYorke', 'PhilSelway' }
WARNING on large sites, this could be a long list!
Since: TWiki::Plugins::VERSION 1.2
Check access permission for a topic based on the TWiki.TWikiAccessControl rules
$type
- Access type, required, e.g. 'VIEW'
, 'CHANGE'
.
$id
- WikiName of remote user, required, e.g. "PeterThoeny"
. From TWiki 4.2.1, $id may also be a login name. If $id
is '', 0 or undef
then access is always permitted.
$text
- Topic text, optional. If 'perl false' (undef, 0 or ''), topic $web.$topic
is consulted. $text
may optionally contain embedded %META:PREFERENCE
tags. Provide this parameter if: $meta
parameter.
$topic
- Topic name, required, e.g. 'PrivateStuff'
$web
- Web name, required, e.g. 'Sandbox'
$meta
- Meta-data object, as returned by readTopic
. Optional. If undef
, but $text
is defined, then access controls will be parsed from $text
. If defined, then metadata embedded in $text
will be ignored. This parameter is always ignored if $text
is undefined. Settings in $meta
override Set
settings in $text.
Note the weird parameter order is due to compatibility constraints with earlier TWiki releases.
Tip if you want, you can use this method to check your own access control types. For example, if you:
ThatWeb.ThisTopic
, then a call to checkAccessPermissions('SPIN', 'IncyWincy', undef, 'ThisTopic', 'ThatWeb', undef)
will return true
.
Since: TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
$filter
- spec of web types to recover
$filter
may also contain the word 'public' which will further filter
out webs that have NOSEARCHALL set on them.
'allowed' filters out webs the current user can't read.
For example, the deprecated getPublicWebList function can be duplicated as follows:
my @webs = TWiki::Func::getListOfWebs( "user,public" );
Since: TWiki::Plugins::VERSION 1.1
Test if web exists
$web
- Web name, required, e.g. 'Sandbox'
Since: TWiki::Plugins::VERSION 1.000 (14 Jul 2001)
$newWeb
is the name of the new web.
$baseWeb
is the name of an existing web (a template web). If the base web is a system web, all topics in it will be copied into the new web. If it is a normal web, only topics starting with 'Web' will be copied. If no base web is specified, an empty web (with no topics) will be created. If it is specified but does not exist, an error will be thrown.
$opts
is a ref to a hash that contains settings to be modified in
use Error qw( :try ); use TWiki::AccessControlException; try { TWiki::Func::createWeb( "Newweb" ); } catch Error::Simple with { my $e = shift; # see documentation on Error::Simple } catch TWiki::AccessControlException with { my $e = shift; # see documentation on TWiki::AccessControlException } otherwise { ... };
Since: TWiki::Plugins::VERSION 1.1
Move (rename) a web.
use Error qw( :try ); use TWiki::AccessControlException; try { TWiki::Func::moveWeb( "Oldweb", "Newweb" ); } catch Error::Simple with { my $e = shift; # see documentation on Error::Simple } catch TWiki::AccessControlException with { my $e = shift; # see documentation on TWiki::AccessControlException } otherwise { ... };
To delete a web, move it to a subweb of Trash
TWiki::Func::moveWeb( "Deadweb", "Trash.Deadweb" );
Since: TWiki::Plugins::VERSION 1.1
Get an iterator over the list of all the changes in the given web between
$time
and now. $time is a time in seconds since 1st Jan 1970, and is not
guaranteed to return any changes that occurred before (now -
{Store}{RememberChangesFor}). {Store}{RememberChangesFor}) is a
setting in configure
. Changes are returned in most-recent-first
order.
Use it as follows:
my $iterator = TWiki::Func::eachChangeSince( $web, time() - 7 * 24 * 60 * 60); # the last 7 days while ($iterator->hasNext()) { my $change = $iterator->next(); # $change is a perl hash that contains the following fields: # topic => topic name # user => wikiname - wikiname of user who made the change # time => time of the change # revision => revision number *after* the change # more => more info about the change (e.g. 'minor') }
Get list of all topics in a web
$web
- Web name, required, e.g. 'Sandbox'
@topics
Topic list, e.g. ( 'WebChanges', 'WebHome', 'WebIndex', 'WebNotify' )
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Test if topic exists
$web
- Web name, optional, e.g. 'Main'
.
$topic
- Topic name, required, e.g. 'TokyoOffice'
, or "Main.TokyoOffice"
$web and $topic are parsed as described in the documentation for normalizeWebTopicName
.
Specifically, the Main is used if $web is not specified and $topic has no web specifier.
To get an expected behaviour it is recommened to specify the current web for $web; don't leave it empty.
Since: TWiki::Plugins::VERSION 1.000 (14 Jul 2001)
Check if a lease has been taken by some other user.
$web
Web name, e.g. "Main"
, or empty
$topic
Topic name, e.g. "MyTopic"
, or "Main.MyTopic"
( $oopsUrl, $loginName, $unlockTime )
- The $oopsUrl
for calling redirectCgiQuery(), user's $loginName
, and estimated $unlockTime
in minutes, or ( '', '', 0 ) if no lease exists. $script
The script to invoke when continuing with the edit
Since: TWiki::Plugins::VERSION 1.010 (31 Dec 2002)
$web
Web name, e.g. "Main"
, or empty
$topic
Topic name, e.g. "MyTopic"
, or "Main.MyTopic"
$lock
1 to lease the topic, 0 to clear an existing lease
Takes out a "lease" on the topic. The lease doesn't prevent
anyone from editing and changing the topic, but it does redirect them
to a warning screen, so this provides some protection. The edit
script
always takes out a lease.
It is impossible to fully lock a topic. Concurrent changes will be merged.
Since: TWiki::Plugins::VERSION 1.010 (31 Dec 2002)
$web
- web for the topic
$topic
- topic name
$meta
- reference to TWiki::Meta object
$text
- text of the topic (without embedded meta-data!!!
\%options
- ref to hash of save options \%options
may include: dontlog | don't log this change in twiki log |
forcenewrevision | force the save to increment the revision counter |
minor | True if this is a minor change, and is not to be notified |
Since: TWiki::Plugins::VERSION 1.000 (29 Jul 2001)
For example,
my( $meta, $text ) = TWiki::Func::readTopic( $web, $topic ) $text =~ s/APPLE/ORANGE/g; TWiki::Func::saveTopic( $web, $topic, $meta, $text, { forcenewrevision => 1 } );
Note: Plugins handlers ( e.g. beforeSaveHandler
) will be called as
appropriate.
Save topic text, typically obtained by readTopicText(). Topic data usually includes meta data; the file attachment meta data is replaced by the meta data from the topic file if it exists.
$web
- Web name, e.g. 'Main'
, or empty
$topic
- Topic name, e.g. 'MyTopic'
, or "Main.MyTopic"
$text
- Topic text to save, assumed to include meta data
$ignorePermissions
- Set to "1"
if checkAccessPermission() is already performed and OK
$dontNotify
- Set to "1"
if not to notify users of the change
$oopsUrl
Empty string if OK; the $oopsUrl
for calling redirectCgiQuery() in case of error
This method is a lot less efficient and much more dangerous than saveTopic
.
Since: TWiki::Plugins::VERSION 1.010 (31 Dec 2002)
my $text = TWiki::Func::readTopicText( $web, $topic ); # check for oops URL in case of error: if( $text =~ /^http.*?\/oops/ ) { TWiki::Func::redirectCgiQuery( $query, $text ); return; } # do topic text manipulation like: $text =~ s/old/new/g; # do meta data manipulation like: $text =~ s/(META\:FIELD.*?name\=\"TopicClassification\".*?value\=\")[^\"]*/$1BugResolved/; $oopsUrl = TWiki::Func::saveTopicText( $web, $topic, $text ); # save topic text
$web
source web - required
$topic
source topic - required
$newWeb
dest web
$newTopic
dest topic
The destination topic must not already exist.
Rename a topic to the $TWiki::cfg{TrashWebName} to delete it.
Since: TWiki::Plugins::VERSION 1.1
use Error qw( :try ); try { moveTopic( "Work", "TokyoOffice", "Trash", "ClosedOffice" ); } catch Error::Simple with { my $e = shift; # see documentation on Error::Simple } catch TWiki::AccessControlException with { my $e = shift; # see documentation on TWiki::AccessControlException } otherwise { ... };
Get revision info of a topic or attachment
$web
- Web name, optional, e.g. 'Main'
$topic
- Topic name, required, e.g. 'TokyoOffice'
$rev
- revsion number, or tag name (can be in the format 1.2, or just the minor number)
$attachment
-attachment filename
( $date, $user, $rev, $comment )
List with: ( last update date, login name of last user, minor part of top revision number ), e.g. ( 1234561, 'phoeny', "5" )
$date | in epochSec |
$user | Wiki name of the author (not login name) |
$rev | actual rev number |
$comment | WHAT COMMENT? |
NOTE: if you are trying to get revision info for a topic, use
$meta->getRevisionInfo
instead if you can - it is significantly
more efficient.
Since: TWiki::Plugins::VERSION 1.000 (29 Jul 2001)
Get the revision number of a topic at a specific time.
$web
- web for topic
$topic
- topic
$time
- time (in epoch secs) for the rev
Since: TWiki::Plugins::VERSION 1.1
Read topic text and meta data, regardless of access permissions.
$web
- Web name, required, e.g. 'Main'
$topic
- Topic name, required, e.g. 'TokyoOffice'
$rev
- revision to read (default latest)
( $meta, $text )
Meta data object and topic text
$meta
is a perl 'object' of class TWiki::Meta
. This class is
fully documented in the source code documentation shipped with the
release, or can be inspected in the lib/TWiki/Meta.pm
file.
This method ignores topic access permissions. You should be careful to use
checkAccessPermissions
to ensure the current user has read access to the
topic.
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Read topic text, including meta data
$web
- Web name, e.g. 'Main'
, or empty
$topic
- Topic name, e.g. 'MyTopic'
, or "Main.MyTopic"
$rev
- Topic revision to read, optional. Specify the minor part of the revision, e.g. "5"
, not "1.5"
; the top revision is returned if omitted or empty.
$ignorePermissions
- Set to "1"
if checkAccessPermission() is already performed and OK; an oops URL is returned if user has no permission
$text
Topic text with embedded meta data; an oops URL for calling redirectCgiQuery() is returned in case of an error
This method is more efficient than readTopic
, but returns meta-data embedded in the text. Plugins authors must be very careful to avoid damaging meta-data. You are recommended to use readTopic instead, which is a lot safer.
Since: TWiki::Plugins::VERSION 1.010 (31 Dec 2002)
Test if attachment exists
$web
- Web name, optional, e.g. Main
.
$topic
- Topic name, required, e.g. TokyoOffice
, or Main.TokyoOffice
$attachment
- attachment name, e.g.=logo.gif=
normalizeWebTopicName
.
Since: TWiki::Plugins::VERSION 1.1
$web
- web for topic
$topic
- topic
$name
- attachment name
$rev
- revision to read (default latest)
readTopic
. If the attachment does not exist, or cannot be read, undef
will be returned. If the revision is not specified, the latest version will
be returned.
View permission on the topic is required for the read to be successful. Access control violations are flagged by a TWiki::AccessControlException. Permissions are checked for the current user.
my( $meta, $text ) = TWiki::Func::readTopic( $web, $topic ); my @attachments = $meta->find( 'FILEATTACHMENT' ); foreach my $a ( @attachments ) { try { my $data = TWiki::Func::readAttachment( $web, $topic, $a->{name} ); ... } catch TWiki::AccessControlException with { }; }
Since: TWiki::Plugins::VERSION 1.1
$web
- web for topic
$topic
- topic to atach to
$attachment
- name of the attachment
$opts
- Ref to hash of options
$opts
may include:
dontlog |
don't log this change in twiki log |
comment |
comment for save |
hide |
if the attachment is to be hidden in normal topic view |
stream |
Stream of file to upload |
file |
Name of a file to use for the attachment data. ignored if stream is set. Local file on the server. |
filepath |
Client path to file |
filesize |
Size of uploaded data |
filedate |
Date |
Save an attachment to the store for a topic. On success, returns undef. If there is an error, an exception will be thrown.
try { TWiki::Func::saveAttachment( $web, $topic, 'image.gif', { file => 'image.gif', comment => 'Picture of Health', hide => 1 } ); } catch Error::Simple with { # see documentation on Error } otherwise { ... };
Since: TWiki::Plugins::VERSION 1.1
$web
source web - required
$topic
source topic - required
$attachment
source attachment - required
$newWeb
dest web
$newTopic
dest topic
$newAttachment
dest attachment
The destination topic must already exist, but the destination attachment must not exist.
Rename an attachment to $TWiki::cfg{TrashWebName}.TrashAttament to delete it.
use Error qw( :try ); try { # move attachment between topics moveAttachment( "Countries", "Germany", "AlsaceLorraine.dat", "Countries", "France" ); # Note destination attachment name is defaulted to the same as source } catch TWiki::AccessControlException with { my $e = shift; # see documentation on TWiki::AccessControlException } catch Error::Simple with { my $e = shift; # see documentation on Error::Simple };
Since: TWiki::Plugins::VERSION 1.1
Read a template or skin. Embedded template directives get expanded
$name
- Template name, e.g. 'view'
$skin
- Comma-separated list of skin names, optional, e.g. 'print'
$text
Template text
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
$name
- template file name
$skin
- comma-separated list of skins to use (default: current skin)
$web
- the web to look in for topics that contain templates (default: current web)
Since: TWiki::Plugins::VERSION 1.1
Reads a template and extracts template definitions, adding them to the list of loaded templates, overwriting any previous definition.
How TWiki searches for templates is described in TWikiTemplates.
If template text is found, extracts include statements and fully expands them.
Do a , only expanding the template (not expanding any variables other than %TMPL)
$def
- template name
Since: TWiki::Plugins::VERSION 1.1
A template is defined using a %TMPL:DEF% statement in a template file. See the documentation on TWiki templates for more information.
Prints a basic content-type HTML header for text/html to standard out
$query
- CGI query object. If not given, the default CGI query will be used (optional, in most cases you should not pass this parameter)
$contentLength
- Length of content (optional, in most cases you should not pass this parameter)
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Redirect to URL
$query
- CGI query object. Ignored, only there for compatibility. The session CGI query object is used instead.
$url
- URL to redirect to
$passthru
- enable passthrough.
Return: none
Print output to STDOUT that will cause a 302 redirect to a new URL. Nothing more should be printed to STDOUT after this method has been called.
The $passthru
parameter allows you to pass the parameters that were passed
to the current query on to the target URL, as long as it is another URL on the
same TWiki installation. If $passthru
is set to a true value, then TWiki
will save the current URL parameters, and then try to restore them on the
other side of the redirect. Parameters are stored on the server in a cache
file.
Note that if $passthru
is set, then any parameters in $url
will be lost
when the old parameters are restored. if you want to change any parameter
values, you will need to do that in the current CGI query before redirecting
e.g.
my $query = TWiki::Func::getCgiQuery(); $query->param(-name => 'text', -value => 'Different text'); TWiki::Func::redirectCgiQuery( undef, TWiki::Func::getScriptUrl($web, $topic, 'edit'), 1);
$passthru
does nothing if $url
does not point to a script in the current
TWiki installation.
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Adds $header
to the HTML header (the tag).
This is useful for Plugins that want to include some javascript custom css.
$id
- Unique ID to prevent the same HTML from being duplicated. Plugins should use a prefix to prevent name clashes (e.g EDITTABLEPLUGIN_JSCALENDAR)
$header
- the HTML to be added to the section. The HTML must be valid in a HEAD tag - no checks are performed.
All TWiki variables present in $header
will be expanded before being inserted into the section.
Note that this is not the same as the HTTP header, which is modified through the Plugins modifyHeaderHandler
.
Since: TWiki::Plugins::VERSION 1.1
example:
TWiki::Func::addToHEAD('PATTERN_STYLE','<link id="twikiLayoutCss" rel="stylesheet" type="text/css" href="%PUBURL%/TWiki/PatternSkin/layout.css" media="all" />')
Expand all common %VARIABLES%
$text
- Text with variables to expand, e.g. 'Current user is %WIKIUSER%'
$topic
- Current topic name, e.g. 'WebNotify'
$web
- Web name, optional, e.g. 'Main'
. The current web is taken if missing
$meta
- topic meta-data to use while expanding (Since TWiki::Plugins::VERSION 1.2)
$text
Expanded text, e.g. 'Current user is TWikiGuest'
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
See also: expandVariablesOnTopicCreation
Render text from TWiki markup into XHTML as defined in TWiki.TextFormattingRules
$text
- Text to render, e.g. '*bold* text and =fixed font='
$web
- Web name, optional, e.g. 'Main'
. The current web is taken if missing
$text
XHTML text, e.g. '<b>bold</b> and <code>fixed font</code>'
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Render topic name and link label into an XHTML link. Normally you do not need to call this funtion, it is called internally by renderText()
$pre
- Text occuring before the TWiki link syntax, optional
$web
- Web name, required, e.g. 'Main'
$topic
- Topic name to link to, required, e.g. 'WebNotify'
$label
- Link label, required. Usually the same as $topic
, e.g. 'notify'
$anchor
- Anchor, optional, e.g. '#Jump'
$createLink
- Set to '1'
to add question linked mark after topic name if topic does not exist;'0'
to suppress link for non-existing topics
$text
XHTML anchor, e.g. '<a href='/cgi-bin/view/Main/WebNotify#Jump'>notify</a>'
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
$text
- text of the mail, including MIME headers
$retries
- number of times to retry the send (default 1)
To: liz@windsor.gov.uk From: serf@hovel.net CC: george@whitehouse.gov Subject: Revolution Dear Liz, Please abolish the monarchy (with King George's permission, of course) Thanks, A. PeasantLeave a blank line between the last header field and the message body.
Since: TWiki::Plugins::VERSION 1.1
$wikiname
- wiki name of the user
Since: TWiki::Plugins::VERSION 1.1
Deprecated in favour of wikinameToEmails, because this function only returns a single email address, where a user may in fact have several.
Since TWiki 4.2.1, $wikiName may also be a login name.
Expand the limited set of variables that are always expanded during topic creation
$text
- the text to process
Since: TWiki::Plugins::VERSION 1.1
Expands only the variables expected in templates that must be statically expanded in new content.
The expanded variables are:
%DATE%
Signature-format date
%SERVERTIME%
See TWikiVariables
%GMTIME%
See TWikiVariables
%USERNAME%
Base login name
%WIKINAME%
Wiki name
%WIKIUSERNAME%
Wiki name with prepended web
%URLPARAM{...}%
- Parameters to the current CGI query
%NOP%
No-op
See also: expandVariables
Special handlers can be defined to make functions in plugins behave as if they were built-in to TWiki.
Should only be called from initPlugin.
Register a function to handle a simple variable. Handles both %VAR% and %VAR{...}%. Registered variables are treated the same as TWiki internal variables, and are expanded at the same time. This is a lot more efficient than using the commonTagsHandler
.
$var
- The name of the variable, i.e. the 'MYVAR' part of %MYVAR%. The variable name must match /^[A-Z][A-Z0-9_]*$/ or it won't work.
\&fn
- Reference to the handler function.
$syntax
can be 'classic' (the default) or 'context-free'. 'classic' syntax is appropriate where you want the variable to support classic TWiki syntax i.e. to accept the standard %MYVAR{ "unnamed" param1="value1" param2="value2" }%
syntax, as well as an unquoted default parameter, such as %MYVAR{unquoted parameter}%
. If your variable will only use named parameters, you can use 'context-free' syntax, which supports a more relaxed syntax. For example, %MYVAR{param1=value1, value 2, param3="value 3", param4='value 5"}%
Since: TWiki::Plugins::VERSION 1.1
The variable handler function must be of the form:
sub handler(\%session, \%params, $topic, $web)where:
\%session
- a reference to the TWiki session object (may be ignored)
\%params
- a reference to a TWiki::Attrs object containing parameters. This can be used as a simple hash that maps parameter names to values, with _DEFAULT being the name for the default parameter.
$topic
- name of the topic in the query
$web
- name of the web in the query
sub initPlugin{ TWiki::Func::registerTagHandler('EXEC', \&boo); } sub boo { my( $session, $params, $topic, $web ) = @_; my $cmd = $params->{_DEFAULT}; return "NO COMMAND SPECIFIED" unless $cmd; my $result = `$cmd 2>&1`; return $params->{silent} ? '' : $result; } }would let you do this:
%EXEC{"ps -Af" silent="on"}%
Registered tags differ from tags implemented using the old TWiki approach (text substitution in commonTagsHandler
) in the following ways:
commonTagsHandler
is only called later, when all system tags have already been expanded (though they are expanded again after commonTagsHandler
returns).
FRED
defines both %FRED{...}%
and also %FRED%
.
return '%SERVERTIME%';
). It won't work.
Should only be called from initPlugin.
Adds a function to the dispatch table of the REST interface
$alias
- The name .
\&fn
- Reference to the function.
Since: TWiki::Plugins::VERSION 1.1
The handler function must be of the form:
sub handler(\%session)where:
\%session
- a reference to the TWiki session object (may be ignored)
From the REST interface, the name of the plugin must be used as the subject of the invokation.
Example
The EmptyPlugin has the following call in the initPlugin handler:
TWiki::Func::registerRESTHandler('example', \&restExample);
This adds the restExample
function to the REST dispatch table
for the EmptyPlugin under the 'example' alias, and allows it
to be invoked using the URL
http://server:port/bin/rest/EmptyPlugin/example
note that the URL
http://server:port/bin/rest/EmptyPlugin/restExample
(ie, with the name of the function instead of the alias) will not work.
TWiki has an informal standard set of tokens used in format
parameters that are used to block evaluation of paramater strings.
For example, if you were to write
%MYTAG{format="%WURBLE%"}%
then %WURBLE would be expanded before %MYTAG is evaluated. To avoid this TWiki uses escapes in the format string. For example:
%MYTAG{format="$percntWURBLE$percnt"}%
This lets you enter arbitrary strings into parameters without worrying that TWiki will expand them before your plugin gets a chance to deal with them properly. Once you have processed your tag, you will want to expand these tokens to their proper value. That's what this function does.
Escape: | Expands To: |
---|---|
$n or $n() |
New line. Use $n() if followed by alphanumeric character, e.g. write Foo$n()Bar instead of Foo$nBar |
$nop or $nop() |
Is a "no operation". |
$quot |
Double quote (" ) |
$percnt |
Percent sign (% ) |
$dollar |
Dollar sign ($ ) |
Note thath $quot, $percnt and $dollar all work *even if they are followed by alphanumeric characters*. You have been warned!
Since: TWiki::Plugins::VERSION 1.2
Search for a string in the content of a web. The search is over all content, including meta-data. Meta-data matches will be returned as formatted lines within the topic content (meta-data matches are returned as lines of the format %META:\w+{.*}%)
$searchString
- the search string, in egrep format
$web
- The web to search in
\@topics
- reference to a list of topics to search
\%option
- reference to an options hash
\%options
hash may contain the following options: type
- if regex
will perform a egrep-syntax RE search (default '')
casesensitive
- false to ignore case (defaulkt true)
files_without_match
- true to return files only (default false). If files_without_match
is specified, it will return on the first match in each topic (i.e. it will return only one match per topic, and will not return matching lines).
The return value is a reference to a hash which maps each matching topic name to a list of the lines in that topic that matched the search, as would be returned by 'grep'.
To iterate over the returned topics use:
my $result = TWiki::Func::searchInWebContent( "Slimy Toad", $web, \@topics, { casesensitive => 0, files_without_match => 0 } ); foreach my $topic (keys %$result ) { foreach my $matching_line ( @{$result->{$topic}} ) { ...etc
Since: TWiki::Plugins::VERSION 1.1
Gets a private directory for Plugin use. The Plugin is entirely responsible for managing this directory; TWiki will not read from it, or write to it.
The directory is guaranteed to exist, and to be writable by the webserver user. By default it will not be web accessible.
The directory and it's contents are permanent, so Plugins must be careful to keep their areas tidy.
Since: TWiki::Plugins::VERSION 1.1 (Dec 2005)
Read file, low level. Used for Plugin workarea.
$filename
- Full path name of file
$text
Content of file, empty if not found
NOTE: Use this function only for the Plugin workarea, not for topics and attachments. Use the appropriate functions to manipulate topics and attachments.
Since: TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
Save file, low level. Used for Plugin workarea.
$filename
- Full path name of file
$text
- Text to save
NOTE: Use this function only for the Plugin workarea, not for topics and attachments. Use the appropriate functions to manipulate topics and attachments.
Since: TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
Retrieves a TWiki predefined regular expression or character class.
$name
- Name of the expression to retrieve. See notes below
Since: TWiki::Plugins::VERSION 1.020 (9 Feb 2004)
Note: TWiki internally precompiles several regular expressions to represent various string entities in an I18N-compatible manner. Plugins authors are encouraged to use these in matching where appropriate. The following are guaranteed to be present. Others may exist, but their use is unsupported and they may be removed in future TWiki versions.
In the table below, the expression marked type 'String' are intended for use within character classes (i.e. for use within square brackets inside a regular expression), for example:
my $upper = TWiki::Func::getRegularExpression('upperAlpha'); my $alpha = TWiki::Func::getRegularExpression('mixedAlpha'); my $capitalized = qr/[$upper][$alpha]+/;Those expressions marked type 'RE' are precompiled regular expressions that can be used outside square brackets. For example:
my $webRE = TWiki::Func::getRegularExpression('webNameRegex'); my $isWebName = ( $s =~ m/$webRE/ );
Name | Matches | Type |
---|---|---|
upperAlpha | Upper case characters | String |
upperAlphaNum | Upper case characters and digits | String |
lowerAlpha | Lower case characters | String |
lowerAlphaNum | Lower case characters and digits | String |
numeric | Digits | String |
mixedAlpha | Alphabetic characters | String |
mixedAlphaNum | Alphanumeric characters | String |
wikiWordRegex | WikiWords | RE |
webNameRegex | User web names | RE |
anchorRegex | #AnchorNames | RE |
abbrevRegex | Abbreviations e.g. GOV, IRS | RE |
emailAddrRegex | email@address.com | RE |
tagNameRegex | Standard variable names e.g. %THIS_BIT% (THIS_BIT only) | RE |
Parse a web and topic name, supplying defaults as appropriate.
$web
- Web name, identifying variable, or empty string
$topic
- Topic name, may be a web.topic string, required.
Since: TWiki::Plugins::VERSION 1.1
Input | Return |
---|---|
( 'Web', 'Topic' ) | ( 'Web', 'Topic' ) |
( '', 'Topic' ) | ( 'Main', 'Topic' ) |
( '', '' ) | ( 'Main', 'WebHome' ) |
( '', 'Web/Topic' ) | ( 'Web', 'Topic' ) |
( '', 'Web/Subweb/Topic' ) | ( 'Web/Subweb', 'Topic' ) |
( '', 'Web.Topic' ) | ( 'Web', 'Topic' ) |
( '', 'Web.Subweb.Topic' ) | ( 'Web/Subweb', 'Topic' ) |
( 'Web1', 'Web2.Topic' ) | ( 'Web2', 'Topic' ) |
Note that hierarchical web names (SubWeb ) are only available if hierarchical webs are enabled in configure
.
The symbols %USERSWEB%, %SYSTEMWEB% and %DOCWEB% can be used in the input to represent the web names set in $cfg{UsersWebName} and $cfg{SystemWebName}. For example:
Input | Return |
---|---|
( '%USERSWEB%', 'Topic' ) | ( 'Main', 'Topic' ) |
( '%SYSTEMWEB%', 'Topic' ) | ( 'TWiki', 'Topic' ) |
( '', '%DOCWEB%.Topic' ) | ( 'TWiki', 'Topic' ) |
Given a file namer, sanitise it according to the rules for transforming attachment names. Returns the sanitised name together with the basename before sanitisation.
Sanitation includes filtering illegal characters and mapping client file names to legal server names.
Since: TWiki::Plugins::VERSION 1.2
Spaces out a wiki word by inserting a string (default: one space) between each word component. With parameter $sep any string may be used as separator between the word components; if $sep is undefined it defaults to a space.
Since: TWiki::Plugins::VERSION 1.2
Log Warning that may require admin intervention to data/warning.txt
$text
- Text to write; timestamp gets added
Since: TWiki::Plugins::VERSION 1.020 (16 Feb 2004)
Log debug message to data/debug.txt
$text
- Text to write; timestamp gets added
Since: TWiki::Plugins::VERSION 1.020 (16 Feb 2004)
Format the time in seconds into the desired time string
$time
- Time in epoc seconds
$format
- Format type, optional. Default e.g. '31 Dec 2002 - 19:30'
. Can be '$iso'
(e.g. '2002-12-31T19:30Z'
), '$rcs'
(e.g. '2001/12/31 23:59:59'
, '$http'
for HTTP header format (e.g. 'Thu, 23 Jul 1998 07:21:56 GMT'
), or any string with tokens '$seconds, $minutes, $hours, $day, $wday, $month, $mo, $year, $ye, $tz'
for seconds, minutes, hours, day of month, day of week, 3 letter month, 2 digit month, 4 digit year, 2 digit year, timezone string, respectively
$timezone
- either not defined (uses the displaytime setting), 'gmtime', or 'servertime'
$text
Formatted time string
Note: | if you used the removed formatGmTime, add a third parameter 'gmtime' |
Since: TWiki::Plugins::VERSION 1.020 (26 Feb 2004)
Returns 1 if $value
is true, and 0 otherwise. "true" means set to
something with a Perl true value, with the special cases that "off",
"false" and "no" (case insensitive) are forced to false. Leading and
trailing spaces in $value
are ignored.
If the value is undef, then $default
is returned. If $default
is
not specified it is taken as 0.
Since: $TWiki::Plugins::VERSION 1.2
Check for a valid WikiWord or WikiName
$text
- Word to test
Since: TWiki::Plugins::VERSION 1.100 (Dec 2005)
Extract all parameters from a variable string and returns a hash of parameters
$attr
- Attribute string
%params
Hash containing all parameters. The nameless parameter is stored in key _DEFAULT
Since: TWiki::Plugins::VERSION 1.025 (26 Aug 2004)
%TEST{ 'nameless' name1="val1" name2="val2" }%
{...}
to get: 'nameless' name1="val1" name2="val2"
%params
hash contains now: _DEFAULT => 'nameless'
name1 => "val1"
name2 => "val2"
Extract a named or unnamed value from a variable parameter string - Note: | Function TWiki::Func::extractParameters is more efficient for extracting several parameters
$attr
- Attribute string
$name
- Name, optional
$value
Extracted value
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
%TEST{ 'nameless' name1="val1" name2="val2" }%
{...}
to get: 'nameless' name1="val1" name2="val2"
my $noname = TWiki::Func::extractNameValuePair( $text );
my $val1 = TWiki::Func::extractNameValuePair( $text, "name1" );
my $val2 = TWiki::Func::extractNameValuePair( $text, "name2" );
From time-to-time, the TWiki developers will add new functions to the interface (either to TWikiFuncDotPm, or new handlers). Sometimes these improvements mean that old functions have to be deprecated to keep the code manageable. When this happens, the deprecated functions will be supported in the interface for at least one more TWiki release, and probably longer, though this cannot be guaranteed.
Updated plugins may still need to define deprecated handlers for compatibility with old TWiki versions. In this case, the plugin package that defines old handlers can suppress the warnings in %FAILEDPLUGINS%.
This is done by defining a map from the handler name to the TWiki::Plugins
version in which the handler was first deprecated. For example, if we need to define the endRenderingHandler
for compatibility with TWiki::Plugins
versions before 1.1, we would add this to the plugin:
package TWiki::Plugins::SinkPlugin; use vars qw( %TWikiCompatibility ); $TWikiCompatibility{endRenderingHandler} = 1.1;If the currently-running TWiki version is 1.1 or later, then the handler will not be called and the warning will not be issued. TWiki with versions of
TWiki::Plugins
before 1.1 will still call the handler as required.
The following functions are retained for compatibility only. You should stop using them as soon as possible.
Get script URL path
DEPRECATED since 1.1 - use getScriptUrl
instead.
Return: $path
URL path of TWiki scripts, e.g. "/cgi-bin"
WARNING: you are strongly recommended not to use this function, as the {ScriptUrlPaths} URL rewriting rules will not apply to urls generated using it.
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Compose fully qualified 'oops' dialog URL
$web
- Web name, e.g. 'Main'
. The current web is taken if empty
$topic
- Topic name, e.g. 'WebNotify'
$template
- Oops template name, e.g. 'oopsmistake'
. The 'oops' is optional; 'mistake' will translate to 'oopsmistake'.
$param1
... $param4
- Parameter values for %PARAM1% ... %PARAMn% variables in template, optional
$url
URL, e.g. "http://example.com:80/cgi-bin/oops.pl/ Main/WebNotify?template=oopslocked¶m1=joe"
DEPRECATED since 1.1, the recommended approach is to throw an oops exception.
use Error qw( :try ); throw TWiki::OopsException( 'toestuckerror', web => $web, topic => $topic, params => [ 'I got my toe stuck' ]);(this example will use the
oopstoestuckerror
template.)
If this is not possible (e.g. in a REST handler that does not trap the exception)
then you can use getScriptUrl
instead:
my $url = TWiki::Func::getScriptUrl($web, $topic, 'oops', template => 'oopstoestuckerror', param1 => 'I got my toe stuck'); TWiki::Func::redirectCgiQuery( undef, $url ); return 0;
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
Test if any access restrictions are set for this web, ignoring settings on individual pages
$web
- Web name, required, e.g. 'Sandbox'
Since: TWiki::Plugins::VERSION 1.000 (27 Feb 2001)
DEPRECATED since 1.2 - use getPreferencesValue
instead to determine
what permissions are set on the web, for example:
foreach my $type qw( ALLOW DENY ) { foreach my $action qw( CHANGE VIEW ) { my $pref = $type . 'WEB' . $action; my $val = getPreferencesValue( $pref, $web ) || ''; if( $val =~ /\S/ ) { print "$pref is set to $val on $web\n"; } } }
DEPRECATED since 1.1 - use getListOfWebs
instead.
Get list of all public webs, e.g. all webs that do not have the NOSEARCHALL
flag set in the WebPreferences
Return: @webs
List of all public webs, e.g. ( 'Main', 'Know', 'TWiki' )
Since: TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
DEPRECATED since 1.1 - use formatTime
instead.
Format the time to GM time
$time
- Time in epoc seconds
$format
- Format type, optional. Default e.g. '31 Dec 2002 - 19:30'
, can be 'iso'
(e.g. '2002-12-31T19:30Z'
), 'rcs'
(e.g. '2001/12/31 23:59:59'
, 'http'
for HTTP header format (e.g. 'Thu, 23 Jul 1998 07:21:56 GMT'
)
$text
Formatted time string
Since: TWiki::Plugins::VERSION 1.000 (7 Dec 2002)
DEPRECATED since 1.1 - use the "Webs, Topics and Attachments" functions to manipulate topics instead
Get data directory (topic file root)
Return: $dir
Data directory, e.g. '/twiki/data'
This function violates store encapsulation and is therefore deprecated.
Since: TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
DEPRECATED since 1.1 - use the "Webs, Topics and Attachments" functions to manipulateattachments instead
Get pub directory (file attachment root). Attachments are in $dir/Web/TopicName
Return: $dir
Pub directory, e.g. '/htdocs/twiki/pub'
This function violates store encapsulation and is therefore deprecated.
Use readAttachment
and saveAttachment
instead.
Since: TWiki::Plugins::VERSION 1.000 (07 Dec 2002)
DEPRECATED since 1.1 - use TWiki:Plugins.BuildContrib and define DEPENDENCIES that can be statically
evaluated at install time instead. It is a lot more efficient.
Since: TWiki::Plugins::VERSION 1.025 (01 Aug 2004)
Programs on the TWiki server performing actions such as rendering, saving and renaming topics.
The TWiki scripts are located in the twiki/bin
and twiki/tools
directories. This topic describes the interfaces to some of those scripts. All scripts in the twiki/bin
directory can be called from the CGI (Common Gateway Interface) environment or from the command line. The scripts in the
twiki/tools
directory can only be called from the command line.
twiki/bin
directory.
guest
).
twiki/bin
directory on the perl path to run the scripts from the command line. To avoid issues with file permissions, run the scripts as the web server user such as nobody
or www
.
Parameters are passed on the command line using '-name' - for example,
$ cd /usr/local/twiki/bin $ save -topic MyWeb.MyTopic -user admin -action save -text "New text of the topic"All parameters require a value, even if that is the empty string.
Parameter | Description | Default |
---|---|---|
topic |
If this is set to a URL, TWiki will immediately redirect to that URL. Otherwise it overrides the URL and is taken as the topic name (you can pass Web.TopicName) | |
user |
Command-line only; set the name of the user performing the action. Note: this usage is inherently insecure, as it bypasses webserver login constraints. For this reason only authorised users should be allowed to execute scripts from the command line. | |
skin |
Overrides the default skin path (see TWikiSkins) | |
cover |
Specifies temporary skin path to prepend to the skin path for this script only (see TWikiSkins) |
attach
upload
. This script is part of the transactions sequence executed when a file is uploaded from the browser. it just generates the "new attachment" page for a topic.
Parameter | Description | Default |
---|---|---|
filename |
Name of existing attachment (if provided, this is a "manage attachment" action) | none (in which case this is a "new attachment" action) |
changes
The changes
script can receive one parameter:
Parameter | Description | Default |
---|---|---|
minor |
If 0, show only major changes. If 1, show all the changes (both minor and major) | 0 |
The main difference between invoking this script and using WebChanges is that WebChanges is based on a %SEARCH%
, while this script reads the changes
file in each web, making it much faster.
Note: The result from changes
script and the topic WebChanges can be different, if the changes
file is deleted from a web. In particular, in new installations the changes
script will return no results while the WebChanges topic will.
configure
configure
is the browser script used for inspection and configuration of the TWiki configuration. None of the parameters to this script are useable for any purpose except configure
. See configure
edit
edit
script understands the following parameters, typically supplied by HTML input fields:
Parameter | Description | Default |
---|---|---|
action |
Optional. Use the editaction template instead of the standard edit. If action=text, then hide the form. If action=form hide the normal text area and only edit the form. You can change the Edit/Edit Raw buttons to always append the action parameter in skins like Pattern and Classic by setting the topic or preference variable EDITACTION to the value text or form . To edit the topic once the EDITACTION is defined as form simply remove the action=form from the browser URL of the edit script and reload the edit window |
|
onlynewtopic |
If set, error if topic already exists | |
onlywikiname |
If set, error if topic name is not a WikiWord | |
templatetopic |
The name of the template topic, copied to get the initial content (new topic only) | |
text |
Initial text for the topic | |
topicparent |
The parent topic | |
formtemplate |
Name of the form to instantiate in the topic. Overrides the form set in the templatetopic if defined. (will remove the form is set to 'none') |
|
contenttype |
Optional parameter that defines the application type to write into the CGI header. Defaults to text/html . May be used to invoke alternative client applications |
|
anyname |
Any parameter can passed to the new topic; if the template topic contains %URLPARAM{"anyname"}% , it will be replaced by its value |
|
breaklock |
If set, any lease conflicts will be ignored, and the edit will proceed even if someone is already editing the topic. | |
redirectto |
If the user continues from edit to save, and if the save (or cancels the edit) process is successful, save will redirect to this topic or URL. The parameter value can be a TopicName , a Web.TopicName , or a URL.Note: Redirect to a URL only works if it is enabled in configure (Miscellaneous {AllowRedirectUrl} ). |
Form field values are passed in parameters named 'field' - for example, if I have a field Status
the parameter name is Status
.
X
characters in the topic name will be converted on save to a number such that the resulting topic name is unique in the target web.
Note: Most skins support the definition of EDIT_SKIN
, which is used as the value of the cover
parameter in edit
URLs. This allows you to override the default edit skin on a web, topic or user basis.
login
Parameter | Description | Default |
---|---|---|
origurl |
URL that was being accessed when an access violation occurred. the login process will redirect to this URL if it is successful | none |
username |
username of user logging in | none |
password |
password of user logging in | none |
logon
manage
Parameter | Description | Default |
---|---|---|
action |
One of createweb , renameweb , deleteUserAccount , editSettings or saveSettings |
none |
Note: The manage
script can only be called via http POST method for createweb
renameweb
, and deleteUserAccount
.
action=createweb
Parameter | Description | Default |
---|---|---|
newweb |
Name of the new web | '' |
baseweb |
Name of the web to copy to create the new web | '' |
webbgcolor |
value for WEBBGCOLOR | '' |
sitemapwhat |
Value for SITEMAPWHAT | '' |
sitemapuseto |
Value for SITEMAPUSETO | '' |
nosearchall |
Value for NOSEARCHALL | '' |
action=renameweb
Parameter | Description | Default |
---|---|---|
newsubweb |
Name of the web after move | '' |
newparentweb |
New parent web name | '' |
confirm |
If defined, requires a second level of confirmation. Supported values are "getlock", "continue", and "cancel" | '' |
action=editSettings
action=saveSettings
Parameter | Description | Default |
---|---|---|
text |
Text of the topic | '' |
originalrev |
Revision that the edit started on | Most recent revision |
redirectto |
If the savesettings process is successful, save will redirect to this topic or URL. The parameter value can be a TopicName , a Web.TopicName , or a URL.Note: Redirect to a URL only works if it is enabled in configure (Miscellaneous {AllowRedirectUrl} ). |
action=bulkRegister
Parameter | Description | Default |
---|---|---|
OverwriteHomeTopics |
Whether to overwrite existing home topics or not | false |
EmailUsersWithDetails |
Whether to mail registered users or not | false |
LogTopic |
Topic to save the log in | Same as topic name, with 'Result' appended. |
action=changePassword
Parameter | Description | Default |
---|---|---|
username |
god alone knows | none |
oldpassword |
current password | none |
password |
new password | none |
passwordA |
new password confirmation | none |
email |
new email address | none |
password, =passwordA
and email
are optional. If neither or password
and passwordA
is set, then the user password is left unchanged. If email
is unset, their email is left unchanged.
action=resetPassword
Parameter | Description | Default |
---|---|---|
LoginName |
list of usernames to reset | none - error if not set |
Introduction |
message to be sent alongside the reset, most often used to announce to the user that they have been given an account. | '' |
This is used by BulkResetPassword and ResetPassword. Only administrators can provide a list of LoginNames, non-admins can only provide a single LoginName.
BulkRegistration provides the means to create multiple accounts but it does not announce those accounts to the users who own them. BulkResetPassword is used to assign the passwords, the Introduction is used to explain why they are receiving the mail.
action=deleteUserAccount
Parameter | Description | Default |
---|---|---|
password |
Users' password | none |
oops
oops
templates are used with the oops
script to generate system messages. This is done to make internationalisation or other local customisations simple.
The oops
script supports the following parameters:
Parameter | Description | Default |
---|---|---|
template |
Name of the template file to display | |
def |
Optional, can be set to the name of a single definition within template . This definition will be instantiated in the template wherever %INSTANTIATE% is seen. This lets you use a single template file for many messages. For an example, see oopsmanagebad.tmpl . |
|
paramN |
Where N is an integer from 1 upwards. These values will be substituted into template for %PARAM1% etc. |
preview
save
script.
rdiff
Parameter | Description | Default |
---|---|---|
rev1 | the higher revision | |
rev2 | the lower revision | |
render | the rendering style {sequential, sidebyside, raw, debug} | DIFFRENDERSTYLE, sequential |
type | {history, diff, last} history diff, version to version, last version to previous | diff |
context | number of lines of context |
register
Parameter | Description | Default |
---|---|---|
action |
register or verify or resetPassword or approve |
Note: The register
script can only be called via http POST method, not GET. Make sure to specify the "post"
method if you call the register
script via a form action.
rename
Parameter | Description | Default |
---|---|---|
skin |
skin(s) to use | |
newweb |
new web name | |
newtopic |
new topic name | |
breaklock |
||
attachment |
||
confirm |
if defined, requires a second level of confirmation | |
currentwebonly |
if defined, searches current web only for links to this topic | |
nonwikiword |
if defined, a non-wikiword is acceptable for the new topic name | |
redirectto |
If the rename process is successful, rename will redirect to this topic or URL. The parameter value can be a TopicName , a Web.TopicName , or a URL.Note: Redirect to a URL only works if it is enabled in configure (Miscellaneous {AllowRedirectUrl} ). |
Note: The rename
script can only be called via http POST method, not GET. Make sure you specify method="post"
if you call the rename
script via a form action.
rest
TWiki::Func::registerRESTHandler
method. The rest
script will print the result directly to the browser unless the endPoint
parameter is specified, in which case it will output a redirect to the given topic.
The rest
script supports the following parameters:
username |
If TemplateLogin , or a similar login manager not embedded in the web server, is used, then you need to pass a username and password to the server. The username and password parameters are used for this purpose. |
password |
See username |
topic |
If defined as the full name (including web) of a topic, then when the script starts up plugins will be passed this as the "current" topic. If not defined, then Main.WebHome will be passed to plugins. |
endPoint |
Where to redirect the response once the request is served, in the form "Web.Topic" |
The function is free to use any other query parameters for its own purposes.
Note: The
rest
script should always require authentication in any TWiki that has logins. Otherwise there is a risk of opening up major security holes. So make sure you add it to the list of authenticated scripts if you are using ApacheLogin
.
The rest
script assumes that it will be called with URL in the form:
http://my.host/bin/rest/<subject>/<verb>
where <subject>
must be the WikiWord name of one of the installed TWikiPlugins, and the <verb>
is the alias for the function registered using the TWiki::Func::registerRESTHandler
method. The <subject>
and <verb>
are then used to lookup and call the registered function.
<subject>
and <verb>
are checked for illegal characters exactly in the same way as the web and topic names.
As an example, the EmptyPlugin has registered a function to be used with the rest
script under the subject EmptyPlugin and the verb example. Click below to see the rest
script in action (run as TWikiGuest).
Note that for Plugins to register REST handlers, they must be enabled in configure
.
save
save
script performs a range of save-related functions, as selected by the action
parameter.
Parameter | Description | Default |
---|---|---|
action_save=1 |
default; save, return to view, dontnotify is off |
|
action_quietsave=1 |
save, and return to view, dontnotify is on |
|
action_checkpoint |
save and redirect to the edit script, dontnotify is on |
|
action_cancel |
exit without save, return to view | |
action_preview |
preview edited text | |
action_addform |
Redirect to the "change form" page. | |
action_replaceform... |
Redirect to the "change form" page. | |
action_delRev |
Administrators only delete the most recent revision of the topic - all other parameters are ignored. You have to be an administrator to use this, and not all store implementations will support it. | |
action_repRev |
Administrators only replace the text of the most recent revision of the topic with the text in the text parameter. text must included embedded meta-data tags. All other parameters are ignored. You have to be an administrator to use this, and not all store implementations will support it. |
|
onlynewtopic |
If set, error if topic already exists | |
onlywikiname |
If set, error if topic name is not a WikiWord | |
dontnotify |
if defined, suppress change notification | |
templatetopic |
Name of a topic to use as a template for the text and form (new topic only) | |
text |
New text of the topic | |
forcenewrevision |
if set, forces a revision even if TWiki thinks one isn't needed | |
topicparent |
If 'none' remove any current topic parent. If the name of a topic, set the topic parent to this. | |
formtemplate |
if defined, use the named template for the form (will remove the form is set to 'none') | |
editaction |
When action is checkpoint , add form or replace form... , this is used as the action parameter to the edit script that is redirected to after the save is complete. |
|
originalrev |
Revision on which the edit started. | |
edit |
The script to use to edit the topic when action is checkpoint |
edit |
editparams |
The parameter string to use to edit the topic | |
redirectto |
The save process will redirect to this topic or URL if it is successful. (Typically this would be the URL that was being viewed when edit was invoked). The parameter value can be a TopicName , a Web.TopicName , or a URL.Note: Redirect to a URL only works if it is enabled in configure (Miscellaneous {AllowRedirectUrl} ). |
view topic being edited |
Any errors will cause a redirect to an oops
page.
The parameters are interpreted in according to the following rules.
X
characters in the topic name will be converted to a number such that the resulting topic name is unique in the target web.
save
, checkpoint
, quietsave
, or preview
: text
parameter, if it is defined, templatetopic
, if it is defined, (new topic only)
formtemplate
, if defined templatetopic
, if defined, (new topic only)
templatetopic
, if defined, (new topic only)
Merging is only enabled if the topic text comes from text
and originalrev
is > 0 and is not the same as the revision number of the most recent revision. If merging is enabled both the topic and the meta-data are merged.
Form field values are passed in parameters named 'field' - for example, if I have a field Status
the parameter name is Status
.
Note: The
save
script can only be called via http POST method, not GET. Make sure to specify the "post"
method if you call the save
script via a form action. Example:
<form name="new" action="%SCRIPTURLPATH{save}%/Sandbox/" method="post"> ... </form>It is not possible to call
save
from an <a href="">
link.
search
%SEARCH%
functionality driven by the following CGI parameters:
Parameter: | Description:![]() |
Default: |
---|---|---|
search="text" |
(Alternative to above) | N/A |
bookview="on" |
BookView search, e.g. show complete topic text | Show topic summary |
casesensitive="on" |
Case sensitive search | Ignore case |
web="Name" web="Main, Know" web="all" |
Comma-separated list of webs to search. See TWikiVariables#VarSEARCH for more details. | Current web |
header="..." format="..." |
Custom format results: see FormattedSearch for usage, variables & examples | Results in table |
type="keyword" type="literal" type="regex" |
Do a keyword search like soap "web service" -shampoo ; a literal search like web service ; or RegularExpression search like soap;web service;!shampoo |
%SEARCHVAR- DEFAULTTYPE% preferences setting (literal) |
nototal="on" |
Do not show number of topics found | Show number |
excludetopic="Web*" excludetopic="WebHome, WebChanges" |
Exclude topics from search: A topic, a topic with asterisk wildcards, or a list of topics separated by comma. | None |
expandvariables="on" |
Expand variables before applying a FormattedSearch on a search hit. Useful to show the expanded text, e.g. to show the result of a SpreadSheetPlugin %CALC{}% instead of the formula |
Raw text |
nofinalnewline="on" |
If on , the search variable does not end in a line by itself. Any text continuing immediately after the search tag on the same line will be rendered as part of the table generated by the search, if appropriate. |
off |
topic="WebPreferences" topic="*Bug" |
Limit search to topics: A topic, a topic with asterisk wildcards, or a list of topics separated by comma. | All topics in a web |
limit="all" limit="16" |
Limit the number of results returned. This is done after sorting if order is specified |
All results |
date="..." |
limits the results to those pages with latest edit time in the given time interval. | All results |
separator=", " |
Line separator between hits | Newline "$n" |
multiple="on" |
Multiple hits per topic. Each hit can be formatted. The last token is used in case of a regular expression ";" and search | Only one hit per topic |
reverse="on" |
Reverse the direction of the search | Ascending search |
"text" |
Search term. Is a keyword search, literal search or regular expression search, depending on the type parameter. SearchHelp has more |
required |
scope="topic" scope="text" scope="all" |
Search topic name (title); the text (body) of topic; or all (both) | "text" |
nonoise="on" |
Shorthand for nosummary="on" nosearch="on" nototal="on" zeroresults="off" noheader="on" noempty="on" |
Off |
nosummary="on" |
Show topic title only | Show topic summary |
order="topic" order="created" order="modified" order="editby" order= |
Sort the results of search by the topic names, topic creation time, last modified time, last editor, or named field of TWikiForms. The sorting is done web by web; in case you want to sort across webs, create a formatted table and sort it with TablePlugin's initsort | Sort by topic name |
zeroresults="off" |
Suppress all output if there are no hits | zeroresults="on" , displays: "Number of topics: 0" |
noempty="on" |
Suppress results for webs that have no hits. | Show webs with no hits |
noheader="on" |
Suppress search header Topics: Changed: By: |
Show search header |
nosearch="on" |
Suppress search string | Show search string |
statistics
Parameter | Description | Default |
---|---|---|
webs |
comma-separated list of webs to run stats on | all accessible webs |
logdate |
YYYYMM to generate statistics for | current month |
for example:
see TWikiSiteTools#WebStatistics_site_statistics for updating statistics using cron.
upload
multipart/form-data
format.
Parameter | Description | Default |
---|---|---|
hidefile |
if defined, will not show file in attachment table | |
filepath |
local (client) path name of the file being uploaded. This is used to look up the data for the file in the HTTP query. | |
filename |
deprecated, do not use | |
filecomment |
Comment to associate with file in attachment table | |
createlink |
if defined, will create a link to file at end of topic | |
changeproperties |
if defined, this is a property change operation only - no file will be uploaded. | null |
You can use a tool like curl
to upload files from the command line using this script.
Note: The
upload
script can only be called via http POST method, not GET.
view
Parameter | Description | Default |
---|---|---|
raw=on |
Shows the text of the topic in a scrollable textarea | |
raw=debug |
As raw=on , but also shows the metadata (forms etc) associated with the topic. |
|
raw=text |
Shows only the source of the topic, as plain text (Content-type: text/plain). Only shows the body text, not the form or other meta-data. | |
raw=all |
Shows only the source of the topic, as plain text (Content-type: text/plain), with embedded meta-data. This may be useful if you want to extract the source of a topic to a local file on disc. | |
section |
Allows to view only a part of the topic delimited by a named section (see VarSTARTSECTION). If the given section is not present, no topic content is displayed. | |
contenttype |
Allows you to specify a different Content-Type: (e.g. contenttype=text/plain ) |
|
rev |
Revision to view (e.g. rev=45 ) |
|
template |
Allows you to specify a different skin template, overriding the 'view' template the view script would normally use. The default template is view . For example, you could specify https://wiki.planta.de/twiki/bin/view/TWiki_/TWikiScripts?template=edit![]() |
|
topic |
redirects (at the beging of the cgi script running) to show the spcified Web.Topic, or, redirects to a URL, if allowed by {AllowRedirectUrl} and {PermittedRedirectHostUrls} |
For historical reasons, the view script has a special interpretation of the
text
skin. In earlier TWiki versions the skin=text
parameter was used like this:
http://.../view/MyWeb/MyTopic?skin=text&contenttype=text/plain&raw=on
which shows the topic as plain text; useful for those who want to download plain text for the topic.
Using skin=text
this way is DEPRECATED, use raw=text
instead.
viewfile
pub
) directory using a URL. However if it contains sensitive information, you will want to protect attachments using TWikiAccessControls. In this case, you can use the viewfile
script to give access to attachments while still checking access controls.
Parameter | Description | Default |
---|---|---|
filename |
name of attachment | |
rev |
Revision to view |
Instead of using the filename
parameter, you can append the attachment name
to the end of the URL path (after the topic) e.g. https://wiki.planta.de/twiki/bin/viewfile/Webname/TopicName/Attachment.gif
twiki/tools
directory.
geturl.pl
wget
and curl
commands. geturl.pl <host> <path> [<port> [<header>]]
geturl.pl some.domain /some/dir/file.html 80
http://some.domain:80/some/dir/file.html
rewriteshebang.pl
#!/usr/bin/perl
shebang lines specific to your local Perl installation. It will rewrite the first line of all your TWiki cgi scripts so they use a different shebang line. Use it if your perl is in a non-standard location, or you want to use a different interpreter (such as 'speedy').
tick_twiki.pl
It is intended to be run as a cron job or a scheduled task once a week. Example crontab entry:
0 0 * * 0 cd /usr/twiki/bin && perl ../tools/tick_twiki.pl
Note: The script has to be run by a user who can write files created by the webserver user.
Related Topics: AdminDocumentationCategory, DeveloperDocumentationCategory
Utilities for searching, navigation, and monitoring site activity
TWiki Site Tools include utilities for navigating, searching and keeping up with site activity. Preferences can be configured by web or site-wide. You are currently in the TWiki web. In particular, TWiki provides two highly configurable, automated site monitoring tools, WebNotify, to e-mail alerts when topics are edited, and WebStatistics, to generate detailed activity reports.
Each TWiki web has an automatic e-mail alert service that sends a list of recent changes on a preset schedule, like once a day. Users can subscribe and unsubscribe using WebNotify in each web. The Perl script mailnotify
is called by a background process at regular intervals. The script sends an automated e-mail to subscribed users if topics were changed in a web since the script was last run.
%NOTIFYTOPIC%
Each TWiki web has an automatic e-mail notification service that sends you an e-mail with links to all of the topics modified since the last alert.
Users subscribe to email notifications using their WikiName or an alternative email address, and can specify the webs/topics they wish to track, Whole groups of users can also be subscribed for notification.
The general format of a subscription is:
three spaces *
subscriber [ :
topics ]
Where subscriber can be a WikiName, an E-mail address, or a group name. If subscriber contains any characters that are not legal in an email address, then it must be enclosed in 'single' or "double" quotes.
topics is an optional space-separated list of topics:
*
in a topic name, where it is treated as a wildcard character*
will match zero or more other characters - so, for example, Fred*
will match all topic names starting with Fred
, *Fred
will match all topic names ending with Fred
, and *
will match all topic names.
Examples: Subscribe Daisy to all changes to topics in this web.
* daisy.cutter@flowers.comSubscribe Daisy to all changes to topics that start with
Web
.
* daisy.cutter@flowers.com : Web*Subscribe Daisy to changes to topics starting with
Petal
, and their immediate children, WeedKillers and children to a depth of 3, and all topics that match start with Pretty
and end with Flowers
e.g. PrettyPinkFlowers
* DaisyCutter: Petal* (1) WeedKillers (3) Pretty*FlowersSubscribe StarTrekFan to changes to all topics that start with
Star
except those that end in Wars
, sInTheirEyes
or shipTroopers
.
* StarTrekFan: Star* - *Wars - *sInTheirEyes - *shipTroopersSubscribe Daisy to the full content of NewsLetter whenever it has changed
* daisy@flowers.com: NewsLetter?Subscribe buttercup to NewsLetter and its immediate children, even if it hasn't changed.
* buttercup@flowers.com: NewsLetter! (1)Subscribe GardenGroup (which includes Petunia) to all changed topics under AllnewsLetters to a depth of 3. Then unsubscribe Petunia from the ManureNewsLetter, which she would normally get as a member of GardenGroup :
* GardenGroup: AllNewsLetters? (3) * petunia@flowers.com: - ManureNewsLetterSubscribe
IT:admins
(a non-TWiki group defined by an alternate user mapping) to all changes to Web* topics.
* 'IT:admins' : Web*
A user may be listed many times in the WebNotify topic. Where a user has several lines in WebNotify that all match the same topic, they will only be notified about changes that topic once (though they will still receive individual mails for news topics).
If a group is listed for notification, the group will be recursively expanded to the e-mail addresses of all members.
__ Warning: Because an email address is not linked to a user name, there is no way for TWiki to check access controls for subscribers identified by email addresses. A subscriber identified by an email address alone will only be sent change notifications if the topic they are subscribed to is readable by guest users. You can limit what email addresses can be used in %NOTIFYTOPIC%, or even block use of emails altogther, using the
{MailerContrib}{EmailFilterIn} setting in =configure
.
Tip: List names in alphabetical order to make it easier to find the names.
Note for System Administrators: Notification is supported by an add-on to the TWiki kernel called the MailerContrib. See the MailerContrib topic for details of how to set up this service.
Note: If you prefer a news feed, point your reader to WebRss (for RSS 1.0 feeds) or WebAtom (for ATOM 1.0 feeds). Learn more at WebRssBase and WebAtomBase, respectively.
You can also use %USERSWEB%
instead of Main
, but this is not necessary even if you have renamed the main web by configuring {MainWebName}
in configure.
WebSearch is an extremely fast and flexible search facility, part of the core TWiki feature set. WebSearchAdvanced offers more options, including:
See also: SearchHelp for help; TWikiVariables and FormattedSearch for including hard-coded searches in text.
To check for the most recently edited topics while on-site, use the WebChanges link, usually located in the toolbar. It lists the most recently modified topics, newest first, along with the first couple of lines of the page content.
This is simply a preset SEARCH
. The number of topics listed by the limit
parameter.:
%SEARCH{ ".*" web="TWiki_" type="regex" nosearch="on" order="modified"
reverse="on" limit="50" }%
You can point your news reader at WebRss and WebAtom to find out what is new in a TWiki web. WebRssBase and WebAtomBase have the details. Like WebChanges, this is based on a %SEARCH{}%
.
WebIndex lists all web topics in alphabetical order, with the first couple of lines of text. This is simply a preset SEARCH
:
%SEARCH{ "\.*" scope="topic" type="regex" nosearch="on" }%
You can generate a listing manually, or on an automated schedule, of visits to individual pages, on a per web basis. Compiled as a running total on a monthly basis. Includes totals for Topic Views, Topic Saves, Attachment Uploads, Most Popular Topics with number of views, and Top Contributors showing total of saves and attachment uploads. Previous months are saved.
%STATISTICSTOPIC%
twiki/bin/statistics
script from a cron job, once a day is recommended. This will update the WebStatistics topics in all webs.
nobody
on many systems. Example crontab entry: 0 0 * * * (cd /path/to/twiki/bin; ./statistics >/dev/null 2>&1)
nobody
: Run the utility twiki/tools/geturl.pl
in your cron job and specify the URL of the twiki/bin/statistics
script as a parameter. Example: 0 0 * * * (cd /path/to/twiki/tools; ./geturl.pl mydomain.com /urlpath/to/twiki/bin/statistics >/dev/null 2>&1)
geturl.pl
will do a TWiki CGI request as the TWikiGuest user, so if you use this workaround, the WebStatistics topics you are updating will have to be writable by TWikiGuest.
When running from the command line or a cron job, you can pass parameters to the script like this:
./statistics -logdate 200605 -webs TWiki,Sandbox
twiki/bin/statistics
script can also be executed as a CGI script, just enter the URL in your browser. Examples: https://wiki.planta.de/twiki/bin/statistics
https://wiki.planta.de/twiki/bin/statistics/Main
https://wiki.planta.de/twiki/bin/statistics/Main?logdate=202503
https://wiki.planta.de/twiki/bin/statistics?logdate=202503;webs=ProjectX,ProjectY,ProjectZ
TWiki generates monthly log files which are used by the statistics script
log<year><month>.txt
twiki/logs/log202503.txt
| <time> | <wikiusername> | <action> | <web>.<topic> | <extra info> | <IP address> |
| 29 Mar 2025 - 12:14 | TWikiGuest | view | WebRss | | 66.124.232.02 |
Script | Action name | Extra info |
---|---|---|
attach | attach | when viewing attach screen of previous uploaded attachment: filename |
changes | changes | |
edit | edit | when editing non-existing topic: (not exist) |
rdiff | rdiff | higher and lower revision numbers: 4 3 |
register | regstart | WikiUserName, e-Mail address, LoginName: user attempts to register |
register | register | E-mail address: user successfully registers |
register | bulkregister | WikiUserName of new, e-mail address, admin ID |
rename | rename | when moving topic: moved to Newweb.NewTopic |
rename | move | when moving attachment: Attachment filename moved to Newweb.NewTopic |
save | save | when replacing existing revision: repRev 3 when user checks the minor changes box: dontNotify when user changes attributes to an exising attachment: filename.ext |
save | cmd | special admin parameter used when saving |
search | search | search string |
upload | upload | filename |
view | view | when viewing non-existing topic: (not exist) when viewing previous topic revision: r3 |
Outgoing mail is required for TWikiRegistration and for recent changes alert.
TWiki will use the Net::SMTP
module if it is installed on your system. Set this with the SMTPMAILHOST
variable in TWikiPreferences.
The notify e-mail uses the default changes.tmpl
template, or a skin if activated in the TWikiPreferences.
mailnotify also relies on two hidden files in each twiki/data/Web
directory: .changes
and .mailnotify.
Make sure both are writable by your web server process. .changes
contains a list of changes; go ahead and make this empty. .mailnotify
contains a timestamp of the last time notification was done.
You can use an external mail program, such as sendmail
, if the Net::SMTP
module is not installed. Set the program path in {MailProgram}
in configure.
SMTPMAILHOST
in TWikiPreferences to an empty value.
SMTPSENDERHOST
variable to define the mail sender host (some SMTP installations require this).
For Unix platforms: Edit the cron
table so that mailnotify
is called in an interval of your choice. Please consult man crontab
of how to modify the table that schedules program execution at certain intervals. Example:
% crontab -e 0 1 * * * (cd /path/to/twiki/bin; ./mailnotify -q)The above line will run mailnotify nightly at 01:00. The
-q
switch suppresses all normal output.
For ISP installations: Many ISPs don't allow hosted accounts direct cron access, as it's often used for things that can heavily load the server. Workaround scripts are available.
On Windows: You can use a scheduled task if you have administrative privileges. TWiki:Codev/CronTabWin is a free scheduler for Windows.
The crontab command is used to schedule commands to be executed periodically.
Related Topics: AdminDocumentationCategory, AdminToolsCategory
Browser-based rename, move, and delete for individual topics
You can use browser-based controls to change a topic's name, move it to another TWiki web, or delete it to a hidden Trash
web.
[More]
(bottom right of page) on the topic to be changed, then, in the new screen, on [Rename/move]
. You can now rename and/or move/delete in one operation:
Trash
to delete a topic.
[Rename/Move]
: the topic will be renamed and links to the topic updated as requested. [Rename/Move]
.
Rename/Move/Delete
- an instruction line and undo link will appear at the bottom of the modified topic. This allows you to revert from the last modification only.
Deleted topics are moved to a special Trash
web - they are 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.
The Trash
web should be be cleared periodically, by archiving (saving) the text and RCS files if required (recommended), then deleting them from the Trash
directory.
Trash
directory is all that's required for maintenance, it's possible to grant Trash
admin privileges to multiple users, while strictly limiting server access.
You can use TWikiMetaData to place a command in the WebTopicViewTemplate and WebTopicNonWikiTemplate that will indicate that a topic has been moved by searching for the tag %META:TOPICMOVED{...}%. Customize something like this:
%<nop>METASEARCH{type="topicmoved" web="%WEB%" topic="%TOPIC%" title="This topic used to exist and was moved to: "}%
<pre>
and <verbatim>
are honoured - no changes are made to text within these areas.
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
. All webs will be searched during rename, even if NOSEARCHALL
is defined on a web, though access permissions will of course be honoured.
Changed references are kept are as short as possible, ex: topic
is used in preference to web.topic
.
User permissions affect the 'rename' functions in various ways. To rename a topic, you need all of VIEW
, CHANGE
and RENAME
access to that topic. To alter referring topics, you need CHANGE
access. See TWikiAccessControl for information on setting up access permissions.
Consider carefully whether to make browser-based Rename/Move/Delete widely available, or to restrict it to an administrator/moderator group. Allowing all users to easily manipulate topics can be extremely useful in refactoring a busy web or site. However, there are at least two significant potential drawbacks to take into account:
Ultimately, the size, objectives, and policies of your TWiki site, the real-world behavior of your user group, and most importantly, the initial TWiki site management leadership, will determine the most effective implementation of this feature, and the success of the site overall.
Rename/Move 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 due to case differences. Other mismatches with 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]]
Related Topics: UserDocumentationCategory, AdminDocumentationCategory
Adding, renaming and deleting webs are all web-based operations.
A TWikiSite is divided into webs; each one represents one subject, one area of collaboration. Administrators can add/rename/delete webs.
There are two methods used to create a new web. First you can use a specially designed TemplateWeb. This is an invisible web that begins with an underscore "_" character (for example _default
). All topics in the template web will be copied into your new web.
The second method is to use an existing web as a template web. This may be useful if you already have a web that you would like to use as a starting point. Only topics that have names beginning with Web... (like "WebHome", "WebNotify", etc.) are copied.
In either case you will want to be sure to verify that your new web has all the custom modifications that you desire. Any TWikiVariables defined in the form below will automatically be set in the WebPreferences of the new web.
Notes:
ROOTCHANGE
access to create a top-level web (one with no parent)
You can only create hierarchical webs (webs within webs) if the {EnableHierarchicalWebs}
setting in configure is enabled. Hierarchical webs are currently enabled.
Note: You might not need hierarchical webs. TWiki topics already have a parent/child relationship within a web, which is shown in the breadcrumb. Try to keep the number of webs to a minimum in order to keep search and cross-referencing simple.
You can create hierarchical webs via the Adding a New Web form above, by using a slash- or dot-separated path name which is based on an existing web name in the Name of new web: field.
Example:
To create a subweb named Bar
inside a web named Foo
, use Foo/Bar
or Foo.Bar
as the new web name in the form above.
The preferences of a subweb are inherited from the parent web and overridden locally. Preferences are ultimately inherited from the TWiki.TWikiPreferences topic.
Example Preference Inheritance for Sandbox/TestWeb/SubWeb.SubWebTopic
topic:
TWiki.TWikiPreferences
site-wide preferences
Sandbox.WebPreferences
inherits from and overrides settings in TWiki.TWikiPreferences
Sandbox/TestWeb.WebPreferences
inherits from and overrides settings in Sandbox.WebPreferences
Sandbox/TestWeb/SubWeb.WebPreferences
inherits from and overrides settings in Sandbox/TestWeb.WebPreferences
Sandbox/TestWeb/SubWeb.SubWebTopic
inherits from and overrides settings in Sandbox/TestWeb/SubWeb.WebPreferences
The Pattern skin (default) indicates Subwebs by indenting them in the sidebar relative to their level in the hierarchy.
Rename a web via the Tools section in each WebPreferences topic. You may delete a web by moving it into a Trash web.
You may only rename a web if you have the following permissions
When you rename a web TWiki will try and update all links that refer to the old web. You should note that links only get updated in topics that you are allowed to edit. If you use access rights in the TWiki installation it is generally best to let an administrator rename webs to avoid too many broken links.
If anyone is editing a topic which requires updating, or which lives in the web being renamed, a second confirmation screen will come up which will indicate which topics are still locked for edit. You may continue to hit the refresh button until an edit lease is obtained for each topic which requires updating (the "Refresh" button will change to "Submit"), or hit "Cancel", which will cancel your edit lease on all affected topics.
It is possible, though not recommended, to change the names of the webs in the distribution.
If you plan to rename the Main web, remember that TWiki stores user topics in this web. That means that every WikiName signature - Main.SomeUserName
- points to it and would need updating (unless the variable, %USERSWEB%.SomeUserName
, is used throughout). This potentially large change can be performed automatically if you rename the web from the Tools section of WebPreferences, as described above.
If you want to rename the TWiki or Main webs, remember they are referred to in the TWiki configuration. You will need to change the
{SystemWebName}
, {UsersWebName}
and/or {LocalSitePreferences}
settings in the configuration using the configure interface.
Renaming the webs in the distribution is not recommended because it makes upgrades much more complicated.
Related Topics: AdminDocumentationCategory, AdminToolsCategory
Register users on your TWiki site; change/reset/install passwords; remove user accounts
Some of the features below may be disabled, depending on your TWiki
configuration.
You don't have to have user home pages in TWiki for Authentication to work - see TWikiUserAuthentication for details.
Note that the below features are only relevant when you use an internal password manager where TWiki can set and reset passwords.
To change the user's WikiName:
JaneSmith
to JaneMiller
. %M% Jane Smith is now known as JaneMiller
If external authentication is used and you want to change the login name:
* JaneSmith - jsmith - 13 Sep 2006
* JaneMiller - jmiller - 13 Sep 2006
To remove a user account (FredQuimby, who logs in as "fred"):
.htpasswd
file, edit the .htpasswd
file to delete the line starting fred:
htpasswd
program with .htpasswd
files generated by TWiki! htpasswd
wipes out email addresses that TWiki plants in the info fields of this file.
FredQuimby - fred
line from the Main.TWikiUsers topic
FredQuimby
from all groups and from all the ALLOWWEB/ALLOWTOPIC...
declarations, if any.Note: Consider leaving the user topic file in place so their past signatures and revision author entries don't end up looking like AnUncreatedTopic . If you want to make it clear the user is no longer around, replace the topic content with a note to that effect. The existence of the UserName topic should also prevent that user name from being re-used, sealing the potential security hole regarding inherited permissions..
templates/registerconfirm.tmpl
templates/registernotify.tmpl
templates/registernotifyadmin.tmpl
As these are TWikiTemplates, they can be customized and selected using the SKIN path setting.
Because there are default tmpl files in the templates
dir, this cannot use Template topics.
These template files have a specific format that matches the raw format of emails sent via SMTP, so be careful and test your changes. It is easiest to start by copying the default templates:
cd twiki/templates cp registernotify.tmpl registernotify.myskin.tmpl cp registerconfirm.tmpl registerconfirm.myskin.tmpl cp registernotifyadmin.tmpl registernotifyadmin.myskin.tmplthen add
myskin
to the beginning of the SKIN
setting in TWikiPreferences.
From this point on, your myskin templates will be used for the registration emails.
To make it possible for TWikiUsers to modify the email contents, you could use a parameterized %INCLUDE%
statement in your customized version. eg:
From: %WIKIWEBMASTERNAME% <%WIKIWEBMASTER%> To: %FIRSTLASTNAME% <%EMAILADDRESS%> Subject: %MAKETEXT{"[_1] - Registration for [_2] ([_3])" args="%WIKITOOLNAME%, %WIKINAME%, %EMAILADDRESS%"}% MIME-Version: 1.0 Content-Type: text/plain; charset=%CHARSET% Content-Transfer-Encoding: 8bit %INCLUDE{ "Main.RegistrationNotification" WIKINAME="%WIKINAME%" FIRSTLASTNAME="%FIRSTLASTNAME%" EMAILADDRESS="%EMAILADDRESS%" }%
and then create a topic Main.RegisterNotifyEmail:
Welcome to %WIKITOOLNAME%. %MAKETEXT{"Your personal [_1] topic is located at [_2]. You can customize it as you like:" args="%WIKITOOLNAME%, %SCRIPTURL{"view"}%/%USERSWEB%/%WIKINAME%"}% * %MAKETEXT{"Some people turn it into a personal portal with favorite links, what they work on, what help they'd like, etc."}% * %MAKETEXT{"Some add schedule information and vacation notice."}% Regards %WIKIWEBMASTERNAME% Your TWiki Admin %MAKETEXT{"Note:"}% 2 %MAKETEXT{"You can change your password at via [_1]" args="%SCRIPTURL{"view"}%/%SYSTEMWEB%/ChangePassword"}% 3 %MAKETEXT{"If you haven't set a password yet or you want to reset it, go to: [_1]" args="%SCRIPTURL{"view"}%/%SYSTEMWEB%/ResetPassword"}% %MAKETEXT{"Submitted content:"}% %FORMDATA%
Related Topics: AdminDocumentationCategory
New Features and Enhancements of TWiki Release 4.3.1
New Features and Enhancements of TWiki Release 4.3
Hall of Fame of TWiki Release 4.3
Many people have been involved in creating TWiki 4.3. Special thanks go to the most active contributors in the following areas:
If you find an omission please fix it at TWiki:TWiki.TWikiHistory. For the full list of contributors see TWikiContributor.
See more details on the TWiki 4.3 release at TWikiReleaseNotes04x03.
New Features and Enhancements of TWiki Release 4.2
working
which per default is located in the TWiki root which contains registration_approvals, tmp, and work_areas
query
search mode supports SQL-style queries over form fields and other meta-data
templatetopic
parameter to point to custom comment template topic
Hall of Fame of TWiki Release 4.2
Many people have been involved in creating TWiki 4.2. Special thanks go to the most active contributors in the following areas:
Many thanks also to the contributors in the following areas:
If you find an omission please fix it at TWiki:TWiki.TWikiHistory. For the full list of contributors see TWikiContributor.
Note: Order of contributors under "Spec and code", "Templates and skins" and "Documentation" is based on number of SVN file changes for core and default extensions from March 2007 (svn rev:13046) to Jan 2008 (svn rev:16210). (Details at TWikibug:TWiki420SvnLog). Order of contributors under "Testing and bug fixing" is based on Bugs web statistics from 2007-03 to 2007-12. Order of contributors under "TWiki.org wiki champions" and "Customer support" is based on TWiki.org web statistics from 2007-02 to 2007-12.
See more details on the TWiki 4.2 release at TWikiReleaseNotes04x02.
New Features and Enhancements of TWiki Release 4.1
Eng.ajax
into the Jump box... Here we go, the third link is the AjaxCookbook I was looking for."
redirectto
parameter to redirect to a topic or a URL; for security, redirect to URL needs to be enabled with a {AllowRedirectUrl}
configure flag.
redirectto
parameter to redirect to a URL or link to TWiki topic after submitting comment.
topic
URL parameter also respects the {AllowRedirectUrl}
configure flag so redirects to URLs can be disabled which could be abused for phishing attacks.
section
URL parameter to view just a named section within a topic. Useful for simple AJAX type applications.
$nop
, $quot
, $percnt
, $dollar
.
$LISTRAND()
, $LISTSHUFFLE()
, $LISTTRUNCATE()
.
cellborder
.
Hall of Fame of TWiki Release 4.1
Although many more people have been involved in creating TWiki-4.1, special thanks go to the most active contributors in the following areas:
If you find an omission please fix it at TWiki:TWiki.TWikiHistory. For the full list of contributors see TWikiContributor.
Note: Sequence of contributors under "Spec, code, testing", "Templates and skins" and "Documentation" is based on number of SVN check-ins for core and default extensions from 2006-02 to 2006-12. Sequence of contributors under "TWiki.org wiki champions" and "Customer support" is based on TWiki.org web statistics from 2006-02 to 2006-12.
See more details on the TWiki 4.1 release at TWikiReleaseNotes04x01.
Major New Features
Many, many people worked on TWiki-4.0.0. The credits in the table below only list the people who worked on individual enhancements. If you find an omission please fix it at TWiki:TWiki.TWikiHistory. There were many other contributors; for a full list, visit TWikiContributor.
Most of the redesign, refactoring and new documentation work in Dakar release was done by Crawford Currie. Michael Sparks
provided ideas and proof of concept for several improvements. Other people who gave large amounts of their time and patience to less sexy aspects of the work, such as testing, infrastructure and documentation, are AntonAylward
, KennethLavrsen
, LynnwoodBrown
, MichaelDaum
, Peter Thoeny
, SteffenPoulsen
, Sven Dowideit
, WillNorris
.
Installation & configuration | Contributor |
---|---|
Much simpler install and configuration | Crawford Currie![]() ![]() ![]() |
mod_perl safe code for better performance |
Crawford Currie![]() |
Security | |
Security sandbox blocking exploits for remote command execution on the server | Florian Weimer![]() ![]() ![]() |
Reworked access permission model | Crawford Currie![]() |
Internationalization & localization | |
User Interface Internationalisation![]() |
AntonioTerceiro![]() |
Chinese translation | CheDong![]() |
Danish translation | SteffenPoulsen![]() |
Dutch translation | ArthurClemens![]() |
French translation | BenVoui![]() |
German translation | AndreUlrich![]() |
Italian translation | MassimoMancini![]() |
Polish translation | ZbigniewKulesza![]() |
Portuguese translation | AntonioTerceiro![]() ![]() |
Spanish translation | WillNorris![]() ![]() |
Swedish translation | Erik Åman![]() |
New features for users | |
Edit conflict resolution with automatic merge | Crawford Currie![]() |
Fine grained change notification on page level and parent/child relationship | Crawford Currie![]() |
WYSIWYG editor | Crawford Currie![]() ![]() ![]() ![]() |
Integrated session support | GregAbbas![]() ![]() |
Webserver-independent login/logout | Crawford Currie![]() |
Registration process with e-mail confirmation![]() |
MartinCleaver![]() |
Tip of the Day box in TWiki Home![]() |
PaulineCheung![]() ![]() ![]() |
ATOM feeds | Peter Thoeny![]() |
"Force New Revision" check box for topic save![]() |
WillNorris![]() |
New features for TWiki administrators and wiki application developers | |
Improved preferences handling | ThomasWeigert![]() ![]() |
Named include sections | RafaelAlvarez![]() |
Create topic names with consecutive numbers![]() |
Sven Dowideit![]() |
Parameterized includes![]() |
Crawford Currie![]() |
Dynamic form option definitions![]() |
MartinCleaver![]() |
SEARCH enhancements with new parameters excludeweb , newline , noempty , nofinalnewline , nonoise , recurse , zeroresults |
Crawford Currie![]() ![]() ![]() ![]() |
FormattedSearch enhancements with $changes , $count , $formfield(name, 30, ...) , $summary(expandvar) , $summary(noheaders) , $summary(showvarnames) |
ColasNahaboo![]() ![]() ![]() ![]() |
New TWikiVariables ACTIVATEDPLUGINS, ALLVARIABLES, AUTHREALM, EMAILS, FAILEDPLUGINS, HTTP, HTTPS, ICONURL, ICONURLPATH, IF, LANGUAGES, LOCALSITEPREFS, LOGIN, LOGOUT, MAKETEXT, META, PLUGINDESCRIPTIONS, QUERYSTRING, STARTSECTION/ENDSECTION, SESSION_VARIABLE, SESSIONID, SESSIONVAR, SPACEOUT, USERLANGUAGE, WIKIHOMEURL | ArthurClemens![]() ![]() ![]() ![]() ![]() ![]() ![]() |
TWiki form with hidden type![]() |
LynnwoodBrown![]() ![]() |
Support topic-specific templates![]() |
ThomasWeigert![]() |
Direct save feature for one-click template-based topic creation | LynnwoodBrown![]() ![]() ![]() |
Automatic Attachments![]() |
MartinCleaver![]() |
Rename, move or delete webs | PeterNixon![]() |
Hierarchical subwebs (beta) | PeterNixon![]() |
New features for Plugin developers | |
REST (representational state transfer) interface for Plugins | RafaelAlvarez![]() ![]() ![]() |
New and improved Plugins APIs | Crawford Currie![]() ![]() |
Improvements in the TWiki engine room | |
Major OO redesign and refactoring of codebase | Crawford Currie![]() |
Automatic build system | Crawford Currie![]() |
Extensive test suite, unit tests and testcases | Crawford Currie![]() |
TWiki:Codev.DevelopBranch![]() ![]() |
Sven Dowideit![]() |
Documentation, logo artwork, skins: | |
Documentation | Crawford Currie![]() ![]() ![]() ![]() |
Design of TWikiLogos with big "T" in a speech bubble | ArthurClemens![]() ![]() |
Improved templates and PatternSkin | ArthurClemens![]() |
See more details at TWikiReleaseNotes04x00
Major New Features
Details of New Features and Enhancements of 01-Sep-2004 Release | Developer, Sponsor |
---|---|
Install: Ship with an automatic upgrade script to facilitate TWiki upgrades. Details![]() |
TWiki:Main.MartinGregory![]() ![]() |
Install: New testenv function to change the locks in the TWiki database to the web server user id (automates installation step). Details![]() |
TWiki:Main.MattWilkie![]() ![]() |
Install: The shipped .htaccess.txt now needs to be edited before it is valid, to help reduce chances of error. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Install: Configurable password file handling for different types of encryption. Details![]() |
TWiki:Main.PavelGoran![]() ![]() |
Install: Remove office locations from registration. Details![]() |
TWiki:Main.PeterThoeny![]() |
Install: Changes to support shorter URLs with Apache Rewrite rules. Details![]() |
TWiki:Main.AntonioBellezza![]() ![]() |
Install: Remove the Know web from the distribution. Details![]() |
TWiki:Main.PeterThoeny![]() |
Internationalization: Support use of UTF-8 URLs for I18N characters in TWiki page and attachment names. Details![]() |
TWiki:Main.RichardDonkin![]() |
Authentication: Authenticate users when creating new topic in view restricted web. Details![]() |
TWiki:Main.JonathanGraehl![]() ![]() |
Preferences: TWiki Preferences need to be secured properly. Details![]() |
TWiki:Main.PeterThoeny![]() |
Preferences: Use TWiki Forms to set user preferences. Details![]() |
TWiki:Main.JohnTalintyre![]() |
Skins: New pre-installed skins PatternSkin and DragonSkin. Details![]() |
TWiki:Main.ArthurClemens![]() ![]() |
Skins: New skin browser to choose from installed skins. Details![]() |
TWiki:Main.PeterThoeny![]() |
Skins: Documented set of CSS classes that are used in standard skins. Details![]() |
TWiki:Main.ArthurClemens![]() ![]() |
Skins: Added CSS class names to Diff output. Details![]() |
TWiki:Main.SvenDowideit![]() |
Skins: Templates can now be read from user topics, as well as from files in the templates diretcory. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Skins: Ensure that the default template gets overridden by a template passed in. Details![]() |
TWiki:Main.MartinCleaver![]() ![]() |
Skin: Convey an important broadcast message to all users, e.g. scheduled server downtime. Details![]() |
TWiki:Main.PeterThoeny![]() |
Skin: Balanced pastel colors for TWiki webs. Details![]() |
TWiki:Main.ArthurClemens![]() |
Rendering: Use exclamation point prefix to escape TWiki markup rendering. Details![]() |
TWiki:Main.ArthurClemens![]() |
Rendering: Ordered lists with uppercase & lowercase letters, uppercase & lowercase Roman numerals. Details![]() |
TWiki:Main.DanBoitnott![]() ![]() |
Rendering: Allow custom styles for the "?" of uncreated topics. Details![]() |
TWiki:Main.SvenDowideit![]() |
Rendering: Render IRC and NNTP as a URL. Details![]() |
TWiki:Main.PeterThoeny![]() |
Rendering: Make acronym linking more strict by requiring a trailing boundary, e.g. excluding TLAfoobar. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Rendering: TWiki Form with Label type. Details![]() |
TWiki:Main.PeterThoeny![]() |
Rendering: Web names can now be WikiWords. Details![]() |
TWiki:Main.PeterThoeny![]() |
Rendering: New syntax for definition list with dollar sign and colon. Details![]() |
TWiki:Main.AdamTheo![]() ![]() |
Rendering: Table with multi-span rows, functionality provided by Table Plugin. Details![]() |
TWiki:Main.WalterMundt![]() |
Variables: New title parameter for TOC variable. Details![]() |
TWiki:Main.PeterThoeny![]() ![]() |
Variables: New REVINFO variable in templates supports flexible display of revision information. Details![]() |
TWiki:Main.PeterThoeny![]() ![]() |
Variables: Set times to be displayed as gmtime or servertime. Details![]() |
TWiki:Main.SueBlake![]() ![]() |
Variables: Properly encode parameters for form fields with ENCODE variable. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: Expand USERNAME and WIKINAME in Template Topics. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: Expand same variables in new user template as in template topics. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: Optionally warn when included topic does not exist; with the option to create the included topic. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: In topic text show file-types of attached files as icons. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: New variable FORMFIELD returns the value of a field in the form attached to a topic.. Details![]() |
TWiki:Main.DavidSachitano![]() ![]() |
Variables: Meta data rendering for form fields with META{"formfield"}. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: New PLUGINVERSION variable. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: URLPARAM now has a default="..." argument, for when no value has been given. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: URLPARAM variable with newline parameter. Details![]() |
TWiki:Main.PeterThoeny![]() |
Variables: URLPARAM variable with new multiple=on parameter. Details![]() |
TWiki:Main.PaulineCheung![]() ![]() |
Search: New switch for search to perform an AND NOT search. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Keyword search to search with implicit AND. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Multiple searches in same topic with new multiple="on" paramter. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Remove limitation on number of topics to search in a web. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Exclude topics from search with an excludetopic parameter. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Expand Variables on Formatted Search with expandvariables Flag. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Formatted Search with Web Form variable to retrieve the name of the form attached to a topic. Details![]() |
TWiki:Main.FrankSmith![]() ![]() |
Search: Formatted Search with Conditional Output. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Formatted Search with $parent token to get the parent topic. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: New separator parameter to SEARCH supports better SEARCH embedding. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Improved search performance when sorting result by topic name. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: New scope=all search parameter to search in topic name and topic text at the same time. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: New topic parameter for AND search on topic text and topic name. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search modules uses Perl-style keyword parameters (code cleanup). Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: New $wikiname variable in format parameter of formatted search. Details![]() |
TWiki:Main.ArthurClemens![]() |
Search: Sort search by topic creation date. Details![]() |
TWiki:Main.PeterThoeny![]() |
Search: Topic creation date and user in Formatted Search. Details![]() |
TWiki:Main.CoreyFruitman![]() ![]() |
Search: Increase levels of nested search from 2 to 16. Details![]() |
TWiki:Main.PeterThoeny![]() |
Plugins: New pre-installed Plugins CommentPlugin, EditTablePlugin, RenderListPlugin, SlideShowPlugin, SmiliesPlugin, SpreadSheetPlugin, TablePlugin. Details![]() |
TWiki:Main.PeterThoeny![]() |
Plugins: New callback afterSaveHandler , called after a topic is saved. Details![]() |
TWiki:Main.WalterMundt![]() |
Plugins: New callbacks beforeAttachmentSaveHandler and afterAttachmentSaveHandler , used to intervene on attachment save event. Details![]() |
TWiki:Main.MartinCleaver![]() ![]() |
Plugins: New callbacks beforeCommonTagsHandler and afterCommonTagsHandler . Details![]() |
TWiki:Main.PeterThoeny![]() |
Plugins: New callback renderFormFieldForEditHandler to render form field for edit. Details![]() |
TWiki:Main.JohnTalintyre![]() |
Plugins: New callback renderWikiWordHandler to custom render links. Details![]() |
TWiki:Main.MartinCleaver![]() ![]() |
Plugins: New function TWiki::Func::formatTime to format time into a string. Details![]() |
TWiki:Main.SvenDowideit![]() |
Plugins: New function TWiki::Func::getRegularExpression to get predefined regular expressions. Details![]() |
TWiki:Main.RichardDonkin![]() |
Plugins: New functions TWiki::Func::getPluginPreferences* to get Plugin preferences. Details![]() |
TWiki:Main.WalterMundt![]() |
Plugins: New function TWiki::Func::extractParameters to extract all parameters from a variable string. Details![]() |
TWiki:Main.PeterThoeny![]() |
Plugins: New function TWiki::Func::checkDependencies to check for module dependency. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Plugins: A recommendation for where a Plugin can store its data. Details![]() |
TWiki:Main.PeterThoeny![]() |
UI: Show tool-tip topic info on WikiWord links. Details![]() |
TWiki:Main.PeterThoeny![]() |
UI: Save topic and continue edit feature. Details![]() |
TWiki:Main.ColasNahaboo![]() |
UI: Change topic with direct save (without edit/preview/save cycle) and checkpoint save. Details![]() |
TWiki:Main.MattWilkie![]() ![]() |
UI: In attachment table, change 'action' to 'manage'. Details![]() |
TWiki:Main.PeterThoeny![]() ![]() |
UI: Smaller usability enhancements on the file attachment table. Details![]() |
TWiki:Main.PeterThoeny![]() ![]() |
UI: Removes anchor links from header content and places them before the text to fix 'header becomes link'. Details![]() |
TWiki:Main.ArthurClemens![]() |
UI: Improved functionality of the More screen. Details![]() |
TWiki:Main.PeterThoeny![]() ![]() |
UI: Quick reference chart of most used markup is now listed on the edit screen. Details![]() |
TWiki:Main.ArthurClemens![]() |
UI: Flag for edit script to avoid overwrite of existing topic text and form data. Details![]() |
TWiki:Main.NielsKoldso![]() ![]() |
UI: Disable Escape key in IE textarea to prevent it cancelling work. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
UI: Improved warning message on unsaved topic. Details![]() |
TWiki:Main.MartinGregory![]() ![]() |
UI: Reverse order of words in page title for better multi-window/tab navigation. Details![]() |
TWiki:Main.ArthurClemens![]() |
UI: Provides a framework to create and modify a topic without going through edit->preview->save sequence. Details![]() |
TWiki:Main.AndreUlrich![]() ![]() |
UI: Set the topic parent to none in More screen, e.g. remove the current topic parent. Details![]() |
TWiki:Main.PeterThoeny![]() |
UI: Use templates to define how file attachments are displayed. Was previously hard-coded. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
UI: Topic diff shows unified diff with unchanged context. Details![]() |
TWiki:Main.SvenDowideit![]() |
UI: Diff feature shows TWiki form changes in nice tables. Details![]() |
TWiki:Main.SvenDowideit![]() |
Code refactoring: The log entry for a save now has a dontNotify flag in the extra field if the user checked the minor changes flag. Details![]() |
TWiki:Main.PeterThoeny![]() |
Code refactoring: Server-side include of attachments accelerates INCLUDE. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Code refactoring: Move functionality out of bin scripts and into included modules. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Code refactoring: Move bin script functionality into TWiki::UI modules. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Code refactoring: Optimize preferences handling for better performance. Details![]() |
TWiki:Main.PavelGoran![]() ![]() |
Code refactoring: Refactor variable expansion for edit and register. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Code refactoring: Move savemulti script into TWiki::UI::Save. Details![]() |
TWiki:Main.MattWilkie![]() ![]() |
Code refactoring: Topic search is done natively in Perl, it does not depend anymore on system calls with pipes. Details![]() |
TWiki:Main.PeterThoeny![]() |
Code refactoring: Fix logical error in upload script which prevented MIME filename from being used. Details![]() |
TWiki:Main.WalterMundt![]() |
Bug Fixes of 01-Sep-2004 Release | Developer, Sponsor |
---|---|
Fix: Consistently create headings with empty anchor tags. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: TOC does not work for headings containing & without spaces surrounding it. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Backslash line break breaks TWiki form definitions. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Fix: Rename fixes unrelated topic references. Details![]() |
TWiki:Main.RichardDonkin![]() |
Fix: Bug with infinite recursion in search. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Can't send mail with full 'From' address. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: All scripts change to $bin before execute (for mod_perl2). Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Several RSS readers do not show all entries seen in the WebChanges list; repeated updates to the same topics get lost. Details![]() |
TWiki:Main.ArthurClemens![]() |
Fix: TWiki::Access::checkAccessPermission function improperly handles Main and TWiki webs. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: Topic save returns error CI Date precedes date in revision. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Double quotes got replaced by " in TWiki forms. Details![]() |
TWiki:Main.MichaelSparks![]() ![]() |
Fix: Duplicated Wiki name in .htpasswd entry for sha1 encoding. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: When viewing a previous version of a topic, the view script substitutes only one occurrence of the variable EDITTOPIC. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Form default values are not working for text fields. Details![]() |
TWiki:Main.ThomasWeigert![]() ![]() |
Fix: Formatted searches using a $pattern which unbalanced parenthesis crash TWiki. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Formatted Search uses title but should use name for formfield parameter. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: GMTIME variable returns unwanted GMT text. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: Include from other Web links ACRONYMS. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Including an HTML file is very slow. Details![]() |
TWiki:Main.JohnTalintyre![]() |
Fix: includeUrl() mess up absolute URLs. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: Filter out fixed font rendering in TOC to avoid unrendered = equal signs in TOC. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: The initializeUserHandler is broken for session Plugins. Details![]() |
TWiki:Main.JohnTalintyre![]() |
Fix: SEARCH fails with very large webs. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Security alert: User could gain view access rights of another user. Details![]() |
TWiki:Main.KimCovil![]() ![]() |
Fix: 'print to closed file handle' error of log files are not writable. Details![]() |
TWiki:Main.MartinGregory![]() ![]() |
Fix: Meta data handler can't process CR-LF line endings. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: METAFIELD meta data is not shown in view raw=on mode. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Minor XHTML non-compliance in templates and code. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Getting pages from virtual hosts fails. Details![]() |
TWiki:Main.JohnTalintyre![]() |
Fix: Create new web fails if RCS files do not exist. Details![]() |
TWiki:Main.ClausBrunzema![]() ![]() |
Fix: Metacharacters can be passed through to the shell in File Attach. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Ability to delete non-WikiWord topics without confirmation. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: + symbol in password reset fails. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Pathinfo cleanup for hosted sites. Details![]() |
TWiki:Main.MikeSalisbury![]() ![]() |
Fix: Software error in SEARCH if regular expression pattern has unmached parenthesis. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Pipe chars in the comment field of the attachment table are not escaped. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Link escaping in preview fails for not quoted hrefs. Details![]() |
TWiki:Main.TedPavlic![]() ![]() |
Fix: Preview expands variables twice. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Using a proxy with TWiki fails; no proxy-HTTP request, minimal request not HTTP 1.0, requests marked 1.1 are at best 1.0. Details![]() |
TWiki:Main.MichaelSparks![]() ![]() |
Fix: Runaway view processes with TWiki::Sore::RcsLite. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: Regex Error in WebTopicList with topics that have meta characters in the name. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Rename script misses some ref-by topics. Details![]() |
TWiki:Main.JohnTalintyre![]() |
Fix: Links to self within the page being renamed are not changed. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: Rename topic does 'Main.Main.UserName' for attachments. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Revision date is set to Jan 1970 when using RCS Lite. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: The new dynamically-created SiteMap is very nice, but somewhat slow. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: The makeAnchorName function did not produce the same results if called iteratively, resulting in problems trying to link to headers.. Details![]() |
TWiki:Main.WalterMundt![]() |
Fix: Statistics page does not provide links to non-wikiword topics. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Make TOC link URI references relative. Details![]() |
TWiki:Main.MartinGregory![]() ![]() |
Fix: TWiki hangs when used on Apache 2.0. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: TOC incorrectly strips out links in headers. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: The HTML tags that are generated by TOC do not close properly. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: TOC on INCLUDEd topic ignores STOPINCLUDE. Details![]() |
TWiki:Main.WillNorris![]() ![]() |
Fix: Quotes in tooltip message can break a TWiki form. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Better error message if the file attachment directory is not writable. Details![]() |
TWiki:Main.CrawfordCurrie![]() ![]() |
Fix: Image size of PNG files. Details![]() |
TWiki:Main.ArthurClemens![]() |
Fix: The testenv script distinguishes between real user ID and effective user ID. Details![]() |
TWiki:Main.RichardDonkin![]() |
Fix: Variables in square bracket links dont work in form fields. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: Variable with Parameters in Form Fields Disappear. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Verbatim tag should escape HTML entities. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Field names of TWiki Forms can be WikiWords, this is used to link to a help topic. Details![]() |
TWiki:Main.PeterThoeny![]() |
Fix: Clean up the WebRssBase INCLUDES to use VARIABLES set in TWikiPreferences. Details![]() |
TWiki:Main.SvenDowideit![]() |
Fix: Resolving variables in included topics. Details![]() |
TWiki:Main.OliverKrueger![]() ![]() |
/bin/view/Web.TopicName
topic view URL (besides the default /bin/view/Web/TopicName
URL); useful for InterwikiPlugin links like TWiki:Codev.ReadmeFirstreadTopicText
, saveTopicText
, setTopicEditLock
, checkTopicEditLock
%NOAUTOLINK%
setting in the TWikiPreferences to disable the auto-linking of WikiWords
registrationHandler
, beforeEditHandler
, afterEditHandler
, beforeSaveHandler
, writeHeaderHandler
, redirectCgiQueryHandler
, getSessionValueHandler
, setSessionValueHandler
%INCLUDE{ "OtherTopic" rev="1.2" }%
%NOP{}%
variable in TWikiTemplates topic gets removed at topic creation time; useful to write protect template topics
%URLPARAM{}%
variable in TWikiTemplates topic gets expanded at topic creation time; useful for dynamic content creation
$logDir
introduced in TWiki.cfg to set the log directory
setlib.cfg
file in the bin directory to set the TWiki library path
%PROXYHOST
and %PROXYPORT%
settings in the TWikiPreferences
%WIKILOGOIMG%
, %TWIKILOGOURL%
and %WIKILOGOALT%
variables in TWikiPreferences; replacing $wikiHomeUrl
in TWiki.cfg
%WIKITOOLNAME%
variable in TWikiPreferences; replacing $wikiToolName
in TWiki.cfg
%EDITBOXSTYLE%
preferences variable which sets the edit box width automatically to the window width
%URLENCODE{}%
variable to encodes a string for using in a URL parameter, e.g. %URLENCODE{"spaced name"}%
returns spaced%20name
/twiki/templates/register.tmpl
template file
%TOC%
table of content, e.g. ---+!! This heading
is not shown in a TOC
%SEARCH{}%
variable, FormattedSearch and WebSearch
<verbatim>
tags are no longer expanded
%SEARCH{}%
variable for database like reporting.
TWiki.cfg
notedited.tmpl
, notext.tmpl
and notwiki.tmpl
templates. More in TWikiTemplates.
%TOPICLIST{"format"}%
and %WEBLIST{"format"}%
variables to get a formatted topic index and web index, respectively. More in TWikiVariables.
%URLPARAM{"name"}%
variable to query URL parameters. More in TWikiVariables.
| *bold* |
cells as table headers, (ii) render space padded cells | center aligned |
and | right aligned |
, (iii) span multiple columns using | empty cells |||
. More in TextFormattingRules.
.htaccess
files that are attached to a topic get a .txt
suffix appended to the file name. See also TWiki:Codev/FileAttachmentFilterSecurityAlert---++ My Title
; and new %TOC%
variable to build a table of content from headings in a topic. More in TWikiVariables.
[[http://TWki.org][TWiki]]
) and internal links (i.e [[WikiSyntax][syntax]]
). More in TWikiVariables.
#MyAnchor
at the beginning of a line, and link to it with [[#MyAnchor]]
. More in TWikiVariables.
Net::SMTP
module instead of sendmail
if installed.
<verbatim>
... </verbatim>
tags to show source code "as is". Unlike the <pre>
... </pre>
tags, it also shows <
, >
, &
characters "as is".
==Bold Fixed==
to get Bold Fixed
.
%GMTIME{"..."}%
and %SERVERTIME{"..."}%
variables. Format is now "$hour:$min"
instead of "hour:min"
. More in TWikiVariables. Attention: Check your existing topics when you upgrade TWiki!
%STARTINCLUDE%
and %STOPINCLUDE%
variables to control what gets included of a topic. More in TWikiVariables.
print
skin for a printable view of a topic. More in TWikiSkins and TWiki:Codev/TWikiSkins%BASEWEB%
, %INCLUDINGWEB%
, %BASETOPIC%
and %INCLUDINGTOPIC%
to have more control over include handling. More in TWikiVariables and TWiki:Codev/IncludeHandlingImprovementsnoheader="on"
switch in %SEARCH{...}%
to suppress table header. More in TWikiVariables.
$doHidePasswdInRegistration
in wikicfg.pm
to hide plain text password in registration e-mail.
%VAR{"NAME" web="Web"}%
to get web-specific preferences. More in TWikiVariables.
view
"knows" the user once authenticated in edit
. More in TWikiUserAuthentication.
png
image support.
%INCLUDE{"%TWIKIWEB%.TWikiWebsTable"}%
. More in TWiki:Codev/BetterTWikiTagTemplateProcessingmailnotify
to suppress all normal output.
[[text formatting FAQ]]
to get the link text formatting FAQ that points to topic TextFormattingFAQ.
%HTTP_EQUIV_ON_VIEW%
, %HTTP_EQUIV_ON_EDIT%
and %HTTP_EQUIV_ON_PREVIEW%
that define the <meta http-equiv="...">
meta tags for the TWiki templates. This can be used for example to set a document expiration time.
%GMTIME{"..."}%
and %SERVERTIME{"..."}%
. More in TWikiVariables.
%INCLUDE{"Web/TopicName.txt"}%
to %INCLUDE{"Web.TopicName"}%
. Legacy syntax still supported.
*bold*, italic, __bold italic__
and fixed
, where it is not necessary anymore to have a trailing space before .,;:?!
characters.
%INCLUDE%
of arbitrary files.
%GMTIME%
variable that shows the current GM time.
%HTTP_HOST%
, %REMOTE_ADDR%
, %REMOTE_PORT%
and %REMOTE_USER%
.
%ATTACHLINKBOX%
controls the default state of the link check box in the attach file page.
Perl -T
option )
%EDITBOXWIDTH%
and %EDITBOXHEIGHT%
to specify the edit box size.
wikiwebs.inc
, wikiwebtable.inc
, weblist.inc
, webcopyright.inc
and webcolors.inc
files.
%SCRIPTSUFFIX%
/ $scriptSuffix containing an optional file extension of the TWiki Perl script. Templates have been changed to use this variable. This allows you to rename the Perl script files to have a file extension like for example ".cgi".
%SCRIPTURLPATH%
/ $scriptUrlPath containing the script URL without the domain name. Templates have been changed to use this variable instead of %SCRIPTURL%
. This is for performance reasons.
%INCLUDE:"filename.ext"%
to %INCLUDE{"filename.ext"}%
. (Previous syntax still supported. Change was done because of inline search syntax)
%SEARCH{"str" ...}%
to show a search result embedded in a topic text. TWikiVariables has more on the syntax. Inline search combined with the category table feature can be used for example to create a simple bug tracking system.
initialize
in wiki.pm
did not handle $thePathInfo
correctly.
$doLogTopic*
in wikicfg.pm to selectively log topic view, edit, save, rdiff, attach, search and changes to monthly log file.
$doRemovePortNumber
in wikicfg.pm to optionally remove the port number from the TWiki URL. Example www.some.domain:1234/twiki
gets www.some.domain/twiki
.
%INCLUDE:"file.inc"%
variable. Search first in the current web, then in parent data directory. Useful to overload default include text in the data directory by web-specific text, like for example webcopyright.inc
text.
TestVersion
/ TestVersions
, TestPolicy
/ TestPolicies
, TestAddress
/ TestAddresses
, TestBox
/ TestBoxes
.
webcopyright.inc
file. This is to easily customize the copyright text.
%WIKIHOMEURL%
(link when pressing the icon on the upper left corner) and %WIKITOOLNAME%
(the name of the wiki tool TWiki
).
%PUBURL%
(Public directory URL) and %ATTACHURL%
(URL of topic file attachment).
fixed font text
. Words get showns in fixed font
by enclosing them in "=" equal signs. Example Writing =fixed font= will show up as fixed font
.
Diffs
link at the bottom of each topic, e.g. Topic TWikiHistory . { Edit Ref-By Diffs r1.3 > r1.2 > r1.1 }
Revision r1.3 1998/11/10 01:34 by PeterThoeny
data/logYYYYMM.txt
, where YYYYMM
the year and month in numeric format is. Intended for auditing only, not accessible from the web.
r1.3
) and differences thereof (e.g. >
) at the bottom Topic TWikiHistory . { Edit Ref-By r1.3 > r1.2 > r1.1 }
Revision r1.3 1998/11/10 01:34 by TWiki:Main.PeterThoeny
Topic TWikiHistory . { Edit Ref-By r1.3 r1.2 r1.1 }
Revision r1.3 1998/10/26 01:34:00 by TWiki:Main.PeterThoeny
AaA
sequence, e.g. AaA1
is a valid TWikiTopics name, but not Aa1
.
%INCLUDE:"filename.ext"%
%TOPIC%
(Topic name), %WEB%
(web name), %SCRIPTURL%
(script URL), %DATE%
(current date), %WIKIWEBMASTER%
(Wiki webmaster address), %WIKIVERSION%
(Wiki version), %USERNAME%
(user name), %WIKIUSERNAME%
(Wiki user name).
PeterThoeny
instead of thoeny
in case the Wiki username exists. Implementation Automatic lookup of Wiki username in topic TWikiUsers.
Know.WebSeach
.
The typical TWiki development flow...
Related Topics: DeveloperDocumentationCategory
Use internationalised characters within WikiWords and attachment names
This topic addresses implemented UTF-8 support for URLs only. The overall plan for UTF-8 support for TWiki is described in TWiki:Codev.ProposedUTF8SupportForI18N.
To simplify use of internationalised characters within WikiWords and attachment names, TWiki now supports UTF-8 URLs, converting on-the-fly to virtually any character set, including ISO-8859-*, KOI8-R, EUC-JP, and so on.
Support for UTF-8 URL encoding avoids having to configure the browser to turn off this encoding in URLs (the default in Internet Explorer, Opera Browser and some Mozilla Browser URLs) and enables support of browsers where only this mode is supported (e.g. Opera Browser for Symbian smartphones). A non-UTF-8 site character set (e.g. ISO-8859-*) is still used within TWiki, and in fact pages are stored and viewed entirely in the site character set - the browser dynamically converts URLs from the site character set into UTF-8, and TWiki converts them back again.
System requirements are updated as follows:
The following 'non-ASCII-safe' character encodings are now excluded from use as the site character set, since they interfere with TWiki markup: ISO-2022-*, HZ-*, Shift-JIS, MS-Kanji, GB2312, GBK, GB18030, Johab and UHC. However, many multi-byte character sets work fine, e.g. EUC-JP, EUC-KR, EUC-TW, and EUC-CN. In addition, UTF-8 can already be used, with some limitations, for East Asian languages where EUC character encodings are not acceptable - see TWiki:Codev.ProposedUTF8SupportForI18N.
It's now possible to override the site character set defined in the {SiteLocale}
setting in configure - this enables you to have a slightly different spelling of the character set in the server locale (e.g. 'eucjp') and the HTTP header sent to the browser (e.g. 'euc-jp').
This feature should also support use of Mozilla Browser with TWiki:Codev.TWikiOnMainframe (as long as mainframe web server can convert or pass through UTF-8 URLs) - however, this specific combination is not tested. Other browser-server combinations should not have any problems.
Please note that use of UTF-8 as the site character set is not yet supported - see Phase 2 of TWiki:Codev.ProposedUTF8SupportForI18N for plans and work to date in this area.
This feature is complete in TWiki releases newer than February 2004.
Note for skin developers: is no longer required (TWiki:Plugins.InternationalisingYourSkin).
URLs are not allowed to contain non-ASCII (8th bit set) characters:
http://www.w3.org/TR/html4/appendix/notes.html#non-ascii-chars
The overall plan for UTF-8 support for TWiki is described in two phases in TWiki:/Codev.ProposedUTF8SupportForI18N - this page addresses the first phase, in which UTF-8 is supported for URLs only.
UTF-8 URL translation to virtually any character set is supported as of TWiki Release 01 Sep 2004, but full UTF-8 support (e.g. pages in UTF-8) is not supported yet - this will be phase 2.
The code automatically detects whether a URL is UTF-8 or not, taking care to avoid over-long and illegal UTF-8 encodings that could introduce TWiki:Codev.MajorSecurityProblemWithIncludeFileProcessing (tested against a comprehensive UTF-8 test file
, which IE 5.5 fails quite dangerously, and Opera Browser passes). Any non-ASCII URLs that are not valid UTF-8 are then assumed to be directly URL-encoded as a single-byte or multi-byte character set (as now), e.g. EUC-JP.
The main point is that you can use TWiki with international characters in WikiWords without changing your browser setup from the default, and you can also still use TWiki using non-UTF-8 URLs. This works on any Perl version from 5.005_03 onwards and corresponds to Phase 1 of TWiki:Codev.ProposedUTF8SupportForI18N. You can have different users using different URL formats transparently on the same server.
UTF-8 URLs are automatically converted to the current {Site}{Charset}, using modules such as CPAN:Encode
if needed.
TWiki generates the whole page in the site charset, e.g. ISO-8859-1 or EUC-JP, but the browser dynamically UTF-8 encodes the attachment's URL when it's used. Since Apache serves attachment downloads without TWiki being involved, TWiki's code can't do its UTF-8 decoding trick, so TWiki URL-encodes such URLs in ISO-8859-1 or whatever when generating the page, to bypass this URL encoding, ensuring that the URLs and filenames seen by Apache remain in the site charset.
TWiki:Codev.TWikiOnMainframe uses EBCDIC web servers that typically translate their output to ASCII, UTF-8 or ISO-8859-1 (and URLs in the other direction) since there are so few EBCDIC web browsers. Such web servers don't work with even ISO-8859-1 URLs if they are URL encoded, since the automated translation is bypassed for URL-encoded characters. For TWiki on Mainframe, TWiki assumes that the web server will automatically translate UTF-8 URLs into EBCDIC URLs, as long as URL encoding is turned off in TWiki pages.
It should work with TWiki:Codev.TWikiOnMainframe. Tested with IE 5.5, Opera 7.11 and Mozilla (Firebird 0.7).
Opera Browser on the P800 smartphone is working for page viewing but leads to corrupt page names when editing pages.
For up to date information see TWiki:Codev.EncodeURLsWithUTF8
Listing of CSS class names emitted from TWiki core code and standard plugins, for the Dakar release.
Most html elements generated by TWiki core code now have Cascading Style Sheet (CSS) tags. Skin builders and others who want to change the appearance of the default TWiki installation or any of the skins can use this document to see what styles can be created for these html elements.
twiki
. So: twikiAlert, twikiToc, etcetera. Remember that CSS class names are case sensitive - TWiki CSS uses lowercase tw
.
twiki
prefix to prevent undesired overriding effects.
A wide range of standard styles are used in the TWiki core code and topics, and more are used in plugins. The following is an exhaustive list of all styles defined by the Pattern skin. For the most part, the names are the only documentation of the purpose of the style. For more information on how these styles are used, read the code (sorry!)
.twikiAlert | Client.pm, Form.pm, Statistics.pm |
.twikiFirstCol | Render.pm |
.twikiForm | Render.pm |
.twikiNew | Changes.pm, Search.pm |
.twikiHelp | Changes.pm |
.twikiTopRow | Manage.pm |
.twikiSummary | Manage.pm |
.twikiGrayText | Manage.pm |
.twikiCheckBox | Manage.pm |
.twikiLink | Render.pm |
.twikiNewLink | Render.pm |
.twikiAnchorLink | Render.pm |
.twikiCurrentWebHomeLink | Render.pm |
.twikiCurrentTopicLink | Render.pm |
.twikiEmulatedLink | Preview.pm |
.twikiWebIndent | TWiki.pm |
.twikiEditFormDateField | Form.pm |
.twikiEditFormTextField | Form.pm |
.twikiEditFormLabelField | Form.pm |
.twikiEditFormTextAreaField | Form.pm |
.twikiEditFormCheckboxButton | Form.pm |
.twikiEditFormCheckboxField | Form.pm |
.twikiRadioButton | Form.pm |
.twikiEditFormRadioField | Form.pm |
.twikiEditFormError | Form.pm |
.twikiDiffTable | RDiff.pm |
.twikiDiffDeletedHeader | RDiff.pm |
.twikiDiffDeletedMarker | RDiff.pm |
.twikiDiffDeletedText | RDiff.pm |
.twikiDiffAddedHeader | RDiff.pm |
.twikiDiffAddedMarker | RDiff.pm |
.twikiDiffAddedText | RDiff.pm |
.twikiDiffChangedHeader | RDiff.pm |
.twikiDiffChangedText | RDiff.pm |
.twikiDiffUnchangedText | RDiff.pm |
.twikiDiffUnchangedTextContents | RDiff.pm |
.twikiDiffLineNumberHeader | RDiff.pm |
.twikiDiffDebug | RDiff.pm |
.twikiDiffDebugRight | RDiff.pm |
.twikiDiffDebugLeft | RDiff.pm |
.twikiToc | TWiki.pm |
.twikiTocTitle | TWiki.pm |
.twikiTable |
The table |
.twikiSortedCol |
A sorted column |
.twikiSortedAscendingCol |
Sorted column, ascending |
.twikiSortedDescendingCol |
Sorted column, descending |
.tableSortIcon |
The sort icon holder (span) |
.twikiFirstCol |
The first column |
.twikiTableEven |
Even numbered rows |
.twikiTableOdd |
Odd numbered rows |
.twikiTableCol + column number |
Unique column identifier, for instance: twikiTableCol0 |
.twikiTableRow + type + row number |
Unique row identifier, for instance: twikiTableRowdataBg0 |
.twikiPage | twiki.tmpl |
.twikiMiddleContainer | twiki.tmpl |
.twikiMain | twiki.tmpl |
.twikiFormTable | formtables.tmpl, form.tmpl |
.twikiFormTableHRow | formtables.tmpl, form.tmpl |
.twikiFormTableRow | formtables.tmpl |
.twikiFormTableFooter | formtables.tmpl |
.twikiAttachments | attachtables.tmpl |
.twikiEditForm | form.tmpl |
.twikiSubmit | Submit button |
.twikiSubmitDisabled | Disabled submit button |
.twikiInputField | |
.twikiInputFieldDisabled | |
.twikiInputFieldReadOnly | |
.twikiInputFieldFocus | For Internet Explorer that does not recognize the :focus pseudo class selector |
.twikiInputFieldBeforeFocus | for use with Javascript: the color of the input text when not clicked in the field |
.twikiSelect | Select dropdown menu |
.twikiTextarea | |
.twikiTextareaRawView | |
.twikiButton | |
.twikiFocus | Behaviour marker so a field can be given input focus |
.twikiLeft | |
.twikiRight | |
.twikiClear | |
.twikiHidden | |
.twikiSmall | |
.twikiBottomRow | |
.twikiSRAuthor | |
.twikiSRRev | |
.twikiPageForm | |
.twikiSeparator | |
.twikiAccessKey | |
.twikiLinkLabel | |
.twikiFormSteps | container around a form, such as the attach form: attach.tmpl |
.twikiFormStep | form row |
.twikiNoBreak | no break on whitespace |
.twikiMakeVisible | For elements that should only be visible with javascript on: default set to hidden, is made visible by javascript. Defaults to inline. |
.twikiMakeVisibleInline | For span elements that should only be visible with javascript on: default set to hidden, is made visible by javascript. |
.twikiMakeVisibleBlock | For div elements that should only be visible with javascript on: default set to hidden, is made visible by javascript. |
.twikiMakeHidden | For elements that should be hidden with javascript on: no default style, is made hidden by javascript. |
.twikiFooterNote | |
.twikiPopUp | Behaviour marker so a popup-window can be invoked |
.twikiContentHeader | container around optional html placed before topic text |
.twikiContentFooter | container around optional html placed after topic text |
#twikiLogin | CSS.pm |
.twikiFormSteps | CSS.pm |
.twikiFormStep | CSS.pm |
.twikiBroadcastMessage | TWikiPreferences |
#twikiSearchTable | WebSearch, WebSearchAdvanced |
#twikiLogin | login.pattern.tmpl |
.twikiImage | defined in PatternSkin | div creates border around enclosed image |
.twikiNotification | defined in PatternSkin | temporary alert, lighter than broadcast message |
.twikiUnvisited | defined in PatternSkin | link style that ignores the visited link state; useful for form links |
Practical introduction to CSS: http://www.w3.org/Style/LieBos2e/enter/
Related Topics: TWikiSkins, PatternSkin, DeveloperDocumentationCategory, AdminDocumentationCategory