Skip to content

Commit 75ae20a

Browse files
author
wyrie
committed
Implemented: FS#1003 - Autoresponder: Start and end date (Interface)
1 parent 26c5282 commit 75ae20a

File tree

5 files changed

+244
-5
lines changed

5 files changed

+244
-5
lines changed

interface/lib/classes/tform.inc.php

Lines changed: 136 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,20 @@ function getHTML($record, $tab, $action = 'NEW') {
428428
}
429429
$new_record[$key] = $out;
430430
break;
431+
432+
case 'DATETIME':
433+
if (strtotime($val) !== false) {
434+
$dt_value = $val;
435+
} elseif ( isset($field['default']) && (strtotime($field['default']) !== false) ) {
436+
$dt_value = $field['default'];
437+
} else {
438+
$dt_value = 0;
439+
}
440+
441+
$display_seconds = (isset($field['display_seconds']) && $field['display_seconds'] == true) ? true : false;
442+
443+
$new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds);
444+
break;
431445

432446
default:
433447
$new_record[$key] = htmlspecialchars($record[$key]);
@@ -520,6 +534,13 @@ function getHTML($record, $tab, $action = 'NEW') {
520534
}
521535
$new_record[$key] = $out;
522536
break;
537+
538+
case 'DATETIME':
539+
$dt_value = (isset($field['default'])) ? $field['default'] : 0;
540+
$display_seconds = (isset($field['display_seconds']) && $field['display_seconds'] == true) ? true : false;
541+
542+
$new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds);
543+
break;
523544

524545
default:
525546
$new_record[$key] = htmlspecialchars($field['default']);
@@ -585,6 +606,18 @@ function encode($record,$tab) {
585606
case 'CURRENCY':
586607
$new_record[$key] = str_replace(",",".",$record[$key]);
587608
break;
609+
610+
case 'DATETIME':
611+
if (is_array($record[$key]))
612+
{
613+
$filtered_values = array_map(create_function('$item','return (int)$item;'), $record[$key]);
614+
extract($filtered_values, EXTR_PREFIX_ALL, '_dt');
615+
616+
if ($_dt_day != 0 && $_dt_month != 0 && $_dt_year != 0) {
617+
$new_record[$key] = date( 'Y-m-d H:i:s', mktime($_dt_hour, $_dt_minute, $_dt_second, $_dt_month, $_dt_day, $_dt_year) );
618+
}
619+
}
620+
break;
588621
}
589622

