=head1 NAME DBIx::Web - Active Web Database Layer =head1 SYNOPSIS use DBIx::Web; my $w =DBIx::Web->new( -serial=>2 ,-debug=>2 ,-index=>1 ,-path=>'path to file store' ,-url=>'base URL of file store' ,-urf=>'filesystem URL to file store' ); $w->set(-table=>{ ...... see examples ...... ,$w->tvmVersions() ,$w->tvmHistory() }); $w->set(-form=>{ ...... see examples ...... ,'default'=>{-subst=>'default form or table name'} }); $w->cgiRun(); =head1 DESCRIPTION This is a database layer for Perl scripts, implementing triggers, record versioning, access control at the record level, file attachments to records, materialised views. There is a web user interface also. Based on L and L data engines. Based on L for user interface. Currently implemented and tested on Win32 Apache and IIS (considering C warnings). L, the previous project, was: focused on CGI user interface to database tables, not database metaphor; too complex in record version control programming; too complex and surplus in architecture and setup. L has a very interesting database metaphor, but not many features. Ls are good in hypertext metaphor and records versioning, but may be without database records metaphor, file attachments, access control at the record level. =head1 CONCEPTS =over =item RELATIONAL DATABASES Have several disadvantages: =item Record Level Access Control Many of relational databases have not explicit record level access control. It may be implemented via views and triggers, within another application code. Fields for readers and authors names are useful, further needs dependences between records. =item Temporal Data Model Many of relational databases have not temporal data model. It may be implemented via triggers and views, within another application code, but see R3 data model architecture... But it may be useful recognize, who, when, what record edited. Further needs date-times of actuality of record. =item Polymorph records Can I query and view data not from concrete tables but from database? It may be implemented via materialized views metaphor, using triggers. Further needs uniform record identifiers, to point to any record from any record, or URL. Full-text queries are also useful. =item Storage Size Record types are implemented via database tables. Some tables due to generalization may grow. Very big tables may be difficult in repair or maintenance. =item File Attachments May be implemented via BLOBs. But how to attach several files to any record? =item GROUPWARE DATABASES Alike Lotus Domino, have several additional disadvantages: =item Bad Development Capabilities There are no triggers, transactions, joins... =item WEB DATABASES Have several disadvantages: =item Triggers Implementation All application codes are concentrated at the server. Why programmer needs to use different programming languages to implement triggers and stored procedures in the database and another procedures in the web server? Why user interface hooks may not be considered as a kind of triggers? Should be interesting a separate 'triggers server'? Or this may be considered as a kind of application servers? =item Database Engines Why sole engine should be core? Another data engines or sources may be interesting. =item WEB COLLABORATIVE TOOLS Alike Wikis, may include record level access control, file attachments, forms, views and queries, may progress towards database metaphor. But transition from from initial hypertext metaphor to database may require a great effort in implementation. =item THIS DATABASE The goal may to be conceptually better then Lotus Notes or to look alike some Wiki, but with remaining ability to implement any relational database and any data source interface. Any case, this database has several disadvantages too: =item Effectiveness Triggers level implementation is not very efficacious. One of the problems is repeating cursor loops in C (one for '0R' trigger and one inside C) and C (for '0R' trigger and C or C). The last loop is always effectively implemented inside L SQL databases, but for Ls it should be implemented implicitly inside C or C. To implement efficacious '1R' triggers inside C or C, and also for effectiveness of Ls, C and C should not be oriented to the groups of rows, or there should be a fast additional single row oriented interface. Also C should use a fast single row oriented interface of C. So, there should be two interfaces to C, C and C for effectiveness. But this is difficult in develop and test. =item Restricted Database API Database API implements restricted choice of SQL capabilities. SQL is comprehensive, but alien to any host language. It is too difficult to translate host programming to SQL, SQL to triggers implementation, triggers implementation to SQL towards database. =item Restricted Database Implementations It is too difficult for embedded C to support transactions and many SQL features. It is very difficult to implement transactions covering file attachments. It is very difficult to implement real full-text search and full-text indexing both for database records and file attachments. Existed external indexing machine should understand data records and access rights. Embedded indexing machine should understand formats of files attached. Database may have it's own full-text implementation also. =item Another See version info. See marked with '!!!' or '???' comments in the source code. =back =head1 CLASSIFICATION =over =item Slots and Methods C are available via C call or $self->{-name} syntax. See C source for preferred to be defined in C call slots. Table and Form description (C<-table>, C<-form>) slots, special data fields, and another keywords are denoted specially. The first value listed is the default. C are used via $object->call() syntax. Slot names begin with '-' sign. =item Creation and Setup C, C, C, C; C<-env>; C, C, C<-end0>, C<-endh>, C<-end1>; C, C<-setup>; C<-cgibus> =item Error Processing C<-die>, C<-warn>, C<-debug>; C, C =item Locale C<-locale>, C<-lang>, C<-charset>, C<-lng>; C, C =item Misc Data methods C, C, C, C, C, C, C, C; C, C; C, C, C; C, C, C, C; C, C, C; C; C, C, C; C, C, C, C, C, C, C, C; C, C, C, C, C; =item File Store C<-path>, C<-url>, C<-urf>, C<-fswtr>, C<-fsrdr>; C; C, C, C, C, C, C =item Persistent Variables C<-var>, C<-serial>; C, C, C, C =item Logging C<-log>, C<-logm>; C, C, C =item SubObjects C<-dbi>, C<-dbiarg>, C<-dbiph>, C<-dbiACLike>; C<-cgi>; C<-output>; C<-smtp>, C<-smtphost>, C<-smtpdomain>; C, C, C; C, C, C, C; C; C, C, C, C; C =item User Identification C<-user>, C<-unames>, C<-ugroups>; C<-AuthUserFile>, C<-AuthGroupFile>, C<-ldap>, C<-w32ldap>; C<-userln>, C<-usernt>, C<-udisp>; C<-udflt>, C<-unflt>, C<-ugflt>, C<-ugflt1>, C<-ugadd>; C<-w32IISdpsn>, C<-w32xcacls> C, C, C, C, C, C, C, C, C, C; C, C, C, C, C, C; C; C, C, C, C; =item Database Options C<-serial>, C<-autocommit>, C<-limit>, C<-affect>, C<-affected>, C<-fetched>, C<-limited>, C<-host>, C<-recInsID>, C<-idsplit>, C<-wikn>, C<-wikq> =item Database Description C<-title>, C<-help>, C<-table> and C<-form> (C); C<-mdlTable>, C<-mdeTable>; C =item Table/Form Description =item Table Description =item Form Description C<-table> slot contains database tables descriptions. C<-form> slot contains C forms descriptions. Some slots (like C<-field>, C<-wkey>, C, C) are common to C<-table> and C<-form>. '-qXXX' and C<-limit> slots are sufficient to describe queries or views or lists of records. Some slots may appear at database level also. C<-table>, C<-form>; C<-lbl>, C<-cmt>, C<-help>, C<-hide>, C<-expr>; C<-field> (C); C<-key>, C<-keycmp>, C<-wkey>, C<-wikn>, C<-urm>, C<-null>; C<-ixcnd>, C<-ixrec>; C<-optrec>; C<-dbd>, C<-dbiACLike>; C; C (C<-cgiRun0A>, C<-cgcXXX>; C<-subst>, C<-recXXX>; C<-query>, C<-frmLso>, C<-frmLsc>; C<-qfilter>, C<-qhref>, C<-qhrcol>, C<-qfetch>, C<-limit>; C<-cgvXXX>) =item Field Description C<-field> C
slot contains reference to array of field descriptions. Ordinary field description is a hash ref with a keys listed below. Also may be used when display single record form sub{}s and layout markup strings. C<-fld>, C<-expr>, C<-lbl>, C<-cmt>, C<-help>; C<-flg>, C<-null>, C<-chk>, C<-edit>; C<-colspan>, C<-hide>, C<-hidel>; C<-lblhtml>, C<-lblhtbr>, C<-fhclass>, C<-fhstyle>, C<-fhprop>; C<-inp>, C<-inphtml>, C<-fdstyle>, C<-fdclass>, C<-fdprop>; C<-ddlb>, C<-ddlbmult>, C<-ddlbtgt>, C<-ddlbloop>, C<-ddlbmsab>; C<-form>; C<-fnhref>, C<-fnhtml>, C<-fvhref>; C<-lsthtml>, C<-lhclass>, C<-lhstyle>, C<-lhprop>, C<-ldclass>, C<-ldstyle>, C<-ldprop> =item Record level Access Control C<-rac>, C<-dbiACLike>; C<-racAdmRdr>, C<-racAdmWtr>, C<-racReader>, C<-racWriter>; C<-racActor>, C<-racManager>, C<-racPrincipal>, C<-racUser>; C<-editable>; C<-recFlim0R>, C, C =item Record level Version Control C<-rvcInsBy>, C<-rvcInsWhen>, C<-rvcUpdBy>, C<-rvcUpdWhen>, C<-rvcActPtr>, C<-rvcVerWhen>, C<-rvcChgState>, C<-rvcCkoState>, C<-rvcDelState>. See also C =item Record File Attachments C<-rfa>, C<-rfdName>; C<-file>, C<-fupd>; C, C, C, C; C, C See also C =item Materialised Views C<-index>, C<-ixcnd>, C<-ixrec>; C, C See also C, C, C =item Record ID References C<-ridRef> See also C, C =item Triggers C<-end0>, C<-endh>, C<-end1>; C; C<-cgiRun0A>; C<-recTrim0A>; C<-recForm0A>, C<-recForm0C>, C<-recForm0R>, C<-recFlim0R>, C<-recForm1C>, C<-recForm1A>; C<-recEdt0A>, C<-recEdt0R>, C<-recChg0R>, C<-recChg0W>, C<-recEdt1A>; C<-recNew0C>, C<-recNew0R>, C<-recNew1C>; C<-recIns0C>, C<-recIns0R>, C<-recInsID>, C<-recIns1R>, C<-recIns1C>; C<-recUpd0C>, C<-recUpd0R>, C<-recUpd1C>; C<-recDel0C>, C<-recDel0R>, C<-recDel1C>; C<-recIndex0R>; C<-recSel0C>; C<-recRead0C>, C<-recRead1C> =item Database Operation C, C; C, C; C, C, C, C, C; C, C, C, C, C; C, C; C, C, C, C, C See also C. =item Data Record Special fields Record's hash ref returned from C calls contains data fields and values. But some fields are specially computed to describe record: C<-new>, C<-file>, C<-fupd>, C<-editable> =item User Interface Start review with C. C
; C<-pcmd>, C<-pdta>, C<-pout>; C<-form>; C<-cgiRun0A>, C<-cgcXXX>; C<-subst>, C<-recXXX> (C<-recNew>, C<-recForm>, C<-recIns>, C<-recUpd>, C<-recDel>, C<-recRead>, C<-recList>,...); C<-recX#A> (C<-recTrim0A>, C<-recEdt0A>, C<-recEdt0R>, C<-recEdt1A>); C<-httpheader>, C<-htmlstart>; C<-banner>, C<-logo>, C<-search>, C<-login>, C<-icons>; C<-menuchs>, C<-menuchs1>, C<-frmLso>, C<-frmLsc>; C<-cgvXXX>; C, C, C (and C, C); C, C, C; C, C; C, C, C, C, C (and also C and C, C and C, C, C, C), C (and C), C, C. See also C, C. =item UI Substitutions C (C<-cgcXXX>, C<-subst>, C<-recXXX>, C<-cgvXXX>); C (C<-field>, C<-query> C<-data>, C<-table> C<-field>); C (C<-query> C<-data> C<-display>, C<-field>, C<-table> C<-field>) See also C. =item Templates C<-tn>, C; C; C, C; C, C; C, C; C; C; C, C; C, C =back =head1 SLOTS =over =item Slots See C =item -affect => not exists || 1 (C) Number of rows to be affected by DML 'recUpd' or 'recDel' operation. Distinguish from C<-limit>. =item -affected (C) Number of rows really affected by DML 'recIns', 'recUpd', 'recDel' operation. See also C<-affect> =item -AuthUserFile => not exists || file path (C) Apache Users file, to be used in C method, optional See also C. =item -AuthGroupFile => not exists || file path (C) Apache Groups file, to be used in C and C methods, optional. See also C. =item -autocommit => 1 || false (C) Autocommit database mode =item -banner => not exists || HTML || sub{}(self) -> HTML (C) Banner to display at the top. See also C<-logo> =item -c => {} Internal cache for computed values =item -cgcXXX => not exists || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) || 'filename.psp' || 'perl filename' =item -cgcURL => URL to redirect to (C
- C) Redirects C to execute full external implementation of request or screen alike C, C, C, C, C, C, C. See C for '*.psp' files description. See C<-recXXX>, C<-subst>, C<-table> for redirections of request to another form or table. See C<-cgvXXX> for external implementation of presentation only. =item -cgi => not exists || CGI object (C) CGI object, if used, created and available via C call =item -cgibus => not exists || sub{}($self) || CGI::Bus::tm file attachments path (C) Switch to L example applications behaviour, may be useful about redesign and migration. =item -cgiRun0A => not exists || sub{}($self, {command}) (C: C, C
, C - all executed) The first trigger executed before ('0A') any C action as soon as possible by C. Recommended only for modification of user interface specifications. =item -cgvXXX => not exists || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) || 'filename.psp' || 'perl filename' (C
- C) Redirects C to execute presentation external implementation of request or screen alike C, C, C, C, C, C, C. See C for '*.psp' files description. See C<-recXXX> for redirections of request to another form or table. See C<-cgcXXX> for full external implementation. =item -charset => locale specific || '1252' || 'sharset code' || not exists (C) Application's charset, see also C<-locale> =item -chk => not exists || sub{$_, $@}(self, ) (C - C) Field value check. Performed after C<-recTrim0A> and C<-null> conversion preceding C or C operation. $_ represents field value, may be read and assigned; $@ intended for constraint violation message. =item -cmt =item -cmt_LL => not exists || comment text || sub{}(self,...) -> comment text (C
, C, C) Text of object description to display to users, default (international) or user language specific. See also C<-lbl> =item -colspan => not exists || colspan html td element attribute (C) Number of form layout columns to be occupied by field. See also C<-colwidth> =item -colwidth => not exists || width html td element attribute (C) Width of form layout column to be occupied by field. See also C<-colspan> =item -debug => 0 || 1 (C) Debug mode switch, debug features level =item -dbd => not exists || 'dbi' || 'dbm' || ... (C
, C) Database engine used for table or as default for database. See also C. =item -dbi => not exists || DBI object (C) DBI object, if used, created and available via C call, using C<-dbiarg> to create =item -dbiACLike => not exists || '' || rlike regexp ~* similar regexp_like like eq|=; lc; filter|sub (C, C
, C) DBI LIKE operation options for access control fields comparation. There may be MySQL 'rlike' or 'regexp' operator, PostgreSQL '~*' operator, Oracle 'regexp_like' function name, SQL'99 'similar to' operator, widely known but problematical 'like' and '=' operators. Additional 'lc' or 'lower' word involves lowercase conversion. Additional 'filter' or 'sub' word involves C<-filter>ing to ensure 'like' case. Default operation depends on database driver name. =item -dbiarg => not exists || 'arguments' || [arguments] (C) DBI connection arguments string or array, used in C call. Started with 'DBI:Proxy:hostname=127.0.0.1...' connection string starts L process if not found connecting, i.e. 'dbi:Proxy:hostname=127.0.0.1;port=3334;proxy_no_finish=1;dsn=DBI:mysql:...'. See also C<-dbistart>. =item -dbiexpl => not exists || boolean (C) DBI explain switch, default is On, may be used along with C<-debug>, for speed. =item -dbiph => not exists || boolean (C) Placeholders ('?') usage switch for arguments of DBI commands. Default behaviour is embedding values quoted as hinted via C<-flg> or analysed. =item -dbistart => not exists || 'start comands' || ['start command',...] || sub{}(self) (C) DBI connection startup to be executed by C when connecting. =item -ddlb => not exists || form name || sub{$_}($self,{field},'eqp' mode,{record}) -> ddlb || [value,...[value=>labels],...] || {value=>label,..., value=>[labels],...} || cursor (C) Drop-down list box with editable input and produced on button press selection list. C, C, C, C, C results may be returned by sub{}. See also C<-ddlbmult>, C<-ddlbtgt> =item -ddlbloop => not exists || boolean (C) Hint to reopen list box after input value chosen from it, may be used for hierarchical selection lists. See C<-ddlb>. =item -ddlbmsab => not exists || boolean (C) Hint to use Microsoft Address Book instead of C<-ddlb> if possible. See C<-ddlb>. =item -ddlbmult => not exists || boolean (C) Drop down list box allowing multi value selection. Reserved. See C<-ddlb>. =item -ddlbtgt => not exists || field name || [field name,.. ? '<+field name',.. ? [field name => label, ? multi],..] (C) Drop down list box targets. '+' marks multivalue fields. 'multi' mark considered as boolean digit or values delimiter. Single field name will be represented with submit button, array will be represented with javascript buttons; default is current field. See C<-ddlb>. =item -die => \&croak, see source code (C) Failure sub{}: die / croak / confess; using &{$s->{-die} }('error') inside. C(-die=>'core'||'perl'||'Module name') call sets also C<-warn>. =item -edit => not exists || sub{}($self,{field},'eqp' mode,value) || boolean (C) Editable field condition. Otherways field will be readonly. =item -editable => not exists || boolean (C, C) Editable record sign. Stamped by C calls. Useful for C level. =item -end0 => not exists || sub{}($self) =item -endh => {} || {name=>sub{}($self)} =item -end1 => not exists || sub{}($self) (C, C) C operation triggers. C<-end0> - before cleanup. C<-endh> - delayed commands, cleaned after execution. C<-end1> - after cleanup. =item -env => not exists || {env var=>value,...} (C) Assignment or deletion of environment variables within C. =item -expr => not exists || database name or formula (C
, C) Table or Field name as used inside SQL database engine, or SQL expression. Table name for application is explained as C<-table> key. Field name for application is explained as C<-fld>. =item -fdclass => not exists || string || sub{$_}($self,{field},'eqp' mode,{record}) -> string (C) Form data ('td') HTML tag class(es) =item -fdstyle => not exists || string || sub{$_}($self,{field},'eqp' mode,{record}) -> string (C) Form data ('td') HTML tag style =item -fdprop => not exists || HTML tag properties string (C) Form data ('td') HTML tag additional properties =item -fetched (C) Number of rows retrieved from the database query result set. May be C<-limited> by C<-limit>. Distinguish from C<-affected> =item -fhclass => not exists || string || sub{$_}($self,{field},'eqp' mode,{record}) -> string (C) Form label ('th') HTML tag class(es) =item -fhstyle => not exists || string || sub{$_}($self,{field},'eqp' mode,{record}) -> string (C) Form label ('th') HTML tag style =item -fhprop => not exists || HTML tag properties string (C) Form label ('th') HTML tag additional properties =item -field => [{field},..., ''||"\n"||"\t"||"\f"||'
'||'text'||sub{},..., {field}] => {name => {attributes}} # deprecated (C - C) Reference to array of field descriptions. Ordinary field description is a hash ref, see C. When display a single record form also may be used layout markup strings, text strings, sub{}routines. Text or result of sub{} evaluation will be outputted. Tabular form layout hints: '' continues labels and fields in the current row, "\n" continues on next row(s), "\t" skips cell(s), "\f" finishes tabular layout, '
' finishes tabular layout and labels of the fields. See also C<-colspan> and C<-lblhtbr>. =item -file => not exists || record file attachments subdirectory (C, C) Sign and place of files attached to the record. Stamped by C calls. Use C to obtain absolute location. =item -fld => field name (C) Field name as used by application. Database field name or expression may be explained by C<-expr>. =item -flg => not exists || 'ahkweumqln"' (C) Flags of the field: 'a'll operation below, except 'h'yperlink, 'k'ey, 'w'key, quoting, excluding; default 'k'ey - primary key, C<-key> preffered 'w'here key - optimistic locking key, C<-wkey> preffered 'e'ditable, C<-edit> preffered, see also C<-hide> 'u'pdateable, may be inserted or saved into database 'm'andatory value 'h'yperlink hint 'q'uery form, may be used to form query condition 'l'istable, may be used in lists of records 'f'etchable alongside 'l'istables together with 'akwq' 'n'umeric quoting '9' numeric quoting '"' string quoting '-' exclude implicit flags =item -fnhref => not exists || sub{$_}($self,{field},'eqp' mode,{record}) -> URL =item -fnhtml => not exists || sub{$_}($self,{field},'eqp' mode,{record}) -> HTML (C) Form footnote URL or HTML to append to display of field. =item -form => not exists || {form name => {form description} } => not exists || form name to display records || [?form, ?command, ?key field] || [?form, ?command, '-wikn'] || sub{$_}() -> url string || ['urlCmd' args] || false (C, C) User Interface forms descriptions. (C, C) Form to display records by field value. =item -frmLsc => not exists || [ {-val => fieldname} || {-val=>option, ? -lbl=>title , ? -cmd=> {'cgiList' options} || sub{}(self, name, {metadata}, {query}, option)} || [option, ? title, ? {'cgiList' options} || sub{}],...] (C - C) C / C display options alike column sets (C<-data>, C<-display>), sorting and grouping orders (C<-order>, C<-group>). =item -frmLso =item -frmLsoAdd => not exists || boolean || [{-val=>option, ? -lbl=>title , ? -cmd=> {'-pcmd' options} || sub{}(self, name, {metadata}, {query}, option)} || [option, ? title, ? {'-pcmd' options} || sub{}],...] || sub{}(self, name, meta, command, option) -> [list] =item -frmLso0A => not exists || sub{}(self, name, meta, {'-pcmd' options}, option) =item -frmLso0C => not exists || sub{}(self, name, meta, command, option) =item -frmLso1C => not exists || sub{}(self, name, meta, command, menu comment) -> html =item -frmLso2C => not exists || sub{}(self, name, meta, command) -> html (C
- C) C form query options, default provided by C as C<-urole> C clause. C<-frmLso0A> trigger will be called for each C<-frmLso> value and may be used to change C<-pcmd> emulating user defined query parameters. C<-frmLso0C> trigger may be used to modify immediate arguments of issue. C<-frmLso1C> and C<-frmLso2C> triggers may be used to modify C comment and C first column header. C and C methods may be useful. =item -fsrdr => not exists || [users names] (C) File Store Readers - users names =item -fswtr => not exists || [users names] (C) File Store Writers - users names =item -ftext => not exists || [field names] (C
) Fields for full-text search. Default is all fields of record. =item -fupd => not exists || record file attachments updatable sign (C, C) Record file attachments updatable sign. Stamped by C calls along with C<-file>. =item -fvhref => not exists || false || sub{$_}($self,{field},'eqp' mode,{record}) -> URL (C) Form value URL to underline display of field. =item -help => not exists || help text || help html || sub{}(self) -> text || html (C, C
, C) Help text for C. =item -hide => not exists || sub{$_}($self,{field},'eqp' mode,{record}) || boolean (C) Hide field condition. (C
) Hidden form sign. =item -hidel => not exists || sub{$_}($self,{field},'eqp' mode,{record}) || boolean (C) Hide field condition with left shift of following layout. =item -host => see source code (C) Host name to use in record unique IDs generated, see also C<-recInsID> =item -htmlstart => not exists || {} (C) L::start_html call parameters hash ref =item -httpheader => not exists || {} (C) L::header call parameters hash ref =item -icons => '/icons' (C) URL to Apache default icons =item -idsplit => true || false || sub{}($self, {command}, key value) (C) Split complex record ID to table name and row ID, if record ID is so complex. Used within C. =item -index => not exists || boolean (C - C
or C) Materialized views support switch, see C<-ixcnd>, C<-ixrec> =item -inp => not exists || {L widget parameters} || sub{}(C args) -> html (C) Widget description, mostly in terms of L module. Widget type selection rules and additional meanings are specified below. See also C<-ddlb>, C<-ddlbtgt> for editable list boxes. See also C<-inphtml>, C<-lbl>, C<-lblhtml>. not exists # text field -htmlopt=> boolean # html may be, determined via C -hrefs => boolean # hyperlinks highlight, including special protocol values: # 'urlh://' - host relative, # 'urlr://' - script relative, # 'urlf://' - record file attachments directory, # 'key://' - reference to record: id or table//id, # 'wikn://' - reference to record: wiki name (see '-wikn') # And bracket notations: # [[xxx://...]], [[xxx://...][label]], [[xxx://...|label]] -cols => number # text area -rows => number # text area -arows => min # text area of variable height -asize => min # text field of variable length -labels => sub{}(self) ||{value=>label,...} # list box, optional if '-values', see C<-ddlb> instead -labels_LL... # ... user language specific -values => sub{}(self) ||[value,...] # list box, optional if '-labels' -loop or -ddlbloop => boolean ||sub{}(self) # call C after list box choice change -rfd => boolean # record file attachments widget otherwise # text field =item -inphtml => not exists || html text || sub{$_}($self,{field},'eqp' mode,{record}) -> html (C) HTML presentation of field entry, use it together with C<-inp>. Sub{} will be evaluated to produce HTML string. '$_' in HTML will be replaced with C<-inp>. See also C<-lblhtml> =item -ixcnd => not exists || boolean || sub{}(self, {command}, {record}) -> boolean (C
) Index table (C) indication. Scalar 'true' value is used for indexes should be updated from C<-recIndex0R> indexing trigger. Sub{} used as condition for inclusion of particular record from particular table into index. C<-ixrec> used to obtain values for inclusion/exclusion =item -ixrec => not exists || sub{}(self, {command}, {record}, '+'||'-') -> {record}||[{record},...] (C
) Index table (C) records former. May directly create ('+') or delete ('-') index records, or return values of records to be included or excluded. See also C<-ixcnd> =item -key => [field name,...] (C
) Key fields names of the table. =item -keycmp => not exists || sub{}(self, [key a], [key b]) (C
) Key compare dbm sub{}. Generally not used. See 'compare' parameter of L. =item -lang => locale specific || 'en' || 'language abbreviation' || not exists (C) Application's language, see also C<-locale> =item -lbl =item -lbl_LL => not exists || label text || sub{}(self) -> label text (C
, C, C) Label or external name of the object to be displayed to user, default (international) or user language specific. See also C<-cmt>, C<-lblhtml>, C<-inp>, C<-inphtml> =item -lblhtbr => not exists || "\f" || '
' || true (C) Finish of form tabular layout between field label and value. See C<-field> for values possible. =item -lblhtml => not exists || html text || sub{$_}($self,{field},'eqp' mode,{record}) -> html (C) HTML presentation of field label, use it together with C<-lbl>. Sub{} will be evaluated to produce HTML string. '$_' in HTML will be replaced with C<-lbl>. =item -ldap => not exists | boolean | server name | [connect args] | {connect args} =item -ldapsrv => not exists | server name | [connect args] | {connect args} =item -ldapbind => not exists | bind arg | [bind args] | {bind args} =item -ldapsearch => not exists | {search args and default filter} # i.e. {filter=>'(textEncodedORaddress=c=com;a=mail;p=barr;)'} =item -ldapfu => not exists | users filter # i.e. '(objectClass=organizationalPerson)' =item -ldapfg => not exists | groups filter # i.e. '(objectClass=groupOfNames)' =item -ldapattr =>['uid','cn'] # [system name attribute => display name attribute] (C) C('ugf_ldap') switch and settings. Settings may be used also for C. =item -ldclass => not exists || string || sub{$_}($self,, ?hyperlink, cursor, [record]) -> string (C) List data ('') HTML tag class(es) =item -ldstyle => not exists || string || sub{$_}($self,, ?hyperlink, cursor, [record]) -> string (C) List data ('') HTML tag style =item -ldprop => not exists || HTML tag properties string (C) List data ('') HTML tag additional properties =item -lhclass => not exists || string (C) List heading ('') HTML tag class =item -lhstyle => not exists || string (C) List heading ('') HTML tag style =item -lhprop => not exists || HTML tag properties string (C) List heading ('') HTML tag additional properties =item -limit => not exists (default 512 used) || number (C, C) Limit of rows to be retrieved from the database query result set. Distinguish from C<-affect>. See also C<-limlb>, C<-fetched>, C<-limited>. =item -limlb => not exists (default -limit or greater then 512) || number (C, C
) Great limit of rows to be retrieved from the database query result set to listboxes. =item -limited (C) Number of rows limited by C<-limit> during retrieve of query result set. Equals to C<-fetched> if set. Distinguish from C<-affected> =item -lng => '' || not exists || 'language' (C) User's language, about L::http('Accept_language'), see also C<-locale> =item -locale => POSIX::setlocale(&POSIX::LC_CTYPE()) (C) Application's locale, C(-locale=>...) call changes also C<-charset>, C<-lang>, C<-lng>. =item -log => 1 || undef || DBIx::Web::FileHandle object (C) Log file switch / handle, opened with C =item -logm => 100 (C) Log strings list max size to be displayed =item -login => '/cgi-bin/ntlm/' (C) Login URL part, where web server authentication of users is estimated. Web server virtual directory with user authentication required. Authentication may be required for one virtual directory and may be unnecessary for another. =item -logo => not exists || HTML (C) Logotype to display in the button bar. See also C<-banner>. =item -lsthtml => not exists || sub{$_}($self,, ?hyperlink, cursor, [record]) -> HTML string (C) Conversion of field value to HTML in the list of records via C. Value may be found in local $_. =item -mdeTable => not exists || sub{}($self, table name) -> C<-table> changed (C) Table factory, called if datafile description is not found within C<-table>. May add datafile metadata to C<-table> and create datafile if needed. See also C<-mdlTable>. =item -mdlTable => not exists || sub{}($self) -> table list (C) List of datafiles within database. Some datafiles may not be described initially within C<-table>, but may be listed using C<-mdlTable> for C. See also C<-mdeTable>. =item -menuchs =item -menuchs1 => not exists || [[form name => form label] || {-val => form name, -lbl => form label} || form name,...] (C) User Interface forms list. Default will be generated from C<-form> and C<-table>. One of special postfixes below may be supplied to form name in C<-menuchs>, while C<-menuchs1> is expected for '+' only: none - C view '+' - C form '&' - C action immediate '.' - C action dialog '^' - C page pointer =item -new => not exists || boolean (C) New record sign, stamped in C, considered in C. =item -null => null value (C - C, C, C
) Field value to be converted to undef. =item -optrec => not exists || boolean (C
) Optional records switch. To allow C or C records not really present in the database. C<-optrec> may be used as C keyword also. =item -output => not exists || sub{}($self, arguments to be printed out) (C) Output sub{} to be used instead of 'print' by C calls =item -path => "$ENV{DOCUMENT_ROOT}/dbix-web" (see source code for more details) || "{-DocumentRoot|-ServerRoot}/dbix-web" (C) Path to File Store. Subdirectories inside File Store (see C): 'var' - variables file 'var.pl' (see C, C), 'uagroup' and 'ualist' files (C); 'log' - log files (see C); 'tmp' - temporary files; 'dbm' - L data files; 'rfa' - attached to records files. See also C<-url>, C<-urf>. =item -pdta => not exists || {} (C) User data input parsed, local inside see C, parsed by C =item -pcmd => not exists || {} (C) User command input / output, local inside C, parsed by C =item -pout => not exists || {} (C) User data output, local inside C, filled by C or C =item -qfetch => not exists || sub{}(self, cursor, [borders]) -> success (C
- C) Sub{} to fetch and display next data row by C. Default is formed using C<-qfilter>, C<-qhref>, C<-qhrcol>, C<-limit> =item -qfilter => not exists || sub{}(self, 'form name', {metadata}, {command}, {record}) -> success (C
- C) Sub{} to filter to user data records by C. Record may be changed during filtering. =item -qhrcol => not exists || 0... (C
- C) Last column number to display C<-qhref> hyperlink in C. Default is 0 - the first column. =item -qhref => not exists || {hyperlink spec} || sub{}(self, {record}) (C
- C) Specification of hyperlinks (URLs) to be displayed in each data row listed to user by C. Keywords are: '-cmd' => not exists || 'command' || sub{}(self, {record}) - command to be specified in the URL, default is C; '-key' => not exists || ['field name',..., ['field name'=>number],...] || sub{}(self, {record}) - C<-key> specification of record to be opened, default is obtained from table/form description; '-urm' => C<-urm> specification, alike '-key' above; '-form' => not exists || 'form name' || sub{}(self, {record}) - constant name of the form to be opened via URL, default is current table/form name; '-formfld' => not exists || 'field name' - field name to store form name to open via URL. =item -query => not exists || {'recSel' and 'cgiQuery' arguments} (C
- C) Default specification of data records to be retrieved by C/C and listed for user by C. Additional to C clauses or options may be used: C<-data> and C<-display> arrays of field names or C<-field> - for C and C instead of C<-field> C<-flg> values from C<-table> or C<-form>. C<-datainc> array of field names - to be included to C<-data> and useful with implicit C<-data>. C<-frmLso> value, array or sub - in C as default C<-frmLso> selection(s) before C<-query>->{C<-urole>}. C<-qkey> and C<-qwhere> values or subs - as C defaults, because all C<-query> clauses may be overwritten via C except C<-key> and C<-where> catenations. Note C<-frmLso>, C<-qkey>, C<-qwhere> considered as a default conditions will not be used when some of C<-qkey>, C<-qwhere>, C<-qurole> specified in C<-pcmd> request. Consider also separate from C<-query> C
slots C<-qhref>, C<-qhrcol>, C<-qfetch>, C<-qfilter> for C specification; C<-frmLso> and C<-frmLsc> for C specifications. =item -rac => 1 || boolean (C) Record level Access Control switch =item -racAdmRdr => 'Administrators,root' (C) Users, can read any record. Format of this value is alike containing list of user names string field. See also C, C<-racAdmWtr>. =item -racAdmWtr => 'Administrators,root' (C) Users, can edit any record. Format of this value is alike containing list of user names string field. See also C, C<-racAdmRdr>. =item -racActor => not exists || ['field name',...] (C, C
- C, C) Field(s) to store names of user(s) to be considered as actors of record. Used for C<-urole> clause of C. Default is about C<-rvcUpdBy>. =item -racManager => not exists || ['field name',...] (C, C
- C) Field(s) to store names of user(s) to be considered as a managers of record. Used for C<-urole> clause of C. Default is about C<-rvcInsBy>. =item -racPrincipal => not exists || ['field name',...] (C, C
- C, C) Field(s) to store names of user(s) to be considered as principals of record. Used for C<-urole> clause of C. Default is about C<-rvcInsBy>. =item -racReader => not exists || [field names] (C, C
) Readers of record - fieldnames with usernames. =item -racUser => not exists || ['field name',...] (C, C
- C, C) Field(s) to store names of user(s) to be considered as users of record. Used for C<-urole> clause of C. Default is about C<-racPrincipal>. =item -racWriter => not exists || [field names] (C, C
) Writers of record - fieldnames with usernames. =item -rfa => 1 || boolean (C, C
) Record File Attachments switch =item -rfdName => not exists || sub{}($self, key field name => field value,...) (in database or table descriptions) Formula to convert record's key into directory name. Default behaviour exists, see C source code =item -ridRef => not exists || [field name,...] (C, C
- C) Fields may contain references to another records. Scalar reference may be in form 'record id' or 'table//id'. Embedded into text references are considered as '_key=table//id' or '_key=id%3Dtable//id' URL parts. See also C, C. =item -recChg0R => not exists || sub{}($self, {command}, new {field => value}, ? prev {field => value}) (C, C
, C; all executed) Record changing trigger before each row. Executed in C and C before C<-recIns0R> and C<-recUpd0R>. May be used to provide absolutely computed values when record storing. See also C<-recChg0W>, C<-recEdt0R>. =item -recChg0W => not exists || sub{}($self, {command}, new {field => value}, ? prev {field => value}) (C, C
, C; all executed) Record changing trigger before each row written. Executed immediatelly before writing record to database, in C and C, after C<-recChg0R>, C<-recIns0R>, C<-recUpd0R>, C<-recInsID>. May be used when key generated for new record needded, i.e. for C. See also C<-recChg0R>, C<-recEdt0R>. =item -recDel => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} (C
- C) C operation UI implementation =item -recDel0C =item -recDel1C => not exists || sub{}($self, {command}) =item -recDel0R => not exists || sub{}($self, {command}, undef, prev {field => value}) (C, C
, C; all executed) C triggers before command ('0C'), before each row ('0R'), after command ('1C'). When record versioning, update triggers will be executed too, within. =item -recEdt0A =item -recEdt1A => not exists || sub{}($self, {UI command}, data {field => value}) (C: C, C
, C - all executed) Record editing triggers before ('0A') and after ('1A') record data actions. Called by C. C<-recEdt0A> called after C<-recTrim0A>, C, C (in edit mode), and before any of C, C, C, C. C<-recEdt1A> called after C, C. May be used to provide interactively computed values. See also C<-recChg0R>; C<-recForm0A>, C<-recForm0C>, C<-recForm1C>, C<-recForm1A>. =item -recEdt0R => not exists || sub{}($self, {command}, new {field => value}, ? prev {field => value}) (C, C
, C; all executed) Record editing trigger before each row. Executed after C<-recForm0R>/C<-recFlim0R> and before C<-recChg0R>. May be used to translate values or provide absolutely computed values during record editing or storing. See also C<-recChg0R>. =item -recFlim0R => not exists || sub{}($self, {command}, new {field => value}, database {field => value}) (C, C
, C; all executed) C limiting trigger before row ('0R'). C<-recFlim0R> is executed when database record read and may be modified, after C<-recForm0R>, before C<-recEdt0R>, C<-recChg0R>, C<-recRead0R>, C<-recForm0C>. C, C, C may be used to specify/restrict fields editable and values available for current user. =item -recForm => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} (C
- C) C operation UI implementation. Used also for C, C, C, C operation. See also C<-subst> substitution for all operations and C<-recXXX> for particular substitutions. =item -recForm0A => not exists || sub{}($self, {UI command}, source {field => value}) =item -recForm1A => not exists || sub{}($self, {UI command}, result {field => value}) (C: C, C
, C - all executed) Record display triggers starting ('0A') or ending ('1A') any record edit or display action, except C ending and C. Called by C, C<-recForm0A> after C<-recTrim0A> but before C<-recEdt0A>, C<-recForm1A> after C<-recEdt1A>. May be used to provide computed for display values. See also C<-recEdt0A>, C<-recChg0R>, C<-recEdt1A>; C<-recForm0C>, C<-recForm0R>, C<-recFlim0R>, C<-recForm1C>. =item -recForm0C => not exists || sub{}($self, {command}, source {field => value}) =item -recForm0R => not exists || sub{}($self, {command}, new {field => value}, database {field => value}) =item -recForm1C => not exists || sub{}($self, {command}, result {field => value}) (C, C
, C; all executed) C triggers before command ('0C'), row ('0R'), after command ('1C'). C<-recForm0C> is executed starting any record data manipulation, before C<-recNew0C>, C<-recIns0C>, C<-recUpd0C>, C<-recDel0C>, C<-recRead0C>. C<-recForm0R> is executed when database record read, before C<-recFlim0R>, C<-recEdt0R>, C<-recChg0R>, C<-recRead0R>, C<-recForm0C>. C<-recForm1C> is executed ending any single-record data operation alike C, C, C, C, C; may be used to provide values for display only fields. =item -recIndex0R => not exists || sub{}($self, {command}, new {field => value}, old {field => value}) (C
, in table description only) Indexing trigger, may be used instead of C<-ixcnd> and C<-ixrec>. New values hash will be undefined in C. Old values hash will be undefined in C. =item -recIns => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} (C
- C) C operation UI implementation =item -recIns0C =item -recIns0R => not exists || sub{}($self, {command}, source {field => value}) =item -recIns1R =item -recIns1C => not exists || sub{}($self, {command}, result {field => value}) (C, C
, C; all executed) C triggers before command ('0C'), before row ('0R'), after row ('1R'), after command ('1C'). See also C<-recInsID>. =item -recInsID => not exists || sub{}($self, {command}, data {field => value}) (C, C
; nearest executed) C row ID generation trigger. Default operation exists in C. C<-recInsID> is executed after C<-recIns0R>. =item -recList => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} (C
- C) C operation UI implementation =item -recNew => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} (C
- C) C operation UI implementation =item -recNew0C => not exists || sub{}($self, {command}, source {field => value}, sample {field => value}) =item -recNew0R => not exists || sub{}($self, {command}, source {field => value}) =item -recNew1C => not exists || sub{}($self, {command}, new {field => value}) (C, C
, C; all executed) C triggers before ('0') and after command ('1C'). If key value available, a sample record will be fetched and provided to C<-recNew0C> trigger to add some field values from sample record. =item -recQBF => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} (C
- C) C operation UI implementation used in C. See also C<-subst> substitution for all operations and C<-recXXX> for particular substitutions. =item -recQBFl => not exists || table or form name (C
- C) Substitutes another object name to process C request from C screen in C. Distinguish from C<-recList>. See also C<-recXXX>, C, C<-subst> substitutions. =item -recRead => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} || {'recRead' args} (C
- C) C operation UI implementation. Distinguish hash ref form, will be executed in C after any single-record C operation, from C<-recForm1C> trigger inside C. =item -recRead0C => not exists || sub{}($self, {command}, ?) =item -recRead0R =item -recRead1R =item -recRead1C => not exists || sub{}($self, {command}, data {field => value}) (C, C
, C; all executed) C triggers before ('0') and after ('1') command. =item -recSel0C => not exists || sub{}($self, {command}) (C, C
, C; all executed) C before command trigger. =item -recTrim0A => not exists || sub{}($self, {command}, data {field => value}) (C: C, C
, C - all executed) The first trigger executed before ('0A') record data action by C to trim starting and ending spaces from field values before C<-recEdt0A>. =item -recUpd => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} (C
- C) C operation UI implementation =item -recUpd0C => not exists || sub{}($self, {command}, source {field => value}) =item -recUpd0R => not exists || sub{}($self, {command}, new {field => value}, prev {field => value}) =item -recUpd1C => not exists || sub{}($self, {command}, result {field => value}) (C, C
, C; all executed) C triggers before command ('0C'), before each row ('0R'), after command ('1C'). =item -recXXX => not exists || 'form name' || sub{}($self, 'name', {metadata}, $s->{-pcmd}, $s->{-pdta}) -> $s->{-pout} || {'recXXX' args} (C
- C) C<-recNew>, C<-recForm>, C<-recIns>, C<-recUpd>, C<-recDel>, C<-recRead>, C<-recList>, C<-recQBF>, C<-recQBFl> operation UI implementation. See also C<-subst> substitution for all operations and C<-recForm> for several. =item -rvcActPtr => not exists || 'field name' (C, C
- C) Field to store ID of the actual version of this record. If this field is empty, the record is the last version, actual. If this field is not empty, the record is an old version or is checked-out. =item -rvcCkoState => not exists || [field name => state] (C, C
- C) Check-out state of record: Field name and state value. If record is check out, old version will not be created at record update. And file attachments may be edited. Check-out record may be checked-in C<-rvcActPtr> record. Distinguish from C<-rvcChgState>, which could not be checked-in. =item -rvcDelState => not exists || [field name => state] (C, C
- C) Deleted state of record: Field name and state value. =item -rvcChgState => not exists || [field name => state,...] (C, C
- C) Field name to store record's state and list of the change state values. When record is in change state, old version will not be created at record update. And file attachments may be edited. Distinguish from C<-rvcCkoState>, which may be checked-in. =item -rvcInsBy => not exists || 'field name' (C, C
- C) Field to store name of user record inserted. =item -rvcInsWhen => not exists || 'field name' (C, C
- C) Field for time record inserted when =item -rvcUpdBy => not exists || 'field name' (C, C
- C) Field to store name of user record updated. =item -rvcUpdWhen => not exists || 'field name' (C, C
- C) Field for time record updated when =item -rvcVerWhen => not exists || 'field name' (C, C
- C) Field for time version record written when. To keep the end of actuality period of version record started with C<-rvcUpdWhen>. C fills this field with C<-rvcUpdWhen> of actual record when recording its old version. =item -search => not exists || URL || sub{}(self) -> (URL || empty) (C) URL may be opened in the '_search' frame of the browser when C<-search> button pressed or C<-search> web request parameter specified. I.e. sub{$_[0]->urlCmd('',-form=>'navigator.psp',-cmd=>'frmCall')}. A frameset with 'LEFT' and 'RIGHT' frames will be used if URL =~/\b_frame=RIGHT\b/. See also C<-logo>. =item -serial => 1 || 0 || 2 || 3 (C) Serialisation level of database operation within C/C: 0 - none, 1 - shared, 2 - shared read and exclusive update operation, 3 - exclusive (full serialisation). =item -setup => not exists || boolean (C) Allows automatic C when C last modify time later Cd =item -smtp => SMTP object, on demand =item -smtphost => SMTP server name or address =item -smtpdomain => default mail domain name (C) SMTP mailing parameters for C and C. C<-smtphost> required, otherwise C ignored. =item -subst => not exists || table or form name (C
- C) Substitutes another object name to process request in C. See also C<-recXXX> and C<-recForm> substitutions for particular operations. =item -table => {table name=>{table description}} => form's basic table name (C) Data records files (database tables) descriptions. (C
) Name of the basic table of the form. =item -title => '' (C) Application's title =item -tn => {template naming set} (C) Template or default naming set, also available via C. This is an only place for hard coded default special names. See source code for default naming. =item -udflt => not exists || sub{$_}() (C) User domains filter sub{} to be evaluated against each domain name in $_. Considered in C. See also C<-unflt>, C<-ugflt>. =item -udisp => not exists || '+' || 'gc' || sub{}(self) -> {system => display name} || sub{self, user} -> display name (C) C operation mode or implementation. To extend ('+') C to use 'c'omments as display names for 'g'roups. =item -ugadd => not exists || [group names] || {group name => alias,...} || sub{$_}($self) -> ... (C) Additional user groups names. Research sub{} will be evaluated against user groups names in $_. Considered in C and C default code. =item -ugflt => not exists || sub{$_}($self) -> boolean (C) User groups filter sub{} to be evaluated against each group name in $_. Considered in C and C default code. See also C<-ugflt1>, C<-unflt>. =item -ugflt1 => not exists || sub{$_}($self, $_ = name, short name, [groups list]) (C) User groups filter sub{} to be evaluated against list of groups for name in $_. Considered in C default code. See also C<-ugflt>, C<-unflt>. =item -ugroups => not exists || sub{}(ugroups args) || [group names] (C) User groups sub{} or [] value. See C. =item -unames => not exists || sub{} || [user name variants] (C) User name variants sub{} or [] value. See C. =item -unflt => not exists || sub{$_}($self) (C) User names filter sub{} to be evaluated against each name in $_. Considered in C default code. See also C<-ugflt>. =item -urf => "file://{-path}/dbix-web" || sub{}($self) || '-path' (C) Filesystem URL to File Store, see also C<-path>, C<-url> =item -url => '/dbix-web' (C) URL to File Store, see also C<-path>, C<-urf> =item -urm => [field name,...] (C
) Table's fields to be used for "unread mark" part of URLs produced by C C; C<-wkey> used if not defined. =item -user => sub{$ENV{REMOTE_USER}||$ENV{USERNAME}||$GUEST} (C) User name sub{} or value =item -userln => true || false (C) Short local usernames switch =item -usernt => not exists || false || true (C) Windows NT style usernames ('domain\\username') switch =item -var => not exists || {variable name => variable value} (C) Variables hash ref, handled via C and C calls. =item -w32IISdpsn => 1 | 2, not exists | 0 C. Deimpersonation place for Microsoft IIS authenticated user session, using C with 'RevertToSelf' Windows call. 0 - never 1 - when required, i.e. for file store operation 2 - always and early =item -w32ldap => not exists | [['', LDAP path], ['NETBIOS domain' => LDAP path],...] (C) C('ugf_w32ldap') switch and search scopes. Empty NETBIOS domain name represents domain computer belongs to. LDAP path is a string for 'LDAP://' Windows ADSI provider, i.e. 'cn=myUser,dc=myComapany,dc=com'. =item -w32xcacls => not exists | true C. Use 'xcacls' command (Windows NT Resource Kit should be installed) instead of 'cacls' Windows 2000 command. =item -warn => \&carp, see source code (C) Warning sub{}: warn / carp / cluck; using &{$s->{-warn}}('warning') inside. See also C<-die> =item -wikn C => ['name', 'subject'] || [field names] || field name || false C
=> not exists || field name || false Fields one of may be used to search for record by its wiki name. Default candidates are defined at database level. Table may be excluded from search using false value. See also C<-opt> for '-hrefs' and 'wikn://'. =item -wikq => not exists || sub{}($self, -wikn value, -wikq value) -> {-table=>name, -qkey=>{field=>value,...}} C Processor for requests for C<-wikn> and C<-wikq>. Should convert C<-wikn>/C<-wikq> request parameters to C<-table>/C<-qkey>, may use database. C<-wikq> request parameter may be table name to be used to search for C<-wikn> or any value to be processed by C<-wikq> sub{}. Else C<-wikn> will be processed. =item -wkey => not exists || [field name,...] (C
) Table's fields used for optimistic record locking during edit operation (C C or C). C<-key> used if not defined. =back =head1 METHODS =over =item Methods See C =item ccbNew (condition string) -> new condition code block object C. Creates and returns new condition code block object (C). =item cgi () -> L object C. Returns L object, creates it if not exists in C<-cgi>. =item cgiDDLB ({C<-field> metadata}) C. Performs drop-down list box via C. Uses C<-ddlb>, C<-ddlbtgt>, C<-ddlbmult>. Used by C. =item cgiFooter () C. Outputs C screen footer with operation and debug messages via C. Uses C<-fetched>, C<-limited>, C<-affected>, C<-logm>, C<-debug>. =item cgiForm (table / form name, {table / form metadata}, ? {command}||C<-pcmd>, ? {data}||C<-pout>) C. Outputs record's form via C, used by C for record and QBF operations (see C<-recXXX>). See C
for form specifications and C<-field> for formatting considerations. See C for independent widgets. Use C or C<-inp> for file attachments. Use C and C<-field> for embedded views. =item cgiHelp (table / form name, {table / form metadata}, ? {command}||C<-pcmd>, ? {data}||C<-pout>) C. Outputs help form for screen current via C, used by C for Help function. Uses C<-help>, C, C
, C. =item cgiList (?'-!h', table / form name, {table / form metadata}, ? {command} ||C<-pcmd>, ? cursor ||{query} ||[data rows] ||sub{fetch row} ||C<-query>, ? [row and column delimiters] || '. Lists data rows via C, used by C for C results. '!h' option turns off table header. See C
, C<-query>, C for query and list specifications, additional query/list clauses are C<-field> to use instead of C<-data>, and C<-display> to use instead of C<-flg> values of C<-field>. =item cgiLst (?-options, table / form name, ?{query}) C. Simplified C/C combination, may be called within C sub{} to embed list of records inside C. =item cgiParse () C. Parses CGI input parameters: command, parameters, keywords into C<-pcmd>; data into C<-pdta>. Used internally by C. =item cgiQuery (table / form name, {table / form metadata}, ? {command}||C<-pcmd>) -> cursor C. Forms and starts query using C. Returns cursor. Used by C, with C follows. See C
, C<-query>, C and C for query and list specifications. See also C and C. =item cgiQueryFv (table name || {command} ||false, field ||[field list], ?{command}) -> cursor C. Forms and starts query of field values. Alike C, but dynamically forms metadata needed. May be useful for C<-ddlb> sub{}s to avoid superfluous forms. =item cgiRun () -> success C. CGI server response implementation. Sets error handlers. Starts and ends session with C and C. Accepts and parses input parameters with C into C<-pcmd> and C<-pdta>. Logins if needed (cgi redirection to C<-login>). Determines required action, form and table using C<-cgcXXX>, C<-subst>, C<-recXXX>, C<-table>. If external implementation found, invokes it and returns. Invokes action required (stores result in C<-pout>): C or C or embedded implementation. Reassigns C<-form> if found inside C<-pout>. Determines external presentation implementation via C<-cgvXXX> and invokes it. Or outputs http and html headers (C), hidden fields (C), menu bar (C), record's form (C) or list of records (C), screen footer (C), form and html footers. Also implements '-reindex' (run C(1)) and '-setup' (run C) service command line options, see also C. Depending on particular environment configuration C may return DBIx::Web object, C, false, C. It is recommended to use C as the last call in the CGI script. =item cgiSel ({name => value,...} || name => value,...) -> -> cursor C. Alike C, but using C specifications to produce cursor for C. Alike C, but without user dependent parameters and options. =item class () -> class name C. Returns class name of the object. =item cptran (fromCP, toCP, string) -> translated string C. Translates strings between cyrillic codepages. =item datastr (stringified data structure) -> data structure C. Restores data structure from stringified format of C result. =item dbi () -> L connection object C. Returns L connection object, creates it if not exists using C<-dbiarg> and C<-autocommit> =item dbiLikesc (text) -> escaped C. Escapes value to use within SQL LIKE '' ESCAPE '\'. =item dbiQuote (text) -> quoted =item dbiUnquote (quoted) -> unquoted C. Quotes value to use within SQL statements. =item dbmNew (file name) -> new isam data file object =item dbmNew (-option=>value,...) -> new isam data file object C. Creates and returns new isam data file object (C). =item dbmTable (table name) -> new isam datafile object C. Returns isam data file object with table name given, creates and opens it if needed using C(-name=>C('dbm', table name)). =item die (message string) -> failure exception C. Raises failure exception like L or L. Executes &{$_[0]->{-die}}(@_[1..$#_]). See also C<-die>, C<-warn>, C =item dsdClone (data structure) -> copy of data structure C. Copies data structure recursively. =item dsdMk (data structure) -> stringified data structure C. Stringifies any data structure with L Use C to restore data structure from stringified form. Alike C. =item dsdParse (stringified data structure) -> data structure C. Restores data structure from stringified format of C result. Uses L. Alike C. =item dsdQuot (?hash pairs delimiter, data structure) -> stringified data structure C. Prettily stringifies a data structure, more prettily then C. C may be used to achieve data structure. See also C and C. =item dwnext (string, ? min length) -> next alphanumeric string value C. Returns the next value of ([0-9]|[a-z]) string left padded to min length. For record IDs generation. =item end () -> self object C. Ends (commits) and cleans operation session or transaction Ced. =item grep1 (list) -> first non-empty value =item grep1 (sub{$_}(), list) -> first non-empty result C. Returns the first non-empty value or true evaluation result. Alike L, but differs. =item hfNew () -> new file handle object =item hfNew (?mode, file name) -> new file handle object C. Creates and returns new file handle object (C). File will be opened if file name given. =item hreverse ([data] ||cursor, ? split char ||'/', ? join char ||'\\') -> {value => reversed,..} =item hreverse (string, ? split char ||'/'||'\\', ? join char ||'\\'||'/') -> reversed string C. Reverses hierarchical source data values. Source array ref or cursor will be reversed to a hash ref, string will be reversed to a string. Hierarchy may be marked inside values with a split char, i.e. 'value/subvalue/...'. Original source data values are used for keys of the result. Values of the result are L L L of the source values. May be used for C<-ddlb>. =item htlsTag (name, attribute=>value,..., ''=>[content]) -> list =item htlsTag (name, attribute=>value,..., '0') -> =item htlsTag (name, attribute=>value,...) -> =item htlsTag ({-tag=>name, attribute=>value,...}) =item htlsTag ([[name,...],...{-tag=>name,...}],...) =item htlsTag (..., "\n") C. Converts parameters given to the list to print HTML tag with 'name', 'attributes' and optional 'content' tags inside. Leading '-' signs in attribute names are ignored. Values are escaped. Newlines string may be the last parameter to format output. The list structure will not be documented. See also C, C =item htmlEnd () -> http and html final string C. Generates http and html final string to C by C =item htmlEscape (strings) -> escaped =item htmlUnescape (string) -> unecaped C. Escapes and unescapes to and from HTML text. See also C. =item htmlField (name, title, {C<-inp> metadata}, value) -> html field string C. Generates HTML field, used by C. Empty name means readonly. See C<-inp> for metadata. =item htmlFVUH (table name, {record data}, html to translate) -> html C. Converts HTML value to HTML translating URLs alike C. See C<-inp> for special URL protocol values. =item htmlFVUT (table name, {record data}, text to translate) -> html C. Converts text value to HTML with URLs highlighted alike C. See C<-inp> for special URL protocol values. =item htmlHidden () -> hidden fields html string C. Generates hidden fields HTML to C by C Uses C<-pcmd>. =item htmlMenu () -> screen menu bar html string C. Generates menu bar HTML to C by C Uses C<-pcmd>, C<-pdta>, C<-pout>. =item htmlMQH (-option=>value,...) -> menu query hyperlink html C. Generates menu bar styled hyperlink HTML with query options. May be used within C<-frmLso1C>. Display value may be defined using -label option for text or immediate -html option. Hyperlink will be highlited if current query matches options defined. The last matched call may be inspected in $s->{C<-pcmd>}->{-htmlMQH}. HTML hyperlink options: -title, -style, -class, -target. Query options: -qwhere, -qkey, -qurole, -quname, -qorder, -qkeyord. Value of C<-qwhere> may be eclosed in '[[ ]]' or '/* */' brackets distinguishing from another condition. Query exclusion options: -xpar => 0 - excluding none | 1 - excluding some | 2 - excluding all (default) | -option name | [-option names]; -xkey => -qkey key | [-qkey keys]. Overview option: -ovw => sub{}(self, match?, {C args}, {query active}, {query formed}). =item htmlStart () -> http and html headers string C. Generates http and html headers using C<-httpheader>, C<-htmlstart>, L to C by C =item initialize (-option=>value,...) -> initiated as DBIx::Web object C. Initiates new DBIx::Web object. Used internally, by C(). See C and C sources for defaults. =item ishtml (string) -> alike HTML? C. Looks string given like HTML code? =item ldapLst (? '-ug<>', ? filter username || groupname || sub{}(self,name), ? container [] || {}, ?[system name attr => diaplay name attr]) -> user and group names C. Returns user ('-u') and group ('-g') names using filter given in array ([]) or hash ({}) ref; '<>' option forces comment notation for hash ref. Default is both ('-ug') in array ref ([]). Uses C<-ldapsrv>, C<-ldapbind>, C<-ldapsearch>,.... May be used alike C, but directly with LDAP server. =item lng (index, 'string', ?additional values) -> user language specific string =item lnghash () -> {user language translation hash} =item lnghash (index, ['string',...]) -> {'string'=>'user language translation',...} C. Returns user language specific variant of string given, short (index=0) or long (index=1). See language translations in '$LNG' hash ref in the source code. C. Returns user language specific variant of string given, short (index=0) or long (index=1). See language translations in '$LNG' hash ref in the source code. =item logOpen () -> C<-log> C. Opens Log file. This does C call. =item logLock (lock level) -> success C. Locks Log file. This is not needed. =item logRec (data list) -> success C. Add record to Log file. =item max (number, number) -> maximum C. Maximum of two numbers given. =item min (number, number) -> minimum C. Minimum of two numbers given. =item new ('class', -option=>value,...) -> new DBIx::Web object =item new ('class', DBIx::Web object to reuse,...) -> DBIx::Web object reused C. Creates new DBIx::Web object. Calls C(-option=>value,...). Existed DBIx::Web object may be reused. =item orarg (L<-X|perlfunc>, argument,...) -> first succeeded argument =item orarg (sub{$_}(), argument,...) -> first succeeded argument C. The value of the first succeeded argument. Alike C, but differs. =item osCmd (?opt, command, arguments) -> success C. Invokes operating system command given. Options: '-i'gnore return code, '-h'ide output. =item output (strings list) -> success =item outhtm (HTML tag data structure) -> success =item outhtml (HTML tag data structure) -> success =item outxml (XML tag data structure) -> success C. Outputs data given via C<-output> sub{} call or L. C or C called to stringify tag data structure. =item psEval (? '-e', filename, ? base URL) C. Evaluates perl script file using C. 'e'mbeddable option prevents output of HTTP and HTML headers. Relative filename will be based on 'C<-path>/psp/' with C<-url> as default base URL. See C. =item psParse (? '-e', perl script source string, ? base URL) -> perl source string C. Converts HTML with embedded perl into perl source with C calls. 'e'mbeddable html option prevents generation output of html headers. Perl code markers are: '<% perl formula %>', '', '