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 2020-06-11 06:33:21.401187446 +0100 |
3 |
+++ smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/Controller/Uservacations.pm 1970-01-01 01:00:00.000000000 +0100 |
4 |
@@ -1,379 +0,0 @@ |
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 => showDate($EmailVacationFrom), |
208 |
- EmailVacationTo => showDate($EmailVacationTo), |
209 |
- Modify => $self->l('vac_MODIFY'), |
210 |
- } |
211 |
- } |
212 |
- return @data; |
213 |
-} |
214 |
- |
215 |
-sub showDate |
216 |
-{ |
217 |
- my $strDate = shift; |
218 |
- my ($Year,$Month,$Day) = ($strDate =~ /(\d{4})(\d{2})(\d{2})/); |
219 |
- #my $Unix = mktime(0,0,0,$Day,$Month,$Year); |
220 |
- return "$Year-$Month-$Day"; |
221 |
-} |
222 |
- |
223 |
- |
224 |
-sub modify_link |
225 |
-{ |
226 |
- my ($data_item, $row, $field) = @_; |
227 |
- |
228 |
- return "uservacations?" . |
229 |
- join("&", |
230 |
- "page=0", |
231 |
- "page_stack=", |
232 |
- "Next=Next", |
233 |
- "User=" . $row->{User}, |
234 |
- "FullName=" . $row->{FullName}, |
235 |
- "EmailVacation=" . $row->{EmailVacation}, |
236 |
- "EmailVacationFrom=" . $row->{EmailVacationFrom}, |
237 |
- "EmailVacationTo=" . $row->{EmailVacationTo}, |
238 |
- "wherenext=VACATION_PAGE_MODIFY"); |
239 |
-} |
240 |
- |
241 |
-# this formats the text to display on screen |
242 |
-sub get_vacation_text |
243 |
-{ |
244 |
- my $q = shift; |
245 |
- my $domain = $db->get_value('DomainName'); |
246 |
- my $user = $q->param('account'); |
247 |
- |
248 |
- my $fullname = $adb->get_prop($user, "FirstName") . " " . |
249 |
- $adb->get_prop($user, "LastName"); |
250 |
- |
251 |
- my $vfile = "/home/e-smith/files/users/$user/.vacation.msg"; |
252 |
- |
253 |
- my $from = $q->l('vac_FROM'); |
254 |
- my $Subject = $q->l('vac_SUBJECT'); |
255 |
- my $away = $q->l('vac_AWAY_FROM_MAIL'); |
256 |
- my $return = $q->l('vac_ANSWER_TO_OBJECT_SENDER'); |
257 |
- |
258 |
- my $ExistingMessage = "$from $fullname <\;$user\@$domain>\;\n"."$Subject $return\n". |
259 |
- "\n$away\n"."\n--\n$fullname"; |
260 |
- |
261 |
- # if exists and is not empty |
262 |
- if (( -e $vfile ) && (! -z $vfile )) |
263 |
- { |
264 |
- open (VACATION, "<$vfile") |
265 |
- or die "Error: Could not open file: $vfile\n"; |
266 |
- my @vacationTemp; |
267 |
- |
268 |
- #reformat so email address isn't hidden inside < > |
269 |
- while (<VACATION>) |
270 |
- { |
271 |
- $_ =~ s/</<\;/; |
272 |
- $_ =~ s/>/>\;/; |
273 |
- push (@vacationTemp, $_); |
274 |
- } |
275 |
- |
276 |
- $ExistingMessage = join ("", @vacationTemp); |
277 |
- |
278 |
- close VACATION; |
279 |
- } |
280 |
- return $ExistingMessage; |
281 |
-} |
282 |
- |
283 |
-# saves the text to .vacation.msg |
284 |
-sub add_vac_message |
285 |
-{ |
286 |
- my $q = shift; |
287 |
- |
288 |
- my $domain = $db->get_value('DomainName'); |
289 |
- my $user = $q->param('account'); |
290 |
- |
291 |
- my $EmailVacation = $q->param('EmailVacation')||"no"; |
292 |
- #die($EmailVacation); |
293 |
- #if ($EmailVacation eq "yes") {$EmailVacation = "yes";} else {$EmailVacation = "no";} |
294 |
- |
295 |
- #Decode To and FROM to standard format - comes over in html5 iso format yyyy-mm-dd |
296 |
- my $EmailVacationFrom = trim($q->param('EmailVacationFrom')); |
297 |
- my ($fromYear,$fromMonth,$fromDay) = ($EmailVacationFrom =~ /(\d{4})-(\d{2})-(\d{2})/); |
298 |
- $EmailVacationFrom = $fromYear.$fromMonth.$fromDay; |
299 |
- if ($EmailVacationFrom !~ m/^2[0-9]{3}[0|1][0-9][0-3][0-9]$/ and $EmailVacationFrom ne "") {return "vac_FROM_DATE_INCORRECT";} |
300 |
- my $EmailVacationTo = trim($q->param('EmailVacationTo')); |
301 |
- my ($toYear,$toMonth,$toDay) = ($EmailVacationTo =~ /(\d{4})-(\d{2})-(\d{2})/); |
302 |
- $EmailVacationTo = $toYear.$toMonth.$toDay; |
303 |
-# $EmailVacationTo =~ s/-//g; #Just take out "-". |
304 |
- if ($EmailVacationTo !~ m/^2[0-9]{3}[0|1][0-9][0-3][0-9]$/ and $EmailVacationFrom ne "") {return "vac_TO_DATE_INCORRECT";} |
305 |
- #Check not the same or From follows To. |
306 |
- if ($EmailVacationTo ne "" and $EmailVacationTo eq $EmailVacationFrom) {return "vac_DATES_THE_SAME";} |
307 |
- my $UnixFrom = mktime(0,0,0,$fromDay,$fromMonth,$fromYear); |
308 |
- my $UnixTo = mktime(0,0,0,$toDay,$toMonth,$toYear); |
309 |
- if ($UnixTo < $UnixFrom) {return "vac_TO_DATE_MUST_BE_LATER";} |
310 |
- |
311 |
- |
312 |
- my $new_message = $q->param('VacText'); |
313 |
- my $vfile = "/home/e-smith/files/users/$user/.vacation.msg"; |
314 |
- |
315 |
- my $fullname = $adb->get_prop($user, "FirstName") . " " . |
316 |
- $adb->get_prop($user, "LastName"); |
317 |
- |
318 |
- my $from = 'From:'; |
319 |
- my $away = $q->l('vac_AWAY_FROM_MAIL'); |
320 |
- my $return = $q->l('vac_ANSWER_TO_OBJECT_SENDER'); |
321 |
- |
322 |
- my $vacation_text = "$from $fullname \<$user\@$domain\>\n"."Subject: $return\n". |
323 |
- "\n$away \n"."\n--\n$fullname"; |
324 |
- |
325 |
- my $reset = $vacation_text; |
326 |
- |
327 |
- # if exists and is not empty |
328 |
- if (( -e $vfile ) && (! -z $vfile )) |
329 |
- { |
330 |
- open (VACATION, "<$vfile") |
331 |
- or die "Error: Could not open file: $vfile\n"; |
332 |
- my @vacationTemp = <VACATION>; |
333 |
- $vacation_text = join ("", @vacationTemp); |
334 |
- |
335 |
- close VACATION; |
336 |
- } |
337 |
- |
338 |
- chomp $new_message; |
339 |
- |
340 |
- # reset msg to default, |
341 |
- if ($new_message =~ /reset/) |
342 |
- { $vacation_text = $reset; } |
343 |
- else |
344 |
- { |
345 |
- #or save new_message |
346 |
- unless ($new_message eq "") |
347 |
- { $vacation_text = $new_message; } |
348 |
- } |
349 |
- |
350 |
- # Strip out DOS Carriage Returns (CR) |
351 |
- $vacation_text =~ s/\r//g; |
352 |
- |
353 |
- unlink $vfile; |
354 |
- open (VACATION, ">$vfile") |
355 |
- or die ("Error opening vacation message.\n"); |
356 |
- |
357 |
- print VACATION "$vacation_text"; |
358 |
- close VACATION; |
359 |
- |
360 |
- esmith::util::chownFile($user, $user, |
361 |
- "/home/e-smith/files/users/$user/.vacation.msg"); |
362 |
- |
363 |
- $adb->set_prop($user, 'EmailVacation', $EmailVacation); |
364 |
- $adb->set_prop($user, 'EmailVacationFrom', $EmailVacationFrom); |
365 |
- $adb->set_prop($user, 'EmailVacationTo', $EmailVacationTo); |
366 |
- |
367 |
- #the first is more correct but is slower |
368 |
- #system ("/sbin/e-smith/signal-event", "email-update", $user) == 0 |
369 |
- system ("/etc/e-smith/events/actions/qmail-update-user event $user") == 0 |
370 |
- or die ("Error occurred updating .qmail\n"); |
371 |
- |
372 |
- if (($EmailVacation eq 'no') && ( -e "/home/e-smith/files/users/$user/.vacation")) |
373 |
- { |
374 |
- system ("/bin/rm /home/e-smith/files/users/$user/.vacation") == 0 |
375 |
- or die ("Error resetting vacation db.\n"); |
376 |
- } |
377 |
- |
378 |
- return "OK"; |
379 |
-} |
380 |
- |
381 |
-sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s }; |
382 |
- |
383 |
-1; |
384 |
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 |
385 |
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/lib/SrvMngr/I18N/Modules/Uservacations/en.pm 2020-06-11 06:33:21.401187446 +0100 |
386 |
+++ smeserver-vacation-1.1/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 |
387 |
@@ -1,63 +0,0 @@ |
388 |
-package SrvMngr::I18N::Modules::Uservacations::en; |
389 |
-use strict; |
390 |
-use warnings; |
391 |
-use utf8; |
392 |
-use Mojo::Base 'SrvMngr::I18N'; |
393 |
- |
394 |
-use SrvMngr::I18N::Modules::General::en; |
395 |
- |
396 |
-my %lexicon = ( |
397 |
-'vac_User vacations' =>'User vacations', |
398 |
-'vac_Vacation Message' =>'Vacation Message', |
399 |
-'vac_FORM_TITLE' =>'Change user vacation settings', |
400 |
-'vac_DESCRIPTION' =>' You can modify a users vacation message by clicking |
401 |
- on the link to the right of their name below. |
402 |
-', |
403 |
-'vac_LABEL_VACATION' =>'Vacation', |
404 |
-'vac_NO_FORWARDS'=>'No users found for forwarding', |
405 |
-'vac_VACATION_FROM' =>'Vacation starts on <br>(YYYY-MM-DD)', |
406 |
-'vac_VACATION_TO' =>'Vacation finishes on <br>(YYYY-MM-DD)', |
407 |
-'vac_VACATION_FROM1' =>'Vacation starts on', |
408 |
-'vac_VACATION_TO1' =>'Vacation finishes on', |
409 |
-'vac_MESSAGE' =>'Vacation message', |
410 |
-'vac_VACATION_STATUS' =>'Enable vacation messages', |
411 |
-'vac_FROM' =>'From:', |
412 |
-'vac_SUBJECT' =>'Subject:', |
413 |
-'vac_AWAY_FROM_MAIL' =>'I will not be reading my mail for a while. Your mail regarding $SUBJECT will be read when I return.', |
414 |
-'vac_NO_USERS_IN_GRANTED_GROUPS' =>'There are no users in the group(s) that you are granted to manage.', |
415 |
-'vac_ANSWER_TO_OBJECT_SENDER' => 'Re: $SUBJECT - Away from my email ', |
416 |
-'vac_FROM_DATE_INCORRECT'=>'From date must have YYYYMMDD format', |
417 |
-'vac_TO_DATE_INCORRECT'=>'To date must have YYYYMMDD format', |
418 |
-'vac_DATES_THE_SAME'=>"The Start and Finish dates cannot be the same", |
419 |
-'vac_TO_DATE_MUST_BE_LATER'=>"The Finish dates cannot be earlier than the Start date", |
420 |
-'vac_SUCCESS'=>'Vacation message saved sucessfully', |
421 |
-'vac_MODIFY_DESCRIPTION' =>' |
422 |
- <p> |
423 |
- Enter a vacation message here. You can use $SUBJECT |
424 |
- anywhere in the text to be replaced with the subject line |
425 |
- from the email that activated the auto-reply.</p> |
426 |
- |
427 |
- <p> |
428 |
- This message must be composed of two parts separated by a blank line. |
429 |
- The first will be integrated into the headings of the email reply, |
430 |
- you must thus ensure you leave at least a blank line before typing your message. |
431 |
- 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 |
432 |
- 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). |
433 |
- To change the vacation message back to the default type reset.</p> |
434 |
- <p> |
435 |
- You can also fill out the Enable vacation on and Disable vacation on fields in order to |
436 |
- automatically enable and disable sending of the vacation message for this user account on the given dates. |
437 |
- </p> |
438 |
- <p> |
439 |
- The dates in the two fields must not be the same.<br> |
440 |
- 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. |
441 |
- </p>' |
442 |
-); |
443 |
- |
444 |
-our %Lexicon = ( |
445 |
- %{ SrvMngr::I18N::Modules::General::en::Lexicon }, |
446 |
- %lexicon |
447 |
-); |
448 |
- |
449 |
- |
450 |
-1; |
451 |
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 |
452 |
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_add.html.ep 2020-06-11 06:33:21.397187406 +0100 |
453 |
+++ smeserver-vacation-1.1/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 |
454 |
@@ -1,54 +0,0 @@ |
455 |
-<div id='vac_add'> |
456 |
- |
457 |
- % my $btn = l('ADD'); |
458 |
- |
459 |
- % if ($config->{debug} == 1) { |
460 |
- <p> |
461 |
- %= dumper $c->current_route |
462 |
- %= dumper $EmailVacation |
463 |
- </p> |
464 |
- % } |
465 |
- |
466 |
- %= form_for '/Uservacations2' => (method => 'POST') => begin |
467 |
- |
468 |
- <span class=label> |
469 |
- %=l 'ACCOUNT' |
470 |
- </span><span class=data> |
471 |
- %= $account |
472 |
- </span><br><br> |
473 |
- <span class=label> |
474 |
- %=l 'USER_NAME' |
475 |
- </span><span class=data> |
476 |
- %=$username |
477 |
- </span><br><br> |
478 |
- <span class=label> |
479 |
- %=$c->render_to_string(inline =>$c->l('vac_VACATION_FROM1')) |
480 |
- </span> |
481 |
- <span class=data> |
482 |
- %=date_field 'EmailVacationFrom' =>$EmailVacationFrom |
483 |
- </span><br><br> |
484 |
- <span class=label> |
485 |
- %=$c->render_to_string(inline =>$c->l('vac_VACATION_TO1')) |
486 |
- </span> |
487 |
- <span class=data> |
488 |
- %=date_field 'EmailVacationTo' =>$EmailVacationTo |
489 |
- </span><br><br> |
490 |
- <span class=label> |
491 |
- %=l 'vac_MESSAGE' |
492 |
- </span> |
493 |
- <span class=data> |
494 |
- %=text_area 'VacText' => $VacText, cols=>55, rows=>15 |
495 |
- </span><br><br> |
496 |
- <span class=label> |
497 |
- %=l 'vac_VACATION_STATUS' |
498 |
- </span> |
499 |
- <span class=data> |
500 |
- % param EmailVacation => "$EmailVacation"; |
501 |
- %=select_field EmailVacation =>[['Yes'=>'yes'],['No'=>'no']] |
502 |
- </span><br><br> |
503 |
- %= hidden_field 'account' => $account |
504 |
- |
505 |
- %= submit_button "$btn", class => 'action' |
506 |
- %end |
507 |
- |
508 |
-</div> |
509 |
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 |
510 |
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/partials/_vac_list.html.ep 2020-06-11 06:33:21.397187406 +0100 |
511 |
+++ smeserver-vacation-1.1/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 |
512 |
@@ -1,50 +0,0 @@ |
513 |
-<div id='vac_list'> |
514 |
- |
515 |
- %# my $btn = l('vac_CREATE_RULE'); |
516 |
- |
517 |
- %= form_for '/Uservacations1' => (method => 'POST') => begin |
518 |
- <br><br> |
519 |
- |
520 |
- % if ($empty){ |
521 |
- <br> |
522 |
- %=l 'vac_NO_FORWARDS' |
523 |
- % } else { |
524 |
- <table class="sme-border"><tbody> |
525 |
- <tr> |
526 |
- <th class='sme-border'> |
527 |
- %=l 'ACCOUNT' |
528 |
- </th> |
529 |
- <th class='sme-border'> |
530 |
- %=l 'USER_NAME' |
531 |
- </th> |
532 |
- <th class='sme-border'> |
533 |
- %=l 'vac_LABEL_VACATION' |
534 |
- </th> |
535 |
- |
536 |
- <th class='sme-border'> |
537 |
- %=$c->render_to_string(inline =>l('vac_VACATION_FROM')) |
538 |
- </th> |
539 |
- <th class='sme-border'> |
540 |
- %=$c->render_to_string(inline =>l('vac_VACATION_TO')) |
541 |
- </th> |
542 |
- <th class='sme-border' '> |
543 |
- %=l 'ACTION' |
544 |
- </th> |
545 |
- </tr> |
546 |
- % foreach my $vacation (@$vacations) { |
547 |
- <tr> |
548 |
- %= t td => (class => 'sme-border') => $vacation->{"User"} |
549 |
- %= t td => (class => 'sme-border') => $vacation->{"FullName"} |
550 |
- %= t td => (class => 'sme-border') => $vacation->{"status"} |
551 |
- %= t td => (class => 'sme-border') => $vacation->{"EmailVacationFrom"} |
552 |
- %= t td => (class => 'sme-border') => $vacation->{"EmailVacationTo"} |
553 |
- <td> |
554 |
- <a href="/server-manager2/Uservacations1?trt=ADD&account=<%= $vacation->{"User"}%>"><%=l 'MODIFY'%></a> |
555 |
- </td> |
556 |
- </tr> |
557 |
- %} |
558 |
- </tbody> |
559 |
- </table> |
560 |
- %} |
561 |
- % end |
562 |
-</div> |
563 |
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 |
564 |
--- smeserver-vacation-1.1.old/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/uservacations.html.ep 2020-06-11 06:33:21.397187406 +0100 |
565 |
+++ smeserver-vacation-1.1/root/etc/e-smith/web/panels/manager2/cgi-bin/srvmngr/themes/default/templates/uservacations.html.ep 1970-01-01 01:00:00.000000000 +0100 |
566 |
@@ -1,42 +0,0 @@ |
567 |
-% layout 'default', title => "Sme server 2 - User Vacations", share_dir => './'; |
568 |
- |
569 |
-% content_for 'module' => begin |
570 |
-<div id="module"> |
571 |
- |
572 |
- % if ($config->{debug} == 1) { |
573 |
- <p> |
574 |
- %= dumper $c->current_route |
575 |
- </p> |
576 |
- % } |
577 |
- |
578 |
- <h1><%=$title%></h1> |
579 |
- %= $modul |
580 |
- |
581 |
- %if ($vac_datas->{first}) { |
582 |
- <br> |
583 |
- %=$c->render_to_string(inline =>$c->l($vac_datas->{first})) |
584 |
- |
585 |
- %} elsif ($vac_datas->{success}) { |
586 |
- <div class='"success"'> |
587 |
- <h2> Operation Status Report</h2> |
588 |
- %= $c->l($vac_datas->{success}); |
589 |
- </div> |
590 |
- |
591 |
- %} elsif ($vac_datas->{error}) { |
592 |
- <div class='sme-error'> |
593 |
- <h2> Operation Status Report - error</h2> |
594 |
- %= $c->l($vac_datas->{error}); |
595 |
- </div> |
596 |
- %} |
597 |
- |
598 |
- |
599 |
- % if ($vac_datas->{trt} eq 'ADD') { |
600 |
- %= include 'partials/_vac_add' |
601 |
- %} elsif ($vac_datas->{trt} eq 'ADD1') { |
602 |
- %= include 'partials/_vac_add' |
603 |
- %} else { |
604 |
- %= include 'partials/_vac_list' |
605 |
- %} |
606 |
- |
607 |
-</div> |
608 |
-%end |
609 |
diff -urN smeserver-vacation-1.1.old/root/usr/share/smanager/lib/SrvMngr/Controller/Uservacations.pm smeserver-vacation-1.1/root/usr/share/smanager/lib/SrvMngr/Controller/Uservacations.pm |
610 |
--- smeserver-vacation-1.1.old/root/usr/share/smanager/lib/SrvMngr/Controller/Uservacations.pm 1970-01-01 01:00:00.000000000 +0100 |
611 |
+++ smeserver-vacation-1.1/root/usr/share/smanager/lib/SrvMngr/Controller/Uservacations.pm 2020-06-10 18:28:00.000000000 +0100 |
612 |
@@ -0,0 +1,380 @@ |
613 |
+package SrvMngr::Controller::Uservacations; |
614 |
+#---------------------------------------------------------------------- |
615 |
+# heading : Collaboration |
616 |
+# description : User Vacations |
617 |
+# navigation : 3000 3150 |
618 |
+# |
619 |
+# name : Uservacationsget, method : get, url : /uservacations, ctlact : Uservacations#main |
620 |
+# name : Uservacationspost,method : post, url : /Uservacations, ctlact : Uservacations#do_display |
621 |
+# name : Uservacations1, method : get, url : /Uservacations1, ctlact : Uservacations#do_display |
622 |
+# name : Uservacations2, method : post, url : /Uservacations2, ctlact : Uservacations#do_display |
623 |
+# routes : end |
624 |
+#---------------------------------------------------------------------- |
625 |
+ |
626 |
+use strict; |
627 |
+use warnings; |
628 |
+use Mojo::Base 'Mojolicious::Controller'; |
629 |
+ |
630 |
+#use DateTime; #Not part of SME10 mix |
631 |
+use POSIX; |
632 |
+ |
633 |
+use Locale::gettext; |
634 |
+use SrvMngr::I18N; |
635 |
+use SrvMngr qw(theme_list init_session); |
636 |
+ |
637 |
+use Data::Dumper; |
638 |
+use esmith::util; |
639 |
+use esmith::HostsDB; |
640 |
+use esmith::AccountsDB; |
641 |
+ |
642 |
+our $db = esmith::ConfigDB->open(); |
643 |
+our $adb = esmith::AccountsDB->open(); |
644 |
+ |
645 |
+our $PanelUser = $ENV{'REMOTE_USER'} ||''; |
646 |
+$PanelUser = $1 if ($PanelUser =~ /^([a-z][\.\-a-z0-9]*)$/); |
647 |
+ |
648 |
+our %delegatedVacations; |
649 |
+ |
650 |
+use constant FALSE => 0; |
651 |
+use constant TRUE => 1; |
652 |
+ |
653 |
+sub main { |
654 |
+ |
655 |
+ my $c = shift; |
656 |
+ $c->app->log->info( $c->log_req ); |
657 |
+ |
658 |
+ my %vac_datas = (); |
659 |
+ my $title = $c->l('vac_FORM_TITLE'); |
660 |
+ my $modul = ''; |
661 |
+ |
662 |
+ $vac_datas{trt} = 'LIST'; |
663 |
+ |
664 |
+ my @vacations = get_vacation_table($c); |
665 |
+ my $empty = (scalar @vacations == 0); |
666 |
+ |
667 |
+ $vac_datas{"first"} = 'vac_MODIFY_DESCRIPTION'; |
668 |
+ |
669 |
+ $c->stash( |
670 |
+ title => $title, |
671 |
+ modul => $modul, |
672 |
+ vac_datas => \%vac_datas, |
673 |
+ vacations =>\@vacations, |
674 |
+ empty => $empty |
675 |
+ ); |
676 |
+ $c->render( template => 'uservacations' ); |
677 |
+} |
678 |
+ |
679 |
+sub do_display { |
680 |
+ |
681 |
+ my $c = shift; |
682 |
+ $c->app->log->info( $c->log_req ); |
683 |
+ |
684 |
+ my $rt = $c->current_route; |
685 |
+ my $trt = ( $c->param('trt') || 'LIST' ); |
686 |
+ |
687 |
+ $trt = 'ADD' if ( $rt eq 'Uservacations1' ); |
688 |
+ $trt = 'ADD1' if ( $rt eq 'Uservacations2' ); |
689 |
+ |
690 |
+ my %vac_datas = (); |
691 |
+ my $title = $c->l('vac_FORM_TITLE'); |
692 |
+ my $modul = ''; |
693 |
+ |
694 |
+ |
695 |
+ if ( $trt eq 'ADD' ) { |
696 |
+ # Add or change a vacation message - called from the list panel |
697 |
+ # Get the data and pass it across. |
698 |
+ my $account = $c->param("account"); |
699 |
+ my $user = $adb->get($account); |
700 |
+ my $username = $user->prop("FirstName")." ".$user->prop("LastName"); |
701 |
+ my $EmailVacation = $user->prop('EmailVacation') || ''; |
702 |
+ my $EmailVacationFrom = $user->prop('EmailVacationFrom') || ''; |
703 |
+ my $EmailVacationTo = $user->prop('EmailVacationTo') || ''; |
704 |
+ my $VacText = get_vacation_text($c); |
705 |
+ $c->stash(account=>$account, |
706 |
+ username=>$username, |
707 |
+ EmailVacation=>$EmailVacation, |
708 |
+ EmailVacationFrom=>$EmailVacationFrom, |
709 |
+ EmailVacationTo=>$EmailVacationTo, |
710 |
+ VacText=>$VacText |
711 |
+ ); |
712 |
+ } |
713 |
+ |
714 |
+ if ( $trt eq 'ADD1' ) { |
715 |
+ #Add or edit vacation message. |
716 |
+ my $ret = add_vac_message($c); |
717 |
+ #Return to list page if success |
718 |
+ if ($ret eq "OK") { |
719 |
+ $trt = "LIST"; |
720 |
+ $vac_datas{success} = "vac_SUCCESS"; |
721 |
+ |
722 |
+ } else { |
723 |
+ my $account = $c->param("account"); |
724 |
+ my $user = $adb->get($account); |
725 |
+ my $username = $user->prop("FirstName")." ".$user->prop("LastName"); |
726 |
+ my $EmailVacationFrom = $c->param('EmailVacationFrom') || ''; |
727 |
+ my $EmailVacationTo = $c->param('EmailVacationTo') || ''; |
728 |
+ my $EmailVacation = $c->param('EmailVacation') || ''; |
729 |
+ my $VacText = $c->param("VacText"); |
730 |
+ $c->stash(account=>$account, |
731 |
+ username=>$username, |
732 |
+ EmailVacation=>$EmailVacation, |
733 |
+ EmailVacationFrom=>$EmailVacationFrom, |
734 |
+ EmailVacationTo=>$EmailVacationTo, |
735 |
+ VacText=>$VacText |
736 |
+ ); |
737 |
+ #Error - return to Add page |
738 |
+ $trt = "ADD"; |
739 |
+ $vac_datas{error} = $ret; |
740 |
+ } |
741 |
+ } |
742 |
+ |
743 |
+ if ( $trt eq 'LIST' ) { |
744 |
+ |
745 |
+ #List all the users and vacation message details. |
746 |
+ my @vacations = get_vacation_table($c); |
747 |
+ my $empty = (scalar @vacations == 0); |
748 |
+ $c->stash( |
749 |
+ empty => $empty, |
750 |
+ vacations =>\@vacations |
751 |
+ ); |
752 |
+ } |
753 |
+ |
754 |
+ |
755 |
+ $vac_datas{'trt'} = $trt; |
756 |
+ $c->stash( title => $title, modul => $modul, vac_datas => \%vac_datas ); |
757 |
+ $c->render( template => 'uservacations' ); |
758 |
+} |
759 |
+ |
760 |
+sub user_accounts_exist |
761 |
+{ |
762 |
+ my $q = shift; |
763 |
+ #return scalar $adb->users; |
764 |
+ if (scalar $adb->users) |
765 |
+ { return $q->l('vac_DESCRIPTION'); } |
766 |
+} |
767 |
+ |
768 |
+sub get_vacation_table |
769 |
+{ |
770 |
+ my $self = shift; |
771 |
+ |
772 |
+#We want to retrieve granted group from DB, and retrieve users of groups |
773 |
+ my $record = $adb->get($PanelUser); |
774 |
+ my $dg; |
775 |
+ if ($record) {$dg=$record->prop('delegatedVacations')||'';} |
776 |
+ else {$dg = '';} |
777 |
+ $dg =~ s/ //g; |
778 |
+ my @g = split(/,/, $dg); |
779 |
+ my @visiblemembers = (); |
780 |
+ |
781 |
+ foreach my $g (@g) { |
782 |
+ my $members = $adb->get_prop("$g",'Members'); |
783 |
+ next unless defined $members; |
784 |
+ $members =~ s/ //g; |
785 |
+ my @members = split(/,/, $members); |
786 |
+ push @visiblemembers , @members ; |
787 |
+ } |
788 |
+ |
789 |
+ foreach my $k ( @visiblemembers ) |
790 |
+ { |
791 |
+ $delegatedVacations{$k}=1; |
792 |
+ } |
793 |
+ |
794 |
+ |
795 |
+ my @users = $adb->users; |
796 |
+ return () if (@users == 0); ##$self->l("ACCOUNT_USER_NONE") |
797 |
+ return () if (@visiblemembers == 0 && $dg ne '');#; #$self->l("NO_USERS_IN_GRANTED_GROUPS") |
798 |
+ |
799 |
+ my @data = (); |
800 |
+ |
801 |
+ for my $user (@users) |
802 |
+ { |
803 |
+ next if %delegatedVacations and not $delegatedVacations{$user->key}; |
804 |
+ # make it clearer which uses have vacation |
805 |
+ my $EmailVacation = $user->prop('EmailVacation') || ''; |
806 |
+ my $EmailVacationFrom = $user->prop('EmailVacationFrom') || ''; |
807 |
+ my $EmailVacationTo = $user->prop('EmailVacationTo') || ''; |
808 |
+ my $status = $user->prop('EmailVacation') || ''; |
809 |
+ if ($status eq 'yes') { $status = 'YES'; } else { $status = ''; } |
810 |
+ |
811 |
+ push @data, |
812 |
+ { User => $user->key, |
813 |
+ FullName => $user->prop('FirstName') . " " .$user->prop('LastName'), |
814 |
+ status => $self->l($status), |
815 |
+ EmailVacation => $EmailVacation, |
816 |
+ EmailVacationFrom => showDate($EmailVacationFrom), |
817 |
+ EmailVacationTo => showDate($EmailVacationTo), |
818 |
+ Modify => $self->l('vac_MODIFY'), |
819 |
+ } |
820 |
+ } |
821 |
+ return @data; |
822 |
+} |
823 |
+ |
824 |
+sub showDate |
825 |
+{ |
826 |
+ my $strDate = shift; |
827 |
+ my ($Year,$Month,$Day) = ($strDate =~ /(\d{4})(\d{2})(\d{2})/); |
828 |
+ #my $Unix = mktime(0,0,0,$Day,$Month,$Year); |
829 |
+ return "$Year-$Month-$Day"; |
830 |
+} |
831 |
+ |
832 |
+ |
833 |
+sub modify_link |
834 |
+{ |
835 |
+ my ($data_item, $row, $field) = @_; |
836 |
+ |
837 |
+ return "uservacations?" . |
838 |
+ join("&", |
839 |
+ "page=0", |
840 |
+ "page_stack=", |
841 |
+ "Next=Next", |
842 |
+ "User=" . $row->{User}, |
843 |
+ "FullName=" . $row->{FullName}, |
844 |
+ "EmailVacation=" . $row->{EmailVacation}, |
845 |
+ "EmailVacationFrom=" . $row->{EmailVacationFrom}, |
846 |
+ "EmailVacationTo=" . $row->{EmailVacationTo}, |
847 |
+ "wherenext=VACATION_PAGE_MODIFY"); |
848 |
+} |
849 |
+ |
850 |
+# this formats the text to display on screen |
851 |
+sub get_vacation_text |
852 |
+{ |
853 |
+ my $q = shift; |
854 |
+ my $domain = $db->get_value('DomainName'); |
855 |
+ my $user = $q->param('account'); |
856 |
+ |
857 |
+ my $fullname = $adb->get_prop($user, "FirstName") . " " . |
858 |
+ $adb->get_prop($user, "LastName"); |
859 |
+ |
860 |
+ my $vfile = "/home/e-smith/files/users/$user/.vacation.msg"; |
861 |
+ |
862 |
+ my $from = $q->l('vac_FROM'); |
863 |
+ my $Subject = $q->l('vac_SUBJECT'); |
864 |
+ my $away = $q->l('vac_AWAY_FROM_MAIL'); |
865 |
+ my $return = $q->l('vac_ANSWER_TO_OBJECT_SENDER'); |
866 |
+ |
867 |
+ my $ExistingMessage = "$from $fullname <\;$user\@$domain>\;\n"."$Subject $return\n". |
868 |
+ "\n$away\n"."\n--\n$fullname"; |
869 |
+ |
870 |
+ # if exists and is not empty |
871 |
+ if (( -e $vfile ) && (! -z $vfile )) |
872 |
+ { |
873 |
+ open (VACATION, "<$vfile") |
874 |
+ or die "Error: Could not open file: $vfile\n"; |
875 |
+ my @vacationTemp; |
876 |
+ |
877 |
+ #reformat so email address isn't hidden inside < > |
878 |
+ while (<VACATION>) |
879 |
+ { |
880 |
+ $_ =~ s/</<\;/; |
881 |
+ $_ =~ s/>/>\;/; |
882 |
+ push (@vacationTemp, $_); |
883 |
+ } |
884 |
+ |
885 |
+ $ExistingMessage = join ("", @vacationTemp); |
886 |
+ |
887 |
+ close VACATION; |
888 |
+ } |
889 |
+ return $ExistingMessage; |
890 |
+} |
891 |
+ |
892 |
+# saves the text to .vacation.msg |
893 |
+sub add_vac_message |
894 |
+{ |
895 |
+ my $q = shift; |
896 |
+ |
897 |
+ my $domain = $db->get_value('DomainName'); |
898 |
+ my $user = $q->param('account'); |
899 |
+ |
900 |
+ my $EmailVacation = $q->param('EmailVacation')||"no"; |
901 |
+ #die($EmailVacation); |
902 |
+ #if ($EmailVacation eq "yes") {$EmailVacation = "yes";} else {$EmailVacation = "no";} |
903 |
+ |
904 |
+ #Decode To and FROM to standard format - comes over in html5 iso format yyyy-mm-dd |
905 |
+ my $EmailVacationFrom = trim($q->param('EmailVacationFrom')); |
906 |
+ my ($fromYear,$fromMonth,$fromDay) = ($EmailVacationFrom =~ /(\d{4})-(\d{2})-(\d{2})/); |
907 |
+ $EmailVacationFrom = $fromYear.$fromMonth.$fromDay; |
908 |
+ if ($EmailVacationFrom !~ m/^2[0-9]{3}[0|1][0-9][0-3][0-9]$/ and $EmailVacationFrom ne "") {return "vac_FROM_DATE_INCORRECT";} |
909 |
+ my $EmailVacationTo = trim($q->param('EmailVacationTo')); |
910 |
+ my ($toYear,$toMonth,$toDay) = ($EmailVacationTo =~ /(\d{4})-(\d{2})-(\d{2})/); |
911 |
+ $EmailVacationTo = $toYear.$toMonth.$toDay; |
912 |
+# $EmailVacationTo =~ s/-//g; #Just take out "-". |
913 |
+ if ($EmailVacationTo !~ m/^2[0-9]{3}[0|1][0-9][0-3][0-9]$/ and $EmailVacationFrom ne "") {return "vac_TO_DATE_INCORRECT";} |
914 |
+ #Check not the same or From follows To. |
915 |
+ if ($EmailVacationTo ne "" and $EmailVacationTo eq $EmailVacationFrom) {return "vac_DATES_THE_SAME";} |
916 |
+ my $UnixFrom = mktime(0,0,0,$fromDay,$fromMonth,$fromYear); |
917 |
+ my $UnixTo = mktime(0,0,0,$toDay,$toMonth,$toYear); |
918 |
+ if ($UnixTo < $UnixFrom) {return "vac_TO_DATE_MUST_BE_LATER";} |
919 |
+ |
920 |
+ |
921 |
+ my $new_message = $q->param('VacText'); |
922 |
+ my $vfile = "/home/e-smith/files/users/$user/.vacation.msg"; |
923 |
+ |
924 |
+ my $fullname = $adb->get_prop($user, "FirstName") . " " . |
925 |
+ $adb->get_prop($user, "LastName"); |
926 |
+ |
927 |
+ my $from = 'From:'; |
928 |
+ my $away = $q->l('vac_AWAY_FROM_MAIL'); |
929 |
+ my $return = $q->l('vac_ANSWER_TO_OBJECT_SENDER'); |
930 |
+ |
931 |
+ my $vacation_text = "$from $fullname \<$user\@$domain\>\n"."Subject: $return\n". |
932 |
+ "\n$away \n"."\n--\n$fullname"; |
933 |
+ |
934 |
+ my $reset = $vacation_text; |
935 |
+ |
936 |
+ # if exists and is not empty |
937 |
+ if (( -e $vfile ) && (! -z $vfile )) |
938 |
+ { |
939 |
+ open (VACATION, "<$vfile") |
940 |
+ or die "Error: Could not open file: $vfile\n"; |
941 |
+ my @vacationTemp = <VACATION>; |
942 |
+ $vacation_text = join ("", @vacationTemp); |
943 |
+ |
944 |
+ close VACATION; |
945 |
+ } |
946 |
+ |
947 |
+ chomp $new_message; |
948 |
+ |
949 |
+ # reset msg to default, |
950 |
+ if ($new_message =~ /reset/) |
951 |
+ { $vacation_text = $reset; } |
952 |
+ else |
953 |
+ { |
954 |
+ #or save new_message |
955 |
+ unless ($new_message eq "") |
956 |
+ { $vacation_text = $new_message; } |
957 |
+ } |
958 |
+ |
959 |
+ # Strip out DOS Carriage Returns (CR) |
960 |
+ $vacation_text =~ s/\r//g; |
961 |
+ |
962 |
+ unlink $vfile; |
963 |
+ open (VACATION, ">$vfile") |
964 |
+ or die ("Error opening vacation message.\n"); |
965 |
+ |
966 |
+ print VACATION "$vacation_text"; |
967 |
+ close VACATION; |
968 |
+ |
969 |
+ esmith::util::chownFile($user, $user, |
970 |
+ "/home/e-smith/files/users/$user/.vacation.msg"); |
971 |
+ |
972 |
+ $adb->set_prop($user, 'EmailVacation', $EmailVacation); |
973 |
+ $adb->set_prop($user, 'EmailVacationFrom', $EmailVacationFrom); |
974 |
+ $adb->set_prop($user, 'EmailVacationTo', $EmailVacationTo); |
975 |
+ |
976 |
+ #the first is more correct but is slower |
977 |
+ #system ("/sbin/e-smith/signal-event", "email-update", $user) == 0 |
978 |
+ system ("/etc/e-smith/events/actions/qmail-update-user event $user") == 0 |
979 |
+ or die ("Error occurred updating .qmail\n"); |
980 |
+ |
981 |
+ if (($EmailVacation eq 'no') && ( -e "/home/e-smith/files/users/$user/.vacation")) |
982 |
+ { |
983 |
+ system ("/bin/rm /home/e-smith/files/users/$user/.vacation") == 0 |
984 |
+ or die ("Error resetting vacation db.\n"); |
985 |
+ } |
986 |
+ |
987 |
+ return "OK"; |
988 |
+} |
989 |
+ |
990 |
+sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s }; |
991 |
+ |
992 |
+1; |
993 |
diff -urN smeserver-vacation-1.1.old/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Uservacations/en.pm smeserver-vacation-1.1/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Uservacations/en.pm |
994 |
--- smeserver-vacation-1.1.old/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Uservacations/en.pm 1970-01-01 01:00:00.000000000 +0100 |
995 |
+++ smeserver-vacation-1.1/root/usr/share/smanager/lib/SrvMngr/I18N/Modules/Uservacations/en.pm 2020-05-19 15:36:00.000000000 +0100 |
996 |
@@ -0,0 +1,63 @@ |
997 |
+package SrvMngr::I18N::Modules::Uservacations::en; |
998 |
+use strict; |
999 |
+use warnings; |
1000 |
+use utf8; |
1001 |
+use Mojo::Base 'SrvMngr::I18N'; |
1002 |
+ |
1003 |
+use SrvMngr::I18N::Modules::General::en; |
1004 |
+ |
1005 |
+my %lexicon = ( |
1006 |
+'vac_User vacations' =>'User vacations', |
1007 |
+'vac_Vacation Message' =>'Vacation Message', |
1008 |
+'vac_FORM_TITLE' =>'Change user vacation settings', |
1009 |
+'vac_DESCRIPTION' =>' You can modify a users vacation message by clicking |
1010 |
+ on the link to the right of their name below. |
1011 |
+', |
1012 |
+'vac_LABEL_VACATION' =>'Vacation', |
1013 |
+'vac_NO_FORWARDS'=>'No users found for forwarding', |
1014 |
+'vac_VACATION_FROM' =>'Vacation starts on <br>(YYYY-MM-DD)', |
1015 |
+'vac_VACATION_TO' =>'Vacation finishes on <br>(YYYY-MM-DD)', |
1016 |
+'vac_VACATION_FROM1' =>'Vacation starts on', |
1017 |
+'vac_VACATION_TO1' =>'Vacation finishes on', |
1018 |
+'vac_MESSAGE' =>'Vacation message', |
1019 |
+'vac_VACATION_STATUS' =>'Enable vacation messages', |
1020 |
+'vac_FROM' =>'From:', |
1021 |
+'vac_SUBJECT' =>'Subject:', |
1022 |
+'vac_AWAY_FROM_MAIL' =>'I will not be reading my mail for a while. Your mail regarding $SUBJECT will be read when I return.', |
1023 |
+'vac_NO_USERS_IN_GRANTED_GROUPS' =>'There are no users in the group(s) that you are granted to manage.', |
1024 |
+'vac_ANSWER_TO_OBJECT_SENDER' => 'Re: $SUBJECT - Away from my email ', |
1025 |
+'vac_FROM_DATE_INCORRECT'=>'From date must have YYYYMMDD format', |
1026 |
+'vac_TO_DATE_INCORRECT'=>'To date must have YYYYMMDD format', |
1027 |
+'vac_DATES_THE_SAME'=>"The Start and Finish dates cannot be the same", |
1028 |
+'vac_TO_DATE_MUST_BE_LATER'=>"The Finish dates cannot be earlier than the Start date", |
1029 |
+'vac_SUCCESS'=>'Vacation message saved sucessfully', |
1030 |
+'vac_MODIFY_DESCRIPTION' =>' |
1031 |
+ <p> |
1032 |
+ Enter a vacation message here. You can use $SUBJECT |
1033 |
+ anywhere in the text to be replaced with the subject line |
1034 |
+ from the email that activated the auto-reply.</p> |
1035 |
+ |
1036 |
+ <p> |
1037 |
+ This message must be composed of two parts separated by a blank line. |
1038 |
+ The first will be integrated into the headings of the email reply, |
1039 |
+ you must thus ensure you leave at least a blank line before typing your message. |
1040 |
+ 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 |
1041 |
+ 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). |
1042 |
+ To change the vacation message back to the default type reset.</p> |
1043 |
+ <p> |
1044 |
+ You can also fill out the Enable vacation on and Disable vacation on fields in order to |
1045 |
+ automatically enable and disable sending of the vacation message for this user account on the given dates. |
1046 |
+ </p> |
1047 |
+ <p> |
1048 |
+ The dates in the two fields must not be the same.<br> |
1049 |
+ 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. |
1050 |
+ </p>' |
1051 |
+); |
1052 |
+ |
1053 |
+our %Lexicon = ( |
1054 |
+ %{ SrvMngr::I18N::Modules::General::en::Lexicon }, |
1055 |
+ %lexicon |
1056 |
+); |
1057 |
+ |
1058 |
+ |
1059 |
+1; |
1060 |
diff -urN smeserver-vacation-1.1.old/root/usr/share/smanager/themes/default/templates/partials/_vac_add.html.ep smeserver-vacation-1.1/root/usr/share/smanager/themes/default/templates/partials/_vac_add.html.ep |
1061 |
--- smeserver-vacation-1.1.old/root/usr/share/smanager/themes/default/templates/partials/_vac_add.html.ep 1970-01-01 01:00:00.000000000 +0100 |
1062 |
+++ smeserver-vacation-1.1/root/usr/share/smanager/themes/default/templates/partials/_vac_add.html.ep 2020-05-19 15:36:00.000000000 +0100 |
1063 |
@@ -0,0 +1,54 @@ |
1064 |
+<div id='vac_add'> |
1065 |
+ |
1066 |
+ % my $btn = l('ADD'); |
1067 |
+ |
1068 |
+ % if ($config->{debug} == 1) { |
1069 |
+ <p> |
1070 |
+ %= dumper $c->current_route |
1071 |
+ %= dumper $EmailVacation |
1072 |
+ </p> |
1073 |
+ % } |
1074 |
+ |
1075 |
+ %= form_for '/Uservacations2' => (method => 'POST') => begin |
1076 |
+ |
1077 |
+ <span class=label> |
1078 |
+ %=l 'ACCOUNT' |
1079 |
+ </span><span class=data> |
1080 |
+ %= $account |
1081 |
+ </span><br><br> |
1082 |
+ <span class=label> |
1083 |
+ %=l 'USER_NAME' |
1084 |
+ </span><span class=data> |
1085 |
+ %=$username |
1086 |
+ </span><br><br> |
1087 |
+ <span class=label> |
1088 |
+ %=$c->render_to_string(inline =>$c->l('vac_VACATION_FROM1')) |
1089 |
+ </span> |
1090 |
+ <span class=data> |
1091 |
+ %=date_field 'EmailVacationFrom' =>$EmailVacationFrom |
1092 |
+ </span><br><br> |
1093 |
+ <span class=label> |
1094 |
+ %=$c->render_to_string(inline =>$c->l('vac_VACATION_TO1')) |
1095 |
+ </span> |
1096 |
+ <span class=data> |
1097 |
+ %=date_field 'EmailVacationTo' =>$EmailVacationTo |
1098 |
+ </span><br><br> |
1099 |
+ <span class=label> |
1100 |
+ %=l 'vac_MESSAGE' |
1101 |
+ </span> |
1102 |
+ <span class=data> |
1103 |
+ %=text_area 'VacText' => $VacText, cols=>55, rows=>15 |
1104 |
+ </span><br><br> |
1105 |
+ <span class=label> |
1106 |
+ %=l 'vac_VACATION_STATUS' |
1107 |
+ </span> |
1108 |
+ <span class=data> |
1109 |
+ % param EmailVacation => "$EmailVacation"; |
1110 |
+ %=select_field EmailVacation =>[['Yes'=>'yes'],['No'=>'no']] |
1111 |
+ </span><br><br> |
1112 |
+ %= hidden_field 'account' => $account |
1113 |
+ |
1114 |
+ %= submit_button "$btn", class => 'action' |
1115 |
+ %end |
1116 |
+ |
1117 |
+</div> |
1118 |
diff -urN smeserver-vacation-1.1.old/root/usr/share/smanager/themes/default/templates/partials/_vac_list.html.ep smeserver-vacation-1.1/root/usr/share/smanager/themes/default/templates/partials/_vac_list.html.ep |
1119 |
--- smeserver-vacation-1.1.old/root/usr/share/smanager/themes/default/templates/partials/_vac_list.html.ep 1970-01-01 01:00:00.000000000 +0100 |
1120 |
+++ smeserver-vacation-1.1/root/usr/share/smanager/themes/default/templates/partials/_vac_list.html.ep 2020-06-10 18:22:00.000000000 +0100 |
1121 |
@@ -0,0 +1,50 @@ |
1122 |
+<div id='vac_list'> |
1123 |
+ |
1124 |
+ %# my $btn = l('vac_CREATE_RULE'); |
1125 |
+ |
1126 |
+ %= form_for '/Uservacations1' => (method => 'POST') => begin |
1127 |
+ <br><br> |
1128 |
+ |
1129 |
+ % if ($empty){ |
1130 |
+ <br> |
1131 |
+ %=l 'vac_NO_FORWARDS' |
1132 |
+ % } else { |
1133 |
+ <table class="sme-border"><tbody> |
1134 |
+ <tr> |
1135 |
+ <th class='sme-border'> |
1136 |
+ %=l 'ACCOUNT' |
1137 |
+ </th> |
1138 |
+ <th class='sme-border'> |
1139 |
+ %=l 'USER_NAME' |
1140 |
+ </th> |
1141 |
+ <th class='sme-border'> |
1142 |
+ %=l 'vac_LABEL_VACATION' |
1143 |
+ </th> |
1144 |
+ |
1145 |
+ <th class='sme-border'> |
1146 |
+ %=$c->render_to_string(inline =>l('vac_VACATION_FROM')) |
1147 |
+ </th> |
1148 |
+ <th class='sme-border'> |
1149 |
+ %=$c->render_to_string(inline =>l('vac_VACATION_TO')) |
1150 |
+ </th> |
1151 |
+ <th class='sme-border' '> |
1152 |
+ %=l 'ACTION' |
1153 |
+ </th> |
1154 |
+ </tr> |
1155 |
+ % foreach my $vacation (@$vacations) { |
1156 |
+ <tr> |
1157 |
+ %= t td => (class => 'sme-border') => $vacation->{"User"} |
1158 |
+ %= t td => (class => 'sme-border') => $vacation->{"FullName"} |
1159 |
+ %= t td => (class => 'sme-border') => $vacation->{"status"} |
1160 |
+ %= t td => (class => 'sme-border') => $vacation->{"EmailVacationFrom"} |
1161 |
+ %= t td => (class => 'sme-border') => $vacation->{"EmailVacationTo"} |
1162 |
+ <td> |
1163 |
+ <a href="/smanager/Uservacations1?trt=ADD&account=<%= $vacation->{"User"}%>"><%=l 'MODIFY'%></a> |
1164 |
+ </td> |
1165 |
+ </tr> |
1166 |
+ %} |
1167 |
+ </tbody> |
1168 |
+ </table> |
1169 |
+ %} |
1170 |
+ % end |
1171 |
+</div> |
1172 |
diff -urN smeserver-vacation-1.1.old/root/usr/share/smanager/themes/default/templates/uservacations.html.ep smeserver-vacation-1.1/root/usr/share/smanager/themes/default/templates/uservacations.html.ep |
1173 |
--- smeserver-vacation-1.1.old/root/usr/share/smanager/themes/default/templates/uservacations.html.ep 1970-01-01 01:00:00.000000000 +0100 |
1174 |
+++ smeserver-vacation-1.1/root/usr/share/smanager/themes/default/templates/uservacations.html.ep 2020-05-19 15:36:00.000000000 +0100 |
1175 |
@@ -0,0 +1,42 @@ |
1176 |
+% layout 'default', title => "Sme server 2 - User Vacations", share_dir => './'; |
1177 |
+ |
1178 |
+% content_for 'module' => begin |
1179 |
+<div id="module"> |
1180 |
+ |
1181 |
+ % if ($config->{debug} == 1) { |
1182 |
+ <p> |
1183 |
+ %= dumper $c->current_route |
1184 |
+ </p> |
1185 |
+ % } |
1186 |
+ |
1187 |
+ <h1><%=$title%></h1> |
1188 |
+ %= $modul |
1189 |
+ |
1190 |
+ %if ($vac_datas->{first}) { |
1191 |
+ <br> |
1192 |
+ %=$c->render_to_string(inline =>$c->l($vac_datas->{first})) |
1193 |
+ |
1194 |
+ %} elsif ($vac_datas->{success}) { |
1195 |
+ <div class='"success"'> |
1196 |
+ <h2> Operation Status Report</h2> |
1197 |
+ %= $c->l($vac_datas->{success}); |
1198 |
+ </div> |
1199 |
+ |
1200 |
+ %} elsif ($vac_datas->{error}) { |
1201 |
+ <div class='sme-error'> |
1202 |
+ <h2> Operation Status Report - error</h2> |
1203 |
+ %= $c->l($vac_datas->{error}); |
1204 |
+ </div> |
1205 |
+ %} |
1206 |
+ |
1207 |
+ |
1208 |
+ % if ($vac_datas->{trt} eq 'ADD') { |
1209 |
+ %= include 'partials/_vac_add' |
1210 |
+ %} elsif ($vac_datas->{trt} eq 'ADD1') { |
1211 |
+ %= include 'partials/_vac_add' |
1212 |
+ %} else { |
1213 |
+ %= include 'partials/_vac_list' |
1214 |
+ %} |
1215 |
+ |
1216 |
+</div> |
1217 |
+%end |