1 |
8 |
ahitrov@rambler.ru |
<& "/contenido/components/header.msn", title => 'Настройка '.$PROTOS->{$proto}->[0] &> |
2 |
|
|
|
3 |
|
|
<br> |
4 |
|
|
<table border="0" style="font-size:85%;" width="80%"> |
5 |
|
|
<tr> |
6 |
|
|
<td width="10"></td> |
7 |
|
|
<td> |
8 |
|
|
<div style="font-size:130%;">Настройка <% $PROTOS->{$proto}->[0] %></div> |
9 |
|
|
<br> |
10 |
|
|
Ниже приведены все поля, которые вы можете настроить в классе <% $PROTOS->{$proto}->[1] %> "<% $class %>". |
11 |
|
|
Заполните нижеследующие поля и нажмите кнопку [сохранить].<br><br> |
12 |
|
|
|
13 |
|
|
При редактировании значений селектов действует следующее правило - одна строка содержит в себе один вариант для выбора. |
14 |
|
|
Каждый список объектов характеризуется двумя полями - начальной секцией и набором классов для оборажения. |
15 |
|
|
</td> |
16 |
|
|
</tr> |
17 |
|
|
|
18 |
|
|
<tr><td height="20"></td></tr> |
19 |
|
|
|
20 |
|
|
% if (($class) && (ref($object))) |
21 |
|
|
% { |
22 |
|
|
|
23 |
|
|
<tr><td></td> |
24 |
|
|
<td> |
25 |
|
|
<div style="font-size:130%;">Настройка <% $PROTOS->{$proto}->[1] %> "<% $object->class_name %>" (<% $class %>)</div> |
26 |
|
|
<% $object->class_description() %> |
27 |
|
|
</td> |
28 |
|
|
</tr> |
29 |
|
|
|
30 |
|
|
<form action="./tuning.html" method="post"> |
31 |
|
|
<input type="hidden" name="control_charset" value="Контроль"> |
32 |
|
|
<input type="hidden" name="proto" value="<% $proto %>"> |
33 |
|
|
<input type="hidden" name="class" value="<% $class %>"> |
34 |
|
|
|
35 |
|
|
<tr><td height="20"></td></tr> |
36 |
|
|
<tr> |
37 |
|
|
<td></td><td> |
38 |
|
|
<& "/contenido/components/selects.msn", object=>$object, options=>$options &> |
39 |
|
|
</td> |
40 |
|
|
</tr> |
41 |
|
|
|
42 |
|
|
% if ($proto eq 'links') { |
43 |
|
|
<tr><td height="20"></td></tr> |
44 |
|
|
<tr> |
45 |
|
|
<td></td><td> |
46 |
|
|
<& "/contenido/components/link_source_id.msn", object=>$object, options=>$options &> |
47 |
|
|
</td> |
48 |
|
|
</tr> |
49 |
|
|
% } |
50 |
|
|
|
51 |
|
|
<tr><td height="20"></td></tr> |
52 |
|
|
<tr> |
53 |
|
|
<td></td><td> |
54 |
|
|
<& "/contenido/components/obj_lists.msn", object=>$object, options=>$options &> |
55 |
|
|
</td> |
56 |
|
|
</tr> |
57 |
|
|
|
58 |
|
|
<tr><td></td><td> |
59 |
|
|
<input type="submit" value="Сохранить изменения" style="font-size:13pt;font-weight:bold; height:40px;margin-bottom: 5px; background-color:#930300;color:#FFFFFF;"> |
60 |
|
|
<input type="hidden" name="save" value="1"> |
61 |
|
|
</td></tr> |
62 |
|
|
</form> |
63 |
|
|
|
64 |
|
|
% } |
65 |
|
|
|
66 |
|
|
</table> |
67 |
|
|
</body> |
68 |
|
|
</html> |
69 |
|
|
<%ARGS> |
70 |
|
|
|
71 |
|
|
$proto => undef |
72 |
|
|
$class => undef |
73 |
|
|
$save => undef |
74 |
|
|
|
75 |
|
|
</%ARGS> |
76 |
|
|
<%INIT> |
77 |
|
|
|
78 |
|
|
use vars qw($keeper $request); |
79 |
|
|
|
80 |
|
|
my $PROTOS = { |
81 |
|
|
'documents' => ['документов','документа'], |
82 |
|
|
'sections' => ['секций','секции'], |
83 |
|
|
'links' => ['связей','связи'], |
84 |
|
|
'users' => ['пользователей','пользователя'], |
85 |
|
|
'locals' => ['локальных модулей', 'локального модуля'], |
86 |
|
|
}; |
87 |
|
|
if (! exists($PROTOS->{$proto})) |
88 |
|
|
{ |
89 |
|
|
$proto = 'documents'; |
90 |
|
|
} |
91 |
|
|
|
92 |
|
|
# Проверка корректности класса... |
93 |
|
|
my @correct_classes = @{ $state->{'available_'.$proto} }; |
94 |
|
|
if (! (grep { $_ eq $class } @correct_classes)) |
95 |
|
|
{ |
96 |
|
|
# Класс задан, но он не корректный |
97 |
|
|
$class = undef; |
98 |
|
|
} |
99 |
|
|
my $options; |
100 |
|
|
my $object; |
101 |
|
|
|
102 |
|
|
|
103 |
|
|
# Сохранение изменений!!! |
104 |
|
|
if (($save == 1) && ($class)) |
105 |
|
|
{ |
106 |
|
|
my $toopi = $project->$proto(); |
107 |
|
|
if ((ref($toopi) eq 'HASH') && (exists($toopi->{$class})) ) |
108 |
|
|
{ |
109 |
|
|
$options = $toopi->{ $class }; |
110 |
|
|
} else { |
111 |
|
|
$options = {}; |
112 |
|
|
} |
113 |
|
|
|
114 |
|
|
$request->{local_codepage} = 'UTF8'; |
115 |
|
|
$request->{local_codepage} = 'WIN' if Convert::Cyrillic::cstocs('WIN', 'UTF8', $ARGS{control_charset}) eq 'Контроль'; |
116 |
|
|
$request->{local_codepage} = 'KOI8' if Convert::Cyrillic::cstocs('KOI8', 'UTF8', $ARGS{control_charset}) eq 'Контроль'; |
117 |
|
|
warn "Contenido Debug: Форма для редактирования описания объекта пришла в кодировке ".$request->{local_codepage}."\n" if ($state->debug()); |
118 |
|
|
|
119 |
|
|
foreach my $attr (keys(%ARGS)) |
120 |
|
|
{ |
121 |
|
|
if ($attr =~ /^(.+)\.selectdata$/) |
122 |
|
|
{ |
123 |
|
|
my $local_select = $1; |
124 |
|
|
my @local_values = split(/\n/, $m->comp('/contenido/components/filter.msn', str => $ARGS{$attr} )); |
125 |
|
|
$options->{$local_select} = \@local_values; |
126 |
|
|
} |
127 |
|
|
} |
128 |
|
|
|
129 |
|
|
foreach my $attr (keys(%ARGS)) |
130 |
|
|
{ |
131 |
|
|
if ($attr =~ /^(.+)\.obj_list_root$/) |
132 |
|
|
{ |
133 |
|
|
my $local_obj_list = $1; |
134 |
|
|
my $local_value = $ARGS{$attr}; |
135 |
|
|
$options->{$local_obj_list}->[0] = $local_value; |
136 |
|
|
} |
137 |
|
|
elsif ($attr =~ /^(.+)\.obj_list_classes$/) |
138 |
|
|
{ |
139 |
|
|
my $local_obj_list = $1; |
140 |
|
|
my @local_values = (); |
141 |
|
|
if (ref($ARGS{$attr}) eq 'ARRAY') |
142 |
|
|
{ |
143 |
|
|
@local_values = @{ $ARGS{$attr} }; |
144 |
|
|
} else { |
145 |
|
|
@local_values = ( $ARGS{$attr} ); |
146 |
|
|
} |
147 |
|
|
$options->{ $local_obj_list }->[1] = join(',',@local_values); |
148 |
|
|
} |
149 |
|
|
} |
150 |
|
|
$toopi->{ $class } = $options; |
151 |
|
|
$project->$proto($toopi); |
152 |
|
|
$project->store($keeper); |
153 |
|
|
} |
154 |
|
|
|
155 |
|
|
|
156 |
|
|
if ($class) |
157 |
|
|
{ |
158 |
|
|
$object = new $class ($keeper); |
159 |
|
|
my $toopi = $project->$proto(); |
160 |
|
|
if ((ref($toopi) eq 'HASH') && (exists($toopi->{$class})) ) |
161 |
|
|
{ |
162 |
|
|
$options = $toopi->{ $class }; |
163 |
|
|
} else { |
164 |
|
|
$options = {}; |
165 |
|
|
} |
166 |
|
|
} |
167 |
|
|
|
168 |
|
|
</%INIT> |