Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Form/Service/Widget/DateTime.php
Строк: 234
<?php
namespace ConcreteCoreFormServiceWidget;

use 
Core;

class 
DateTime
{
    
/**
     * Takes a "field" and grabs all the corresponding disparate fields from $_POST and translates into a timestamp
     * @param string $field The name of the field to translate
     * @param array $arr = null The array containing the value. If null (default) we'll use $_POST
     * @return string|false $dateTime In case of success returns the timestamp (in the format 'Y-m-d H:i:s' or 'Y-m-d'), otherwise returns false ($field value is not in the array) or '' (if $field value is empty).
     * If $field has both date and time, the resulting value will be converted fro user timezone to system timezone.
     * If $field has only date and not time, no timezone conversion will occur.
     */
    
public function translate($field$arr null)
    {
        if (
$arr == null) {
            
$arr $_POST;
        }
        
$dh Core::make('helper/date'); /* @var $dh ConcreteCoreLocalizationServiceDate */
        
$date null;
        if (isset(
$arr[$field '_dt'])) {
            
$value $arr[$field '_dt'];
            if (
strlen(trim($value)) === 0) {
                return 
'';
            }
            
$h = @intval($arr[$field '_h']);
            
$m = @intval($arr[$field '_m']);
            if (
$h 12 && isset($arr[$field '_a']) && ($arr[$field '_a'] === 'PM')) {
                
$h += 12;
            }
            
$value .= ' ' substr("0$h", -2) . ':' substr("0$m", -2);
            try {
                
$date = new DateTime($value$dh->getTimezone('user'));
            } catch (
Exception $foo) {
            }
        } elseif (isset(
$arr[$field])) {
            
$value $arr[$field];
            if (
strlen(trim($value)) === 0) {
                return 
'';
            }
            try {
                
$date = new DateTime($value$dh->getTimezone('system'));
            } catch (
Exception $foo) {
            }
        }

        return 
$date $dh->formatCustom('Y-m-d H:i:s'$date'system') : null;
    }

    
/**
     * Creates form fields and JavaScript calendar includes for a particular item
     * <code>
     *     $dh->datetime('yourStartDate', '2008-07-12 3:00:00');
     * </code>
     * @param string $prefix
     * @param string $value
     * @param bool $includeActivation
     * @param bool $calendarAutoStart
     */
    
public function datetime($prefix$value null$includeActivation false$calendarAutoStart true)
    {
        if (
substr($prefix, -1) == ']') {
            
$prefix substr($prefix0strlen($prefix) - 1);
            
$_activate $prefix '_activate]';
            
$_dt $prefix '_dt]';
            
$_h $prefix '_h]';
            
$_m $prefix '_m]';
            
$_a $prefix '_a]';
        } else {
            
$_activate $prefix '_activate';
            
$_dt $prefix '_dt';
            
$_h $prefix '_h';
            
$_m $prefix '_m';
            
$_a $prefix '_a';
        }

        
$dh Core::make('helper/date'); /* @var $dh ConcreteCoreLocalizationServiceDate */
        
$timeFormat $dh->getTimeFormat();
        list(
$dateYear$dateMonth$dateDay$timeHour$timeMinute) = explode(','$dh->formatCustom('Y,n,j,G,i'$value $value 'now'));
        
$timeMinute intval($timeMinute);
        if(
$timeFormat == 12) {
            
$timeAMPM = ($timeHour 12) ? 'AM' 'PM';
            
$timeHour = ($timeHour 12);
            if (
$timeHour == 0) {
                
$timeHour 12;
            }
        }
        if (
$value === '') {
            
$defaultDateJs '""';
        } else {
            
$defaultDateJs "new Date($dateYear$dateMonth - 1, $dateDay)";
        }
        
$id preg_replace("/[^0-9A-Za-z-]/""_"$prefix);
        
$html '';
        
$disabled false;
        
$html .= '<div class="form-inline">';

        if (
$includeActivation) {
            if (
$value) {
                
$activated 'checked';
            } else {
                
$disabled 'disabled';
            }
            
$html .= '<input type="checkbox" id="' $id '_activate" class="ccm-activate-date-time" ccm-date-time-id="' $id '" name="' $_activate '" ' $activated ' />';
        }

        
$html .= '<span class="ccm-input-date-wrapper" id="' $id '_dw"><input id="' $id '_dt_pub" class="form-control ccm-input-date"  ' $disabled ' /><input id="' $id '_dt" name="' $_dt '" type="hidden" ' $disabled ' /></span>';
        
$html .= '<span class="ccm-input-time-wrapper form-inline" id="' $id '_tw">';
        
$html .= '<select class="form-control" id="' $id '_h" name="' $_h '" ' $disabled '>';

        
$hourStart = ($timeFormat == 12) ? 0;
        
$hourEnd = ($timeFormat == 12) ? 12 23;
        for (
$i $hourStart$i <= $hourEnd$i++) {
            if (
$i == $timeHour) {
                
$selected 'selected';
            } else {
                
$selected '';
            }
            
$html .= '<option value="' $i '" ' $selected '>' $i '</option>';
        }
        
$html .= '</select>:';
        
$html .= '<select class="form-control"  id="' $id '_m" name="' $_m '" ' $disabled '>';
        for (
$i 0$i <= 59$i++) {
            if (
$i == $timeMinute) {
                
$selected 'selected';
            } else {
                
$selected '';
            }
            
$html .= '<option value="' sprintf('%02d'$i) . '" ' $selected '>' sprintf('%02d'$i) . '</option>';
        }
        
$html .= '</select>';
        if (
$timeFormat == 12) {
            
$html .= '<select class="form-control" id="' $id '_a" name="' $_a '" ' $disabled '>';
            
$html .= '<option value="AM" ';
            if (
$timeAMPM == 'AM') {
                
$html .= 'selected';
            }
            
$html .= '>';
            
// This prints out the translation of "AM" in the current language
            
$html .= $dh->date('A'mktime(1), 'app');
            
$html .= '</option>';
            
$html .= '<option value="PM" ';
            if (
$timeAMPM == 'PM') {
                
$html .= 'selected';
            }
            
$html .= '>';
            
// This prints out the translation of "PM" in the current language
            
$html .= $dh->date('A'mktime(13), 'app');
            
$html .= '</option>';
            
$html .= '</select>';
        }
        
$html .= '</span></div>';
        
$jh Core::make('helper/json'); /* @var $jh ConcreteCoreHttpServiceJson */
        
if ($calendarAutoStart) {
            
$html .= '<script type="text/javascript">$(function () {
                $("#' 
$id '_dt_pub").datepicker({
                    dateFormat: ' 
$jh->encode($dh->getJQueryUIDatePickerFormat(t(/*i18n: Short date format: see http://www.php.net/manual/en/function.date.php */ 'n/j/Y'))) . ',
                    altFormat: "yy-mm-dd",
                    altField: "#' 
$id '_dt",
                    changeYear: true,
                    showAnim: '
fadeIn',
                    onClose: function(dateText, inst) {
                        if(dateText == "") {
                            var altField = $(inst.settings["altField"]);
                            if(altField.length) {
                                altField.val(dateText);
                            }
                        }
                    }
                }).datepicker("setDate" , ' 
$defaultDateJs '); })</script>';
        }
        
// first we add a calendar input

        
if ($includeActivation) {
            
$html .=<<<EOS
            <script type="text/javascript">$("#{$id}_activate").click(function () {
                if ($(this).get(0).checked) {
                    $("#
{$id}_dw input").each(function () {
                        $(this).get(0).disabled = false;
                    });
                    $("#
{$id}_tw select").each(function () {
                        $(this).get(0).disabled = false;
                    });
                } else {
                    $("#
{$id}_dw input").each(function () {
                        $(this).get(0).disabled = true;
                    });
                    $("#
{$id}_tw select").each(function () {
                        $(this).get(0).disabled = true;
                    });
                }
            });
            </script>
