<?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");