Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 9d679693

Von Moritz Bunkus vor mehr als 17 Jahren hinzugefügt

  • ID 9d679693eeb06baf737355f5c07ea7abf33e7dbb
  • Vorgänger e07e9534
  • Nachfolger 0ec7b690

Verhinderung von SQL injection durch Verwendung von parametrisierten Abfragen. Entfernen der Verwaltungsfunktionen für "SIC".

Unterschiede anzeigen:

SL/AM.pm
183 183
  if ($form->{id} && $form->{orphaned}) {
184 184
    $query = qq|UPDATE chart SET
185 185
                accno = ?, description = ?, charttype = ?,
186
		gifi_accno = ?, category = ?, link = ?,
186
                gifi_accno = ?, category = ?, link = ?,
187 187
                taxkey_id = ?,
188 188
                pos_ustva = ?, pos_bwa   = ?, pos_bilanz = ?,
189 189
                pos_eur = ?, new_chart_id = ?, valid_from = ?
190
		WHERE id = ?|;
190
                WHERE id = ?|;
191 191
    @values = ($form->{accno}, $form->{description}, $form->{charttype},
192
	       $form->{gifi_accno}, $form->{category}, $form->{link},
193
	       conv_i($taxkey),
194
	       conv_i($form->{pos_ustva}), conv_i($form->{pos_bwa}),
195
	       conv_i($form->{pos_bilanz}), conv_i($form->{pos_eur}),
196
	       conv_i($form->{new_chart_id}),
197
	       conv_date($form->{valid_from}),
198
	       $form->{id});
192
               $form->{gifi_accno}, $form->{category}, $form->{link},
193
               conv_i($taxkey),
194
               conv_i($form->{pos_ustva}), conv_i($form->{pos_bwa}),
195
               conv_i($form->{pos_bilanz}), conv_i($form->{pos_eur}),
196
               conv_i($form->{new_chart_id}),
197
               conv_date($form->{valid_from}),
198
               $form->{id});
199 199

  
200 200
  } elsif ($form->{id} && !$form->{new_chart_valid}) {
201 201
    $query = qq|UPDATE chart SET new_chart_id = ?, valid_from = ?
202
		WHERE id = ?|;
202
                WHERE id = ?|;
203 203
    @values = (conv_i($form->{new_chart_id}), conv_date($form->{valid_from}),
204
	       $form->{id});
204
               $form->{id});
205 205
  } else {
206 206
    $query = qq|INSERT INTO chart
207 207
                (accno, description, charttype,
......
211 211
                 new_chart_id, valid_from)
212 212
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)|;
213 213
    @values = ($form->{accno}, $form->{description}, $form->{charttype},
214
	       $form->{gifi_accno}, $form->{category}, $form->{link},
215
	       conv_i($taxkey),
216
	       conv_i($form->{pos_ustva}), conv_i($form->{pos_bwa}),
217
	       conv_i($form->{pos_bilanz}), conv_i($form->{pos_eur}),
218
	       conv_i($form->{new_chart_id}),
219
	       conv_date($form->{valid_from}));
214
               $form->{gifi_accno}, $form->{category}, $form->{link},
215
               conv_i($taxkey),
216
               conv_i($form->{pos_ustva}), conv_i($form->{pos_bwa}),
217
               conv_i($form->{pos_bilanz}), conv_i($form->{pos_eur}),
218
               conv_i($form->{new_chart_id}),
219
               conv_date($form->{valid_from}));
220 220

  
221 221
  }
222 222
  do_query($form, $dbh, $query, @values);
......
228 228
      qq|(chart_id, tax_id, taxkey_id, pos_ustva, startdate) | .
229 229
      qq|VALUES ((SELECT id FROM chart WHERE accno = ?), ?, ?, ?, ?)|;
230 230
    do_query($form, $dbh, $query,
231
	     $form->{accno}, conv_i($tax_id), conv_i($taxkey),
232
	     conv_i($form->{pos_ustva}), conv_date($startdate));
231
             $form->{accno}, conv_i($tax_id), conv_i($taxkey),
232
             conv_i($form->{pos_ustva}), conv_date($startdate));
233 233

  
234 234
  } else {
235 235
    $query = qq|DELETE FROM taxkeys WHERE chart_id = ? AND tax_id = ?|;
......
240 240
      qq|(chart_id, tax_id, taxkey_id, pos_ustva, startdate) | .
241 241
      qq|VALUES (?, ?, ?, ?, ?)|;
242 242
    do_query($form, $dbh, $query,
243
	     $form->{id}, conv_i($tax_id), conv_i($taxkey),
244
	     conv_i($form->{pos_ustva}), conv_date($startdate));
243
             $form->{id}, conv_i($tax_id), conv_i($taxkey),
244
             conv_i($form->{pos_ustva}), conv_date($startdate));
245 245
  }
246 246

  
247 247
  # commit
......
310 310

  
311 311
  my $query = qq|SELECT d.id, d.description, d.role
312 312
                 FROM department d
