data/TWiki/SourceCode.txt
changeset 0 414e01d06fd5
child 1 e2915a7cbdfa
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/data/TWiki/SourceCode.txt	Sat Jan 26 15:50:53 2008 +0100
     1.3 @@ -0,0 +1,1149 @@
     1.4 +---+!! TWiki Source Code Packages
     1.5 +
     1.6 +%X% This documentation is automatically generated from the =pod=, so it always matches the running code
     1.7 +
     1.8 +%TOC%
     1.9 +
    1.10 +---++ [[CGISessionDotPm][]] 
    1.11 +
    1.12 +
    1.13 +This package doesn't smell
    1.14 +
    1.15 +---++ [[CGISessionDriverDBIDotPm][]] 
    1.16 +
    1.17 +
    1.18 +This package doesn't smell
    1.19 +
    1.20 +---++ [[CGISessionDriverDb_fileDotPm][]] 
    1.21 +
    1.22 +
    1.23 +This package doesn't smell
    1.24 +
    1.25 +---++ [[CGISessionDriverDotPm][]] 
    1.26 +
    1.27 +
    1.28 +This package doesn't smell
    1.29 +
    1.30 +---++ [[CGISessionDriverFileDotPm][]] 
    1.31 +
    1.32 +
    1.33 +This package doesn't smell
    1.34 +
    1.35 +---++ [[CGISessionDriverMysqlDotPm][]] 
    1.36 +
    1.37 +
    1.38 +This package doesn't smell
    1.39 +
    1.40 +---++ [[CGISessionDriverPostgresqlDotPm][]] 
    1.41 +
    1.42 +
    1.43 +This package doesn't smell
    1.44 +
    1.45 +---++ [[CGISessionDriverSqliteDotPm][]] 
    1.46 +
    1.47 +
    1.48 +This package doesn't smell
    1.49 +
    1.50 +---++ [[CGISessionErrorHandlerDotPm][]] 
    1.51 +
    1.52 +
    1.53 +This package doesn't smell
    1.54 +
    1.55 +---++ [[CGISessionIDIncrDotPm][]] 
    1.56 +
    1.57 +
    1.58 +This package doesn't smell
    1.59 +
    1.60 +---++ [[CGISessionIDMd5DotPm][]] 
    1.61 +
    1.62 +
    1.63 +This package doesn't smell
    1.64 +
    1.65 +---++ [[CGISessionSerializeDefaultDotPm][]] 
    1.66 +
    1.67 +
    1.68 +This package doesn't smell
    1.69 +
    1.70 +---++ [[CGISessionSerializeFreezethawDotPm][]] 
    1.71 +
    1.72 +
    1.73 +This package doesn't smell
    1.74 +
    1.75 +---++ [[CGISessionSerializeJsonDotPm][]] 
    1.76 +
    1.77 +
    1.78 +This package doesn't smell
    1.79 +
    1.80 +---++ [[CGISessionSerializeStorableDotPm][]] 
    1.81 +
    1.82 +
    1.83 +This package doesn't smell
    1.84 +
    1.85 +---++ [[CGISessionSerializeYamlDotPm][]] 
    1.86 +
    1.87 +
    1.88 +This package doesn't smell
    1.89 +
    1.90 +---++ [[CGISessionTutorialDotPm][]] 
    1.91 +
    1.92 +
    1.93 +This package doesn't smell
    1.94 +
    1.95 +---++ [[MonitorDotPm][]] 
    1.96 +
    1.97 +
    1.98 +This package doesn't smell
    1.99 +
   1.100 +---++ [[TWikiAccessControlExceptionDotPm][TWiki::AccessControlException]] 
   1.101 +
   1.102 +Exception used raise an access control violation. This exception has the
   1.103 +following fields:
   1.104 +   * =web= - the web which was being accessed
   1.105 +   * =topic= - the topic being accessed (if any)
   1.106 +   * =user= - canonical username of the person doing the accessing. Use
   1.107 +   the methods of the TWiki::Users class to get more information about the
   1.108 +   user.
   1.109 +   * =mode= - the access mode e.g. CHANGE, VIEW etc
   1.110 +   * =reason= a text string giving the reason for the refusal.
   1.111 +
   1.112 +The exception may be thrown by plugins. If a plugin throws the exception, it
   1.113 +will normally be caught and the browser redirected to a login screen (if the
   1.114 +user is not logged in) or reported (if they are and just don't have access).
   1.115 +
   1.116 +
   1.117 +
   1.118 +This package doesn't smell
   1.119 +
   1.120 +---++ [[TWikiAccessDotPm][TWiki::Access]] 
   1.121 +
   1.122 +A singleton object of this class manages the access control database.
   1.123 +
   1.124 +
   1.125 +
   1.126 +This package doesn't smell
   1.127 +
   1.128 +---++ [[TWikiAggregateIteratorDotPm][TWiki::AggregateIterator]] 
   1.129 +
   1.130 +combine multiple iterators
   1.131 +
   1.132 +
   1.133 +
   1.134 +This package doesn't smell
   1.135 +
   1.136 +---++ [[TWikiAttachDotPm][TWiki::Attach]] 
   1.137 +
   1.138 +A singleton object of this class is used to deal with attachments to topics.
   1.139 +
   1.140 +
   1.141 +
   1.142 +This package doesn't smell
   1.143 +
   1.144 +---++ [[TWikiAttrsDotPm][TWiki::Attrs]] 
   1.145 +
   1.146 +Class of attribute sets, designed for parsing and storing attribute values
   1.147 +from a TWiki tag e.g. =%<nop>TAG{"joe" fred="bad" joe="mad"}%=
   1.148 +
   1.149 +An attribute set is a hash containing an entry for each parameter. The
   1.150 +default parameter (unnamed quoted string) is named <code>_<nop>DEFAULT</code> in the hash.
   1.151 +
   1.152 +Attributes declared later in the string will override those of the same
   1.153 +name defined earlier. The one exception to this is the _DEFAULT key, where
   1.154 +the _first_ instance is always taken.
   1.155 +
   1.156 +As well as the default TWiki syntax (parameter values double-quoted)
   1.157 +this class also parses single-quoted values, unquoted spaceless
   1.158 +values, spaces around the =, and commas as well as spaces separating values.
   1.159 +The extended syntax has to be enabled by passing the =$friendly= parameter
   1.160 +to =new=.
   1.161 +
   1.162 +
   1.163 +
   1.164 +This package doesn't smell
   1.165 +
   1.166 +---++ [[TWikiCompatibilityDotPm][TWiki::Compatibility]] 
   1.167 +
   1.168 +Support for compatibility with old TWiki versions. Packaged
   1.169 +separately because 99.999999% of the time this won't be needed.
   1.170 +
   1.171 +
   1.172 +
   1.173 +This package has smell factor of *2*
   1.174 +
   1.175 +---++ [[TWikiConfigureLoadDotPm][TWiki::Configure::Load]] 
   1.176 +
   1.177 +---++ Purpose
   1.178 +
   1.179 +This module consists of just a single subroutine =readConfig=.  It allows to
   1.180 +safely modify configuration variables _for one single run_ without affecting
   1.181 +normal TWiki operation.
   1.182 +
   1.183 +
   1.184 +
   1.185 +This package doesn't smell
   1.186 +
   1.187 +---++ [[TWikiConfigureUIsEXTENDDotPm][]] 
   1.188 +
   1.189 +
   1.190 +This package has smell factor of *1*
   1.191 +
   1.192 +---++ [[TWikiDotPm][TWiki]] 
   1.193 +
   1.194 +TWiki operates by creating a singleton object (known as the Session
   1.195 +object) that acts as a point of reference for all the different
   1.196 +modules in the system. This package is the class for this singleton,
   1.197 +and also contains the vast bulk of the basic constants and the per-
   1.198 +site configuration mechanisms.
   1.199 +
   1.200 +Global variables are avoided wherever possible to avoid problems
   1.201 +with CGI accelerators such as mod_perl.
   1.202 +
   1.203 +---++ Public Data members
   1.204 +   * =cgiQuery=         Pointer to the CGI::
   1.205 +   * =context=          Hash of context ids
   1.206 +   * moved: =loginManager=     TWiki::LoginManager singleton (moved to TWiki::Users)
   1.207 +   * =plugins=          TWiki::Plugins singleton
   1.208 +   * =prefs=            TWiki::Prefs singleton
   1.209 +   * =remoteUser=       Login ID when using ApacheLogin. Maintained for
   1.210 +                        compatibility only, do not use.
   1.211 +   * =requestedWebName= Name of web found in URL path or =web= URL parameter
   1.212 +   * =sandbox=          TWiki::Sandbox singleton
   1.213 +   * =scriptUrlPath=    URL path to the current script. May be dynamically
   1.214 +                        extracted from the URL path if {GetScriptUrlFromCgi}.
   1.215 +                        Only required to support {GetScriptUrlFromCgi} and
   1.216 +                        not consistently used. Avoid.
   1.217 +   * =security=         TWiki::Access singleton
   1.218 +   * =SESSION_TAGS=     Hash of TWiki variables whose value is specific to
   1.219 +                        the current CGI request.
   1.220 +   * =store=            TWiki::Store singleton
   1.221 +   * =topicName=        Name of topic found in URL path or =topic= URL
   1.222 +                        parameter
   1.223 +   * =urlHost=          Host part of the URL (including the protocol)
   1.224 +                        determined during intialisation and defaulting to
   1.225 +                        {DefaultUrlHost}
   1.226 +   * =user=             Unique user ID of logged-in user
   1.227 +   * =users=            TWiki::Users singleton
   1.228 +   * =webName=          Name of web found in URL path, or =web= URL parameter,
   1.229 +                        or {UsersWebName}
   1.230 +
   1.231 +
   1.232 +
   1.233 +This package has smell factor of *32*
   1.234 +
   1.235 +---++ [[TWikiFormDotPm][TWiki::Form]] 
   1.236 +
   1.237 +Object representing a single form definition.
   1.238 +
   1.239 +Form definitions are mainly used to control rendering of a form for
   1.240 +editing, though there is some application login there that handles
   1.241 +transferring values between edits and saves.
   1.242 +
   1.243 +A form definition consists of a TWiki::Form object, which has a list
   1.244 +of field definitions. Each field definition is an object of a type
   1.245 +derived from TWiki::Form::FieldDefinition. These objects are responsible
   1.246 +for the actual syntax and semantics of the field type. Form definitions
   1.247 +are parsed from TWiki tables, and the types are mapped by name to a
   1.248 +class declared in TWiki::Form::* - for example, the =text= type is mapped
   1.249 +to =TWiki::Form::Text= and the =checkbox= type to =TWiki::Form::Checkbox=.
   1.250 +
   1.251 +The =TWiki::Form::FieldDefinition= class declares default behaviours for
   1.252 +types that accept a single value in their definitions. The
   1.253 +=TWiki::Form::ListFieldDefinition= extends this for types that have lists
   1.254 +of possible values.
   1.255 +
   1.256 +
   1.257 +
   1.258 +This package has smell factor of *4*
   1.259 +
   1.260 +---++ [[TWikiFormFieldDefinitionDotPm][TWiki::Form::FieldDefinition]] 
   1.261 +
   1.262 +Base class of all field definition classes.
   1.263 +
   1.264 +Type-specific classes are derived from this class to define specific
   1.265 +per-type behaviours. This class also provides default behaviours for when
   1.266 +a specific type cannot be loaded.
   1.267 +
   1.268 +
   1.269 +
   1.270 +This package doesn't smell
   1.271 +
   1.272 +---++ [[TWikiFormListFieldDefinitionDotPm][TWiki::Form::ListFieldDefinition]] 
   1.273 +Form field definitions that accept lists of values in the field definition.
   1.274 +This is different to being multi-valued, which means the field type
   1.275 +can *store* multiple values.
   1.276 +
   1.277 +
   1.278 +
   1.279 +This package has smell factor of *1*
   1.280 +
   1.281 +---++ [[TWikiFormSelectDotPm][]] 
   1.282 +
   1.283 +
   1.284 +This package doesn't smell
   1.285 +
   1.286 +---++ [[TWikiFuncDotPm][TWiki::Func]] 
   1.287 +
   1.288 +<!-- STARTINCLUDE required for huge TWikiDocumentation topic -->
   1.289 +%STARTINCLUDE%
   1.290 +
   1.291 +_Official list of stable TWiki functions for Plugin developers_
   1.292 +
   1.293 +This module defines official functions that [[%SYSTEMWEB%.TWikiPlugins][Plugins]]
   1.294 +can use to interact with the TWiki engine and content.
   1.295 +
   1.296 +Refer to TWiki.EmptyPlugin and lib/TWiki/Plugins/EmptyPlugin.pm for a template Plugin and documentation on how to write a Plugin.
   1.297 +
   1.298 +Plugins should *only* use functions published in this module. If you use
   1.299 +functions in other TWiki libraries you might create a security hole and
   1.300 +you will probably need to change your Plugin when you upgrade TWiki.
   1.301 +
   1.302 +Deprecated functions will still work in older code, though they should
   1.303 +_not_ be called in new Plugins and should be replaced in older Plugins
   1.304 +as soon as possible.
   1.305 +
   1.306 +The version of the TWiki::Func module is defined by the VERSION number of the
   1.307 +TWiki::Plugins module, currently %PLUGINVERSION%. This can be shown
   1.308 +by the =%<nop>PLUGINVERSION%= TWiki variable, and accessed in code using
   1.309 +=$TWiki::Plugins::VERSION=. The 'Since' field in the function
   1.310 +documentation refers to =$TWiki::Plugins::VERSION=.
   1.311 +
   1.312 +Notes on use of =$TWiki::Plugins::VERSION= (from 1.2 forwards):
   1.313 +   * If the *major* version (e.g. =1.=) is the same then any plugin coded
   1.314 +     to use any *earlier* revision of the =1.= API will still work. No
   1.315 +     function has been removed from the interface, nor has any API published
   1.316 +     in that version changed in such a way as to *require* plugins to be
   1.317 +     recoded.
   1.318 +   * If the *minor* version (e.g. 1.1) is incremented there may be changes
   1.319 +     in the API that may help improve the coding of some plugins - for
   1.320 +     example, new interfaces giving access to previously hidden core functions.
   1.321 +     In addition, *deprecation* of functions in the interface trigger a minor
   1.322 +     version increment. Note that deprecated functions are not _removed_, they
   1.323 +     are merely frozen, and plugin authors are recommended to stop using them.
   1.324 +   * Any additional digits in the version number relate to minor changes, such
   1.325 +     as the addition of parameters to the existing functions, or addition of
   1.326 +     utility functions that are unlikely to require significant changes to
   1.327 +     existing plugins.
   1.328 +   * =TWiki::Plugins::VERSION= also applies to the plugin handlers. The
   1.329 +     handlers are documented in the !EmptyPlugin, and that module indicates
   1.330 +     what version of =TWiki::Plugins::VERSION= it relates to.
   1.331 +A full history of the changes to this API can be found at the end of this
   1.332 +topic.
   1.333 +
   1.334 +
   1.335 +
   1.336 +This package has smell factor of *1*
   1.337 +
   1.338 +---++ [[TWikiI18NDotPm][TWiki::I18N]] 
   1.339 +
   1.340 +Support for strings translation and language detection.
   1.341 +
   1.342 +
   1.343 +
   1.344 +This package has smell factor of *2*
   1.345 +
   1.346 +---++ [[TWikiI18NExtractDotPm][TWiki::I18N::Extract]] 
   1.347 +
   1.348 +Support translatable strings extraction from TWiki topics and templates.
   1.349 +Depends on Locale::Maketext::Extract (part of CPAN::Locale::Maketext::Lexicon).
   1.350 +
   1.351 +
   1.352 +
   1.353 +This package has smell factor of *1*
   1.354 +
   1.355 +---++ [[TWikiIfNodeDotPm][TWiki::If::Node]] 
   1.356 +
   1.357 +Node class for the result of an If statement parse
   1.358 +
   1.359 +
   1.360 +
   1.361 +This package doesn't smell
   1.362 +
   1.363 +---++ [[TWikiIfParserDotPm][TWiki::If::Parser]] 
   1.364 +
   1.365 +Support for the conditions in %IF{} statements.
   1.366 +
   1.367 +
   1.368 +
   1.369 +This package doesn't smell
   1.370 +
   1.371 +---++ [[TWikiInfixErrorDotPm][TWiki::Infix::Error]] 
   1.372 +
   1.373 +Class of errors used with TWiki::Infix::Parser
   1.374 +
   1.375 +
   1.376 +
   1.377 +This package doesn't smell
   1.378 +
   1.379 +---++ [[TWikiInfixNodeDotPm][TWiki::Infix::Node]] 
   1.380 +
   1.381 +Base class for node types generated by Infix::Parser. You don't *have* to use
   1.382 +it, but it may be useful.
   1.383 +
   1.384 +
   1.385 +
   1.386 +This package doesn't smell
   1.387 +
   1.388 +---++ [[TWikiInfixParserDotPm][TWiki::Infix::Parser]] 
   1.389 +
   1.390 +A simple stack-based parser that parses infix expressions with nonary,
   1.391 +unary and binary operators specified using an operator table.
   1.392 +
   1.393 +Escapes are supported in strings, using backslash.
   1.394 +
   1.395 +
   1.396 +
   1.397 +This package doesn't smell
   1.398 +
   1.399 +---++ [[TWikiLineIteratorDotPm][TWiki::LineIterator]] 
   1.400 +
   1.401 +Iterator over the lines in a file
   1.402 +
   1.403 +
   1.404 +
   1.405 +This package doesn't smell
   1.406 +
   1.407 +---++ [[TWikiListIteratorDotPm][TWiki::ListIterator]] 
   1.408 +
   1.409 +Iterator over a list
   1.410 +
   1.411 +
   1.412 +
   1.413 +This package doesn't smell
   1.414 +
   1.415 +---++ [[TWikiLoginManagerApacheLoginDotPm][TWiki::LoginManager::ApacheLogin]] 
   1.416 +
   1.417 +This is login manager that you can specify in the security setup section of
   1.418 +[[%SCRIPTURL{"configure"}%][configure]]. It instructs TWiki to
   1.419 +cooperate with your web server (typically Apache) to require authentication
   1.420 +information (username & password) from users. It requires that you configure
   1.421 +your web server to demand authentication for scripts named "login" and anything
   1.422 +ending in "auth". The latter should be symlinks to existing scripts; e.g.,
   1.423 +=viewauth -> view=, =editauth -> edit=, and so on.
   1.424 +
   1.425 +See also TWikiUserAuthentication.
   1.426 +
   1.427 +Subclass of TWiki::LoginManager; see that class for documentation of the
   1.428 +methods of this class.
   1.429 +
   1.430 +
   1.431 +
   1.432 +This package has smell factor of *1*
   1.433 +
   1.434 +---++ [[TWikiLoginManagerDotPm][TWiki::LoginManager]] 
   1.435 +
   1.436 +The package is also a Factory for login managers and also the base class
   1.437 +for all login managers.
   1.438 +
   1.439 +On it's own, an object of this class is used when you specify 'none' in
   1.440 +the security setup section of
   1.441 +[[%SCRIPTURL{"configure"}%][configure]]. When it is used,
   1.442 +logins are not supported. If you want to authenticate users then you should
   1.443 +consider TemplateLogin or ApacheLogin, which are subclasses of this class.
   1.444 +
   1.445 +If you are building a new login manager, then you should write a new subclass
   1.446 +of this class, implementing the methods marked as *VIRTUAL*. There are already
   1.447 +examples in the =lib/TWiki/LoginManager= directory.
   1.448 +
   1.449 +The class has extensive tracing, which is enabled by
   1.450 +$TWiki::cfg{Trace}{LoginManager.pm}. The tracing is done in such a way as to
   1.451 +let the perl optimiser optimise out the trace function as a no-op if tracing
   1.452 +is disabled.
   1.453 +
   1.454 +Here's an overview of how it works:
   1.455 +
   1.456 +Early in TWiki::new, the login manager is created. The creation of the login manager does two things:
   1.457 +   1 If sessions are in use, it loads CGI::Session but doesn't initialise the session yet.
   1.458 +   1 Creates the login manager object
   1.459 +Slightly later in TWiki::new, loginManager->loadSession is called.
   1.460 +   1 Calls loginManager->getUser to get the username *before* the session is created
   1.461 +      * TWiki::LoginManager::ApacheLogin looks at REMOTE_USER (only for authenticated scripts)
   1.462 +      * TWiki::LoginManager::TemplateLogin just returns undef
   1.463 +   1 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).
   1.464 +   1 Creates the CGI::Session object, and the session is thereby read.
   1.465 +   1 If the username still isn't known, reads it from the cookie. Thus TWiki::LoginManager::ApacheLogin overrides the cookie using REMOTE_USER, and TWiki::LoginManager::TemplateLogin *always* uses the session.
   1.466 +
   1.467 +Later again in TWiki::new, plugins are given a chance to *override* the username found from the loginManager.
   1.468 +
   1.469 +The last step in TWiki::new is to find the user, using whatever user mapping manager is in place.
   1.470 +
   1.471 +---++ ObjectData =twiki=
   1.472 +
   1.473 +The TWiki object this login manager is attached to.
   1.474 +
   1.475 +
   1.476 +
   1.477 +This package has smell factor of *7*
   1.478 +
   1.479 +---++ [[TWikiLoginManagerTemplateLoginDotPm][TWiki::LoginManager::TemplateLogin]] 
   1.480 +
   1.481 +This is a login manager that you can specify in the security setup section of
   1.482 +[[%SCRIPTURL{"configure"}%][configure]]. It provides users with a
   1.483 +template-based form to enter usernames and passwords, and works with the
   1.484 +PasswordManager that you specify to verify those passwords.
   1.485 +
   1.486 +Subclass of TWiki::LoginManager; see that class for documentation of the
   1.487 +methods of this class.
   1.488 +
   1.489 +
   1.490 +
   1.491 +This package has smell factor of *2*
   1.492 +
   1.493 +---++ [[TWikiMergeDotPm][TWiki::Merge]] 
   1.494 +
   1.495 +Support for merging strings
   1.496 +
   1.497 +
   1.498 +
   1.499 +This package has smell factor of *1*
   1.500 +
   1.501 +---++ [[TWikiMetaDotPm][TWiki::Meta]] 
   1.502 +
   1.503 +All TWiki topics have *data* (text) and *meta-data* (information about the
   1.504 +topic). Meta-data includes information such as file attachments, form fields,
   1.505 +topic parentage etc. When TWiki loads a topic from the store, it represents
   1.506 +the meta-data in the topic using an object of this class.
   1.507 +
   1.508 +A meta-data object is a hash of different types of meta-data (keyed on
   1.509 +the type, such as 'FIELD' and 'TOPICINFO').
   1.510 +
   1.511 +Each entry in the hash is an array, where each entry in the array
   1.512 +contains another hash of the key=value pairs, corresponding to a
   1.513 +single meta-datum.
   1.514 +
   1.515 +If there may be multiple entries of the same top-level type (i.e. for FIELD
   1.516 +and FILEATTACHMENT) then the array has multiple entries. These types
   1.517 +are referred to as "keyed" types. The array entries are keyed with the
   1.518 +attribute 'name' which must be in each entry in the array.
   1.519 +
   1.520 +For unkeyed types, the array has only one entry.
   1.521 +
   1.522 +Pictorially,
   1.523 +   * TOPICINFO
   1.524 +      * author => '...'
   1.525 +      * date => '...'
   1.526 +      * ...
   1.527 +   * FILEATTACHMENT
   1.528 +      * [0] -> { name => '...' ... }
   1.529 +      * [1] -> { name => '...' ... }
   1.530 +   * FIELD
   1.531 +      * [0] -> { name => '...' ... }
   1.532 +      * [1] -> { name => '...' ... }
   1.533 +
   1.534 +As well as the meta-data, the object also stores the web name, topic
   1.535 +name and remaining text after meta-data extraction.
   1.536 +
   1.537 +
   1.538 +
   1.539 +This package has smell factor of *2*
   1.540 +
   1.541 +---++ [[TWikiNetDotPm][TWiki::Net]] 
   1.542 +
   1.543 +Object that brokers access to network resources.
   1.544 +
   1.545 +
   1.546 +
   1.547 +This package has smell factor of *3*
   1.548 +
   1.549 +---++ [[TWikiNetHTTPResponseDotPm][TWiki::Net::HTTPResponse]] 
   1.550 +
   1.551 +Fakeup of HTTP::Response for use when LWP is not available. Only implements
   1.552 +a small subset of the HTTP::Response methods:
   1.553 +| =code()= |
   1.554 +| =message()= |
   1.555 +| =header($field)= |
   1.556 +| =content()= |
   1.557 +| =is_error()= |
   1.558 +| =is_redirect()= |
   1.559 +
   1.560 +See the documentation of HTTP::Response for information about the methods.
   1.561 +
   1.562 +
   1.563 +
   1.564 +This package doesn't smell
   1.565 +
   1.566 +---++ [[TWikiOopsExceptionDotPm][TWiki::OopsException]] 
   1.567 +
   1.568 +Exception used to raise a request to redirect to an Oops URL.
   1.569 +
   1.570 +An OopsException thrown anywhere in the code will redirect the
   1.571 +browser to a url based on the =oops= script. =oops= requires
   1.572 +the name of an oops template file from the =templates= directory.
   1.573 +This file will be expanded and the
   1.574 +parameter values passed to the exception instantiated. The
   1.575 +result will be shown in the browser.
   1.576 +
   1.577 +Plugins may throw TWiki::OopsException. For example:
   1.578 +
   1.579 +<verbatim>
   1.580 +use Error;
   1.581 +
   1.582 +...
   1.583 +
   1.584 +throw TWiki::OopsException( 'bathplugin',
   1.585 +                            def => 'toestuck',
   1.586 +                            web => $web,
   1.587 +                            topic => $topic,
   1.588 +                            params => [ 'bigtoe', 'hot tap' ] );
   1.589 +
   1.590 +
   1.591 +
   1.592 +This package doesn't smell
   1.593 +
   1.594 +---++ [[TWikiPluginDotPm][]] 
   1.595 +
   1.596 +
   1.597 +This package has smell factor of *2*
   1.598 +
   1.599 +---++ [[TWikiPluginsDotPm][TWiki::Plugins]] 
   1.600 +
   1.601 +This module defines the singleton object that handles Plugins
   1.602 +loading, initialization and execution.
   1.603 +
   1.604 +This class uses Chain of Responsibility (GOF) pattern to dispatch
   1.605 +handler calls to registered plugins.
   1.606 +
   1.607 +
   1.608 +
   1.609 +This package doesn't smell
   1.610 +
   1.611 +---++ [[TWikiPluralsDotPm][TWiki::Plurals]] 
   1.612 +
   1.613 +Handle conversion of plural topic names to singular form.
   1.614 +
   1.615 +
   1.616 +
   1.617 +This package has smell factor of *3*
   1.618 +
   1.619 +---++ [[TWikiPrefsDotPm][TWiki::Prefs]] 
   1.620 +
   1.621 +The Prefs class is a singleton that implements management of preferences.
   1.622 +It uses a stack of TWiki::Prefs::PrefsCache objects to store the
   1.623 +preferences for global, web, user and topic contexts, and provides
   1.624 +the means to look up preferences in these.
   1.625 +
   1.626 +Preferences from different places stack on top of each other, so there
   1.627 +are global preferences, then site, then web (and subweb and subsubweb),
   1.628 +then topic, included topic and so on. Each level of the stack is tagged with
   1.629 +a type identifier.
   1.630 +
   1.631 +The module also maintains a separate of the preferences found in every topic
   1.632 +and web it reads. This supports the lookup of preferences for webs and topics
   1.633 +that are not on the stack, and must not be chained in (you can't allow
   1.634 +a user to override protections from their home topic!)
   1.635 +
   1.636 +
   1.637 +
   1.638 +This package doesn't smell
   1.639 +
   1.640 +---++ [[TWikiPrefsParserDotPm][TWiki::Prefs::Parser]] 
   1.641 +
   1.642 +This Prefs-internal class is used to parse * Set and * Local statements
   1.643 +from arbitrary text, and extract settings from meta objects.  It is used
   1.644 +by TopicPrefs to parse preference settings from topics.
   1.645 +
   1.646 +This class does no validation or duplicate-checking on the settings; it
   1.647 +simply returns the recognized settings in the order it sees them in.
   1.648 +
   1.649 +
   1.650 +
   1.651 +This package has smell factor of *1*
   1.652 +
   1.653 +---++ [[TWikiPrefsPrefsCacheDotPm][TWiki::Prefs::PrefsCache]] 
   1.654 +
   1.655 +The PrefsCache package holds a cache of topics that have been read in, using
   1.656 +the TopicPrefs class.  These functions manage that cache.
   1.657 +
   1.658 +We maintain 2 hashes of values:
   1.659 +   * {locals} Contains all locals at this level. Locals are values that
   1.660 +     only apply when the current topic is the topic where the local is
   1.661 +     defined. The variable names are decorated with the locality where
   1.662 +     they apply.
   1.663 +   * {values} contains all sets, locals, and all values inherited from
   1.664 +     the parent level
   1.665 +
   1.666 +As each cache level is built, the values are copied down from the parent
   1.667 +cache level. This sounds monstrously inefficient, but in fact perl does
   1.668 +this a lot better than doing a multi-level lookup when a value is referenced.
   1.669 +This is especially important when many prefs lookups may be done in a
   1.670 +session, for example when searching.
   1.671 +
   1.672 +
   1.673 +
   1.674 +This package doesn't smell
   1.675 +
   1.676 +---++ [[TWikiQueryHoistREsDotPm][TWiki::Query::HoistREs]] 
   1.677 +
   1.678 +Static functions to extract regular expressions from queries. The REs can
   1.679 +be used in caching stores that use the TWiki standard inline meta-data
   1.680 +representation to pre-filter topic lists for more efficient query matching.
   1.681 +
   1.682 +See =Store/RcsFile.pm= for an example of usage.
   1.683 +
   1.684 +
   1.685 +
   1.686 +This package doesn't smell
   1.687 +
   1.688 +---++ [[TWikiQueryNodeDotPm][TWiki::Query]] 
   1.689 +
   1.690 +A Query object is a representation of a query over the TWiki database.
   1.691 +
   1.692 +Fields are given by name, and values by strings or numbers. Strings should always be surrounded by 'single-quotes'. Numbers can be signed integers or decimals. Single quotes in values may be escaped using backslash (\).
   1.693 +
   1.694 +See TWiki.QuerySearch for details of the query language. At the time of writing
   1.695 +only a subset of the entire query language is supported, for use in searching.
   1.696 +
   1.697 +A query object implements the =evaluate= method as its general
   1.698 +contract with the rest of the world. This method does a "hard work" evaluation
   1.699 +of the parser tree. Of course, smarter Store implementations should be
   1.700 +able to do it better....
   1.701 +
   1.702 +
   1.703 +
   1.704 +This package has smell factor of *2*
   1.705 +
   1.706 +---++ [[TWikiQueryParserDotPm][TWiki::Query::Parser]] 
   1.707 +
   1.708 +Parser for queries
   1.709 +
   1.710 +
   1.711 +
   1.712 +This package doesn't smell
   1.713 +
   1.714 +---++ [[TWikiRenderDotPm][TWiki::Render]] 
   1.715 +
   1.716 +This module provides most of the actual HTML rendering code in TWiki.
   1.717 +
   1.718 +
   1.719 +
   1.720 +This package has smell factor of *20*
   1.721 +
   1.722 +---++ [[TWikiSandboxDotPm][TWiki::Sandbox]] 
   1.723 +
   1.724 +This object provides an interface to the outside world. All calls to
   1.725 +system functions, or handling of file names, should be brokered by
   1.726 +this object.
   1.727 +
   1.728 +NOTE: TWiki creates a singleton sandbox that is *shared* by all TWiki
   1.729 +runs under a single mod_perl instance. If any TWiki run modifies the
   1.730 +sandbox, that modification will carry over in to subsequent runs.
   1.731 +Be very, very careful!
   1.732 +
   1.733 +
   1.734 +
   1.735 +This package has smell factor of *4*
   1.736 +
   1.737 +---++ [[TWikiSearchDotPm][TWiki::Search]] 
   1.738 +
   1.739 +This module implements all the search functionality.
   1.740 +
   1.741 +
   1.742 +
   1.743 +This package has smell factor of *15*
   1.744 +
   1.745 +---++ [[TWikiStoreDotPm][TWiki::Store]] 
   1.746 +
   1.747 +This module hosts the generic storage backend. This module provides
   1.748 +the interface layer between the "real" store provider - which is hidden
   1.749 +behind a handler - and the rest of the system. it is responsible for
   1.750 +checking for topic existance, access permissions, and all the other
   1.751 +general admin tasks that are common to all store implementations.
   1.752 +
   1.753 +This module knows nothing about how the data is actually _stored_ -
   1.754 +that knowledge is entirely encapsulated in the handlers.
   1.755 +
   1.756 +The general contract for methods in the class requires that errors
   1.757 +are signalled using exceptions. TWiki::AccessControlException is
   1.758 +used for access control exceptions, and Error::Simple for all other
   1.759 +types of error.
   1.760 +
   1.761 +
   1.762 +
   1.763 +This package has smell factor of *14*
   1.764 +
   1.765 +---++ [[TWikiStoreQueryAlgorithmsBruteForceDotPm][TWiki::Store::QueryAlgorithms::BruteForce]] 
   1.766 +
   1.767 +Default brute-force query algorithm
   1.768 +
   1.769 +Has some basic optimisation: it hoists regular expressions out of the
   1.770 +query to use with grep, so we can narrow down the set of topics that we
   1.771 +have to evaluate the query on.
   1.772 +
   1.773 +Not sure exactly where the breakpoint is between the
   1.774 +costs of hoisting and the advantages of hoisting. Benchmarks suggest
   1.775 +that it's around 6 topics, though this may vary depending on disk
   1.776 +speed and memory size. It also depends on the complexity of the query.
   1.777 +
   1.778 +
   1.779 +
   1.780 +This package doesn't smell
   1.781 +
   1.782 +---++ [[TWikiStoreRcsFileDotPm][TWiki::Store::RcsFile]] 
   1.783 +
   1.784 +This class is PACKAGE PRIVATE to Store, and should never be
   1.785 +used from anywhere else. It is the base class of implementations of stores
   1.786 +that manipulate RCS format files.
   1.787 +
   1.788 +The general contract of the methods on this class and its subclasses
   1.789 +calls for errors to be signalled by Error::Simple exceptions.
   1.790 +
   1.791 +Refer to Store.pm for models of usage.
   1.792 +
   1.793 +
   1.794 +
   1.795 +This package has smell factor of *11*
   1.796 +
   1.797 +---++ [[TWikiStoreRcsLiteDotPm][TWiki::Store::RcsLite]] 
   1.798 +
   1.799 +This package does not publish any methods. It implements the virtual
   1.800 +methods of the [[TWikiStoreRcsFileDotPm][TWiki::Store::RcsFile]] superclass.
   1.801 +
   1.802 +Simple replacement for RCS.  Doesn't support:
   1.803 +   * branches
   1.804 +   * locking
   1.805 +Neither of which are used (or needed) by TWiki.
   1.806 +
   1.807 +This module doesn't know anything about the content of the topic
   1.808 +
   1.809 +There is one of these object for each file stored under RCSLite.
   1.810 +
   1.811 +This object is PACKAGE PRIVATE to Store, and should NEVER be
   1.812 +used from anywhere else.
   1.813 +
   1.814 +FIXME:
   1.815 +   * need to tidy up dealing with \n for differences
   1.816 +   * still have difficulty on line ending at end of sequences, consequence of doing a line based diff
   1.817 +
   1.818 +---++ File format
   1.819 +
   1.820 +<verbatim>
   1.821 +rcstext    ::=  admin {delta}* desc {deltatext}*
   1.822 +admin      ::=  head {num};
   1.823 +                { branch   {num}; }
   1.824 +                access {id}*;
   1.825 +                symbols {sym : num}*;
   1.826 +                locks {id : num}*;  {strict  ;}
   1.827 +                { comment  {string}; }
   1.828 +                { expand   {string}; }
   1.829 +                { newphrase }*
   1.830 +delta      ::=  num
   1.831 +                date num;
   1.832 +                author id;
   1.833 +                state {id};
   1.834 +                branches {num}*;
   1.835 +                next {num};
   1.836 +                { newphrase }*
   1.837 +desc       ::=  desc string
   1.838 +deltatext  ::=  num
   1.839 +                log string
   1.840 +                { newphrase }*
   1.841 +                text string
   1.842 +num        ::=  {digit | .}+
   1.843 +digit      ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
   1.844 +id         ::=  {num} idchar {idchar | num }*
   1.845 +sym        ::=  {digit}* idchar {idchar | digit }*
   1.846 +idchar     ::=  any visible graphic character except special
   1.847 +special    ::=  $ | , | . | : | ; | @
   1.848 +string     ::=  @{any character, with @ doubled}*@
   1.849 +newphrase  ::=  id word* ;
   1.850 +word       ::=  id | num | string | :
   1.851 +</verbatim>
   1.852 +Identifiers are case sensitive. Keywords are in lower case only. The
   1.853 +sets of keywords and identifiers can overlap. In most environments RCS
   1.854 +uses the ISO 8859/1 encoding: visible graphic characters are codes
   1.855 +041-176 and 240-377, and white space characters are codes 010-015 and 040.
   1.856 +
   1.857 +Dates, which appear after the date keyword, are of the form Y.mm.dd.hh.mm.ss,
   1.858 +where Y is the year, mm the month (01-12), dd the day (01-31), hh the hour
   1.859 +(00-23), mm the minute (00-59), and ss the second (00-60). Y contains just
   1.860 +the last two digits of the year for years from 1900 through 1999, and all
   1.861 +the digits of years thereafter. Dates use the Gregorian calendar; times
   1.862 +use UTC.
   1.863 +
   1.864 +The newphrase productions in the grammar are reserved for future extensions
   1.865 +to the format of RCS files. No newphrase will begin with any keyword already
   1.866 +in use.
   1.867 +
   1.868 +Revisions consist of a sequence of 'a' and 'd' edits that need to be
   1.869 +applied to rev N+1 to get rev N. Each edit has an offset (number of lines
   1.870 +from start) and length (number of lines). For 'a', the edit is followed by
   1.871 +length lines (the lines to be inserted in the text). For example:
   1.872 +
   1.873 +d1 3     means "delete three lines starting with line 1
   1.874 +a4 2     means "insert two lines at line 4'
   1.875 +xxxxxx   is the new line 4
   1.876 +yyyyyy   is the new line 5
   1.877 +
   1.878 +
   1.879 +
   1.880 +This package has smell factor of *2*
   1.881 +
   1.882 +---++ [[TWikiStoreRcsWrapDotPm][TWiki::Store::RcsWrap]] 
   1.883 +
   1.884 +This package does not publish any methods. It implements the
   1.885 +virtual methods of the [[TWikiStoreRcsFileDotPm][TWiki::Store::RcsFile]] superclass.
   1.886 +
   1.887 +Wrapper around the RCS commands required by TWiki.
   1.888 +There is one of these object for each file stored under RCS.
   1.889 +
   1.890 +
   1.891 +
   1.892 +This package has smell factor of *3*
   1.893 +
   1.894 +---++ [[TWikiStoreSearchAlgorithmsForkingDotPm][TWiki::Store::SearchAlgorithms::Forking]] 
   1.895 +
   1.896 +Forking implementation of the RCS cache search.
   1.897 +
   1.898 +---++ search($searchString, $topics, $options, $sDir) -> \%seen
   1.899 +Search .txt files in $dir for $searchString. See RcsFile::searchInWebContent
   1.900 +for details.
   1.901 +
   1.902 +
   1.903 +
   1.904 +This package has smell factor of *1*
   1.905 +
   1.906 +---++ [[TWikiStoreSearchAlgorithmsPurePerlDotPm][TWiki::Store::SearchAlgorithms::PurePerl]] 
   1.907 +
   1.908 +Pure perl implementation of the RCS cache search.
   1.909 +
   1.910 +---++ search($searchString, $topics, $options, $sDir) -> \%seen
   1.911 +Search .txt files in $dir for $string. See RcsFile::searchInWebContent
   1.912 +for details.
   1.913 +
   1.914 +
   1.915 +
   1.916 +This package doesn't smell
   1.917 +
   1.918 +---++ [[TWikiTemplatesDotPm][TWiki::Templates]] 
   1.919 +
   1.920 +Support for the TWiki template language.
   1.921 +
   1.922 +
   1.923 +
   1.924 +This package has smell factor of *2*
   1.925 +
   1.926 +---++ [[TWikiTimeDotPm][TWiki::Time]] 
   1.927 +
   1.928 +Time handling functions.
   1.929 +
   1.930 +
   1.931 +
   1.932 +This package has smell factor of *7*
   1.933 +
   1.934 +---++ [[TWikiUIChangeFormDotPm][TWiki::UI::ChangeForm]] 
   1.935 +
   1.936 +Service functions used by the UI packages
   1.937 +
   1.938 +
   1.939 +
   1.940 +This package doesn't smell
   1.941 +
   1.942 +---++ [[TWikiUIDotPm][TWiki::UI]] 
   1.943 +
   1.944 +Service functions used by the UI packages
   1.945 +
   1.946 +
   1.947 +
   1.948 +This package doesn't smell
   1.949 +
   1.950 +---++ [[TWikiUIEditDotPm][TWiki::UI::Edit]] 
   1.951 +
   1.952 +Edit command handler
   1.953 +
   1.954 +
   1.955 +
   1.956 +This package has smell factor of *1*
   1.957 +
   1.958 +---++ [[TWikiUIManageDotPm][TWiki::UI::Manage]] 
   1.959 +
   1.960 +UI functions for web, topic and user management
   1.961 +
   1.962 +
   1.963 +
   1.964 +This package has smell factor of *5*
   1.965 +
   1.966 +---++ [[TWikiUIOopsDotPm][TWiki::UI::Oops]] 
   1.967 +
   1.968 +UI delegate for oops function
   1.969 +
   1.970 +
   1.971 +
   1.972 +This package doesn't smell
   1.973 +
   1.974 +---++ [[TWikiUIRDiffDotPm][TWiki::UI::RDiff]] 
   1.975 +
   1.976 +UI functions for diffing.
   1.977 +
   1.978 +
   1.979 +
   1.980 +This package has smell factor of *12*
   1.981 +
   1.982 +---++ [[TWikiUIRegisterDotPm][TWiki::UI::Register]] 
   1.983 +
   1.984 +User registration handling.
   1.985 +
   1.986 +
   1.987 +
   1.988 +This package has smell factor of *5*
   1.989 +
   1.990 +---++ [[TWikiUISaveDotPm][TWiki::UI::Save]] 
   1.991 +
   1.992 +UI delegate for save function
   1.993 +
   1.994 +
   1.995 +
   1.996 +This package has smell factor of *1*
   1.997 +
   1.998 +---++ [[TWikiUISearchDotPm][TWiki::UI::Search]] 
   1.999 +
  1.1000 +UI functions for searching.
  1.1001 +
  1.1002 +
  1.1003 +
  1.1004 +This package has smell factor of *2*
  1.1005 +
  1.1006 +---++ [[TWikiUIStatisticsDotPm][TWiki::UI::Statistics]] 
  1.1007 +
  1.1008 +Statistics extraction and presentation
  1.1009 +
  1.1010 +
  1.1011 +
  1.1012 +This package has smell factor of *4*
  1.1013 +
  1.1014 +---++ [[TWikiUIUploadDotPm][TWiki::UI::Upload]] 
  1.1015 +
  1.1016 +UI delegate for attachment management functions
  1.1017 +
  1.1018 +
  1.1019 +
  1.1020 +This package has smell factor of *3*
  1.1021 +
  1.1022 +---++ [[TWikiUIViewDotPm][TWiki::UI::View]] 
  1.1023 +
  1.1024 +UI delegate for view function
  1.1025 +
  1.1026 +
  1.1027 +
  1.1028 +This package has smell factor of *2*
  1.1029 +
  1.1030 +---++ [[TWikiUserMappingDotPm][TWiki::UserMapping]] 
  1.1031 +
  1.1032 +This is a virtual base class (a.k.a an interface) for all user mappers. It is
  1.1033 +*not* useable as a mapping in TWiki - use the BaseUserMapping for default
  1.1034 +behaviour.
  1.1035 +
  1.1036 +User mapping is the process by which TWiki maps from a username (a login name)
  1.1037 +to a display name and back. It is also where groups are maintained.
  1.1038 +
  1.1039 +See TWiki::Users::BaseUserMapping and TWiki::Users::TWikiUserMapping for
  1.1040 +the default implementations of this interface.
  1.1041 +
  1.1042 +If you want to write a user mapper, you will need to implement the methods
  1.1043 +described in this class.
  1.1044 +
  1.1045 +User mappings work by mapping both login names and display names to a
  1.1046 +_canonical user id_. This user id is composed from a prefix that defines
  1.1047 +the mapper in use (something like 'BaseUserMapping_' or 'LdapUserMapping_')
  1.1048 +and a unique user id that the mapper uses to identify the user.
  1.1049 +
  1.1050 +The null prefix is reserver for the TWikiUserMapping for compatibility
  1.1051 +with old TWiki releases.
  1.1052 +
  1.1053 +__Note:__ in all the following documentation, =$user= refers to a
  1.1054 +*canonical user id*.
  1.1055 +
  1.1056 +
  1.1057 +
  1.1058 +This package has smell factor of *1*
  1.1059 +
  1.1060 +---++ [[TWikiUsersApacheHtpasswdUserDotPm][TWiki::Users::ApacheHtpasswdUser]] 
  1.1061 +
  1.1062 +Password manager that uses Apache::HtPasswd to manage users and passwords.
  1.1063 +
  1.1064 +Subclass of [[TWikiUsersPasswordDotPm][ =TWiki::Users::Password= ]].
  1.1065 +See documentation of that class for descriptions of the methods of this class.
  1.1066 +
  1.1067 +Duplicates functionality of
  1.1068 +[[TWikiUsersHtPasswdUserDotPm][ =TWiki::Users::HtPasswdUser=]];
  1.1069 +provided mainly as an example of how to write a new password manager.
  1.1070 +
  1.1071 +
  1.1072 +
  1.1073 +This package has smell factor of *1*
  1.1074 +
  1.1075 +---++ [[TWikiUsersDotPm][TWiki::Users]] 
  1.1076 +This package provides services for the lookup and manipulation of login and
  1.1077 +wiki names of users, and their authentication.
  1.1078 +
  1.1079 +It is a Facade that presents a common interface to the User Mapping
  1.1080 +and Password modules. The rest of the core should *only* use the methods
  1.1081 +of this package, and should *never* call the mapping or password managers
  1.1082 +directly.
  1.1083 +
  1.1084 +TWiki uses the concept of a _login name_ which is used to authenticate a
  1.1085 +user. A login name maps to a _wiki name_ that is used to identify the user
  1.1086 +for display. Each login name is unique to a single user, though several
  1.1087 +login names may map to the same wiki name.
  1.1088 +
  1.1089 +Using this module (and the associated plug-in user mapper) TWiki supports
  1.1090 +the concept of _groups_. Groups are sets of login names that are treated
  1.1091 +equally for the purposes of access control. Group names do not have to be
  1.1092 +wiki names, though it is helpful for display if they are.
  1.1093 +
  1.1094 +Internally in the code TWiki uses something referred to as a _canonical user
  1.1095 +id_ or just _user id_. The user id is also used externally to uniquely identify
  1.1096 +the user when (for example) recording topic histories. The user id is *usually*
  1.1097 +just the login name, but it doesn't need to be. It just has to be a unique
  1.1098 +7-bit alphanumeric and underscore string that can be mapped to/from login
  1.1099 +and wiki names by the user mapper.
  1.1100 +
  1.1101 +The canonical user id should *never* be seen by a user. On the other hand,
  1.1102 +core code should never use anything *but* a canonical user id to refer
  1.1103 +to a user.
  1.1104 +
  1.1105 +*Terminology*
  1.1106 +   * A *login name* is the name used to log in to TWiki. Each login name is
  1.1107 +     assumed to be unique to a human. The Password module is responsible for
  1.1108 +     authenticating and manipulating login names.
  1.1109 +   * A *canonical user id* is an internal TWiki representation of a user. Each
  1.1110 +     canonical user id maps 1:1 to a login name.
  1.1111 +   * A *wikiname* is how a user is displayed. Many user ids may map to a
  1.1112 +     single wikiname. The user mapping module is responsible for mapping
  1.1113 +     the user id to a wikiname.
  1.1114 +   * A *group id* represents a group of users and other groups.
  1.1115 +     The user mapping module is responsible for mapping from a group id to
  1.1116 +     a list of canonical user ids for the users in that group.
  1.1117 +   * An *email* is an email address asscoiated with a *login name*. A single
  1.1118 +     login name may have many emails.
  1.1119 +	 
  1.1120 +*NOTE:* 
  1.1121 +   * wherever the code references $user, its a canonical_id
  1.1122 +   * wherever the code references $group, its a group_name
  1.1123 +
  1.1124 +
  1.1125 +
  1.1126 +This package has smell factor of *5*
  1.1127 +
  1.1128 +---++ [[TWikiUsersHtPasswdUserDotPm][TWiki::Users::HtPasswdUser]] 
  1.1129 +
  1.1130 +Support for htpasswd and htdigest format password files.
  1.1131 +
  1.1132 +Subclass of [[TWikiUsersPasswordDotPm][ =TWiki::Users::Password= ]].
  1.1133 +See documentation of that class for descriptions of the methods of this class.
  1.1134 +
  1.1135 +
  1.1136 +
  1.1137 +This package has smell factor of *3*
  1.1138 +
  1.1139 +---++ [[TWikiUsersPasswordDotPm][TWiki::Users::Password]] 
  1.1140 +
  1.1141 +Base class of all password handlers. Default behaviour is no passwords,
  1.1142 +so anyone can be anyone they like.
  1.1143 +
  1.1144 +The methods of this class should be overridded by subclasses that want
  1.1145 +to implement other password handling methods.
  1.1146 +
  1.1147 +
  1.1148 +
  1.1149 +This package doesn't smell
  1.1150 +
  1.1151 +
  1.1152 + There were a total of *192* smells