]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/templates/opac/parts/org_selector.tt2
TPAC Org unit hiding
[Evergreen.git] / Open-ILS / src / templates / opac / parts / org_selector.tt2
1 [%
2 # Org Unit Selector Widget :
3 #   INCLUDE build_org_selector id='selector-id' name='selector-name' 
4 #       value=org_id show_loc_groups=1/0 can_have_vols_only=1/0
5 #
6 # NOTE: DO NOT USE PROCESS
7 # Use of PROCESS results in internal variables, such as value or org_unit, to "leak" out
8
9 PROCESS "opac/parts/misc_util.tt2";
10 PROCESS get_library;
11
12 BLOCK build_org_selector;
13     node_stack = [{org => org_unit || ctx.aouct_tree || ctx.aou_tree}];
14     inherited_vis = ctx.get_cgf('opac.org_unit.non_inherited_visibility').enabled == 'f';
15
16     IF !name; 
17         name = loc_name;
18     END;
19     IF !value;
20         value = loc_value;
21     END;
22
23     # if the selected org unit is out of hiding scope, 
24     # disable the ou-hide scoping altogether.
25     hiding_disabled = ctx.org_hiding_disabled(value);
26
27     %]
28
29     <select [% IF id %] id='[% id %]' [% END %] name='[% name %]'>
30     [% 
31         WHILE node_stack.size > 0; 
32             node = node_stack.pop();
33             org_unit = node.org;
34             loc_grp = node.loc_grp;
35             ou_id = org_unit.id;
36             css_class = '';
37             disabled = '';
38             selected = '';
39             visible = org_unit.opac_visible == 't';
40
41             # org and all children are invisible.
42             NEXT IF !visible AND inherited_vis AND !ctx.is_staff;
43
44             IF !loc_grp; # processing an org unit
45
46                 top_loc_groups = [];
47                 IF show_loc_groups;
48                     # add the location groups that sort below the child org units
49                     FOR grp IN ctx.copy_location_groups.$ou_id.reverse;
50                         IF grp.top == 't';
51                             top_loc_groups.push(grp);
52                         ELSE;
53                             node_stack.push({org => org_unit, loc_grp => grp});
54                         END;
55                     END;
56                 END;
57
58                 # add the child org units
59                 FOR child IN org_unit.children.reverse;
60                     node_stack.push({org => child});
61                 END;
62
63                 # add the location groups that sort to the top
64                 # above the child org units
65                 FOR grp IN top_loc_groups;
66                     node_stack.push({org => org_unit, loc_grp => grp});
67                 END;
68
69             END;
70
71             # org is not publicly visible (though its children may be).
72             NEXT UNLESS ctx.is_staff OR visible;
73             
74             # org is not within hiding scope (though its children may be).
75             NEXT UNLESS hiding_disabled OR ctx.org_within_hiding_scope(ou_id);
76
77             node_value = ou_id;
78             IF loc_grp;
79                 node_value = node_value _ ':' _ loc_grp.id; 
80                 css_class = 'class="loc_grp"';
81             ELSE;
82                 css_class = 'class="org_unit"';
83             END;
84
85             IF can_have_vols_only AND org_unit.ou_type.can_have_vols != 't';
86                 disabled = 'disabled="disabled"';
87             ELSIF node_value == value;
88                 selected = 'selected="selected"';
89             END; 
90
91             pad_depth = 0;
92
93             # copy loc groups appear as children of the owning org unit
94             SET pad_depth = pad_depth + 1 IF loc_grp;
95
96             # determine the depth by calculating the distance from the root
97             porg = ctx.get_aou(org_unit.parent_ou);
98             WHILE porg;
99                 SET pad_depth = pad_depth + 1 IF porg.opac_visible == 't' OR ctx.is_staff;
100                 porg = ctx.get_aou(porg.parent_ou);
101             END;
102
103             pad_depth = pad_depth * 2;
104             display_name = loc_grp ? loc_grp.name : org_unit.name %]
105
106             <option value='[% node_value %]' [% selected %] [% disabled %] [% css_class %]> 
107                 [% '&nbsp;' FOR [0..pad_depth]; display_name | html %]
108             </option> 
109
110         [% END %]
111     </select>
112 [% END %]