From 941f8a04aaa2a5bbefbf58f93e3d8d8364c316ea Mon Sep 17 00:00:00 2001 From: ragu Date: Thu, 17 Nov 2022 20:36:53 +0100 Subject: [PATCH] operator standalone fix and adding example db.sql --- .gitignore | 2 - copri4/main/robots.txt | 2 - copri4/main/src/Mod/APIshareeio.pm | 0 copri4/main/src/Mod/DBtank.pm | 23 +++++--- copri4/main/src/Mod/Payment.pm | 2 +- copri4/main/src/Tpl/Address3.pm | 4 +- copri4/main/src/Tpl/Liste3.pm | 14 ++++- copri4/main/startup.pl | 2 - copri4/mkaccess.sh | 51 ------------------ copri4/shareeapp-operator/src/Tpl/Anmelden.pm | 8 +-- copri4/shareeapp-operator/src/Tpl/Contact.pm | 3 -- copri4/shareeapp-operator/src/Tpl/FormEdit.pm | 11 ++-- copri4/shareeapp-operator/src/Tpl/Karte.pm | 1 - copri4/shareeapp-operator/src/Tpl/Listing.pm | 1 - .../src/Tpl/PayoneSelect.pm | 14 ++--- copri4/shareeconf/examples/global.cfg | 2 + .../examples/sharee_operator.sql.gz | Bin 0 -> 16358 bytes 17 files changed, 44 insertions(+), 96 deletions(-) delete mode 100755 copri4/main/robots.txt mode change 100644 => 100755 copri4/main/src/Mod/APIshareeio.pm delete mode 100755 copri4/main/startup.pl delete mode 120000 copri4/shareeapp-operator/src/Tpl/Karte.pm create mode 100644 copri4/shareeconf/examples/sharee_operator.sql.gz diff --git a/.gitignore b/.gitignore index 1e17e55..99c4468 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,7 @@ cache/ data/ pdf/ cache/ -*.kml *.html -*.sql.gz xml/ csv/ ftp/ diff --git a/copri4/main/robots.txt b/copri4/main/robots.txt deleted file mode 100755 index 1f53798..0000000 --- a/copri4/main/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / diff --git a/copri4/main/src/Mod/APIshareeio.pm b/copri4/main/src/Mod/APIshareeio.pm old mode 100644 new mode 100755 diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 2330cfc..e138d88 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -123,11 +123,10 @@ sub update_operatorsloop { c_id => "$adrc_id", }; my $dbh_primary = $self->dbconnect_extern($self->{primary}->{sharee_primary}->{database}->{dbname}); - my $source_primary = $dbh_primary->get_info( $GetInfoType{SQL_DATABASE_NAME} ); my $record_primary = { c_id => 0 }; $record_primary = $self->fetch_record($dbh_primary,$authref) if($adrc_id && $adrc_id > 0); - $bw->log("update_operatorsloop by copri_instance-dbname: $dbname | owner: $record_primary->{owner} | get_info-dbname: $source_primary","",""); + $bw->log("update_operatorsloop by copri_instance-dbname: $dbname | owner: $record_primary->{owner}","",""); my $rows = 0; if($record_primary->{c_id}){ @@ -165,7 +164,7 @@ sub update_operatorsloop { %$record_primary, table => "contentadr", }; - $bw->log("--> save_account update_operatorsloop $sharee_operator by $source_primary",$update->{c_id},""); + $bw->log("--> save_account update_operatorsloop $sharee_operator",$update->{c_id},""); $bw->log("UPDATE adr from record_primary to operator on loop $sharee_operator",$record_primary->{c_id},""); $rows = $self->update_record($dbh_operator,$update,$record_primary); @@ -385,12 +384,24 @@ sub collect_node { return ($nodes,$rows); } -# +#only used by dead_relation sub collect_relation { my $self = shift; my $dbh = shift || $dbh_intern; - my $main_id = shift || ""; - my $sth = $dbh->prepare("SELECT * FROM relation"); + my $where = shift || "1=1"; + + my $sth = $dbh->prepare("SELECT * FROM relation where $where"); + my $rc = $sth->execute(); + my $rel = $sth->fetchall_hashref("rel_id"); + return $rel; +} + +#not used +sub collect_relct { + my $self = shift; + my $dbh = shift || $dbh_intern; + my $ref = shift; + my $sth = $dbh->prepare("SELECT * FROM relation rel, $ref->{table} c where rel.content_id > 0 and rel.template_id=224 and rel.content_id=c.c_id order by rel.content_id"); my $rc = $sth->execute(); my $rel = $sth->fetchall_hashref("rel_id"); return $rel; diff --git a/copri4/main/src/Mod/Payment.pm b/copri4/main/src/Mod/Payment.pm index e958061..9bf3b2c 100755 --- a/copri4/main/src/Mod/Payment.pm +++ b/copri4/main/src/Mod/Payment.pm @@ -56,7 +56,7 @@ sub managemandate_main { my $ctt = shift || ""; my $owner = shift || 0; my $payoneret = ""; - my $payone_conf = $dbt->{operator}->{$varenv->{dbname}}->{payone_conf} || $dbt->{payone_conf}; + my $payone_conf = $dbt->{operator}->{$varenv->{dbname}}->{payone_conf} || {}; if($ctadr->{c_id}){ my $lastname = $ctadr->{txt01}; diff --git a/copri4/main/src/Tpl/Address3.pm b/copri4/main/src/Tpl/Address3.pm index 5bfe311..31ab90e 100755 --- a/copri4/main/src/Tpl/Address3.pm +++ b/copri4/main/src/Tpl/Address3.pm @@ -377,10 +377,10 @@ EOF } $ctt->{txt23} = $q->unescapeHTML("$ctt->{txt23}") if($ctt->{txt23}); print $q->Tr(),"\n"; - print $q->td({-class=>'tdval5',-colspan=>'2'},$q->textarea(-class=>'etxt',-name=>'txt23', -default=>"$ctt->{txt23}", -rows=>8, -columns=>90)),"\n"; + print $q->td({-class=>'tdval5',-colspan=>'2'},$q->textarea(-class=>'etxt',-name=>'txt23', -default=>"$ctt->{txt23}", -rows=>8, -columns=>65)),"\n"; $ctt->{txt12} = $q->unescapeHTML($ctt->{txt12}) || ""; - print $q->td({-class=>'tdval5',-colspan=>'2'},$q->textarea(-class=>'etxt',-name=>'txt12', -default=>"$ctt->{txt12}", -rows=>8, -columns=>70)),"\n"; + print $q->td({-class=>'tdval5',-colspan=>'2'},$q->textarea(-class=>'etxt',-name=>'txt12', -default=>"$ctt->{txt12}", -rows=>8, -columns=>65)),"\n"; print $q->Tr(),"\n"; $line_count1++; my @line_txt12 = split(/\n/,$ctt->{txt12}); diff --git a/copri4/main/src/Tpl/Liste3.pm b/copri4/main/src/Tpl/Liste3.pm index 37d1ff5..13be538 100755 --- a/copri4/main/src/Tpl/Liste3.pm +++ b/copri4/main/src/Tpl/Liste3.pm @@ -239,6 +239,18 @@ sub tpl(){ @tpl_order = split /,/,$tpl->{tpl_order}; } + elsif($node_meta->{node_name} =~ /Mahnung/){ + $R::detail_search="search"; + $searchref->{txt19} = "%Mahnung"; + $R::todo="Filter"; + $message .= ""; + $offset=0; + $limit=1000; + $tplids = "209,218"; + my $tpl = $dbt->get_tpl($dbh,209); + @tpl_order = split /,/,$tpl->{tpl_order}; + } + elsif(!$R::detail_search && -f $hashfile && $node_meta->{node_name} =~ /letzte Suche/){ $R::todo="Filter"; $message .= ">>> es wurden die letzten Suchparameter oder Filter geladen <<<"; @@ -545,7 +557,7 @@ sub tpl(){ foreach(@tpl_order){ $h++; my ($key,$val,$size) = split /=/,$_; - if($size ne "select"){ + if($size !~ /select/){ if($size =~ /area/){ $size = "5em"; }elsif($key =~ /int0|c_id|ct_name/){ diff --git a/copri4/main/startup.pl b/copri4/main/startup.pl deleted file mode 100755 index 1a6f9c9..0000000 --- a/copri4/main/startup.pl +++ /dev/null @@ -1,2 +0,0 @@ -use lib qw(/var/www/copri4/main/src); -1; diff --git a/copri4/mkaccess.sh b/copri4/mkaccess.sh index e7fc6ef..12d2a91 100755 --- a/copri4/mkaccess.sh +++ b/copri4/mkaccess.sh @@ -33,54 +33,3 @@ for i in $(find . -type d -and -name cronjobs); do chmod -R o+r $i/*;done for i in $(find . -type d -and -name cronjobs); do chown -R root:root $i/*;done - -live_sharee="ginger" -echo "You are on Server with hostname: $(hostname)"; -echo "on main gitlab sourcen there is no live config"; - -#sharee -echo "KEEP in mind, SHAREE autoLinking is only done if $(hostname) == ${live_sharee}"; - -if [[ $(hostname) == ${live_sharee} ]] -then - - #shareedms-operator - echo ""; - for i in $(find . -type l -and -name shareedms-operator.conf); do rm $i;done - for i in $(find . -type f -and -name shareedms-operator_live.conf) - do ( - echo $(dirname $(realpath $i)); - cd $(dirname $(realpath $i)); - ln -s $(basename $i) shareedms-operator.conf; - ls -al - ) - done - - #shareeapp-operator - echo ""; - for i in $(find . -type l -and -name shareeapp-operator.conf); do rm $i;done - for i in $(find . -type f -and -name shareeapp-operator_live.conf) - do ( - echo $(dirname $(realpath $i)); - cd $(dirname $(realpath $i)); - ln -s $(basename $i) shareeapp-operator.conf; - ls -al - ) - done - - - #shareeweb-project - echo ""; - for i in $(find . -type l -and -name shareeweb-project.conf); do rm $i;done - for i in $(find . -type f -and -name shareeweb-project_live.conf) - do ( - echo $(dirname $(realpath $i)); - cd $(dirname $(realpath $i)); - ln -s $(basename $i) shareeweb-project.conf; - ls -al - ) - done - -fi - - diff --git a/copri4/shareeapp-operator/src/Tpl/Anmelden.pm b/copri4/shareeapp-operator/src/Tpl/Anmelden.pm index 88a2d0e..98ac3a6 100755 --- a/copri4/shareeapp-operator/src/Tpl/Anmelden.pm +++ b/copri4/shareeapp-operator/src/Tpl/Anmelden.pm @@ -9,7 +9,6 @@ use CGI ':standard'; use Lib::Config; use Mod::Buttons; use Mod::Libenz; -use Mod::Libenzdb; use Mod::DBtank; use Mod::APIfunc; use Mod::Pricing; @@ -33,12 +32,11 @@ sub tpl(){ my $q = new CGI; my $cf = new Config; my $lb = new Libenz; - my $db = new Libenzdb; my $dbt = new DBtank; my $apif = new APIfunc; my $but = new Buttons; my $pri = new Pricing; - + my $dbh = ""; my $script = $q->script_name(); my $user_agent = $q->user_agent(); @@ -51,14 +49,12 @@ sub tpl(){ $path = "$script" . "$path_info"; $script=""; } - my %ib = $but->ibuttons_arch(); - my $tpl = $db->get_tpl($node_meta->{tpl_id}); + my $tpl = $dbt->get_tpl($dbh,$node_meta->{tpl_id}); my @tpl_order = split /,/,$tpl->{tpl_order}; my $coo = $q->cookie(-name=>'domcookie') || ""; my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/); my $bgcolor1 = "009899";#sharee - #my $bgcolor1 = "e2001a"; $bgcolor1 = $dbt->{website}->{$varenv->{syshost}}->{bgcolor1} if($dbt->{website}->{$varenv->{syshost}}->{bgcolor1}); $bgcolor1 = $dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1} if($dbt->{merchant_ids}->{$varenv->{merchant_id}}->{bgcolor1}); diff --git a/copri4/shareeapp-operator/src/Tpl/Contact.pm b/copri4/shareeapp-operator/src/Tpl/Contact.pm index e08e288..087e628 100755 --- a/copri4/shareeapp-operator/src/Tpl/Contact.pm +++ b/copri4/shareeapp-operator/src/Tpl/Contact.pm @@ -9,7 +9,6 @@ use CGI ':standard'; use Lib::Config; use Mod::Buttons; use Mod::Libenz; -use Mod::Libenzdb; use Mod::DBtank; use Encode; use Data::Dumper; @@ -34,7 +33,6 @@ sub tpl(){ my $cf = new Config; my $but = new Buttons; my $lb = new Libenz; - my $db = new Libenzdb; my $dbt = new DBtank; my $lang = "de"; @@ -47,7 +45,6 @@ sub tpl(){ $script=""; } my $user_agent = $q->user_agent(); - my %ib = $but->ibuttons_arch(); my @tpl_order = split /,/,$node_meta->{tpl_order}; my $main_ids = $node_meta->{main_id}; my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/); diff --git a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm index 904d4cd..f252956 100755 --- a/copri4/shareeapp-operator/src/Tpl/FormEdit.pm +++ b/copri4/shareeapp-operator/src/Tpl/FormEdit.pm @@ -13,7 +13,6 @@ use DateTime::Format::Pg; use Lib::Config; use Mod::Buttons; use Mod::Libenz; -use Mod::Libenzdb; use Mod::DBtank; use Mod::APIfunc; use Mod::Pricing; @@ -39,7 +38,6 @@ sub tpl(){ my $q = new CGI; my $cf = new Config; my $lb = new Libenz; - my $db = new Libenzdb; my $dbt = new DBtank; my $apif = new APIfunc; my $pri = new Pricing; @@ -55,7 +53,6 @@ sub tpl(){ } my $dbh = "";#$dbt->dbconnect(); my $user_agent = $q->user_agent(); - my %ib = $but->ibuttons_arch(); my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/); my $red = "red"; @@ -109,8 +106,6 @@ Weitere Personen aus Ihrem Haushalt profitieren jedoch ebenfalls, falls Sie weit $cttpos_count++; } - #$ctt = $db->collect_content2("contenttrans","int10",$ctrel->{c_id}) if($ctrel->{c_id}); - # #loop operator hash to get invoices for each operator my $ctt_all = {}; my $ctadrcoupon = {}; @@ -147,15 +142,15 @@ Weitere Personen aus Ihrem Haushalt profitieren jedoch ebenfalls, falls Sie weit my $tpl_id = $node_meta->{tpl_id}; #$tpl_id = "302004" if($viewsel[1] =~ /Mieten/ && $ctrel->{c_id}); - my $tpl = $db->get_tpl($tpl_id); + my $tpl = $dbt->get_tpl($dbh,$tpl_id); my $tpl01 = $tpl;#If nothing else, because of tpl_name Title in split_lates my $tpl02 = ""; my @split_lates = ("$tpl->{tpl_order}"); my $template01 = "$tpl_id" . "001"; my $template02 = "$tpl_id" . "002"; if($tpl_id < 999){ - $tpl01 = $db->get_tpl($template01); - $tpl02 = $db->get_tpl($template02); + $tpl01 = $dbt->get_tpl($dbh,$template01); + $tpl02 = $dbt->get_tpl($dbh,$template02); @split_lates = ("$tpl01->{tpl_order}","$tpl02->{tpl_order}"); } my $now_dt = strftime "%Y-%m-%d %H:%M", localtime; diff --git a/copri4/shareeapp-operator/src/Tpl/Karte.pm b/copri4/shareeapp-operator/src/Tpl/Karte.pm deleted file mode 120000 index 7c3f8ea..0000000 --- a/copri4/shareeapp-operator/src/Tpl/Karte.pm +++ /dev/null @@ -1 +0,0 @@ -../../../main/src/Tpl/Karte.pm \ No newline at end of file diff --git a/copri4/shareeapp-operator/src/Tpl/Listing.pm b/copri4/shareeapp-operator/src/Tpl/Listing.pm index 471bfd8..fab00d0 100755 --- a/copri4/shareeapp-operator/src/Tpl/Listing.pm +++ b/copri4/shareeapp-operator/src/Tpl/Listing.pm @@ -47,7 +47,6 @@ sub tpl(){ $script=""; } my $user_agent = $q->user_agent(); - my %ib = $but->ibuttons_arch(); my @tpl_order = split /,/,$node_meta->{tpl_order}; my $main_ids = $node_meta->{main_id}; my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/); diff --git a/copri4/shareeapp-operator/src/Tpl/PayoneSelect.pm b/copri4/shareeapp-operator/src/Tpl/PayoneSelect.pm index f187b21..1877f57 100755 --- a/copri4/shareeapp-operator/src/Tpl/PayoneSelect.pm +++ b/copri4/shareeapp-operator/src/Tpl/PayoneSelect.pm @@ -8,9 +8,7 @@ use warnings; use POSIX; use CGI ':standard'; use Lib::Config; -use Mod::Buttons; -use Mod::Libenz; -use Mod::Libenzdb; +use Mod::DBtank; use Tpl::AccountSubmenu; use Tpl::PayoneSEPA; use Tpl::PayoneCCclient; @@ -34,16 +32,14 @@ sub tpl(){ my $q = new CGI; my $cf = new Config; - my $lb = new Libenz; - my $db = new Libenzdb; - my $but = new Buttons; + my $dbt = new DBtank; my $submenu = new AccountSubmenu; my $paySEPA = new PayoneSEPA; my $payCC = new PayoneCCclient; $q->import_names('R'); my @keywords = $q->param; - + my $dbh = ""; my $script = $q->script_name(); my $path_info = $q->path_info(); my $path = $path_info; @@ -54,12 +50,10 @@ sub tpl(){ } my $time = time; my $now_dt = strftime "%Y-%m-%d %H:%M", localtime; - - my %ib = $but->ibuttons_arch(); my @viewsel = split /\//,$1 if($path =~ /^\/(.*)/); my $ctrel = $users_sharee if(ref($users_sharee) eq "HASH" && $users_sharee->{c_id}); - my $tpl = $db->get_tpl($node_meta->{tpl_id}); + my $tpl = $dbt->get_tpl($dbh,$node_meta->{tpl_id}); print "
\n"; diff --git a/copri4/shareeconf/examples/global.cfg b/copri4/shareeconf/examples/global.cfg index 18f6515..29413cf 100644 --- a/copri4/shareeconf/examples/global.cfg +++ b/copri4/shareeconf/examples/global.cfg @@ -244,6 +244,7 @@ waren = "200013" kunden = "200011" faktura = "200007" + invoice = "300008" invoicejournal = "300011" mietjournal = "200012" alarmjournal = "200022" @@ -252,6 +253,7 @@ payment_state = "SEPA-Lastschrift (payone)|Kreditkarte (payone)|Überweisung|Gutschrift" order_state = "|angerufen|eMail gesendet|in Arbeit|cronjob fail" + warning_state = "|1. Mahnung|2. Mahnung|3. Mahnung|4. Mahnung|5. Mahnung" term_active_color = "f7ae37" local_style = "css/local_style20221106.css" diff --git a/copri4/shareeconf/examples/sharee_operator.sql.gz b/copri4/shareeconf/examples/sharee_operator.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..b24abb5111ee6bdf1ec9c0ae72148fa1425c77db GIT binary patch literal 16358 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%0AuEtG&M>fiI5#rRg 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 h)UpEt86tMA8T1T$e}