<?php if (!defined('PmWiki')) exit();
/*

Version 
20170923 - Updated for php5.5-7.1 support and updated recipes, minor code tweaks for consistency, documentation, and tweaked copyright default to include a period.
*/

$RecipeInfo['XESBlog']['Version'] = '2017-09-23';

//Set some defaults
SDV($XesBlogGroup,'Blog'); // blog group
SDV($XesBlogHome,'Blog');  // blog home page - corresponds with xeslib.d/Blog.Blog
SDV($XesFeedCopyright,'Copyright ' . date('Y ') . $WikiTitle . '.'); // copyright for rss/atom default is "Copyright YEAR Your Wiki Title."
SDV($XesFeedDescription, $WikiTitle .' RSS Feed'); // description on your rss/atom feed
SDV($XesBlogPages, '-' . $XesBlogHome . ',-TagCloud,-SideBar,-HomePage,-Group*,-Comment*,-Post*'); // Define what a "blog post" is -- exclude non-blog pages i.e. a blog post "Template" would be a non-blog item and would be added as an exclusion.
SDV($XesFeedPages, '-TagCloud,-ContactForm,-ContactUs,-SideBar,-GroupAttributes,-Successpage,-GroupHeader,-GroupFooter,-Blocklist,-AllRecentChanges,-RecentChanges,-WikiSandbox'); // defines pages to be included or excluded from feeds
SDV($XesFeedGroups, '-PmWiki,-Site,-SiteAdmin,-Comments,-' . $XesBlogGroup . ',-' . $XesBlogGroup . 'Archive,-Category');
SDV($XesFeedCount,10); // number of posts to list in your RSS feed
SDV($XesBlogCount,10); // number of posts to list on your Blog/Blog (default blog) page
SDV($XesFeedOrder,'-time');
SDV($XesBlogOrder,'-time');
SDV($XesFeedTitle,$WikiTitle);
SDV($XesItemTitle,'$Title');
SDV($XesItemDescription,'FeedTextPage');
SDV($XesItemCategory,'FeedCategory');
SDV($ListCategories_SizedlistNum, 150); // Number of categories for your blog cloud
SDV($XesAddPingbacks, false); // disabled by default: use only if you have the proper Pear libraries
SDV($XesAddXMLRPC, false); // disabled by default: use only if you're using blogging software requiring XMLRPC — the XMLRPC recipe is currently not working
SDV($XesAddURLApproval, true); // Caution: turning off URL Approvals will leave you vulnerable to comment spam.
SDV($XesAddGoogleBlogPing, true); // I'm not sure this works, so you can disable it if desired

//Add custom pagestore
		$WikiLibDirs = array(&$WikiDir,new PageStore('$FarmD/xeslib.d/{$FullName}'),new PageStore('$FarmD/wikilib.d/{$FullName}'));


// Only people who can presumably approve unapproved URLs can see the links -- otherwise it looks sloppy
if ($XesAddURLApproval){
	pagename = ResolvePageName($pagename);
	if (!CondAuth($pagename, 'edit')) {
		$UnapprovedLinkFmt = '$LinkText';
	} else {
		$UnapprovedLinkFmt =
		"\$LinkText<a class='apprlink' href='\$PageUrl?action=approvesites'
		title='\$LinkUrl'>$[(approve sites)]</a>";
	}
}

// Technocrati-spec links, & create categories when tagging....
$LinkCategoryFmt = "<a class='categorylink' rel='tag' href='\$LinkUrl'>\$LinkText</a>";
$AutoCreate['/^Category\\./'] = array('ctime' => $Now);
$AutoCreate['/^' . $XesBlogGroup . 'Archive\\./'] = array('ctime' => $Now);
// Add tagging box
include_once ($FarmD . '/cookbook/tagpages.php');

// Sidebar box to add new blog entries -- only visible to the admin
include_once("$FarmD/cookbook/newpageboxplus.php");

// Tag clouds....
$ListCategories_SortSizedList = true;
$ListCategories_CreatePages = false; // automatically create Category.Bla pages?
include_once("$FarmD/cookbook/listcategories.php");

// Turn on ability to save as draft - helpful if you want to tag or wait before publishing
$EnableDrafts = 1;

// enable RSS -- Atom etc. needs work.
if ($action == 'rss') {
	include_once("$FarmD/scripts/feeds.php");
	// Load Enhanced Feed script
	include_once("$FarmD/cookbook/enhancedwebfeeds.php");
	// Reset Feed tags for Blog feed
	$FeedFmt['rss']['feed']['title'] = $XesFeedTitle;
	$FeedFmt['rss']['feed']['copyright'] = $XesFeedCopyright;
	$FeedFmt['rss']['feed']['description'] = $XesFeedDescription;
	// Reset Item tags for Blog feed
	$FeedFmt['rss']['item']['title'] = $XesItemTitle;
	$FeedFmt['rss']['item']['description'] = $XesItemDescription;
	$FeedFmt['rss']['item']['category'] = $XesItemCategory;
	// Set default values for ?action=rss
	if ($Group == $XesBlogGroup) {
		SDVA($_REQUEST, array('group' => $XesBlogGroup,'order' => $XesBlogOrder,
		'count' => $XesBlogCount,'list' => 'normal',
		'name' => $XesBlogPages));
	}else{
		SDVA($_REQUEST, array('group' => $XesFeedGroups, 'order' => $XesFeedOrder,
		'count' => $XesFeedCount,'list' => 'normal',
		'name' => $XesFeedPages));
	}
}

