Add some CSS to make things not entirely horrible.
[itkacl] / itkacl-web-1.0 / web / view.pl
1 #! /usr/bin/perl -T
2 use strict;
3 use warnings;
4 use HTML::Entities;
5 use utf8;
6
7 use lib '../include';
8 use itkaclcommon;
9
10 itkaclcommon::print_header();
11 my $entry = $itkaclcommon::cgi->param('entry');
12 itkaclcommon::print_tree(0, $entry);
13
14 my $ref = $itkaclcommon::dbh->selectrow_hashref('SELECT * FROM objects WHERE id=?', undef, $entry);
15
16 print "<script src=\"jquery-1.7.min.js\" type=\"text/javascript\"></script>\n";
17 print "<script src=\"itkacl.js\" type=\"text/javascript\"></script>\n";
18 print "<h1>$ref->{'description'}</h1>\n";
19
20 # Follow the tree up to the root to find the full path
21 my $path = "/" . $ref->{'name'};
22 my @ids = ();
23 while (defined($ref->{'parent'})) {
24         $ref = $itkaclcommon::dbh->selectrow_hashref('SELECT * FROM objects WHERE id=?', undef, $ref->{'parent'});
25         $path = "/" . $ref->{'name'} . $path;
26         push @ids, $ref->{'id'};
27 }
28         
29 print "<h2>$path</h2>\n";
30
31 #
32 # Now, fetch all ACL entries to find inherited rights; since ACLs are
33 # applied starting from the root, we traverse the tree from the root as
34 # well.
35 #
36
37 my $num_inherited = 0;
38 my $curpath = "";
39 for my $id (reverse @ids) {
40         $ref = $itkaclcommon::dbh->selectrow_hashref('SELECT * FROM objects WHERE id=?', undef, $id);
41         $curpath .= "/" . $ref->{'name'};
42         
43         my $aes = $itkaclcommon::dbh->selectall_arrayref('SELECT entity_type,entity,allow FROM aclentries WHERE object=? ORDER BY entity_type ASC, allow DESC',
44                 undef, $id);
45
46         for my $ae (@{$aes}) {
47                 if ($num_inherited == 0) {
48                         # This is the first entry, we'll have to make
49                         # the table borders and such
50                         print <<"EOF";
51 <h3>Arvede rettigheter</h3>
52
53 <table>
54   <tr>
55     <th>#</th>
56     <th>Till.</th>
57     <th>Type</th>
58     <th>Hvem</th>
59     <th>Arvet fra</th>
60   </tr>
61 EOF
62                 }
63         
64                 my ($entity_type, $entity, $allow) = @{$ae};
65                 my $et_text;
66                 if ($entity_type eq 'group') {
67                         $et_text = 'Gruppe';
68                 } else {
69                         $et_text = 'Bruker';
70                 }
71                 my $e_text = HTML::Entities::encode_entities($entity);
72         
73                 ++$num_inherited;
74                 print <<"EOF";
75   <tr>
76     <td>$num_inherited</td>
77     <td style="text-align: center;"><img src="/img/$allow.png" alt="$ae->[2]" /></td>
78     <td>$et_text</td>
79     <td>$e_text</td>
80     <td><a href="/view.pl?entry=$id">$curpath</a></td>
81   </tr>
82 EOF
83         }
84 }
85
86 if ($num_inherited != 0) {
87         print "</table>\n";
88 }
89
90 #
91 # Same, for non-inherited rights. Yes, it's a bit of code duplication,
92 # but it really won't be that much cleaner implementing it as a
93 # function, unfortunately.
94 #
95
96 print "<h3>Rettigheter</h3>\n";
97
98 my $num_rights = 0;
99 $ref = $itkaclcommon::dbh->selectrow_hashref('SELECT * FROM objects WHERE id=?', undef, $entry);
100 my $aes = $itkaclcommon::dbh->selectall_arrayref('SELECT entity_type,entity,allow,comment FROM aclentries WHERE object=? ORDER BY entity_type ASC, allow DESC',
101         undef, $entry);
102
103 for my $ae (@{$aes}) {
104         if ($num_rights == 0) {
105                 # This is the first entry, we'll have to make
106                 # the table borders and such
107                 print <<"EOF";
108
109 <table>
110   <tr>
111     <th>#</th>
112     <th>Till.</th>
113     <th>Type</th>
114     <th>Hvem</th>
115     <th>Slett</th>
116     <th>Kommentar</th>
117   </tr>
118 EOF
119                 }
120         
121         my ($entity_type, $entity, $allow, $comment) = @{$ae};
122         my $et_text;
123         if ($entity_type eq 'group') {
124                 $et_text = 'Gruppe';
125         } else {
126                 $et_text = 'Bruker';
127         }
128         my $e_text = HTML::Entities::encode_entities($entity);
129         my $c_text = HTML::Entities::encode_entities($comment // '');
130
131         ++$num_rights;
132         print <<"EOF";
133   <tr>
134     <td>$num_rights</td>
135     <td style="text-align: center;"><img src="/img/$allow.png" alt="$ae->[2]" /></td>
136     <td>$et_text</td>
137     <td>$e_text</td>
138     <td style="text-align: center;">
139       <a href="/delete.pl?entry=$entry&amp;entity_type=$entity_type&amp;entity=$e_text">
140         <img src="/img/delete.png" alt="Slett" />
141       </a>
142     </td>
143     <td ondblclick="enableEdit(this);" itkacl:entry="$entry" itkacl:entity-type="$entity_type" itkacl:entity="$e_text">$c_text</td>
144   </tr>
145 EOF
146 }
147
148 if ($num_rights != 0) {
149         print "</table>\n";
150 } else {
151         print "<p>Ingen rettigheter er satt ennå for dette objektet.</p>\n";
152 }
153
154 #
155 # I'm a bit unsure if we want to have this all in one page, but OK, here
156 # goes...
157 #
158 print <<"EOF";
159
160 <h3>Legg til nye rettigheter</h3>
161
162 <p>Du kan legge til nye rettigheter på dette objektet. Merk at verdiene
163   dine ikke vil sjekkes for gyldighet (du kan mao. fint gi tilganger til
164   en ikke-eksisterende bruker eller gruppe, men det kan gi uforutsigbare
165   resultater ved ACL-sjekking seinere).</p>
166
167 <p>Den spesielle gruppen "&lt;everyone&gt;" inneholder alle brukere.</p>
168
169 <form method="post" action="add.pl">
170   <input type="hidden" name="entry" value="$entry" />
171   <table>
172     <tr style="text-align: left;">
173       <th>Tillatelse:</th>
174       <td>
175         <select name="allow">
176           <option value="deny">Nekt</option>
177           <option value="grant">Tillat</option>
178         </select>
179       </td>
180     </tr>
181     <tr style="text-align: left;">
182       <th>Type:</th>
183       <td>
184         <select name="entity_type">
185           <option value="user">Bruker</option>
186           <option value="group">Gruppe</option>
187         </select>
188       </td>
189     </tr>
190     <tr style="text-align: left;">
191       <th>Bruker-/gruppenavn:</th>
192       <td><input name="entity" size="16" /></td>
193     </tr>
194     <tr style="text-align: left;">
195       <th>Kommentar:</th>
196       <td><input name="comment" size="40" /></td>
197     </tr>
198     <tr>
199       <td colspan="2" style="text-align: center;">
200         <input type="submit" value="Legg til" />
201       </td>
202     </tr>
203   </table>
204 </form>
205
206 <h3>Legg til nye tilgangsområder</h3>
207
208 <p>Du kan legge til nye tilgangsområder under denne noden. Merk at du
209   er begrenset til store og små bokstaver (kun små anbefales, områder
210   er case-sensitive) samt tall og bindestrek.</p>
211
212 <form method="post" action="addnode.pl">
213   <input type="hidden" name="parent" value="$entry" />
214   <table>
215     <tr style="text-align: left;">
216       <th>Sti:</th>
217       <td>
218         $path/<input name="name" size="16" />
219       </td>
220     </tr>
221     <tr style="text-align: left;">
222       <th>Beskrivelse</th>
223       <td>
224         <input name="description" size="50" />
225       </td>
226     </tr>
227     <tr>
228       <td colspan="2" style="text-align: center;">
229         <input type="submit" value="Legg til" />
230       </td>
231     </tr>
232   </table>
233 </form>
234
235 <h3>Slett dette området</h3>
236
237 EOF
238
239 $ref = $itkaclcommon::dbh->selectrow_hashref('SELECT COUNT(*) AS num_aclentries FROM aclentries WHERE object=?', undef, $entry);
240 if ($ref->{'num_aclentries'} > 0) {
241         print <<"EOF";
242 <p>Du kan ikke slette dette området ettersom det har tilordnet tilganger. Dersom du ønsker å
243   slette det må du først slette alle tilganger og eventuelle underområder.</p>
244 EOF
245 } else {
246         $ref = $itkaclcommon::dbh->selectrow_hashref('SELECT COUNT(*) AS num_children FROM objects WHERE parent=?', undef, $entry);
247         if ($ref->{'num_children'} > 0) {
248                 print <<"EOF";
249 <p>Du kan ikke slette dette området ettersom det har underområder. Dersom du ønsker å slette
250   det må du først slette alle underområdene.</p>
251 EOF
252         } else {
253                 print <<"EOF";
254 <p>Dersom du ønsker, kan du slette dette området. All tilgangskontroll mot det i fremtiden vil
255   feile, så sjekk grundig før du sletter det at det ikke fortsatt er i bruk.</p>
256   
257 <form method="post" action="deletenode.pl">
258   <input type="hidden" name="entry" value="$entry" />
259   <p><input type="submit" value="Slett dette området" /></p>
260 </form>
261 EOF
262         }
263 }
264
265 itkaclcommon::print_footer();