<?php
 
function expose_plugin_html_datepicker( & $expose, $params )
 
{
 
    $params = exposeMergeParameters( $params, array(
 
        'name'              => '',
 
        'time'              => false,
 
        'fmt'               => '%m %d %y',
 
        'start_year'        => date('Y'),
 
        'end_year'          => date('Y'),
 
        'year_format'       => '%Y',
 
        'month_format'      => '%B',
 
        'day_format'        => '%d',
 
        'attr'              => ''
 
    ) );
 
    
 
    if( false === $params['time'] ) {
 
        $params['time'] = time();
 
    } elseif( ! is_numeric($params['time'] ) ) {
 
        $params['time'] = strtotime( $params['time'] );
 
    }
 
 
//  build value arrays of selectboxes
 
//
 
    
 
    $d = getdate( $params['time'] );
 
    
 
    $years = array();
 
    for( $i=$params['start_year']; $i<=$params['end_year']; $i++ ) {
 
        $years[$i] = strftime( $params['year_format'],
 
            gmmktime( 12, 0, 0, 1, 1, $i ) );
 
    }
 
    
 
    $months = array();
 
    for( $i=1; $i<=12; $i++ ) {
 
        $months[$i] = strftime( $params['month_format'],
 
            gmmktime( 12, 0, 0, $i, 1, 2000 ) );
 
    }
 
    
 
    $days = array();
 
    for( $i=1; $i<=31; $i++ ) {
 
        $days[$i] = strftime( $params['day_format'],
 
            gmmktime( 12, 0, 0, 1, $i, 2000 ) );
 
    }
 
    
 
    $hours = array();
 
    for( $i=0; $i<=23; $i++ ) {
 
        $hours[$i] = str_pad( $i, 2, 0, STR_PAD_LEFT );
 
    }
 
    
 
    $minutes = array();
 
    for( $i=0; $i<=59; $i++ ) {
 
        $minutes[$i] = str_pad( $i, 2, 0, STR_PAD_LEFT );
 
    }
 
    
 
    $seconds = array();
 
    for( $i=0; $i<=59; $i++ ) {
 
        $seconds[$i] = str_pad( $i, 2, 0, STR_PAD_LEFT );
 
    }
 
    
 
//  write required JavaScript if neccesary
 
//
 
    echo( "<input type=\"hidden\" name=\"{$params['name']}\" id=\"{$params['name']}\" value=\"\">\n" );
 
 
    exposeIncludeJavascript( dirname( __FILE__ ) . '/plugin.js' );
 
    
 
//  parse format string
 
//
 
    $fmt = $params['fmt'];
 
    $state = 0; // 0=literal, 1=parse
 
    $buffer = '';
 
    
 
    $fields = array(
 
    //  special char => array( name, values, selection )
 
        'y' => array('y',$years,$d['year']),
 
        'm' => array('m',$months,$d['mon']),
 
        'd' => array('d',$days,$d['mday']),
 
        'h' => array('h',$hours,$d['hours']),
 
        'i' => array('i',$minutes,$d['minutes']),
 
        's' => array('s',$seconds,$d['seconds']),
 
    );
 
    $leftovers = array_keys($fields);
 
    
 
    for( $i=0,$max=strlen($fmt); $i<$max; $i++ )
 
    {
 
        if( 0 == $state && $fmt[$i] == '%' ) {
 
        //  goto parse mode; special character expected next.
 
            $state = 1;
 
            continue;
 
            
 
        } elseif( 0 == $state ) {
 
        //  literal mode.
 
            $buffer .= $fmt[$i];
 
        } else {
 
        //  parse mode; expand special character.
 
            if( $buffer ) {
 
                echo( $buffer );
 
                $buffer = '';
 
            }
 
            
 
            $char = strtolower( $fmt[$i] );
 
            if( isset( $fields[$char] ) ) {
 
                $def = $fields[$char];
 
                $expose->callPlugin( 'html_selectbox',
 
                    array(
 
                        'name'      => '',
 
                        'options'   => $def[1],
 
                        'selected'  => $def[2],
 
                        'attr'      =>  'id="'.$params['name'].'_'.$def[0].'" '
 
                                      . 'onchange="exposeHTMLDatePicker_onChange( \''.$params['name'].'\' )" '
 
                                      . $params['attr']
 
                )) ;
 
                unset( $leftovers[array_search($char,$leftovers)] );
 
            } elseif( '%' == $char ) {
 
                $buffer .= '%';
 
            }
 
    
 
            $state = 0;
 
        }
 
    }
 
    
 
    if( $buffer ) {
 
        echo( $buffer );
 
    }
 
    
 
//  write leftovers: date/time fields that are not visible
 
//
 
    foreach( $leftovers as $char ) {
 
        $def = $fields[$char];
 
        echo( "<input type=\"hidden\" name=\"\" id=\"{$params['name']}_{$def[0]}\" value=\"{$def[2]}\">\n" );
 
    }
 
}
 
?>
 
 
 |