MySQL::Admin - Mysql Administrator and more


MySQL-Admin documentation Contained in the MySQL-Admin distribution.

Index


Code Index:

NAME

Top

MySQL::Admin - Mysql Administrator and more

SYNOPSIS

Top

use MySQL::Admin;

DESCRIPTION

Top

MySQL::Admin is a CGI subclass,

This Module is mainly written for MySQL::Admin::GUI.

But you can it also use standalone.

Take a look in example directory.

EXPORT

export_ok:

$ACCEPT_LANGUAGE translate init session createSession $m_hrParams clearSession $m_qy include sessionValidity includeAction

export tags: lze: $ACCEPT_LANGUAGE translate init session createSession $m_hrParams clearSession $m_qy include sessionValidity includeAction

and all export tags from CGI.pm

Public

Top

new()

init()

        init("/srv/www/cgi-bin/config/settings.pl");

        default: /srv/www/cgi-bin

include

        %vars = (sub => 'main','file' => "fo.pl");

        $qstring = createSession(\%vars);

        include($qstring); # in void context param('include') will be used.

includeAction

        includeAction('welcome');

see MySQL::Admin::Actions

createSession

        Secure your Session (or simple store session informations);

        my %vars = (first => 'query', secondly => "Jo" , validity => time() );

        my $qstring = createSession(\%vars);

        *params= \$MySQL::Admin::params;

        session($qstring);

        print $m_hrParams->{first};

session

        $qstring = session(\%vars);

        session($qstring);

        print $m_hrParams->{'key'};

clearSession

delete old sessions. Delete all session older then 120 sec.

sessionValidity()

set the session Validity in seconds in scalar context:

        sessionValidity(120); #120is the dafault value

or get it in void context:

        $time = sessionValidity();

translate()

        translate(key);

see MySQL::Admin::Translate

Private

Top

hook

used by include and includeAction.

getSelf()

AUTHOR

Top

Dirk Lindner <lze@cpan.org>

LICENSE

Top

Copyright (C) 2005-2009 by Hr. Dirk Lindner

This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

see Also

CGI MySQL::Admin::GUI MySQL::Admin::Actions MySQL::Admin::Translate MySQL::Admin::Settings MySQL::Admin::Config

AUTHOR

Top

Dirk Lindner <lze@cpan.org>


MySQL-Admin documentation Contained in the MySQL-Admin distribution.
package MySQL::Admin;
use strict;
use warnings;
use utf8;
use MySQL::Admin::Settings;
use MySQL::Admin::Translate;
use MySQL::Admin::Config;
use MySQL::Admin::Session;
use MySQL::Admin::Actions;

use CGI qw(-compile :html2 :html3 :netscape :cgi :internal :html4 :cgi-lib textfield textarea filefield password_field hidden checkbox checkbox_group submit reset defaults radio_group popup_menu button autoEscape
scrolling_list image_button start_form end_form start_multipart_form end_multipart_form isindex tmpFileName uploadInfo URL_ENCODED MULTIPART -private_tempfiles );

require Exporter;
use vars qw(
  $m_hrParams
  $m_qy
  $m_hrActions
  $ACCEPT_LANGUAGE
  $DefaultClass
  $m_nUplod_bytes
  $DefaultClass
  @EXPORT
  @ISA
  $m_bMod_perl
  $m_hrSettings
  $m_bUpload_error
  $m_sUser
  $m_hrLng
  @EXPORT_OK
  %EXPORT_TAGS
  $defaultconfig
);

$CGI::DefaultClass     = 'CGI';
$DefaultClass          = 'MySQL::Admin' unless defined $MySQL::Admin::DefaultClass;
$defaultconfig         = '/srv/www/cgi-bin/config/settings.pl';
$CGI::AutoloadClass    = 'CGI';
$MySQL::Admin::VERSION = '0.62';
$m_bMod_perl           = ($ENV{MOD_PERL}) ? 1 : 0;
our $hold = 120;    #session ist 120 sekunden gültig.
@ISA = qw(Exporter CGI);
@MySQL::Admin::EXPORT_OK =  qw($m_hrLng start_table end_table include h1 h2 h3 h4 h5 h6 p br hr ol ul li dl dt dd menu code var strong em tt u i b blockquote pre img a address cite samp dfn html head base body Link nextid title meta kbd start_html end_html input Select option comment charset escapeHTML div table caption th td TR Tr sup Sub strike applet Param embed basefont style span layer ilayer font frameset frame script small big Area Map abbr acronym bdo col colgroup del fieldset iframe ins label legend noframes noscript object optgroup Q thead tbody tfoot blink fontsize center textfield textarea filefield password_field hidden checkbox checkbox_group submit reset defaults radio_group popup_menu button autoEscape scrolling_list image_button start_form end_form start_multipart_form end_multipart_form isindex tmpFileName uploadInfo URL_ENCODED MULTIPART param upload path_info path_translated request_uri url self_url script_name cookie Dump raw_cookie request_method query_string Accept user_agent remote_host content_type remote_addr referer server_name server_software server_port server_protocol virtual_port virtual_host remote_ident auth_type http append save_parameters restore_parameters param_fetch remote_user user_name header redirect import_names put Delete Delete_all url_param cgi_error ReadParse PrintHeader HtmlTop HtmlBot SplitParam Vars https $ACCEPT_LANGUAGE  translate init session createSession $m_hrParams clearSession $m_qy sessionValidity includeAction);

