<?php
/**
 * Custom template tags for this theme.
 *
 * Eventually, some of the functionality here could be replaced by core features.
 *
 * @package _spx
 */
if (!function_exists('xs_paging_nav')) :

    /**
     * Display navigation to next/previous set of posts when applicable.
     */
    function xs_paging_nav() {
        // Don't print empty markup if there's only one page.
        if ($GLOBALS['wp_query']->max_num_pages < 2) {
            return;
        }
        ?>
        <nav class="navigation paging-navigation">
        <!--	<span class="h3" class="screen-reader-text"><?php _e('Posts navigation', 'xs'); ?></span> -->
            <div class="nav-links">

                <?php if (get_next_posts_link()) : ?>
                    <div class="nav-previous"><?php next_posts_link(__('<span class="meta-nav">&larr;</span> Older posts', 'xs')); ?></div>
                <?php endif; ?>

                <?php if (get_previous_posts_link()) : ?>
                    <div class="nav-next"><?php previous_posts_link(__('Newer posts <span class="meta-nav">&rarr;</span>', 'xs')); ?></div>
                <?php endif; ?>
                <div class="clearfix"></div>
            </div><!-- .nav-links -->
        </nav><!-- .navigation -->
        <?php
    }

endif;

if (!function_exists('xs_post_nav')) :

    /**
     * Display navigation to next/previous post when applicable.
     */
    function xs_post_nav() {
        // Don't print empty markup if there's nowhere to navigate.
        $previous = ( is_attachment() ) ? get_post(get_post()->post_parent) : get_adjacent_post(false, '', true);
        $next = get_adjacent_post(false, '', false);

        if (!$next && !$previous) {
            return;
        }
        ?>
        <nav class="navigation post-navigation" role="navigation">
            <div class="nav-links">
                <?php
                previous_post_link('<div class="nav-previous">%link</div>', _x('<span class="meta-nav">&larr;</span>&nbsp;%title', 'Previous post link', 'xs'));
                next_post_link('<div class="nav-next">%link</div>', _x('%title&nbsp;<span class="meta-nav">&rarr;</span>', 'Next post link', 'xs'));
                ?>
                <div class="clearfix"></div>
            </div><!-- .nav-links -->
        </nav><!-- .navigation -->
        <?php
    }

endif;

if (!function_exists('xs_posted_by')) :

    /**
     * Prints HTML with meta information for the current post-date/time and author.
     */
    function xs_posted_by($id) {
        // Posted By: <a href='#' title='admin'>admin</a>
        $byline = sprintf(
                _x('Posted By: %s', 'post author', 'xs'), '<a title="' . esc_html(get_the_author_meta('display_name', $id)) . '"  href="' . esc_url(get_the_author_meta('user_url', $id)) . '">' . esc_html(get_the_author_meta('display_name', $id)) . '</a>'
        );

        if (is_single() || is_archive()) {
            $byline = ' <span class="separator"> / </span> ' . $byline;
        }
        echo $byline;
    }

endif;

if (!function_exists('xs_posted_on')) :

    /**
     * Prints HTML with meta information for the current post-date/time and author.
     */
    function xs_posted_on($id, $echo = true) {

        $time_string = '<div class="dateBox pull-right"><h5>%1$s</h5><span>%2$s</span></div>';

        $time_string = sprintf($time_string, esc_html(get_the_date('d')), esc_html(get_the_date('M'))
        );
        if ($echo) {
            echo $time_string;
        } else {
            return $time_string;
        }
    }

endif;

if (!function_exists('xs_posted_cat')) :

    /**
     * Prints HTML with meta information for the categories, tags and comments.
     */
    function xs_posted_cat() {
        // Hide category and tag text for pages.
        /* translators: used between list items, there is a space after the comma */


        $category_list = get_the_category_list(', ');
        if ($category_list) {
            echo '<span class="cat-links"> ' . 'Posted in ' . $category_list . ' </span>';
        }
    }

endif;

/* Post format */

function xs_post_format($id = null) {
    $format = get_post_format($id);
    if (false === $format) {
        $format = 'standard';
    }
    return ucfirst($format);
}

