/[Arh]/lib/Arh/View/Units.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/Arh/View/Units.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 77 - (hide annotations)
Fri Apr 18 16:17:31 2008 UTC (16 years ago) by dpavlin
File size: 5917 byte(s)
show just 15 pages before and after current page to keep number of displayed
pages in controll
1 dpavlin 15 package Arh::View::Units;
2    
3     use strict;
4     use warnings;
5    
6     use base 'Jifty::View::Declare::CRUD';
7     use Jifty::View::Declare -base;
8    
9 dpavlin 58 use Data::Dump qw/dump/;
10    
11 dpavlin 15 sub object_type { 'Unit' };
12    
13 dpavlin 67 sub per_page {
14 dpavlin 72 my $per_page = get('per_page') || 3;
15 dpavlin 67 warn "## Units per_page = $per_page\n";
16     return $per_page;
17     };
18 dpavlin 66
19 dpavlin 23 sub display_columns {
20     my $self = shift;
21 dpavlin 39 return ( qw/
22     unit_id
23     name
24     subcategory
25     category
26     site
27     gps
28     placement
29     context
30     discovery
31     function
32     reusage
33     ownership
34     presevation_place
35     inventory_nr
36     dimensions
37     condition
38     toplogy
39     technique
40     description
41 dpavlin 58 construction
42 dpavlin 39 iconography
43     decoration
44     motifs
45     inscription
46     language
47     font
48     author
49     chronology
50     chronostyle
51     explored
52     conservations
53     restorations
54     legal
55     links
56     sources
57     bibliography
58     copyright
59 dpavlin 63 material
60 dpavlin 39 / );
61 dpavlin 23 }
62    
63 dpavlin 15 #private template search_region => sub {};
64    
65 dpavlin 67 =for later
66    
67     template 'index.html' => page {
68     my $self = shift;
69     title is $self->object_type;
70     form {
71     render_region(
72     name => $self->object_type.'-list',
73     path => $self->fragment_base_path.'/list'
74     );
75     };
76     };
77    
78     template 'list' => sub {
79     my $self = shift;
80    
81     my ( $page ) = get('page');
82    
83     my $item_path = get('item_path') || $self->fragment_for("view");
84     my $collection = $self->_current_collection();
85    
86     if ( $self->per_page == 1 ) {
87     warn "## bulk import get to last page\n";
88     $page = $collection->pager->last_page;
89     }
90    
91     div {
92     {class is 'crud-'.$self->object_type};
93    
94     show('./search_region');
95     show( './paging_top', $collection, $page );
96     show( './paging_bottom', $collection, $page );
97     show( './list_items', $collection, $item_path );
98     show( './paging_bottom', $collection, $page );
99    
100     show( './new_item_region');
101     }
102    
103     };
104    
105     =cut
106    
107 dpavlin 66 private template 'paging_top' => sub {
108     my $self = shift;
109     my $collection = shift;
110     my $page = shift || 1;
111    
112     if ( $collection->pager->last_page > 1 ) {
113     span {
114     { class is 'page-count' };
115     outs(
116     _( "Found %1 units, showing %2-%3 on page %4/%5",
117     $collection->pager->total_entries,
118     $collection->pager->first,
119     $collection->pager->last,
120     $page,
121     $collection->pager->last_page
122     )
123     );
124 dpavlin 67 }
125 dpavlin 66 }
126 dpavlin 69 show( './paging_bottom', $collection, $page );
127 dpavlin 66 };
128    
129 dpavlin 70 private template paging_bottom => sub {
130     my $self = shift;
131     my $collection = shift;
132 dpavlin 77 my $page = shift || 0;
133 dpavlin 70 div {
134     { class is 'paging' };
135     if ( $collection->pager->previous_page ) {
136     span {
137     hyperlink(
138     label => _("Previous Page"),
139     onclick => {
140     args => { page => $collection->pager->previous_page }
141     }
142     );
143     }
144     }
145 dpavlin 66
146 dpavlin 77 my ( $f_p, $t_p ) = ( '...', '...' );
147    
148     my $from = $page - 15;
149     if ( $from < 0 ) {
150     $from = $collection->pager->first_page;
151     $f_p = '';
152     }
153     my $to = $page + 15;
154     if ( $to > $collection->pager->last_page ) {
155     $to = $collection->pager->last_page;
156     $t_p = '';
157     }
158    
159     outs $f_p;
160    
161     foreach my $p ( $from .. $to ) {
162 dpavlin 70 if ( $p == $page ) {
163     b { $p }
164     } else {
165     span {
166     hyperlink(
167     label => $p,
168     onclick =>
169     { args => { page => $p } }
170     );
171     }
172     }
173     }
174    
175 dpavlin 77 outs $t_p;
176    
177 dpavlin 70 if ( $collection->pager->next_page ) {
178     span {
179     hyperlink(
180     label => _("Next Page"),
181     onclick =>
182     { args => { page => $collection->pager->next_page } }
183     );
184     }
185     }
186     };
187     };
188    
189    
190 dpavlin 15 template 'view' => sub :CRUDView {
191     my $self = shift;
192 dpavlin 23 my $id = get('id');
193     my $record = $self->_get_record( $id );
194 dpavlin 15
195     my $update = $record->as_update_action(
196     moniker => "update-" . Jifty->web->serial,
197     );
198    
199 dpavlin 23 my $delete = $record->as_delete_action(
200     moniker => "delete-" . Jifty->web->serial,
201     );
202     my $editing = $record->current_user_can('write');
203     warn "## current_user_can('write') = $editing\n";
204     $editing = 0 unless $self->current_user->editing;
205     warn "## editing ",$editing ? 'ok' : 'DENIED';
206 dpavlin 15
207 dpavlin 28 div { { class is 'unit' }
208 dpavlin 23
209 dpavlin 67 if ( $editing ) {
210 dpavlin 23 outs_raw($delete->button(
211 dpavlin 28 label => _('Delete unit'),
212     class => 'float-crud-button button-delete',
213 dpavlin 23 onclick => {
214     submit => $delete,
215     confirm => _('Really delete?'),
216     # region => Jifty->web->current_region,
217     replace_with => '/__jifty/empty',
218     refresh_self => 1,
219     args => { id => $id },
220     },
221     ));
222     };
223    
224     foreach my $f ( $self->display_columns ) {
225 dpavlin 15 if ( $f eq 'material' ) {
226     set( search_collection => $record->material );
227     render_region(
228     name => 'unit-materials',
229     path => '/materials/list',
230     defaults => {
231     page => 1,
232     unit => $record->id,
233     }
234     );
235     } else {
236     my %opt;
237 dpavlin 58 if ( ! $editing ) {
238     $opt{render_mode} = 'read';
239     # skip fields without values
240     $opt{render_as} = 'hidden' if ! defined( $update->record->$f );
241     }
242 dpavlin 15 render_param( $update => $f, %opt );
243     }
244     };
245 dpavlin 23 if ( $editing ) {
246 dpavlin 20 div {
247     { class is 'submit_button' };
248     hyperlink(
249     label => _('Update'),
250     onclick => {
251     submit => $update,
252     refresh_self => 1,
253     },
254 dpavlin 67 );
255     }
256 dpavlin 20 }
257 dpavlin 28
258     }; # div class unit
259    
260     show('/unitpictures/fragment', $record);
261    
262 dpavlin 15 hr {};
263     };
264    
265 dpavlin 23 template 'new_item' => sub {
266     my $self = shift;
267     return unless $self->current_user->editing;
268    
269 dpavlin 66 my ( $object_type, $id ) = ( $self->object_type, get('id') );
270     my $record_class = $self->record_class;
271     my $create = $record_class->as_create_action;
272 dpavlin 23
273     h1 { _("New unit") };
274    
275 dpavlin 67 div {
276 dpavlin 23
277     foreach my $f ( $self->display_columns ) {
278 dpavlin 39 # last if $f eq 'material' && ! $id;
279 dpavlin 63 render_param( $create => $f ) unless $f eq 'material';
280 dpavlin 42 #warn "## $f";
281 dpavlin 23 }
282    
283     div {
284     { class is 'submit_button' };
285     hyperlink(
286     label => _("Add"),
287     onclick => [
288     {
289     submit => $create,
290 dpavlin 39 # args => {
291     # },
292 dpavlin 23 },
293     { refresh_self => 1 },
294     {
295     element => Jifty->web->current_region->parent->get_element( 'div.list' ),
296     append => $self->fragment_for('view'),
297     args => {
298     object_type => $object_type,
299     id => { result_of => $create, name => 'id' },
300     unit => get('unit'),
301     },
302     },
303     ],
304     as_button => 1,
305     );
306 dpavlin 67 };
307 dpavlin 23
308     };
309     };
310    
311 dpavlin 15 1;

  ViewVC Help
Powered by ViewVC 1.1.26