%EXPORT_TAGS = (
    'html2' => [
        'h1' .. 'h6', qw/p br hr ol ul li dl dt dd menu code var strong em
          tt u i b blockquote pre img a address cite samp dfn html head
          base body Link nextid title meta kbd start_html end_html
          input Select option comment charset escapeHTML/
    ],
    'html3' => [
        qw/div table caption th td TR Tr sup Sub strike applet Param
          embed basefont style span layer ilayer font frameset frame script small big Area Map/
    ],
    'html4' => [
        qw/abbr acronym bdo col colgroup del fieldset iframe
          ins label legend noframes noscript object optgroup Q
          thead tbody tfoot/
    ],
    'netscape' => [qw/blink fontsize center/],
    'form'     => [
        qw/textfield textarea filefield password_field hidden checkbox checkbox_group
          submit reset defaults radio_group popup_menu button autoEscape
          scrolling_list image_button end_form start_form
          start_multipart_form end_multipart_form isindex tmpFileName uploadInfo URL_ENCODED MULTIPART/
    ],
    'cgi' => [
        qw/param upload path_info path_translated request_uri url self_url script_name
          cookie Dump
          raw_cookie request_method query_string Accept user_agent remote_host content_type
          remote_addr referer server_name server_software server_port server_protocol virtual_port
          virtual_host remote_ident auth_type http append
          save_parameters restore_parameters param_fetch
          remote_user user_name header redirect import_names put
          Delete Delete_all url_param cgi_error/
    ],
    'ssl'     => [qw/https/],
    'cgi-lib' => [qw/ReadParse PrintHeader HtmlTop HtmlBot SplitParam Vars/],
    'html'    => [
        qw/h1 h2 h3 h4 h5 h6 p br hr ol ul li dl dt dd menu code var strong em tt u i b blockquote pre img a address cite samp dfn html head base body Link nextid title meta kbd start_html end_html input Select option comment charset escapeHTML div table caption th td TR Tr sup Sub strike applet Param embed basefont style span layer ilayer font frameset frame script small big Area Map abbr acronym bdo col colgroup del fieldset iframe ins label legend noframes noscript object optgroup Q thead tbody tfoot blink fontsize center/
    ],
    'standard' => [
        qw/h1 h2 h3 h4 h5 h6 p br hr ol ul li dl dt dd menu code var strong em tt u i b blockquote pre img a address cite samp dfn html head base body Link nextid title meta kbd start_html end_html input Select option comment charset escapeHTML div table caption th td TR Tr sup Sub strike applet Param embed basefont style span layer ilayer font frameset frame script small big Area Map abbr acronym bdo col colgroup del fieldset iframe ins label legend noframes noscript object optgroup Q thead tbody tfoot textfield textarea filefield password_field hidden checkbox checkbox_group
          submit reset defaults radio_group popup_menu button autoEscape
          scrolling_list image_button start_form end_form
          start_multipart_form end_multipart_form isindex tmpFileName uploadInfo URL_ENCODED MULTIPART param upload path_info path_translated request_uri url self_url script_name
          cookie Dump
          raw_cookie request_method query_string Accept user_agent remote_host content_type
          remote_addr referer server_name server_software server_port server_protocol virtual_port
          virtual_host remote_ident auth_type http append
          save_parameters restore_parameters param_fetch
          remote_user user_name header redirect import_names put
          Delete Delete_all url_param cgi_error/
    ],
    'push' => [qw/multipart_init multipart_start multipart_end multipart_final/],
    'all'  => [
        qw/$m_hrLng h1 h2 h3 h4 h5 h6 p br hr ol ul li dl dt dd menu code var strong em tt u i b blockquote pre img a address cite samp dfn html head base body Link nextid title meta kbd start_html end_html input Select option comment charset escapeHTML div table caption th td TR Tr sup Sub strike applet Param embed basefont style span layer ilayer font frameset frame script small big Area Map abbr acronym bdo col colgroup del fieldset iframe ins label legend noframes noscript object optgroup Q thead tbody tfoot blink fontsize center textfield textarea filefield password_field hidden checkbox checkbox_group submit reset defaults radio_group popup_menu button autoEscape scrolling_list image_button start_form end_form start_multipart_form end_multipart_form isindex tmpFileName uploadInfo URL_ENCODED MULTIPART param upload path_info path_translated request_uri url self_url script_name cookie Dump raw_cookie request_method query_string Accept user_agent remote_host content_type remote_addr referer server_name server_software server_port server_protocol virtual_port virtual_host remote_ident auth_type http append save_parameters restore_parameters param_fetch remote_user user_name header redirect import_names put Delete Delete_all url_param cgi_error ReadParse PrintHeader HtmlTop HtmlBot SplitParam Vars  $ACCEPT_LANGUAGE  translate init session createSession $m_hrParams clearSession $m_qy sessionValidity includeAction include/
    ],
    'lze' =>
      [qw/ $m_hrLng $ACCEPT_LANGUAGE translate init session createSession $m_hrParams clearSession $m_qy include sessionValidity includeAction/],

);

