wyrie
2009-12-17 75ae20a22be7615e991f13400c276bc13c24ba4c
Implemented: FS#1003 - Autoresponder: Start and end date (Interface)
5 files modified
247 ■■■■■ changed files
interface/lib/classes/tform.inc.php 135 ●●●●● patch | view | raw | blame | history
interface/web/js/uni-form/uni-form.jquery.js 66 ●●●●● patch | view | raw | blame | history
interface/web/mail/form/mail_user.tform.php 18 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_user_edit.php 13 ●●●●● patch | view | raw | blame | history
interface/web/mail/templates/mail_user_autoresponder_edit.htm 15 ●●●● patch | view | raw | blame | history
interface/lib/classes/tform.inc.php
@@ -428,6 +428,20 @@
                                                }
                                                $new_record[$key] = $out;
                                        break;
                                        case 'DATETIME':
                                                if (strtotime($val) !== false) {
                                                    $dt_value = $val;
                                                } elseif ( isset($field['default']) && (strtotime($field['default']) !== false) ) {
                                                    $dt_value = $field['default'];
                                                } else {
                                                    $dt_value = 0;
                                                }
                                                $display_seconds = (isset($field['display_seconds']) && $field['display_seconds'] == true) ? true : false;
                                                $new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds);
                                        break;
                                        default:
                                                $new_record[$key] = htmlspecialchars($record[$key]);
@@ -520,6 +534,13 @@
                                        }
                                        $new_record[$key] = $out;
                                break;
                                case 'DATETIME':
                                        $dt_value = (isset($field['default'])) ? $field['default'] : 0;
                                        $display_seconds = (isset($field['display_seconds']) && $field['display_seconds'] == true) ? true : false;
                                        $new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds);
                                break;
                                default:
                                        $new_record[$key] = htmlspecialchars($field['default']);
@@ -584,6 +605,18 @@
                                break;
                                case 'CURRENCY':
                                        $new_record[$key] = str_replace(",",".",$record[$key]);
                                break;
                                case 'DATETIME':
                                        if (is_array($record[$key]))
                                        {
                                            $filtered_values = array_map(create_function('$item','return (int)$item;'), $record[$key]);
                                            extract($filtered_values, EXTR_PREFIX_ALL, '_dt');
                                            if ($_dt_day != 0 && $_dt_month != 0 && $_dt_year != 0) {
                                                $new_record[$key] = date( 'Y-m-d H:i:s', mktime($_dt_hour, $_dt_minute, $_dt_second, $_dt_month, $_dt_day, $_dt_year) );
                                            }
                                        }
                                break;
                                }
