/[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

Contents of /lib/Arh/View/Units.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 70 - (show annotations)
Wed Apr 9 12:28:16 2008 UTC (16 years ago) by dpavlin
File size: 5662 byte(s)
added pager on which you can just to any page
1 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 use Data::Dump qw/dump/;
10
11 sub object_type { 'Unit' };
12
13 sub per_page {
14 my $per_page = get('per_page') || 5;
15 warn "## Units per_page = $per_page\n";
16 return $per_page;
17 };
18
19 sub display_columns {
20 my $self = shift;
21 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 construction
42 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 material
60 / );
61 }
62
63 #private template search_region => sub {};
64
65 =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 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 }
125 }
126 show( './paging_bottom', $collection, $page );
127 };
128
129 private template paging_bottom => sub {
130 my $self = shift;
131 my $collection = shift;
132 my $page = shift;
133 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
146 foreach my $p ( $collection->pager->first_page .. $collection->pager->last_page ) {
147 if ( $p == $page ) {
148 b { $p }
149 } else {
150 span {
151 hyperlink(
152 label => $p,
153 onclick =>
154 { args => { page => $p } }
155 );
156 }
157 }
158 }
159
160
161 if ( $collection->pager->next_page ) {
162 span {
163 hyperlink(
164 label => _("Next Page"),
165 onclick =>
166 { args => { page => $collection->pager->next_page } }
167 );
168 }
169 }
170 };
171 };
172
173
174 template 'view' => sub :CRUDView {
175 my $self = shift;
176 my $id = get('id');
177 my $record = $self->_get_record( $id );
178
179 my $update = $record->as_update_action(
180 moniker => "update-" . Jifty->web->serial,
181 );
182
183 my $delete = $record->as_delete_action(
184 moniker => "delete-" . Jifty->web->serial,
185 );
186 my $editing = $record->current_user_can('write');
187 warn "## current_user_can('write') = $editing\n";
188 $editing = 0 unless $self->current_user->editing;
189 warn "## editing ",$editing ? 'ok' : 'DENIED';
190
191 div { { class is 'unit' }
192
193 if ( $editing ) {
194 outs_raw($delete->button(
195 label => _('Delete unit'),
196 class => 'float-crud-button button-delete',
197 onclick => {
198 submit => $delete,
199 confirm => _('Really delete?'),
200 # region => Jifty->web->current_region,
201 replace_with => '/__jifty/empty',
202 refresh_self => 1,
203 args => { id => $id },
204 },
205 ));
206 };
207
208 foreach my $f ( $self->display_columns ) {
209 if ( $f eq 'material' ) {
210 set( search_collection => $record->material );
211 render_region(
212 name => 'unit-materials',
213 path => '/materials/list',
214 defaults => {
215 page => 1,
216 unit => $record->id,
217 }
218 );
219 } else {
220 my %opt;
221 if ( ! $editing ) {
222 $opt{render_mode} = 'read';
223 # skip fields without values
224 $opt{render_as} = 'hidden' if ! defined( $update->record->$f );
225 }
226 render_param( $update => $f, %opt );
227 }
228 };
229 if ( $editing ) {
230 div {
231 { class is 'submit_button' };
232 hyperlink(
233 label => _('Update'),
234 onclick => {
235 submit => $update,
236 refresh_self => 1,
237 },
238 );
239 }
240 }
241
242 }; # div class unit
243
244 show('/unitpictures/fragment', $record);
245
246 hr {};
247 };
248
249 template 'new_item' => sub {
250 my $self = shift;
251 return unless $self->current_user->editing;
252
253 my ( $object_type, $id ) = ( $self->object_type, get('id') );
254 my $record_class = $self->record_class;
255 my $create = $record_class->as_create_action;
256
257 h1 { _("New unit") };
258
259 div {
260
261 foreach my $f ( $self->display_columns ) {
262 # last if $f eq 'material' && ! $id;
263 render_param( $create => $f ) unless $f eq 'material';
264 #warn "## $f";
265 }
266
267 div {
268 { class is 'submit_button' };
269 hyperlink(
270 label => _("Add"),
271 onclick => [
272 {
273 submit => $create,
274 # args => {
275 # },
276 },
277 { refresh_self => 1 },
278 {
279 element => Jifty->web->current_region->parent->get_element( 'div.list' ),
280 append => $self->fragment_for('view'),
281 args => {
282 object_type => $object_type,
283 id => { result_of => $create, name => 'id' },
284 unit => get('unit'),
285 },
286 },
287 ],
288 as_button => 1,
289 );
290 };
291
292 };
293 };
294
295 1;

  ViewVC Help
Powered by ViewVC 1.1.26