1 #=====================================================================
2 # SQL-Ledger Accounting
5 # Author: Dieter Simader
6 # Email: dsimader@sql-ledger.org
7 # Web: http://www.sql-ledger.org
10 # This program is free software; you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation; either version 2 of the License, or
13 # (at your option) any later version.
15 # This program is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with this program; if not, write to the Free Software
21 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 #======================================================================
24 # project administration
25 # partsgroup administration
26 # translation maintainance
28 #======================================================================
40 $form->{title} = "Add";
43 $form->{callback} = "$form->{script}?action=add&type=$form->{type}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}" unless $form->{callback};
45 &{ "$form->{type}_header" };
46 &{ "$form->{type}_footer" };
53 $form->{title} = "Edit";
55 &{ "PE::get_$form->{type}" }("", \%myconfig, \%$form);
56 &{ "$form->{type}_header" };
57 &{ "$form->{type}_footer" };
64 if ($form->{type} eq 'project') {
65 $report = "project_report";
66 $sort = 'projectnumber';
67 $form->{title} = $locale->text('Projects');
71 <th align=right width=1%>|.$locale->text('Number').qq|</th>
72 <td><input name=projectnumber size=20></td>
75 <th align=right>|.$locale->text('Description').qq|</th>
76 <td><input name=description size=60></td>
81 if ($form->{type} eq 'partsgroup') {
82 $report = "partsgroup_report";
84 $form->{title} = $locale->text('Groups');
88 <th align=right width=1%>|.$locale->text('Group').qq|</th>
89 <td><input name=partsgroup size=20></td>
94 if ($form->{type} eq 'pricegroup') {
95 $report = "pricegroup_report";
97 $form->{title} = $locale->text('Pricegroups');
101 <th align=right width=1%>|.$locale->text('Pricegroup').qq|</th>
102 <td><input name=pricegroup size=20></td>
114 <form method=post action=$form->{script}>
116 <input type=hidden name=sort value=$sort>
117 <input type=hidden name=type value=$form->{type}>
121 <th class=listtop>$form->{title}</th>
130 <td><input name=status class=radio type=radio value=all checked> |.$locale->text('All').qq|
131 <input name=status class=radio type=radio value=orphaned> |.$locale->text('Orphaned').qq|</td>
137 <td><hr size=3 noshade></td>
141 <input type=hidden name=nextsub value=$report>
143 <input type=hidden name=path value=$form->{path}>
144 <input type=hidden name=login value=$form->{login}>
145 <input type=hidden name=sessionid value=$form->{sessionid}>
148 <input class=submit type=submit name=action value="|.$locale->text('Continue').qq|">
161 map { $form->{$_} = $form->unescape($form->{$_}) } (projectnumber, description);
162 PE->projects(\%myconfig, \%$form);
164 $href = "$form->{script}?action=project_report&direction=$form->{direction}&oldsort=$form->{oldsort}&type=$form->{type}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}";
168 $callback = "$form->{script}?action=project_report&direction=$form->{direction}&oldsort=$form->{oldsort}&type=$form->{type}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}";
170 if ($form->{status} eq 'all') {
171 $option = $locale->text('All');
173 if ($form->{status} eq 'orphaned') {
174 $option .= $locale->text('Orphaned');
176 if ($form->{projectnumber}) {
177 $href .= "&projectnumber=".$form->escape($form->{projectnumber});
178 $callback .= "&projectnumber=$form->{projectnumber}";
179 $option .= "\n<br>".$locale->text('Project')." : $form->{projectnumber}";
181 if ($form->{description}) {
182 $href .= "&description=".$form->escape($form->{description});
183 $callback .= "&description=$form->{description}";
184 $option .= "\n<br>".$locale->text('Description')." : $form->{description}";
188 @column_index = $form->sort_columns(qw(projectnumber description));
190 $column_header{projectnumber} = qq|<th><a class=listheading href=$href&sort=projectnumber>|.$locale->text('Number').qq|</a></th>|;
191 $column_header{description} = qq|<th><a class=listheading href=$href&sort=description>|.$locale->text('Description').qq|</a></th>|;
193 $form->{title} = $locale->text('Projects');
202 <th class=listtop>$form->{title}</th>
211 <tr class=listheading>
214 map { print "$column_header{$_}\n" } @column_index;
221 $form->{callback} = $callback .= "&sort=$form->{sort}";
223 # escape callback for href
224 $callback = $form->escape($callback);
226 foreach $ref (@{ $form->{project_list} }) {
231 <tr valign=top class=listrow$i>
234 $column_data{projectnumber} = qq|<td><a href=$form->{script}?action=edit&type=$form->{type}&status=$form->{status}&id=$ref->{id}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{projectnumber}</td>|;
235 $column_data{description} = qq|<td>$ref->{description} </td>|;
237 map { print "$column_data{$_}\n" } @column_index;
245 if ($myconfig{acs} !~ /Projects--Projects/) {
246 $button{'Projects--Add Project'}{code} = qq|<input class=submit type=submit name=action value="|.$locale->text('Add Project').qq|"> |;
247 $button{'Projects--Add Project'}{order} = $i++;
249 foreach $item (split /;/, $myconfig{acs}) {
250 delete $button{$item};
259 <td><hr size=3 noshade></td>
264 <form method=post action=$form->{script}>
266 <input name=callback type=hidden value="$form->{callback}">
268 <input type=hidden name=type value=$form->{type}>
270 <input type=hidden name=path value=$form->{path}>
271 <input type=hidden name=login value=$form->{login}>
272 <input type=hidden name=sessionid value=$form->{sessionid}>
275 foreach $item (sort { $a->{order} <=> $b->{order} } %button) {
279 if ($form->{menubar}) {
280 require "$form->{path}/menu.pl";
296 $form->{title} = $locale->text("$form->{title} Project");
298 # $locale->text('Add Project')
299 # $locale->text('Edit Project')
301 $form->{description} = $form->quote($form->{description});
303 if (($rows = $form->numtextrows($form->{description}, 60)) > 1) {
304 $description = qq|<textarea name="description" rows=$rows cols=60 style="width: 100%" wrap=soft>$form->{description}</textarea>|;
306 $description = qq|<input name=description size=60 value="$form->{description}">|;
314 <form method=post action=$form->{script}>
316 <input type=hidden name=id value=$form->{id}>
317 <input type=hidden name=type value=project>
321 <th class=listtop>$form->{title}</th>
328 <th align=right>|.$locale->text('Number').qq|</th>
329 <td><input name=projectnumber size=20 value="$form->{projectnumber}"></td>
332 <th align=right>|.$locale->text('Description').qq|</th>
333 <td>$description</td>
339 <td colspan=2><hr size=3 noshade></td>
351 <input name=callback type=hidden value="$form->{callback}">
353 <input type=hidden name=path value=$form->{path}>
354 <input type=hidden name=login value=$form->{login}>
355 <input type=hidden name=sessionid value=$form->{sessionid}>
359 if ($myconfig{acs} !~ /Projects--Add Project/) {
361 <input type=submit class=submit name=action value="|.$locale->text('Save').qq|">
364 if ($form->{id} && $form->{orphaned}) {
366 <input type=submit class=submit name=action value="|.$locale->text('Delete').qq|">|;
370 if ($form->{menubar}) {
371 require "$form->{path}/menu.pl";
387 if ($form->{type} eq 'project') {
388 $form->isblank("projectnumber", $locale->text('Project Number missing!'));
389 PE->save_project(\%myconfig, \%$form);
390 $form->redirect($locale->text('Project saved!'));
392 if ($form->{type} eq 'partsgroup') {
393 $form->isblank("partsgroup", $locale->text('Group missing!'));
394 PE->save_partsgroup(\%myconfig, \%$form);
395 $form->redirect($locale->text('Group saved!'));
397 if ($form->{type} eq 'pricegroup') {
398 $form->isblank("pricegroup", $locale->text('Pricegroup missing!'));
399 PE->save_pricegroup(\%myconfig, \%$form);
400 $form->redirect($locale->text('Pricegroup saved!'));
402 if ($form->{translation}) {
403 PE->save_translation(\%myconfig, \%$form);
404 $form->redirect($locale->text('Translations saved!'));
412 if ($form->{translation}) {
413 PE->delete_translation(\%myconfig, \%$form);
414 $form->redirect($locale->text('Translation deleted!'));
418 PE->delete_tuple(\%myconfig, \%$form);
420 if ($form->{type} eq 'project') {
421 $form->redirect($locale->text('Project deleted!'));
423 if ($form->{type} eq 'partsgroup') {
424 $form->redirect($locale->text('Group deleted!'));
426 if ($form->{type} eq 'pricegroup') {
427 $form->redirect($locale->text('Pricegroup deleted!'));
434 sub continue { &{ $form->{nextsub} } };
437 sub partsgroup_report {
439 map { $form->{$_} = $form->unescape($form->{$_}) } (partsgroup);
440 PE->partsgroups(\%myconfig, \%$form);
442 $href = "$form->{script}?action=partsgroup_report&direction=$form->{direction}&oldsort=$form->{oldsort}&type=$form->{type}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}";
446 $callback = "$form->{script}?action=partsgroup_report&direction=$form->{direction}&oldsort=$form->{oldsort}&type=$form->{type}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}";
448 if ($form->{status} eq 'all') {
449 $option = $locale->text('All');
451 if ($form->{status} eq 'orphaned') {
452 $option .= $locale->text('Orphaned');
454 if ($form->{partsgroup}) {
455 $callback .= "&partsgroup=$form->{partsgroup}";
456 $option .= "\n<br>".$locale->text('Group')." : $form->{partsgroup}";
460 @column_index = $form->sort_columns(qw(partsgroup));
462 $column_header{partsgroup} = qq|<th><a class=listheading href=$href&sort=partsgroup width=90%>|.$locale->text('Group').qq|</a></th>|;
464 $form->{title} = $locale->text('Groups');
473 <th class=listtop>$form->{title}</th>
482 <tr class=listheading>
485 map { print "$column_header{$_}\n" } @column_index;
492 $form->{callback} = $callback;
494 # escape callback for href
495 $callback = $form->escape($callback);
497 foreach $ref (@{ $form->{item_list} }) {
502 <tr valign=top class=listrow$i>
505 $column_data{partsgroup} = qq|<td><a href=$form->{script}?action=edit&type=$form->{type}&status=$form->{status}&id=$ref->{id}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{partsgroup}</td>|;
506 map { print "$column_data{$_}\n" } @column_index;
514 if ($myconfig{acs} !~ /Goods \& Services--Goods \& Services/) {
515 $button{'Goods & Services--Add Group'}{code} = qq|<input class=submit type=submit name=action value="|.$locale->text('Add Group').qq|"> |;
516 $button{'Goods & Services--Add Group'}{order} = $i++;
518 foreach $item (split /;/, $myconfig{acs}) {
519 delete $button{$item};
528 <td><hr size=3 noshade></td>
533 <form method=post action=$form->{script}>
535 <input name=callback type=hidden value="$form->{callback}">
537 <input type=hidden name=type value=$form->{type}>
539 <input type=hidden name=path value=$form->{path}>
540 <input type=hidden name=login value=$form->{login}>
541 <input type=hidden name=sessionid value=$form->{sessionid}>
544 foreach $item (sort { $a->{order} <=> $b->{order} } %button) {
548 if ($form->{menubar}) {
549 require "$form->{path}/menu.pl";
563 sub partsgroup_header {
565 $form->{title} = $locale->text("$form->{title} Group");
567 # $locale->text('Edit Group')
569 $form->{partsgroup} = $form->quote($form->{partsgroup});
577 <form method=post action=$form->{script}>
579 <input type=hidden name=id value=$form->{id}>
580 <input type=hidden name=type value=$form->{type}>
584 <th class=listtop>$form->{title}</th>
591 <th align=right>|.$locale->text('Group').qq|</th>
593 <td><input name=partsgroup size=30 value="$form->{partsgroup}"></td>
599 <td colspan=2><hr size=3 noshade></td>
607 sub partsgroup_footer {
611 <input name=callback type=hidden value="$form->{callback}">
613 <input type=hidden name=path value=$form->{path}>
614 <input type=hidden name=login value=$form->{login}>
615 <input type=hidden name=sessionid value=$form->{sessionid}>
619 if ($myconfig{acs} !~ /Goods \& Services--Add Group/) {
621 <input type=submit class=submit name=action value="|.$locale->text('Save').qq|">
624 if ($form->{id} && $form->{orphaned}) {
626 <input type=submit class=submit name=action value="|.$locale->text('Delete').qq|">|;
630 if ($form->{menubar}) {
631 require "$form->{path}/menu.pl";
645 sub pricegroup_report {
647 map { $form->{$_} = $form->unescape($form->{$_}) } (pricegroup);
648 PE->pricegroups(\%myconfig, \%$form);
650 $href = "$form->{script}?action=pricegroup_report&direction=$form->{direction}&oldsort=$form->{oldsort}&type=$form->{type}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}";
654 $callback = "$form->{script}?action=pricegroup_report&direction=$form->{direction}&oldsort=$form->{oldsort}&type=$form->{type}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&status=$form->{status}";
656 if ($form->{status} eq 'all') {
657 $option = $locale->text('All');
659 if ($form->{status} eq 'orphaned') {
660 $option .= $locale->text('Orphaned');
662 if ($form->{pricegroup}) {
663 $callback .= "&pricegroup=$form->{pricegroup}";
664 $option .= "\n<br>".$locale->text('Pricegroup')." : $form->{pricegroup}";
668 @column_index = $form->sort_columns(qw(pricegroup));
670 $column_header{pricegroup} = qq|<th><a class=listheading href=$href&sort=pricegroup width=90%>|.$locale->text('Pricegroup').qq|</th>|;
672 $form->{title} = $locale->text('Pricegroups');
681 <th class=listtop>$form->{title}</th>
690 <tr class=listheading>
693 map { print "$column_header{$_}\n" } @column_index;
700 $form->{callback} = $callback;
702 # escape callback for href
703 $callback = $form->escape($callback);
705 foreach $ref (@{ $form->{item_list} }) {
710 <tr valign=top class=listrow$i>
713 $column_data{pricegroup} = qq|<td><a href=$form->{script}?action=edit&type=$form->{type}&status=$form->{status}&id=$ref->{id}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{pricegroup}</td>|;
714 map { print "$column_data{$_}\n" } @column_index;
722 if ($myconfig{acs} !~ /Goods \& Services--Goods \& Services/) {
723 $button{'Goods & Services--Add Pricegroup'}{code} = qq|<input class=submit type=submit name=action value="|.$locale->text('Add Pricegroup').qq|"> |;
724 $button{'Goods & Services--Add Pricegroup'}{order} = $i++;
726 foreach $item (split /;/, $myconfig{acs}) {
727 delete $button{$item};
736 <td><hr size=3 noshade></td>
741 <form method=post action=$form->{script}>
743 <input name=callback type=hidden value="$form->{callback}">
745 <input type=hidden name=type value=$form->{type}>
747 <input type=hidden name=path value=$form->{path}>
748 <input type=hidden name=login value=$form->{login}>
749 <input type=hidden name=sessionid value=$form->{sessionid}>
752 foreach $item (sort { $a->{order} <=> $b->{order} } %button) {
756 if ($form->{menubar}) {
757 require "$form->{path}/menu.pl";
771 sub pricegroup_header {
773 $form->{title} = $locale->text("$form->{title} Pricegroup");
775 # $locale->text('Edit Pricegroup')
777 $form->{pricegroup} = $form->quote($form->{pricegroup});
785 <form method=post action=$form->{script}>
787 <input type=hidden name=id value=$form->{id}>
788 <input type=hidden name=type value=$form->{type}>
792 <th class=listtop>$form->{title}</th>
799 <th align=right>|.$locale->text('Pricegroup').qq|</th>
801 <td><input name=pricegroup size=30 value="$form->{pricegroup}"></td>
807 <td colspan=2><hr size=3 noshade></td>
815 sub pricegroup_footer {
819 <input name=callback type=hidden value="$form->{callback}">
821 <input type=hidden name=path value=$form->{path}>
822 <input type=hidden name=login value=$form->{login}>
823 <input type=hidden name=sessionid value=$form->{sessionid}>
827 if ($myconfig{acs} !~ /Goods \& Services--Add Pricegroup/) {
829 <input type=submit class=submit name=action value="|.$locale->text('Save').qq|">
832 if ($form->{id} && $form->{orphaned}) {
834 <input type=submit class=submit name=action value="|.$locale->text('Delete').qq|">|;
838 if ($form->{menubar}) {
839 require "$form->{path}/menu.pl";
855 if ($form->{translation} eq 'description') {
856 $form->{title} = $locale->text('Description Translations');
857 $sort = qq|<input type=hidden name=sort value=partnumber>|;
858 $form->{number} = "partnumber";
861 <th align=right nowrap>|.$locale->text('Number').qq|</th>
862 <td><input name=partnumber size=20></td>
867 if ($form->{translation} eq 'partsgroup') {
868 $form->{title} = $locale->text('Group Translations');
869 $sort = qq|<input type=hidden name=sort value=partsgroup>|;
872 if ($form->{translation} eq 'project') {
873 $form->{title} = $locale->text('Project Description Translations');
874 $form->{number} = "projectnumber";
875 $sort = qq|<input type=hidden name=sort value=projectnumber>|;
878 <th align=right nowrap>|.$locale->text('Project Number').qq|</th>
879 <td><input name=projectnumber size=20></td>
890 <form method=post action=$form->{script}>
892 <input type=hidden name=translation value=$form->{translation}>
893 <input type=hidden name=title value="$form->{title}">
894 <input type=hidden name=number value=$form->{number}>
897 <tr><th class=listtop>$form->{title}</th></tr>
904 <th align=right nowrap>|.$locale->text('Description').qq|</th>
905 <td colspan=3><input name=description size=40></td>
910 <tr><td><hr size=3 noshade></td></tr>
913 <input type=hidden name=nextsub value=list_translations>
916 <input type=hidden name=path value=$form->{path}>
917 <input type=hidden name=login value=$form->{login}>
918 <input type=hidden name=sessionid value=$form->{sessionid}>
921 <input class=submit type=submit name=action value="|.$locale->text('Continue').qq|">
931 sub list_translations {
933 $title = $form->escape($form->{title},1);
935 $callback = "$form->{script}?action=list_translations&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&translation=$form->{translation}&number=$form->{number}&title=$title";
937 if ($form->{"$form->{number}"}) {
938 $callback .= qq|&$form->{number}=$form->{"$form->{number}"}|;
939 $option .= $locale->text('Number').qq| : $form->{"$form->{number}"}<br>|;
941 if ($form->{description}) {
942 $callback .= "&description=$form->{description}";
943 $description = $form->{description};
944 $description =~ s/
\r/<br>/g;
945 $option .= $locale->text('Description').qq| : $form->{description}<br>|;
948 if ($form->{translation} eq 'partsgroup') {
949 @column_index = qw(description language translation);
952 @column_index = $form->sort_columns("$form->{number}", "description", "language", "translation");
955 &{ "PE::$form->{translation}_translations" }("", \%myconfig, \%$form);
957 $callback .= "&direction=$form->{direction}&oldsort=$form->{oldsort}";
963 $callback =~ s/(direction=).*\&{1}/$1$form->{direction}\&/;
965 $column_header{"$form->{number}"} = qq|<th nowrap><a class=listheading href=$href&sort=$form->{number}>|.$locale->text('Number').qq|</a></th>|;
966 $column_header{description} = qq|<th nowrap width=40%><a class=listheading href=$href&sort=description>|.$locale->text('Description').qq|</a></th>|;
967 $column_header{language} = qq|<th nowrap class=listheading>|.$locale->text('Language').qq|</a></th>|;
968 $column_header{translation} = qq|<th nowrap width=40% class=listheading>|.$locale->text('Translation').qq|</a></th>|;
977 <th class=listtop>$form->{title}</th>
981 <tr><td>$option</td></tr>
986 <tr class=listheading>
989 map { print "\n$column_header{$_}" } @column_index;
996 # add order to callback
997 $form->{callback} = $callback .= "&sort=$form->{sort}";
999 # escape callback for href
1000 $callback = $form->escape($callback);
1002 if (@{ $form->{translations} }) {
1003 $sameitem = $form->{translations}->[0]->{$form->{sort}};
1006 foreach $ref (@{ $form->{translations} }) {
1008 $ref->{description} =~ s/
\r/<br>/g;
1010 map { $column_data{$_} = "<td>$ref->{$_} </td>" } @column_index;
1012 $column_data{description} = "<td><a href=$form->{script}?action=edit_translation&translation=$form->{translation}&number=$form->{number}&id=$ref->{id}&path=$form->{path}&login=$form->{login}&sessionid=$form->{sessionid}&callback=$callback>$ref->{description} </a></td>";
1015 print "<tr class=listrow$i>";
1017 map { print "\n$column_data{$_}" } @column_index;
1029 <tr><td><hr size=3 noshade></td></tr>
1038 <form method=post action=$form->{script}>
1040 <input name=callback type=hidden value="$form->{callback}">
1042 <input type=hidden name=path value=$form->{path}>
1043 <input type=hidden name=login value=$form->{login}>
1044 <input type=hidden name=sessionid value=$form->{sessionid}>
1047 if ($form->{menubar}) {
1048 require "$form->{path}/menu.pl";
1062 sub edit_translation {
1064 &{ "PE::$form->{translation}_translations" }("", \%myconfig, \%$form);
1066 $form->error($locale->text('Languages not defined!')) unless $form->{all_language};
1068 $form->{selectlanguage} = qq|<option>\n|;
1069 map { $form->{selectlanguage} .= qq|<option value="$_->{code}">$_->{description}\n| } @{ $form->{all_language} };
1071 $form->{"$form->{number}"} = $form->{translations}->[0]->{"$form->{number}"};
1072 $form->{description} = $form->{translations}->[0]->{description};
1073 $form->{description} =~ s/
\r/<br>/g;
1075 shift @{ $form->{translations} };
1078 foreach $row (@{ $form->{translations} }) {
1079 $form->{"language_code_$i"} = $row->{code};
1080 $form->{"translation_$i"} = $row->{translation};
1083 $form->{translation_rows} = $i - 1;
1085 $form->{title} = $locale->text('Edit Description Translations');
1087 &translation_header;
1088 &translation_footer;
1093 sub translation_header {
1095 $form->{translation_rows}++;
1097 $form->{selectlanguage} = $form->unescape($form->{selectlanguage});
1098 for ($i = 1; $i <= $form->{translation_rows}; $i++) {
1099 $form->{"selectlanguage_$i"} = $form->{selectlanguage};
1100 if ($form->{"language_code_$i"}) {
1101 $form->{"selectlanguage_$i"} =~ s/(<option value="\Q$form->{"language_code_$i"}\E")/$1 selected/;
1105 $form->{selectlanguage} = $form->escape($form->{selectlanguage},1);
1112 <form method=post action=$form->{script}>
1114 <input name=id type=hidden value=$form->{id}>
1115 <input name=trans_id type=hidden value=$form->{trans_id}>
1117 <input type=hidden name=selectlanguage value="$form->{selectlanguage}">
1118 <input type=hidden name=translation_rows value=$form->{translation_rows}>
1120 <input type=hidden name=number value=$form->{number}>
1121 <input type=hidden name=$form->{number} value="|.$form->quote($form->{"$form->{number}"}).qq|">
1122 <input type=hidden name=description value="|.$form->quote($form->{description}).qq|">
1124 <input type=hidden name=translation value=$form->{translation}>
1125 <input type=hidden name=title value="$form->{title}">
1127 <table width="100%">
1128 <tr><th class=listtop>$form->{title}</th></tr>
1129 <tr height="5"></tr>
1134 <td align=left>$form->{"$form->{number}"}</th>
1135 <td align=left>$form->{description}</th>
1139 <th class=listheading>|.$locale->text('Language').qq|</th>
1140 <th class=listheading>|.$locale->text('Translation').qq|</th>
1144 for ($i = 1; $i <= $form->{translation_rows}; $i++) {
1146 if (($rows = $form->numtextrows($form->{"translation_$i"}, 40)) > 1) {
1147 $translation = qq|<textarea name="translation_$i" rows=$rows cols=40 wrap=soft>$form->{"translation_$i"}</textarea>|;
1149 $translation = qq|<input name="translation_$i" size=40 value="$form->{"translation_$i"}">|;
1154 <td><select name="language_code_$i">$form->{"selectlanguage_$i"}</select></td>
1155 <td>$translation</td>
1165 <td><hr size=3 noshade></td>
1173 sub translation_footer {
1176 <input type=hidden name=path value=$form->{path}>
1177 <input type=hidden name=login value=$form->{login}>
1178 <input type=hidden name=sessionid value=$form->{sessionid}>
1180 <input type=hidden name=callback value="$form->{callback}">
1184 <input class=submit type=submit name=action value="|.$locale->text('Update').qq|">
1185 <input class=submit type=submit name=action value="|.$locale->text('Save').qq|">
1188 if ($form->{trans_id}) {
1190 <input class=submit type=submit name=action value="|.$locale->text('Delete').qq|">
1194 if ($form->{menubar}) {
1195 require "$form->{path}/menu.pl";
1212 @flds = qw(language translation);
1215 for $i (1 .. $form->{translation_rows}) {
1216 if ($form->{"language_code_$i"} ne "") {
1220 map { $a[$j]->{$_} = $form->{"${_}_$i"} } @flds;
1224 $form->redo_rows(\@flds, \@a, $count, $form->{translation_rows});
1225 $form->{translation_rows} = $count;
1227 &translation_header;
1228 &translation_footer;
1233 sub add_group { &add };
1234 sub add_project { &add };
1235 sub add_pricegroup { &add };