@@ -1256,7 +1289,109 @@
            return $diffrec;
        
        }
        /**
         * Generate HTML for DATETIME fields.
         *
         * @access private
         * @param string $form_element Name of the form element.
         * @param string $default_value Selected value for fields.
         * @param bool $display_secons Include seconds selection.
         * @return string HTML
         */
        function _getDateTimeHTML($form_element, $default_value, $display_seconds=false)
        {
            $_datetime = strtotime($default_value);
            $_showdate = ($_datetime === false) ? false : true;
            $dselect = array('day','month','year','hour','minute');
            if ($display_seconds === true) {
                 $dselect[] = 'second';
            }
            $out = '';
            foreach ($dselect as $dt_element)
            {
                 $dt_options = array();
                 $dt_space = 1;
                 switch ($dt_element) {
                     case 'day':
                         for ($i = 1; $i <= 31; $i++) {
                            $dt_options[] = array('name' =>  sprintf('%02d', $i),
                                                  'value' => sprintf('%d', $i));
                        }
                        $selected_value = date('d', $_datetime);
                         break;
                     case 'month':
                         for ($i = 1; $i <= 12; $i++) {
                            $dt_options[] = array('name' => strftime('%b', mktime(0, 0, 0, $i, 1, 2000)),
                                                  'value' => strftime('%m', mktime(0, 0, 0, $i, 1, 2000)));
                        }
                        $selected_value = date('n', $_datetime);
                         break;
                     case 'year':
                         $start_year = strftime("%Y");
                        $years = range((int)$start_year, (int)($start_year+3));
                        foreach ($years as $year) {
                            $dt_options[] = array('name' => $year,
                                                 'value' => $year);
                        }
                        $selected_value = date('Y', $_datetime);
                        $dt_space = 2;
                         break;
                     case 'hour':
                         foreach(range(0, 23) as $hour) {
                             $dt_options[] = array('name' =>  sprintf('%02d', $hour),
                                                  'value' => sprintf('%d', $hour));
                         }
                         $selected_value = date('G', $_datetime);
                         break;
                     case 'minute':
                         foreach(range(0, 59) as $minute) {
                             if (($minute % 5) == 0) {
                                 $dt_options[] = array('name' =>  sprintf('%02d', $minute),
                                                      'value' => sprintf('%d', $minute));
                             }
                         }
                         $selected_value = (int)floor(date('i', $_datetime));
                         break;
                     case 'second':
                         foreach(range(0, 59) as $second) {
                             $dt_options[] = array('name' =>  sprintf('%02d', $second),
                                                    'value' => sprintf('%d', $second));
                         }
                         $selected_value = (int)floor(date('s', $_datetime));
                         break;
                 }
                $out .= "<select name=\"".$form_element."[$dt_element]\" id=\"".$form_element."_$dt_element\" class=\"selectInput\" style=\"width: auto; float: none;\">";
                if (!$_showdate) {
                    $out .= "<option value=\"-\" selected=\"selected\">--</option>" . PHP_EOL;
                } else {
                    $out .= "<option value=\"-\">--</option>" . PHP_EOL;
                }
                foreach ($dt_options as $dt_opt) {
                    if ( $_showdate && ($selected_value == $dt_opt['value']) ) {
                        $out .= "<option value=\"{$dt_opt['value']}\" selected=\"selected\">{$dt_opt['name']}</option>" . PHP_EOL;
                    } else {
                        $out .= "<option value=\"{$dt_opt['value']}\">{$dt_opt['name']}</option>" . PHP_EOL;
                    }
                }
                $out .= '</select>' . str_repeat('&nbsp;', $dt_space);
            }
            return $out;
        }
}
?>
interface/web/js/uni-form/uni-form.jquery.js
@@ -38,4 +38,68 @@
// Auto set on page load...
$(document).ready(function() {
  jQuery('form.uniForm').uniform();
});
});
function AR_ResetDates()
{
    if ($("#autoresponder:checked").val() == null) {
        $("form.uniForm select").each(
         function(){
            $(this).val( $("#" + $(this).attr("id") + " option:first").val() );
         }
        );
    }
}
function AR_SetNow()
{
    DateTime_SetValues('autoresponder_start_date');
    now = new Date();
    end_date = new Date(now.getFullYear(), now.getMonth(), now.getDate()+2, 0, 0);
    DateTime_SetValues('autoresponder_end_date', end_date);
}
function DateTime_SetValues(datetime_id, date_obj)
{
    var selects = ['day', 'month', 'year', 'hour', 'minute', 'second'];
    if ( (typeof(date_obj) == 'object') && (typeof(date_obj.getDate()) == 'number') ) {
        var now = date_obj;
    } else {
        var now = new Date();
    }
    jQuery.each(selects, function() {
        var unit_name = this.toString();
        var unit_value = '';
        switch(unit_name)
        {
            case 'day':
                unit_value = now.getDate();
                break;
            case 'month':
                unit_value = now.getMonth() + 1;
                break;
            case 'year':
                unit_value = now.getFullYear();
                break;
            case 'hour':
                unit_value = now.getHours();
                break;
            case 'minute':
                unit_value = Math.round(parseInt(now.getMinutes())/5)*5;
                break;
            case 'second':
                unit_value = now.getSeconds();
                break;
        }
        unit_obj = $("#"+ datetime_id + "_" + unit_name);
        if (unit_obj.val() !== null) {
            unit_obj.val(unit_value);
        }
    });
}
interface/web/mail/form/mail_user.tform.php
@@ -188,6 +188,24 @@
            'default'    => 'n',
            'value'        => array(1 => 'y',0 => 'n')
        ),
        'autoresponder_start_date' => array (
            'datatype'    => 'DATETIME',
            'formtype'    => 'DATETIME',
            'validators'=> array (     0 => array (    'type'    => 'CUSTOM',
                                                    'class' => 'validate_autoresponder',
                                                    'function' => 'start_date',
                                                    'errmsg'=> 'autoresponder_start_date_isfuture'),
                                 ),
        ),
        'autoresponder_end_date' => array (
            'datatype'    => 'DATETIME',
            'formtype'    => 'DATETIME',
            'validators'=> array (     0 => array (    'type'    => 'CUSTOM',
                                                    'class' => 'validate_autoresponder',
                                                    'function' => 'end_date',
                                                    'errmsg'=> 'autoresponder_end_date_isgreater'),
                                 ),
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
interface/web/mail/mail_user_edit.php
@@ -107,6 +107,13 @@
        // Convert quota from Bytes to MB
        if($this->dataRecord["quota"] != -1) $app->tpl->setVar("quota",$this->dataRecord["quota"] / 1024 / 1024);
        
        // Is autoresponder set?
        if ($this->dataRecord['autoresponder'] == 'y') {
            $app->tpl->setVar("ar_active", 'checked="checked"');
        } else {
            $app->tpl->setVar("ar_active", '');
        }
        parent::onShowEnd();
    }
    
@@ -188,6 +195,12 @@
            
        }
        
        //* if autoresponder checkbox not selected, do not save dates
        if (!isset($_POST['autoresponder']) && array_key_exists('autoresponder_start_date', $_POST)) {
            $this->dataRecord['autoresponder_start_date'] = array_map(create_function('$item','return 0;'), $this->dataRecord['autoresponder_start_date']);
            $this->dataRecord['autoresponder_end_date'] = array_map(create_function('$item','return 0;'), $this->dataRecord['autoresponder_end_date']);
        }
        parent::onSubmit();
    }
    
interface/web/mail/templates/mail_user_autoresponder_edit.htm
@@ -12,9 +12,18 @@
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='autoresponder_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='autoresponder'}
                      <div class="ctrlHolder" style="margin-bottom: 5px;">
                        <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 />
                      </div>
                      <p style="margin-bottom: 3px;">
                      <label for="autoresponder_start_date[day]" style="width: 55px;">{tmpl_var name='autoresponder_start_date_txt'}</label>
                      {tmpl_var name='autoresponder_start_date'}&nbsp;<a href="javascript:AR_SetNow();">now</a></p>
                      <label for="password" style="width: 55px;">{tmpl_var name='autoresponder_end_date_txt'}</label>
                      {tmpl_var name='autoresponder_end_date'}
                    </div>
            </div>
     </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
@@ -25,4 +34,4 @@
    </div>
  </div>
  
</div>
</div>