313
		 ORDER BY 2|;
313
                 ORDER BY 2|;
314 314

  
315 315
  $sth = $dbh->prepare($query);
316 316
  $sth->execute || $form->dberror($query);
317 317

  
318
  $form->{ALL} = [];
318 319
  while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
319 320
    push @{ $form->{ALL} }, $ref;
320 321
  }
......
335 336

  
336 337
  my $query = qq|SELECT d.description, d.role
337 338
                 FROM department d
338
	         WHERE d.id = $form->{id}|;
339
                 WHERE d.id = ?|;
339 340
  my $sth = $dbh->prepare($query);
340
  $sth->execute || $form->dberror($query);
341
  $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
341 342

  
342 343
  my $ref = $sth->fetchrow_hashref(NAME_lc);
343 344

  
......
347 348

  
348 349
  # see if it is in use
349 350
  $query = qq|SELECT count(*) FROM dpt_trans d
350
              WHERE d.department_id = $form->{id}|;
351
  $sth = $dbh->prepare($query);
352
  $sth->execute || $form->dberror($query);
351
              WHERE d.department_id = ?|;
352
  ($form->{orphaned}) = selectrow_query($form, $dbh, $query, $form->{id});
353 353

  
354
  ($form->{orphaned}) = $sth->fetchrow_array;
355 354
  $form->{orphaned} = !$form->{orphaned};
356 355
  $sth->finish;
357 356

  
......
368 367
  # connect to database
369 368
  my $dbh = $form->dbconnect($myconfig);
370 369

  
371
  $form->{description} =~ s/\'/\'\'/g;
372

  
370
  my @values = ($form->{description}, $form->{role});
373 371
  if ($form->{id}) {
374 372
    $query = qq|UPDATE department SET
375
		description = '$form->{description}',
376
		role = '$form->{role}'
377
		WHERE id = $form->{id}|;
373
                description = ?, role = ?
374
                WHERE id = ?|;
375
    push(@values, $form->{id});
378 376
  } else {
379 377
    $query = qq|INSERT INTO department
380 378
                (description, role)
381
                VALUES ('$form->{description}', '$form->{role}')|;
379
                VALUES (?, ?)|;
382 380
  }
383
  $dbh->do($query) || $form->dberror($query);
381
  do_query($form, $dbh, $query, @values);
384 382

  
385 383
  $dbh->disconnect;
386 384

  
......
396 394
  my $dbh = $form->dbconnect($myconfig);
397 395

  
398 396
  $query = qq|DELETE FROM department
399
	      WHERE id = $form->{id}|;
400
  $dbh->do($query) || $form->dberror($query);
397
              WHERE id = ?|;
398
  do_query($form, $dbh, $query, $form->{id});
401 399

  
402 400
  $dbh->disconnect;
403 401

  
......
414 412

  
415 413
  my $query = qq|SELECT id, lead
416 414
                 FROM leads
417
		 ORDER BY 2|;
415
                 ORDER BY 2|;
418 416

  
419 417
  $sth = $dbh->prepare($query);
420 418
  $sth->execute || $form->dberror($query);
421 419

  
420
  $form->{ALL};
422 421
  while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
423 422
    push @{ $form->{ALL} }, $ref;
424 423
  }
......
438 437
  my $dbh = $form->dbconnect($myconfig);
439 438

  
440 439
  my $query =
441
    qq|SELECT l.id, l.lead
442
                 FROM leads l
443
	         WHERE l.id = $form->{id}|;
440
    qq|SELECT l.id, l.lead | .
441
    qq|FROM leads l | .
442
    qq|WHERE l.id = ?|;
444 443
  my $sth = $dbh->prepare($query);
445
  $sth->execute || $form->dberror($query);
444
  $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
446 445

  
447 446
  my $ref = $sth->fetchrow_hashref(NAME_lc);
448 447

  
......
463 462
  # connect to database
464 463
  my $dbh = $form->dbconnect($myconfig);
465 464

  
466
  $form->{lead} =~ s/\'/\'\'/g;
467

  
465
  my @values = ($form->{description});
468 466
  # id is the old record
469 467
  if ($form->{id}) {
470 468
    $query = qq|UPDATE leads SET
471
		lead = '$form->{description}'
472
		WHERE id = $form->{id}|;
469
                lead = ?
470
                WHERE id = ?|;
471
    puhs(@values, $form->{id});
473 472
  } else {
474 473
    $query = qq|INSERT INTO leads
475 474
                (lead)
476
                VALUES ('$form->{description}')|;
475
                VALUES (?)|;
477 476
  }
478
  $dbh->do($query) || $form->dberror($query);
477
  do_query($form, $dbh, $query, @values);
479 478

  
480 479
  $dbh->disconnect;
481 480

  
......
491 490
  my $dbh = $form->dbconnect($myconfig);
492 491

  
493 492
  $query = qq|DELETE FROM leads
494
	      WHERE id = $form->{id}|;
495
  $dbh->do($query) || $form->dberror($query);
