<?php

/**
 * Custom template tags for this theme.
 *
 * Eventually, some of the functionality here could be replaced by core features.
 *
 * @package cleanlogic
 */

if (! function_exists('cleanlogic_posted_on')) :
	function cleanlogic_posted_on()
	{
		$time_string = '<time class="entry-date published updated" datetime="%1$s">%2$s</time>';
		if (get_the_time('U') !== get_the_modified_time('U')) {
			$time_string  = '<time class="entry-date published" datetime="%1$s">%2$s</time>';
			$time_string .= '<time class="updated" datetime="%3$s">%4$s</time>';
		}

		$time_string = sprintf(
			$time_string,
			esc_attr(get_the_date('c')),
			esc_html(get_the_date()),
			esc_attr(get_the_modified_date('c')),
			esc_html(get_the_modified_date())
		);

		$posted_on = sprintf(
			'<a href="%1$s" rel="bookmark">%2$s</a>',
			esc_url(get_permalink()),
			$time_string
		);

		/* translators: %s: post author name. */
		$byline_text = esc_html_x('by %s', 'post author', 'cleanlogic');

		$byline = sprintf(
			$byline_text,
			sprintf(
				'<span class="author vcard"><a class="url fn n" href="%1$s">%2$s</a></span>',
				esc_url(get_author_posts_url(get_the_author_meta('ID'))),
				esc_html(get_the_author())
			)
		);

		// Output sanitized HTML (no whitelist comments needed).
		echo '<span class="posted-on">' . wp_kses_post($posted_on) . '</span> ';
		echo '<span class="byline"> ' . wp_kses_post($byline) . '</span> ';

		echo '<span class="comments-link">';
		comments_popup_link(
			esc_html__('Leave a comment', 'cleanlogic'),
			esc_html__('1 Comment', 'cleanlogic'),
			esc_html__('% Comments', 'cleanlogic')
		);
		echo '</span>';
	}
endif;


if (! function_exists('cleanlogic_entry_footer')) :
	/**
	 * Prints HTML with meta information for the categories, tags and comments.
	 */
	function cleanlogic_entry_footer()
	{
		// Hide category and tag text for pages.
		if ('post' === get_post_type()) {

			$categories_list = get_the_category_list(', ');
			if ($categories_list && cleanlogic_categorized_blog()) {
				/* translators: %s: list of categories. */
				$text      = esc_html__('Posted in %s', 'cleanlogic');
				$posted_in = sprintf($text, $categories_list);
				echo '<span class="cat-links">' . wp_kses_post($posted_in) . '</span>';
			}

			/* translators: used between list items, there is a space after the comma */
			$tags_list = get_the_tag_list('', ', ');
			if ($tags_list) {
				/* translators: %s: list of tags. */
				$text     = esc_html__('Tagged %s', 'cleanlogic');
				$tagged_in = sprintf($text, $tags_list);
				echo '<span class="tags-links">' . wp_kses_post($tagged_in) . '</span>';
			}
		}

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

		edit_post_link(
			sprintf(
				/* translators: %s: Name of the current post (screen-reader text). */
				esc_html__('Edit %s', 'cleanlogic'),
				'<span class="screen-reader-text">' . esc_html(get_the_title()) . '</span>'
			),
			'<span class="edit-link">',
			'</span>'
		);
	}
endif;


/**
 * Returns true if a blog has more than 1 category.
 *
 * @return bool
 */
function cleanlogic_categorized_blog()
{
	if (false === ($all_the_cool_cats = get_transient('cleanlogic_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('cleanlogic_categories', $all_the_cool_cats);
	}

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

/**
 * Flush out the transients used in cleanlogic_categorized_blog.
 */
function cleanlogic_category_transient_flusher()
{
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
		return;
	}
	// Like, beat it. Dig?
	delete_transient('cleanlogic_categories');
}
add_action('edit_category', 'cleanlogic_category_transient_flusher');
add_action('save_post',     'cleanlogic_category_transient_flusher');
