]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/extras/org_tree_html_options.pl
Executable scripts
[working/Evergreen.git] / Open-ILS / src / extras / org_tree_html_options.pl
1 #!/usr/bin/perl
2 # for each supported locale, turn the orgTree and orgTypes into a static HTML option list
3
4 use OpenSRF::AppSession;
5 use OpenSRF::System;
6 use OpenILS::Utils::Fieldmapper;
7 use OpenSRF::Utils::SettingsClient;
8 use OpenILS::Application::AppUtils;
9 use Unicode::Normalize;
10 use Data::Dumper;
11 use File::Spec;
12
13 die "usage: perl org_tree_html_options.pl <bootstrap_config> <output_path> <output_file>" unless $ARGV[2];
14 OpenSRF::System->bootstrap_client(config_file => $ARGV[0]);
15
16 my $path = $ARGV[1];
17 my $filename = $ARGV[2];
18
19 my @types;
20
21 Fieldmapper->import(IDL => OpenSRF::Utils::SettingsClient->new->config_value("IDL"));
22
23 #Get our list of locales
24 my $session = OpenSRF::AppSession->create("open-ils.cstore");
25 my $locales = $session->request("open-ils.cstore.direct.config.i18n_locale.search.atomic", {"code" => {"!=" => undef}}, {"order_by" => {"i18n_l" => "name"}})->gather();
26 $session->disconnect();
27
28 foreach my $locale (@$locales) {
29         my $ses = OpenSRF::AppSession->create("open-ils.actor");
30         $ses->session_locale($locale->code);
31         my $tree = $ses->request("open-ils.actor.org_tree.retrieve")->gather(1);
32
33         my $aout = $ses->request("open-ils.actor.org_types.retrieve")->gather(1);
34         foreach my $type (@$aout) {
35                 $types[int($type->id)] = $type;
36         }
37         my $dir = File::Spec->catdir($path, $locale->code);
38         if (!-d $dir) {
39                 mkdir($dir) or die "Could not create output directory: $dir $!\n";
40         }
41
42         my @org_tree_html;
43         print_option($tree, \@org_tree_html);
44         $ses->disconnect();
45         open(FILE, '>', File::Spec->catfile($dir, $filename)) or die $!;
46         print FILE @org_tree_html;
47         close FILE;
48 }
49
50 sub print_option {
51         my $node = shift;
52         my $org_tree_html = shift;
53
54         return unless ($node->opac_visible =~ /^[y1t]+/i);
55
56         my $depth = $types[$node->ou_type]->depth;
57         my $sname = OpenILS::Application::AppUtils->entityize($node->shortname);
58         my $name = OpenILS::Application::AppUtils->entityize($node->name);
59         my $kids = $node->children;
60
61         push @$org_tree_html, "<option value='$sname'>" . '&#160;&#160;&#160;'x$depth . "$name</option>\n";
62         print_option($_, $org_tree_html) for (@$kids);
63 }
64