#################### main pod documentation begin ################### =head1 NAME Zymonic - Zymonic Documentation and Singleton module =head1 INSTALLING ZYMONIC 1) cd to [zymonic working copy]/modules/Zymonic 2) sudo perl Makefile.PL && sudo make install 3) cd to [zymonic working copy]/modules/MANIFESTS 4) sudo perl Makefile.PL && sudo make install 5) For each additional repository desired, checkout the working copy, locate the MANIFESTS subdirectory and do sudo perl Makefile.PL && sudo make install - note the base name (i.e. filename with no directory or .pm extension) of the file in MANIFESTS/lib/Zymonic/Manifest/ that ends with _manifests.pm - should also be documented in the MANIFESTS/README file. 6a) sudo zymonic_toolkit_curses.pl Installer - then select 'Installer -> install' from the menu, populate the manifests field with a comma separated list with no spaces of core, core_manifest and all of the _manifest files identified in 5 e.g. core,core_manifests,medoc_manifests,zednax_manifests - populate the remainder of options as appropriate for your server. 6b) If you do not have curses or don't wish to use it then do; sudo zymonic_toolkit.pl Installer install --manifests [ list of manifests e.g. core,core_manifests,medoc_manifests,zednax_manifests ] 7) Under guidance from your supplier/developer install the remaining needed manifests, create and config build a system and then build the documentation for it - the Installer/updater command is further documented in the full documentation. =head1 SYNOPSIS use Zymonic; use Zymonic::Config; sub handler { my $r = shift; unless( ref( Zymonic::ZCONFIG{$ENV{SERVER_NAME}} ) =~ /Config/ ) { Zymonic::ZCONFIG{$ENV{SERVER_NAME}} = Zymonic::Config->new( system => $ENV{SERVER_NAME} ); ... This module is designed to hold the documentation for Zymonic and to hold Singleton objects when running in mod_perl mode. =head1 DESCRIPTION =head2 THIS MODULE This module is designed to hold the documentation for Zymonic and to hold Singleton objects when running in mod_perl mode. It also contains all the exceptions for Zymonic. Each Exception contains a catchable flag. When building custom subclasses, if you flag an exception as catchable it will be caught and ignored by the system. The message on the exception (info_msg, message or error) will then be displayed to the user. =head2 SYSTEM OPTIONS SystemOptions can be set as ConfigOptions by adding to system xml: NAME VALUE true If StoreInDB is set option will be added to DB as a SystemOption. =item PasswordChangeDays How many days until user is forced to change password, defaults to PCI standard 90. =item PasswordMinLength As it says on the tine, defaults to PCI standard 7. =item PasswordMaxLength As it says on the tine, defaults to limited only by field size. =item PasswordValidationRegex Regular Expression the password must match, defaults to 'd+c|c+d', i.e. at least one digit and a char, or one char and a digit. This is PCI standard. =item PasswordReUse Is the user allowed to re-use an old password? Defaults to PCI standard false. =item OldPasswordLimit After how many new password can a user use an old password? Defaults to PCI standard 4. =item LoginVelocityLimit After how many attempts at logging in is the user locked out? Defaults to PCI standard 6. =item LoginVelocityTimeout How long should there be between attempted logins after a lockout? In seconds, defaults to PCI standard 1800 (30 mins). =item PasswordCheckType How to check the password, eqaulity or certain letters (bank style). Leave blank for former, set to 'letters' for latter. Defaults to blank. =item PasswordNumLettersCheck When PasswordCheckType is 'letters' how many letters to check? Defaults to 3. =item MemorableAnswerList Not a clue. Seems to be comman separate list of answers to memorable questions. =item ReloginWindow Time allowed for user to enter credentials in the 'inline' window before they are automatically redirected to the home page. Specified in seconds. =item background_image The URL (relative to the Zymonic page) of an image to use as background. =item accent_colour The colour as a hex sextet (no leading #) of the accent (title bar etc.). =item background_colour The colour as a hex sextet (no leading #) of the background. =head2 THE ZYMONIC WORKFLOW SYSTEM The Zymonic Workflow Framework is a collection of Perl modules and accompanying stylesheets, scripts etc. that allows an XML author to write a document describing processes (e.g. trouble- tickets, customer orders, course bookings, goods receiving, financial transactions - in fact just about anything) and to report on the information captured about those processes. Or, in extremely crude terms it is a very sophisticated multi-user, web-based, database front-end. For example an XML author might describe a support request or trouble ticket which has a number of stages; unconfirmed, confirmed, fix in progress, fixed - with each stage having limits about which stage can come next and what information needs to be captured from the user. The author can then describe reports based on the information captured. Zymonic's processes can also be thought of as finite state machines. Whilst there are a large number of frameworks that provide multi-user application development, some of which have a process model and some of which have a sophisticated security model we wrote Zymonic to have the following key features. =head3 Key Features XML System Description, input and output - whilst there are undoubtedly downsides to using XML, the language is standards based and is easy for other systems to interface directly with (i.e. it has a native webservice for every process and report). The user interface (HTML) is then generated with XSL transforms. System entirely built from generic modules with two master modules (process and filter) - this allows maximum code re-use to minimise bugs. Zymonic is designed for PCI DSS compliance - the code is developed according to PCI DSS and the code is peer reviewed against PCI DSS and OWASP guidance - obviously this does not give either automatic guaranteed security or PCI compliance, however it does make both significantly easier. Zymonic has a security system which allows Access Control Lists to be set on each data record and for the defaults to be defined by a user or group's relationship with the record. Flexible reporting system. Multiple virtual desktops (or portals) for users; whilst some users can be provided with a small set of virtual desktops for the tasks they regularly do, power users can be given permission to create their own virtual desktops and assemble their own combinations of filters (reports) and processes. * Accessibility - all features of Zymonic are available in a version of the interface which works without javascript and complies with the Web Content Accessibility Guidelines (WCAG). Desktop application like speed and ease of use in the AJAX version of the interface. * Compact XML definition that allows the re-use of 'objects' defined previously within the XML either with or without modifications. Plus the ability to flag tables with automatic maintenance process and filter generation - for a quick start. =head3 Additional Features Transitions between states in processes can be defined with complex combinations of conditions on data and other factors. Actions such as generating reports or populating a secondary table e.g. a history table with data, can be triggered when a transition is successful. * Advanced error reporting framework - securely reports errors to the appropriate person (DB admin, system admin, developers, XML author etc.) With a detailed log being available for collection. * Detailed input validation (inc. anti-cross site scripting on all input) with clear highlighting of fields with errors and the error. Ability to define actions that can be triggered from filter output. Help integrated into the system definition for easy maintenance of user documentation. Modification collision detection and resolution (instead of 'hard- locking' records). * Auto-documenting of API and interface. * * due shortly/not complete. =head2 DYNAMIC MODULE SELECTION Zymonic is capable of being extended with different Forms, Tables, Filters and Fields. However, not only can they simply be defined in XML, they can also be written as Perl modules or XML with some extra methods defined/overridden in Perl. This can be achieved by creating modules that are loaded either by the Registry handler or in the calling script e.g. creating and 'useing' a Zymonic::Form::invoice and then refering to an 'invoice' form in the XML will result of the Zymonic::Form::invoice module being used instead of the standard Zymonic::Form module. =head2 DEVELOPER NOTES ZNames should be unique in the system and are used for uniquely identify items or when used alone in an element create a reference back to where the item with the ZName is fully defined. In the output, elements are generally named by ZName with a type that gives the object type e.g. Field, Record etc. DisplayNames should only be used for display, not in SQL or in element names as they may well contain illegal characters. Also all html fields/parameters should have idents unless they are top level (pageid and system currently). Whenever a redeclarable item is used in the code Zymonic::Config::get_def should be used to retrieve the definition using the ZName of the item ( object constructors do this automatically). Methods should be named so that they concisely describe what they do; this has two aspects firstly the obvious aspect of the choice of name, but secondly the decision as to when to split a method up and put a task into a separate method. Currently all properties should be accessed via AUTOLOAD except when first set - this may be revised to improve performance at a later date. Tidy code - we use Perl::Tidy and htmltidy to keep our code tidy, there is a script in scripts/zymotidy.pl that does the job when run from the root of your working copy. Requires perltidy v20071205 and the October 2006 release of HTML Tidy. =head1 USAGE use Zymonic; use Zymonic::Config; sub handler { my $r = shift; unless( ref( Zymonic::ZCONFIG{$ENV{SERVER_NAME}} ) =~ /Config/ ) { Zymonic::ZCONFIG{$ENV{SERVER_NAME}} = Zymonic::Config->new( system => $ENV{SERVER_NAME} ); =head1 BUGS None we're aware of... =head1 SUPPORT As in the license, Zymonic is provided without warranty or support unless purchased separately, however... If you email zymonic-support@zednax.com your issue will be noted and may receive a response. For security issues, please contact zymonic-security@zednax.com and someone will respond within 8 working hours. =head1 AUTHOR Alex Masidlover et al. CPAN ID: MODAUTHOR Zednax Limited alex.masidlover@zednax.com http://www.zednax.com =head1 COPYRIGHT This program is free software licensed under the... Zymonic Public License 1.0 The full text of the license can be found in the LICENSE file included with this module. Other licenses may be acceptable if including parts of Zymonic in larger projects, please contact Zednax for details. =head1 SEE ALSO perl(1). =cut #################### main pod documentation end ################### package Zymonic; use strict; BEGIN { use Exporter (); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); $VERSION = '0.01'; @ISA = qw(Exporter); #Give a hoot don't pollute, do not export more than needed by default @EXPORT = qw(); @EXPORT_OK = qw(); %EXPORT_TAGS = (); } ## Global variables # Hash of configs for multi-system set-ups our %ZCONFIG = (); our $system = ''; our $session = ''; our $field_factory = ''; our $locking = ''; our $messaging = ''; our $object_cache = {}; our $tabindex = 0; our $stub_location = 'ZZLOCATION'; our $stub_block_id = 'ZZBLOCKID'; our %ZDECRYPTOR = (); our $ZMM; our %ZKEK = (); our %SIM = (); our %SystemDefinition = (); our %ENV = (); # using the Exception::Class use Exception::Class ( 'Zymonic::Exception' => { fields => [ 'info_msg', 'email', 'call_function', 'catchable', 'catchable_message', 'zname', 'extras', 'zymocallers', 'generate_error_log', # this flag should be set when throwing a catchable within an Action # to stop the Transition catching and reporting it, but allow the # error to go further up the chain 'no_catch_transition', # similar to the above, to spot catching at filter action level 'no_catch_filter_action', # optional category, useful to set flags on exceptions # which can be checked/monitored for in the error logs 'category', # if catchable is set then error_code can be used to set a code # for the error 'error_code', ] }, 'Zymonic::Exception::from_die' => { isa => 'Zymonic::Exception', fields => [ 'session', 'email_to' ], description => 'Exception from die - [[error]]' }, 'Zymonic::Exception::ClassOption' => { isa => 'Zymonic::Exception', fields => ['class_option'], description => 'ClassOptions related exception' }, 'Zymonic::Exception::AbstractClass' => { isa => 'Zymonic::Exception', fields => ['module'], description => 'Module [[module]] is abstract, cannot be used directly' }, 'Zymonic::Exception::ErrorCanContinue' => { isa => 'Zymonic::Exception', fields => [ 'display_message', 'can_continue' ], description => '[[display_message]]' }, 'Zymonic::Exception::Redirect' => { isa => 'Zymonic::Exception', fields => ['redirect_url'], description => 'Redirecting to [[redirect_url]]', }, ###### BASE ########### 'Zymonic::Exception::Base' => { alias => 'ZBASE', isa => 'Zymonic::Exception', fields => ['message'], description => 'base module selector' }, 'Zymonic::Exception::Base::NoSearch' => { isa => 'Zymonic::Exception::Base', fields => [], description => 'No ancestor search string specified' }, 'Zymonic::Exception::Base::No_Config' => { isa => 'Zymonic::Exception::Base', fields => [], description => 'Object needs config for the method being used.', }, ############# DB ###### 'Zymonic::Exception::Db' => { alias => 'ZDB', isa => 'Zymonic::Exception', description => 'database-related exception', fields => [ 'not_log', 'email_to', 'call_function' ] }, 'Zymonic::Exception::Db::Connect' => { alias => 'DB_CONNECT', isa => 'Zymonic::Exception::Db', fields => ['driver_string'], description => 'cannot connect to db error' }, 'Zymonic::Exception::Db::Query_Hashref' => { alias => 'DB_QUERY_HASHREF', isa => 'Zymonic::Exception::Db', fields => [ 'query', 'email' ], description => 'Missing or Improper hashref error' }, 'Zymonic::Exception::Db::Query_Data' => { alias => 'DB_QUERY_DATA', isa => 'Zymonic::Exception::Db', fields => ['query_string'], description => 'tainted data passed in sql query' }, 'Zymonic::Exception::Db::Locked' => { alias => 'DB_QUERY_LOCKED', isa => 'Zymonic::Exception::Db', fields => ['message'], description => 'another process is updating the DB' }, 'Zymonic::Exception::Db::Query_Params' => { alias => 'QUERY_PARAMS', isa => 'Zymonic::Exception::Db', fields => ['query_params'], description => 'tainted data passed in parameter' }, 'Zymonic::Exception::Db::Query_Run' => { alias => 'QUERY_RUN', isa => 'Zymonic::Exception::Db', fields => [ 'stage', 'sql_query', 'sql_err', 'email' ], description => 'cannot execute the sql query statement Error!' }, 'Zymonic::Exception::Db::Last_Insert' => { alias => 'LAST_INSERT_ERROR', isa => 'Zymonic::Exception::Db', fields => ['table'], description => 'cannot retrieve the last_insert_id()' }, 'Zymonic::Exception::Db::No_Primary_Key' => { alias => 'NO_PRIMARY_KEY', isa => 'Zymonic::Exception::Db', fields => ['table'], description => 'table has no primary key defined' }, 'Zymonic::Exception::Db::No_Auto_Inc_Primary_Key' => { alias => 'NO_AUTO_INC_PRIMARY_KEY', isa => 'Zymonic::Exception::Db', fields => ['table'], description => 'table has no auto increment primary key defined' }, 'Zymonic::Exception::Db::Cleaning' => { alias => 'DB_CLEANING', isa => 'Zymonic::Exception::Db', fields => ['table'], description => 'Error while cleaning the DB' }, ###### FIELD ########### 'Zymonic::Exception::Field::New' => { alias => 'FIELD_NEW', isa => 'Zymonic::Exception::Field', fields => ['info_error'], description => 'cannot instantiate new field error' }, 'Zymonic::Exception::Field::XMLDef' => { isa => 'Zymonic::Exception::Field', fields => ['xmldef'], description => 'XML is wrong.' }, 'Zymonic::Exception::Field::FileUpload' => { isa => 'Zymonic::Exception::Field', fields => [], description => 'FileUpload related issue.' }, 'Zymonic::Exception::Field::FileUpload::ClassOptionsMissing' => { isa => 'Zymonic::Exception::Field::FileUpload', fields => [], description => 'FileUpload ClassOptions are Missing.' }, 'Zymonic::Exception::Field::FileUpload::Destination' => { isa => 'Zymonic::Exception::Field::FileUpload', fields => [], description => 'FileUpload Destination has a problem.' }, ###### Filter ########### 'Zymonic::Exception::Filter::Read' => { alias => 'FILTER_READ', isa => 'Zymonic::Exception::Filter', fields => ['filter_ref'], description => 'Permission to read filter denied' }, 'Zymonic::Exception::Filter::LDAP' => { isa => 'Zymonic::Exception::Filter', fields => [], description => 'Generic LDAP filter error' }, 'Zymonic::Exception::Filter::LDAP::InvalidBaseTable' => { isa => 'Zymonic::Exception::Filter::LDAP', fields => [ 'basetable_zname', 'basetable_class' ], description => 'Generic LDAP filter error' }, ###### FORM ########### 'Zymonic::Exception::Form' => { alias => 'ZFORM', isa => 'Zymonic::Exception', fields => [ 'not_log', 'email_to', 'call_funtion' ], description => 'form related exceptions' }, 'Zymonic::Exception::Form::New' => { alias => 'FORM_NEW', isa => 'Zymonic::Exception::Form', fields => ['info_error'], description => 'Cannot instantiate New_Form error' }, 'Zymonic::Exception::Form::Update' => { alias => 'FORM_UPDATE', isa => 'Zymonic::Exception::Form', fields => ['form'], description => 'Check if update permission' }, 'Zymonic::Exception::Form::Append' => { alias => 'FORM_APPEND', isa => 'Zymonic::Exception::Form', fields => ['form'], description => 'Check if append permission' }, 'Zymonic::Exception::Form::Delete' => { alias => 'FORM_DELETE', isa => 'Zymonic::Exception::Form', fields => ['form'], description => 'Check if delete permission' }, 'Zymonic::Exception::Form::PreFill' => { alias => 'FORM_PREFILL', isa => 'Zymonic::Exception::Form', fields => [ 'form', 'prefill_map' ], description => 'Error with pre-filling form.' }, ###### PROCESS ########### 'Zymonic::Exception::Process' => { alias => 'ZPROCESS', isa => 'Zymonic::Exception', fields => [ 'not_log', 'email_to' ], description => 'process related exception' }, 'Zymonic::Exception::Process::New' => { alias => 'PROCESS_NEW', isa => 'Zymonic::Exception::Process', fields => ['info_error'], description => 'Cannot instantiate New_Process error' }, 'Zymonic::Exception::Process::Create' => { alias => 'PROCESS_CREATE', isa => 'Zymonic::Exception::Process', fields => ['process_name'], description => 'Check if new process created' }, 'Zymonic::Exception::Process::View' => { alias => 'PROCESS_VIEW', isa => 'Zymonic::Exception::Process', fields => ['process_name'], description => 'Check if view permission' }, 'Zymonic::Exception::Process::Query_Test' => { alias => 'PROCESS_QUERY_TEST', isa => 'Zymonic::Exception::Process', fields => ['condition_params'], description => 'Condition testing query failed error' }, 'Zymonic::Exception::Process::No_ID' => { alias => 'PROCESS_NO_ID', isa => 'Zymonic::Exception::Process', fields => ['process_name'], description => 'No process ID found' }, 'Zymonic::Exception::Process::No_State' => { alias => 'PROCESS_NO_STATE', isa => 'Zymonic::Exception::Process', fields => ['process_name'], description => 'No current state found in process' }, ###### RelationshipPermissions (RP) ##### 'Zymonic::Exception::RP' => { isa => 'Zymonic::Exception', fields => [], description => 'Problem in RelationshipPermission' }, 'Zymonic::Exception::RP::Table_Missing' => { isa => 'Zymonic::Exception::RP', fields => [], description => 'No Table Object passed to RelationshipPermissions' }, 'Zymonic::Exception::RP::No_Record_Id' => { isa => 'Zymonic::Exception::RP', fields => [], description => 'No Record Id passed in' }, ###### UTILS ########### 'Zymonic::Exception::Utils' => { alias => 'ZUTILS', isa => 'Zymonic::Exception', fields => [ 'not_log', 'email_to' ], description => 'utils related exception' }, 'Zymonic::Exception::Utils::Autoload' => { isa => 'Zymonic::Exception::Utils', fields => ['field'], description => 'Autoload related exception' }, 'Zymonic::Exception::Utils::Config' => { alias => 'UTILS_CONFIG', isa => 'Zymonic::Exception::Utils', fields => ['config_obj'], description => 'config object missing error' }, 'Zymonic::Exception::Utils::Auth' => { alias => 'UTILS_AUTH', isa => 'Zymonic::Exception::Utils', fields => [], description => 'auth object missing error' }, 'Zymonic::Exception::Utils::Message' => { alias => 'UTILS_MESSAGE', isa => 'Zymonic::Exception::Utils', fields => ['message'], description => 'message missing error' }, 'Zymonic::Exception::Utils::Resource' => { alias => 'UTILS_RESOURCE', isa => 'Zymonic::Exception::Utils', fields => ['resource'], description => 'resource missing error' }, 'Zymonic::Exception::Utils::Success_String' => { alias => 'UTILS_SUCCESS_STRING', isa => 'Zymonic::Exception::Utils', fields => ['success_string'], description => 'Check that success must be yes or No ' }, 'Zymonic::Exception::Utils::Priority_String' => { alias => 'UTILS_PRIORITY', isa => 'Zymonic::Exception::Utils', fields => ['priority_string'], description => 'Check that Priority must be; error, warning or information' }, 'Zymonic::Exception::Utils::Smtp_Server' => { alias => 'UTILS_SMTP_SERVER', isa => 'Zymonic::Exception::Utils', fields => [], description => 'Cannot find email smtp server info in config file' }, 'Zymonic::Exception::Utils::Open_ErrorLog' => { alias => 'OPEN_ERRORLOG', isa => 'Zymonic::Exception::Utils', fields => ['log_file'], description => 'Cannot open the error log file' }, 'Zymonic::Exception::Utils::Xlst' => { alias => 'MSG_EMAIL_XLST', isa => 'Zymonic::Exception::Utils', fields => [], description => 'Cannot find Xlst as default from config' }, 'Zymonic::Exception::Utils::Mail' => { alias => 'SEND_EMAIL', isa => 'Zymonic::Exception::Utils', fields => ['mail_to'], description => 'Error with mail' }, 'Zymonic::Exception::Utils::Mail::Build' => { alias => 'MAIL_BUILD', isa => 'Zymonic::Exception::Utils::Mail', fields => ['subject'], description => 'Error Creating the mail container using Mime::Lite' }, 'Zymonic::Exception::Utils::Mail::Add_Message' => { alias => 'MAIL_ADD_MESSAGE', isa => 'Zymonic::Exception::Utils::Mail', fields => ['message'], description => 'Error in adding message to mail' }, 'Zymonic::Exception::Utils::Mail::Attach' => { alias => 'MAIL_ATTACH', isa => 'Zymonic::Exception::Utils::Mail', fields => ['attach_file'], description => 'Error in doing attachment to mail' }, 'Zymonic::Exception::Utils::Mail::Sent' => { alias => 'MAIL_SENT', isa => 'Zymonic::Exception::Utils::Mail', fields => [ 'message', 'subject' ], description => 'Error in sending mail' }, 'Zymonic::Exception::Utils::Currency' => { alias => 'ZUTILS_CURRENCY', isa => 'Zymonic::Exception::Utils', fields => ['currency'], description => 'utils currency related exception' }, 'Zymonic::Exception::Utils::Country' => { alias => 'ZUTILS_COUNTRY', isa => 'Zymonic::Exception::Utils', fields => ['country'], description => 'utils country related exception' }, 'Zymonic::Exception::Utils::Scrub' => { alias => 'ZUTILS_SCRUBE', isa => 'Zymonic::Exception::Utils', fields => [ 'file', 'dir' ], description => 'utils scrub related exception' }, 'Zymonic::Exception::Utils::Module' => { alias => 'ZUTILS_Module', isa => 'Zymonic::Exception::Utils', fields => ['module'], description => 'module related exception' }, 'Zymonic::Exception::Config' => { isa => 'Zymonic::Exception', fields => [ 'path', 'maintainer' ], description => 'Config error' }, 'Zymonic::Exception::Config::Duplicate_ZName' => { isa => 'Zymonic::Exception::Config', fields => [ 'ZName', 'orig_path', 'orig_maintainer', 'new_path', 'new_maintainer', 'sourcefile', 'autocreated' ], description => 'Duplicate ZName detected', }, 'Zymonic::Exception::Config::Missing_ZName' => { isa => 'Zymonic::Exception::Config', fields => [], description => 'ZName not detected', }, ###### QueryBuilder ########### 'Zymonic::Exception::QueryBuilder' => { alias => 'ZQUERYBUILDER', isa => 'Zymonic::Exception', fields => [], description => 'QueryBuilder related exception' }, 'Zymonic::Exception::QueryBuilder::MissingJoin' => { isa => 'Zymonic::Exception::QueryBuilder', fields => [ 'field', 'table' ], description => 'Missing Join in query.', }, 'Zymonic::Exception::QueryBuilder::SortingJoins' => { isa => 'Zymonic::Exception::QueryBuilder', fields => [ 'joins', 'unsortable_joins' ], description => 'Error in sorting joins.' }, ###### Transformation ########### 'Zymonic::Exception::Transformation' => { alias => 'ZTRANSFORMATION', isa => 'Zymonic::Exception', fields => ['zname'], description => 'Transformation related exception' }, 'Zymonic::Exception::Transformation::Currency' => { isa => 'Zymonic::Exception::Transformation', fields => ['currency'], description => 'Currency Transformation related exception' }, 'Zymonic::Exception::Transformation::Percentage' => { isa => 'Zymonic::Exception::Transformation', fields => [ 'display_as', 'store_as' ], description => 'Percentage Transformation related exception' }, ###### Hook ########### 'Zymonic::Exception::Hook' => { alias => 'ZHOOK', isa => 'Zymonic::Exception', fields => [ 'zname', 'type', 'type_zname' ], description => 'Hook related exception' }, ###### Decryptor ###### 'Zymonic::Exception::Decryptor' => { isa => 'Zymonic::Exception', fields => ['decryptor'], description => 'Decryptor related exception' }, 'Zymonic::Exception::Decryptor::Server' => { isa => 'Zymonic::Exception::Decryptor', fields => [], description => 'Decryptor Server related exception' }, 'Zymonic::Exception::Decryptor::Message' => { isa => 'Zymonic::Exception::Decryptor', fields => ['log_id'], description => 'Generic Decryptor Message Exception', }, 'Zymonic::Exception::Decryptor::Message::LDAP' => { isa => 'Zymonic::Exception::Decryptor::Message', fields => [], description => 'Decryptor LDAP Message Exception', }, ###### Schema ###### 'Zymonic::Exception::Schema' => { isa => 'Zymonic::Exception', fields => [], description => 'Schema related exception' }, ###### Manual ###### 'Zymonic::Exception::Manual' => { isa => 'Zymonic::Exception', fields => [], description => 'Manual related exception' }, ###### SoFV ########### 'Zymonic::Exception::SoFV' => { isa => 'Zymonic::Exception', fields => [ 'name', 'zname', 'catchable' ], description => 'Static of Field Value related exceptions ' }, ###### Payment Gateway ###### 'Zymonic::Exception::PaymentGateway' => { isa => 'Zymonic::Exception', fields => ['type'], description => 'PaymentGateway related exception' }, 'Zymonic::Exception::PaymentGateway::Connection' => { isa => 'Zymonic::Exception::PaymentGateway', fields => [], description => 'Error with PaymentGateway connection' }, 'Zymonic::Exception::PaymentGateway::Request' => { isa => 'Zymonic::Exception::PaymentGateway', fields => [], description => 'Error with PaymentGateway request' }, ###### FilterAction ###### 'Zymonic::Exception::FilterAction' => { isa => 'Zymonic::Exception', fields => [], description => 'FilterAction related exception' }, 'Zymonic::Exception::FilterAction::Mapping' => { isa => 'Zymonic::Exception::FilterAction', fields => [ 'field', 'parameter' ], description => 'FilterAction Mapping related exception' }, 'Zymonic::Exception::FilterAction::FieldMap' => { isa => 'Zymonic::Exception::FilterAction', fields => [ 'source_field', 'destination_field' ], description => 'FilterMap Mapping related exception' }, ###### File I/O ###### 'Zymonic::Exception::FileIO' => { isa => 'Zymonic::Exception', fields => [ 'filename', 'is_dir', 'error_details' ], description => 'FileIO related exception' }, 'Zymonic::Exception::FileIO::Write' => { isa => 'Zymonic::Exception::FileIO', fields => [], description => 'Unable to write file [[filename]]' }, 'Zymonic::Exception::FileIO::Read' => { isa => 'Zymonic::Exception::FileIO', fields => [], description => 'Unable to read file [[filename]]' }, 'Zymonic::Exception::FileIO::Retrieval' => { isa => 'Zymonic::Exception::FileIO', fields => [ 'file', 'file_name', 'display_file', 'content_type', 'no_block_delete', 'not_as_attachment' ], description => 'Retrieving file [[file_name]] ([[display_file]])' }, 'Zymonic::Exception::FileIO::Link' => { isa => 'Zymonic::Exception::FileIO', fields => [ 'old_link', 'new_link' ], description => 'Unable to link file [[old_link]] to [[new_link]]' }, ###### General System Errors ###### 'Zymonic::Exception::System' => { isa => 'Zymonic::Exception', description => 'System related exception' }, 'Zymonic::Exception::System::UnableToFork' => { isa => 'Zymonic::Exception::System', description => 'Unable to fork a new process' }, ###### Output Exceptions ###### 'Zymonic::Exception::ForceOutput' => { isa => 'Zymonic::Exception', fields => ['output'], description => '' }, 'Zymonic::Exception::ExpectingForcedOutput' => { isa => 'Zymonic::Exception', fields => [ 'from', 'error_message', 'message_params' ], description => 'Expecting forced output from [[from]]: [[error_message]]' }, ); 1;