none
[openafs-wiki.git] / TWiki / SourceCode.mdwn
1 # <a name="TWiki Source Code Packages"></a><a name=" TWiki Source Code Packages"></a> TWiki Source Code Packages
2
3 %X% This documentation is automatically generated from the `pod`, so it always matches the running code
4
5 <div>
6   <ul>
7     <li><a href="#TWiki::_AccessControlException"> TWiki::AccessControlException </a></li>
8     <li><a href="#TWiki::Access"> TWiki::Access </a></li>
9     <li><a href="#TWiki::Attach"> TWiki::Attach </a></li>
10     <li><a href="#TWiki::Attrs"> TWiki::Attrs </a></li>
11     <li><a href="#TWiki::Client::_ApacheLogin"> TWiki::Client::ApacheLogin </a></li>
12     <li><a href="#TWiki::Client"> TWiki::Client </a></li>
13     <li><a href="#ObjectData =twiki="> ObjectData twiki</a></li>
14     <li><a href="#TWiki::Client::_TemplateLogin"> TWiki::Client::TemplateLogin </a></li>
15     <li><a href="#TWiki::Compatibility"> TWiki::Compatibility </a></li>
16     <li><a href="#TWiki::Configure::Load"> TWiki::Configure::Load </a></li>
17     <li><a href="#Purpose"> Purpose</a></li>
18     <li><a href="#"> </a></li>
19     <li><a href="#TWiki"> TWiki </a></li>
20     <li><a href="#TWiki::Form"> TWiki::Form </a></li>
21     <li><a href="#TWiki::Func"> TWiki::Func </a></li>
22     <li><a href="#TWiki::_I18N"> TWiki::I18N </a></li>
23     <li><a href="#TWiki::_I18N::Extract"> TWiki::I18N::Extract </a></li>
24     <li><a href="#TWiki::If"> TWiki::If </a></li>
25     <li><a href="#TWiki::Merge"> TWiki::Merge </a></li>
26     <li><a href="#TWiki::Meta"> TWiki::Meta </a></li>
27     <li><a href="#TWiki::Net"> TWiki::Net </a></li>
28     <li><a href="#TWiki::_OopsException"> TWiki::OopsException </a></li>
29     <li><a href="#"> </a></li>
30     <li><a href="#TWiki::Plugins"> TWiki::Plugins </a></li>
31     <li><a href="#TWiki::Plurals"> TWiki::Plurals </a></li>
32     <li><a href="#TWiki::Prefs"> TWiki::Prefs </a></li>
33     <li><a href="#TWiki::Prefs::Parser"> TWiki::Prefs::Parser </a></li>
34     <li><a href="#TWiki::Prefs::_PrefsCache"> TWiki::Prefs::PrefsCache </a></li>
35     <li><a href="#TWiki::Render"> TWiki::Render </a></li>
36     <li><a href="#TWiki::Sandbox"> TWiki::Sandbox </a></li>
37     <li><a href="#TWiki::Search"> TWiki::Search </a></li>
38     <li><a href="#TWiki::Store"> TWiki::Store </a></li>
39     <li><a href="#TWiki::Store::_RcsFile"> TWiki::Store::RcsFile </a></li>
40     <li><a href="#TWiki::Store::_RcsLite"> TWiki::Store::RcsLite </a></li>
41     <li><a href="#File format"> File format</a></li>
42     <li><a href="#TWiki::Store::_RcsWrap"> TWiki::Store::RcsWrap </a></li>
43     <li><a href="#TWiki::Store::_SearchAlgorithms:"> TWiki::Store::SearchAlgorithms::Forking </a></li>
44     <li><a href="#search($searchString, $topics, $"> search($searchString, $topics, $options, $sDir) -&gt; \%seen</a></li>
45     <li><a href="#TWiki::Store::_SearchAlgorithms:"> TWiki::Store::SearchAlgorithms::Native </a></li>
46     <li><a href="#search($searchString, $topics, $"> search($searchString, $topics, $options, $sDir) -&gt; \%seen</a></li>
47     <li><a href="#TWiki::Store::_SearchAlgorithms:"> TWiki::Store::SearchAlgorithms::PurePerl </a></li>
48     <li><a href="#search($searchString, $topics, $"> search($searchString, $topics, $options, $sDir) -&gt; \%seen</a></li>
49     <li><a href="#TWiki::Templates"> TWiki::Templates </a></li>
50     <li><a href="#TWiki::Time"> TWiki::Time </a></li>
51     <li><a href="#TWiki::UI::_ChangeForm"> TWiki::UI::ChangeForm </a></li>
52     <li><a href="#TWiki::UI"> TWiki::UI </a></li>
53     <li><a href="#TWiki::UI::Edit"> TWiki::UI::Edit </a></li>
54     <li><a href="#TWiki::UI::Manage"> TWiki::UI::Manage </a></li>
55     <li><a href="#TWiki::UI::Oops"> TWiki::UI::Oops </a></li>
56     <li><a href="#TWiki::UI::RDiff"> TWiki::UI::RDiff </a></li>
57     <li><a href="#TWiki::UI::Register"> TWiki::UI::Register </a></li>
58     <li><a href="#TWiki::UI::Save"> TWiki::UI::Save </a></li>
59     <li><a href="#TWiki::UI::Search"> TWiki::UI::Search </a></li>
60     <li><a href="#TWiki::UI::Statistics"> TWiki::UI::Statistics </a></li>
61     <li><a href="#TWiki::UI::Upload"> TWiki::UI::Upload </a></li>
62     <li><a href="#TWiki::UI::View"> TWiki::UI::View </a></li>
63     <li><a href="#TWiki::User"> TWiki::User </a></li>
64     <li><a href="#TWiki::Users::_ApacheHtpasswdUse"> TWiki::Users::ApacheHtpasswdUser </a></li>
65     <li><a href="#TWiki::Users"> TWiki::Users </a></li>
66     <li><a href="#TWiki::Users::Password"> TWiki::Users::Password </a></li>
67     <li><a href="#TWiki::Users::_TWikiUserMapping"> TWiki::Users::TWikiUserMapping </a></li>
68   </ul>
69 </div>
70
71 ## <a name="TWiki::_AccessControlException"></a> [[TWiki::AccessControlException|Main/TWikiAccessControlExceptionDotPm]]
72
73 Exception used raise an access control violation.
74
75 This package doesn't smell
76
77 ## <a name="TWiki::Access"></a> [[TWiki::Access|Main/TWikiAccessDotPm]]
78
79 A singleton object of this class manages the access control database.
80
81 This package doesn't smell
82
83 ## <a name="TWiki::Attach"></a> [[TWiki::Attach|Main/TWikiAttachDotPm]]
84
85 A singleton object of this class is used to deal with attachments to topics.
86
87 This package has smell factor of **1**
88
89 ## <a name="TWiki::Attrs"></a> [[TWiki::Attrs|Main/TWikiAttrsDotPm]]
90
91 Class of attribute sets, designed for parsing and storing attribute values from a TWiki tag e.g. `%TAG{fred='bad' "sad" joe="mad"}%`
92
93 An attribute set is a map containing an entry for each parameter. The default parameter (unnamed quoted string) is named `_DEFAULT` in the map.
94
95 Attributes declared later in the string will override those of the same name defined earlier. The one exception to this is the \_DEFAULT key, where the _first_ instance of a setting is always taken.
96
97 As well as standard TWiki syntax (parameter values double-quoted) it also parses single-quoted values, unquoted spaceless values, spaces around the =, and commas as well as spaces separating values, though none of these alternatives is advertised in documentation and the extended syntax can be turned off by passing the 'strict' parameter to `new`.
98
99 This class replaces the old TWiki::extractNameValuePair and TWiki::extractParameters.
100
101 This package doesn't smell
102
103 ## <a name="TWiki::Client::_ApacheLogin"></a> [[TWiki::Client::ApacheLogin|Main/TWikiClientApacheLoginDotPm]]
104
105 This is login manager that you can specify in the security setup section of [configure](http://www.dementia.org/twiki/configure). It instructs TWiki to cooperate with your web server (typically Apache) to require authentication information (username &amp; password) from users. It requires that you configure your web server to demand authentication for scripts named "login" and anything ending in "auth". The latter should be symlinks to existing scripts; e.g., `viewauth -> view`, `editauth -> edit`, and so on.
106
107 See also [[TWikiUserAuthentication]].
108
109 Subclass of TWiki::Client; see that class for documentation of the methods of this class.
110
111 This package doesn't smell
112
113 ## <a name="TWiki::Client"></a> [[TWiki::Client|Main/TWikiClientDotPm]]
114
115 The package is also a Factory for login managers and also the base class for all login managers.
116
117 On it's own, an object of this class is used when you specify 'none' in the security setup section of [configure](http://www.dementia.org/twiki/configure). When it is used, logins are not supported. If you want to authenticate users then you should consider [[TemplateLogin]] or [[ApacheLogin]], which are subclasses of this class.
118
119 If you are building a new login manager, then you should write a new subclass of this class, implementing the methods marked as **VIRTUAL**. There are already examples in the `lib/TWiki/Client` directory.
120
121 The class has extensive tracing, which is enabled by $TWiki::cfg\{Trace\}\{Client.pm\}. The tracing is done in such a way as to let the perl optimiser optimise out the trace function as a no-op if tracing is disabled.
122
123 Here's an overview of how it works:
124
125 Early in TWiki::new, the login manager is created. The creation of the login manager does two things:
126
127 1. If sessions are in use, it loads CGI::Session but doesn't initialise the session yet.
128 2. Creates the login manager object
129
130 Slightly later in TWiki::new, loginManager-&gt;loadSession is called.
131
132 1. Calls loginManager-&gt;getUser to get the username **before** the session is created
133   - TWiki::Client::ApacheLogin looks at REMOTE\_USER
134   - TWiki::Client::TemplateLogin just returns undef
135 2. reads the TWIKISID cookie to get the SID (or the TWIKISID parameters in the CGI query if cookies aren't available, or [[IP2SID]] mapping if that's enabled).
136 3. Creates the CGI::Session object, and the session is thereby read.
137 4. If the username still isn't known, reads it from the cookie. Thus TWiki::Client::ApacheLogin overrides the cookie using REMOTE\_USER, and TWiki::Client::TemplateLogin **always** uses the session.
138
139 Later again in TWiki::new, plugins are given a chance to **override** the username found from the loginManager.
140
141 The last step in TWiki::new is to find the user, using whatever user mapping manager is in place.
142
143 ## <a name="ObjectData &lt;code&gt;twiki="></a> [[ObjectData]] =twiki
144
145 The TWiki object this login manager is attached to.
146
147 This package has smell factor of **2**
148
149 ## <a name="TWiki::Client::_TemplateLogin"></a> [[TWiki::Client::TemplateLogin|Main/TWikiClientTemplateLoginDotPm]]
150
151 This is a login manager that you can specify in the security setup section of [configure](http://www.dementia.org/twiki/configure). It provides users with a template-based form to enter usernames and passwords, and works with the [[PasswordManager]] that you specify to verify those passwords.
152
153 Subclass of TWiki::Client; see that class for documentation of the methods of this class.
154
155 This package has smell factor of **1**
156
157 ## <a name="TWiki::Compatibility"></a> [[TWiki::Compatibility|Main/TWikiCompatibilityDotPm]]
158
159 Support for compatibility with old TWiki versions. Packaged separately because 99.999999% of the time this won't be needed.
160
161 This package has smell factor of **2**
162
163 ## <a name="TWiki::Configure::Load"></a> [[TWiki::Configure::Load|Main/TWikiConfigureLoadDotPm]]
164
165 ## <a name="Purpose"></a> Purpose
166
167 This module consists of just a single subroutine `readConfig`. It allows to safely modify configuration variables _for one single run_ without affecting normal TWiki operation.
168
169 This package doesn't smell
170
171 ## <> \[[TWikiConfigureUIsEXTENDDotPm]\[]]
172
173 This package has smell factor of **1**
174
175 ## <a name="TWiki"></a> [[TWiki|Main/TWikiDotPm]]
176
177 TWiki operates by creating a singleton object (known as the Session object) that acts as a point of reference for all the different modules in the system. This package is the class for this singleton, and also contains the vast bulk of the basic constants and the per- site configuration mechanisms.
178
179 Global variables are avoided wherever possible to avoid problems with CGI accelerators such as mod\_perl.
180
181 This package has smell factor of **25**
182
183 ## <a name="TWiki::Form"></a> [[TWiki::Form|Main/TWikiFormDotPm]]
184
185 Object representing a single form definition.
186
187 This package has smell factor of **9**
188
189 ## <a name="TWiki::Func"></a> [[TWiki::Func|Main/TWikiFuncDotPm]]
190
191 _Official list of stable TWiki functions for Plugin developers_
192
193 This module defines official functions that [[Plugins|TWiki/TWikiPlugins]] can use to interact with the TWiki engine and content.
194
195 Refer to [[EmptyPlugin]] and lib/TWiki/Plugins/EmptyPlugin.pm for a template Plugin and documentation on how to write a Plugin.
196
197 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.
198
199 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.
200
201 The version of the TWiki::Func module is defined by the VERSION number of the TWiki::Plugins module, currently 1.11. This can be shown by the `%PLUGINVERSION%` variable. The 'Since' field in the function documentation refers to the VERSION number and the date that the function was addded.
202
203 **_Note:_** Beware! These methods should only ever be called from the context of a TWiki Plugin. They require a Plugins SESSION context to be established before they are called, and will not work if simply called from another TWiki module. For example,
204
205     use TWiki;
206     print TWiki::Func::getSkin(),"\n";
207
208 will fail with `Can't call method "getSkin" on an undefined value at TWiki/Func.pm line 83`.
209
210 If you want to call the methods outside the context of a plugin, you can create a Plugins SESSION object. For example, the script:
211
212     use TWiki:
213     $TWiki::Plugins::SESSION = new TWiki();
214     print TWiki::Func::getSkin(),"\n";
215
216 will work happily.
217
218 This package has smell factor of **1**
219
220 ## <a name="TWiki::_I18N"></a> [[TWiki::I18N|Main/TWikiI18NDotPm]]
221
222 Support for strings translation and language detection.
223
224 This package has smell factor of **2**
225
226 ## <a name="TWiki::_I18N::Extract"></a> [[TWiki::I18N::Extract|Main/TWikiI18NExtractDotPm]]
227
228 Support translatable strings extraction from TWiki topics and templates. Depends on Locale::Maketext::Extract (part of CPAN::Locale::Maketext::Lexicon).
229
230 This package has smell factor of **1**
231
232 ## <a name="TWiki::If"></a> [[TWiki::If|Main/TWikiIfDotPm]]
233
234 Support for the conditions in %IF\{\} statements. Basically a simple stack-based parser for infix expressions that generates a parse tree that can subsequently be evaluated.
235
236 This package doesn't smell
237
238 ## <a name="TWiki::Merge"></a> [[TWiki::Merge|Main/TWikiMergeDotPm]]
239
240 Support for merging strings
241
242 This package has smell factor of **1**
243
244 ## <a name="TWiki::Meta"></a> [[TWiki::Meta|Main/TWikiMetaDotPm]]
245
246 Meta-data handling.
247
248 A meta-data object is a hash of different types of meta-data (keyed on the type, such as 'FIELD' and 'TOPICINFO').
249
250 Each entry in the hash is an array, where each entry in the array contains another hash of the key=value pairs, corresponding to a single meta-datum.
251
252 If there may be multiple entries of the same top-level type (i.e. for FIELD and FILEATTACHMENT) then the array hash multiple entries. These types are referred to as "keyed" types. The array entries are keyed with the attribute 'name' which must be in each entry in the array.
253
254 For unkeyed types, the array has only one entry.
255
256 The module knows nothing about how meta-data is stored. That is entirely the responsibility of the Store module.
257
258 Meta-data objects are created by the Store engine when topics are read. They are populated using the `put` method.
259
260 This package has smell factor of **3**
261
262 ## <a name="TWiki::Net"></a> [[TWiki::Net|Main/TWikiNetDotPm]]
263
264 Object that brokers access to network resources.
265
266 This package has smell factor of **2**
267
268 ## <a name="TWiki::_OopsException"></a> [[TWiki::OopsException|Main/TWikiOopsExceptionDotPm]]
269
270 Exception used to raise a request to redirect to an Oops URL. An [[OopsException]] thrown anywhere in the code will redirect the browser to a url based on the `oops` script. `oops` requires a `template` parameter, that is the name of a template file from the `templates` directory. This file will be expanded and the parameter values passed to the exception instantiated. The result will be shown in the browser.
271
272 This package doesn't smell
273
274 ## <> \[[TWikiPluginDotPm]\[]]
275
276 This package has smell factor of **2**
277
278 ## <a name="TWiki::Plugins"></a> [[TWiki::Plugins|Main/TWikiPluginsDotPm]]
279
280 This module defines the singleton object that handles Plugins loading, initialization and execution.
281
282 This class uses Chain of Responsibility (GOF) pattern to dispatch handler calls to registered plugins.
283
284 This package doesn't smell
285
286 ## <a name="TWiki::Plurals"></a> [[TWiki::Plurals|Main/TWikiPluralsDotPm]]
287
288 Handle conversion of plural topic names to singular form.
289
290 This package has smell factor of **3**
291
292 ## <a name="TWiki::Prefs"></a> [[TWiki::Prefs|Main/TWikiPrefsDotPm]]
293
294 The Prefs class is a singleton that implements management of preferences. It uses a stack of TWiki::Prefs::PrefsCache objects to store the preferences for global, web, user and topic contexts, and provides the means to look up preferences in these.
295
296 Preferences from different places stack on top of each other, so there are global preferences, then site, then web (and subweb and subsubweb), then topic, included topic and so on. Each level of the stack is tagged with a type identifier.
297
298 The module also maintains a separate of the preferences found in every topic and web it reads. This supports the lookup of preferences for webs and topics that are not on the stack, and must not be chained in (you can't allow a user to override protections from their home topic!)
299
300 This package doesn't smell
301
302 ## <a name="TWiki::Prefs::Parser"></a> [[TWiki::Prefs::Parser|Main/TWikiPrefsParserDotPm]]
303
304 This Prefs-internal class is used to parse \* Set and \* Local statements from arbitrary text, and extract settings from meta objects. It is used by [[TopicPrefs]] to parse preference settings from topics.
305
306 This class does no validation or duplicate-checking on the settings; it simply returns the recognized settings in the order it sees them in.
307
308 This package has smell factor of **1**
309
310 ## <a name="TWiki::Prefs::_PrefsCache"></a> [[TWiki::Prefs::PrefsCache|Main/TWikiPrefsPrefsCacheDotPm]]
311
312 The [[PrefsCache]] package holds a cache of topics that have been read in, using the [[TopicPrefs]] class. These functions manage that cache.
313
314 We maintain 2 hashes of values:
315
316 - \{locals\} Contains all locals at this level. Locals are values that only apply when the current topic is the topic where the local is defined. The variable names are decorated with the locality where they apply.
317 - \{values\} contains all sets, locals, and all values inherited from the parent level
318
319 As each cache level is built, the values are copied down from the parent cache level. This sounds monstrously inefficient, but in fact perl does this a lot better than doing a multi-level lookup when a value is referenced. This is especially important when many prefs lookups may be done in a session, for example when searching.
320
321 This package doesn't smell
322
323 ## <a name="TWiki::Render"></a> [[TWiki::Render|Main/TWikiRenderDotPm]]
324
325 This module provides most of the actual HTML rendering code in TWiki.
326
327 This package has smell factor of **19**
328
329 ## <a name="TWiki::Sandbox"></a> [[TWiki::Sandbox|Main/TWikiSandboxDotPm]]
330
331 This object provides an interface to the outside world. All calls to system functions, or handling of file names, should be brokered by this object.
332
333 This package has smell factor of **3**
334
335 ## <a name="TWiki::Search"></a> [[TWiki::Search|Main/TWikiSearchDotPm]]
336
337 This module implements all the search functionality.
338
339 This package has smell factor of **20**
340
341 ## <a name="TWiki::Store"></a> [[TWiki::Store|Main/TWikiStoreDotPm]]
342
343 This module hosts the generic storage backend. This module provides the interface layer between the "real" store provider - which is hidden behind a handler - and the rest of the system. it is responsible for checking for topic existance, access permissions, and all the other general admin tasks that are common to all store implementations.
344
345 This module knows nothing about how the data is actually _stored_ - that knowledge is entirely encapsulated in the handlers.
346
347 The general contract for methods in the class requires that errors are signalled using exceptions. TWiki::AccessControlException is used for access control exceptions, and Error::Simple for all other types of error.
348
349 This package has smell factor of **17**
350
351 ## <a name="TWiki::Store::_RcsFile"></a> [[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]]
352
353 This class is PACKAGE PRIVATE to Store, and should never be used from anywhere else. Base class of implementations of stores that manipulate RCS format files.
354
355 The general contract of the methods on this class and its subclasses calls for errors to be signalled by Error::Simple exceptions.
356
357 Refer to Store.pm for models of usage.
358
359 This package has smell factor of **9**
360
361 ## <a name="TWiki::Store::_RcsLite"></a> [[TWiki::Store::RcsLite|Main/TWikiStoreRcsLiteDotPm]]
362
363 This package does not publish any methods. It implements the virtual methods of the [[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]] superclass.
364
365 Simple replacement for RCS. Doesn't support:
366
367 - branches
368 - locking
369
370 Neither of which are used (or needed) by TWiki.
371
372 This module doesn't know anything about the content of the topic
373
374 There is one of these object for each file stored under RCSLite.
375
376 This object is PACKAGE PRIVATE to Store, and should NEVER be used from anywhere else.
377
378 FIXME:
379
380 - need to tidy up dealing with \\n for differences
381 - still have difficulty on line ending at end of sequences, consequence of doing a line based diff
382
383 ## <a name="File format"></a> File format
384
385     rcstext    ::=  admin {delta}* desc {deltatext}*
386     admin      ::=  head {num};
387                     { branch   {num}; }
388                     access {id}*;
389                     symbols {sym : num}*;
390                     locks {id : num}*;  {strict  ;}
391                     { comment  {string}; }
392                     { expand   {string}; }
393                     { newphrase }*
394     delta      ::=  num
395                     date num;
396                     author id;
397                     state {id};
398                     branches {num}*;
399                     next {num};
400                     { newphrase }*
401     desc       ::=  desc string
402     deltatext  ::=  num
403                     log string
404                     { newphrase }*
405                     text string
406     num        ::=  {digit | .}+
407     digit      ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
408     id         ::=  {num} idchar {idchar | num }*
409     sym        ::=  {digit}* idchar {idchar | digit }*
410     idchar     ::=  any visible graphic character except special
411     special    ::=  $ | , | . | : | ; | @
412     string     ::=  @{any character, with @ doubled}*@
413     newphrase  ::=  id word* ;
414     word       ::=  id | num | string | :
415
416 Identifiers are case sensitive. Keywords are in lower case only. The sets of keywords and identifiers can overlap. In most environments RCS uses the ISO 8859/1 encoding: visible graphic characters are codes 041-176 and 240-377, and white space characters are codes 010-015 and 040.
417
418 Dates, which appear after the date keyword, are of the form Y.mm.dd.hh.mm.ss, where Y is the year, mm the month (01-12), dd the day (01-31), hh the hour (00-23), mm the minute (00-59), and ss the second (00-60). Y contains just the last two digits of the year for years from 1900 through 1999, and all the digits of years thereafter. Dates use the Gregorian calendar; times use UTC.
419
420 The newphrase productions in the grammar are reserved for future extensions to the format of RCS files. No newphrase will begin with any keyword already in use.
421
422 Revisions consist of a sequence of 'a' and 'd' edits that need to be applied to rev N+1 to get rev N. Each edit has an offset (number of lines from start) and length (number of lines). For 'a', the edit is followed by length lines (the lines to be inserted in the text). For example:
423
424 d1 3 means "delete three lines starting with line 1 a4 2 means "insert two lines at line 4' xxxxxx is the new line 4 yyyyyy is the new line 5
425
426 This package has smell factor of **2**
427
428 ## <a name="TWiki::Store::_RcsWrap"></a> [[TWiki::Store::RcsWrap|Main/TWikiStoreRcsWrapDotPm]]
429
430 This package does not publish any methods. It implements the virtual methods of the [[TWiki::Store::RcsFile|Main/TWikiStoreRcsFileDotPm]] superclass.
431
432 Wrapper around the RCS commands required by TWiki. There is one of these object for each file stored under RCS.
433
434 This package has smell factor of **2**
435
436 ## <a name="TWiki::Store::_SearchAlgorithms:"></a> [[TWiki::Store::SearchAlgorithms::Forking|Main/TWikiStoreSearchAlgorithmsForkingDotPm]]
437
438 Forking implementation of the RCS cache search.
439
440 ## <a name="search($searchString, $topics, $"></a> search($searchString, $topics, $options, $sDir) -&gt; \\%seen
441
442 Search .txt files in $dir for $string. See [[RcsFile]]::searchInWebContent for details.
443
444 This package has smell factor of **2**
445
446 ## <a name="TWiki::Store::_SearchAlgorithms:"></a> [[TWiki::Store::SearchAlgorithms::Native|Main/TWikiStoreSearchAlgorithmsNativeDotPm]]
447
448 Native implementation of the RCS cache search. Requires tools/native\_search to be built and installed.
449
450 ## <a name="search($searchString, $topics, $"></a> search($searchString, $topics, $options, $sDir) -&gt; \\%seen
451
452 Search .txt files in $dir for $string. See [[RcsFile]]::searchInWebContent for details.
453
454 Rude and crude, this makes no attempt to handle UTF-8.
455
456 This package doesn't smell
457
458 ## <a name="TWiki::Store::_SearchAlgorithms:"></a> [[TWiki::Store::SearchAlgorithms::PurePerl|Main/TWikiStoreSearchAlgorithmsPurePerlDotPm]]
459
460 Pure perl implementation of the RCS cache search.
461
462 ## <a name="search($searchString, $topics, $"></a> search($searchString, $topics, $options, $sDir) -&gt; \\%seen
463
464 Search .txt files in $dir for $string. See [[RcsFile]]::searchInWebContent for details.
465
466 This package doesn't smell
467
468 ## <a name="TWiki::Templates"></a> [[TWiki::Templates|Main/TWikiTemplatesDotPm]]
469
470 Support for the TWiki template language.
471
472 This package has smell factor of **2**
473
474 ## <a name="TWiki::Time"></a> [[TWiki::Time|Main/TWikiTimeDotPm]]
475
476 Time handling functions.
477
478 This package has smell factor of **7**
479
480 ## <a name="TWiki::UI::_ChangeForm"></a> [[TWiki::UI::ChangeForm|Main/TWikiUIChangeFormDotPm]]
481
482 Service functions used by the UI packages
483
484 This package doesn't smell
485
486 ## <a name="TWiki::UI"></a> [[TWiki::UI|Main/TWikiUIDotPm]]
487
488 Service functions used by the UI packages
489
490 This package doesn't smell
491
492 ## <a name="TWiki::UI::Edit"></a> [[TWiki::UI::Edit|Main/TWikiUIEditDotPm]]
493
494 Edit command handler
495
496 This package has smell factor of **1**
497
498 ## <a name="TWiki::UI::Manage"></a> [[TWiki::UI::Manage|Main/TWikiUIManageDotPm]]
499
500 UI functions for web, topic and user management
501
502 This package has smell factor of **5**
503
504 ## <a name="TWiki::UI::Oops"></a> [[TWiki::UI::Oops|Main/TWikiUIOopsDotPm]]
505
506 UI delegate for oops function
507
508 This package doesn't smell
509
510 ## <a name="TWiki::UI::RDiff"></a> [[TWiki::UI::RDiff|Main/TWikiUIRDiffDotPm]]
511
512 UI functions for diffing.
513
514 This package has smell factor of **12**
515
516 ## <a name="TWiki::UI::Register"></a> [[TWiki::UI::Register|Main/TWikiUIRegisterDotPm]]
517
518 User registration handling.
519
520 This package has smell factor of **19**
521
522 ## <a name="TWiki::UI::Save"></a> [[TWiki::UI::Save|Main/TWikiUISaveDotPm]]
523
524 UI delegate for save function
525
526 This package has smell factor of **1**
527
528 ## <a name="TWiki::UI::Search"></a> [[TWiki::UI::Search|Main/TWikiUISearchDotPm]]
529
530 UI functions for searching.
531
532 This package has smell factor of **3**
533
534 ## <a name="TWiki::UI::Statistics"></a> [[TWiki::UI::Statistics|Main/TWikiUIStatisticsDotPm]]
535
536 Statistics extraction and presentation
537
538 This package has smell factor of **4**
539
540 ## <a name="TWiki::UI::Upload"></a> [[TWiki::UI::Upload|Main/TWikiUIUploadDotPm]]
541
542 UI delegate for attachment management functions
543
544 This package has smell factor of **3**
545
546 ## <a name="TWiki::UI::View"></a> [[TWiki::UI::View|Main/TWikiUIViewDotPm]]
547
548 UI delegate for view function
549
550 This package has smell factor of **2**
551
552 ## <a name="TWiki::User"></a> [[TWiki::User|Main/TWikiUserDotPm]]
553
554 A User object is an internal representation of a user in the real world. The object knows about users having login names, wiki names, personal topics, and email addresses.
555
556 This package has smell factor of **4**
557
558 ## <a name="TWiki::Users::_ApacheHtpasswdUse"></a> [[TWiki::Users::ApacheHtpasswdUser|Main/TWikiUsersApacheHtpasswdUserDotPm]]
559
560 Password manager that uses Apache::HtPasswd to manage users and passwords.
561
562 Subclass of [[ TWiki::Users::Password |Main/TWikiUsersPasswordDotPm]]. See documentation of that class for descriptions of the methods of this class.
563
564 Duplicates functionality of [[ =TWiki::Users::HtPasswdUser=|Main/TWikiUsersHtPasswdUserDotPm]]; provided mainly as an example of how to write a new password manager.
565
566 This package doesn't smell
567
568 ## <a name="TWiki::Users"></a> [[TWiki::Users|Main/TWikiUsersDotPm]]
569
570 Singleton object that handles mapping of users to wikinames and vice versa, and user authentication checking.
571
572 This package has smell factor of **2**
573
574 ## <a name="TWiki::Users::Password"></a> [[TWiki::Users::Password|Main/TWikiUsersPasswordDotPm]]
575
576 Base class of all password handlers. Default behaviour is no passwords, so anyone can be anyone they like.
577
578 The methods of this class should be overridded by subclasses that want to implement other password handling methods.
579
580 This package has smell factor of **1**
581
582 ## <a name="TWiki::Users::_TWikiUserMapping"></a> [[TWiki::Users::TWikiUserMapping|Main/TWikiUsersTWikiUserMappingDotPm]]
583
584 User mapping is the process by which TWiki maps from a username (a login name) to a wikiname and back. It is also where groups are maintained.
585
586 By default TWiki maintains user topics and group topics in the Main that define users and group. These topics are
587
588 - TWikiUsers - stores a mapping from usernames to TWiki names
589 - WikiName - for each user, stores info about the user
590 - GroupNameGroup - for each group, a topic ending with "Group" stores a list of users who are part of that group.
591
592 Many sites will want to override this behaviour, for example to get users and groups from a corporate database.
593
594 This class implements the basic TWiki behaviour using topics to store users, but is also designed to be subclassed so that other services can be used.
595
596 Subclasses should be named 'XxxxUserMapping' so that configure can find them.
597
598 **All** methods in this class should be implemented by subclasses.
599
600 This package has smell factor of **3**
601
602 There were a total of **200** smells