update pre-requisites
[bse.git] / site / util / bsexlsprod.pl
1 #!perl -w
2 use strict;
3 use Getopt::Long;
4 use FindBin;
5 use lib "$FindBin::Bin/../cgi-bin/modules";
6 use BSE::Cfg;
7 use BSE::API qw(bse_init bse_cfg bse_make_product bse_encoding);
8 use BSE::Importer;
9 use Carp qw(confess);
10
11 bse_init("../cgi-bin");
12
13 my $verbose;
14 my $delete;
15 my @file_path;
16 GetOptions("v", \$verbose,
17            "d", \$delete,
18            "path|p=s", \@file_path);
19 $verbose = defined $verbose;
20
21 my $cfg = bse_cfg();
22
23 my $profile = shift;
24 my $filename = shift
25   or die "Usage: $0 profile filename\n";
26
27 my $callback;
28 $verbose
29   and $callback = sub { print "@_\n" };
30
31 my $importer = BSE::Importer->new
32   (
33    cfg => $cfg,
34    profile => $profile,
35    file_path => \@file_path,
36    callback => $callback,
37   );
38
39 $importer->process($filename);
40
41 if ($delete) {
42   my @products = $importer->leaves;
43   my @catalogs = $importer->parents;
44   for my $product (@products) {
45     print "Removing product $product->{id}: $product->{title}\n";
46     $product->remove($cfg);
47   }
48   require BSE::Permissions;
49   my $perms = BSE::Permissions->new($cfg);
50   for my $catalog (reverse @catalogs) {
51     my $msg;
52     if ($perms->check_edit_delete_article({}, $catalog, '', \$msg)) {
53       print "Removing catalog $catalog->{id}: $catalog->{title}\n";
54       $catalog->remove($cfg);
55     }
56     else {
57       print "Cannot remove $catalog->{id}: $msg\n";
58     }
59   }
60 }
61
62 my @errors = $importer->errors;
63 unless ($verbose) { # unless we already reported them
64   print STDERR $_, "\n" for @errors;
65 }
66 @errors
67   and exit 1;
68
69 exit;