493
              WHERE id = ?|;
494
  do_query($form, $dbh, $query, $form->{id});
496 495

  
497 496
  $dbh->disconnect;
498 497

  
......
509 508

  
510 509
  my $query = qq|SELECT id, description, discount, customernumberinit, salesman
511 510
                 FROM business
512
		 ORDER BY 2|;
511
                 ORDER BY 2|;
513 512

  
514 513
  $sth = $dbh->prepare($query);
515 514
  $sth->execute || $form->dberror($query);
516 515

  
516
  $form->{ALL};
517 517
  while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
518 518
    push @{ $form->{ALL} }, $ref;
519 519
  }
......
534 534

  
535 535
  my $query =
536 536
    qq|SELECT b.description, b.discount, b.customernumberinit, b.salesman
537
                 FROM business b
538
	         WHERE b.id = $form->{id}|;
537
       FROM business b
538
       WHERE b.id = ?|;
539 539
  my $sth = $dbh->prepare($query);
540
  $sth->execute || $form->dberror($query);
540
  $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
541 541

  
542 542
  my $ref = $sth->fetchrow_hashref(NAME_lc);
543 543

  
......
558 558
  # connect to database
559 559
  my $dbh = $form->dbconnect($myconfig);
560 560

  
561
  $form->{description} =~ s/\'/\'\'/g;
562
  $form->{discount} /= 100;
563
  $form->{salesman} *= 1;
564

  
561
  my @values = ($form->{description}, $form->{discount},
562
                $form->{customernumberinit}, $form->{salesman} ? 't' : 'f');
565 563
  # id is the old record
566 564
  if ($form->{id}) {
567 565
    $query = qq|UPDATE business SET
568
		description = '$form->{description}',
569
		discount = $form->{discount},
570
                customernumberinit = '$form->{customernumberinit}',
571
                salesman = '$form->{salesman}'
572
		WHERE id = $form->{id}|;
566
                description = ?,
567
                discount = ?,
568
                customernumberinit = ?,
569
                salesman = ?
570
                WHERE id = ?|;
571
    push(@values, $form->{id});
573 572
  } else {
574 573
    $query = qq|INSERT INTO business
575 574
                (description, discount, customernumberinit, salesman)
576
                VALUES ('$form->{description}', $form->{discount}, '$form->{customernumberinit}', '$form->{salesman}')|;
575
                VALUES (?, ?, ?, ?)|;
577 576
  }
578
  $dbh->do($query) || $form->dberror($query);
577
  do_query($form, $dbh, $query, @values);
579 578

  
580 579
  $dbh->disconnect;
581 580

  
......
591 590
  my $dbh = $form->dbconnect($myconfig);
592 591

  
593 592
  $query = qq|DELETE FROM business
594
	      WHERE id = $form->{id}|;
595
  $dbh->do($query) || $form->dberror($query);
593
              WHERE id = ?|;
594
  do_query($form, $dbh, $query, $form->{id});
596 595

  
597 596
  $dbh->disconnect;
598 597

  
......
672 671
    "SELECT template_code, " .
673 672
    "  output_numberformat, output_dateformat, output_longdates " .
674 673
    "FROM language WHERE id = ?";
675
  my @res = $dbh->selectrow_array($query, undef, $id);
674
  my @res = selectrow_query($form, $dbh, $query, $id);
676 675
  $dbh->disconnect;
677 676

  
678 677
  $main::lxdebug->leave_sub();
......
709 708
      "  output_numberformat, output_dateformat, output_longdates" .
710 709
      ") VALUES (?, ?, ?, ?, ?, ?)";
711 710
  }
712
  $dbh->do($query, undef, @values) ||
713
    $form->dberror($query . " (" . join(", ", @values) . ")");
711
  do_query($form, $dbh, $query, @values);
714 712

  
715 713
  $dbh->disconnect;
716 714

  
......
827 825
      qq|SELECT count(id) = 0 AS orphaned
828 826
         FROM parts
829 827
         WHERE buchungsgruppen_id = ?|;
830
    ($form->{orphaned}) = $dbh->selectrow_array($query, undef, $form->{id});
828
    ($form->{orphaned}) = selectrow_arra($query, undef, $form->{id});
831 829
    $form->dberror($query . " ($form->{id})") if ($dbh->err);
832 830
  }
833 831

  
......
982 980

  
983 981
  my $query = qq|SELECT id, printer_description, template_code, printer_command
984 982
                 FROM printers
985
		 ORDER BY 2|;
983
                 ORDER BY 2|;
986 984

  
987 985
  $sth = $dbh->prepare($query);
988 986
  $sth->execute || $form->dberror($query);
......
1008 1006

  
1009 1007
  my $query =
1010 1008
    qq|SELECT p.printer_description, p.template_code, p.printer_command
1011
                 FROM printers p
1012
	         WHERE p.id = $form->{id}|;
1009
       FROM printers p
1010
       WHERE p.id = ?|;
1013 1011
  my $sth = $dbh->prepare($query);