sub new
{
    my ($class, @initializer) = @_;
    my $self = {};
    bless $self, ref $class || $class || $DefaultClass;
    return $self;
}

sub init
{
    my ($self, @p) = getSelf(@_);
    my $settingfile = $p[0] ? $p[0] : $defaultconfig;
    loadSettings($settingfile);
    *m_hrSettings = \$MySQL::Admin::Settings::m_hrSettings;
    loadTranslate($m_hrSettings->{translate});
    *m_hrLng = \$MySQL::Admin::Translate::lang;
    loadSession($m_hrSettings->{session});
    *m_qy = \$MySQL::Admin::Session::session;
    loadActions($m_hrSettings->{actions});
    *m_hrAction = \$MySQL::Admin::Actions::m_hrAction;
}

sub include
{
    my ($self, @p) = getSelf(@_);
    my $qstring = $p[0] ? $p[0] : param('include') ? param('include') : 0;
    CGI::upload_hook(\&hook);
    if (defined $qstring) {
        session($qstring);
        if (defined $m_hrParams->{file} && defined $m_hrParams->{sub}) {
            if (-e $m_hrParams->{file}) {
                do("$m_hrParams->{file}");
                eval($m_hrParams->{sub}) if $m_hrParams->{sub} ne 'main';
                warn $@ if ($@);
            } else {
                do("$m_hrActions->{$m_hrSettings->{defaultAction}}{file}");
                eval($m_hrActions->{$m_hrSettings->{defaultAction}}{sub}) if $m_hrActions->{$m_hrSettings->{defaultAction}}{sub} ne 'main';
                warn $@ if ($@);
            }
        }
    }
}

sub includeAction
{
    my ($self, @p) = getSelf(@_);
    my $m_hrAction = param('action') ? param('action') : $p[0] ? $p[0] : 0;
    CGI::upload_hook(\&hook);
    if (defined $m_hrActions->{$m_hrAction}) {
        if (defined $m_hrActions->{$m_hrAction}{file} && defined $m_hrActions->{$m_hrAction}{sub}) {
            if (-e $m_hrParams->{file}) {
                do("$m_hrSettings->{cgi}{bin}/Content/$m_hrActions->{$m_hrAction}{file}");
                eval($m_hrActions->{$m_hrAction}{sub}) if $m_hrActions->{$m_hrAction}{sub} ne 'main';
                warn $@ if ($@);
            } else {
                do("$m_hrSettings->{cgi}{bin}/Content/$m_hrActions->{$m_hrSettings->{defaultAction}}{file}");
                eval($m_hrActions->{$m_hrSettings->{defaultAction}}{sub}) if $m_hrActions->{$m_hrSettings->{defaultAction}}{sub} ne 'main';
                warn $@ if ($@);
            }
        }
    }
}

