package DB_Manage;
use strict;
# Module export stuff
BEGIN {
use Exporter ();
use vars qw(@ISA @EXPORT);
@ISA=qw(Exporter);
@EXPORT=qw(
db_connect
db_disconnect
db_update
db_insert
db_delete
);
}
sub db_connect{
my ($this,$database,$dbhost,$dbuser,$dbpass) = @_;
use DBI;
my $dbh=DBI->connect("DBI:mysql:$database:$dbhost",$dbuser,$dbpass) or die $DBI::err;
return $dbh;
}
sub db_update {
my ($this,$dbh,$cgi,$tablename,$tablefields,$condition) = @_;
my @fparts = ();
my ($field,$val);
my (@fields);
#my $dbh=$this->db_connect;
@fields=split(/\|/,$tablefields);
foreach $field(@fields){
next if($field eq "id");
$val=$cgi->param("$field");
push @fparts, "$field=" . $dbh->quote($val);
}
my $vals = join ", ", @fparts;
my $query = "UPDATE $tablename SET $vals where $condition";
my $qdo = $dbh->do($query);
return $query;
}
sub db_delete {
my ($this,$dbh,$tablename,$condition) = @_;
#my $dbh=$this->db_connect;
my $query = "delete from $tablename where $condition";
my $qdo = $dbh->do($query);
return $query;
}
sub db_insert{
my ($this,$dbh,$cgi,$tablename,$tablefields) = @_;
my @fparts = ();
my @kparts = ();
my @fields = ();
my ($field,$date,$val);
#my $dbh=$this->db_connect;
@fields=split(/\|/,$tablefields);
foreach $field(@fields){
if($field eq "date") {
$date=$date;
}
else{
$val=$cgi->param("$field");
}
push @fparts, $field;
push @kparts, $dbh->quote($val);
}
my $fvals = join ", ", @fparts;
my $kvals = join ", ", @kparts;
my $query = "insert into $tablename($fvals) values ($kvals)";
my $qdo = $dbh->do($query);
my $new_id=$dbh->{'mysql_insertid'};
return $new_id;
}
sub list_fields{
my($this,$dbh,$tablename,$condition,$selected_fields,$page,$page_record)=@_;
#my $dbh=$this->db_connect;
my $qh_field;
if((!$page) && $page<1) {
$page=1;
}
if($condition eq "") {
$condition=1;
}
my $offset=($page-1)*$page_record;
my @selected_fields=split(/\|/,$selected_fields);
my $total_qh_fields=@selected_fields;
my $qh_fields=join(",",@selected_fields);
my $qh="select count(id) as nums from $tablename where $condition";
my $sth=$dbh->prepare($qh);
$sth->execute();
my $myrow2=$sth->fetchrow_hashref();
my $total=$myrow2->{nums};
$qh="select $qh_fields from $tablename where $condition limit $offset,$page_record";
$sth=$dbh->prepare($qh);
$sth->execute();
my @row=();
my $ref_row=[];
while(my $myrow=$sth->fetchrow_hashref()){
@row=();
foreach $qh_field(@selected_fields){
push(@row,$myrow->{$qh_field});
}
push(@$ref_row,[@row]);
}
return ($ref_row,$total,$offset);
}
sub list_fields_hash{
my($this,$dbh,$tablename,$condition,$selected_fields,$page,$page_record)=@_;
#my $dbh=$this->db_connect;
my $qh_field;
if((!$page) && $page<1) {
$page=1;
}
if($condition eq "") {
$condition=1;
}
my $offset=($page-1)*$page_record;
my @selected_fields=split(/\|/,$selected_fields);
my $total_qh_fields=@selected_fields;
my $qh_fields=join(",",@selected_fields);
my $qh="select count(id) as nums from $tablename where $condition";
my $sth=$dbh->prepare($qh);
$sth->execute();
my $myrow2=$sth->fetchrow_hashref();
my $total=$myrow2->{nums};
$qh="select $qh_fields from $tablename where $condition limit $offset,$page_record";
$sth=$dbh->prepare($qh);
$sth->execute();
my $ref_row=[];
while(my $myrow=$sth->fetchrow_hashref()){
push(@$ref_row,$myrow);
}
return ($ref_row,$total,$offset);
}
sub locate_start_rec_and_end_rec {
my ($this,$page,$page_record,$total)=@_;
my ($start_rec,$end_rec);
if (($page eq "")||($page eq 1)){
$start_rec=1;
$end_rec=$page_record*1;
if ($end_rec >$total){
$end_rec=$total;
}
$page=1;
}
else {
$start_rec=$page_record*($page-1)+1;
$end_rec=$page_record*$page;
if ($end_rec >$total){
$end_rec=$total;
}
}
$start_rec=0 if($total eq "0");
return($start_rec,$end_rec);
}
sub list_pages {
my ($this,$total,$page_record,$page,$page_href,$var,$pages)=@_;
my $pageinfo;
if(($page eq "") || $page<1) {
$page=1;
}
if(($pages eq "") || $pages<1) {
$pages=20;
}
my $page_href=$ENV{SCRIPT_NAME} if($page_href eq "");
my $total_page=int($total/$page_record);
my $temp=$total_page*$page_record;
if($temp ne $total){
$total_page++;
}
my $rec_point=$page*$page_record;
my $present_page=int($rec_point/$page_record)+1;
if($rec_point%$page_record==0){
$present_page=int($rec_point/$page_record);
}
my $present_page_tmp=$present_page-1;
my $page_start_tmp=int($present_page_tmp/$pages);
my $page_start=$pages*$page_start_tmp;
my $page_end_tmp=int($present_page_tmp/$pages)+1;
my $page_end=$pages*$page_end_tmp;
if ($page_start eq 0){
$page_start=1;
}
if ($page_end > $total_page){
$page_end=$total_page;
}
my $pflag;
$page_end=$page_end+1;
for(my $i=$page_start;$i<=$page_end;$i++){
if ($i <= $total_page) {
$pflag=1;
if (($i eq $page_end)&&($i ne ($total_page+1))){
$pageinfo .= " >> " ;
$pflag=0;
}
if (($i ne 1)&&($i eq $page_start)){
$pageinfo .= " << " ;
$pflag=0;
}
if ($pflag){
if ($i eq $present_page){
$pageinfo .= " $i ";
}
else {
$pageinfo .= " $i " ;
}
}
$pflag=1;
}
else {
last;
}
}
return ($pageinfo,$total_page);
}
sub make_hash_category {
my ($this,$dbh,$table,$cat,$dir)=@_;
#my $dbh=$this->db_connect;
my $sql="select * from $table"."_category";
my $sth=$dbh->prepare($sql);
$sth->execute();
my %category;
my %category_dir;
$cat="cat" if($cat eq "");
$dir="dir" if($dir eq "");
while(my $myrow=$sth->fetchrow_hashref()){
$category_dir{$myrow->{$cat}}=$myrow->{$dir};
$category{$myrow->{$dir}}=$myrow->{$cat};
}
return (\%category,\%category_dir) ;
}
sub selectindex {
my($this,$select_hash,$selected)=@_;
my %cat=%$select_hash;
chomp($selected);
$selected=~ s/\+$//;
my @selected_tmp=split(/\+/,$selected);
my $i=0;
my ($info,$ttt,$result);
foreach $info (sort(keys (%cat))) {
my $flag=0;
foreach $ttt (@selected_tmp){
if($info eq $ttt){
$flag=1;
}
}
if($flag){
$result.="\n";
}
else{
$result.="\n";
}
$i++;
}
return $result;
}
sub db_disconnect{
my($this,$dbh)=@_;
$dbh->disconnect;
}
sub new {
my $this={};
shift;
bless $this;
return $this;
}
1;