]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/cgi-bin/usr_group-setup.cgi
adding user group setup CGI
[Evergreen.git] / Open-ILS / src / cgi-bin / usr_group-setup.cgi
1 #!/usr/bin/perl
2 use strict;
3
4 use OpenILS::Application::Storage;
5 use OpenILS::Application::Storage::CDBI;
6
7 # I need to abstract the driver loading away...
8 use OpenILS::Application::Storage::Driver::Pg;
9
10 use CGI qw/:standard start_*/;
11
12 OpenILS::Application::Storage::CDBI->connection('dbi:Pg:host=10.0.0.2;dbname=demo-dev', 'postgres');
13 OpenILS::Application::Storage::CDBI->db_Main->{ AutoCommit } = 1;
14
15 my $cgi = new CGI;
16
17 #-------------------------------------------------------------------------------
18 # setup part
19 #-------------------------------------------------------------------------------
20
21 my %org_cols = ( qw/id GroupID name Name parent ParentGroup/ );
22
23 my @col_display_order = ( qw/id name parent/ );
24
25 if (my $action = $cgi->param('action')) {
26         if ( $action eq 'Update' ) {
27                 for my $id ( ($cgi->param('id')) ) {
28                         my $u = permission::group_tree->retrieve($id);
29                         for my $col ( keys %org_cols ) {
30                                 $u->$col( $cgi->param($col."_$id") );
31                         }
32                         $u->update;
33                 }
34         } elsif ( $action eq 'Add New' ) {
35                 permission::group_tree->create( { map { defined($cgi->param($_)) ? ($_ => $cgi->param($_)) : () } keys %org_cols } );
36         }
37 }
38
39 #-------------------------------------------------------------------------------
40 # HTML part
41 #-------------------------------------------------------------------------------
42
43 print <<HEADER;
44 Content-type: text/html
45
46 <html>
47
48 <head>
49         <style>
50                 table.table_class {
51                         border: dashed lightgrey 1px;
52                         background-color: #EEE;
53                         border-collapse: collapse;
54                 }
55
56                 deactivated {
57                         color: lightgrey;
58                 }
59
60                 tr.new_row_class {
61                         background: grey;
62                 }
63
64                 tr.row_class td {
65                         border: solid lightgrey 1px;
66                 }
67                 
68                 tr.header_class th {
69                         background-color: lightblue;
70                         border: solid blue 1px;
71                         padding: 2px;
72                 }
73
74         </style>
75         <script language='javascript' src='/js/widgets/xtree.js'></script>
76 </head>
77
78 <body style='padding: 25px;'>
79
80 <h1>User Group Hierarchy Setup</h1>
81 <hr/>
82 HEADER
83
84 my $uri = $cgi->url(-relative=>1);
85
86 my $top;
87 for my $grp ( permission::group_tree->search( {parent=>undef} ) ) {
88         my $name = $grp->name;
89         $name =~ s/'/\\'/og;
90         print <<"       HEADER";
91 <div style="float: left;">
92         <script language='javascript'>
93
94                 function getById (id) { return document.getElementById(id); }
95                 function createAppElement (el) { return document.createElement(el); }
96                 function createAppTextNode (txt) { return document.createTextNode(txt); }
97         
98                 var node_$grp = new WebFXTree('$name','$uri?action=child&id=$grp');
99         HEADER
100         $top = $grp->id;
101         last;
102 }
103
104 for my $grp ( permission::group_tree->search_like( {parent_ou => '%'}, {order_by => 'id'} ) ) {
105         my $name = $grp->name;
106         $name =~ s/'/\\'/og;
107         my $parent = $grp->parent_ou;
108         print <<"       JS"
109                 var node_$grp = new WebFXTreeItem('$name','$uri?action=child&id=$grp');
110         JS
111 }for my $grp ( sort {$a->name cmp $b->name} permission::group_tree->retrieve_all ) {
112         my $parent = $grp->parent_ou;
113         next unless $parent;
114         print <<"       JS"
115                 node_$parent.add(node_$grp);
116         JS
117 }
118
119 print <<HEADER;
120                 document.write(node_$top);
121         </script>
122 </div>
123 <div>
124
125 HEADER
126
127 #-------------------------------------------------------------------------------
128 # Logic part
129 #-------------------------------------------------------------------------------
130
131 if (my $action = $cgi->param('action')) {
132         if ( $action eq 'child' ) {
133                 my $id = $cgi->param('id');
134                 if ($id) {
135                         my $node = permission::group_tree->retrieve($id);
136                         #-----------------------------------------------------------------------
137                         # child form
138                         #-----------------------------------------------------------------------
139
140                         print "<h2>Edit ".$node->name."</h2>";
141                         print   "<form method='POST'>".
142                                 "<table class='table_class'><tr class='header_class'>\n";
143         
144                         print Tr(
145                                 th($org_cols{id}),
146                                 td( $node->id() ),
147                         );
148                         print Tr(
149                                 th($org_cols{name}),
150                                 td("<input type='text' name='name_$node' value=\"". $node->name() ."\">"),
151                         );
152                         print Tr(
153                                 th($org_cols{depth}),
154                                 td("<select name='depth_$node'>".do{
155                                                         my $out = '<option>-- Select One --</option>';
156                                                         for my $type ( sort {$a->depth <=> $b->depth} actor::org_unit_type->retrieve_all) {
157                                                                 $out .= "<option value='".$type->depth."' ".do {
158                                                                         if ($node->depth == $type->depth) {
159                                                                                 "selected";
160                                                                         }}.'>'.$type->name.'</option>'
161                                                         }
162                                                         $out;
163                                                 }."</select>"),
164                         );
165                         print Tr(
166                                 th($org_cols{parent}),
167                                 td("<select name='parent_ou_$node'>".do{
168                                                 my $out = '<option>-- Select One --</option>';
169                                                 for my $org ( sort {$a->id <=> $b->id} permission::group_tree->retrieve_all) {
170                                                         $out .= "<option value='$org' ".do {
171                                                                 if ($node->parent == $org->id) {
172                                                                         "selected";
173                                                                 }}.'>'.do{'&nbsp;&nbsp;'x$org->depth}.$org->name.'</option>'
174                                                 }
175                                                 $out;
176                                         }."</select><input type='hidden' value='$node' name='id'>"),
177                         );
178
179                         print Tr( "<td colspan='2'><input type='submit' name='action' value='Update'/></td>" );
180
181                         print   "</table></form><hr/>";
182
183
184                         print "<h2>New Child</h2>";
185         
186                         print   "<form method='POST'>".
187                                 "<table class='table_class'>\n";
188
189                         print Tr(
190                                 th($org_cols{name}),
191                                 td("<input type='text' name='name'>"),
192                         );
193                         print Tr(
194                                 th($org_cols{depth}),
195                                 td("<select name='depth'>".do{
196                                                 my $out = '<option>-- Select One --</option>';
197                                                 for my $type ( sort {$a->depth <=> $b->depth} actor::org_unit_type->retrieve_all) {
198                                                         $out .= "<option value='".$type->depth."'>".$type->name.'</option>'
199                                                 }
200                                                 $out;
201                                         }."</select>"),
202                         );
203                         print Tr( "<td colspan='2'><input type='hidden' value='$node' name='parent_ou'>",
204                                   "<input type='submit' name='action' value='Add New'/></td>" );
205                         print   "</table></form><hr/>";
206                 }
207         }
208 }
209         
210 print "</div></body></html>";
211
212