sub createSession
{
    my ($self, @p) = getSelf(@_);
    my $par = shift @p;
    $m_sUser = $par->{user} ? $par->{user} : 'guest';
    my $ip   = $self->remote_addr();
    my $time = time();
    my $id   = $par->{action} ? $par->{action} : rand 100;
    use MD5;
    my $md5 = new MD5;
    $md5->add($m_sUser);
    $md5->add($time);
    $md5->add($ip);
    $md5->add($id);
    my $fingerprint = $md5->hexdigest();

    foreach my $key (sort(keys %{$par})) {
        $m_qy->{$m_sUser}{$fingerprint}{$key} = $par->{$key};
        $m_hrParams->{$key} = $par->{$key};
    }
    $m_qy->{$m_sUser}{$fingerprint}{timestamp} = defined $par->{validity} ? $par->{validity} : time();
    saveSession($m_hrSettings->{session});
    return $fingerprint;
}

#################################### session###################################################################
# Diese Funktion lädt die Parameter die mit createSession erzeugt wurden.                                     #
# Als parameter erwartet Sie den wert den createSession zurückgegeben hat:                                    #
# Im Void Kontext wird param('include') benutzt.                                                              # ###############################################################################################################

sub session
{
    my ($self, @p) = getSelf(@_);
    if (ref($p[0]) eq 'HASH') {
        $self->createSession(@p);
    } else {
        my $param = param('include') ? param('include') : shift @p;
        $m_sUser = $p[0] ? $p[0] : 'guest';

        foreach my $key (sort(keys %{$m_qy->{$m_sUser}{$param}})) {
            $m_hrParams->{$key} = $m_qy->{$m_sUser}{$param}{$key};
        }
        $m_hrParams->{session_id} = $param;
    }

    #delete $m_qy->{$m_sUser}{$param};
    #saveSession($m_hrSettings->{session});
}

sub clearSession
{
    foreach my $ua (keys %{$m_qy}) {
        foreach my $entry (keys %{$m_qy->{$ua}}) {
            my $t =
              $m_qy->{$ua}{$entry}{timestamp}
              ? time() - $m_qy->{$ua}{$entry}{timestamp}
              : time();
            $hold =
                defined $m_qy->{$ua}{$entry}{validity}
              ? defined $m_qy->{$ua}{$entry}{validity}
              : $hold;
            delete $m_qy->{$ua}{$entry} if ($t > $hold);
        }
    }
    saveSession($m_hrSettings->{session});
}

sub sessionValidity
{
    my ($self, @p) = getSelf(@_);
    if (defined $p[0] and $p[0] =~ /(\d+)/) {
        $hold = $1;
    } else {
        return $hold;
    }
}

sub translate
{
    my ($self, @p) = getSelf(@_);
    my $key = lc $p[0];
    my @a = split(
                  /,/, defined $ENV{HTTP_ACCEPT_LANGUAGE}
                  ? $ENV{HTTP_ACCEPT_LANGUAGE}
                  : 'de,en'
    );

   loadTranslate($m_hrSettings->{translate});
   *m_hrLng = \$MySQL::Admin::Translate::lang;

    my $i = 0;
    while ($i <= $#a) {
        my $lng = $a[$i] =~ s/(\w\w).*/$1/ ? $1 : $m_hrSettings->{language};
        if (defined $m_hrLng->{$lng}{$key}) {
            $ACCEPT_LANGUAGE = $lng;
            return $m_hrLng->{$lng}{$key};
        }
        $i++;
    }
    $m_hrLng->{en}{$key} = $key unless defined $m_hrLng->{en}{$key};
    $m_hrLng->{de}{$key} = $key unless defined $m_hrLng->{de}{$key};
    $m_hrLng->{es}{$key} = $key unless defined $m_hrLng->{es}{$key};
    saveTranslate($m_hrSettings->{translate}) unless param('action') eq 'translate';
    return $p[0];
}

$m_nUplod_bytes = 0;

sub hook
{
    my ($self, @p) = getSelf(@_);
    my ($m_sFilename, $buffer, $bytes_read, $data) = @p;
    use Symbol;
    my $fh = gensym();
    if ($m_nUplod_bytes <= $m_hrSettings->{uploads}{maxlength}) {
        require bytes;
        $m_nUplod_bytes += bytes::length($buffer);
    } else {
        $m_bUpload_error = 1;
        warn 'To big upload :', $m_sFilename, $/;
    }
}

sub getSelf
{
    return @_ if defined($_[0]) && (!ref($_[0])) && ($_[0] eq 'MySQL::Admin');
    return (defined($_[0]) && (ref($_[0]) eq 'MySQL::Admin' || UNIVERSAL::isa($_[0], 'MySQL::Admin'))) ? @_ : ($MySQL::Admin::DefaultClass->new, @_);
}

1;