2021-12-30 12:05:56 +01:00
package Libenzdb ;
#
#Deprecated module, please use DBtank.pm
#
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (c) Rainer Gümpelein, TeilRad GmbH
#
#uncomment for perl -cw src/Mod/Libenzdb.pm
#use lib qw(/var/www/copri4/main/src);
#
use strict ;
use warnings ;
use POSIX ;
use DBI ;
use CGI ;
use CGI ':standard' ;
use Text::CSV_XS ;
use Spreadsheet::WriteExcel ;
use Lib::Config ;
use Scalar::Util qw( looks_like_number ) ;
use Digest::MD5 qw( md5 md5_hex ) ;
use Date::Calc qw( check_date ) ;
use Mod::DBtank ;
use Data::Dumper ;
my $ cf = new Config ;
my $ dbt = new DBtank ;
my $ q = new CGI ;
$ q - > import_names ( 'R' ) ;
sub new {
my $ class = shift ;
my $ self = { } ;
bless ( $ self , $ class ) ;
return $ self ;
}
my $ today = strftime ( "%d.%m.%Y" , localtime ( time ) ) ;
my $ date_time = strftime ( "%d.%m.%Y %H:%M" , localtime ( time ) ) ;
my % varenv = $ cf - > envonline ( ) ;
my $ dbh = $ dbt - > dbconnect ( ) ;
sub dbdisconnect {
my $ self = shift ;
$ dbh - > disconnect ;
return ;
}
#get table column info
sub table_info () {
my $ self = shift ;
my ( $ table , $ dbinit ) = @ _ ;
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ; #because of ajax
my $ sth = $ dbh - > prepare ( "SELECT attnum,attname FROM pg_class c join pg_attribute a on c.oid = a.attrelid WHERE c.relname = '$table' AND a.attnum >= 0;" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ column = $ sth - > fetchall_hashref ( "attnum" ) ;
$ sth - > finish ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ column ;
}
# new node
sub insert_node () {
my $ self = shift ;
my ( $ parent_id , $ main_id , $ node_name , $ lang , $ sort , $ template_id , $ c_id , $ owner ) = @ _ ;
my $ node_path = $ node_name ;
#für sub-menü hack
$ node_path =~ s/\!/\// ;
$ node_name =~ s/\!.*// ;
#split name path
( $ node_name , $ node_path ) = split ( /\?/ , $ node_name ) if ( $ node_name =~ /\?/ ) ;
$ template_id = "0" if ( ! $ template_id ) ;
$ c_id = "0" if ( ! $ c_id ) ;
$ sort = "0" if ( ! $ sort ) ;
$ owner = "0" if ( ! $ owner ) ;
my ( $ sth2 , $ rc ) ;
$ sth2 = $ dbh - > prepare ( "INSERT INTO nodes (main_id,parent_id,lang,node_name,node_path,n_sort,owner) VALUES('$main_id','$parent_id','$lang',trim('$node_name'),trim('$node_path'),'$sort','$owner')" ) ;
$ rc = $ sth2 - > execute ( ) ;
$ sth2 = $ dbh - > prepare ( "INSERT INTO relation (main_id,template_id,content_id,lang,change) VALUES('$main_id','$template_id','$c_id','$lang','now()') RETURNING rel_id" ) ;
$ rc = $ sth2 - > execute ( ) ;
my $ last_id ;
$ sth2 - > bind_columns ( \ $ last_id ) ;
my $ rel_id = $ sth2 - > fetchrow_array ( ) ;
return $ rel_id ;
}
##########################
# get next free node
sub get_freenode () {
my $ self = shift ;
my $ prefix_id = shift ;
my $ s_id = "$prefix_id" ;
my $ e_id = "$prefix_id" ;
$ s_id . = "00001" ;
$ e_id . = "99999" ;
my $ main_id ;
#print "$s_id - $e_id";
for ( my $ x_id = $ s_id ; $ x_id < $ e_id ; $ x_id + + ) {
my $ sth1 = $ dbh - > prepare ( "SELECT main_id from nodes where main_id='$x_id'" ) ;
my $ rc1 = $ sth1 - > execute ( ) ;
$ main_id = $ sth1 - > fetchrow_array ( ) ;
if ( ! $ main_id ) {
#print "$x_id";
return $ x_id ;
}
}
}
#
# get next free template id
sub get_freetpl () {
my $ self = shift ;
my ( $ s_id , $ e_id ) = @ _ ;
my $ tpl_id ;
for ( my $ x_id = $ s_id ; $ x_id < $ e_id ; $ x_id + + ) {
my $ sth1 = $ dbh - > prepare ( "SELECT tpl_id from template where tpl_id='$x_id'" ) ;
my $ rc1 = $ sth1 - > execute ( ) ;
$ tpl_id = $ sth1 - > fetchrow_array ( ) ;
if ( ! $ tpl_id ) {
return $ x_id ;
}
}
}
#
# Delete node and relation! (without content)
sub delete_node () {
my $ self = shift ;
my ( $ main_id , $ lang ) = @ _ ;
my $ sth = $ dbh - > prepare ( "DELETE FROM relation WHERE main_id='$main_id' and lang='$lang' and content_id='0'" ) ;
my $ rc = $ sth - > execute ( ) ;
$ sth = $ dbh - > prepare ( "DELETE FROM nodes WHERE main_id='$main_id' and lang='$lang'" ) ;
$ rc = $ sth - > execute ( ) ;
#$dbh->commit or die $dbh->errstr;
$ sth - > finish ( ) ;
return $ rc ;
}
#all nodes
sub collect_node4all () {
my $ self = shift ;
my ( $ main_id , $ lang , $ u_id , $ min_main_id , $ max_main_id ) = @ _ ;
my $ where = "where 1=1" ;
#$where .= " and node_public='1'" if(!$u_id && $varenv{mlogic} eq "web");
$ where . = " and parent_id = '$main_id'" if ( $ main_id ) ;
$ where . = " and main_id >= '$min_main_id'" if ( $ min_main_id ) ;
$ where . = " and main_id <= '$max_main_id'" if ( $ max_main_id ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ nodes = $ sth - > fetchall_hashref ( "n_id" ) ;
$ sth - > finish ;
return $ nodes ;
}
# Nodes einer Ebene
sub collect_node () {
my $ self = shift ;
my ( $ main_id , $ lang , $ u_id , $ dbinit ) = @ _ ;
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ;
my $ where = "" ;
#$where = " and node_public='1'" if(!$u_id && $varenv{mlogic} eq "web");
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE parent_id='$main_id' and lang='$lang' $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ nodes = $ sth - > fetchall_hashref ( "main_id" ) ;
$ sth - > finish ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ nodes ;
}
# Nodes with relation
sub collect_noderel () {
my $ self = shift ;
my ( $ main_id , $ lang , $ u_id , $ dbinit ) = @ _ ;
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ;
my $ where = "" ;
#$where = " and nd.node_public='1'" if(!$u_id && $varenv{mlogic} eq "web");
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes nd, relation rel WHERE nd.main_id=rel.main_id and nd.parent_id='$main_id' and nd.lang='$lang' and rel.content_id=0 $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ nodes = $ sth - > fetchall_hashref ( "main_id" ) ;
$ sth - > finish ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ nodes ;
}
# Nodes recursive
sub collect_noderec () {
my $ self = shift ;
my ( $ main_id , $ lang , $ excluded , $ u_id , $ hashref ) = @ _ ;
$ main_id =~ s/,$// ;
my $ main_ids = "$main_id," ;
my $ main_ids_ref ;
my $ main_collect = & collect_node ( "" , $ main_id , $ lang , $ u_id , "" , "" ) ;
if ( ref ( $ main_collect ) eq "HASH" ) {
#$main_ids_ref = { $main_collect };
foreach my $ id ( keys ( %$ main_collect ) ) {
if ( $ main_collect - > { $ id } - > { node_name } !~ /$excluded/ ) {
$ main_ids . = "$main_collect->{$id}->{main_id}," ;
#print "$main_id:$main_collect->{$id}->{main_id}<br>";
my $ main_collect2 = & collect_node ( "" , $ main_collect - > { $ id } - > { main_id } , $ lang , $ u_id , "" ) if ( $ main_collect - > { $ id } - > { main_id } ) ;
if ( ref ( $ main_collect2 ) eq "HASH" ) {
#$main_ids_ref = { $main_collect, $main_collect2 };
foreach my $ id ( keys ( %$ main_collect2 ) ) {
$ main_ids . = "$main_collect2->{$id}->{main_id}," ;
my $ main_collect3 = & collect_node ( "" , $ main_collect2 - > { $ id } - > { main_id } , $ lang , $ u_id , "" ) if ( $ main_collect2 - > { $ id } - > { main_id } ) ;
if ( ref ( $ main_collect3 ) eq "HASH" ) {
#$main_ids_ref = { $main_collect, $main_collect2, $main_collect3 };
foreach my $ id ( keys ( %$ main_collect3 ) ) {
$ main_ids . = "$main_collect3->{$id}->{main_id}," ;
}
}
}
}
}
}
}
$ main_ids =~ s/,$// ;
if ( $ hashref ) { #disabled and never uesd
return $ main_ids_ref ;
} else {
return $ main_ids ;
}
}
# Nodes
sub collect_node2 () {
my $ self = shift ;
my $ main_ids = shift ;
$ main_ids =~ s/,$// ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE main_id IN ($main_ids)" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ nodes = $ sth - > fetchall_hashref ( "main_id" ) ;
$ sth - > finish ;
return $ nodes ;
}
# Nodes with variable
sub collect_node3 () {
my $ self = shift ;
my ( $ column1 , $ op1 , $ content1 , $ column2 , $ op2 , $ content2 , $ main_ids ) = @ _ ;
$ main_ids =~ s/,$// ;
my $ where = "$column1 $op1 '$content1'" ;
$ where . = " and $column2 $op2 '$content2'" if ( $ content2 ) ;
$ where . = " and main_id IN ($main_ids)" ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ nodes = $ sth - > fetchall_hashref ( "main_id" ) ;
$ sth - > finish ;
return $ nodes ;
}
# Nodes Anhand der main_id
sub get_node4all () {
my $ self = shift ;
my ( $ main_id ) = @ _ ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE main_id='$main_id'" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ nodes = $ sth - > fetchall_hashref ( "lang" ) ;
$ sth - > finish ;
return $ nodes ;
}
# Node Anhand der main_id für multilang
sub get_node4multi () {
my $ self = shift ;
my ( $ main_id , $ lang , $ owner , $ parent_id , $ dbinit ) = @ _ ;
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ;
$ owner = 0 if ( ! $ owner ) ;
my $ sel = "" ;
$ sel . = " and owner='$owner'" if ( $ owner > 0 ) ;
$ sel . = " and parent_id='$parent_id'" if ( $ parent_id && $ parent_id =~ /^\d+$/ && $ parent_id > 0 ) ;
$ sel . = " order by parent_id $parent_id" if ( $ parent_id && $ parent_id =~ /ASC|DESC/ ) ; #workaround Verleihräder
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE main_id='$main_id' and lang='$lang' $sel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ node = $ sth - > fetchrow_hashref ( ) ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ node ;
}
# get child node
sub get_subnode () {
my $ self = shift ;
my ( $ main_id , $ lang , $ n_sort ) = @ _ ;
my $ where ;
$ where = "and n_sort = '$n_sort'" if ( $ n_sort ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE parent_id='$main_id' and lang='$lang' $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ node = $ sth - > fetchrow_hashref ( ) ;
return $ node ;
}
# Node Anhand des node_name und parent_id
sub get_nodeset () {
my $ self = shift ;
my ( $ parent_id , $ node_name , $ lang , $ dbinit ) = @ _ ;
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ;
$ node_name = $ q - > escapeHTML ( $ node_name ) ;
my $ sel_node_name ;
$ sel_node_name = "and (nodes.node_path='$node_name' OR nodes.node_name='$node_name')" if ( $ node_name ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes, relation WHERE nodes.main_id=relation.main_id $sel_node_name and nodes.lang='$lang' and nodes.parent_id='$parent_id'" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ node = $ sth - > fetchrow_hashref ( ) ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ node ;
}
# Node Anhand des node_name and parent_id
sub get_node () {
my $ self = shift ;
my ( $ node_name , $ lang , $ operator , $ parent_id ) = @ _ ;
#print "($node_name,$lang,$operator,$parent_id)";
$ node_name = $ q - > escapeHTML ( $ node_name ) ;
my $ where = "lang='$lang'" ;
$ where . = " and parent_id $operator '$parent_id'" if ( $ parent_id ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE (node_path='$node_name' OR node_name='$node_name') and $where" ) ;
#print "SELECT * FROM nodes WHERE (node_path='$node_name' OR node_name='$node_name') and $where";
my $ rc = $ sth - > execute ( ) ;
my $ node = $ sth - > fetchrow_hashref ( ) ;
return $ node ;
}
# Node main_id and template_id and node_name
sub get_node4rel () {
my $ self = shift ;
my ( $ main_id , $ template_id , $ node_name , $ content_id ) = @ _ ;
my $ where = "no.main_id=rel.main_id" ;
$ where . = " and rel.template_id=$template_id" if ( $ template_id ) ;
$ where . = " and no.main_id=$main_id" if ( $ main_id ) ;
$ where . = " and no.node_name ilike '$node_name'" if ( $ node_name ) ;
$ where . = " and no.node_public = '1'" if ( $ varenv { wwwhost } =~ /tinkdms/ ) ;
$ where . = " and rel.content_id = '0'" if ( $ content_id eq "null" ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes no, relation rel WHERE $where " ) ;
my $ rc = $ sth - > execute ( ) ;
my $ node = $ sth - > fetchrow_hashref ( ) ;
return $ node ;
}
# Node Anhand des node_name und parent-node_name
sub get_node2 () {
my $ self = shift ;
my ( $ parentsel , $ node_name , $ lang ) = @ _ ;
$ node_name = $ q - > escapeHTML ( $ node_name ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE (node_path='$node_name' OR node_name='$node_name') and lang='$lang' and parent_id IN (SELECT main_id from nodes where (node_path='$parentsel' OR node_name='$parentsel') and lang='$lang')" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ node = $ sth - > fetchrow_hashref ( ) ;
return $ node ;
}
# Node Anhand des node_name und parent_id
sub get_node3 () {
my $ self = shift ;
my ( $ parent_id , $ node_name , $ lang ) = @ _ ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes WHERE node_name='$node_name' and lang='$lang' and parent_id='$parent_id'" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ node = $ sth - > fetchrow_hashref ( ) ;
return $ node ;
}
# all templates
sub collect_tpl () {
my $ self = shift ;
my ( $ tpl_ids , $ key ) = @ _ ;
my $ where = "where tpl_id != 98 and tpl_id != 97" ; #without meta-Config and EditNode
$ where . = " and tpl_id IN ($tpl_ids)" if ( $ tpl_ids ) ;
$ where . = " and tpl_order like '%$key%'" if ( $ key ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM template $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ tpl_all = $ sth - > fetchall_hashref ( "tpl_id" ) ;
$ sth - > finish ;
return $ tpl_all ;
}
# get template row
sub get_tpl () {
my $ self = shift ;
my ( $ template_id ) = @ _ ;
$ template_id = 0 if ( ! $ template_id ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM template WHERE tpl_id='$template_id'" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ tpl = $ sth - > fetchrow_hashref ( ) ;
return $ tpl ;
}
# get template row
sub get_tpl2 () {
my $ self = shift ;
my ( $ tpl_name ) = @ _ ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM template WHERE tpl_name='$tpl_name'" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ tpl = $ sth - > fetchrow_hashref ( ) ;
return $ tpl ;
}
# get all relation from main_id
sub get_rel4all () {
my $ self = shift ;
my ( $ main_id ) = @ _ ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation WHERE main_id='$main_id'" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rel = $ sth - > fetchall_hashref ( "lang" ) ;
$ sth - > finish ;
return $ rel ;
}
# get relation row
sub get_relation () {
my $ self = shift ;
my ( $ main_id , $ lang , $ rel_id ) = @ _ ;
my $ where = "1=1" ;
$ where . = " and main_id='$main_id' and lang='$lang'" if ( $ main_id ) ;
$ where . = " and rel_id='$rel_id'" if ( $ rel_id ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation WHERE $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rel = $ sth - > fetchrow_hashref ( ) ;
return $ rel ;
}
#NO isnt't consistent, because of after delete, we need a empty relation
#get empty relation row
sub get_rel4empty () {
my $ self = shift ;
my ( $ main_id , $ lang , $ content_id , $ template_id ) = @ _ ;
my $ where = "main_id='$main_id' and lang='$lang'" ;
$ where . = " and (content_id = '0' OR content_id is null)" ;
$ where . = " and template_id='$template_id'" if ( $ template_id > 0 ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation WHERE $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rel = $ sth - > fetchrow_hashref ( ) ;
return $ rel ;
}
# get relation with template
sub get_rel4tpl () {
my $ self = shift ;
my ( $ main_id , $ lang , $ content_id , $ template_id , $ ascdesc , $ rel_id , $ realct ) = @ _ ;
$ content_id = 0 if ( ! $ content_id ) ;
my $ where = "WHERE relation.template_id=template.tpl_id and lang='$lang'" ;
$ where . = " and relation.main_id='$main_id'" if ( $ main_id > 0 ) ;
$ where . = " and relation.content_id='$content_id'" if ( $ content_id > 0 ) ;
$ where . = " and relation.template_id='$template_id'" if ( $ template_id > 0 ) ;
$ where . = " and relation.rel_id='$rel_id'" if ( $ rel_id > 0 ) ;
$ where . = " and content_id $realct" if ( $ realct ) ; # MandantConf >0
$ where . = " order by content_id $ascdesc" if ( $ ascdesc ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation,template $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rel = $ sth - > fetchrow_hashref ( ) ;
return $ rel ;
}
# get relation, template, nodes
sub get_rel4tpl4nd () {
my $ self = shift ;
my ( $ main_id , $ lang , $ content_id , $ template_id , $ ascdesc , $ rel_id ) = @ _ ;
$ content_id = 0 if ( ! $ content_id ) ;
my $ where = "WHERE nodes.main_id=relation.main_id and relation.template_id=template.tpl_id" ;
$ where . = " and relation.main_id='$main_id'" if ( $ main_id > 0 ) ;
$ where . = " and relation.content_id='$content_id'" if ( $ content_id > 0 ) ;
$ where . = " and relation.template_id='$template_id'" if ( $ template_id > 0 ) ;
$ where . = " and relation.rel_id='$rel_id'" if ( $ rel_id > 0 ) ;
$ where . = " order by content_id $ascdesc" if ( $ ascdesc ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation,template,nodes $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rel = $ sth - > fetchrow_hashref ( ) ;
return $ rel ;
}
# get content based by owner
sub get_content4owner () {
my $ self = shift ;
my ( $ table , $ owner ) = @ _ ;
my $ where = "WHERE owner='$owner'" ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rel = $ sth - > fetchrow_hashref ( ) ;
return $ rel ;
}
# delete relation (without node)
sub delete_relation () {
my $ self = shift ;
my ( $ main_id , $ lang , $ rel_id ) = @ _ ;
my $ sth = $ dbh - > prepare ( "DELETE FROM relation WHERE main_id='$main_id' and lang='$lang' and rel_id='$rel_id'" ) ;
my $ rc = $ sth - > execute ( ) ;
$ sth - > finish ( ) ;
return $ rc ;
}
# delete template (without node)
sub delete_template () {
my $ self = shift ;
my ( $ tpl_id ) = @ _ ;
my $ sth = $ dbh - > prepare ( "DELETE FROM template WHERE tpl_id='$tpl_id'" ) ;
my $ rc = $ sth - > execute ( ) ;
$ sth - > finish ( ) ;
return $ rc ;
}
# insert relation
sub insert_relation () {
my $ self = shift ;
my ( $ table , $ main_id , $ lang , $ c_id , $ tpl_id , $ offer_id ) = @ _ ;
my $ foreign_key = "" ;
my $ foreign_id = $ c_id ; #alle bis auf offer
$ foreign_key = "cc_id" if ( "$table" eq "content" ) ;
$ foreign_key = "cp_id" if ( "$table" eq "contentpers" ) ;
$ foreign_key = "cu_id" if ( "$table" eq "contentuser" ) ;
$ foreign_key = "co_id" if ( "$table" eq "offer" ) ;
$ foreign_id = 0 if ( ! $ c_id ) ;
$ foreign_id = $ offer_id if ( "$table" eq "offer" ) ;
$ c_id = 0 if ( ! $ c_id ) ;
$ offer_id = 0 if ( ! $ offer_id ) ;
$ tpl_id = 0 if ( ! $ tpl_id ) ;
my $ sth = $ dbh - > prepare ( "INSERT INTO relation ($foreign_key,main_id,content_id,offer_id,template_id,lang,change) VALUES('$foreign_id','$main_id','$c_id','$offer_id','$tpl_id','$lang','now()') RETURNING rel_id" ) ;
my $ rows = $ sth - > execute ( ) ;
my $ last_id ;
$ sth - > bind_columns ( \ $ last_id ) ;
my $ rel_id = $ sth - > fetchrow_array ( ) ;
return $ rel_id ;
}
# insert relationlist for multi relation in listing mode
sub insert_relationlist () {
my $ self = shift ;
2022-11-16 21:22:00 +01:00
my ( $ table , $ main_id , $ lang , $ c_id , $ tpl_id , $ foreign_key , $ dbinit ) = @ _ ;
2021-12-30 12:05:56 +01:00
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ; #because of ajax
$ c_id = 0 if ( ! $ c_id ) ;
$ tpl_id = 0 if ( ! $ tpl_id ) ;
2022-11-16 21:22:00 +01:00
my $ sth = $ dbh - > prepare ( "INSERT INTO relation (main_id,content_id,$foreign_key,template_id,lang,change) VALUES('$main_id','$c_id','$c_id','$tpl_id','$lang','now()') RETURNING rel_id" ) ;
2021-12-30 12:05:56 +01:00
my $ rows = $ sth - > execute ( ) ;
my $ last_id ;
$ sth - > bind_columns ( \ $ last_id ) ;
my $ rel_id = $ sth - > fetchrow_array ( ) ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ rel_id ;
}
# obsolet
# update relation
sub update_relation () {
my $ self = shift ;
my ( $ main_id , $ lang , $ new_main_id , $ template_id , $ c_id , $ rel_id , $ foreign_key ) = @ _ ;
my $ foreign_id = $ c_id ;
$ foreign_id = 0 if ( ! $ c_id ) ;
$ c_id = 0 if ( ! $ c_id ) ;
my $ rel_set = "change='now()'" ;
$ rel_set . = ",main_id='$new_main_id'" if ( $ new_main_id ) ;
$ rel_set . = ",template_id='$template_id'" if ( $ template_id =~ /\d/ ) ;
$ rel_set . = ",content_id='$c_id'" if ( $ c_id =~ /\d/ ) ;
$ rel_set . = ",$foreign_key='$foreign_id'" if ( $ foreign_key && $ foreign_id ) ;
$ rel_set . = ",template_id='0'" if ( ! $ template_id ) ;
$ rel_set . = ",content_id='0'" if ( ! $ c_id ) ;
my $ where = "where main_id='$main_id' and lang='$lang' and rel_id='$rel_id'" ;
my $ sth = $ dbh - > prepare ( "UPDATE relation SET $rel_set $where" ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
sub update_relation2 () {
my $ self = shift ;
my ( $ main_id , $ lang , $ new_main_id , $ new_template_id , $ rel_id , $ dbinit ) = @ _ ;
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ; #because of ajax
my $ rel_set = "change='now()'" ;
$ rel_set . = ",main_id='$new_main_id'" if ( $ new_main_id ) ;
$ rel_set . = ",template_id='$new_template_id'" if ( $ new_template_id ) ;
my $ where = "where lang='$lang' and rel_id='$rel_id'" ;
$ where . = " and main_id='$main_id'" if ( $ main_id ) ;
my $ sth = $ dbh - > prepare ( "UPDATE relation SET $rel_set $where" ) ;
my $ rows = $ sth - > execute ( ) ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ rows ;
}
#change all relations of main_id (maybe changeing template ore node)
sub update_relation3 () {
my $ self = shift ;
my ( $ main_id , $ lang , $ new_main_id , $ template_id ) = @ _ ;
my $ rel_set = "change='now()'" ;
$ rel_set . = ",main_id='$new_main_id'" if ( $ new_main_id ) ;
$ rel_set . = ",template_id='$template_id'" if ( $ template_id =~ /\d/ ) ;
my $ where = "where lang='$lang' and main_id='$main_id'" ;
my $ sth = $ dbh - > prepare ( "UPDATE relation SET $rel_set $where" ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
sub update_users4trans () {
my $ self = shift ;
my ( $ c_id4trans , $ tpl_id4trans , $ kind_of_trans , $ u_id ) = @ _ ;
my $ sth = $ dbh - > prepare ( " UPDATE users SET
c_id4trans = '$c_id4trans' ,
2023-08-01 07:47:54 +02:00
tpl_id4trans = '$tpl_id4trans'
2021-12-30 12:05:56 +01:00
where u_id = $ u_id " ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
sub cleanup_users () {
my $ self = shift ;
my $ u_id = shift ;
my $ sth = $ dbh - > prepare ( " UPDATE users SET
c_id4trans = '0' ,
2023-08-01 07:47:54 +02:00
tpl_id4trans = '0'
2021-12-30 12:05:56 +01:00
where u_id = $ u_id " ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
# final users_update
sub users_up () {
my $ self = shift ;
my ( $ column , $ value , $ u_id ) = @ _ ;
#if($value){
my $ sth = $ dbh - > prepare ( "UPDATE users SET $column='$value' where u_id='$u_id'" ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
#}
}
# all content
sub collect_content () {
my $ self = shift ;
my $ sth = $ dbh - > prepare ( "SELECT c_id,ct_name FROM content" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct_all = $ sth - > fetchall_hashref ( "c_id" ) ;
$ sth - > finish ;
return $ ct_all ;
}
# all content or tt_news_cat
sub collect_content2 () {
my $ self = shift ;
my ( $ table , $ column , $ content , $ id_key ) = @ _ ;
$ id_key = "c_id" if ( ! $ id_key ) ;
my $ sel = "" ;
$ sel = "where $column='$content'" if ( $ content ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table $sel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct_all = $ sth - > fetchall_hashref ( "$id_key" ) ;
$ sth - > finish ;
return $ ct_all ;
}
# all content, mainly used by get_freenr
sub collect_content3 () {
my $ self = shift ;
my ( $ table , $ column , $ content , $ key ) = @ _ ;
$ key = "barcode" if ( ! $ key ) ;
my $ where ;
$ where = "where $column = '$content'" if ( $ content ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct_all = $ sth - > fetchall_hashref ( "$key" ) ;
$ sth - > finish ;
return $ ct_all ;
}
#collect relation nodes
sub collect_rel4nodes () {
my $ self = shift ;
my ( $ main_ids , $ content_id , $ template_id , $ key ) = @ _ ;
my $ where ;
$ where . = " and parent_id IN ($main_ids)" if ( $ main_ids ) ;
if ( $ content_id =~ /\d\s\d/ ) {
$ content_id =~ s/\s/,/g ;
$ where . = " and rel.content_id IN ($content_id)" ;
} elsif ( $ content_id ) {
$ where . = " and rel.content_id='$content_id'" ;
}
$ where . = " and rel.template_id='$template_id'" if ( $ template_id ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation rel, nodes nd where rel.main_id=nd.main_id $where" ) ;
my $ rc = $ sth - > execute ( ) ;
$ key = "main_id" if ( ! $ key ) ;
my $ rel4nd = $ sth - > fetchall_hashref ( "$key" ) ;
$ sth - > finish ;
return $ rel4nd ;
}
#collect relation templates
sub collect_rel4tpl () {
my $ self = shift ;
my ( $ main_id ) = @ _ ;
my $ where ;
$ where . = " and rel.main_id='$main_id'" if ( $ main_id ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation rel, template tpl where rel.template_id=tpl.tpl_id $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rel4tpl = $ sth - > fetchall_hashref ( "main_id" ) ;
$ sth - > finish ;
return $ rel4tpl ;
}
# all content4relation
sub collect_ct4rel () {
my $ self = shift ;
my ( $ table , $ main_ids , $ lang , $ scol , $ offset , $ limit , $ sort4edit , $ tplids , $ relids , $ sort_updown , $ content_ids , $ id ) = @ _ ;
$ main_ids =~ s/,$// ;
$ tplids =~ s/,$// ;
$ relids =~ s/,$// ;
$ content_ids =~ s/,$// ;
my $ updown = "ASC" ;
$ updown = "DESC" if ( $ sort_updown eq "down" ) ;
my $ where ;
if ( $ relids =~ /\d/ ) {
$ where . = " and rel.rel_id IN ($relids)" ;
} elsif ( $ table eq "contenttrans" ) {
$ where . = " and ct.close_time is null" ;
}
#$where .= " and rel.main_id='$main_id'" if($main_id);
$ where . = " and rel.main_id IN ($main_ids)" if ( $ main_ids ) ;
$ where . = " and rel.template_id IN ($tplids)" if ( $ tplids =~ /\d/ ) ;
$ where . = " and rel.content_id IN ($content_ids)" if ( $ content_ids =~ /\d/ ) ;
$ where . = " and sort like '$sort4edit%'" if ( $ sort4edit ) ;
$ where . = " ORDER BY $scol $updown" if ( $ scol ) ;
$ where . = " LIMIT $limit" if ( $ limit ) ;
$ where . = " OFFSET $offset" if ( $ offset ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table ct, relation rel where ct.c_id=rel.content_id and rel.lang='$lang' $where" ) ;
my $ rc = $ sth - > execute ( ) ;
$ id = "c_id" if ( ! $ id ) ;
my $ ct4rel = $ sth - > fetchall_hashref ( "$id" ) ;
$ sth - > finish ;
return $ ct4rel ;
}
# all content4relation for main_ids
sub collect_ct4rel2 () {
my $ self = shift ;
my ( $ table , $ main_ids , $ lang , $ scol , $ offset , $ limit , $ owner , $ id , $ u_id , $ trader ) = @ _ ;
$ main_ids =~ s/,$// ;
my $ where ;
$ where = " and ct.close_time is null" if ( $ table eq "contenttrans" ) ;
$ where . = " and ct.owner = '$owner'" if ( $ owner ) ;
$ where = " and ct.trader = '$trader'" if ( $ trader ) ;
#$where .= " and ct.content_public = '1'" if($u_id !~ /\d|always_public/);
$ where . = " and ct.content_public = '1'" if ( $ u_id == 0 || $ u_id !~ /\d/ ) ;
if ( $ scol && $ limit ) {
$ where . = " ORDER BY $scol LIMIT $limit OFFSET $offset" ;
} elsif ( $ scol ) {
$ where . = " ORDER BY $scol" ;
}
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table ct, relation rel where ct.c_id=rel.content_id and rel.main_id IN ($main_ids) $where" ) ;
my $ rc = $ sth - > execute ( ) ;
$ id = "c_id" if ( ! $ id ) ;
#$id="rel_id" if(!$id && $varenv{mlogic} eq "web"); #impliziert mehrfach-einträge, siehe Kacheln
#$id="main_id" if($varenv{mlogic} eq "web");
my $ ct4rel = $ sth - > fetchall_hashref ( "$id" ) ;
$ sth - > finish ;
return $ ct4rel ;
}
# all content4relation with optional c_ids and operator
sub collect_ct4rel3 () {
my $ self = shift ;
my ( $ table , $ column1 , $ content1 , $ op2 , $ column2 , $ content2 , $ tpl_ids , $ c_ids , $ id ) = @ _ ;
$ tpl_ids =~ s/,$// ;
$ c_ids =~ s/,$// ;
my $ where = "where ct.c_id=rel.content_id" ;
if ( $ content1 =~ /\d+,\d+/ ) {
$ where . = " and rel.$column1 IN ($content1)" ;
} elsif ( $ content1 ) {
$ where . = " and rel.$column1='$content1'" ;
}
if ( "$content2" || "$content2" eq "0" ) {
$ where . = " and ct.$column2 $op2 $content2" if ( $ column2 =~ /int/ ) ;
$ where . = " and ct.$column2 $op2 '$content2'" if ( $ column2 !~ /int/ ) ;
}
$ where . = " and rel.template_id IN ($tpl_ids)" if ( $ tpl_ids ) ;
$ where . = " and ct.c_id IN ($c_ids)" if ( $ c_ids ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table ct, relation rel $where" ) ;
my $ rc = $ sth - > execute ( ) ;
$ id = "c_id" if ( ! $ id ) ;
my $ ct_all = $ sth - > fetchall_hashref ( $ id ) ;
$ sth - > finish ;
return $ ct_all ;
}
# all content + relation + nodes
sub collect_ct4rel4nd () {
my $ self = shift ;
my ( $ table , $ main_ids , $ lang , $ scol , $ offset , $ limit , $ colname , $ colval , $ tpl_ids , $ rel_ids , $ id , $ parent_id ) = @ _ ;
$ tpl_ids =~ s/,$// ;
$ main_ids =~ s/,$// ;
$ rel_ids =~ s/,$// ;
my $ where ;
if ( $ colname && $ colname =~ /int/ && $ colval eq "null" ) {
$ where . = " and $colname is $colval" ;
} elsif ( $ colname && $ colval ) {
$ where . = " and $colname = '$colval'" ;
}
$ where . = " and rel.template_id IN ($tpl_ids)" if ( $ tpl_ids ) ;
$ where . = " and rel.main_id IN ($main_ids)" if ( $ main_ids ) ;
$ where . = " and nd.parent_id = '$parent_id'" if ( $ parent_id ) ;
$ where . = " and rel.rel_id IN ($rel_ids)" if ( $ rel_ids ) ;
$ where . = " and nd.node_public='1'" if ( $ varenv { wwwhost } =~ /k9/ ) ;
my $ scol_table = "ct" ;
$ scol_table = "nd" if ( $ scol eq "n_sort" ) ;
if ( $ scol && $ limit ) {
$ where . = " ORDER BY $scol_table.$scol LIMIT $limit OFFSET $offset" ;
} elsif ( $ scol ) {
$ where . = " ORDER BY $scol_table.$scol" ;
}
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table ct, relation rel, nodes nd where ct.c_id=rel.content_id and nd.main_id=rel.main_id $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct4rel = $ sth - > fetchall_hashref ( "$id" ) ;
$ sth - > finish ;
return $ ct4rel ;
}
#collect content with contenttranspos by c.c_id...
sub collect_postime () {
my $ self = shift ;
my ( $ table , $ start_date_time , $ end_date_time , $ start_date2 , $ end_date2 ) = @ _ ;
$ start_date_time =~ s/,/./g ;
$ end_date_time =~ s/,/./g ;
my $ where = "where cp.cc_id=c.c_id" ;
$ where . = " and cp.start_time >= $start_date_time" ;
$ where . = " and cp.end_time <= $end_date_time" ;
$ where . = " and (cp.start_time >= '$start_date2' OR cp.end_time >= '$start_date2')" if ( $ start_date2 && $ end_date2 ) ;
my $ sth = $ dbh - > prepare ( "SELECT cp.* from content c, $table cp $where order by cp.end_time" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchall_hashref ( "cc_id" ) ;
$ sth - > finish ;
return $ ct ;
}
#all position of contenttrans
sub collect_contentpos () {
my $ self = shift ;
my ( $ table , $ c_id ) = @ _ ;
my $ tb = "contenttrans" ;
my $ tbpos = "contenttranspos" ;
if ( $ table eq "contenttver" ) {
$ tb = "contenttver" ;
$ tbpos = "contenttverpos" ;
}
my $ where = "where ctt.c_id=pos.ct_id and ctt.c_id='$c_id'" ;
if ( $ c_id ) {
my $ sth = $ dbh - > prepare ( "SELECT pos.* FROM $tbpos pos, $tb ctt $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ cpos = $ sth - > fetchall_hashref ( "c_id" ) ;
my $ rows = $ sth - > rows ;
$ sth - > finish ;
return ( $ cpos , $ rows ) ;
} else {
my $ cpos = { c_id = > 0 } ;
my $ rows = 0 ;
return ( $ cpos , $ rows ) ;
}
}
# get content 4 time row where c_id
sub get_time4ct () {
my $ self = shift ;
my ( $ table , $ ctpos_id , $ cvpos_id , $ owner ) = @ _ ;
my $ pos_key = "ctpos_id" ;
my $ pos_id = $ ctpos_id ;
$ pos_id = "0" if ( ! $ ctpos_id ) ;
if ( $ cvpos_id ) {
$ pos_key = "cvpos_id" ;
$ pos_id = $ cvpos_id ;
}
$ owner = 0 if ( ! $ owner ) ;
my $ ownersel = "" ;
$ ownersel = "and owner='$owner'" if ( $ owner > 0 ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table ct,timetable WHERE ct.c_id='$pos_id' and ct.c_id=timetable.$pos_key $ownersel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get content row where c_id
sub get_content () {
my $ self = shift ;
my ( $ c_id , $ owner ) = @ _ ;
$ c_id = 0 if ( ! $ c_id ) ;
$ owner = 0 if ( ! $ owner ) ;
my $ ownersel = "" ;
$ ownersel = "and owner='$owner'" if ( $ owner > 0 ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM content WHERE c_id='$c_id' $ownersel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
sub get_contentrow () {
my $ self = shift ;
my ( $ table , $ c_id , $ column , $ content , $ column2 , $ content2 , $ column3 , $ content3 ) = @ _ ;
my $ where = "1 = 1" ;
if ( $ c_id ) {
$ where . = " and c_id='$c_id'" ;
} elsif ( $ column && $ content ) {
$ where . = " and $column='$content'" ;
} else {
exit 1 ;
}
if ( $ column2 && $ content2 ) {
$ where . = " and $column2='$content2'" ;
}
if ( $ column3 && $ content3 ) {
$ where . = " and $content3" ; # length(ct_name) >= 11 matches PO-14058223 and 9550010000059998099
$ where . = " and (int03=1 OR int03=2)" if ( $ column3 eq "ct_name" ) ;
}
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table WHERE $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
#get not closed contenttrans row
sub get_contenttrans () {
my $ self = shift ;
my ( $ userID , $ main_id , $ main_id_ch ) = @ _ ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM contenttrans ct, relation rel WHERE ct.c_id=rel.content_id and rel.main_id IN ($main_id,$main_id_ch) and ct.txt08 ilike '$userID' and (ct.state is null OR ct.state = '') and ct.close_time is null" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# insert contenttrans
# only used in Prelogic and should be deleted.
sub insert_contenttrans () {
my $ self = shift ;
my ( $ ctadr , $ main_id , $ tpl_id , $ owner ) = @ _ ;
$ owner = "199" if ( ! $ owner ) ;
my $ sth = $ dbh - > prepare ( "INSERT INTO contenttrans (ct_name,txt00,int10,int03,txt02,txt01,txt03,txt06,txt07,txt08,txt09,txt15,txt17,txt18,txt19,owner,itime) VALUES('----','Rechnung','$ctadr->{c_id}','$ctadr->{int03}','$ctadr->{txt02}','$ctadr->{txt01}','$ctadr->{txt03}','$ctadr->{txt06}','$ctadr->{txt07}','$ctadr->{txt08}','$ctadr->{txt09}','$ctadr->{txt15}','$ctadr->{txt17}','$ctadr->{txt18}','$ctadr->{txt19}','$owner','now()') RETURNING c_id" ) ;
my $ rows = $ sth - > execute ( ) ;
my $ last_id ;
$ sth - > bind_columns ( \ $ last_id ) ;
my $ c_id = $ sth - > fetchrow_array ( ) ;
my $ sth3 = $ dbh - > prepare ( "INSERT INTO relation (ca_id,main_id,content_id,template_id,change) VALUES('$ctadr->{c_id}','$main_id','$c_id','$tpl_id','now()')" ) ;
$ sth3 - > execute ( ) ;
return $ c_id ;
}
# get content row where c_id
sub get_content1 () {
my $ self = shift ;
my ( $ table , $ c_id , $ owner , $ mtime ) = @ _ ;
$ c_id = 0 if ( ! $ c_id ) ;
$ owner = 0 if ( ! $ owner ) ;
#my $ownersel;
#$ownersel = "and owner='$owner'" if($owner > 0);
my $ sel = "1 = 1" ;
$ sel . = " and c_id='$c_id'" ;
$ sel . = " and owner='$owner'" if ( $ owner > 0 ) ;
$ sel . = " and mtime <= '$mtime'" if ( $ mtime ) ;
#my $sth = $dbh->prepare("SELECT * FROM $table WHERE c_id='$c_id' $ownersel");
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table WHERE $sel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get content row
sub get_content2 () {
my $ self = shift ;
my ( $ table , $ ct_name , $ owner , $ mtime , $ column , $ content , $ op ) = @ _ ;
$ owner = 0 if ( ! $ owner ) ;
my $ sel = "1 = 1" ;
$ sel . = " and ct_name='$ct_name'" if ( $ ct_name ) ;
$ sel . = " and owner='$owner'" if ( $ owner > 0 ) ;
$ sel . = " and mtime >= '$mtime'" if ( $ mtime ) ;
$ op = "=" if ( ! $ op ) ;
$ sel . = " and $column $op '$content'" if ( $ content && $ content ne "null" ) ;
$ sel . = " and $column $op $content" if ( $ content && $ content eq "null" ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table WHERE $sel order by c_id DESC" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
sub get_content4new () {
my $ self = shift ;
my ( $ table , $ ct_name , $ barcode , $ txt11 ) = @ _ ;
my $ sel = "ct_name = '$ct_name'" ;
$ sel . = " OR barcode='$barcode'" if ( $ barcode =~ /^\d+$/ ) ;
$ sel . = " OR txt11='$txt11'" if ( $ txt11 ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table WHERE $sel order by c_id DESC" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get content row where ct_name and ct_id
sub get_content5 () {
my $ self = shift ;
my ( $ table , $ ct_name , $ c_id , $ ct_id , $ operator ) = @ _ ;
my $ sel = "1 = 1" ;
my $ op = "=" ;
$ op = "!=" if ( $ operator eq "not" ) ;
$ sel . = " and ct_name = '$ct_name'" if ( $ ct_name ) ;
$ sel . = " and c_id $op '$c_id'" if ( $ c_id ) ;
$ sel . = " and ct_id = '$ct_id'" if ( $ ct_id ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table WHERE $sel order by c_id DESC" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get content row where column content
sub get_content6 () {
my $ self = shift ;
my ( $ table , $ column1 , $ content1 , $ column2 , $ content2 , $ column3 , $ content3 , $ column4 , $ content4 , $ owner ) = @ _ ;
my $ where = "$column1 = '$content1'" ;
$ where = "$column1 is $content1" if ( $ content1 eq "null" ) ;
$ where . = " and $column2 = '$content2'" if ( $ content2 ) ;
$ where . = " and $column3 = '$content3'" if ( $ content3 ) ;
$ where . = " and $column4 <= $content4" if ( $ content4 ) ;
$ where . = " and owner = '$owner'" if ( $ owner ) ;
my $ sth ;
if ( $ table eq "timetable" ) {
$ sth = $ dbh - > prepare ( "SELECT * FROM $table WHERE $where" ) ;
} else {
$ sth = $ dbh - > prepare ( "SELECT * FROM $table WHERE $where order by c_id DESC" ) ;
}
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get last content row via c_id and operator
sub get_content7 () {
my $ self = shift ;
my ( $ table , $ column , $ content , $ column2 , $ op2 , $ content2 ) = @ _ ;
my $ where = "1 = 1" ;
$ where . = " and $column = '$content'" if ( $ content && $ content > 0 ) ;
$ where . = " and $column2 $op2 '$content2'" if ( "$content2" || "$content2" eq "0" ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table where $where order by mtime DESC" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get last content row for sorted insert
sub get_content2sort () {
my $ self = shift ;
my ( $ table , $ sort , $ sortop , $ col1 , $ val1 , $ col2 , $ val2 ) = @ _ ;
$ sortop = "=" if ( ! $ sortop ) ;
my $ where = "1 = 1" ;
$ where . = " and sort $sortop '$sort'" if ( $ sort > 0 ) ;
$ where . = " and $col1 = '$val1'" if ( $ val1 ) ;
$ where . = " and $col2 != '$val2'" if ( $ val2 ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table where $where order by sort DESC" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get last content,relation! row for sorted insert
sub get_content3sort () {
my $ self = shift ;
my ( $ table , $ main_id ) = @ _ ;
my $ where = "$table.c_id=relation.content_id" ;
$ where . = " and relation.main_id= '$main_id'" if ( $ main_id ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table,relation where $where order by $table.sort DESC" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get last content row via c_id like for sorted insert
sub get_like2sort () {
my $ self = shift ;
my ( $ table , $ column , $ content , $ column2 , $ op2 , $ content2 , $ column3 , $ op3 , $ content3 ) = @ _ ;
my $ where = "1 = 1" ;
$ where . = " and $column ilike '$content%'" if ( $ content && $ content > 0 ) ;
$ where . = " and $column2 $op2 '$content2'" if ( "$content2" || "$content2" eq "0" ) ;
$ where . = " and $column3 $op3 '$content3'" if ( "$content3" ) ;
#my $sth = $dbh->prepare("SELECT * FROM $table where $where order by $column DESC");
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table where $where order by mtime DESC" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get last barcode row
sub get_barcode () {
my $ self = shift ;
my ( $ table , $ bc4table ) = @ _ ;
my $ min_content = "0" ;
$ min_content = "1000" if ( $ table eq "contentadr" ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table where $bc4table >= '$min_content' order by $bc4table DESC" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get content row where cookie
sub get_content3 () {
my $ self = shift ;
my ( $ table , $ ct_name , $ owner , $ coo ) = @ _ ;
$ owner = 0 if ( ! $ owner ) ;
my $ sel = "1 = 1" ;
$ sel . = " and ct_name='$ct_name'" if ( $ ct_name ) ;
$ sel . = " and owner='$owner'" if ( $ owner > 0 ) ;
$ sel . = " and coo='$coo'" if ( $ coo ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table WHERE $sel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
sub get_ctnode () {
my $ self = shift ;
my ( $ table , $ tpl_id , $ nd_col , $ nd_con , $ ct_col , $ ct_op , $ ct_con , $ rel_col , $ rel_con ) = @ _ ;
$ ct_op = "=" if ( ! $ ct_op ) ;
my $ where = "nd.main_id=rel.main_id and rel.content_id=ct.c_id" ;
$ where . = " and rel.template_id='$tpl_id'" if ( $ tpl_id ) ;
$ where . = " and nd.$nd_col='$nd_con'" if ( $ nd_col && $ nd_con ) ;
$ where . = " and ct.$ct_col $ct_op '$ct_con'" if ( $ ct_col && $ ct_con ) ;
$ where . = " and rel.$rel_col = '$rel_con'" if ( $ rel_col && $ rel_con ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes nd, relation rel, $table ct WHERE $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get content row over relation where nodes n_id
sub get_ct4node () {
my $ self = shift ;
my ( $ tpl_id , $ nd_column , $ nd_content , $ ct_column , $ ct_content ) = @ _ ;
my $ where = "nd.main_id=rel.main_id and rel.content_id=ct.c_id" ;
$ where . = " and rel.template_id='$tpl_id'" if ( $ tpl_id ) ;
$ where . = " and nd.$nd_column='$nd_content'" if ( $ nd_column && $ nd_content ) ;
$ where . = " and ct.$ct_column >= '$ct_content'" if ( $ ct_column && $ ct_content ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM nodes nd, relation rel, content ct WHERE $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get content row over relation
sub get_ctrel () {
my $ self = shift ;
my ( $ table , $ main_id , $ lang , $ rel_id , $ c_id , $ tpl_id , $ sort , $ dbinit ) = @ _ ;
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ; #because of ajax
my $ sel = "rel.lang='$lang' and rel.content_id=ct.c_id" ;
$ sel . = " and rel.main_id='$main_id'" if ( $ main_id && $ main_id > 0 ) ;
$ sel . = " and rel.rel_id='$rel_id'" if ( $ rel_id && $ rel_id > 0 ) ;
$ sel . = " and rel.rel_id='0'" if ( $ rel_id && $ rel_id eq "null" ) ;
$ sel . = " and rel.content_id='$c_id'" if ( $ c_id && $ c_id > 0 ) ;
$ sel . = " and rel.template_id='$tpl_id'" if ( $ tpl_id && $ tpl_id > 0 ) ;
$ sel . = " and ct.sort='$sort'" if ( $ sort ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation rel, $table ct WHERE $sel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ ct ;
}
# get content row over relation
sub get_ctrel2 () {
my $ self = shift ;
my ( $ table , $ ct_name , $ main_id , $ lang , $ rel_id , $ c_id , $ tpl_id , $ zcolumn , $ zcontent , $ zcoperator , $ orderby , $ adesc ) = @ _ ;
my $ sel = "rel.lang='$lang' and rel.content_id=ct.c_id" ;
if ( "$zcolumn" eq "barcode" && $ zcontent =~ /^\d+$/ && $ zcontent < 9223372036854775807 ) {
$ sel . = " and (ct_name='$ct_name' OR $zcolumn='$zcontent')" ;
} elsif ( "$zcolumn" eq "start_time" ) {
if ( $ zcontent && $ varenv { dataflow } =~ /wiki/ && $ zcoperator && $ zcoperator eq "=" ) {
$ sel . = " and start_time='$zcontent'" ;
} elsif ( $ zcontent ) {
$ sel . = " and start_time>='$zcontent'" ;
}
} else {
$ sel . = " and ct_name='$ct_name'" if ( $ ct_name ) ;
}
$ sel . = " and rel.main_id='$main_id'" if ( $ main_id > 0 ) ;
$ sel . = " and rel.rel_id='$rel_id'" if ( $ rel_id > 0 ) ;
$ sel . = " and rel.content_id='$c_id'" if ( $ c_id > 0 ) ;
#$sel .= " and (ct.txt12 ilike '$pre_lager%' OR ct.txt12 like '_')" if($pre_lager);
if ( $ tpl_id =~ /\d,\d/ ) {
$ sel . = " and rel.template_id IN ($tpl_id)" ;
} elsif ( $ tpl_id > 0 ) {
$ sel . = " and rel.template_id='$tpl_id'" ;
}
#It must be available (Gutschein oder RFID)
# $sel .= " and ct.int03 > 0";
my $ order = "" ;
$ order = "order by $orderby $adesc" if ( $ orderby ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation rel, $table ct WHERE $sel $order" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# with like and tplids
sub get_ctrel3 () {
my $ self = shift ;
my ( $ table , $ column , $ content , $ column2 , $ op2 , $ content2 , $ tplids , $ sum ) = @ _ ;
my $ rval = "*" ;
$ rval = "sum(ct.int03) AS int03" if ( $ sum eq "sum_kaution" ) ;
my $ where ;
$ where . = " and $column ilike '$content%'" if ( $ content && $ content > 0 ) ;
$ where . = " and $column2 $op2 '$content2'" if ( "$content2" || "$content2" eq "0" ) ;
my $ sth = $ dbh - > prepare ( "SELECT $rval FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.template_id IN ($tplids) and rel.lang='de' $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# get content row over relation and start_time
sub get_ctrel4 () {
my $ self = shift ;
my ( $ table , $ ct_name , $ main_id , $ lang , $ rel_id , $ c_id , $ tpl_id , $ column , $ op , $ content ) = @ _ ;
$ op = "=" if ( ! $ op ) ;
my $ sel = "rel.lang='$lang' and rel.content_id=ct.c_id" ;
$ sel . = " and $column $op '$content'" if ( $ column && $ content ) ;
$ sel . = " and ct_name='$ct_name'" if ( $ ct_name ) ;
$ sel . = " and rel.main_id='$main_id'" if ( $ main_id > 0 ) ;
$ sel . = " and rel.rel_id='$rel_id'" if ( $ rel_id > 0 ) ;
$ sel . = " and rel.content_id='$c_id'" if ( $ c_id > 0 ) ;
$ sel . = " and rel.template_id='$tpl_id'" if ( $ tpl_id > 0 ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM relation rel, $table ct WHERE $sel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchrow_hashref ( ) ;
return $ ct ;
}
# search nodes
sub search_nodes () {
my $ self = shift ;
my ( $ search_pattern , $ lang ) = @ _ ;
$ search_pattern =~ s/\s/\%/g ;
my $ sth = $ dbh - > prepare ( "SELECT * from nodes nd where nd.lang='$lang' and nd.node_name ilike '%$search_pattern%'" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ search = $ sth - > fetchall_hashref ( "main_id" ) ;
$ sth - > finish ;
return $ search ;
}
#search json contentuser for automcomplete
sub get_jsoncuser () {
my $ self = shift ;
my ( $ table , $ lang , $ mandant_id , $ key , $ value ) = @ _ ;
my $ dbh = $ dbt - > dbconnect ( ) ; #because of ajax external handle request
my $ sel = "c_id = '$mandant_id'" ;
my $ sth = $ dbh - > prepare ( "SELECT ct.$key FROM $table ct WHERE $sel" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rows = $ sth - > rows ;
$ dbh - > disconnect ;
return $ sth ;
}
#search json address for automcomplete
sub search_jsonadr () {
my $ self = shift ;
my ( $ table , $ lang , $ search , $ mandant_id , $ retype ) = @ _ ;
my $ dbh = $ dbt - > dbconnect ( ) ; #because of ajax external handle request
my $ template_id = 200 ; #$table eq content
$ template_id = 202 if ( $ table eq "contentadr" ) ;
my $ mjkey ;
$ mjkey = $ 1 if ( $ retype =~ /combobox_(txt\d+)/ ) ;
my $ sth ;
if ( $ retype =~ /combobox_txt/ && $ search =~ /^\d+$/ && $ mjkey =~ /txt\d+/ ) {
my $ sel = "c_id = '$search'" ;
$ sth = $ dbh - > prepare ( "SELECT ct.c_id AS id ,ct.$mjkey AS name FROM $table ct, relation rel WHERE ct.c_id=rel.content_id and rel.template_id=$template_id and $sel" ) ;
} else {
my $ sel = "txt01 ilike '%$search%'" ;
2022-09-28 13:28:45 +02:00
$ sth = $ dbh - > prepare ( "SELECT ct.txt01 || ', ' || ct.c_id AS value, ct.txt01 AS vorname_name, ct.c_id FROM $table ct, relation rel WHERE ct.c_id=rel.content_id and rel.template_id=$template_id and $sel" ) ;
2021-12-30 12:05:56 +01:00
}
my $ rc = $ sth - > execute ( ) ;
my $ rows = $ sth - > rows ;
$ dbh - > disconnect ;
return $ sth ;
}
#search json for automcomplete
sub search_json () {
my $ self = shift ;
my ( $ table , $ lang , $ ct_name , $ mandant_id ) = @ _ ;
my $ dbh = $ dbt - > dbconnect ( ) ; #because of ajax external handle request
#my $sel = "rel.lang='$lang' and rel.content_id=ct.c_id";
my $ sel = "1=1" ;
my $ sel2 ;
if ( $ ct_name =~ /^\d+$/ && $ table eq "content" ) {
$ sel . = " and (ct_name ilike '$ct_name%' OR CAST(barcode AS text) like '$ct_name%')" ;
} else {
$ sel . = " and ct_name ilike '$ct_name%'" ;
}
2022-09-20 16:13:45 +02:00
my $ sth = "" ;
2021-12-30 12:05:56 +01:00
#If select only mandant specific warenstamm
2022-01-14 19:41:45 +01:00
if ( $ dbt - > { shareedms_conf } - > { waren } ) {
my $ main_ids = & collect_noderec ( "" , $ dbt - > { shareedms_conf } - > { waren } , $ lang , "nothing" ) ;
2021-12-30 12:05:56 +01:00
$ sth = $ dbh - > prepare ( "SELECT ct.ct_name || ' , ' || ct.barcode || ' , ' || ct.txt12 AS value, ct.ct_name AS spart_ct_name, ct.c_id FROM $table ct, relation rel WHERE ct.c_id=rel.content_id and rel.main_id IN ($main_ids) and $sel $sel2" ) ;
} else {
$ sth = $ dbh - > prepare ( "SELECT ct.ct_name || ' , ' || ct.barcode || ' , ' || ct.txt12 AS value, ct.ct_name AS spart_ct_name, ct.c_id FROM $table ct WHERE $sel $sel2" ) ;
}
my $ rc = $ sth - > execute ( ) ;
my $ rows = $ sth - > rows ;
$ dbh - > disconnect ;
return $ sth ;
}
sub search_content3 () {
my $ self = shift ;
2022-01-14 19:41:45 +01:00
my ( $ searchref , $ table , $ mandant_id , $ node_meta , $ owner , $ lang , $ main_ids , $ tplids , $ ct_ids , $ v_journal , $ time , $ kontext , $ scol , $ sort_updown , $ offset , $ limit , $ export , $ todo , $ ck4ex , $ opos ) = @ _ ;
2021-12-30 12:05:56 +01:00
$ main_ids =~ s/,$// ;
$ tplids =~ s/,$// ;
$ ct_ids =~ s/,$// ;
my $ stamp_time = strftime ( "%d.%m.%Y %H:%M" , localtime ( time ) ) ;
my $ debug ;
$ debug = 1 ;
open ( FILE , ">>$varenv{logdir}/Liste3.log" ) if ( $ debug ) ;
print FILE "*** $stamp_time Libenzdb.search_content3 ***\n" if ( $ debug ) ;
print FILE Dumper ( $ searchref ) if ( $ debug ) ;
2022-01-14 19:41:45 +01:00
print FILE "$table,$mandant_id,$node_meta->{node_name},$owner,$lang,$main_ids,$tplids,$ct_ids,$v_journal,$time,$kontext,$scol,$sort_updown,$offset,$limit,$export,$todo,$ck4ex,$opos\n" if ( $ debug ) ;
2021-12-30 12:05:56 +01:00
close ( FILE ) if ( $ debug ) ;
my $ table_pos = $ searchref - > { table_pos } || "" ;
my $ txt_where ;
my $ cptxt_where ;
my $ cpgroup_where ;
my $ valref = { } ;
my $ opref = { } ;
foreach my $ key ( keys ( %$ searchref ) ) {
if ( $ searchref - > { $ key } || $ searchref - > { $ key } eq "0" ) {
$ valref - > { $ key } = $ searchref - > { $ key } ; #because of escapeHTML manipulates special chars
$ opref - > { $ key } = "=" ;
if ( $ key =~ /table_pos/ ) {
$ table_pos = $ valref - > { $ key } ;
}
if ( $ key =~ /c_id|int\d+|barcode|time|sort|owner/ ) {
$ searchref - > { $ key } =~ s/,/./g ;
if ( $ searchref - > { $ key } =~ /(\<\=|\>\=|\<|\>|\=)/ ) {
$ opref - > { $ key } = $ 1 ;
}
if ( $ searchref - > { $ key } =~ /([-0-9\.]+)/ ) {
$ valref - > { $ key } = $ 1 ;
}
if ( $ searchref - > { $ key } =~ /null/ ) {
$ opref - > { $ key } = "is" ;
}
chomp ( $ valref - > { $ key } ) ;
}
$ valref - > { $ key } = $ q - > escapeHTML ( $ valref - > { $ key } ) ;
#print $key . ":" . $opref->{$key} . ":" . $valref->{$key} . "\n";
2022-10-11 07:00:25 +02:00
if ( $ table_pos =~ /contentpos|contentadrpos|users/ ) {
2021-12-30 12:05:56 +01:00
#my $tinfo = &table_info("","contenttranspos");
if ( $ key =~ /ct_name/ ) {
$ cptxt_where . = " and cp.$key ilike '$valref->{$key}'" ;
} elsif ( $ key =~ /txt/ ) {
$ cptxt_where . = " and cp.$key ilike '%$valref->{$key}%'" ;
} elsif ( $ key =~ /barcode|int|owner/ && ( looks_like_number ( $ valref - > { $ key } ) || $ valref - > { $ key } eq "null" ) ) {
$ cptxt_where . = " and cp.$key $opref->{$key} $valref->{$key}" ;
}
$ txt_where . = " and ct.txt11 ilike '%$valref->{$key}%'" if ( $ key eq "txt11" ) ; #Rahmennr. hack
} else {
if ( $ key eq "ct_name" && $ valref - > { $ key } =~ /^(\d+)(0\d)$/ ) { #wg. strichcode ohne "-"
$ txt_where . = " and (ct.$key ilike '$valref->{$key}' OR ct.barcode $opref->{$key} $valref->{$key})" ;
} elsif ( $ key eq "ct_name" && $ varenv { wwwhost } =~ /regiox|woge/ ) {
$ txt_where . = " and ct.$key ilike '%$valref->{$key}%'" ;
} elsif ( $ key eq "ct_name" ) {
$ txt_where . = " and ct.$key ilike '$valref->{$key}'" ;
} elsif ( $ key =~ /int01/ && $ table eq "contenttrans" && looks_like_number ( $ valref - > { $ key } ) ) {
#$cpgroup_where .= " group by cp.ct_id HAVING sum(cp.int02*cp.int03) $opref->{$key} $valref->{$key}";#special calc pos sum
#TODO, set DB int03=Menge default to 1 and testing
$ cpgroup_where . = " group by cp.ct_id HAVING sum(cp.int02) $opref->{$key} $valref->{$key}" ; #special calc pos sum
} elsif ( $ key =~ /_id|barcode|int\d+|sort|owner/ && ( looks_like_number ( $ valref - > { $ key } ) || $ valref - > { $ key } =~ /null|0/ ) ) {
$ txt_where . = " and ct.$key $opref->{$key} $valref->{$key}" ;
} elsif ( $ key =~ /txt|uri/ ) {
$ txt_where . = " and ct.$key ilike '%$valref->{$key}%'" ;
} elsif ( $ key eq "state" ) {
#order_state hack
$ txt_where . = " and (ct.state ilike '%$valref->{$key}%' OR ct.txt22 ilike '%$valref->{$key}%')" ;
} elsif ( $ key =~ /byte/ ) {
$ txt_where . = " and ct.$key = '\\x$valref->{$key}'" ;
}
}
2022-10-11 07:00:25 +02:00
if ( $ key =~ /end_itime|end_mtime|end_date_time|pay_time/ ) {
2021-12-30 12:05:56 +01:00
$ valref - > { $ key } . = " 23:59" if ( $ valref - > { $ key } !~ /\d:\d/ ) ;
}
if ( ! $ v_journal ) {
if ( $ table_pos =~ /contentpos|contentadrpos|users/ && $ key =~ /mtime/ && $ valref - > { $ key } =~ /\d+\.\d+\.\d+/ ) {
$ cptxt_where . = " and cp.mtime >= '$valref->{$key}'" if ( $ key =~ /start/ ) ;
$ cptxt_where . = " and cp.mtime < '$valref->{$key}'" if ( $ key =~ /end/ ) ;
}
elsif ( $ table_pos =~ /contentpos|contentadrpos|users/ && $ key eq "template_id_pos" && $ valref - > { $ key } ) {
$ cptxt_where . = " and cp.template_id = $valref->{$key}" ;
}
elsif ( $ key =~ /mtime/ && $ valref - > { $ key } =~ /\d+\.\d+\.\d+/ ) {
$ txt_where . = " and ct.mtime >= '$valref->{$key}'" if ( $ key =~ /start/ ) ;
$ txt_where . = " and ct.mtime < '$valref->{$key}'" if ( $ key =~ /end/ ) ;
}
elsif ( $ key =~ /bctime/ && $ valref - > { $ key } =~ /\d+\.\d+\.\d+/ ) {
$ txt_where . = " and ct.bctime >= '$valref->{$key}'" if ( $ key =~ /start/ ) ;
$ txt_where . = " and ct.bctime < '$valref->{$key}'" if ( $ key =~ /end/ ) ;
}
} elsif ( $ v_journal ) {
if ( $ key =~ /itime/ && $ valref - > { $ key } =~ /\d+\.\d+\.\d+/ ) {
$ txt_where . = " and ct.itime >= '$valref->{$key}'" if ( $ key =~ /start/ ) ;
$ txt_where . = " and ct.itime < '$valref->{$key}'" if ( $ key =~ /end/ ) ;
}
if ( $ key =~ /start_mtime/ && $ valref - > { $ key } =~ /^\d+$/ ) {
$ txt_where . = " and ct.int11 = '$valref->{$key}'" ; #int11 = c_id-abschluss key
} elsif ( $ key =~ /start_mtime/ && $ valref - > { $ key } =~ /date.*\d+\.\d+\.\d+/ ) {
$ txt_where . = " and ct.mtime >= $valref->{$key}" ;
} elsif ( $ key =~ /start_mtime/ && $ valref - > { $ key } =~ /\d+\.\d+\.\d+/ ) {
$ txt_where . = " and ct.mtime >= '$valref->{$key}'" ;
}
if ( $ key =~ /end_mtime/ && $ valref - > { $ key } =~ /\d+\.\d+\.\d+/ ) {
$ txt_where . = " and ct.mtime < '$valref->{$key}'" ;
}
2022-10-11 07:00:25 +02:00
if ( $ key =~ /start_pay_time/ && $ valref - > { $ key } =~ /\d+\.\d+\.\d+/ ) {
$ txt_where . = " and ct.pay_time >= '$valref->{$key}'" ;
2021-12-30 12:05:56 +01:00
}
2022-10-11 07:00:25 +02:00
if ( $ key =~ /end_pay_time/ && $ valref - > { $ key } =~ /\d+\.\d+\.\d+/ ) {
$ txt_where . = " and ct.pay_time < '$valref->{$key}'" ;
2021-12-30 12:05:56 +01:00
}
2022-10-11 07:00:25 +02:00
2021-12-30 12:05:56 +01:00
}
}
} #end foreach($searchref)
$ txt_where . = " and ct.int03 < ct.int08" if ( $ todo =~ /Mindermenge/ ) ;
if ( $ v_journal =~ /Tagesbericht/ ) {
$ txt_where . = " and (ct.state ~ '[a-z]') and ct.int01 is not null and ct.close_time is null" ;
$ txt_where . = " and ct.int14 is $opos" if ( $ opos eq "null" ) ;
}
#end valref ---------------------------------------------------------------------------
$ ck4ex =~ s/\s/,/g ;
$ txt_where = " and ct.c_id IN ($ck4ex)" if ( $ export =~ /check4export/ ) ;
#$txt_where = " and rel.rel_id IN ($ck4ex)" if($export =~ /check4ex_rel/);
#
#SUM contenttranspos bsp
#SELECT cp.ct_id, sum(cp.int02*cp.int03) from contenttranspos cp WHERE 1=1 and cp.end_time <= '31.10.2017 23:59' and cp.start_time >= '01.10.2017' group by cp.ct_id,cp.int02,cp.int03 HAVING sum(cp.int02*cp.int03) > 10;
#print "$v_journal|$table_pos\n";
#print "txt_where: $txt_where<br>\n";
#print "cptxt_where: $cptxt_where<br>\n";
2022-10-11 07:00:25 +02:00
my $ sth = "" ;
2021-12-30 12:05:56 +01:00
my $ updown = "ASC" ;
$ updown = "DESC" if ( $ sort_updown eq "down" ) ;
if ( $ v_journal =~ /_parts/ ) { #collects ct_ids
my $ cp_scol = "ct_name" ;
$ cp_scol = $ 1 if ( $ scol =~ /(ct_name|barcode|mtime|txt0[1-9]|int0[1-9])/ ) ;
$ sth = $ dbh - > prepare ( "SELECT cp.* FROM contenttranspos cp WHERE cp.ct_id IN (SELECT ct.c_id FROM relation rel, contenttrans ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.lang='$lang' $txt_where) $cptxt_where ORDER BY cp.$cp_scol $updown" ) ;
} elsif ( $ valref - > { long_rent } || $ valref - > { start_date_time } =~ /^\d+\.\d+\.\d+/ || $ valref - > { end_date_time } =~ /^\d+\.\d+\.\d+/ || $ cpgroup_where ) {
$ sth = $ dbh - > prepare ( "SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.lang='$lang' $txt_where and c_id IN (SELECT cp.ct_id from contenttranspos cp WHERE 1=1 $cptxt_where $cpgroup_where) ORDER BY $scol $updown LIMIT $limit OFFSET $offset" ) ;
} elsif ( $ v_journal && $ ct_ids ) { #and executes ct_ids
$ ct_ids = 0 if ( ! $ ct_ids ) ;
$ sth = $ dbh - > prepare ( "SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.content_id IN ($ct_ids) and rel.lang='$lang' $txt_where ORDER BY $scol $updown LIMIT $limit OFFSET $offset" ) ;
} elsif ( $ table_pos && $ table_pos eq "contentpos" ) {
$ sth = $ dbh - > prepare ( "SELECT cp.* FROM contentpos cp WHERE cp.cc_id IN (SELECT ct.c_id FROM relation rel, content ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.lang='$lang' $txt_where) $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset" ) ;
} elsif ( $ table_pos && $ table_pos eq "contentadrpos" ) {
if ( $ valref - > { template_id_pos } eq 602 ) { #because of user_minianswer have to be anonym
$ sth = $ dbh - > prepare ( "SELECT cp.* FROM contentadrpos cp WHERE 1=1 $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset" ) ;
} else {
$ sth = $ dbh - > prepare ( "SELECT ct.txt01,ct.txt08,cp.c_id,cp.mtime,cp.barcode,cp.int01,cp.txt02 FROM contentadr ct, contentadrpos cp WHERE ct.c_id=cp.ca_id $txt_where $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset" ) ;
}
} elsif ( $ table_pos && $ table_pos eq "users" ) {
$ sth = $ dbh - > prepare ( "SELECT cp.* FROM contentadr ct, users cp WHERE ct.c_id=cp.u_id $txt_where $cptxt_where ORDER BY cp.$scol $updown LIMIT $limit OFFSET $offset" ) ;
} else {
$ sth = $ dbh - > prepare ( "SELECT * FROM relation rel, $table ct WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids) and rel.template_id IN ($tplids) and rel.lang='$lang' $txt_where ORDER BY $scol $updown LIMIT $limit OFFSET $offset" ) ;
}
my $ rc = $ sth - > execute ( ) ;
my $ s_id = "c_id" ;
$ s_id = "u_id" if ( $ table_pos && $ table_pos eq "users" ) ; #because to view multi relation
my $ search = $ sth - > fetchall_hashref ( "$s_id" ) ;
$ sth - > finish ;
#save_query
#my $save_query = $q->escapeHTML("$txt_where");
#CSV/FiBu Export###
2022-10-11 07:00:25 +02:00
if ( $ export ) {
2021-12-30 12:05:56 +01:00
my $ ctf = & get_content1 ( "" , "contentuser" , "$mandant_id" ) ;
2022-01-14 19:41:45 +01:00
my @ tpl_order = split /,/ , $ node_meta - > { tpl_order } ;
2021-12-30 12:05:56 +01:00
#wg. Buchungsgruppen bzw. Ursprung-nodes (int12) --> Konten im FiBu Export
2022-01-14 19:41:45 +01:00
my $ colmain_ids = & collect_noderec ( "" , $ node_meta - > { main_id } , $ lang , "999999" ) ;
2021-12-30 12:05:56 +01:00
my $ nodes = & Libenzdb:: collect_node2 ( "" , "$colmain_ids" ) ;
my $ ctt ; my $ ctadr ; my $ aw_ids ;
my $ what ;
$ what = "$export-" if ( $ export =~ /CSV|FIBU/ ) ;
open ( CSV , "> $varenv{pdf}/$what$owner-$time.csv" ) or die "Can't open $varenv{pdf}/$owner-$time.csv\n" ;
#CSV Table Header
my $ col_header = "Ordner" ;
foreach ( @ tpl_order ) {
my ( $ key , $ val ) = split /=/ , $ _ ;
if ( $ key eq "txt01" ) {
$ col_header . = ";Name-01;Name-02;Name-03" ;
} else {
$ col_header . = ";$val" ;
}
}
print CSV "$col_header\n" ;
foreach my $ id ( sort {
if ( $ sort_updown eq "down" ) {
if ( $ scol =~ /barcode|int/ ) {
$ search - > { $ b } - > { $ scol } <=> $ search - > { $ a } - > { $ scol }
} else {
lc ( $ search - > { $ b } - > { $ scol } ) cmp lc ( $ search - > { $ a } - > { $ scol } )
}
} else {
if ( $ scol =~ /barcode|int/ ) {
$ search - > { $ a } - > { $ scol } <=> $ search - > { $ b } - > { $ scol }
} else {
lc ( $ search - > { $ a } - > { $ scol } ) cmp lc ( $ search - > { $ b } - > { $ scol } )
}
}
} keys ( %$ search ) ) {
my $ s_main_id = "$search->{$id}->{main_id}" ;
2022-01-14 19:41:45 +01:00
$ s_main_id = "$search->{$id}->{int12}" if ( ( $ v_journal && ( $ v_journal =~ /_parts/ ) ) || ( $ node_meta - > { node_name } eq "Faktura" ) ) ;
2021-12-30 12:05:56 +01:00
#lxfibu vars
my ( $ l_soll , $ l_umsatz , $ l_ustnr , $ l_haben , $ l_gvc , $ l_beldat , $ l_beleg , $ l_opbeleg , $ l_skonto , $ l_kostnr , $ l_text , $ l_text2 ) ;
#SOLL alias state/Zahlungsart
foreach my $ tid ( keys ( %$ ctt ) ) {
if ( $ search - > { $ id } - > { ct_id } == $ ctt - > { $ tid } - > { c_id } ) {
my ( $ date , $ time ) ;
$ ctt - > { $ tid } - > { mtime } =~ s/:\d{2}\..*$// ;
( $ date , $ time ) = split ( / / , $ ctt - > { $ tid } - > { mtime } ) ;
$ l_beldat = "$date" ;
$ l_beleg = "$ctt->{$tid}->{txt00}" . "-" . "$ctt->{$tid}->{ct_name}" ;
$ l_opbeleg = "$ctt->{$tid}->{ct_name}" if ( ( "$ctt->{$tid}->{txt00}" eq "Rechnung" ) && ( $ ctt - > { $ tid } - > { state } =~ /Abbuchung|Überweisung|PayPal/ ) ) ;
$ ctf - > { txt43 } = $ 1 if ( $ ctf - > { txt43 } =~ /(\d+)/ ) ;
$ ctf - > { txt44 } = $ 1 if ( $ ctf - > { txt44 } =~ /(\d+)/ ) ;
$ ctf - > { txt45 } = $ 1 if ( $ ctf - > { txt45 } =~ /(\d+)/ ) ;
$ ctf - > { txt46 } = $ 1 if ( $ ctf - > { txt46 } =~ /(\d+)/ ) ;
$ ctf - > { txt47 } = $ 1 if ( $ ctf - > { txt47 } =~ /(\d+)/ ) ;
$ ctf - > { txt48 } = $ 1 if ( $ ctf - > { txt48 } =~ /(\d+)/ ) ;
$ ctf - > { txt49 } = $ 1 if ( $ ctf - > { txt49 } =~ /(\d+)/ ) ;
$ ctf - > { txt50 } = $ 1 if ( $ ctf - > { txt50 } =~ /(\d+)/ ) ;
$ l_soll = $ ctf - > { txt43 } if ( $ ctt - > { $ tid } - > { state } eq "Bar" ) ;
$ l_soll = $ ctf - > { txt44 } if ( $ ctt - > { $ tid } - > { state } eq "EC-Karte" ) ;
$ l_soll = $ ctf - > { txt45 } if ( $ ctt - > { $ tid } - > { state } eq "Kreditkarte" ) ;
$ l_soll = $ ctf - > { txt46 } if ( $ ctt - > { $ tid } - > { state } eq "Abbuchung" ) ;
$ l_soll = $ ctf - > { txt47 } if ( $ ctt - > { $ tid } - > { state } eq "Überweisung" ) ;
$ l_soll = $ ctf - > { txt48 } if ( $ ctt - > { $ tid } - > { state } eq "Geldkarte" ) ;
$ l_soll = $ ctf - > { txt50 } if ( $ ctt - > { $ tid } - > { state } eq "PayPal" ) ;
$ ctf - > { txt31 } =~ s/,/|/ ;
$ l_soll = $ ctf - > { txt49 } if ( ( $ ctt - > { $ tid } - > { state } eq "Bar" ) && ( $ ctf - > { txt31 } && $ search - > { $ id } - > { int12 } =~ /$ctf->{txt31}/ ) ) ; #Bar Kaution Gegenkonto
#2018-01-28, disabled because of not used anymore
#Debitor/Kreditor
#if(("$export" eq "FiBu" && $ctt->{$tid}->{txt14} =~ /\d/) && ($ctt->{$tid}->{state} =~ /Abbuchung|Überweisung|PayPal/)){
#$ctadr = &get_content2("","contentadr","$ctt->{$tid}->{txt14}");
#$l_soll = $ctadr->{int01} if($ctadr->{int01});
#}
}
}
my $ line = "" ;
#Nodes alias Buchungsgruppen parameter
foreach my $ nid ( keys ( %$ nodes ) ) {
if ( $ s_main_id == $ nodes - > { $ nid } - > { main_id } ) {
$ line = "$nodes->{$nid}->{node_name}" ;
$ l_text = "$nodes->{$nid}->{node_name}" ;
$ ctf - > { txt13 } = $ 1 if ( $ ctf - > { txt13 } =~ /(\d+)/ ) ; #VK Umst
$ ctf - > { txt14 } = $ 1 if ( $ ctf - > { txt14 } =~ /(\d+)/ ) ; #EK Umst
$ ctf - > { txt15 } = $ 1 if ( $ ctf - > { txt15 } =~ /(\d+)/ ) ; #Aufwandskonto
$ ctf - > { txt16 } = $ 1 if ( $ ctf - > { txt16 } =~ /(\d+)/ ) ; #Erlöskonto
$ ctf - > { txt40 } = $ 1 if ( $ ctf - > { txt40 } =~ /(\d+)/ ) ; #Kostenstelle
#FIXME, Kaution und Wertmarken main_id
my $ ctf_txt40 = $ ctf - > { txt40 } ;
#$ctf_txt40 = "" if($nodes->{$nid}->{main_id} =~ /300087|400056|400054|400053|400063|300070|400048|400049|400047/);
$ l_kostnr = "$nodes->{$nid}->{int05}" ; #Kostenstelle
$ l_kostnr = "$ctf_txt40" if ( $ nodes - > { $ nid } - > { int05 } !~ /\d/ ) ;
#template definition in src/Tpl/EditMeta.pm
my $ ustnr ;
2022-01-14 19:41:45 +01:00
if ( $ node_meta - > { node_name } eq "Faktura" ) {
2021-12-30 12:05:56 +01:00
$ ustnr = $ nodes - > { $ nid } - > { int03 } ; #Verkauf = Verleih Umst
$ ustnr = $ ctf - > { txt13 } if ( $ nodes - > { $ nid } - > { int03 } !~ /\d/ ) ;
$ l_haben = $ nodes - > { $ nid } - > { int07 } ; #Verleih Erlöskonto
$ l_haben = $ ctf - > { txt16 } if ( $ nodes - > { $ nid } - > { int07 } !~ /\d/ ) ;
$ l_kostnr = $ nodes - > { $ nid } - > { int08 } ; #Verleih Kostenstelle
$ l_kostnr = "$ctf_txt40" if ( $ nodes - > { $ nid } - > { int08 } !~ /\d/ ) ;
#sollte nicht mur an 999 geknüpft sein, sondern Warengruppen ...
#$l_soll = "$nodes->{$nid}->{int02}" if($search->{$id}->{ct_name} eq "999");
}
$ l_ustnr = "0" if ( $ ustnr == "0" || ! $ ustnr ) ;
$ l_ustnr = "1" if ( $ ustnr == "19" ) ;
$ l_ustnr = "2" if ( $ ustnr == "7" ) ;
}
}
#AW Kostenstelle
$ aw_ids =~ s/\|$// ;
if ( "$search->{$id}->{ct_name}" eq "$ctf->{txt51}" ) {
$ ctf - > { txt41 } = $ 1 if ( $ ctf - > { txt41 } =~ /(\d+)/ ) ;
$ l_kostnr = "$ctf->{txt41}" ;
#AM Kostenstelle
} elsif ( $ aw_ids && $ search - > { $ id } - > { ct_id } =~ /$aw_ids/ ) {
$ ctf - > { txt42 } = $ 1 if ( $ ctf - > { txt42 } =~ /(\d+)/ ) ;
$ l_kostnr = "$ctf->{txt42}" ;
}
foreach ( @ tpl_order ) {
my ( $ key , $ val ) = split /=/ , $ _ ;
$ search - > { $ id } - > { $ key } = $ q - > unescapeHTML ( "$search->{$id}->{$key}" ) ;
$ search - > { $ id } - > { $ key } =~ s/:\d{2}\..*$// if ( $ key =~ /time/ ) ;
if ( $ search - > { $ id } - > { $ key } && $ key =~ /int/ ) {
2022-11-02 20:14:57 +01:00
my $ cash = sprintf ( '%.2f' , $ search - > { $ id } - > { $ key } ) ;
2021-12-30 12:05:56 +01:00
$ line . = ";$cash" ;
if ( "$export" eq "FiBu" ) {
my $ einzel = $ search - > { $ id } - > { int02 } ;
my $ menge = $ search - > { $ id } - > { int03 } ;
my $ rabatt_val = $ search - > { $ id } - > { int07 } ;
$ cash = $ einzel * $ menge ;
if ( $ rabatt_val != 0 ) {
my $ rabatt_eur = $ rabatt_val ;
$ rabatt_eur = $ einzel * $ menge * $ rabatt_val / 100 if ( $ search - > { $ id } - > { int08 } != 1 ) ;
$ cash = $ einzel * $ menge - $ rabatt_eur ;
}
$ l_umsatz = & Libenz:: round ( "" , "$cash" ) ;
}
} else {
if ( $ key eq "txt01" ) {
my ( $ n01 , $ n02 , $ n03 ) = split ( /\n/ , $ search - > { $ id } - > { $ key } ) ;
$ n02 =~ s/^\s// ; #jbw fix
$ line . = ";$n01;$n02;$n03" ;
} elsif ( $ key eq "date_time" ) {
$ search - > { $ id } - > { start_time } =~ s/\s.*// if ( $ search - > { $ id } - > { start_time } ) ;
$ search - > { $ id } - > { end_time } =~ s/\s.*// if ( $ search - > { $ id } - > { end_time } ) ;
$ line . = ";$search->{$id}->{start_time} - $search->{$id}->{end_time}" ;
} else {
$ line . = ";$search->{$id}->{$key}" ;
}
$ l_text2 = "$search->{$id}->{$key}" if ( "$key" eq "ct_name" ) ;
#$l_text2 = "" if("$key" eq "txt01");
}
}
if ( "$export" eq "FiBu" ) {
print CSV "$l_soll;$l_umsatz;$l_ustnr;$l_haben;$l_gvc;$l_beldat;$l_beleg;$l_opbeleg;$l_skonto;$l_kostnr;$l_text;$l_text2\n" if ( $ l_umsatz != 0 ) ;
} else {
$ line =~ s/\n//g ;
$ line =~ s/\r//g ;
print CSV "$line\n" ;
}
}
close CSV ;
& csv2xls ( "" , $ owner , $ time ) if ( $ export =~ /check4|FiBu/ ) ;
} #end CSV/FiBu Export####
#
return $ search ;
}
# CSV to Excel. Needs first CSV to write XLS.
sub csv2xls () {
my $ self = shift ;
my ( $ owner , $ time ) = @ _ ;
open ( CSVFILE , "<:encoding(utf8)" , "$varenv{pdf}/$owner-$time.csv" ) ; # or die "$varenv{pdf}/$owner-$time.csv: $!";
my $ workbook = Spreadsheet::WriteExcel - > new ( "$varenv{pdf}/$owner-$time.xls" ) ;
die "Problems creating new Excel file: $!" unless defined $ workbook ;
my $ worksheet = $ workbook - > add_worksheet ( ) ;
#$worksheet->set_column(2, 3, 25);
my $ csv = Text::CSV_XS - > new ( {
'quote_char' = > '' ,
'escape_char' = > '' ,
'sep_char' = > ';' ,
'binary' = > 1
} ) ;
my $ row = 0 ;
while ( <CSVFILE> ) {
if ( $ csv - > parse ( $ _ ) ) {
my @ Fld = $ csv - > fields ;
my $ col = 0 ;
foreach my $ token ( @ Fld ) {
$ token =~ s/[\=\'\"]//g ;
$ worksheet - > write ( $ row , $ col , $ token ) ;
$ col + + ;
}
$ row + + ;
}
else {
my $ err = $ csv - > error_input ;
print "Text::CSV_XS parse() failed on argument: " , $ err , "\n" ;
}
}
return ;
}
#with c_ids over tpl_ids. ct4tpl
sub collect_cid () {
my $ self = shift ;
2022-09-28 13:28:45 +02:00
my ( $ table , $ lang , $ tplids , $ rel_id , $ barcode , $ column2 , $ content2 ) = @ _ ;
$ tplids =~ s/,$// ;
my $ where = "where ct.c_id=rel.content_id and rel.lang='$lang' and rel.template_id IN ($tplids)" ;
2021-12-30 12:05:56 +01:00
if ( $ barcode && $ barcode =~ /^\d+$/ ) {
$ where . = " and ct.barcode='$barcode'" ;
} elsif ( $ rel_id ) {
$ where . = " and rel.rel_id='$rel_id'" ;
}
$ where . = " and ct.$column2='$content2'" if ( $ content2 ) ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM $table ct, relation rel $where" ) ;
#my $sth = $dbh->prepare("SELECT ct.barcode || '.' || ct.sort AS barcode_sort, * FROM $table ct, relation rel $where");
my $ rc = $ sth - > execute ( ) ;
my $ ct = $ sth - > fetchall_hashref ( "c_id" ) ;
$ sth - > finish ;
return $ ct ;
}
#counting
sub count_content () {
my $ self = shift ;
my ( $ table , $ main_ids , $ tplids ) = @ _ ;
$ main_ids =~ s/,$// ;
$ tplids =~ s/,$// ;
my $ where = "WHERE rel.content_id=ct.c_id and rel.main_id IN ($main_ids)" ;
$ where . = " and rel.template_id IN ($tplids)" if ( $ tplids =~ /\d/ ) ;
my $ sth = $ dbh - > prepare ( "SELECT DISTINCT(ct.c_id) FROM relation rel, $table ct $where" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ rows = $ sth - > rows ;
return $ rows ;
}
# copy content
sub copy_content () {
my $ self = shift ;
my ( $ table , $ key_id , $ x_id , $ columns , $ dbinit ) = @ _ ;
$ dbh = $ dbt - > dbconnect ( ) if ( $ dbinit ) ; #because of ajax
$ columns = "ct_name,barcode,txt01,txt02,txt03,txt04,txt05,txt06,txt07,txt08,txt09,int10,txt10,txt11,txt12,int01,int02,int03,int04,int05,int06,int07,int08" if ( ! $ columns ) ;
my $ sth = $ dbh - > prepare ( "INSERT INTO $table ($columns) SELECT $columns from $table where $key_id='$x_id' RETURNING $key_id" ) ;
my $ rows = $ sth - > execute ( ) ;
my $ last_id ;
$ sth - > bind_columns ( \ $ last_id ) ;
my $ y_id = $ sth - > fetchrow_array ( ) ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ y_id ;
}
# insert content (init)
sub insert_content () {
my $ self = shift ;
my ( $ table , $ ct_name , $ owner , $ sort ) = @ _ ;
$ owner = "0" if ( ! $ owner ) ;
$ sort = "0" if ( ! $ sort ) ;
my $ sth = $ dbh - > prepare ( "INSERT INTO $table (ct_name,owner,sort,itime) VALUES(trim('$ct_name'),'$owner','$sort','now()') RETURNING c_id" ) ;
my $ rows = $ sth - > execute ( ) ;
my $ last_id ;
$ sth - > bind_columns ( \ $ last_id ) ;
my $ c_id = $ sth - > fetchrow_array ( ) ;
return $ c_id ;
}
#c_id must be serial primary-key
sub insert_content2 () {
my $ self = shift ;
my ( $ table , $ ct_name , $ owner , $ state ) = @ _ ;
$ owner = "0" if ( ! $ owner ) ;
my $ sql = "INSERT INTO $table (ct_name,owner) VALUES(trim('$ct_name'),'$owner') RETURNING c_id" ;
$ sql = "INSERT INTO $table (ct_name,owner,state) VALUES(trim('$ct_name'),'$owner','$state') RETURNING c_id" if ( $ state ) ;
my $ sth = $ dbh - > prepare ( $ sql ) ;
my $ rows = $ sth - > execute ( ) ;
my $ last_id ;
$ sth - > bind_columns ( \ $ last_id ) ;
my $ c_id = $ sth - > fetchrow_array ( ) ;
return $ c_id ;
}
#ADD Parts
#$cc_id = c_id from content (Waren)
#$foreign_key = c_id from contenttrans (Verkauf ...), maybe (c_id4trans)
#$from_main_id = mail_id from content relation (Waren)
sub insert_contenttranspos () {
my $ self = shift ;
my ( $ table , $ ct_name , $ owner , $ barcode , $ cc_id , $ foreign_key , $ from_main_id , $ txt01 , $ node_name , $ unit , $ int02 , $ int03 , $ umst , $ int07 , $ mandant_id , $ int08 , $ packaged , $ txt06 , $ txt07 , $ email , $ ca_id ) = @ _ ;
$ owner = "0" if ( ! $ owner ) ;
$ barcode = "0" if ( ! $ barcode ) ;
$ int02 = "0" if ( ! $ int02 ) ; #VK Einzel
$ int03 = "0" if ( ! $ int03 ) ; #Menge
$ umst = "null" if ( ! $ umst ) ; #UmSt
$ int07 = "0" if ( ! $ int07 ) ; #Rabatt
$ int08 = "0" if ( ! $ int08 ) ; #Rabatteinheit
$ packaged = "" if ( ! $ packaged ) ; #packaged
$ txt06 = "" if ( ! $ txt06 ) ; #cooordinates
$ txt07 = "" if ( ! $ txt07 ) ; #voltage
$ foreign_key = "0" if ( ! $ foreign_key ) ;
$ from_main_id = "0" if ( ! $ from_main_id ) ;
$ ca_id = "0" if ( ! $ ca_id ) ;
my $ sth = $ dbh - > prepare ( "INSERT INTO $table (ct_name,owner,barcode,cc_id,ct_id,itime,txt01,txt00,txt03,int02,int03,int05,int07,int12,txt12,int08,txt05,txt06,txt07,txt08,ca_id) VALUES(trim('$ct_name'),'$owner','$barcode','$cc_id','$foreign_key','now()','$txt01','$node_name','$unit','$int02','$int03',$umst,'$int07','$from_main_id','$mandant_id','$int08','$packaged','$txt06','$txt07','$email','$ca_id') RETURNING c_id" ) ;
my $ rows = $ sth - > execute ( ) ;
my $ last_id ;
$ sth - > bind_columns ( \ $ last_id ) ;
my $ c_id = $ sth - > fetchrow_array ( ) ;
my $ set = "SET c_idpos=c_id" ;
my $ sth12 = $ dbh - > prepare ( "UPDATE $table $set WHERE c_id='$c_id'" ) ;
my $ rc12 = $ sth12 - > execute ( ) ;
return $ c_id ;
}
# update trivial
sub updater () {
my $ self = shift ;
my ( $ table , $ w_col , $ w_val , $ column , $ content , $ owner , $ w_col2 , $ w_op2 , $ w_val2 , $ set_time ) = @ _ ;
my $ ct_set = "mtime='now()'" ;
if ( $ set_time && $ set_time eq "no_time" ) {
$ ct_set = "" ;
} elsif ( $ table !~ /content/ ) {
$ ct_set = "change='now()'" ;
}
if ( "$content" eq "null" || ( ! $ content && $ content !~ /^0$/ ) ) {
$ ct_set . = ",$column=null" ;
} elsif ( ( $ column ne "c_id" ) && ( $ content || $ content == 0 ) ) {
$ ct_set . = ",$column='$content'" ;
}
if ( $ table eq "contenttranspos" ) { #to keep initial channel-ID
$ ct_set . = ",owner_end='$owner'" if ( $ owner ) ;
} else {
$ ct_set . = ",owner='$owner'" if ( $ owner ) ;
}
$ ct_set =~ s/^,/ / ;
my $ where = "$w_col='$w_val'" ;
if ( "$w_col2" && "$w_op2" && "$w_val2" ) {
if ( $ w_op2 =~ /IN/i ) {
$ where . = " and $w_col2 $w_op2 ($w_val2)" ;
} else {
$ where . = " and $w_col2 $w_op2 '$w_val2'" ;
}
}
my $ rows = 0 ;
if ( $ w_col && $ w_val ) {
my $ sth = $ dbh - > prepare ( "UPDATE $table SET $ct_set where $where" ) ;
$ rows = $ sth - > execute ( ) ;
}
return $ rows ;
}
# update trivial in short
sub updater2 () {
my $ self = shift ;
my ( $ table , $ w_col , $ w_val , $ column , $ content , $ owner , $ set_time ) = @ _ ;
my $ ct_set = "mtime='now()'" ;
if ( $ set_time && $ set_time eq "no_time" ) {
$ ct_set = "" ;
} elsif ( $ table !~ /content/ ) {
$ ct_set = "change='now()'" ;
}
if ( "$content" eq "null" || ( ! $ content && $ content !~ /^0$/ ) ) {
$ ct_set . = ",$column=null" ;
} elsif ( ( $ column ne "c_id" ) && ( $ content || $ content == 0 ) ) {
$ ct_set . = ",$column='$content'" ;
}
$ ct_set . = ",owner='$owner'" if ( $ owner ) ;
$ ct_set =~ s/^,/ / ;
my $ where = "$w_col='$w_val'" ;
my $ sth = $ dbh - > prepare ( "UPDATE $table SET $ct_set where $where" ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
# update for barcode
sub update_barcode () {
my $ self = shift ;
my ( $ table , $ c_id , $ ct_name , $ barcode , $ txt01 ) = @ _ ;
my $ ct_set = "mtime='now()'" ;
$ ct_set = "change='now()'" if ( $ table !~ /content/ ) ;
if ( "$barcode" eq "null" || ( ! $ barcode && $ barcode != 0 ) ) {
$ ct_set . = ",barcode=null" ;
} elsif ( $ barcode || $ barcode == 0 ) {
$ ct_set . = ",barcode='$barcode'" ;
}
$ ct_set . = ", txt01='$txt01'" if ( $ txt01 ) ;
my $ where = "c_id='$c_id'" ;
my $ sth = $ dbh - > prepare ( "UPDATE $table SET $ct_set where $where" ) ;
my $ rows = $ sth - > execute ( ) ;
$ sth - > finish ;
return $ rows ;
}
#for trivial ajax update
sub update_ajaxes () {
my $ self = shift ;
my ( $ table , $ w_key , $ op , $ w_val , $ column , $ value , $ owner ) = @ _ ;
my $ dbh = $ dbt - > dbconnect ( ) ; #because of ajax external handle request
$ op = "=" if ( ! $ op ) ;
my $ where = "where 1=1" ;
$ where . = " and $w_key $op '$w_val'" if ( $ w_key ) ;
$ where . = " and owner='$owner'" if ( $ owner ) ;
my $ sth = $ dbh - > prepare ( "UPDATE $table SET $column='$value' $where" ) ;
my $ rows = $ sth - > execute ( ) ;
$ dbh - > disconnect ;
return $ rows ;
}
# update content like copy
sub update_content4change () {
my $ self = shift ;
my ( $ table , $ c_id , $ ct_name , $ content , $ column , $ owner ) = @ _ ;
my $ ct_set = "mtime='now()'" ;
#my $ct_set;
$ ct_set . = ",ct_name='$ct_name'" if ( $ ct_name ) ;
if ( $ content && $ content eq "no" ) {
$ ct_set . = ",$column=''" ;
} elsif ( $ content && $ content eq "null" ) {
$ ct_set . = ",$column=$content" ;
} elsif ( $ content || ( $ content && $ content eq "0" ) ) {
$ ct_set . = ",$column='$content'" if ( $ column ne "ct_name" ) ;
}
if ( $ column eq "mtime" ) { #überschreibt obiges
if ( $ content =~ /\d/ ) { #TODO real time
$ ct_set = "mtime='$content'" ;
} else {
$ ct_set = "" ;
}
}
if ( $ table eq "contenttranspos" ) { #to keep initial channel-ID
$ ct_set . = ",owner_end='$owner'" if ( $ owner ) ;
} else {
$ ct_set . = ",owner='$owner'" if ( $ owner ) ;
}
if ( $ ct_set ) {
my $ sth = $ dbh - > prepare ( "UPDATE $table SET $ct_set where c_id='$c_id'" ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
}
# update content without mtime-change
sub update_content4change2 () {
my $ self = shift ;
my ( $ table , $ c_id , $ content , $ column , $ owner ) = @ _ ;
my $ ct_set ;
if ( "$content" eq "no" ) {
$ ct_set = "$column=''" ;
} elsif ( $ content || $ content eq "0" ) {
$ ct_set = "$column='$content'" ;
}
if ( $ table eq "contenttranspos" ) { #to keep initial channel-ID
$ ct_set . = ",owner_end='$owner'" if ( $ owner ) ;
} else {
$ ct_set . = ",owner='$owner'" if ( $ owner ) ;
}
if ( $ ct_set ) {
my $ sth = $ dbh - > prepare ( "UPDATE $table SET $ct_set where c_id='$c_id'" ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
}
sub update_kasse () {
my $ self = shift ;
my ( $ table , $ c_id , $ sum_kasse , $ sum_start ) = @ _ ;
#set kassenbestand
my $ sth = $ dbh - > prepare ( "UPDATE $table SET int01='$sum_kasse',int02='$sum_start' where c_id='$c_id'" ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
sub update_tagesabschluss () {
my $ self = shift ;
my ( $ table , $ c_idkasse , $ journal_main_id , $ tpl_journal , $ tpl_vk , $ mandant_main_id , $ main_ids , $ s_owner_id , $ opos ) = @ _ ;
my $ where ;
$ where = " and ct.owner='$s_owner_id'" if ( $ s_owner_id ) ;
$ where = " and ct.int14 is $opos" if ( $ opos eq "null" ) ;
#close transactions #int11 zusätzlich für Kassenabschluss referenz c_id
my $ sth = $ dbh - > prepare ( "UPDATE $table SET close_time='now()',int11=$c_idkasse where c_id IN (SELECT ct.c_id from $table ct, relation rel where ct.c_id=rel.content_id and (ct.state ~ '[a-z]') and ct.int01 is not null and rel.main_id IN ($main_ids) and ct.close_time is null $where)" ) ;
my $ rows = $ sth - > execute ( ) ;
#move/set to journal
$ sth = $ dbh - > prepare ( "UPDATE relation SET main_id='$journal_main_id', template_id='$tpl_journal' where template_id='$tpl_vk' and content_id IN (SELECT ct.c_id from $table ct, relation rel where ct.c_id=rel.content_id and (ct.state ~ '[a-z]') and ct.int01 is not null and rel.main_id IN ($main_ids) $where)" ) ;
#$sth = $dbh->prepare("UPDATE $table SET close_time='now()',int11='$c_idkasse' where (state ~ '[a-z]') and int01 is not null and int12 IN ($main_ids) and close_time is null $where");
$ rows = $ sth - > execute ( ) ;
return $ rows ;
}
#X collect last journal abschluss to get workflow transactions
sub collect_Xlast () {
my $ self = shift ;
my ( $ c_idkasse , $ main_id , $ tpl_id , $ mandant_main_id ) = @ _ ;
my $ sth = $ dbh - > prepare ( "SELECT ct.c_id,ct.ct_name FROM contenttrans ct, relation rel where ct.c_id=rel.content_id and rel.main_id = $main_id and rel.template_id = $tpl_id and rel.lang='de' and ct.int11 = $c_idkasse and ct.ct_name like '%-%'" ) ; # Muster: RechnungNr-XBelegNr OR QuittungNr-XWorkflowNr
my $ rc = $ sth - > execute ( ) ;
my $ ct4rel = $ sth - > fetchall_hashref ( "c_id" ) ;
$ sth - > finish ;
return $ ct4rel ;
}
sub update_Xabschluss () {
my $ self = shift ;
my ( $ table , $ c_idkasse , $ journal_main_id , $ tpl_journal , $ tpl_vk , $ mandant_main_id , $ main_ids , $ s_owner_id , $ ct_name ) = @ _ ;
my $ where ;
$ where = " and ct.owner='$s_owner_id'" if ( $ s_owner_id ) ;
my $ sth = $ dbh - > prepare ( "UPDATE $table SET close_time='now()',int11='$c_idkasse' where c_id IN (SELECT ct.c_id from $table ct, relation rel where ct.c_id=rel.content_id and (ct.ct_name = '$ct_name' OR ct.ct_name like '$ct_name-%' OR ct.ct_name like '%-$ct_name') and ct.int01 is null and rel.main_id IN ($main_ids) and ct.close_time is null $where)" ) ;
my $ rows = $ sth - > execute ( ) ;
#move/set to journal
$ sth = $ dbh - > prepare ( "UPDATE relation SET main_id='$journal_main_id', template_id='$tpl_journal' where template_id='$tpl_vk' and content_id IN (SELECT ct.c_id from $table ct, relation rel where ct.c_id=rel.content_id and (ct.ct_name = '$ct_name' OR ct.ct_name like '$ct_name-%' OR ct.ct_name like '%-$ct_name') and ct.int01 is null and rel.main_id IN ($main_ids) $where)" ) ;
$ rows = $ sth - > execute ( ) ;
return $ rows ;
}
#compute content
sub update_content4comp () {
my $ self = shift ;
my ( $ table , $ ct_name , $ c_id , $ operator , $ menge , $ kind_of_trans , $ lager ) = @ _ ;
my $ where ;
if ( $ c_id ) {
$ where = "c_id='$c_id'" ;
} elsif ( $ ct_name =~ /(\d+)/ && ( $ table eq "content" ) ) {
$ ct_name = $ 1 ;
$ where = "(ct_name='$ct_name' OR barcode='$ct_name')" ;
} elsif ( $ ct_name ) {
$ where = "where (ct_name='$ct_name')" ;
}
my $ val = "0" ;
$ val = $ menge if ( $ menge ) ;
my $ ct_set = "int03=(int03 $operator $val)" ;
my $ sth = $ dbh - > prepare ( "UPDATE $table SET $ct_set where $where" ) if ( $ c_id || $ ct_name ) ;
my $ rows = $ sth - > execute ( ) ;
return $ rows ;
}
# Delete content
sub delete_content () {
my $ self = shift ;
my ( $ table , $ c_id , $ owner , $ sort ) = @ _ ;
my $ where = "c_id='$c_id'" ;
$ where . = " and owner='$owner'" if ( $ owner ) ;
$ where . = " and sort='$sort'" if ( $ sort ) ;
my $ sth = $ dbh - > prepare ( "DELETE FROM $table WHERE $where" ) ;
my $ rc = $ sth - > execute ( ) ;
return $ rc ;
}
# Delete time
sub delete_time () {
my $ self = shift ;
my ( $ table , $ t_id ) = @ _ ;
my $ sth = $ dbh - > prepare ( "DELETE FROM $table WHERE t_id='$t_id'" ) ;
my $ rc = $ sth - > execute ( ) ;
return $ rc ;
}
#delete users
sub delete_users () {
my $ self = shift ;
my ( $ u_id , $ owner ) = @ _ ;
my $ sth = $ dbh - > prepare ( "DELETE from users where u_id = '$u_id'" ) ;
my $ rows = $ sth - > execute ( ) ;
if ( $ owner ) {
$ sth = $ dbh - > prepare ( "DELETE from contentuser where owner = '$owner'" ) ;
$ rows = $ sth - > execute ( ) ;
}
#$sth = $dbh->prepare("DELETE from contentpers where owner = '$owner'");
#$rows = $sth->execute();
return $ rows ;
}
# logout alias cook_out
sub cook_out () {
my $ self = shift ;
my $ coo = shift ;
my $ sth = $ dbh - > prepare ( "UPDATE users SET cookie='', change='now()' where cookie='$coo'" ) ;
my $ rc = $ sth - > execute ( ) ;
return $ rc ;
}
#just after checked if users.u_id=contentadr.c_id
sub select_users () {
my $ self = shift ;
my $ u_id = shift || 0 ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM users WHERE u_id=$u_id" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ auth = $ sth - > fetchrow_hashref ( ) ;
return $ auth ;
}
sub get_owner () {
my $ self = shift ;
my ( $ owner , $ dbinit ) = @ _ ;
$ dbh = & dbconnect ( ) if ( $ dbinit ) ; #because of ajax
my $ sth = $ dbh - > prepare ( "SELECT * FROM users WHERE owner='$owner'" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ ner = $ sth - > fetchrow_hashref ( ) ;
$ dbh - > disconnect if ( $ dbinit ) ;
return $ ner ;
}
# collect all users
sub collect_users () {
my $ self = shift ;
my $ sth = $ dbh - > prepare ( "SELECT * FROM users" ) ;
my $ rc = $ sth - > execute ( ) ;
my $ users = $ sth - > fetchall_hashref ( "owner" ) ;
$ sth - > finish ;
return $ users ;
}
1 ;