if (!function_exists('xs_post_tags')) :

    /**
     * Prints HTML with meta information for the categories, tags and comments.
     */
    function xs_post_tags() {
        /* translators: used between list items, there is a space after the comma */
        $tags_list = get_the_tag_list('', __(' ', 'xs'));
        if ($tags_list) {
            printf('<div class="tags">' . __('%1$s', 'xs') . '</div>', $tags_list);
        }
    }

endif;

if (!function_exists('xs_entry_footer')) :

    /**
     * Prints HTML with meta information for the categories, tags and comments.
     */
    function xs_entry_footer() {
        // Hide category and tag text for pages.
        if ('post' == get_post_type()) {
            /* translators: used between list items, there is a space after the comma */
            $categories_list = get_the_category_list(__(', ', 'xs'));
            if ($categories_list && xs_categorized_blog()) {
                printf('<span class="cat-links">' . __('Posted in %1$s', 'xs') . '</span>', $categories_list);
            }

            /* translators: used between list items, there is a space after the comma */
            $tags_list = get_the_tag_list('', __(', ', 'xs'));
            if ($tags_list) {
                printf('<span class="tags-links">' . __('Tagged %1$s', 'xs') . '</span>', $tags_list);
            }
        }

        if (!is_single() && !post_password_required() && ( comments_open() || get_comments_number() )) {
            echo '<span class="comments-link">';
            comments_popup_link(__('Leave a comment', 'xs'), __('1 Comment', 'xs'), __('% Comments', 'xs'));
            echo '</span>';
        }

        edit_post_link(__('Edit', 'xs'), '<span class="edit-link">', '</span>');
    }

endif;

if (!function_exists('the_archive_title')) :

    /**
     * Shim for `the_archive_title()`.
     *
     * Display the archive title based on the queried object.
     *
     * @todo Remove this function when WordPress 4.3 is released.
     *
     * @param string $before Optional. Content to prepend to the title. Default empty.
     * @param string $after  Optional. Content to append to the title. Default empty.
     */
    function the_archive_title($before = '', $after = '') {
        if (is_category()) {
            $title = sprintf(__('Category: %s', 'xs'), single_cat_title('', false));
        } elseif (is_tag()) {
            $title = sprintf(__('Tag: %s', 'xs'), single_tag_title('', false));
        } elseif (is_author()) {
            $title = sprintf(__('Author: %s', 'xs'), '<span class="vcard">' . get_the_author() . '</span>');
        } elseif (is_year()) {
            $title = sprintf(__('Year: %s', 'xs'), get_the_date(_x('Y', 'yearly archives date format', 'xs')));
        } elseif (is_month()) {
            $title = sprintf(__('Month: %s', 'xs'), get_the_date(_x('F Y', 'monthly archives date format', 'xs')));
        } elseif (is_day()) {
            $title = sprintf(__('Day: %s', 'xs'), get_the_date(_x('F j, Y', 'daily archives date format', 'xs')));
        } elseif (is_tax('post_format', 'post-format-aside')) {
            $title = _x('Asides', 'post format archive title', 'xs');
        } elseif (is_tax('post_format', 'post-format-gallery')) {
            $title = _x('Galleries', 'post format archive title', 'xs');
        } elseif (is_tax('post_format', 'post-format-image')) {
            $title = _x('Images', 'post format archive title', 'xs');
        } elseif (is_tax('post_format', 'post-format-video')) {
            $title = _x('Videos', 'post format archive title', 'xs');
        } elseif (is_tax('post_format', 'post-format-quote')) {
            $title = _x('Quotes', 'post format archive title', 'xs');
        } elseif (is_tax('post_format', 'post-format-link')) {
            $title = _x('Links', 'post format archive title', 'xs');
        } elseif (is_tax('post_format', 'post-format-status')) {
            $title = _x('Statuses', 'post format archive title', 'xs');
        } elseif (is_tax('post_format', 'post-format-audio')) {
            $title = _x('Audio', 'post format archive title', 'xs');
        } elseif (is_tax('post_format', 'post-format-chat')) {
            $title = _x('Chats', 'post format archive title', 'xs');
        } elseif (is_post_type_archive()) {
            $title = sprintf(__('Archives: %s', 'xs'), post_type_archive_title('', false));
        } elseif (is_tax()) {
            $tax = get_taxonomy(get_queried_object()->taxonomy);
            /* translators: 1: Taxonomy singular name, 2: Current taxonomy term */
            $title = sprintf(__('%1$s: %2$s', 'xs'), $tax->labels->singular_name, single_term_title('', false));
        } else {
            $title = __('Archives', 'xs');
        }

        /**
         * Filter the archive title.
         *
         * @param string $title Archive title to be displayed.
         */
        $title = apply_filters('get_the_archive_title', $title);

        if (!empty($title)) {
            echo $before . $title . $after;
        }
    }