1014
  $sth->execute || $form->dberror($query);
1012
  $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
1015 1013

  
1016 1014
  my $ref = $sth->fetchrow_hashref(NAME_lc);
1017 1015

  
......
1032 1030
  # connect to database
1033 1031
  my $dbh = $form->dbconnect($myconfig);
1034 1032

  
1035
  $form->{printer_description} =~ s/\'/\'\'/g;
1036
  $form->{printer_command} =~ s/\'/\'\'/g;
1037
  $form->{template_code} =~ s/\'/\'\'/g;
1038

  
1033
  my @values = ($form->{printer_description},
1034
                $form->{template_code},
1035
                $form->{printer_command});
1039 1036

  
1040 1037
  # id is the old record
1041 1038
  if ($form->{id}) {
1042 1039
    $query = qq|UPDATE printers SET
1043
		printer_description = '$form->{printer_description}',
1044
		template_code = '$form->{template_code}',
1045
		printer_command = '$form->{printer_command}'
1046
		WHERE id = $form->{id}|;
1040
                printer_description = ?, template_code = ?, printer_command = ?
1041
                WHERE id = ?|;
1042
    push(@values, $form->{id});
1047 1043
  } else {
1048 1044
    $query = qq|INSERT INTO printers
1049 1045
                (printer_description, template_code, printer_command)
1050
                VALUES ('$form->{printer_description}', '$form->{template_code}', '$form->{printer_command}')|;
1046
                VALUES (?, ?, ?)|;
1051 1047
  }
1052
  $dbh->do($query) || $form->dberror($query);
1048
  do_query($form, $dbh, $query, @values);
1053 1049

  
1054 1050
  $dbh->disconnect;
1055 1051

  
......
1065 1061
  my $dbh = $form->dbconnect($myconfig);
1066 1062

  
1067 1063
  $query = qq|DELETE FROM printers
1068
	      WHERE id = $form->{id}|;
1069
  $dbh->do($query) || $form->dberror($query);
1064
              WHERE id = ?|;
1065
  do_query($form, $dbh, $query, $form->{id});
1070 1066

  
1071 1067
  $dbh->disconnect;
1072 1068

  
......
1120 1116
    qq|WHERE t.payment_terms_id = ? | .
1121 1117
    qq|UNION | .
1122 1118
    qq|SELECT l.id AS language_id, NULL AS description_long, | .
1123
    qq|l.description AS language | .
1119
    qq|  l.description AS language | .
1124 1120
    qq|FROM language l|;
1125 1121
  $sth = $dbh->prepare($query);
1126 1122
  $sth->execute($form->{"id"}) || $form->dberror($query . " ($form->{id})");
......
1228 1224
  $main::lxdebug->leave_sub();