EOS;

        }

        return 
$html;

    }

    
/**
     * Creates form fields and JavaScript calendar includes for a particular item but includes only calendar controls (no time.)
     * <code>
     *     $dh->date('yourStartDate', '2008-07-12 3:00:00');
     * </code>
     * @param string $prefix
     * @param string $value
     * @param bool $includeActivation
     * @param bool $calendarAutoStart
     */
    
public function date($field$value null$calendarAutoStart true)
    {
        
$dh Core::make('helper/date'); /* @var $dh ConcreteCoreLocalizationServiceDate */
        
$id preg_replace("/[^0-9A-Za-z-]/""_"$field);
        if (isset(
$_REQUEST[$field])) {
            
$timestamp = empty($_REQUEST[$field]) ? false : @strtotime($_REQUEST[$field]);
        } elseif (
$value) {
            
$timestamp = @strtotime($value);
        } elseif (
$value === '') {
            
$timestamp false;
        } else {
            
// Today (in the user's timezone)
            
$timestamp strtotime($dh->formatCustom('Y-m-d'));
        }
        if (
$timestamp) {
            
$defaultDateJs 'new Date(' implode(', ', array(date('Y'$timestamp), date('n'$timestamp) - 1date('j'$timestamp))) . ')';
        } else {
            
$defaultDateJs '""';
        }
        
$html '';
        
$html .= '<div><span class="ccm-input-date-wrapper" id="' $id '_dw"><input id="' $id '_pub" class="form-control ccm-input-date"  /><input id="' $id '" name="' $field '" type="hidden"  /></span></div>';
        
$jh Core::make('helper/json'); /* @var $jh ConcreteCoreHttpServiceJson */
        
if ($calendarAutoStart) {
            
$html .= '<script type="text/javascript">$(function () {
                $("#' 
$id '_pub").datepicker({
                    dateFormat: ' 
$jh->encode($dh->getJQueryUIDatePickerFormat(t(/*i18n: Short date format: see http://www.php.net/manual/en/function.date.php */ 'n/j/Y'))) . ',
                    altFormat: "yy-mm-dd",
                    altField: "#' 
$id '",
                    changeYear: true,
                    showAnim: '
fadeIn',
                    onClose: function(dateText, inst) {
                        if(dateText == "") {
                            var altField = $(inst.settings["altField"]);
                            if(altField.length) {
                                altField.val(dateText);
                            }
                        }
                    }
                }).datepicker( "setDate" , ' 
$defaultDateJs ' ); });</script>';
        }

        return 
$html;

    }

}
Онлайн: 1
Реклама