// PmForm Comment forms & captcha
include_once('/home/www/wikifarm/pmwiki/cookbook/pmform.php');
$PmForm['xescomments'] = 'saveto="Comments/{$Group}-{$Name}-' . date("Ymd\THms") . '" form=Site.XesCommentsTemplates#xescommentform fmt=Site.XesCommentsTemplates#xescommentpost';
include_once ("$FarmD/cookbook/captcha.php");

// Link & comment security
if ($XesAddURLApproval){
	include_once("$FarmD/scripts/urlapprove.php");
	$UnapprovedLinkCountMax = 5;
	$EnableBlocklist = 10;                   # enable automatic blocklists
}

//Add timestamps to comments
if ($_POST['post'] && preg_match('/^Comments[\/\.]' . $XesBlogGroup . '-/',$pagename) && (! preg_match('/(SideBar|Group(Print)?(Attributes|Header|Footer))$/',$pagename)) && !($_POST['text'] == "delete")) {
	$_POST['text'] .= "\n(:timestamp:" . date("Y-m-d\TH:m:s") . ":)";
}

//Add timestamps & Google ping notifications for blog group posts...
if ($_POST['post'] && preg_match('/^' . $XesBlogGroup . '[\/\.]/',$pagename) && (! preg_match('/(RecentChanges|SideBar|Group(Print)?(Attributes|Header|Footer))$/',$pagename)) && !(PageTextVar($pagename,"timestamp")) && !($_POST['text'] == "delete")) {
	$_POST['text'] .= "\n\n(:timestamp:" . date("Y-m-d\TH:m:s") . ":)\n%archivelink%[[" . $XesBlogGroup . "Archive/" . date("Y-m") . " | Other Posts in " . date("F Y") . "]]%%";
	if ($XesAddGoogleBlogPing){
		$GoogleBlogPing_Name = $WikiTitle;
		$GoogleBlogPing_BlogHomepage = $XesBlogGroup . "." . $XesBlogHome;
		$GoogleBlogPing_BlogUrl = false; // explicit Blog url, overwrites the BlogHomePage
		$GoogleBlogPing_FeedUrl = $ScriptUrl . '/' . $XesBlogGroup . '/RecentChanges?action=rss'; // URL of RSS, RDF, or Atom feed (optional)
		//Note, I'm not 100% certain this is working:
		$GoogleBlogPing_PingPages = "/^" . $XesBlogGroup . "[\/\.].*/"; // regexp for the pagenames to send pings for
		include_once("$FarmD/cookbook/googleblogping.php");
	}
}

//comments group protection....
if (!CondAuth($pagename, 'admin')) {
	$pagename2 = preg_replace('/^Comments[\/\.]('.$XesBlogGroup.')-(.*)-\d{8}T\d{6}$/','${1}/${2}',$pagename);
	if ($action=='browse' && $pagename != $pagename2)
		{ Redirect($pagename2); exit;}
}

// enable/disable Pingback support
if ($XesAddPingbacks){
//Pingback -- requires too much PEAR...
	$Pingback_SendPages = "/^" . $XesBlogGroup . "[\/\.].*/";
	$Pingback_ReceivePages = "/^" . $XesBlogGroup . "[\/\.].*/";
	include_once ("$FarmD/cookbook/pingback.php");
			
//Pingback & comment notifications
	$EnableNotify = 1;
	$NotifyItemFmt = " * {\$FullName} . . . \$PostTime by {\$Author} \n
	Summary: {\$LastModifiedSummary}\n {\$PageUrl}?action=diff";
	$NotifyList[] = 'notify=' . $XesPingNotify . ' group=Pingback,Comments';
}

// Comment approval
$FmtPV['$Xes_Approved'] = '$page["Xes_Approved"]';
$HandleActions['XES_Approval'] = 'XES_Approval';
		
Markup('XES_Approve', 'directives', '/\\(:approve (.*?):\\)/', "XES_Approve_Button");
//Markup('XES_Approve', 'directives', '/\\(:approve:\\)/e', "XES_Approve_Button()");
		
function XES_Approve_Button($m) {
//function XES_Approve_Button() {
	$url=$m[1];
	$button = "<div style='text-align:right;'><form id='xesapprovebutton' method='post' action='".$url."'> 
	<input type='submit' value='" . XL('Approve') . "' class='inputbutton' /> 
	<input type='hidden' name='action' value='XES_Approval' /> 
	<input type='hidden' name='approved' value='true' /> 
	</form> </div>";
	return Keep($button);
}
		
		
function XES_Approval () {
	global $pagename, $MessagesFmt;
	if (CondAuth($pagename, 'admin')) {
		// Read the old page, set up the new page
		$oldpage = ReadPage($pagename);
		$newpage = $oldpage;
		$newpage['Xes_Approved'] = "true";
		
		// Make the page changes
		UpdatePage($pagename, $oldpage, $newpage);
		unset($_POST);
		$MessagesFmt[] = "$[Comment approved!]";
		HandleBrowse($pagename);
		exit();
	} else {
		$MessagesFmt[] = "$[You do not have permission to approve comments.]";
		HandleBrowse($pagename);
		exit();
	}
}

// enable/disable XMLRPC Support
if ($XesAddXMLRPC){
	include_once ("$FarmD/cookbook/xmlrpc.php");
}

// add calendar support
$BlogCal['defaultgroup'] = 'Blog';
$BlogCal['pastonly'] = 1;
$BlogCal['isobasic'] = 1;
include_once("$FarmD/cookbook/blogcal.php");