201 lines
5.8 KiB
PHP
201 lines
5.8 KiB
PHP
<?php
|
||
|
||
/**
|
||
* Main Nepali Post Date plugin class.
|
||
*
|
||
* This class loads plugin options, sets filters and converts the date on selected hooks.
|
||
*
|
||
* @subpackage Frontend interfaces
|
||
* @author Padam Shankhadev
|
||
* @since 1.0
|
||
* @var opts - plugin options
|
||
*/
|
||
class Nepali_Post_Date_Frontend
|
||
{
|
||
|
||
private $opts;
|
||
|
||
private $date;
|
||
|
||
/**
|
||
* Class Constructor
|
||
*
|
||
* Loads default options, sets default filter list and adds convert_date filter to selected locations
|
||
*
|
||
* @author Padam Shankhadev
|
||
* @since 1.0
|
||
*/
|
||
public function __construct()
|
||
{
|
||
$this->date = new Nepali_Date();
|
||
|
||
$default_opts = [
|
||
'active' => [
|
||
'date' => true,
|
||
'time' => true,
|
||
'modified_date' => false,
|
||
'modified_time' => false
|
||
],
|
||
'date_format' => 'd m y, l',
|
||
'custom_date_format' => '',
|
||
'today_date_format' => ''
|
||
];
|
||
|
||
$default_opts = apply_filters( 'npd_modify_default_opts', $default_opts );
|
||
|
||
$this->opts = get_option( 'npd_opts', $default_opts );
|
||
|
||
$filter_list = array();
|
||
|
||
if ($this->opts['active']['date']):
|
||
$filter_list = array_merge( $filter_list, array( 'get_the_date', 'the_date' ) );
|
||
endif;
|
||
|
||
if ($this->opts['active']['time']) :
|
||
$filter_list = array_merge( $filter_list, array( 'get_the_time', 'the_time' ) );
|
||
endif;
|
||
|
||
if ( $this->opts['active']['modified_date'] ) :
|
||
$filter_list = array_merge( $filter_list, array( 'get_the_modified_date', 'the_modified_date' ) );
|
||
endif;
|
||
|
||
if ( $this->opts['active']['modified_time'] ) :
|
||
$filter_list = array_merge( $filter_list, array( 'get_the_modified_time', 'the_modified_time' ) );
|
||
endif;
|
||
|
||
|
||
/**
|
||
* Filter the list of applicable filter locations
|
||
*
|
||
* @since 1.0
|
||
* @param array $filter_list List of filters for time appearance change
|
||
*
|
||
*/
|
||
$filters = apply_filters(
|
||
'npd_filters',
|
||
$filter_list
|
||
);
|
||
|
||
foreach ( $filters as $filter ) :
|
||
|
||
add_filter( $filter, array( &$this, 'convert_date' ), 10, 1);
|
||
|
||
endforeach;
|
||
|
||
add_shortcode( 'nepali_post_date', array( &$this, 'nepali_post_date_shortcode') );
|
||
|
||
add_shortcode( 'nepali_today_date', array( &$this, 'nepali_today_date_shortcode') );
|
||
|
||
add_shortcode( 'nepali_number', array( &$this, 'nepali_number_shortcode') );
|
||
}
|
||
|
||
|
||
/**
|
||
* Main plugin function which does the date conversion.
|
||
*
|
||
* @param string $orig_time Original time / date string
|
||
* @author Padam Shankhadev
|
||
* @since 1.0
|
||
*/
|
||
|
||
public function convert_date( $orig_time )
|
||
{
|
||
global $post;
|
||
|
||
$converted_date = '';
|
||
|
||
//If option not set as active return original string.
|
||
if (!$this->opts['active']) {
|
||
return $orig_time;
|
||
}
|
||
|
||
if ($this->opts['custom_date_format']) {
|
||
$format = $this->opts['custom_date_format'];
|
||
} else {
|
||
$format = $this->opts['date_format'];
|
||
}
|
||
|
||
if ( $this->opts['active']['time'] ) {
|
||
$converted_date = $this->get_converted_nepali_date( strtotime( $post->post_date ), $format, true );
|
||
} else {
|
||
$converted_date = $this->get_converted_nepali_date( strtotime( $post->post_date ), $format );
|
||
}
|
||
|
||
return $converted_date;
|
||
|
||
}
|
||
|
||
public function nepali_post_date_shortcode( $attrs = array() )
|
||
{
|
||
extract( shortcode_atts( array(
|
||
'post_date' => time(),
|
||
), $attrs) );
|
||
|
||
if ( $this->opts['custom_date_format'] ) {
|
||
$format = $this->opts['custom_date_format'];
|
||
} else {
|
||
$format = $this->opts['date_format'];
|
||
}
|
||
|
||
if ( $this->opts['active']['time'] ) {
|
||
$converted_date = $this->get_converted_nepali_date( strtotime( $post_date ), $format, true );
|
||
} else {
|
||
$converted_date = $this->get_converted_nepali_date( strtotime( $post_date ), $format );
|
||
}
|
||
|
||
return $converted_date;
|
||
}
|
||
|
||
public function nepali_today_date_shortcode( $attrs = array() )
|
||
{
|
||
if ( $this->opts['today_date_format'] ) {
|
||
$format = $this->opts['today_date_format'];
|
||
} else {
|
||
$format = $this->opts['date_format'];
|
||
}
|
||
|
||
return $this->get_converted_nepali_date( time(), $format );
|
||
}
|
||
|
||
public function nepali_number_shortcode( $attrs = array() )
|
||
{
|
||
extract( shortcode_atts( array(
|
||
'number' => '0123456789',
|
||
), $attrs) );
|
||
|
||
return $this->convert_into_nepali_number( $number );
|
||
}
|
||
|
||
|
||
public function get_converted_nepali_date( $date, $format, $time = false )
|
||
{
|
||
$nepali_calender = $this->date->eng_to_nep( date( 'Y', $date ), date( 'm', $date ), date( 'd', $date ) );
|
||
|
||
$converted_date = str_replace( ['l', 'd', 'm', 'y' ], [
|
||
$nepali_calender['day'],
|
||
$this->date->convert_to_nepali_number( $nepali_calender['date'] ),
|
||
$nepali_calender['nmonth'],
|
||
$this->date->convert_to_nepali_number( $nepali_calender['year'] )
|
||
], $format );
|
||
|
||
if( $time ) {
|
||
$converted_date .= ' ' . $this->date->convert_to_nepali_number( date( 'H', $date ) ) . ':' . $this->date->convert_to_nepali_number( date( 'i', $date ) );
|
||
}
|
||
|
||
return $converted_date;
|
||
}
|
||
|
||
public function convert_into_nepali_number( $str ) {
|
||
if( empty( $str ) ) {
|
||
return 'Please enter the value.';
|
||
}
|
||
|
||
$search = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
||
|
||
$replace = ['०', '१', '२', '३', '४', '५', '६', '७', '८', '९'];
|
||
|
||
$string = str_replace($search, $replace, $str);
|
||
|
||
return $string;
|
||
}
|
||
} |