endif;

if (!function_exists('the_archive_description')) :

    /**
     * Shim for `the_archive_description()`.
     *
     * Display category, tag, or term description.
     *
     * @todo Remove this function when WordPress 4.3 is released.
     *
     * @param string $before Optional. Content to prepend to the description. Default empty.
     * @param string $after  Optional. Content to append to the description. Default empty.
     */
    function the_archive_description($before = '', $after = '') {
        $description = apply_filters('get_the_archive_description', term_description());

        if (!empty($description)) {
            /**
             * Filter the archive description.
             *
             * @see term_description()
             *
             * @param string $description Archive description to be displayed.
             */
            echo $before . $description . $after;
        }
    }

endif;

/**
 * body class. Add specific CSS class by filter
 */
add_filter('body_class', 'xs_body_class');

function xs_body_class($classes) {

    if (is_single()) {
        $classes[] = ' single-post';
    }
    if (is_archive()) {
        $classes[] = ' archive';
    }

    // add 'class-name' to the $classes array
    $classes[] = 'class-name';
    // return the $classes array
    return $classes;
}

if (!function_exists('xs_texture')) :

    /**
     * texture id.
     */
    function xs_texture() {

        if (xs_get_option('theme_options', 'main_template_style') == 'image') {
            echo 'id="texture"';
        }
    }

endif;

if (!function_exists('xs_countdown_time')) :

    /**
     * countdown
     */
    function xs_countdown_time() {

        $t = xs_get_option('theme_options', 'event_date_time');
        if ($t != '') {
            $s = strtotime($t);
            return date('F j, Y G:i:s', $s);
        }
    }

endif;

if (!function_exists('xs_second_date')) :

    /**
     * countdown
     */
    function xs_second_date() {

        $t = xs_get_option('theme_options', 'event_date_time');
        if ($t != '') {
            $s = strtotime($t);
            return date('F j, Y', $s);
        }
    }

endif;

/**
 * Returns true if a blog has more than 1 category.
 *
 * @return bool
 */
function xs_categorized_blog() {
    if (false === ( $all_the_cool_cats = get_transient('xs_categories') )) {
        // Create an array of all the categories that are attached to posts.
        $all_the_cool_cats = get_categories(array(
            'fields' => 'ids',
            'hide_empty' => 1,
            // We only need to know if there is more than one category.
            'number' => 2,
                ));

        // Count the number of categories that are attached to the posts.
        $all_the_cool_cats = count($all_the_cool_cats);

        set_transient('xs_categories', $all_the_cool_cats);
    }

    if ($all_the_cool_cats > 1) {
        // This blog has more than 1 category so xs_categorized_blog should return true.
        return true;
    } else {
        // This blog has only 1 category so xs_categorized_blog should return false.
        return false;
    }
}

/**
 * Flush out the transients used in xs_categorized_blog.
 */
function xs_category_transient_flusher() {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    // Like, beat it. Dig?
    delete_transient('xs_categories');
}

add_action('edit_category', 'xs_category_transient_flusher');
add_action('save_post', 'xs_category_transient_flusher');

/**
 * Add prev and next links to a numbered link list
 */
function wp_link_pages_args_prevnext_add($args) {
    global $page, $numpages, $more, $pagenow;

    if (!$args['next_or_number'] == 'next_and_number')
        return $args;# exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args;# exit early

    if ($page - 1) # there is a previous page
        $args['before'] .= _wp_link_page($page - 1)
                . $args['link_before'] . $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page < $numpages) # there is a next page
        $args['after'] = _wp_link_page($page + 1)
                . $args['link_before'] . $args['nextpagelink'] . $args['link_after'] . '</a>'
                . $args['after']
        ;

    return $args;
}

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');