590623
// The use of the field value is deprecated, use validators instead
@@ -1256,7 +1289,109 @@ function getDiffRecord($record_old,$record_new) {
12561289
return $diffrec;
12571290

12581291
}
1259-
1292+
1293+
/**
1294+
* Generate HTML for DATETIME fields.
1295+
*
1296+
* @access private
1297+
* @param string $form_element Name of the form element.
1298+
* @param string $default_value Selected value for fields.
1299+
* @param bool $display_secons Include seconds selection.
1300+
* @return string HTML
1301+
*/
1302+
function _getDateTimeHTML($form_element, $default_value, $display_seconds=false)
1303+
{
1304+
$_datetime = strtotime($default_value);
1305+
$_showdate = ($_datetime === false) ? false : true;
1306+
1307+
$dselect = array('day','month','year','hour','minute');
1308+
if ($display_seconds === true) {
1309+
$dselect[] = 'second';
1310+
}
1311+
1312+
$out = '';
1313+
1314+
foreach ($dselect as $dt_element)
1315+
{
1316+
$dt_options = array();
1317+
$dt_space = 1;
1318+
1319+
switch ($dt_element) {
1320+
case 'day':
1321+
for ($i = 1; $i <= 31; $i++) {
1322+
$dt_options[] = array('name' => sprintf('%02d', $i),
1323+
'value' => sprintf('%d', $i));
1324+
}
1325+
$selected_value = date('d', $_datetime);
1326+
break;
1327+
1328+
case 'month':
1329+
for ($i = 1; $i <= 12; $i++) {
1330+
$dt_options[] = array('name' => strftime('%b', mktime(0, 0, 0, $i, 1, 2000)),
1331+
'value' => strftime('%m', mktime(0, 0, 0, $i, 1, 2000)));
1332+
}
1333+
$selected_value = date('n', $_datetime);
1334+
break;
1335+
1336+
case 'year':
1337+
$start_year = strftime("%Y");
1338+
$years = range((int)$start_year, (int)($start_year+3));
1339+
1340+
foreach ($years as $year) {
1341+
$dt_options[] = array('name' => $year,
1342+
'value' => $year);
1343+
}
1344+
$selected_value = date('Y', $_datetime);
1345+
$dt_space = 2;
1346+
break;
1347+
1348+
case 'hour':
1349+
foreach(range(0, 23) as $hour) {
1350+
$dt_options[] = array('name' => sprintf('%02d', $hour),
1351+
'value' => sprintf('%d', $hour));
1352+
}
1353+
$selected_value = date('G', $_datetime);
1354+
break;
1355+
1356+
case 'minute':
1357+
foreach(range(0, 59) as $minute) {
1358+
if (($minute % 5) == 0) {
1359+
$dt_options[] = array('name' => sprintf('%02d', $minute),
1360+
'value' => sprintf('%d', $minute));
1361+
}
1362+
}
1363+
$selected_value = (int)floor(date('i', $_datetime));
1364+
break;
1365+
1366+
case 'second':
1367+
foreach(range(0, 59) as $second) {
1368+
$dt_options[] = array('name' => sprintf('%02d', $second),
1369+
'value' => sprintf('%d', $second));
1370+
}
1371+
$selected_value = (int)floor(date('s', $_datetime));
1372+
break;
1373+
}
1374+
1375+
$out .= "<select name=\"".$form_element."[$dt_element]\" id=\"".$form_element."_$dt_element\" class=\"selectInput\" style=\"width: auto; float: none;\">";
1376+
if (!$_showdate) {
1377+
$out .= "<option value=\"-\" selected=\"selected\">--</option>" . PHP_EOL;
1378+
} else {
1379+
$out .= "<option value=\"-\">--</option>" . PHP_EOL;
1380+
}
1381+
1382+
foreach ($dt_options as $dt_opt) {
1383+
if ( $_showdate && ($selected_value == $dt_opt['value']) ) {
1384+
$out .= "<option value=\"{$dt_opt['value']}\" selected=\"selected\">{$dt_opt['name']}</option>" . PHP_EOL;
1385+
} else {
1386+
$out .= "<option value=\"{$dt_opt['value']}\">{$dt_opt['name']}</option>" . PHP_EOL;
1387+
}
1388+
}
1389+
1390+
$out .= '</select>' . str_repeat('&nbsp;', $dt_space);
1391+
}
1392+
1393+
return $out;
1394+
}
12601395
}
12611396

12621397
?>

interface/web/js/uni-form/uni-form.jquery.js

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,68 @@ jQuery.fn.uniform = function(settings) {
3838
// Auto set on page load...
3939
$(document).ready(function() {
4040
jQuery('form.uniForm').uniform();
41-
});
41+
});
42+
43+
function AR_ResetDates()
44+
{
45+
if ($("#autoresponder:checked").val() == null) {
46+
$("form.uniForm select").each(
47+
function(){
48+
$(this).val( $("#" + $(this).attr("id") + " option:first").val() );
49+
}
50+
);
51+
}
52+
}
53+
54+
function AR_SetNow()
55+
{
56+
DateTime_SetValues('autoresponder_start_date');
57+
58+
now = new Date();
59+
end_date = new Date(now.getFullYear(), now.getMonth(), now.getDate()+2, 0, 0);
60+
61+
DateTime_SetValues('autoresponder_end_date', end_date);
62+
}
63+
64+
function DateTime_SetValues(datetime_id, date_obj)
65+
{
66+
var selects = ['day', 'month', 'year', 'hour', 'minute', 'second'];
67+
68+
if ( (typeof(date_obj) == 'object') && (typeof(date_obj.getDate()) == 'number') ) {
69+
var now = date_obj;
70+
} else {
71+
var now = new Date();
72+
}
73+
74+
jQuery.each(selects, function() {
75+
var unit_name = this.toString();
76+
var unit_value = '';
77+
78+
switch(unit_name)
79+
{
80+
case 'day':
81+
unit_value = now.getDate();
82+
break;
83+
case 'month':
84+
unit_value = now.getMonth() + 1;
85+
break;
86+
case 'year':
87+
unit_value = now.getFullYear();
88+
break;
89+
case 'hour':
90+
unit_value = now.getHours();
91+
break;
92+
case 'minute':
93+
unit_value = Math.round(parseInt(now.getMinutes())/5)*5;
94+
break;
95+
case 'second':
96+
unit_value = now.getSeconds();
97+
break;
98+
}
99+
100+
unit_obj = $("#"+ datetime_id + "_" + unit_name);
101+
if (unit_obj.val() !== null) {
102+
unit_obj.val(unit_value);
103+
}
104+
});
105+
}

