/[A3C]/lib/A3C/View.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /lib/A3C/View.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 125 - (hide annotations)
Thu May 22 20:48:42 2008 UTC (15 years, 10 months ago) by dpavlin
File size: 3282 byte(s)
added custom CRUD for search of organization and search while
preserving most of Jifty ajax goodnes by overriding just a few
templates from jifty's Jifty::View::Declare::CRUD
1 dpavlin 37 package A3C::View;
2    
3     use strict;
4     use warnings;
5    
6     use Jifty::View::Declare -base;
7     use A3C::LDAP;
8 dpavlin 79 use A3C::SQL;
9 dpavlin 37
10     use Data::Dump qw/dump/;
11    
12 dpavlin 72 template '/' => page {
13 dpavlin 37
14 dpavlin 72 h1 { _('Statistics') }
15    
16 dpavlin 120 my $orgs = A3C::Model::hrEduOrgCollection->new;
17 dpavlin 72 $orgs->unlimit;
18    
19     dt { _('Number of schools in system') }
20     dd { $orgs->count }
21    
22 dpavlin 120 my $people = A3C::Model::hrEduPersonCollection->new;
23 dpavlin 72 $people->unlimit;
24    
25     dt { _('Number of persons in system') }
26     dd { $people->count }
27    
28 dpavlin 83 my $by_towns = A3C::SQL->new({ query => qq{
29 dpavlin 79 select count(uid),l
30 dpavlin 120 from hr_edu_orgs
31 dpavlin 79 inner join towns on towns.name = l
32     group by l
33     order by count desc
34     limit 25
35     }});
36 dpavlin 72
37 dpavlin 83 dt { _('Top %1 towns by schools', $by_towns->count) }
38 dpavlin 72 dd {
39     ul {
40 dpavlin 83 while ( my $row = $by_towns->next ) {
41 dpavlin 79 li { outs_raw( $row->count, ' ', $row->l ) }
42 dpavlin 72 }
43     }
44     }
45    
46 dpavlin 83 my $by_county = A3C::SQL->new({ query => qq{
47     select
48     count(uid) as schools,
49     county,
50     count(distinct municipality) as municipalities
51 dpavlin 120 from hr_edu_orgs
52 dpavlin 83 inner join towns on towns.name = l
53     group by county
54     order by schools desc
55     }});
56    
57     dt { _('Schools by counties') }
58     dd {
59     table {
60     th { _('Schools') }
61     th { _('County') }
62     th { _('Municipalities') };
63     while ( my $row = $by_county->next ) {
64     row {
65     cell { $row->schools }
66     cell { $row->county }
67     cell { $row->municipalities }
68     }
69     }
70     }
71     }
72 dpavlin 72 };
73    
74    
75 dpavlin 71 template 'ldap' => page {
76     h1 { _('LDAP data about Schools in system') };
77 dpavlin 40 my $ldap = A3C::LDAP->new;
78 dpavlin 37 div {
79 dpavlin 40 $ldap->search(
80 dpavlin 37 base => 'dc=skole,dc=hr',
81     filter => '(objectClass=hrEduOrg)',
82     sizelimit => 10,
83     );
84 dpavlin 41 while ( my $entry = $ldap->current_search->shift_entry ) {
85 dpavlin 37 #warn $entry->dump;
86     ul {
87     foreach my $attr ( $entry->attributes ) {
88     li {
89     tt { $attr }
90 dpavlin 39 span { dump( $entry->get_value( $attr ) ) }
91 dpavlin 37 }
92     }
93     }
94     }
95     }
96     };
97    
98 dpavlin 71 template 'people' => page {
99    
100     h1 { _('Find people') }
101 dpavlin 49
102     my $action = new_action(
103 dpavlin 122 class => 'SearchhrEduPerson',
104 dpavlin 71 moniker => 'search-users',
105     sticky_on_success => 1,
106     sticky_on_failure => 1,
107 dpavlin 49 );
108    
109 dpavlin 71
110 dpavlin 49 form {
111     render_action( $action => [ 'uid_contains', 'cn_contains' ] );
112     form_submit( label => _('Find someone') );
113     };
114    
115     # warn dump( $action->result->content );
116    
117     if ( my $search = $action->result->content('search') ) {
118     div { sprintf(_('Found %d results'), $search->count ) }
119     ol {
120     while (my $user = $search->next) {
121     li {
122     span { $user->cn }
123     tt { $user->uid }
124     }
125     }
126     }
127     }
128    
129     };
130    
131 dpavlin 71 template 'sync' => page {
132 dpavlin 55
133 dpavlin 71 h1 { _('Sync school from LDAP') }
134    
135 dpavlin 55 my $action = new_action(
136     class => 'SyncOrganization',
137     moniker => 'sync-organization'
138     );
139    
140     form {
141 dpavlin 122 render_action( $action => [ 'org_uid' ] );
142 dpavlin 55 form_submit( label => _('Sync Organization') );
143     };
144    
145     if ( my $users = $action->result->content('synced-users') ) {
146     ol {
147     while (my $user = $users->next) {
148     li {
149     span { $user->cn }
150 dpavlin 57 tt { { class is 'email' } '<' . $user->mail . '>' }
151 dpavlin 55 }
152     }
153     }
154     }
155    
156     };
157 dpavlin 125
158     # mount other views
159     use A3C::View::Organization;
160    
161     # we can't really use following form because Jifty would upper case first
162     # letter of model and try to find A3C::Model::HrEduOrg which doesn't exit!
163     #Jifty::View::Declare::CRUD->mount_view('hrEduOrg', 'A3C::View::Organization', '/organizations');
164     alias A3C::View::Organization under '/organizations', {
165     object_type => 'hrEduOrg',
166     };
167    
168     1;

  ViewVC Help
Powered by ViewVC 1.1.26