/[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 82 - (show annotations)
Sat Apr 19 23:18:06 2008 UTC (11 years ago) by dpavlin
File size: 6436 byte(s)
wrap delete unit in form so it really works now
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') || 3;
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 =head2 single
108
109 display singe unit on page, using C<id> or C<unit> for unit id
110
111 =cut
112
113 template 'single' => page {
114 my $self = shift;
115
116 my $id = get('unit') || get('id') || warn "no unit or id?";
117
118 my $item = Arh::Model::Unit->new;
119 $item->load( $id );
120 die _("Can't find item %1", $id) unless $item->id;
121
122 title is $item->name;
123
124 render_region(
125 name => 'item-' . $item->id,
126 path => $self->fragment_for('view'),
127 defaults => { id => $item->id, object_type => $self->object_type }
128 );
129
130 };
131
132 private template 'paging_top' => sub {
133 my $self = shift;
134 my $collection = shift;
135 my $page = shift || 1;
136
137 if ( $collection->pager->last_page > 1 ) {
138 span {
139 { class is 'page-count' };
140 outs(
141 _( "Found %1 units, showing %2-%3 on page %4/%5",
142 $collection->pager->total_entries,
143 $collection->pager->first,
144 $collection->pager->last,
145 $page,
146 $collection->pager->last_page
147 )
148 );
149 }
150 }
151 show( './paging_bottom', $collection, $page );
152 };
153
154 private template paging_bottom => sub {
155 my $self = shift;
156 my $collection = shift;
157 my $page = shift || 0;
158 div {
159 { class is 'paging' };
160 if ( $collection->pager->previous_page ) {
161 span {
162 hyperlink(
163 label => _("Previous Page"),
164 onclick => {
165 args => { page => $collection->pager->previous_page }
166 }
167 );
168 }
169 }
170
171 my ( $f_p, $t_p ) = ( '...', '...' );
172
173 my $from = $page - 15;
174 if ( $from < 0 ) {
175 $from = $collection->pager->first_page;
176 $f_p = '';
177 }
178 my $to = $page + 15;
179 if ( $to > $collection->pager->last_page ) {
180 $to = $collection->pager->last_page;
181 $t_p = '';
182 }
183
184 outs $f_p;
185
186 foreach my $p ( $from .. $to ) {
187 if ( $p == $page ) {
188 b { $p }
189 } else {
190 span {
191 hyperlink(
192 label => $p,
193 onclick =>
194 { args => { page => $p } }
195 );
196 }
197 }
198 }
199
200 outs $t_p;
201
202 if ( $collection->pager->next_page ) {
203 span {
204 hyperlink(
205 label => _("Next Page"),
206 onclick =>
207 { args => { page => $collection->pager->next_page } }
208 );
209 }
210 }
211 };
212 };
213
214
215 template 'view' => sub :CRUDView {
216 my $self = shift;
217 my $id = get('id');
218 my $record = $self->_get_record( $id );
219
220 my $update = $record->as_update_action(
221 moniker => "update-" . Jifty->web->serial,
222 );
223
224 my $delete = $record->as_delete_action(
225 moniker => "delete-" . Jifty->web->serial,
226 );
227 my $editing = $record->current_user_can('write');
228 warn "## current_user_can('write') = $editing\n";
229 $editing = 0 unless $self->current_user->editing;
230 warn "## editing ",$editing ? 'ok' : 'DENIED';
231
232 div { { class is 'unit' }
233
234 if ( $editing ) {
235 form {
236 outs_raw($delete->button(
237 label => _('Delete unit'),
238 class => 'float-crud-button button-delete',
239 onclick => {
240 submit => $delete,
241 confirm => _('Really delete?'),
242 # region => Jifty->web->current_region,
243 replace_with => '/__jifty/empty',
244 refresh_self => 1,
245 args => { id => $id },
246 },
247 ));
248 }
249 };
250
251 foreach my $f ( $self->display_columns ) {
252 if ( $f eq 'material' ) {
253 set( search_collection => $record->material );
254 render_region(
255 name => 'unit-materials',
256 path => '/materials/list',
257 defaults => {
258 page => 1,
259 unit => $record->id,
260 }
261 );
262 } else {
263 my %opt;
264 if ( ! $editing ) {
265 $opt{render_mode} = 'read';
266 # skip fields without values
267 $opt{render_as} = 'hidden' if ! defined( $update->record->$f );
268 }
269 render_param( $update => $f, %opt );
270 }
271 };
272 if ( $editing ) {
273 div {
274 { class is 'submit_button' };
275 hyperlink(
276 label => _('Update'),
277 onclick => {
278 submit => $update,
279 refresh_self => 1,
280 },
281 );
282 }
283 }
284
285 }; # div class unit
286
287 show('/unitpictures/fragment', $record);
288
289 hr {};
290 };
291
292 template 'new_item' => sub {
293 my $self = shift;
294 return unless $self->current_user->editing;
295
296 my ( $object_type, $id ) = ( $self->object_type, get('id') );
297 my $record_class = $self->record_class;
298 my $create = $record_class->as_create_action;
299
300 h1 { _("New unit") };
301
302 div {
303
304 foreach my $f ( $self->display_columns ) {
305 # last if $f eq 'material' && ! $id;
306 render_param( $create => $f ) unless $f eq 'material';
307 #warn "## $f";
308 }
309
310 div {
311 { class is 'submit_button' };
312 hyperlink(
313 label => _("Add"),
314 onclick => [
315 {
316 submit => $create,
317 # args => {
318 # },
319 },
320 { refresh_self => 1 },
321 {
322 element => Jifty->web->current_region->parent->get_element( 'div.list' ),
323 append => $self->fragment_for('view'),
324 args => {
325 object_type => $object_type,
326 id => { result_of => $create, name => 'id' },
327 unit => get('unit'),
328 },
329 },
330 ],
331 as_button => 1,
332 );
333 };
334
335 };
336 };
337
338 1;

  ViewVC Help
Powered by ViewVC 1.1.26