CGI-QuickForm

 view release on metacpan or  search on metacpan

eg/example4  view on Meta::CPAN

#        ,POSTCODE  char( 10)
#        ,BIRTHDAY  char( 20)
#        ,NOTES     char(200)
#        )


use strict ;

use CGI qw( :standard :html3 ) ;
use CGI::QuickForm qw( show_form colour ) ;
#use CGI::Carp qw( fatalsToBrowser ) ;
use DBI ;
use HTML::Entities ;
use URI::Escape ;

use vars qw( $VERSION ) ;
$VERSION     = '1.041' ;

my $ACTION  = '.qfdb',

my $ADD     = 'Add' ; 
my $DELETE  = 'Delete' ; 
my $EDIT    = 'Edit' ; 
my $FIND    = 'Find' ; 
my $LIST    = 'List' ; 
my $ORDERBY = 'OrderBy' ; 
my $REMOVE  = 'Remove' ; 
my $SEARCH  = 'Search' ; 
my $UPDATE  = 'Update' ; 
my $WHERE   = 'Where' ; 

# Database specific start
my $SHOW_SQL = 0 ; 


my %COLOUR          = (
    -FORM_BG    => '#FFCAFF',
    -DEL_HEAD   => '#E6BEFF',
    -DEL_FIELD  => '#FFE0E0',
    -DEL_VALUE  => '#FFA9A9',
    -LIST_HEAD  => '#E6BEFF',
    -LIST_BAND1 => '#FAFAFA',
    -LIST_BAND2 => '#EDEDED',
    ) ;

my $TITLE           = 'Contacts' ; 
my $DATABASE        = '/root/web/db/contactsqf' ; 
my $KEYFIELD        = 'ID' ; 
my $INITIAL_ORDERBY = 'ID' ; 
# The XBase driver only supports a single WHERE item and does not support
# LIKE. The CSV driver does not appear to support WHERE at all.
#   my $TABLE    = 'contacts_csv' ;
#   my $CONNECT  = "DBI:CSV:f_dir=$DATABASE" ;
my $TABLE           = 'contacts' ; 
my $CONNECT         = "DBI:XBase:/root/web/db/contactsqf" ; 

my @FIELD    = (
            {
                -DB_NAME   => 'ID',
                -DB_QUOTE  => 1,       # 0 for numeric fields
                -DB_HTML   => 'tt',    # e.g. bold, italic, h1, tt, etc.
                -DB_ALIGN  => 'RIGHT', # LEFT (default), CENTER, RIGHT
                -DB_VALIGN => undef,   # BOTTOM, CENTER, TOP 
                -DB_PREFIX => undef,   # e.g. £ or $ etc.
                -LABEL     => 'ID',
                -END_ROW   => 1,
                -REQUIRED  => 1,
                -maxlen    => 12,
            },
            {
                -DB_NAME   => 'FORENAME',
                -DB_HTML   => undef,
                -LABEL     => 'Forename',
                -REQUIRED  => 1,
                -size      => 25,
                -maxlen    => 50,
            },
            {
                -DB_NAME   => 'SURNAME',
                -DB_HTML   => 'b',
                -LABEL     => 'Surname',
                -END_ROW   => 1,
                -REQUIRED  => 1,
                -size      => 25,
                -maxlen    => 50,
            },
            {
                -DB_NAME   => 'HOMETEL',
                -DB_HTML   => undef,
                -LABEL     => 'Home Tel.',
                -VALIDATE  => \&valid_phone,
                -default   => '01225 ',
            },
            {
                -DB_NAME   => 'WORKTEL',
                -DB_HTML   => undef,
                -LABEL     => 'Work Tel.',
                -END_ROW   => 1,
                -VALIDATE  => \&valid_phone,
                -default   => '01225 ',
            },
            {
                -DB_NAME   => 'MOBILE',
                -DB_HTML   => undef,
                -LABEL     => 'Mobile',
                -VALIDATE  => \&valid_phone,
                -default   => '070 ',
            },
            {
                -DB_NAME   => 'FAX',
                -DB_HTML   => undef,
                -LABEL     => 'Fax',
                -END_ROW   => 1,
                -VALIDATE  => \&valid_phone,
                -default   => '01225 ',
            },
            {
                -DB_NAME   => 'EMAIL',
                -DB_HTML   => 'mailto',
                -DB_ALIGN  => 'CENTER',
                -LABEL     => 'Email',

eg/example4  view on Meta::CPAN

        my $connector = uc param( "$CONNECTOR$i" ) || '' ;
        my $quote     = $fieldref->{-DB_QUOTE} ? "'" : '' ;

        if( $comparison =~ /NULL/o ) {
            $where .= "$field $comparison $connector " ;
        }
        else {
            $where .= "$field $comparison $quote$value$quote $connector " ;
        }
        $excess = $connector ;
    }

    $where =~ s/(?:AND|OR) $//o ;

    $where ;
}


sub label2fieldname {
    my $label = shift ;
    my $fieldname ;

    local $^W = 0 ; # Despite the next we still get undefineds!
    foreach my $fieldref ( @FIELD ) {
        next unless ( defined $fieldref->{-LABEL} and 
                      defined $fieldref->{-DB_NAME} ) ;
        $fieldname = $fieldref->{-DB_NAME}, last 
        if $label eq $fieldref->{-LABEL} ;
    }

    $fieldname ;
}


sub fieldname2label {
    my $fieldname = shift ;
    my $label ;

    foreach my $fieldref ( @FIELD ) {
        next unless ( defined $fieldref->{-LABEL} and 
                      defined $fieldref->{-DB_NAME} ) ;
        $label = $fieldref->{-LABEL}, last 
        if $fieldname eq $fieldref->{-DB_NAME} ; 
    }

    $label ;
}


sub render_field {
    my( $field, $html ) = @_ ;

    if( $html eq 'mailto' or $html eq 'email' ) {
        $field = qq{<a href="mailto:$field">$field</a>} ;
    }
    elsif( $html eq 'url' or $html eq 'web' ) {
        my $protocol = $field =~ m,^(?:http|ftp|gopher|wais|/), ? 
                            '' : 'http://' ;
        $field = qq{<a href="$protocol$field">$field</a>} ;
    }
    elsif( $html eq 'b' or $html eq 'bold' ) {
        $field = qq{<b>$field</b>} ;
    }
    elsif( $html eq 'i' or $html eq 'italic' ) {
        $field = qq{<i>$field</i>} ;
    }
    elsif( $html eq 'bi' or $html eq 'bolditalic' ) {
        $field = qq{<b><i>$field</i></b>} ;
    }
    elsif( $html eq 'tt' or $html eq 'fixed' ) {
        $field = qq{<tt>$field</tt>} ;
    }
    elsif( $html =~ /^h([1-6])$/o ) {
        $field = qq{<h$1>$field</h$1>} ;
    }

    $field ;
}

 
sub get_labels {
    my @label ;

    foreach my $fieldref ( @FIELD ) {
        push @label, $fieldref->{-LABEL} 
        if $fieldref->{-LABEL} and 
           ( ( not defined $fieldref->{-TYPE} ) or
             ( $fieldref->{-TYPE} ne 'hidden' and
               $fieldref->{-TYPE} ne 'submit' ) ) ;
    }

    @label ;
}




( run in 0.936 second using v1.01-cache-2.11-cpan-39bf76dae61 )