/[A3C]/lib/A3C/View/Strix.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/Strix.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 186 - (hide annotations)
Mon Jun 16 22:56:14 2008 UTC (15 years, 10 months ago) by dpavlin
File size: 7062 byte(s)
I feel good enought for this version to have it bump [0.05]

- dispatcher will automatically take first selected instance
- check if we can connect to database when adding instances to selection
- removed bunch of debug warn output
- display validation error messages in selector
- show selected instance in selector
- variable instance is now used for current user instance, and op_instace for selector
- dim layout link
1 dpavlin 142 package A3C::View::Strix;
2    
3     =head1 NAME
4    
5     A3C::View::Strix
6    
7     =head1 DESCRIPTION
8    
9 dpavlin 174 Display information about Strix instances
10 dpavlin 142
11 dpavlin 157 =head1 TEMPLATES
12    
13 dpavlin 142 =cut
14    
15     use strict;
16     use warnings;
17    
18     use Jifty::View::Declare -base;
19     use Data::Dump qw/dump/;
20    
21 dpavlin 157 =head2 /
22    
23 dpavlin 174 Display instaces search and some stats
24 dpavlin 157
25     =cut
26    
27 dpavlin 142 template 'index.html' => page {
28    
29 dpavlin 174 title is _('Strix instances');
30 dpavlin 153
31 dpavlin 174 my $orgs = A3C::Model::StrixInstanceCollection->new;
32 dpavlin 166 $orgs->unlimit;
33    
34 dpavlin 174 div { _('Number of instances in Strix: %1', $orgs->count ) };
35 dpavlin 166
36 dpavlin 157 render_region(
37 dpavlin 174 name => 'selected-instances',
38     path => '/strix/selected-instances'
39 dpavlin 157 );
40    
41     render_region(
42 dpavlin 174 name => 'search-instances',
43     path => '/strix/search-instances',
44 dpavlin 157 );
45    
46 dpavlin 153 };
47    
48 dpavlin 157 =head2 name_diff
49    
50     =cut
51    
52 dpavlin 153 template 'name_diff' => page {
53    
54 dpavlin 166 title is _('Strix name differences');
55 dpavlin 153
56 dpavlin 183 render_region(
57     name => 'selected-instances',
58     path => '/strix/selected-instances'
59     );
60    
61 dpavlin 142 my $name_diff = A3C::SQL->new({ query => qq{
62     select
63 dpavlin 174 instance,hreduorgurl,
64 dpavlin 142 _site_name,o
65 dpavlin 174 from strix_instances
66     join hr_edu_orgs on cn = instance
67 dpavlin 142 where o != _site_name
68     }});
69    
70 dpavlin 166 if ( $name_diff->count > 0 ) {
71    
72 dpavlin 142 table {
73     row {
74 dpavlin 183 th {}
75 dpavlin 174 th { _('Instance') }
76     th { _('Strix instance name') }
77 dpavlin 142 th { _('hrEduOrg.o') }
78     };
79     while ( my $row = $name_diff->next ) {
80     row {
81 dpavlin 183 cell { show( 'instance-op', 'Create', '+', $row->instance ) }
82     cell { $row->instance }
83 dpavlin 142 cell { $row->_site_name }
84     cell { $row->o }
85     }
86     }
87     }
88 dpavlin 166
89     } else {
90 dpavlin 174 div { _("Can't find any instance of strix which has different name than data from LDAP") }
91 dpavlin 142 }
92    
93     };
94    
95 dpavlin 161 =head2 sql
96    
97 dpavlin 174 Execute SQL query on instance
98 dpavlin 161
99     =cut
100    
101     template 'sql' => page {
102    
103     title is _('Execute SQL');
104    
105 dpavlin 166 render_region(
106 dpavlin 174 name => 'selected-instances',
107     path => '/strix/selected-instances'
108 dpavlin 166 );
109    
110     render_region(
111     name => 'execute-sql',
112     path => '/strix/execute-sql',
113     );
114    
115     };
116    
117 dpavlin 174 sub strix {
118 dpavlin 186 my $instance = get('instance');
119 dpavlin 174 return Strix->new({ instance => $instance });
120     }
121    
122 dpavlin 172 =head2 sitemap
123    
124     =cut
125    
126     template 'sitemap' => page {
127    
128 dpavlin 186 title is _('Sitemap %1', get('instance'));
129 dpavlin 172
130 dpavlin 183 render_region(
131     name => 'selected-instances',
132     path => '/strix/selected-instances'
133     );
134    
135 dpavlin 174 my $site_id = get('site_id') || 1;
136 dpavlin 172
137 dpavlin 174 my $sitemap = strix->site_navigation( $site_id );
138    
139 dpavlin 172 sub full_url {
140     my $p = shift;
141     hyperlink(
142     url => 'http://new.cms-qa.skole.hr' . $p->{url},
143     label => $p->{naziv},
144     );
145 dpavlin 174 if ( $p->{type} eq 'category' ) {
146     outs_raw(' ');
147     hyperlink(
148     url => '/strix/layout?url=' . $p->{url},
149 dpavlin 186 label => _('layout'),
150     class => 'layout',
151 dpavlin 174 );
152     }
153 dpavlin 172 }
154    
155     sub children {
156     my $c = shift;
157     return unless defined $c->{children};
158     ul {
159     foreach my $p ( @{ $c->{children} } ) {
160     li {
161 dpavlin 183 { class is $p->{class} };
162 dpavlin 172 full_url( $p );
163     children( $p );
164     }
165     }
166     }
167     }
168    
169     ul {
170     foreach my $p ( @$sitemap ) {
171     li {
172     full_url( $p );
173     children( $p );
174     }
175     }
176     }
177    
178     };
179    
180 dpavlin 174 =head2 layout
181    
182     =cut
183    
184     template 'layout' => page {
185    
186     my $url = get('url') || '/';
187    
188     my $category = strix->category( $url );
189    
190     warn dump( $category );
191    
192     title is _('Layout %1 : %2',
193     $category->{sitename},
194     $category->{naziv},
195     );
196    
197 dpavlin 186 render_region(
198     name => 'selected-instances',
199     path => '/strix/selected-instances'
200     );
201    
202 dpavlin 174 hyperlink(
203     url => 'http://' . $category->{sitename} . '/' . $category->{url},
204     label => $category->{naziv},
205     );
206    
207     my $layout = strix->layout( $url );
208    
209     pre {
210     dump( $layout );
211     }
212    
213     };
214    
215 dpavlin 166 =head1 REGIONS
216    
217     =head2 execute-sql
218    
219 dpavlin 174 Execute SQL query on instance
220 dpavlin 166
221     =cut
222    
223     template 'execute-sql' => sub {
224    
225 dpavlin 161 my $action = new_action(
226     class => 'StrixSQL',
227     moniker => 'strix-sql',
228     sticky_on_success => 1,
229     sticky_on_failure => 1,
230 dpavlin 166 arguments => {
231 dpavlin 183 instance => get('instance')
232 dpavlin 166 }
233 dpavlin 161 );
234    
235     form {
236 dpavlin 183 render_action( $action => [ 'instance', 'sql' ] );
237 dpavlin 161 form_submit( label => _('Execute SQL') );
238     };
239    
240     if ( my $sql = $action->result->content('sql') ) {
241     div { _('Found %1 results', $sql->count ) }
242     table {
243     row { map { th { $_ } } $sql->_column_names };
244     while (my $row = $sql->next) {
245     row {
246     foreach my $col ( $sql->_column_names ) {
247     cell { $row->$col }
248     }
249     }
250     }
251     }
252     }
253     };
254    
255 dpavlin 174 =head2 search-instances
256 dpavlin 157
257     =cut
258    
259 dpavlin 174 template 'search-instances' => sub {
260 dpavlin 157
261 dpavlin 174 h1 { _('Find instance') }
262 dpavlin 157
263     my $action = new_action(
264 dpavlin 174 class => 'SearchStrixInstance',
265     moniker => 'search-strix-instance',
266 dpavlin 157 sticky_on_success => 1,
267     sticky_on_failure => 1,
268     );
269    
270    
271     form {
272 dpavlin 174 render_action( $action => [ 'instance_contains', '_site_name_contains' ] );
273 dpavlin 157 form_submit( label => _('Search') );
274     };
275    
276     # warn dump( $action->result->content );
277    
278     if ( my $search = $action->result->content('search') ) {
279     div { _('Found %1 results', $search->count ) }
280     table {
281     while (my $strix = $search->next) {
282     row {
283 dpavlin 174 cell { tt { $strix->instance } }
284 dpavlin 157 cell { $strix->_site_name }
285 dpavlin 174 cell { show( 'instance-op', 'Create', '+', $strix->instance ) }
286 dpavlin 157 }
287     }
288     }
289     }
290    
291     };
292    
293 dpavlin 174 =head2 selected-instances
294 dpavlin 157
295 dpavlin 174 Show Selected instances for current user
296 dpavlin 157
297     =cut
298    
299 dpavlin 174 template 'selected-instances' => sub {
300 dpavlin 157 my $self = shift;
301    
302 dpavlin 186 # warn "## IN selected-instances ",dump( @_ );
303 dpavlin 157
304     if ( my $op = get 'op' ) {
305 dpavlin 186 my $op_instance = get 'op_instance' or die "no op_instance?";
306     warn "# selected-instances $op on $op_instance";
307 dpavlin 157
308     my $a;
309    
310     if ( $op eq 'Create' ) {
311    
312     $a = new_action(
313 dpavlin 174 class => $op . 'StrixInstanceSelection',
314 dpavlin 157 moniker => $op,
315     arguments => {
316 dpavlin 186 instance => $op_instance,
317 dpavlin 157 by_user => $self->current_user->id,
318     },
319     );
320    
321     } elsif ( $op eq 'Delete' ) {
322    
323 dpavlin 174 my $strix = A3C::Model::StrixInstanceSelection->new;
324 dpavlin 186 $strix->load_by_cols( instance => $op_instance, by_user => $self->current_user->id );
325     warn "can't find instance $op_instance" unless $strix->id;
326 dpavlin 157 $a = $strix->as_delete_action;
327    
328     }
329 dpavlin 186 # warn "# argument_values = ",dump( $a->argument_values );
330 dpavlin 157 $a->run;
331 dpavlin 186
332     if ( $a->result->error ) {
333     div {
334     { class is 'note error' }
335     $a->result->error;
336     }
337     }
338    
339     set( op => '' );
340 dpavlin 157 }
341    
342 dpavlin 174 my $selected = A3C::Model::StrixInstanceSelectionCollection->new;
343 dpavlin 157 $selected->limit( column => 'by_user', value => Jifty->web->current_user->id );
344    
345     if ( $selected->count > 0 ) {
346    
347 dpavlin 186 my $instance = get('instance');
348    
349 dpavlin 183 div { _('%1 instances selected', $selected->count ) };
350 dpavlin 157 table {
351     while (my $s = $selected->next) {
352     row {
353 dpavlin 186 cell { tt {
354     if ( $s->instance->instance eq $instance ) {
355     b { $instance }
356     } else {
357     hyperlink(
358     url => '?instance=' . $s->instance->instance,
359     label => $s->instance->instance
360     )
361     }
362 dpavlin 183 } }
363     cell { $s->instance->_site_name }
364     cell { show( 'instance-op', 'Delete', '-', $s->instance->instance ) }
365 dpavlin 157 }
366     }
367     }
368     } else {
369 dpavlin 174 div { _('No instances selected') }
370 dpavlin 157 }
371     };
372    
373 dpavlin 174 =head2 instance-op
374 dpavlin 157
375 dpavlin 174 Display button to add/remove instance from selection
376 dpavlin 157
377 dpavlin 174 show( 'instance-op', 'Delete', '-', $strix->instace );
378 dpavlin 157
379     =cut
380    
381 dpavlin 174 template 'instance-op' => sub {
382 dpavlin 157 my $self = shift;
383    
384 dpavlin 186 # warn "# instance-op = ",dump( @_ );
385 dpavlin 157
386 dpavlin 174 my ( $op, $label, $instance ) = @_;
387 dpavlin 157
388     form {
389     hyperlink(
390     label => $label,
391     onclick => {
392 dpavlin 174 refresh => 'selected-instances',
393     path => '/strix/selected-instances',
394 dpavlin 157 args => {
395 dpavlin 186 op_instance => $instance,
396 dpavlin 157 op => $op,
397     }
398     },
399     );
400     }
401    
402     };
403    
404    
405 dpavlin 142 1;

  ViewVC Help
Powered by ViewVC 1.1.26