GLOBAL RUN MODES
forbidden
Shows a FORBIDDEN message if a user tries to act on a project that is not marked as 'forbibben'
NAME
Smolder::Control
DESCRIPTION
This module serves as a base class for all controller classes in smolder. As such it defines some behavior with regard to templates, form validation, etc and provides some utility methods for accessing this data.
VARIABLES
MP2
Will be true if we are running under Apache2/mod_perl2
if( $Smolder::Control::MP2 ) {
...
}
METHODS
developer
This method will return the Smolder::DB::Developer object that this request is associated with, if it's not a public request. This information is pulled from the $ENV{REMOTE_USER}
which is set by mod_auth_tkt
.
can_see_project
This method, will return whether the current user making the request has permissions to view the given a Smolder::DB::Project object.
public_projects
This method will return the Smolder::DB::Projects that are marked as 'public'.
error_message
A simple run mode to display an error message. This should not be used to show expected messages, but rather to display un-recoverable and un-expected occurances.
tt_process
This method is provided by the TT Plugin plugin. It is used to choose and process the Template Toolkit templates. If no name is provided for the template (as the first argument) then the package name and the run mode will be used to determine which template to use. For instance:
$self->tt_process({ arg1 => 'foo', arg2 => 'bar' });
If this was done in the Smolder::Control::Foo
package for the 'list' run mode then it would use the templates/Foo/list.tmpl template. If you want to use a different template then you can explicitly specify it as well:
$self->tt_process('Foo/list.tmpl', { arg1 => 'foo', arg2 => 'bar' });
See TEMPLATE_CONFIGURATION for more details.
dfv_msgs
This is a convenience method to get access to the last Data::FormValidator messages that were created due to a form validation failure. These messages are simply flags indicating which fields were missinage, which failed their constraints and which constraints failed.
See "FORM VALIDATION" for more information.
auto_complete_results
This method takes an array ref of values to be returned to an AJAX Autocomplete field.
static_url
This method will take the URL and add the smolder version number to the front so that caching can be more aggressive. This is only done if it's not a developer install, so that developers aren't frustrated by having to fight with browser caches.
add_message
Adds an message that will be displayed to the user. Takes the following name-value pairs;
- msg
-
The text of the message to send. It will be HTML escaped, so it must not contain HTML.
- type
-
The type of the message, either
info
orwarning
. By defaultinfo
is assumed.
TEMPLATE CONFIGURATION
As mentioned above, template access/control is performed through the CGI::Application::Plugin::TT plugin. The important are the settings used:
- The search path of templates is lib/Smolder/Data/templates
- All templates are wrapped with the templates/wrapper.tmpl template unless the
ajax
CGI param is set. - Recursion is allowed for template INCLUDE and PROCESS
- The following FILTERS are available to each template:
-
- pass_fail_color
-
Given a percentage (usually of passing tests to the total number run) this filter will return an HTML RGB color suitable for a colorful indicator of performance.
FORM VALIDATION
For form validation we use CGI::Application::Plugin::ValidateRM which in turn uses Data::FormValidator. We further customize the validation by providing the untaint_all_constraints
option which means that some values will become "transformed" (dates will become DateTime objects, etc).
We also customize the resulting hash of messages that is generated upon validation failure. All failed and missing constraints will become err_$field. All fields that were present but failed a constraint will become invalid_$name (where $name is the name of the field or the name of the constraint if it's named). And all missing constraints will have a missing_$field message. Also, the 'any_errors' message will be set.