1 |
brianr |
1.1 |
diff -urN smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/Controller/Uservacations.pm smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/Controller/Uservacations.pm |
2 |
|
|
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/Controller/Uservacations.pm 1970-01-01 01:00:00.000000000 +0100 |
3 |
|
|
+++ smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/Controller/Uservacations.pm 2020-05-18 15:32:00.000000000 +0100 |
4 |
|
|
@@ -0,0 +1,370 @@ |
5 |
|
|
+package SrvMngr::Controller::Uservacations; |
6 |
|
|
+#---------------------------------------------------------------------- |
7 |
|
|
+# heading : Collaboration |
8 |
|
|
+# description : User Vacations |
9 |
|
|
+# navigation : 3000 3150 |
10 |
|
|
+# |
11 |
|
|
+# name : Uservacationsget, method : get, url : /uservacations, ctlact : Uservacations#main |
12 |
|
|
+# name : Uservacationspost,method : post, url : /Uservacations, ctlact : Uservacations#do_display |
13 |
|
|
+# name : Uservacations1, method : get, url : /Uservacations1, ctlact : Uservacations#do_display |
14 |
|
|
+# name : Uservacations2, method : post, url : /Uservacations2, ctlact : Uservacations#do_display |
15 |
|
|
+# routes : end |
16 |
|
|
+#---------------------------------------------------------------------- |
17 |
|
|
+ |
18 |
|
|
+use strict; |
19 |
|
|
+use warnings; |
20 |
|
|
+use Mojo::Base 'Mojolicious::Controller'; |
21 |
|
|
+ |
22 |
|
|
+#use DateTime; #Not part of SME10 mix |
23 |
|
|
+use POSIX; |
24 |
|
|
+ |
25 |
|
|
+use Locale::gettext; |
26 |
|
|
+use SrvMngr::I18N; |
27 |
|
|
+use SrvMngr qw(theme_list init_session_cgi); |
28 |
|
|
+ |
29 |
|
|
+use Data::Dumper; |
30 |
|
|
+use esmith::util; |
31 |
|
|
+use esmith::HostsDB; |
32 |
|
|
+use esmith::AccountsDB; |
33 |
|
|
+ |
34 |
|
|
+our $db = esmith::ConfigDB->open(); |
35 |
|
|
+our $adb = esmith::AccountsDB->open(); |
36 |
|
|
+ |
37 |
|
|
+our $PanelUser = $ENV{'REMOTE_USER'} ||''; |
38 |
|
|
+$PanelUser = $1 if ($PanelUser =~ /^([a-z][\.\-a-z0-9]*)$/); |
39 |
|
|
+ |
40 |
|
|
+our %delegatedVacations; |
41 |
|
|
+ |
42 |
|
|
+use constant FALSE => 0; |
43 |
|
|
+use constant TRUE => 1; |
44 |
|
|
+ |
45 |
|
|
+sub main { |
46 |
|
|
+ |
47 |
|
|
+ my $c = shift; |
48 |
|
|
+ $c->app->log->info( $c->log_req ); |
49 |
|
|
+ |
50 |
|
|
+ my %vac_datas = (); |
51 |
|
|
+ my $title = $c->l('vac_FORM_TITLE'); |
52 |
|
|
+ my $modul = ''; |
53 |
|
|
+ |
54 |
|
|
+ $vac_datas{trt} = 'LIST'; |
55 |
|
|
+ |
56 |
|
|
+ my @vacations = get_vacation_table($c); |
57 |
|
|
+ my $empty = (scalar @vacations == 0); |
58 |
|
|
+ |
59 |
|
|
+ $vac_datas{"first"} = 'vac_MODIFY_DESCRIPTION'; |
60 |
|
|
+ |
61 |
|
|
+ $c->stash( |
62 |
|
|
+ title => $title, |
63 |
|
|
+ modul => $modul, |
64 |
|
|
+ vac_datas => \%vac_datas, |
65 |
|
|
+ vacations =>\@vacations, |
66 |
|
|
+ empty => $empty |
67 |
|
|
+ ); |
68 |
|
|
+ $c->render( template => 'uservacations' ); |
69 |
|
|
+} |
70 |
|
|
+ |
71 |
|
|
+sub do_display { |
72 |
|
|
+ |
73 |
|
|
+ my $c = shift; |
74 |
|
|
+ $c->app->log->info( $c->log_req ); |
75 |
|
|
+ |
76 |
|
|
+ my $rt = $c->current_route; |
77 |
|
|
+ my $trt = ( $c->param('trt') || 'LIST' ); |
78 |
|
|
+ |
79 |
|
|
+ $trt = 'ADD' if ( $rt eq 'Uservacations1' ); |
80 |
|
|
+ $trt = 'ADD1' if ( $rt eq 'Uservacations2' ); |
81 |
|
|
+ |
82 |
|
|
+ my %vac_datas = (); |
83 |
|
|
+ my $title = $c->l('vac_FORM_TITLE'); |
84 |
|
|
+ my $modul = ''; |
85 |
|
|
+ |
86 |
|
|
+ |
87 |
|
|
+ if ( $trt eq 'ADD' ) { |
88 |
|
|
+ # Add or change a vacation message - called from the list panel |
89 |
|
|
+ # Get the data and pass it across. |
90 |
|
|
+ my $account = $c->param("account"); |
91 |
|
|
+ my $user = $adb->get($account); |
92 |
|
|
+ my $username = $user->prop("FirstName")." ".$user->prop("LastName"); |
93 |
|
|
+ my $EmailVacation = $user->prop('EmailVacation') || ''; |
94 |
|
|
+ my $EmailVacationFrom = $user->prop('EmailVacationFrom') || ''; |
95 |
|
|
+ my $EmailVacationTo = $user->prop('EmailVacationTo') || ''; |
96 |
|
|
+ my $VacText = get_vacation_text($c); |
97 |
|
|
+ $c->stash(account=>$account, |
98 |
|
|
+ username=>$username, |
99 |
|
|
+ EmailVacation=>$EmailVacation, |
100 |
|
|
+ EmailVacationFrom=>$EmailVacationFrom, |
101 |
|
|
+ EmailVacationTo=>$EmailVacationTo, |
102 |
|
|
+ VacText=>$VacText |
103 |
|
|
+ ); |
104 |
|
|
+ } |
105 |
|
|
+ |
106 |
|
|
+ if ( $trt eq 'ADD1' ) { |
107 |
|
|
+ #Add or edit vacation message. |
108 |
|
|
+ my $ret = add_vac_message($c); |
109 |
|
|
+ #Return to list page if success |
110 |
|
|
+ if ($ret eq "OK") { |
111 |
|
|
+ $trt = "LIST"; |
112 |
|
|
+ $vac_datas{success} = "vac_SUCCESS"; |
113 |
|
|
+ |
114 |
|
|
+ } else { |
115 |
|
|
+ my $account = $c->param("account"); |
116 |
|
|
+ my $user = $adb->get($account); |
117 |
|
|
+ my $username = $user->prop("FirstName")." ".$user->prop("LastName"); |
118 |
|
|
+ my $EmailVacationFrom = $c->param('EmailVacationFrom') || ''; |
119 |
|
|
+ my $EmailVacationTo = $c->param('EmailVacationTo') || ''; |
120 |
|
|
+ my $EmailVacation = $c->param('EmailVacation') || ''; |
121 |
|
|
+ my $VacText = $c->param("VacText"); |
122 |
|
|
+ $c->stash(account=>$account, |
123 |
|
|
+ username=>$username, |
124 |
|
|
+ EmailVacation=>$EmailVacation, |
125 |
|
|
+ EmailVacationFrom=>$EmailVacationFrom, |
126 |
|
|
+ EmailVacationTo=>$EmailVacationTo, |
127 |
|
|
+ VacText=>$VacText |
128 |
|
|
+ ); |
129 |
|
|
+ #Error - return to Add page |
130 |
|
|
+ $trt = "ADD"; |
131 |
|
|
+ $vac_datas{error} = $ret; |
132 |
|
|
+ } |
133 |
|
|
+ } |
134 |
|
|
+ |
135 |
|
|
+ if ( $trt eq 'LIST' ) { |
136 |
|
|
+ |
137 |
|
|
+ #List all the users and vacation message details. |
138 |
|
|
+ my @vacations = get_vacation_table($c); |
139 |
|
|
+ my $empty = (scalar @vacations == 0); |
140 |
|
|
+ $c->stash( |
141 |
|
|
+ empty => $empty, |
142 |
|
|
+ vacations =>\@vacations |
143 |
|
|
+ ); |
144 |
|
|
+ } |
145 |
|
|
+ |
146 |
|
|
+ |
147 |
|
|
+ $vac_datas{'trt'} = $trt; |
148 |
|
|
+ $c->stash( title => $title, modul => $modul, vac_datas => \%vac_datas ); |
149 |
|
|
+ $c->render( template => 'uservacations' ); |
150 |
|
|
+} |
151 |
|
|
+ |
152 |
|
|
+sub user_accounts_exist |
153 |
|
|
+{ |
154 |
|
|
+ my $q = shift; |
155 |
|
|
+ #return scalar $adb->users; |
156 |
|
|
+ if (scalar $adb->users) |
157 |
|
|
+ { return $q->l('vac_DESCRIPTION'); } |
158 |
|
|
+} |
159 |
|
|
+ |
160 |
|
|
+sub get_vacation_table |
161 |
|
|
+{ |
162 |
|
|
+ my $self = shift; |
163 |
|
|
+ #my $q = $self->{cgi}; |
164 |
|
|
+ |
165 |
|
|
+#We want to retrieve granted group from DB, and retrieve users of groups |
166 |
|
|
+ my $record = $adb->get($PanelUser); |
167 |
|
|
+ my $dg=$record->prop('delegatedVacations')||''; |
168 |
|
|
+ $dg =~ s/ //g; |
169 |
|
|
+ my @g = split(/,/, $dg); |
170 |
|
|
+ my @visiblemembers = (); |
171 |
|
|
+ |
172 |
|
|
+ foreach my $g (@g) { |
173 |
|
|
+ my $members = $adb->get_prop("$g",'Members'); |
174 |
|
|
+ next unless defined $members; |
175 |
|
|
+ $members =~ s/ //g; |
176 |
|
|
+ my @members = split(/,/, $members); |
177 |
|
|
+ push @visiblemembers , @members ; |
178 |
|
|
+ } |
179 |
|
|
+ |
180 |
|
|
+ foreach my $k ( @visiblemembers ) |
181 |
|
|
+ { |
182 |
|
|
+ $delegatedVacations{$k}=1; |
183 |
|
|
+ } |
184 |
|
|
+ |
185 |
|
|
+ |
186 |
|
|
+ my @users = $adb->users; |
187 |
|
|
+ return () if (@users == 0); ##$self->l("ACCOUNT_USER_NONE") |
188 |
|
|
+ return () if (@visiblemembers == 0 && $dg ne '');#; #$self->l("NO_USERS_IN_GRANTED_GROUPS") |
189 |
|
|
+ |
190 |
|
|
+ my @data = (); |
191 |
|
|
+ |
192 |
|
|
+ for my $user (@users) |
193 |
|
|
+ { |
194 |
|
|
+ next if %delegatedVacations and not $delegatedVacations{$user->key}; |
195 |
|
|
+ # make it clearer which uses have vacation |
196 |
|
|
+ my $EmailVacation = $user->prop('EmailVacation') || ''; |
197 |
|
|
+ my $EmailVacationFrom = $user->prop('EmailVacationFrom') || ''; |
198 |
|
|
+ my $EmailVacationTo = $user->prop('EmailVacationTo') || ''; |
199 |
|
|
+ my $status = $user->prop('EmailVacation') || ''; |
200 |
|
|
+ if ($status eq 'yes') { $status = 'YES'; } else { $status = ''; } |
201 |
|
|
+ |
202 |
|
|
+ push @data, |
203 |
|
|
+ { User => $user->key, |
204 |
|
|
+ FullName => $user->prop('FirstName') . " " .$user->prop('LastName'), |
205 |
|
|
+ status => $self->l($status), |
206 |
|
|
+ EmailVacation => $EmailVacation, |
207 |
|
|
+ EmailVacationFrom => $EmailVacationFrom, |
208 |
|
|
+ EmailVacationTo => $EmailVacationTo, |
209 |
|
|
+ Modify => $self->l('vac_MODIFY'), |
210 |
|
|
+ } |
211 |
|
|
+ } |
212 |
|
|
+ return @data; |
213 |
|
|
+} |
214 |
|
|
+ |
215 |
|
|
+sub modify_link |
216 |
|
|
+{ |
217 |
|
|
+ my ($data_item, $row, $field) = @_; |
218 |
|
|
+ |
219 |
|
|
+ return "uservacations?" . |
220 |
|
|
+ join("&", |
221 |
|
|
+ "page=0", |
222 |
|
|
+ "page_stack=", |
223 |
|
|
+ "Next=Next", |
224 |
|
|
+ "User=" . $row->{User}, |
225 |
|
|
+ "FullName=" . $row->{FullName}, |
226 |
|
|
+ "EmailVacation=" . $row->{EmailVacation}, |
227 |
|
|
+ "EmailVacationFrom=" . $row->{EmailVacationFrom}, |
228 |
|
|
+ "EmailVacationTo=" . $row->{EmailVacationTo}, |
229 |
|
|
+ "wherenext=VACATION_PAGE_MODIFY"); |
230 |
|
|
+} |
231 |
|
|
+ |
232 |
|
|
+# this formats the text to display on screen |
233 |
|
|
+sub get_vacation_text |
234 |
|
|
+{ |
235 |
|
|
+ my $q = shift; |
236 |
|
|
+ my $domain = $db->get_value('DomainName'); |
237 |
|
|
+ my $user = $q->param('account'); |
238 |
|
|
+ |
239 |
|
|
+ my $fullname = $adb->get_prop($user, "FirstName") . " " . |
240 |
|
|
+ $adb->get_prop($user, "LastName"); |
241 |
|
|
+ |
242 |
|
|
+ my $vfile = "/home/e-smith/files/users/$user/.vacation.msg"; |
243 |
|
|
+ |
244 |
|
|
+ my $from = $q->l('vac_FROM'); |
245 |
|
|
+ my $Subject = $q->l('vac_SUBJECT'); |
246 |
|
|
+ my $away = $q->l('vac_AWAY_FROM_MAIL'); |
247 |
|
|
+ my $return = $q->l('vac_ANSWER_TO_OBJECT_SENDER'); |
248 |
|
|
+ |
249 |
|
|
+ my $ExistingMessage = "$from $fullname <\;$user\@$domain>\;\n"."$Subject $return\n". |
250 |
|
|
+ "\n$away\n"."\n--\n$fullname"; |
251 |
|
|
+ |
252 |
|
|
+ # if exists and is not empty |
253 |
|
|
+ if (( -e $vfile ) && (! -z $vfile )) |
254 |
|
|
+ { |
255 |
|
|
+ open (VACATION, "<$vfile") |
256 |
|
|
+ or die "Error: Could not open file: $vfile\n"; |
257 |
|
|
+ my @vacationTemp; |
258 |
|
|
+ |
259 |
|
|
+ #reformat so email address isn't hidden inside < > |
260 |
|
|
+ while (<VACATION>) |
261 |
|
|
+ { |
262 |
|
|
+ $_ =~ s/</<\;/; |
263 |
|
|
+ $_ =~ s/>/>\;/; |
264 |
|
|
+ push (@vacationTemp, $_); |
265 |
|
|
+ } |
266 |
|
|
+ |
267 |
|
|
+ $ExistingMessage = join ("", @vacationTemp); |
268 |
|
|
+ |
269 |
|
|
+ close VACATION; |
270 |
|
|
+ } |
271 |
|
|
+ return $ExistingMessage; |
272 |
|
|
+} |
273 |
|
|
+ |
274 |
|
|
+# saves the text to .vacation.msg |
275 |
|
|
+sub add_vac_message |
276 |
|
|
+{ |
277 |
|
|
+ my $q = shift; |
278 |
|
|
+ |
279 |
|
|
+ my $domain = $db->get_value('DomainName'); |
280 |
|
|
+ my $user = $q->param('account'); |
281 |
|
|
+ |
282 |
|
|
+ my $EmailVacation = $q->param('EmailVacation')||"no"; |
283 |
|
|
+ #die($EmailVacation); |
284 |
|
|
+ #if ($EmailVacation eq "yes") {$EmailVacation = "yes";} else {$EmailVacation = "no";} |
285 |
|
|
+ |
286 |
|
|
+ #Decode To and FROM to standard format - comes over in html5 iso format yyyy-mm-dd |
287 |
|
|
+ my $EmailVacationFrom = trim($q->param('EmailVacationFrom')); |
288 |
|
|
+ my ($fromYear,$fromMonth,$fromDay) = ($EmailVacationFrom =~ /(\d{4})-(\d{2})-(\d{2})/); |
289 |
|
|
+ $EmailVacationFrom = $fromYear.$fromMonth.$fromDay; |
290 |
|
|
+ if ($EmailVacationFrom !~ m/^2[0-9]{3}[0|1][0-9][0-3][0-9]$/ and $EmailVacationFrom ne "") {return "vac_FROM_DATE_INCORRECT";} |
291 |
|
|
+ my $EmailVacationTo = trim($q->param('EmailVacationTo')); |
292 |
|
|
+ my ($toYear,$toMonth,$toDay) = ($EmailVacationTo =~ /(\d{4})-(\d{2})-(\d{2})/); |
293 |
|
|
+ $EmailVacationTo = $toYear.$toMonth.$toDay; |
294 |
|
|
+# $EmailVacationTo =~ s/-//g; #Just take out "-". |
295 |
|
|
+ if ($EmailVacationTo !~ m/^2[0-9]{3}[0|1][0-9][0-3][0-9]$/ and $EmailVacationFrom ne "") {return "vac_TO_DATE_INCORRECT";} |
296 |
|
|
+ #Check not the same or From follows To. |
297 |
|
|
+ if ($EmailVacationTo ne "" and $EmailVacationTo eq $EmailVacationFrom) {return "vac_DATES_THE_SAME";} |
298 |
|
|
+ my $UnixFrom = mktime(0,0,0,$fromDay,$fromMonth,$fromYear); |
299 |
|
|
+ my $UnixTo = mktime(0,0,0,$toDay,$toMonth,$toYear); |
300 |
|
|
+ if ($UnixTo < $UnixFrom) {return "vac_TO_DATE_MUST_BE_LATER";} |
301 |
|
|
+ |
302 |
|
|
+ |
303 |
|
|
+ my $new_message = $q->param('VacText'); |
304 |
|
|
+ my $vfile = "/home/e-smith/files/users/$user/.vacation.msg"; |
305 |
|
|
+ |
306 |
|
|
+ my $fullname = $adb->get_prop($user, "FirstName") . " " . |
307 |
|
|
+ $adb->get_prop($user, "LastName"); |
308 |
|
|
+ |
309 |
|
|
+ my $from = 'From:'; |
310 |
|
|
+ my $away = $q->l('vac_AWAY_FROM_MAIL'); |
311 |
|
|
+ my $return = $q->l('vac_ANSWER_TO_OBJECT_SENDER'); |
312 |
|
|
+ |
313 |
|
|
+ my $vacation_text = "$from $fullname \<$user\@$domain\>\n"."Subject: $return\n". |
314 |
|
|
+ "\n$away \n"."\n--\n$fullname"; |
315 |
|
|
+ |
316 |
|
|
+ my $reset = $vacation_text; |
317 |
|
|
+ |
318 |
|
|
+ # if exists and is not empty |
319 |
|
|
+ if (( -e $vfile ) && (! -z $vfile )) |
320 |
|
|
+ { |
321 |
|
|
+ open (VACATION, "<$vfile") |
322 |
|
|
+ or die "Error: Could not open file: $vfile\n"; |
323 |
|
|
+ my @vacationTemp = <VACATION>; |
324 |
|
|
+ $vacation_text = join ("", @vacationTemp); |
325 |
|
|
+ |
326 |
|
|
+ close VACATION; |
327 |
|
|
+ } |
328 |
|
|
+ |
329 |
|
|
+ chomp $new_message; |
330 |
|
|
+ |
331 |
|
|
+ # reset msg to default, |
332 |
|
|
+ if ($new_message =~ /reset/) |
333 |
|
|
+ { $vacation_text = $reset; } |
334 |
|
|
+ else |
335 |
|
|
+ { |
336 |
|
|
+ #or save new_message |
337 |
|
|
+ unless ($new_message eq "") |
338 |
|
|
+ { $vacation_text = $new_message; } |
339 |
|
|
+ } |
340 |
|
|
+ |
341 |
|
|
+ # Strip out DOS Carriage Returns (CR) |
342 |
|
|
+ $vacation_text =~ s/\r//g; |
343 |
|
|
+ |
344 |
|
|
+ unlink $vfile; |
345 |
|
|
+ open (VACATION, ">$vfile") |
346 |
|
|
+ or die ("Error opening vacation message.\n"); |
347 |
|
|
+ |
348 |
|
|
+ print VACATION "$vacation_text"; |
349 |
|
|
+ close VACATION; |
350 |
|
|
+ |
351 |
|
|
+ esmith::util::chownFile($user, $user, |
352 |
|
|
+ "/home/e-smith/files/users/$user/.vacation.msg"); |
353 |
|
|
+ |
354 |
|
|
+ $adb->set_prop($user, 'EmailVacation', $EmailVacation); |
355 |
|
|
+ $adb->set_prop($user, 'EmailVacationFrom', $EmailVacationFrom); |
356 |
|
|
+ $adb->set_prop($user, 'EmailVacationTo', $EmailVacationTo); |
357 |
|
|
+ |
358 |
|
|
+ #the first is more correct but is slower |
359 |
|
|
+ #system ("/sbin/e-smith/signal-event", "email-update", $user) == 0 |
360 |
|
|
+ system ("/etc/e-smith/events/actions/qmail-update-user event $user") == 0 |
361 |
|
|
+ or die ("Error occurred updating .qmail\n"); |
362 |
|
|
+ |
363 |
|
|
+ if (($EmailVacation eq 'no') && ( -e "/home/e-smith/files/users/$user/.vacation")) |
364 |
|
|
+ { |
365 |
|
|
+ system ("/bin/rm /home/e-smith/files/users/$user/.vacation") == 0 |
366 |
|
|
+ or die ("Error resetting vacation db.\n"); |
367 |
|
|
+ } |
368 |
|
|
+ |
369 |
|
|
+ return "OK"; |
370 |
|
|
+} |
371 |
|
|
+ |
372 |
|
|
+sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s }; |
373 |
|
|
+ |
374 |
|
|
+1; |
375 |
|
|
diff -urN smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/I18N/Modules/Uservacations/en.pm smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/I18N/Modules/Uservacations/en.pm |
376 |
|
|
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/I18N/Modules/Uservacations/en.pm 1970-01-01 01:00:00.000000000 +0100 |
377 |
|
|
+++ smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/I18N/Modules/Uservacations/en.pm 2020-05-18 16:21:00.000000000 +0100 |
378 |
|
|
@@ -0,0 +1,63 @@ |
379 |
|
|
+package SrvMngr::I18N::Modules::Uservacations::en; |
380 |
|
|
+use strict; |
381 |
|
|
+use warnings; |
382 |
|
|
+use utf8; |
383 |
|
|
+use Mojo::Base 'SrvMngr::I18N'; |
384 |
|
|
+ |
385 |
|
|
+use SrvMngr::I18N::Modules::General::en; |
386 |
|
|
+ |
387 |
|
|
+my %lexicon = ( |
388 |
|
|
+'vac_User vacations' =>'User vacations', |
389 |
|
|
+'vac_Vacation Message' =>'Vacation Message', |
390 |
|
|
+'vac_FORM_TITLE' =>'Change user vacation settings', |
391 |
|
|
+'vac_DESCRIPTION' =>' You can modify a users vacation message by clicking |
392 |
|
|
+ on the link to the right of their name below. |
393 |
|
|
+', |
394 |
|
|
+'vac_LABEL_VACATION' =>'Vacation', |
395 |
|
|
+'vac_NO_FORWARDS'=>'No users found for forwarding', |
396 |
|
|
+'vac_VACATION_FROM' =>'Vacation starts on <br>(YYYYMMDD)', |
397 |
|
|
+'vac_VACATION_TO' =>'Vacation finishes on <br>(YYYYMMDD)', |
398 |
|
|
+'vac_VACATION_FROM1' =>'Vacation starts on', |
399 |
|
|
+'vac_VACATION_TO1' =>'Vacation finishes on', |
400 |
|
|
+'vac_MESSAGE' =>'Vacation message', |
401 |
|
|
+'vac_VACATION_STATUS' =>'Enable vacation messages', |
402 |
|
|
+'vac_FROM' =>'From:', |
403 |
|
|
+'vac_SUBJECT' =>'Subject:', |
404 |
|
|
+'vac_AWAY_FROM_MAIL' =>'I will not be reading my mail for a while. Your mail regarding $SUBJECT will be read when I return.', |
405 |
|
|
+'vac_NO_USERS_IN_GRANTED_GROUPS' =>'There are no users in the group(s) that you are granted to manage.', |
406 |
|
|
+'vac_ANSWER_TO_OBJECT_SENDER' => 'Re: $SUBJECT - Away from my email ', |
407 |
|
|
+'vac_FROM_DATE_INCORRECT'=>'From date must have YYYYMMDD format', |
408 |
|
|
+'vac_TO_DATE_INCORRECT'=>'To date must have YYYYMMDD format', |
409 |
|
|
+'vac_DATES_THE_SAME'=>"The Start and Finish dates cannot be the same", |
410 |
|
|
+'vac_TO_DATE_MUST_BE_LATER'=>"The Finish dates cannot be earlier than the Start date", |
411 |
|
|
+'vac_SUCCESS'=>'Vacation message saved sucessfully', |
412 |
|
|
+'vac_MODIFY_DESCRIPTION' =>' |
413 |
|
|
+ <p> |
414 |
|
|
+ Enter a vacation message here. You can use $SUBJECT |
415 |
|
|
+ anywhere in the text to be replaced with the subject line |
416 |
|
|
+ from the email that activated the auto-reply.</p> |
417 |
|
|
+ |
418 |
|
|
+ <p> |
419 |
|
|
+ This message must be composed of two parts separated by a blank line. |
420 |
|
|
+ The first will be integrated into the headings of the email reply, |
421 |
|
|
+ you must thus ensure you leave at least a blank line before typing your message. |
422 |
|
|
+ The primary domain is added to the address automatically,or you can insert a virtual domain by replacing the domain part of the sender address |
423 |
|
|
+ in the first line of the message with the virtual domain name (eg. replace the default From: user@primary.domain with From: user@virtual.domain). |
424 |
|
|
+ To change the vacation message back to the default type reset.</p> |
425 |
|
|
+ <p> |
426 |
|
|
+ You can also fill out the Enable vacation on and Disable vacation on fields in order to |
427 |
|
|
+ automatically enable and disable sending of the vacation message for this user account on the given dates. |
428 |
|
|
+ </p> |
429 |
|
|
+ <p> |
430 |
|
|
+ The dates in the two fields must not be the same.<br> |
431 |
|
|
+ If you want to use this functionality, leave the Enable vacation messages setting at No - it will be automatically activated based on the date given. |
432 |
|
|
+ </p>' |
433 |
|
|
+); |
434 |
|
|
+ |
435 |
|
|
+our %Lexicon = ( |
436 |
|
|
+ %{ SrvMngr::I18N::Modules::General::en::Lexicon }, |
437 |
|
|
+ %lexicon |
438 |
|
|
+); |
439 |
|
|
+ |
440 |
|
|
+ |
441 |
|
|
+1; |
442 |
|
|
diff -urN smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_add.html.ep smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_add.html.ep |
443 |
|
|
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_add.html.ep 1970-01-01 01:00:00.000000000 +0100 |
444 |
|
|
+++ smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_add.html.ep 2020-05-18 15:29:00.000000000 +0100 |
445 |
|
|
@@ -0,0 +1,54 @@ |
446 |
|
|
+<div id='vac_add'> |
447 |
|
|
+ |
448 |
|
|
+ % my $btn = l('ADD'); |
449 |
|
|
+ |
450 |
|
|
+ % if ($config->{debug} == 1) { |
451 |
|
|
+ <p> |
452 |
|
|
+ %= dumper $c->current_route |
453 |
|
|
+ %= dumper $EmailVacation |
454 |
|
|
+ </p> |
455 |
|
|
+ % } |
456 |
|
|
+ |
457 |
|
|
+ %= form_for '/Uservacations2' => (method => 'POST') => begin |
458 |
|
|
+ |
459 |
|
|
+ <span class=label> |
460 |
|
|
+ %=l 'ACCOUNT' |
461 |
|
|
+ </span><span class=data> |
462 |
|
|
+ %= $account |
463 |
|
|
+ </span><br><br> |
464 |
|
|
+ <span class=label> |
465 |
|
|
+ %=l 'USER_NAME' |
466 |
|
|
+ </span><span class=data> |
467 |
|
|
+ %=$username |
468 |
|
|
+ </span><br><br> |
469 |
|
|
+ <span class=label> |
470 |
|
|
+ %=$c->render_to_string(inline =>$c->l('vac_VACATION_FROM1')) |
471 |
|
|
+ </span> |
472 |
|
|
+ <span class=data> |
473 |
|
|
+ %=date_field 'EmailVacationFrom' =>$EmailVacationFrom |
474 |
|
|
+ </span><br><br> |
475 |
|
|
+ <span class=label> |
476 |
|
|
+ %=$c->render_to_string(inline =>$c->l('vac_VACATION_TO1')) |
477 |
|
|
+ </span> |
478 |
|
|
+ <span class=data> |
479 |
|
|
+ %=date_field 'EmailVacationTo' =>$EmailVacationTo |
480 |
|
|
+ </span><br><br> |
481 |
|
|
+ <span class=label> |
482 |
|
|
+ %=l 'vac_MESSAGE' |
483 |
|
|
+ </span> |
484 |
|
|
+ <span class=data> |
485 |
|
|
+ %=text_area 'VacText' => $VacText, cols=>55, rows=>15 |
486 |
|
|
+ </span><br><br> |
487 |
|
|
+ <span class=label> |
488 |
|
|
+ %=l 'vac_VACATION_STATUS' |
489 |
|
|
+ </span> |
490 |
|
|
+ <span class=data> |
491 |
|
|
+ % param EmailVacation => "$EmailVacation"; |
492 |
|
|
+ %=select_field EmailVacation =>[['Yes'=>'yes'],['No'=>'no']] |
493 |
|
|
+ </span><br><br> |
494 |
|
|
+ %= hidden_field 'account' => $account |
495 |
|
|
+ |
496 |
|
|
+ %= submit_button "$btn", class => 'action' |
497 |
|
|
+ %end |
498 |
|
|
+ |
499 |
|
|
+</div> |
500 |
|
|
diff -urN smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_list.html.ep smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_list.html.ep |
501 |
|
|
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_list.html.ep 1970-01-01 01:00:00.000000000 +0100 |
502 |
|
|
+++ smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_list.html.ep 2020-05-07 09:02:00.000000000 +0100 |
503 |
|
|
@@ -0,0 +1,50 @@ |
504 |
|
|
+<div id='vac_list'> |
505 |
|
|
+ |
506 |
|
|
+ %# my $btn = l('vac_CREATE_RULE'); |
507 |
|
|
+ |
508 |
|
|
+ %= form_for '/Uservacations1' => (method => 'POST') => begin |
509 |
|
|
+ <br><br> |
510 |
|
|
+ |
511 |
|
|
+ % if ($empty){ |
512 |
|
|
+ <br> |
513 |
|
|
+ %=l 'vac_NO_FORWARDS' |
514 |
|
|
+ % } else { |
515 |
|
|
+ <table class="sme-border"><tbody> |
516 |
|
|
+ <tr> |
517 |
|
|
+ <th class='sme-border'> |
518 |
|
|
+ %=l 'ACCOUNT' |
519 |
|
|
+ </th> |
520 |
|
|
+ <th class='sme-border'> |
521 |
|
|
+ %=l 'USER_NAME' |
522 |
|
|
+ </th> |
523 |
|
|
+ <th class='sme-border'> |
524 |
|
|
+ %=l 'vac_LABEL_VACATION' |
525 |
|
|
+ </th> |
526 |
|
|
+ |
527 |
|
|
+ <th class='sme-border'> |
528 |
|
|
+ %=$c->render_to_string(inline =>l('vac_VACATION_FROM')) |
529 |
|
|
+ </th> |
530 |
|
|
+ <th class='sme-border'> |
531 |
|
|
+ %=$c->render_to_string(inline =>l('vac_VACATION_TO')) |
532 |
|
|
+ </th> |
533 |
|
|
+ <th class='sme-border' '> |
534 |
|
|
+ %=l 'ACTION' |
535 |
|
|
+ </th> |
536 |
|
|
+ </tr> |
537 |
|
|
+ % foreach my $vacation (@$vacations) { |
538 |
|
|
+ <tr> |
539 |
|
|
+ %= t td => (class => 'sme-border') => $vacation->{"User"} |
540 |
|
|
+ %= t td => (class => 'sme-border') => $vacation->{"FullName"} |
541 |
|
|
+ %= t td => (class => 'sme-border') => $vacation->{"status"} |
542 |
|
|
+ %= t td => (class => 'sme-border') => $vacation->{"EmailVacationFrom"} |
543 |
|
|
+ %= t td => (class => 'sme-border') => $vacation->{"EmailVacationTo"} |
544 |
|
|
+ <td> |
545 |
|
|
+ <a href="/server-manager2/Uservacations1?trt=ADD&account=<%= $vacation->{"User"}%>"><%=l 'MODIFY'%></a> |
546 |
|
|
+ </td> |
547 |
|
|
+ </tr> |
548 |
|
|
+ %} |
549 |
|
|
+ </tbody> |
550 |
|
|
+ </table> |
551 |
|
|
+ %} |
552 |
|
|
+ % end |
553 |
|
|
+</div> |
554 |
|
|
diff -urN smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/uservacations.html.ep smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/uservacations.html.ep |
555 |
|
|
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/uservacations.html.ep 1970-01-01 01:00:00.000000000 +0100 |
556 |
|
|
+++ smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/uservacations.html.ep 2020-05-07 09:02:00.000000000 +0100 |
557 |
|
|
@@ -0,0 +1,42 @@ |
558 |
|
|
+% layout 'default', title => "Sme server 2 - User Vacations", share_dir => './'; |
559 |
|
|
+ |
560 |
|
|
+% content_for 'module' => begin |
561 |
|
|
+<div id="module"> |
562 |
|
|
+ |
563 |
|
|
+ % if ($config->{debug} == 1) { |
564 |
|
|
+ <p> |
565 |
|
|
+ %= dumper $c->current_route |
566 |
|
|
+ </p> |
567 |
|
|
+ % } |
568 |
|
|
+ |
569 |
|
|
+ <h1><%=$title%></h1> |
570 |
|
|
+ %= $modul |
571 |
|
|
+ |
572 |
|
|
+ %if ($vac_datas->{first}) { |
573 |
|
|
+ <br> |
574 |
|
|
+ %=$c->render_to_string(inline =>$c->l($vac_datas->{first})) |
575 |
|
|
+ |
576 |
|
|
+ %} elsif ($vac_datas->{success}) { |
577 |
|
|
+ <div class='"success"'> |
578 |
|
|
+ <h2> Operation Status Report</h2> |
579 |
|
|
+ %= $c->l($vac_datas->{success}); |
580 |
|
|
+ </div> |
581 |
|
|
+ |
582 |
|
|
+ %} elsif ($vac_datas->{error}) { |
583 |
|
|
+ <div class='sme-error'> |
584 |
|
|
+ <h2> Operation Status Report - error</h2> |
585 |
|
|
+ %= $c->l($vac_datas->{error}); |
586 |
|
|
+ </div> |
587 |
|
|
+ %} |
588 |
|
|
+ |
589 |
|
|
+ |
590 |
|
|
+ % if ($vac_datas->{trt} eq 'ADD') { |
591 |
|
|
+ %= include 'partials/_vac_add' |
592 |
|
|
+ %} elsif ($vac_datas->{trt} eq 'ADD1') { |
593 |
|
|
+ %= include 'partials/_vac_add' |
594 |
|
|
+ %} else { |
595 |
|
|
+ %= include 'partials/_vac_list' |
596 |
|
|
+ %} |
597 |
|
|
+ |
598 |
|
|
+</div> |
599 |
|
|
+%end |