1229 1225
}
1230 1226

  
1231
sub sic {
1232
  $main::lxdebug->enter_sub();
1233

  
1234
  my ($self, $myconfig, $form) = @_;
1235

  
1236
  # connect to database
1237
  my $dbh = $form->dbconnect($myconfig);
1238

  
1239
  my $query = qq|SELECT code, sictype, description
1240
                 FROM sic
1241
		 ORDER BY code|;
1242

  
1243
  $sth = $dbh->prepare($query);
1244
  $sth->execute || $form->dberror($query);
1245

  
1246
  while (my $ref = $sth->fetchrow_hashref(NAME_lc)) {
1247
    push @{ $form->{ALL} }, $ref;
1248
  }
1249

  
1250
  $sth->finish;
1251
  $dbh->disconnect;
1252

  
1253
  $main::lxdebug->leave_sub();
1254
}
1255

  
1256
sub get_sic {
1257
  $main::lxdebug->enter_sub();
1258

  
1259
  my ($self, $myconfig, $form) = @_;
1260

  
1261
  # connect to database
1262
  my $dbh = $form->dbconnect($myconfig);
1263

  
1264
  my $query = qq|SELECT s.code, s.sictype, s.description
1265
                 FROM sic s
1266
	         WHERE s.code = '$form->{code}'|;
1267
  my $sth = $dbh->prepare($query);
1268
  $sth->execute || $form->dberror($query);
1269

  
1270
  my $ref = $sth->fetchrow_hashref(NAME_lc);
1271

  
1272
  map { $form->{$_} = $ref->{$_} } keys %$ref;
1273

  
1274
  $sth->finish;
1275

  
1276
  $dbh->disconnect;
1277

  
1278
  $main::lxdebug->leave_sub();
1279
}
1280

  
1281
sub save_sic {
1282
  $main::lxdebug->enter_sub();
1283

  
1284
  my ($self, $myconfig, $form) = @_;
1285

  
1286
  # connect to database
1287
  my $dbh = $form->dbconnect($myconfig);
1288

  
1289
  $form->{code}        =~ s/\'/\'\'/g;
1290
  $form->{description} =~ s/\'/\'\'/g;
1291

  
1292
  # if there is an id
1293
  if ($form->{id}) {
1294
    $query = qq|UPDATE sic SET
1295
                code = '$form->{code}',
1296
		sictype = '$form->{sictype}',
1297
		description = '$form->{description}'
1298
		WHERE code = '$form->{id}'|;
1299
  } else {
1300
    $query = qq|INSERT INTO sic
1301
                (code, sictype, description)
1302
                VALUES ('$form->{code}', '$form->{sictype}', '$form->{description}')|;
1303
  }
1304
  $dbh->do($query) || $form->dberror($query);
1305

  
1306
  $dbh->disconnect;
1307

  
1308
  $main::lxdebug->leave_sub();
1309
}
1310

  
1311
sub delete_sic {
1312
  $main::lxdebug->enter_sub();
1313

  
1314
  my ($self, $myconfig, $form) = @_;
1315

  
1316
  # connect to database
1317
  my $dbh = $form->dbconnect($myconfig);
1318

  
1319
  $query = qq|DELETE FROM sic
1320
	      WHERE code = '$form->{code}'|;
1321
  $dbh->do($query) || $form->dberror($query);
1322

  
1323
  $dbh->disconnect;
1324

  
1325
  $main::lxdebug->leave_sub();
1326
}
1327

  
1328 1227
sub load_template {
1329 1228
  $main::lxdebug->enter_sub();
1330 1229

  
......
1376 1275
  # these defaults are database wide
1377 1276
  # user specific variables are in myconfig
1378 1277
  # save defaults
1379
  my $query = qq|UPDATE defaults SET
1380
                 inventory_accno_id =
1381
		     (SELECT c.id FROM chart c
1382
		                WHERE c.accno = '$form->{inventory_accno}'),
1383
                 income_accno_id =
1384
		     (SELECT c.id FROM chart c
1385
		                WHERE c.accno = '$form->{income_accno}'),
1386
	         expense_accno_id =
1387
		     (SELECT c.id FROM chart c
1388
		                WHERE c.accno = '$form->{expense_accno}'),
1389
	         fxgain_accno_id =
1390
		     (SELECT c.id FROM chart c
1391
		                WHERE c.accno = '$form->{fxgain_accno}'),
1392
	         fxloss_accno_id =
1393
		     (SELECT c.id FROM chart c
1394
		                WHERE c.accno = '$form->{fxloss_accno}'),
1395
	         invnumber = '$form->{invnumber}',
1396
                 cnnumber  = '$form->{cnnumber}',
1397
	         sonumber = '$form->{sonumber}',
1398
	         ponumber = '$form->{ponumber}',
1399
		 sqnumber = '$form->{sqnumber}',
1400
		 rfqnumber = '$form->{rfqnumber}',
1401
                 customernumber = '$form->{customernumber}',
1402
		 vendornumber = '$form->{vendornumber}',
1403
                 articlenumber = '$form->{articlenumber}',
1404
                 servicenumber = '$form->{servicenumber}',
1405
                 yearend = '$form->{yearend}',
1406
		 curr = '$form->{curr}',
1407
		 businessnumber = '$form->{businessnumber}'
1408
		|;
1409
  $dbh->do($query) || $form->dberror($query);
1278
  my $query =
1279
    qq|UPDATE defaults SET | .
1280
    qq|inventory_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
1281
    qq|income_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
1282
    qq|expense_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
1283
    qq|fxgain_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
1284
    qq|fxloss_accno_id = (SELECT c.id FROM chart c WHERE c.accno = ?), | .
1285
    qq|invnumber = ?, | .
1286
    qq|cnnumber  = ?, | .
1287
    qq|sonumber = ?, | .
1288
    qq|ponumber = ?, | .
1289
    qq|sqnumber = ?, | .
1290
    qq|rfqnumber = ?, | .
1291
    qq|customernumber = ?, | .
1292
    qq|vendornumber = ?, | .
1293
    qq|articlenumber = ?, | .
1294
    qq|servicenumber = ?, | .
1295
    qq|yearend = ?, | .
1296
    qq|curr = ?, | .
1297
    qq|businessnumber = ?|;
1298
  my @values = ($form->{inventory_accno}, $form->{income_accno},
1299
                $form->{expense_accno},
1300
                $form->{fxgain_accno}, $form->{fxloss_accno},
1301
                $form->{invnumber}, $form->{cnnumber},
1302
                $form->{sonumber}, $form->{ponumber},
1303
                $form->{sqnumber}, $form->{rfqnumber},
1304
                $form->{customernumber}, $form->{vendornumber},
1305
                $form->{articlenumber}, $form->{servicenumber},
1306
                $form->{yearend}, $form->{curr},
1307
                $form->{businessnumber});
1308
  do_query($form, $dbh, $query, @values);
1410 1309

  
1411 1310
  # update name
1412
  my $name = $form->{name};
1413
  $name =~ s/\'/\'\'/g;
1414 1311
  $query = qq|UPDATE employee
1415
              SET name = '$name'
1416
	      WHERE login = '$form->{login}'|;
1417
  $dbh->do($query) || $form->dberror($query);
1418

  
1419
#   foreach my $item (split(/ /, $form->{taxaccounts})) {
1420
#     $query = qq|UPDATE tax
1421
# 		SET rate = | . ($form->{$item} / 100) . qq|,
1422
# 		taxnumber = '$form->{"taxnumber_$item"}'
1423
# 		WHERE chart_id = $item|;
1424
#     $dbh->do($query) || $form->dberror($query);
1425
#   }
1312
              SET name = ?
1313
              WHERE login = ?|;
1314
  do_query($form, $dbh, $query, $form->{name}, $form->{login});
1426 1315

  
1427 1316
  my $rc = $dbh->commit;
1428 1317
  $dbh->disconnect;
......
1528 1417

  
1529 1418
  $query = qq|SELECT c.id, c.accno, c.description
1530 1419
              FROM chart c
1531
	      WHERE c.category = 'I'
1532
	      AND c.charttype = 'A'
1420
              WHERE c.category = 'I'
1421
              AND c.charttype = 'A'
1533 1422
              ORDER BY c.accno|;
1534 1423
  $sth = $dbh->prepare($query);
1535 1424
  $sth->execute || $self->dberror($query);
......
1544 1433

  
1545 1434
  $query = qq|SELECT c.id, c.accno, c.description
1546 1435
              FROM chart c
1547
	      WHERE c.category = 'E'
1548
	      AND c.charttype = 'A'
1436
              WHERE c.category = 'E'
1437
              AND c.charttype = 'A'
1549 1438
              ORDER BY c.accno|;
1550 1439
  $sth = $dbh->prepare($query);
1551 1440
  $sth->execute || $self->dberror($query);
......
1562 1451
  $query = qq|SELECT c.id, c.accno, c.description,
1563 1452
              t.rate * 100 AS rate, t.taxnumber
1564 1453
              FROM chart c, tax t
1565
	      WHERE c.id = t.chart_id|;
1454
              WHERE c.id = t.chart_id|;
1566 1455

  
1567 1456
  $sth = $dbh->prepare($query);
1568 1457
  $sth->execute || $form->dberror($query);
......
1581 1470
  $main::lxdebug->leave_sub();
1582 1471
}
1583 1472

  
1584
sub backup {
1585
  $main::lxdebug->enter_sub();
1586

  
1587
  my ($self, $myconfig, $form, $userspath) = @_;
1588

  
1589
  my $mail;
1590
  my $err;
1591
  my $boundary = time;
1592
  my $tmpfile  =
1593
    "$userspath/$boundary.$myconfig->{dbname}-$form->{dbversion}.sql";
1594
  my $out = $form->{OUT};
1595
  $form->{OUT} = ">$tmpfile";
1596

  
1597
  if ($form->{media} eq 'email') {
1598

  
1599
    use SL::Mailer;
1600
    $mail = new Mailer;
1601

  
1602
    $mail->{to}      = qq|"$myconfig->{name}" <$myconfig->{email}>|;
1603
    $mail->{from}    = qq|"$myconfig->{name}" <$myconfig->{email}>|;
1604
    $mail->{subject} =
1605
      "Lx-Office Backup / $myconfig->{dbname}-$form->{dbversion}.sql";
1606
    @{ $mail->{attachments} } = ($tmpfile);
1607
    $mail->{version} = $form->{version};
1608
    $mail->{fileid}  = "$boundary.";
1609

  
1610
    $myconfig->{signature} =~ s/\\n/\r\n/g;
1611
    $mail->{message} = "--\n$myconfig->{signature}";
1612

  
1613
  }
1614

  
1615
  open(OUT, "$form->{OUT}") or $form->error("$form->{OUT} : $!");
1616

  
1617
  # get sequences, functions and triggers
1618
  open(FH, "sql/lx-office.sql") or $form->error("sql/lx-office.sql : $!");
1619

  
1620
  my @sequences = ();
1621
  my @functions = ();
1622
  my @triggers  = ();
1623
  my @indices   = ();
1624
  my %tablespecs;
1625

  
1626
  my $query = "";
1627
  my @quote_chars;
1628

  
1629
  while (<FH>) {
1630

  
1631
    # Remove DOS and Unix style line endings.
1632
    s/[\r\n]//g;
1633

  
1634
    # ignore comments or empty lines
1635
    next if /^(--.*|\s+)$/;
1636

  
1637
    for (my $i = 0; $i < length($_); $i++) {
1638
      my $char = substr($_, $i, 1);
1639

  
1640
      # Are we inside a string?
1641
      if (@quote_chars) {
1642
        if ($char eq $quote_chars[-1]) {
1643
          pop(@quote_chars);
1644
        }
1645
        $query .= $char;
1646

  
1647
      } else {
1648
        if (($char eq "'") || ($char eq "\"")) {
1649
          push(@quote_chars, $char);
1650

  
1651
        } elsif ($char eq ";") {
1652

  
1653
          # Query is complete. Check for triggers and functions.
1654
          if ($query =~ /^create\s+function\s+\"?(\w+)\"?/i) {
1655
            push(@functions, $query);
1656

  
1657
          } elsif ($query =~ /^create\s+trigger\s+\"?(\w+)\"?/i) {
1658
            push(@triggers, $query);
1659

  
1660
          } elsif ($query =~ /^create\s+sequence\s+\"?(\w+)\"?/i) {
1661
            push(@sequences, $1);
1662

  
1663
          } elsif ($query =~ /^create\s+table\s+\"?(\w+)\"?/i) {
1664
            $tablespecs{$1} = $query;
1665

  
1666
          } elsif ($query =~ /^create\s+index\s+\"?(\w+)\"?/i) {
1667
            push(@indices, $query);
1668

  
1669
          }
1670

  
1671
          $query = "";
1672
          $char  = "";
1673
        }
1674

  
1675
        $query .= $char;
1676
      }
1677
    }
1678
  }
1679
  close(FH);
1680

  
1681
  # connect to database
1682
  my $dbh = $form->dbconnect($myconfig);
1683

  
1684
  # get all the tables
1685
  my @tables = $dbh->tables('', '', 'customer', '', { noprefix => 0 });
1686

  
1687
  my $today = scalar localtime;
1688

  
1689
  $myconfig->{dbhost} = 'localhost' unless $myconfig->{dbhost};
1690

  
1691
  print OUT qq|-- Lx-Office Backup
1692
-- Dataset: $myconfig->{dbname}
1693
-- Version: $form->{dbversion}
1694
-- Host: $myconfig->{dbhost}
1695
-- Login: $form->{login}
1696
-- User: $myconfig->{name}
1697
-- Date: $today
1698
--
1699
-- set options
1700
$myconfig->{dboptions};
1701
--
1702
|;
1703

  
1704
  print OUT "-- DROP Sequences\n";
1705
  my $item;
1706
  foreach $item (@sequences) {
1707
    print OUT qq|DROP SEQUENCE $item;\n|;
1708
  }
1709

  
1710
  print OUT "-- DROP Triggers\n";
1711

  
1712
  foreach $item (@triggers) {
1713
    if ($item =~ /^create\s+trigger\s+\"?(\w+)\"?\s+.*on\s+\"?(\w+)\"?\s+/i) {
1714
      print OUT qq|DROP TRIGGER "$1" ON "$2";\n|;
1715
    }
1716
  }
1717

  
1718
  print OUT "-- DROP Functions\n";
1719

  
1720
  foreach $item (@functions) {
1721
    if ($item =~ /^create\s+function\s+\"?(\w+)\"?/i) {
1722
      print OUT qq|DROP FUNCTION "$1" ();\n|;
1723
    }
1724
  }
1725

  
1726
  foreach $table (@tables) {
1727
    if (!($table =~ /^sql_.*/)) {
1728
      my $query = qq|SELECT * FROM $table|;
1729

  
1730
      my $sth = $dbh->prepare($query);
1731
      $sth->execute || $form->dberror($query);
1732

  
1733
      $query = "INSERT INTO $table (";
1734
      map { $query .= qq|$sth->{NAME}->[$_],| }
1735
        (0 .. $sth->{NUM_OF_FIELDS} - 1);
1736
      chop $query;
1737

  
1738
      $query .= ") VALUES";
1739

  
1740
      if ($tablespecs{$table}) {
1741
        print(OUT "--\n");
1742
        print(OUT "DROP TABLE $table;\n");
1743
        print(OUT $tablespecs{$table}, ";\n");
1744
      } else {
1745
        print(OUT "--\n");
1746
        print(OUT "DELETE FROM $table;\n");
1747
      }
1748
      while (my @arr = $sth->fetchrow_array) {
1749

  
1750
        $fields = "(";
1751
        foreach my $item (@arr) {
1752
          if (defined $item) {
1753
            $item =~ s/\'/\'\'/g;
1754
            $fields .= qq|'$item',|;
1755
          } else {
1756
            $fields .= 'NULL,';
1757
          }
1758
        }
1759

  
1760
        chop $fields;
1761
        $fields .= ")";
1762

  
1763
        print OUT qq|$query $fields;\n|;
1764
      }
1765

  
1766
      $sth->finish;
1767
    }
1768
  }
1769

  
1770
  # create indices, sequences, functions and triggers
1771

  
1772
  print(OUT "-- CREATE Indices\n");
1773
  map({ print(OUT "$_;\n"); } @indices);
1774

  
1775
  print OUT "-- CREATE Sequences\n";
1776
  foreach $item (@sequences) {
1777
    $query = qq|SELECT last_value FROM $item|;
1778
    $sth   = $dbh->prepare($query);
1779
    $sth->execute || $form->dberror($query);
1780
    my ($id) = $sth->fetchrow_array;
1781
    $sth->finish;
1782

  
1783
    print OUT qq|--
1784
CREATE SEQUENCE $item START $id;
1785
|;
1786
  }
1787

  
1788
  print OUT "-- CREATE Functions\n";
1789

  
1790
  # functions
1791
  map { print(OUT $_, ";\n"); } @functions;
1792

  
1793
  print OUT "-- CREATE Triggers\n";
1794

  
1795
  # triggers
1796
  map { print(OUT $_, ";\n"); } @triggers;
1797

  
1798
  close(OUT);
1799

  
1800
  $dbh->disconnect;
1801

  
1802
  # compress backup
1803
  my @args = ("gzip", "$tmpfile");
1804
  system(@args) == 0 or $form->error("$args[0] : $?");
1805

  
1806
  $tmpfile .= ".gz";
1807

  
1808
  if ($form->{media} eq 'email') {
1809
    @{ $mail->{attachments} } = ($tmpfile);
1810
    $err = $mail->send($out);
1811
  }
1812

  
1813
  if ($form->{media} eq 'file') {
1814

  
1815
    open(IN,  "$tmpfile") or $form->error("$tmpfile : $!");
1816
    open(OUT, ">-")       or $form->error("STDOUT : $!");
1817

  
1818
    print OUT qq|Content-Type: application/x-tar-gzip;
1819
Content-Disposition: attachment; filename="$myconfig->{dbname}-$form->{dbversion}.sql.gz"
1820

  
1821
|;
1822

  
1823
    while (<IN>) {
1824
      print OUT $_;
1825
    }
1826

  
1827
    close(IN);
1828
    close(OUT);
1829

  
1830
  }
1831

  
1832
  unlink "$tmpfile";
1833

  
1834
  $main::lxdebug->leave_sub();
1835
}
1836

  
1837 1473
sub closedto {
1838 1474
  $main::lxdebug->enter_sub();
1839 1475

  
......
1861 1497

  
1862 1498
  my $dbh = $form->dbconnect($myconfig);
1863 1499

  
1500
  my ($query, @values);
1501

  
1864 1502
  if ($form->{revtrans}) {
1503
    $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '1'|;
1865 1504

  
1866
    $query = qq|UPDATE defaults SET closedto = NULL,
1867
				    revtrans = '1'|;
1868 1505
  } elsif ($form->{closedto}) {
1506
    $query = qq|UPDATE defaults SET closedto = ?, revtrans = '0'|;
1507
    @values = (conv_date($form->{closedto}));
1869 1508

  
1870
    $query = qq|UPDATE defaults SET closedto = '$form->{closedto}',
1871
				      revtrans = '0'|;
1872 1509
  } else {
1873

  
1874
    $query = qq|UPDATE defaults SET closedto = NULL,
1875
				      revtrans = '0'|;
1510
    $query = qq|UPDATE defaults SET closedto = NULL, revtrans = '0'|;
1876 1511
  }
1877 1512

  
1878 1513
  # set close in defaults
1879
  $dbh->do($query) || $form->dberror($query);
1514
  do_query($form, $dbh, $query, @values);
1880 1515

  
1881 1516
  $dbh->disconnect;
1882 1517

  
......
1987 1622

  
1988 1623
  my $dbh = $form->dbconnect($myconfig);
1989 1624

  
1625
  map({ $_->{"in_use"} = 0; } values(%{$units}));
1626

  
1990 1627
  foreach my $unit (values(%{$units})) {
1991 1628
    my $base_unit = $unit->{"original_base_unit"};
1992 1629
    while ($base_unit) {
1630
      $units->{$base_unit}->{"in_use"} = 1;
1993 1631
      $units->{$base_unit}->{"DEPENDING_UNITS"} = [] unless ($units->{$base_unit}->{"DEPENDING_UNITS"});
1994 1632
      push(@{$units->{$base_unit}->{"DEPENDING_UNITS"}}, $unit->{"name"});
1995 1633
      $base_unit = $units->{$base_unit}->{"original_base_unit"};
......
1997 1635
  }
1998 1636

  
1999 1637
  foreach my $unit (values(%{$units})) {
2000
    $unit->{"in_use"} = 0;
2001 1638
    map({ $_ = $dbh->quote($_); } @{$unit->{"DEPENDING_UNITS"}});
2002 1639

  
2003 1640
    foreach my $table (qw(parts invoice orderitems)) {
......
2006 1643
      if (0 == scalar(@{$unit->{"DEPENDING_UNITS"}})) {
2007 1644
        $query .= "= " . $dbh->quote($unit->{"name"});
2008 1645
      } else {
2009
        $query .= "IN (" . $dbh->quote($unit->{"name"}) . "," . join(",", @{$unit->{"DEPENDING_UNITS"}}) . ")";
1646
        $query .= "IN (" . $dbh->quote($unit->{"name"}) . "," .
1647
          join(",", map({ $dbh->quote($_) } @{$unit->{"DEPENDING_UNITS"}})) . ")";
2010 1648
      }
2011 1649

  
2012 1650
      my ($count) = $dbh->selectrow_array($query);

Auch abrufbar als: Unified diff