Line # Revision Author
1 8 ahitrov@rambler.ru <!-- Форма для редактирования объекта -->
2 <a name="top"></a>
3 374 ahitrov
4 % if ( $m->comp_exists ('/contenido/components/object_context_form.msn') ) {
5 <div style="text-align:right;"><& '/contenido/components/object_context_form.msn', object => $object &></div>
6 % }
7
8 440 ahitrov <form enctype="multipart/form-data" action="<% $PROTOS->{$proto}->[1] %>" method="POST" name="form" onSubmit="return Save(this)">
9 8 ahitrov@rambler.ru <table border="0" width="100%" cellspacing="0" cellpadding="6">
10 <tr>
11 <td style="font-size:110%;">
12 <b><% (ref($object) && $object->id() ) ? 'Редактирование' : 'Создание' %> <% $PROTOS->{$proto}->[0] %> типа "<% $object->class_name() %>"</b>
13 645 ahitrov % if ( $object->get_url ) {
14 646 ahitrov <div style="margin-top:5px; font-size:85%;">Ссылка: <a href="<% $object->get_url %>" target="_blank"><% $object->get_url %></a></div>
15 645 ahitrov % }
16 8 ahitrov@rambler.ru </td>
17 <td align="right">
18 % unless ( $proto eq 'sections' && $object->id == 1 ) {
19 <input type="submit" value="Сохранить" class="input_btn">
20 % if (( $proto eq 'documents' ) || ( $proto eq 'sections' )) {
21 <input type="submit" name="_save_and_leave" value="Сохранить и выйти" class="input_btn">
22 <input type="submit" name="_save_and_again" value="Сохранить и создать новый" class="input_btn">
23 % }
24 % }
25 </td>
26 </tr>
27 </table>
28
29 % if ( $m->comp_exists ('/contenido/components/object_context_menu.msn') ) {
30 <div style="text-align:right;"><& '/contenido/components/object_context_menu.msn', object => $object &></div>
31 % }
32
33 <center>
34 <table width="100%" cellpadding="0" cellspacing="0" border="0">
35 <tr>
36 <td bgcolor="#999999">
37 <table width="100%" cellpadding="0" cellspacing="1" border="0">
38 <tr><td valign="top" width="80%" bgcolor="#ffffff">
39 <center>
40 <table width="98%" cellpadding="1" cellspacing="0" border="0">
41
42 <%perl>
43
44 my @properties = $object->structure();
45
46 for (0..$#properties)
47 {
48
49 my $prop = $properties[$_];
50 271 ahitrov my $name = $prop->{attr};
51 528 ahitrov next if ($prop->{hidden} == 1) || ($prop->{type} eq 'external') || ($prop->{type} =~ /^array/i) || ($prop->{type} =~ /^image/) || ($prop->{type} eq 'multimedia') || ($prop->{type} eq 'multimedia_new') || ($prop->{type} eq 'multimedia_multi') || ($prop->{type} eq 'audio');
52 8 ahitrov@rambler.ru
53 </%perl>
54 <tr><td height="8"></td></tr>
55 <tr><td nowrap>
56 <table cellpadding="0" cellspacing="0" border="0">
57 <tr>
58 493 ahitrov % if ( $prop->{type} eq 'flag' || $prop->{type} eq 'checkbox' ) {
59 271 ahitrov <td><& "/contenido/components/inputs/checkbox.msn", prop => $prop, object=>$object, options=>$options, name => $name, check => ($object->$name || $object->{$name}), id => $object->id() &></td>
60 8 ahitrov@rambler.ru % }
61 <td nowrap><b><% $prop->{rusname} %></b>&nbsp;/</td>
62 <td align="right" nowrap><font color="#888888" size="-1">&nbsp;name="<% $prop->{attr} %>"</font></td>
63 493 ahitrov % if ( $prop->{readonly} ) {
64 8 ahitrov@rambler.ru <td align="right" nowrap>&nbsp;/&nbsp;<font color="#CC0000" size="-1">Значение нельзя изменить</font></td>
65 % }
66 </tr>
67 </table>
68 </td></tr>
69 418 ahitrov % if ($prop->{type} eq 'parent') {
70 271 ahitrov <tr><td><& "/contenido/components/inputs/$prop->{type}.msn", prop => $prop, object=>$object, options=>$options, name => $name, check => ($object->$name || $prop->{default} || $sect_id ), id => $object->id() &></td></tr>
71 418 ahitrov % } elsif( ( $prop->{type} ne 'flag' ) && ($prop->{type} ne 'checkbox') ) {
72 % if ( $m->comp_exists( "/contenido/components/inputs/$prop->{type}.msn" ) ) {
73 271 ahitrov <tr><td><& "/contenido/components/inputs/$prop->{type}.msn", prop => $prop, object=>$object, options => $options, name => $name, check => ($object->$name || $object->{$name}), id => ($object->id() || 0) &></td></tr>
74 418 ahitrov % } else {
75 <tr><td style="color:red">Попытка вызвать компоненту неизвестного типа (<% Dumper $prop %>)</td></tr>
76 % }
77 8 ahitrov@rambler.ru % }
78 493 ahitrov % if ( exists $prop->{rem} && $prop->{rem} ) {
79 <tr><td><div style="color:gray; font-size:85%; padding:4px">&raquo; <% $prop->{rem} %></div></td></tr>
80 % }
81 8 ahitrov@rambler.ru % }
82 <tr>
83 <td><br>
84
85 % for (0..$#properties)
86 % {
87 % my $prop = $properties[$_];
88 % next if ($prop->{hidden} != 1);
89 % next if ($prop->{attr} eq 'id' && $clone);
90 <input type="hidden" name="<% $prop->{attr} %>" value="<% html_escape($object->{ $prop->{attr} }) %>">
91 % }
92 <input type="hidden" name="sect_id" value="<% $sect_id %>">
93 %#если класса в свойствах обьекта нет все равно надо его пробросить как hidden
94 % unless (grep {$_->{attr} eq 'class'} @properties) {
95 <input type="hidden" name="class" value="<% html_escape($object->{class}) %>">
96 % }
97 % if ( $clone ) {
98 <input type="hidden" name="clone" value="<% $object->id %>">
99 % }
100 <input type="hidden" name="save" value="1">
101
102 </td>
103 </tr>
104 </table>
105 </center>
106
107 </td>
108 <td valign="top" bgcolor="#efefef">
109 <div style="width:270px"><spacer type="block" width="270"></div>
110 <div><iframe name="DocFinder" id="DocFinder" src="/contenido/find_document.html" frameborder="0"
111 marginheight="0" marginwidth="0" width="100%" height="0"></iframe></div>
112 <table cellpadding="5" cellspacing="0" border="0"><tr><td>
113 117 ahitrov <p><b style="font-size:15px;"><nobr>Мультимедиа-объекты</nobr> к&nbsp;<% $PROTOS->{$proto}->[2] %></b></p>
114 8 ahitrov@rambler.ru
115 % for (0..$#properties)
116 % {
117 % my $prop = $properties[$_];
118 568 ahitrov % next if exists $prop->{hidden} && $prop->{hidden};
119 8 ahitrov@rambler.ru %
120 % if ($prop->{type} eq 'image')
121 % {
122 % my $IMAGE = $object->get_image( $prop->{attr} );
123 % if (ref($IMAGE) ne 'HASH') { next };
124 <& "/contenido/components/inputs/image.msn",
125 IMAGE => $IMAGE,
126 rusname => $prop->{rusname},
127 prop => $prop, object=>$object,
128 attr => $prop->{attr},
129 options => $options,
130 &>
131
132 % } elsif ($prop->{type} eq 'images')
133 % {
134 % my $IMAGES = $object->get_image( $prop->{attr} );
135 % if (ref($IMAGES) ne 'HASH') { next };
136 % my $MN = $IMAGES->{maxnumber}+0;
137 % for my $mn (1..$MN)
138 % {
139 % my $IMAGE = $IMAGES->{'image_'.$mn};
140
141 <& "/contenido/components/inputs/image.msn",
142 rusname => $prop->{rusname},
143 prop => $prop, object=>$object,
144 attr => $prop->{attr}.'_'.$mn,
145 IMAGE => $IMAGE,
146 options => $options,
147 649 ahitrov &>
148 8 ahitrov@rambler.ru
149 % }
150 63 ahitrov@rambler.ru % my $ME = exists $prop->{empty_slots} ? $prop->{empty_slots} : 5;
151 % $ME = ($ME + $IMAGES->{maxnumber}) >= 100 ? 0 : (100 - $IMAGES->{maxnumber} < $ME ? 100 - $IMAGES->{maxnumber} : $ME );
152 % for my $mn (1..$ME)
153 8 ahitrov@rambler.ru % {
154
155
156 <& "/contenido/components/inputs/image.msn",
157 IMAGE => {},
158 rusname => $prop->{rusname},
159 prop => $prop, object=>$object,
160 attr => $prop->{attr}.'_'.($MN+$mn),
161 options => $options,
162 649 ahitrov &>
163 8 ahitrov@rambler.ru
164 % }
165 649 ahitrov % } elsif ($prop->{type} eq 'multimedia') {
166 8 ahitrov@rambler.ru % my $MULTI = $object->get_image( $prop->{attr} );
167
168 <& "/contenido/components/inputs/multimedia.msn",
169 rusname => $prop->{rusname},
170 prop => $prop, object=>$object,
171 attr => $prop->{attr},
172 MULTI => $MULTI,
173 options => $options,
174 649 ahitrov &>
175 347 ahitrov % } elsif ($prop->{type} eq 'multimedia_new') {
176 8 ahitrov@rambler.ru % my $MULTI = $object->get_image( $prop->{attr} );
177
178 <& "/contenido/components/inputs/multimedia_new.msn",
179 rusname => $prop->{rusname},
180 prop => $prop, object=>$object,
181 attr => $prop->{attr},
182 MULTI => $MULTI,
183 options => $options,
184 649 ahitrov &>
185 347 ahitrov
186 % } elsif ($prop->{type} eq 'multimedia_multi') {
187 % my $FILES = $object->get_image( $prop->{attr} );
188 % if (ref($FILES) ne 'HASH') { next };
189 % my $MN = $FILES->{maxnumber}+0;
190 % for my $mn (1..$MN) {
191 % my $MULTI = $FILES->{'file_'.$mn};
192 <& "/contenido/components/inputs/multimedia_new.msn",
193 rusname => $prop->{rusname},
194 prop => $prop, object=>$object,
195 attr => $prop->{attr}.'_'.$mn,
196 MULTI => $MULTI,
197 options => $options,
198 &>
199
200 % }
201 % my $ME = exists $prop->{empty_slots} ? $prop->{empty_slots} : 3;
202 % $ME = ($ME + $FILES->{maxnumber}) >= 100 ? 0 : (100 - $FILES->{maxnumber} < $ME ? 100 - $FILES->{maxnumber} : $ME );
203 % for my $mn (1..$ME) {
204
205 <& "/contenido/components/inputs/multimedia_new.msn",
206 rusname => $prop->{rusname},
207 649 ahitrov prop => $prop, object=>$object,
208 347 ahitrov attr => $prop->{attr}.'_'.($MN+$mn),
209 MULTI => {},
210 options => $options,
211 &>
212
213 649 ahitrov % }
214 347 ahitrov % } elsif ($prop->{type} eq 'audio') {
215 8 ahitrov@rambler.ru % my $MULTI = $object->get_image( $prop->{attr} );
216
217 <& "/contenido/components/inputs/audio.msn",
218 rusname => $prop->{rusname},
219 prop => $prop, object=>$object,
220 attr => $prop->{attr},
221 MULTI => $MULTI,
222 options => $options,
223 &>
224 % }
225 % }
226
227 </table>
228 </td></tr></table>
229
230
231 </td></tr>
232 </table>
233
234 </td></tr></table>
235 </center>
236
237 <script>
238 <!--
239 function updateList(theFild,value,text) {
240 for (var i = 0; i < theFild.options.length; i++) {
241 if (theFild.options[i].value == value) {
242 return false;
243 }
244 }
245 var option_length = theFild.options.length++;
246 eval("theFild.options[option_length].value=value");
247 eval("theFild.options[option_length].text=text");
248
249 Save(); this.form.submit();
250
251 }
252 //-->
253 </script>
254
255 % unless ( $proto eq 'sections' && $object->id == 1 ) {
256 <div align="center"><input type="submit" value="Сохранить" class="input_btn">
257 %# <input type="submit" value="Сохранить изменения в <% $PROTOS->{$proto}->[3] %>" class="input_btn">
258
259 %#
260 %# Как же сохранять эти гребанные связи?
261 %# onClick="javascript:updateList(parent.opener.links.links,'link_6_20_DefaultLink','test');"
262 %#
263
264
265 % if ($object->id > 0 && !$clone) {
266 <input name="delete" type="button" value="Удалить" onClick="javascript:window.location='confirm.html?id=<% $object->id() %>&action=<% $proto %>_deletion&class=<% $object->class() %>'" class="input_btn">\
267 % }
268 % if ( ref $filter_params eq 'HASH' ) {
269 % while ( my ($key, $value) = each %$filter_params ) {
270 % next if grep { $_->{attr} eq $key } $object->structure();
271 <input type="hidden" name="<% $key %>" value="<% $value %>">
272 % }
273 % }
274 <input type="hidden" name="control_charset" value="Контроль">
275 % if (( $proto eq 'documents' ) || ( $proto eq 'sections' )) {
276 <input type="submit" name="_save_and_leave" value="Сохранить и выйти" class="input_btn">
277 % unless ( $clone ) {
278 <input type="submit" name="_save_and_again" value="Сохранить и создать новый" class="input_btn">
279 % }
280 % }
281 </div>
282 % }
283 </form>
284
285 <%ARGS>
286
287 $proto => 'documents'
288 $object => undef
289 $clone => undef
290 $sect_id => 1
291 $filter_params => undef
292
293 </%ARGS>
294
295 <%ONCE>
296 my $PROTOS = {
297 'documents' => ['документа','document.html','документу','документе'],
298 'sections' => ['секции','section.html','секции','секции'],
299 'links' => ['связи','link.html','связи','связи'],
300 'users' => ['пользователя','users.html','пользователю','пользователе'],
301 };
302 </%ONCE>
303
304 <%INIT>
305 return undef unless ref($object);
306
307 my $toopi = $project->$proto();
308 my $options = {};
309 if ($toopi && (ref($toopi) eq 'HASH') && (exists($toopi->{ $object->class }))) {
310 %{ $options } = %{ $toopi->{ $object->class } };
311 }
312 117 ahitrov my $is_multimedia = scalar( grep { $_->{type} =~ /(image|multimedia|audio)/ } $object->structure );
313 my $is_pickup = scalar( grep { $_->{type} =~ /(pickup)/ } $object->structure );
314
315 8 ahitrov@rambler.ru </%INIT>