interface/web/mail/form/mail_user.tform.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,24 @@
188188
'default' => 'n',
189189
'value' => array(1 => 'y',0 => 'n')
190190
),
191+
'autoresponder_start_date' => array (
192+
'datatype' => 'DATETIME',
193+
'formtype' => 'DATETIME',
194+
'validators'=> array ( 0 => array ( 'type' => 'CUSTOM',
195+
'class' => 'validate_autoresponder',
196+
'function' => 'start_date',
197+
'errmsg'=> 'autoresponder_start_date_isfuture'),
198+
),
199+
),
200+
'autoresponder_end_date' => array (
201+
'datatype' => 'DATETIME',
202+
'formtype' => 'DATETIME',
203+
'validators'=> array ( 0 => array ( 'type' => 'CUSTOM',
204+
'class' => 'validate_autoresponder',
205+
'function' => 'end_date',
206+
'errmsg'=> 'autoresponder_end_date_isgreater'),
207+
),
208+
),
191209
##################################
192210
# ENDE Datatable fields
193211
##################################

interface/web/mail/mail_user_edit.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,13 @@ function onShowEnd() {
107107
// Convert quota from Bytes to MB
108108
if($this->dataRecord["quota"] != -1) $app->tpl->setVar("quota",$this->dataRecord["quota"] / 1024 / 1024);
109109

110+
// Is autoresponder set?
111+
if ($this->dataRecord['autoresponder'] == 'y') {
112+
$app->tpl->setVar("ar_active", 'checked="checked"');
113+
} else {
114+
$app->tpl->setVar("ar_active", '');
115+
}
116+
110117
parent::onShowEnd();
111118
}
112119

@@ -188,6 +195,12 @@ function onSubmit() {
188195

189196
}
190197

198+
//* if autoresponder checkbox not selected, do not save dates
199+
if (!isset($_POST['autoresponder']) && array_key_exists('autoresponder_start_date', $_POST)) {
200+
$this->dataRecord['autoresponder_start_date'] = array_map(create_function('$item','return 0;'), $this->dataRecord['autoresponder_start_date']);
201+
$this->dataRecord['autoresponder_end_date'] = array_map(create_function('$item','return 0;'), $this->dataRecord['autoresponder_end_date']);
202+
}
203+
191204
parent::onSubmit();
192205
}
193206

interface/web/mail/templates/mail_user_autoresponder_edit.htm

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,18 @@ <h2><tmpl_var name="list_head_txt"></h2>
1212
<div class="ctrlHolder">
1313
<p class="label">{tmpl_var name='autoresponder_txt'}</p>
1414
<div class="multiField">
15-
{tmpl_var name='autoresponder'}
15+
<div class="ctrlHolder" style="margin-bottom: 5px;">
16+
<input type="checkbox" value="y" id="autoresponder" name="autoresponder" onclick="AR_ResetDates();" {tmpl_var name='ar_active'} />&nbsp;{tmpl_var format='strtoupper' name='page_and_txt'}<br />
17+
</div>
18+
19+
<p style="margin-bottom: 3px;">
20+
<label for="autoresponder_start_date[day]" style="width: 55px;">{tmpl_var name='autoresponder_start_date_txt'}</label>
21+
{tmpl_var name='autoresponder_start_date'}&nbsp;<a href="javascript:AR_SetNow();">now</a></p>
22+
23+
<label for="password" style="width: 55px;">{tmpl_var name='autoresponder_end_date_txt'}</label>
24+
{tmpl_var name='autoresponder_end_date'}
1625
</div>
17-
</div>
26+
</div>
1827
</fieldset>
1928

2029
<input type="hidden" name="id" value="{tmpl_var name='id'}">
@@ -25,4 +34,4 @@ <h2><tmpl_var name="list_head_txt"></h2>
2534
</div>
2635
</div>
2736

28-
</div>
37+
</div>

0 commit comments

Comments
 (0)