<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Teleogistic &#187; email</title>
	<atom:link href="http://teleogistic.net/tag/email/feed/" rel="self" type="application/rss+xml" />
	<link>http://teleogistic.net</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 16:24:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Project Reclaim and the email dilemma</title>
		<link>http://teleogistic.net/2011/10/project-reclaim-and-the-email-dilemma/</link>
		<comments>http://teleogistic.net/2011/10/project-reclaim-and-the-email-dilemma/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 20:04:45 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[edtech]]></category>
		<category><![CDATA[etc]]></category>
		<category><![CDATA[#projectreclaim]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[K-9 Mail]]></category>
		<category><![CDATA[Thunderbird]]></category>
		<category><![CDATA[Volvo]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?p=1562</guid>
		<description><![CDATA[One of the main 2011 goals for Project Reclaim is to get my email out of Gmail. Heavy reliance on Gmail raises a number of red flags. For one thing, email is central to my business and personal life online, and provides the best archive of my online past (get the important stuff first). For [...]]]></description>
			<content:encoded><![CDATA[<p>One of the main 2011 goals for <a href="http://teleogistic.net/2011/03/project-reclaim/">Project Reclaim</a> is to get my email out of Gmail. Heavy reliance on Gmail raises a number of red flags. For one thing, email is central to my business and personal life online, and provides the best archive of my online past (<em>get the important stuff first</em>). For another, Gmail is ad-supported, in a way that has rankled since Gmail went public: it &#8220;reads&#8221; your email and serves ads based on what it finds. No one really talks about it anymore, but it still kind of bugs me &#8211; so I want to move to a non-free system (<em>paying is better than getting something for free</em>).</p>
<p>It&#8217;s taken me a while to make the move, though, for two main reasons.</p>
<ol>
<li>
<p>Email is tricky. Good, free mail server software is easy to find. But it&#8217;s not necessarily easy to set up and maintain. If the outgoing server isn&#8217;t configured correctly, your messages will get marked as spam. If you haven&#8217;t got constantly monitored spam filters on your incoming mail, you&#8217;ll be inundated with garbage. And the issues of backups and reliability, while certainly important in the case of (say) self-hosted websites, are many times more important with email: if the server goes down, emails may get altogether lost in the ether.</p>
<p>I&#8217;ve set up and configured email servers before, and it hasn&#8217;t been very fun. When deciding how to solve the Gmail conundrum, I needed to take this fact into consideration. I started to do a bit of research on paid email hosting, and found good reviews of <a href="http://www.rackspace.com/apps">Rackspace&#8217;s hosted email service</a>. The service is pretty affordable, and I knew from years of Slicehost use (now owned by Rackspace) that customer service and support would be good.</p>
</li>
<li>
<p>I needed a good address. I own a lot of domain names, but most of them are lame, and none lent themselves very neatly to an email address. For instance, when your domain name is boonebgorges.com, what&#8217;s the email account name? &#8216;boone&#8217;? The cool factor there is pretty low. And I am a cool guy, so that&#8217;s important.</p>
<p>Some of the obvious domains are taken. <code>boone.com</code> is wasted on dry-erase boards. <code>gorges.com</code> could never be wrested from the clutches of &#8220;one of the oldest family owned Volvo franchises in the United States&#8221;. But there was hope &#8211; or should I say <em>había esperanza</em> &#8211; that I might get the fairly unused <code>gorg.es</code>. In fact, my brother and I had been working on that project for a couple of years, but it was only a few months ago that the owner finally relented, and the domain name was transferred to the Gorges boys.</p>
</li>
</ol>
<p>So, about two months ago, I made the switch. For now, I just set it up as another account in Thunderbird (more on <a href="http://teleogistic.net/2011/03/making-the-thunderbird-interface-more-gmail-y/">my Thunderbird setup</a>). I created a generic &#8220;Archive&#8221; directory on my gorg.es account (to mimic Gmail&#8217;s All Mail) and pointed my &#8216;Y&#8217; shortcut to that directory. I&#8217;m using <a href="http://code.google.com/p/k9mail/">K-9 Mail</a> on my Android phone, which I set up to save the entire Archive directory, so I&#8217;d have good local email search on my phone. Little by little, I&#8217;m moving over my email correspondence to the new, awesome address. Bye bye, Gmail!</p>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/2011/03/project-reclaim/' rel='bookmark' title='Project Reclaim'>Project Reclaim</a></li>
<li><a href='http://teleogistic.net/2011/03/making-the-thunderbird-interface-more-gmail-y/' rel='bookmark' title='Making the Thunderbird interface more Gmail-y'>Making the Thunderbird interface more Gmail-y</a></li>
<li><a href='http://teleogistic.net/2009/09/automated-and-redundant-wordpress-backup-via-email/' rel='bookmark' title='Automated and redundant Wordpress backup via email'>Automated and redundant Wordpress backup via email</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/2011/10/project-reclaim-and-the-email-dilemma/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Building a baby photo site with WordPress</title>
		<link>http://teleogistic.net/2011/07/building-a-baby-photo-site-with-wordpress/</link>
		<comments>http://teleogistic.net/2011/07/building-a-baby-photo-site-with-wordpress/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 17:59:11 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[edtech]]></category>
		<category><![CDATA[etc]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[#projectreclaim]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[photoblog]]></category>
		<category><![CDATA[Walter]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?p=1409</guid>
		<description><![CDATA[My wife and I just had our first baby, which is the occassion for much nachas and, by extension, picture sharing. Facebook is, for better or for worse (emphasis on the latter), the de facto place for such sharing to happen. For a number of reasons &#8211; a desire to be somewhat selective about who [...]]]></description>
			<content:encoded><![CDATA[<p>My wife and I just had <a href="http://teleogistic.net/2011/06/welcome-walter/">our first baby</a>, which is the occassion for much nachas and, by extension, picture sharing. Facebook is, for better or for worse (emphasis on the latter), the <em>de facto</em> place for such sharing to happen. For a number of reasons &#8211; a desire to be somewhat selective about who sees my family pictures, my <a href="http://projectreclaim.net/">Project Reclaim</a> sensibilities, the fact that I don&#8217;t have a Facebook account and generally think that Facebook is an evil company &#8211; I don&#8217;t want to use FB for this purpose. As in the case of <a href="http://teleogistic.net/2011/05/kicking-the-twitpic-habit-with-wordpress/">my Twitpic-like photoblog</a>, I figured I could use WordPress to set something up that was nearly as seamless as Facebook, or Google+, or Flickr, or whatever.</p>
<h3>The criteria</h3>
<p>There were a few things I wanted out of the baby site.</p>
<ol>
<li>Easy (or zero) login for users</li>
<li>Control over who has access</li>
<li>Optional email notification for new content</li>
<li>Easy, javascripty gallery browsing</li>
</ol>
<p>When I started, I was pretty sure that I&#8217;d be able to get all of these things pretty easily, using existing WordPress plugins. I was both right and wrong about this: plugins exist for all of these purposes, but none of them were very easy to implement. As a result, I ended up building several pieces from scratch. I&#8217;ll go through each of the criteria, talk a bit more about what I was looking for, and then say something about how it was achieved. By doing this, and sharing the code (spoiler alert: <a href="https://github.com/boonebgorges/Hard-G/tree/master/wp-content">https://github.com/boonebgorges/Hard-G/tree/master/wp-content</a>), I&#8217;m hoping that I can help others with similar sensibilities to get started on their own sites.</p>
<h3>Non-sucky registration and login</h3>
<p>I love WordPress, and I understand the important reasoning behind the decisions that led to the design, but WP&#8217;s user registration system sucks. I didn&#8217;t want just <em>anyone</em> to be able to create and activate an account. I didn&#8217;t want users to have to click an activation link. I didn&#8217;t want users to have randomly generated passwords that would need changing later on. And I wanted users to have the option of logging in a non-WP way.</p>
<p>Several of these problems could be solved by using Facebook logins. I&#8217;m not willing to give my photos over to the horrific FB leviathan, but I&#8217;m happy to piggyback on their login APIs if it will save my family and friends a few headaches. I wanted my users to have the option of clicking a single button that would give my site the ability to provision them based on their persistent Facebook login.</p>
<p>I started by looking at some popular Facebook Connect plugins from the wordpress.org plugin repository. I didn&#8217;t really like them. Most were linked to the Comments section of blog posts, while I wanted to use the logins for overall site access. Most were dependent on Javascript for logins, while I wanted to handle logins on the server side. Most used an outdated version of FB&#8217;s API (or at least of the PHP API classes that FB offers). And, to be blunt, most were too much of a mess, having been retrofitted many times over, and as a result next to impossible to extend. I tried modifying one or two of the more popular FB-WP plugins to do what I wanted, but I ended up writing so much garbage spaghetti code that I decided to cut my losses and start from scratch.</p>
<p>So I boned up a bit on the FB API, and wrote a small plugin that I call <a href="https://github.com/boonebgorges/Hard-G/tree/master/wp-content/plugins/wally-login">Wally Login</a>. Together with the <a href="https://github.com/boonebgorges/Hard-G/blob/master/wp-content/themes/wally-theme/page-register.php">registration page template from my custom theme (a child of TwentyEleven)</a>, it does a couple of key things.</p>
<div id="attachment_1411" class="wp-caption alignright" style="width: 310px"><a href="http://teleogistic.net/wp-content/uploads/2011/07/logins.png"><img src="http://teleogistic.net/wp-content/uploads/2011/07/logins-300x134.png" alt="Your choice" title="Your choice" width="300" height="134" class="size-medium wp-image-1411" style="border: 1px solid #666;" /></a><p class="wp-caption-text">Your choice</p></div>
<ul>
<li><em>Rudimentary access control</em> &middot; If a non-logged-in user tries to visit any page on the site (other than the registration page), he is redirected to the Register page.</li>
<li><em>FB login integration</em> &middot; If a user clicks the &#8220;Log me in using Facebook&#8221; link, they&#8217;re directed to the FB authorization page for my website (which is registered as a Facebook app). There, they&#8217;re asked to approve the app &#8211; a one-time process &#8211; and are then returned to my site. Based on the display name, email address, etc that I get from FB, I create a WP user corresponding to the FB account. On future visits, approved users who are logged into Facebook will be automatically logged into my WP site whenever they visit it (an important point, because FB cookies are persistent over browser sessions, while WP logins, by default, are not). As a result, in the best-case scenario, a user will authorize their FB account with my site one time, and will never again have to think about authorization on Wally&#8217;s page.</li>
<li><em>A customized WP registration process</em> &middot; If users opt not to go the FB route, they can create a WP account directly on the site. I wanted to avoid sending users to an unthemed wp-login.php or wp-signup.php page, so I cribbed a few lines of code from BuddyPress and made my own registration and login dialogs. Wally&#8217;s site is part of a larger WP network, but I wanted to bypass WPMS&#8217;s built-in registration stuff (which requires users to activate their accounts, and is thus generally too hard for newbies to grok). My custom registration therefore creates the user directly (with <code>wp_insert_user()</code>), using a password that he provides, and skips the activation email. (By bypassing account activation, I&#8217;m removing an important spam prevention tool. More on that in the next section.)</li>
<li><em>Customized email notifications</em> &middot; Because I&#8217;m not using the built-in registration process, I needed to write my own email notifications for account applications and approvals.</li>
</ul>
<p>If you decide to use my code, keep in mind that it&#8217;s not particulary beautiful. I wrote it for my own use, which means that it will take a bit of elbow grease to get it to work on your own site. In particular, if I were writing something for more general distribution, I would not be so reliant on a theme template as I am here. But if you&#8217;re looking to create a site like mine, this code is a great place to start &#8211; especially the FB integration stuff, which has made the registration and login process about as smooth as it can get.</p>
<h3>Access control</h3>
<p>The final important thing that the Wally Login plugin does is to provide me (the site admin) with control over who has access to the site. There are a couple ways I could have approached this issue. One is to whitelist users ahead of time. The problem with this is that I&#8217;m bound to forget some names, get email addresses wrong, and run into other problems that stem from my unfortunate lack of omniscience. Another strategy is the invitation code. When unique to the individual, this method suffers from the same drawbacks of the whitelist; when non-unique (ie when everyone uses the same invitation code) it takes away much of the security, as the code can be passed around quite easily; either way, invitation codes are clunky, easily misplaced, and all too often mistyped.</p>
<div id="attachment_1414" class="wp-caption alignleft" style="width: 310px"><a href="http://teleogistic.net/wp-content/uploads/2011/07/thanks.png"><img src="http://teleogistic.net/wp-content/uploads/2011/07/thanks-300x72.png" alt="Thanks for applying" title="Thanks for applying" width="300" height="72" class="size-medium wp-image-1414"  style="border: 1px solid #666;" /></a><p class="wp-caption-text">Thanks for applying</p></div>
<p>As a result, I ended up going with a third option: an application and approval process. Here&#8217;s the idea, conceptually. Anyone who wants can create an account on my site (either through Facebook or natively; see the previous section). However, the account does not actually allow access to the site unless the account is also <em>approved by the administrators</em>. Thus, after the initial application, two emails are sent: one to the applicant saying &#8220;thanks for applying, please be patient&#8221;, and one to me saying &#8220;there&#8217;s a new applicant, please approve them&#8221;. Then I go to my approval interface and click the Approve button (if I want), which marks the user as approved in my database and sends them an email saying &#8220;You&#8217;re in!&#8221;</p>
<p>Here&#8217;s a brief description of how it works technically. All applicants have a WP account created for them. Every new account is marked, at the time of creation, with user_status = &#8217;2&#8242;, and I make sure that no page other than Register can be viewed by an account with user_status = &#8217;2&#8242;. In this way, I am turning the idea of activation around a bit &#8211; natively, WP makes the <em>user</em> do the activation, but in my case <em>I</em> do it. The admin tool I use to activate users is my <a href="http://wordpress.org/extend/plugins/unconfirmed/">Unconfirmed plugin</a>, designed for a slightly different purpose but quite at home here. (For technical reasons, Unconfirmed needs users to have activation keys; thus Wally Login also generates some dummy keys during the user creation process so that Unconfirmed will work right.) Unconfirmed, in turn, does the work of flipping user_status to 0 upon approval.</p>
<p>Taken together, Wally Login and Unconfirmed (with custom WP registration, FB integration, user approval by admin, etc) has given me a comfortable level of access control, without making the process unduly difficult for my users.</p>
<h3>Email notification for new content</h3>
<p>One of the biggest drawbacks of creating a standalone picture site instead of using an all-purpose social network (in practice, this means Facebook) is that the standalone site is likely to be forgotten. FB collects all of your network&#8217;s activity into a single stream; it&#8217;s highly unlikely, on the other hand, that Wally&#8217;s site will become part of anyone&#8217;s daily routine, so that they stop by to check for new content. For that reason, good email notification of new content is essential to making the site work.</p>
<div id="attachment_1416" class="wp-caption alignright" style="width: 254px"><a href="http://teleogistic.net/wp-content/uploads/2011/07/email.png"><img src="http://teleogistic.net/wp-content/uploads/2011/07/email.png" alt="Dead simple email subscription" title="Dead simple email subscription" width="244" height="156" class="size-full wp-image-1416"  style="border: 1px solid #666;" /></a><p class="wp-caption-text">Dead simple email subscription</p></div>
<p>I first tried using the popular <a href="http://wordpress.org/extend/plugins/subscribe2/">Subscribe2</a> to handle these notifications. But I ran into a bunch of problems. For one thing, I didn&#8217;t like that S2&#8242;s subscription management happened in the Dashboard &#8211; I want to keep my users on the front end. S2&#8242;s category-based subscription is too complicated for my site, where people are either going to want to subscribe to all posts or to none at all. And the widget that comes with S2, for display on the front-end of the site, is pretty much atrocious. (Sorry. The rest of the plugin is nice. But that widget sucks.) At first I tried solving these problems just by building my own widget for S2, one that would tell the user whether he was currently subscribed, and show an Unsubscribe/Subscribe button, as appropriate. But, given the structure of S2&#8242;s data (which is somewhat arcane, and in any case far too complicated for my purposes), it ended up being a lot harder than it should have been.</p>
<p>So &#8211; wait for it &#8211; I wrote something from scratch. <a href="https://github.com/boonebgorges/Hard-G/blob/master/wp-content/plugins/bbg-subscribe2-widget/bbg-subscribe2-widget.php">It is dead simple</a>. Two parts: (1) a widget, which does exactly what I describe in the foregoing paragraph; and (2) hooks into publish_post to send an email to all subscribed users (along with some gentle checks to make sure dupes are not sent). This plugin has no admin UI and no options, because I don&#8217;t need any of those things.</p>
<h3>Pretty galleries</h3>
<p>Since the main point of the site would be to look at lots of pictures, it was quite important to have an easy, pretty way to do so. By &#8220;easy&#8221; I mean, primarily, navigable by keyboard; by &#8220;pretty&#8221;, I mean, primarily, bigger than the content area of a typical blog post. Less important, but still desirable, was the admin interface: I wanted it to be easy to upload lots of pictures at once, to add captions and other metadata if necessary, and to turn it all into a gallery that would look good on the front end.</p>
<div id="attachment_1418" class="wp-caption alignleft" style="width: 310px"><a href="http://teleogistic.net/wp-content/uploads/2011/07/pretty.png"><img src="http://teleogistic.net/wp-content/uploads/2011/07/pretty-300x267.png" alt="Pretty, easy" title="Pretty, easy" width="300" height="267" class="size-medium wp-image-1418"  style="border: 1px solid #666;" /></a><p class="wp-caption-text">Pretty, easy</p></div>
<p>You know the drill: I tried a couple of the more popular free plugins, but all of them were annoying in one way or another, and each one was way overengineered for my meager needs. I was especially disappointed by the back-end admin for the popular gallery plugins, which I found lugubrious, unintuitive, and impossible to extend. After some consideration, I decided that I actually preferred WP&#8217;s native Add Media interface for uploading photos and adding metadata, and that I was perfectly happy with the way that WP&#8217;s gallery shortcode displayed content on the front end, at least when viewing thumbnails.</p>
<p>So the only thing I really needed was to implement the javascript that would allow for keyboard navigation and lightboxing of gallery photos. Thanks in part to his extremely uncreative and literal plugin naming schema, I found Viper007Bond&#8217;s <a href="http://wordpress.org/extend/plugins/jquery-lightbox-for-native-galleries/">jQuery Lightbox For Native Galleries plugin</a>. It does almost exactly what I want, right out of the box.</p>
<p>I did make a few minor mods, though. First, the plugin is a bit greedy in the way that it filters the output of <code>get_attachment_link()</code>, which was either breaking things (as in the case of comment_post_redirect on attachment posts) or making it hard to display links to the attachment page instead of the raw attachment file. The former problem I solved with <a href="https://github.com/boonebgorges/Hard-G/blob/master/wp-content/themes/wally-theme/functions.php#L218">a filter</a>; for the latter problem, I was a bit lazy, so I <a href="https://github.com/boonebgorges/Hard-G/blob/master/wp-content/plugins/jquery-lightbox-for-native-galleries/jquery-lightbox-for-native-galleries.php#L81">modded the plugin itself</a> in addition to adding an <a href="https://github.com/boonebgorges/Hard-G/blob/master/wp-content/themes/wally-theme/functions.php#L191">explicit &#8216;lightbox&#8217; class to attachment links</a>. This combination of hacks makes it work perfectly for my purposes.</p>
<h3>Odds and ends</h3>
<div id="attachment_1420" class="wp-caption alignright" style="width: 310px"><a href="http://teleogistic.net/wp-content/uploads/2011/07/gallery.png"><img src="http://teleogistic.net/wp-content/uploads/2011/07/gallery-300x201.png" alt="A little bonus" title="A little bonus" width="300" height="201" class="size-medium wp-image-1420" style="border: 1px solid #666;" /></a><p class="wp-caption-text">A little bonus</p></div>
<p>With my absolute requirements met, I was able to add a few other goodies to the site. My <a href="https://github.com/boonebgorges/Hard-G/tree/master/wp-content/themes/wally-theme">theme</a> is a child of Twenty Eleven, which I&#8217;m pretty much using as-is. But I&#8217;ve added a few fun bits. First, on each attachment page, I added <a href="https://github.com/boonebgorges/Hard-G/blob/master/wp-content/themes/wally-theme/functions.php#L3">Download links</a>, so that users could download images of various resolutions for printing or editing. I <a href="https://github.com/boonebgorges/Hard-G/blob/master/wp-content/themes/wally-theme/functions.php#L28">messed with the WP Admin Bar</a> so that users coming from Facebook wouldn&#8217;t see Log Out and some other inappropriate links. And under each thumbnail in Gallery view, I&#8217;ve added <a href="https://github.com/boonebgorges/Hard-G/blob/master/wp-content/themes/wally-theme/functions.php#L158">Download/Comments</a> links, so that users could bypass the jQuery lightbox and go straight to the attachment permalink if they wanted.</p>
<p>It took some work, but I think I&#8217;ve ended up with a site that is nice to use and easy to maintain, without resorting to the extreme discomfort associated with Facebook. Hooray!</p>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/2011/12/moving-my-photo-site-to-a-new-url-and-server/' rel='bookmark' title='Moving my photo site to a new URL and server'>Moving my photo site to a new URL and server</a></li>
<li><a href='http://teleogistic.net/2010/08/new-wordpress-plugin-simple-import-users/' rel='bookmark' title='New WordPress plugin: Simple Import Users'>New WordPress plugin: Simple Import Users</a></li>
<li><a href='http://teleogistic.net/2011/06/buddypress-and-the-yourls-wordpress-to-twitter-plugin/' rel='bookmark' title='BuddyPress and the YOURLS: WordPress to Twitter plugin'>BuddyPress and the YOURLS: WordPress to Twitter plugin</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/2011/07/building-a-baby-photo-site-with-wordpress/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>New WordPress plugin: Unconfirmed</title>
		<link>http://teleogistic.net/2011/05/new-wordpress-plugin-unconfirmed/</link>
		<comments>http://teleogistic.net/2011/05/new-wordpress-plugin-unconfirmed/#comments</comments>
		<pubDate>Mon, 23 May 2011 14:08:34 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[activation]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[multisite]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[unconfirmed]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?p=1281</guid>
		<description><![CDATA[If you&#8217;ve ever been responsible for supporting an installation of WordPress Multisite with open registration, you know that the activation process can be a significant source of headaches. Sometimes activation emails get caught by spam filters. Sometimes they are overlooked and deleted by unwitting users. And, to complicate matters, WP&#8217;s safeguards prevent folks from re-registering [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve ever been responsible for supporting an installation of WordPress Multisite with open registration, you know that the activation process can be a significant source of headaches. Sometimes activation emails get caught by spam filters. Sometimes they are overlooked and deleted by unwitting users. And, to complicate matters, WP&#8217;s safeguards prevent folks from re-registering with the same username or email address. This can result in a lot of support requests that are not particularly easy to handle. Aside from reaching manually into the database for an activation key, there&#8217;s not much the admin can do to help the would-be member of the site.</p>
<div id="attachment_1282" class="wp-caption alignright" style="width: 310px"><a href="http://teleogistic.net/wp-content/uploads/2011/05/unconfirmed.png"><img src="http://teleogistic.net/wp-content/uploads/2011/05/unconfirmed-300x177.png" alt="The Unconfirmed Dashboard panel" title="unconfirmed" width="300" height="177" class="size-medium wp-image-1282"  style="border: 1px solid #000;" /></a><p class="wp-caption-text">The Unconfirmed Dashboard panel</p></div>
<p>My new WordPress plugin <a href="http://github.com/boonebgorges/unconfirmed">Unconfirmed</a> eases this problem a bit, by providing WPMS admins with a new set of tools for managing unactivated registrations. (By naming it &#8220;Unconfirmed&#8221;, I fully expect that the plugin will join some great <a href="http://en.wikipedia.org/wiki/Unforgiven">movies</a> and <a href="http://en.wikipedia.org/wiki/The_Unconsoled">books</a> in the pantheon of Important Cultural Objects.) Unconfirmed adds a new panel to your Network Admin Dashboard (under the Users menu). When you visit the Unconfirmed panel, it gives you a list of all pending registrations on your system. The list is easily sortable by registration date, username, email address, and activation key. For each unactivated registration, there are two actions that the admin can perform. &#8220;Resend Activation Email&#8221; does exactly what it says: it sends an exact duplicate of the original activation email, as created by the WordPress core activation notification functions. &#8220;Activate&#8221; allows admins to activate a pending registration manually, which will trigger the activation success email to the user.</p>
<p>At the moment, Unconfirmed is compatible with WordPress Multisite (aka Network mode) only. In the future, I may expand the plugin to work with non-MS installations of WP. Unconfirmed works with BuddyPress, too. The plugin was developed for use on the <a href="http://commons.gc.cuny.edu">CUNY Academic Commons</a>.</p>
<p><a href="http://wordpress.org/extend/plugins/unconfirmed/">Download Unconfirmed from the wordpress.org repo</a> or follow its development on <a href="https://github.com/boonebgorges/unconfirmed">Github</a>.</p>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/2011/07/unconfirmed-1-2-non-network-support-delete-options/' rel='bookmark' title='Unconfirmed 1.2: non-Network support; delete options'>Unconfirmed 1.2: non-Network support; delete options</a></li>
<li><a href='http://teleogistic.net/2011/07/building-a-baby-photo-site-with-wordpress/' rel='bookmark' title='Building a baby photo site with WordPress'>Building a baby photo site with WordPress</a></li>
<li><a href='http://teleogistic.net/2011/05/revisiting-git-github-and-the-wordpress-org-plugin-repository/' rel='bookmark' title='Revisiting Git, Github, and the wordpress.org plugin repository'>Revisiting Git, Github, and the wordpress.org plugin repository</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/2011/05/new-wordpress-plugin-unconfirmed/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Making the Thunderbird interface more Gmail-y</title>
		<link>http://teleogistic.net/2011/03/making-the-thunderbird-interface-more-gmail-y/</link>
		<comments>http://teleogistic.net/2011/03/making-the-thunderbird-interface-more-gmail-y/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 18:10:30 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[edtech]]></category>
		<category><![CDATA[etc]]></category>
		<category><![CDATA[#projectreclaim]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Thunderbird]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?p=1170</guid>
		<description><![CDATA[As part of Project Reclaim, I&#8217;m gearing up to move my email off of Gmail and onto my own server. Email is, and long has been, central to my life online &#8211; it&#8217;s my main point of contact for so many personal and professional connections, and my email archives are the closest thing I&#8217;ve got [...]]]></description>
			<content:encoded><![CDATA[<p>As part of <a href="http://teleogistic.net/2011/03/project-reclaim/">Project Reclaim</a>, I&#8217;m gearing up to move my email off of Gmail and onto my own server. Email is, and long has been, central to my life online &#8211; it&#8217;s my main point of contact for so many personal and professional connections, and my email archives are the closest thing I&#8217;ve got to a record of my online activity. So I&#8217;m keen to make the move as smooth as I can.</p>
<p>For that reason, I&#8217;m handling the transition in stages. The first stage involves transitioning email client software away from the Gmail website.</p>
<section name="choosing-a-client" id="choosing-a-client">
<h3>Choosing a client</h3>
<p>I&#8217;ve chosen <a href="http://www.mozilla.org/projects/thunderbird/">Thunderbird</a> as my alternative, for a couple reasons.</p>
<ol>
<li>It&#8217;s open-source.</li>
<li>It&#8217;s highly extensible and customizable.</li>
<li>It works across platforms. That&#8217;s important, because I&#8217;ll be migrating away from OSX.</li>
</ol>
<p>Choosing Thunderbird is not without its sacrifices. For one thing, moving to an OS-native application, rather than an app that runs in a browser window like Gmail does, means that I&#8217;ll no longer be able to count on having a consistent UI and feature set between different devices. In some cases, this is not a huge loss. The UI for Gmail on my Android phone is really quite different from the normal web version, and it&#8217;s never bothered me very much. My biggest worry, though, is that I&#8217;ll have multiple workstations &#8211; a primary work machine and a netbook, for example &#8211; with different email setups. I&#8217;m hoping to mitigate the problem by coming up with some idiot-proof backup and syncing methods for the fairly small number of files that comprise Thunderbird&#8217;s configuration. (This&#8217;ll be necessary for other software transitions as well, like my gradual move to Vim. It&#8217;d be quite easy with Dropbox and some strategically-placed symbolic links, but I&#8217;m trying to break the Dropbox habit too :) )</p>
<p>It&#8217;s a considerable comfort that, now that I have a smart phone (and am thus no longer reliant on public or borrowed computers for email access), the vast, vast majority of my email use is centered on a handful of devices, all of which I own. The last time I checked my email on a device other than my own was probably three years ago. Weird, now that I think of it.</p>
<p>The other sacrifice is related to UX. I happen to like Gmail&#8217;s interface. In particular, I&#8217;ve grown quite used to Gmail&#8217;s thoughtful keyboard shortcuts, which make it possible to do nearly navigation without touching the mouse. Coming up with a reasonable facsimile of these shortcuts in Thunderbird would be the biggest part of my configuration process.</p>
</section>
<section name="keyboard-shortcuts" id="keyboard-shortcuts">
<h3>Keyboard Shortcuts</h3>
<p>Thunderbird has pretty good keyboard shortcuts out of the box. I didn&#8217;t feel like learning a whole new system, though, so I wanted a way to map Gmail-style shortcuts onto Thunderbird. There used to be a Thunderbird extension to do just that, called GmailUI. But <a href="http://sites.google.com/site/kmixter/gmailui">the GmailUI website</a> suggests that the extension is only compatible with Thunderbird versions 0.8-2.0 (Thunderbird&#8217;s currently in 3.1), which would explain why the extension doesn&#8217;t show up <a href="https://addons.mozilla.org/en-US/thunderbird/search/?q=gmailui&#038;cat=all&#038;x=0&#038;y=0">in a search on tho Mozilla repo</a> (the &#8220;Expression Search&#8221; plugin does come up, which is a fork of a part of GmailUI that I&#8217;ll talk about in a minute &#8211; but it doesn&#8217;t do keyboard shortcuts).</p>
<p>So I looked for a more general method for customizing Thunderbird&#8217;s keyboard shortcuts, and found it with <a href="http://kb.mozillazine.org/Keyconfig_extension">Keyconfig</a>. It&#8217;s pretty straightforward to remap keystrokes using Keyconfig (Tools > Keyconfig), though it can be a bit of a pain because many of the standard Gmail shortcuts (like <code>j</code> and <code>k</code> for up/down navigation) are already in use by Thunderbird, so that changing one shortcut often means making two. You might find it helpful to borrow my configuration, which I&#8217;ve pasted below. Add these lines to your <a href="https://developer.mozilla.org/en/Thunderbird/Thunderbird_Configuration_Files">user.js</a> config file (create if it doesn&#8217;t exist):</p>
<pre class="brush: javascript">
	user_pref(&quot;keyconfig.main.key_killThread&quot;, &quot;][I][&quot;);
	user_pref(&quot;keyconfig.main.key_markJunk&quot;, &quot;meta shift][J][&quot;);
	user_pref(&quot;keyconfig.main.key_markReadByDate&quot;, &quot;meta shift][D][&quot;);
	user_pref(&quot;keyconfig.main.key_markThreadAsRead&quot;, &quot;meta shift][R][&quot;);
	user_pref(&quot;keyconfig.main.key_newMessage&quot;, &quot;meta shift][M][&quot;);
	user_pref(&quot;keyconfig.main.key_newMessage2&quot;, &quot;meta shift][N][&quot;);
	user_pref(&quot;keyconfig.main.key_nextMsg&quot;, &quot;][J][&quot;);
	user_pref(&quot;keyconfig.main.key_previousMsg&quot;, &quot;][K][&quot;);
	user_pref(&quot;keyconfig.main.key_reply&quot;, &quot;][R][&quot;);
	user_pref(&quot;keyconfig.main.key_replyall&quot;, &quot;shift][R][&quot;);
	user_pref(&quot;keyconfig.main.key_toggleMessagePane&quot;, &quot;][V][&quot;);
	user_pref(&quot;keyconfig.main.xxx_key74_SwitchPaneFocus(event);&quot;, &quot;][D][&quot;);
	</pre>
<p>Briefly, this does the following. First, it maps some familiar keystroke combos from Gmail to Thunderbird: <code>j</code> and <code>k</code> to up and down, and <code>r</code> and <code>R</code> to Reply and Reply To All. Second, because two-stroke codes from Gmail (like <code>gi</code> for Go To > Inbox) don&#8217;t seem to be supported natively by Thunderbird, I&#8217;ve mapped <code>D</code> to SwitchPaneFocus, which lets me get back and forth between the folders pane, the message list pane, and the single message pane, for easier navigation. As I get more comfortable with it, I might write my own extension that ports over some of the other most convenient Gmail shortcuts, but for now this covers a good 80% of what I might regularly use.</p>
<p>The other big shortcut missing from Thunderbird is <code>y</code>, which is the Archive command in Gmail. For that purpose, I installed <a href="https://addons.mozilla.org/en-US/thunderbird/addon/nostalgy/">Nostalgy</a>, which allows you to move messages with keyboard shortcuts. I don&#8217;t think I&#8217;ve set this up in 100% the right way, but here&#8217;s how I&#8217;ve approximated Gmail&#8217;s <code>y</code> using Nostalgy. First, at Tools > Nostalgy > Keys, I&#8217;ve set &#8216;Save message&#8217; to &#8216;shift Y&#8217; and &#8216;Save as suggested&#8217; to &#8216;Y&#8217;. &#8216;Save as suggested&#8217; seems to work on a session basis; it suggests the folders that you&#8217;ve used since the last time you started Thunderbird. Thus, every time I start Thunderbird, the first time I want to archive a message, I use the more verbose shift-Y. A dialog at the bottom of the window suggests places where I might put the message; I select Gmail&#8217;s All Mail folder. Then, the next time I want to archive a message, I can use <code>y</code> by itself to go to the suggested (i.e. the last-used) location. Since I just throw all of my email into All Mail &#8211; no complex tagging or organization &#8211; this is all I need.</p>
</section>
<section name="mimicking-search" id="mimicking-search">
<h3>Mimicking Search</h3>
<p>One of the best things about Gmail its easy searchability. Gmail searches are generally fast, accurate, facet-able, and easy to navigate. Mimicking this in Thunderbird is, at one level, impossible; you&#8217;ll never have access to Google&#8217;s search algorithms. (Though probably this doesn&#8217;t matter much, since searching on a finite corpus like an email archive doesn&#8217;t require fancy logic like what&#8217;s in PageRank.) But I&#8217;ve got a few tips for making Thunderbird search a bit more like Gmail.</p>
<ol>
<li><em>Searching vs filtering</em> &#8211; The main search box, accessible by Cmd-K/Ctrl-K, is a true search. The nice thing about it is that it searches through all available metadata fields, and in all folders. The bad thing about it is that the search results interface, which comes up in a new tab, is totally different from the standard message viewing interface, and has (so far as I can tell) absolutely no keyboard shortcuts. As an alternative, you can use the Filter mode, which is available via the Quick Filter Bar (View > Toolbars > Quick Filter Bar). That allows you to filter the messages in your current view according to various search terms, within the default UI. If you&#8217;re like me, and you have an empty inbox and an All Mail file with all the things you want to search, the Filter method will mean switching to All Mail before you start searching.</li>
<li><em>Sort search results by date</em> &#8211; A small annoyance: when you do a Cmd-K search, results are, by default, in order by Relevance. Usually this is not what I want (I&#8217;m looking for that person who emailed me about BuddyPress <em>yesterday</em>) &#8211; I&#8217;d be much better served by Date sorting. <a href="https://addons.mozilla.org/en-US/thunderbird/addon/search-results-sort-by-date-no/">Search Results Sort By Date Not Relevance</a> is an aptly-named extension to change this behavior.</li>
<li><em>Gmail-type expression searches</em> &#8211; Gmail search has a handful of handy expressions for narrowing your search: <em>from:x</em> will search for &#8216;x&#8217; in the From field only; <em>attachment:yes</em> will limit results to those that have attachments, etc. Enabling this sort of filtering in Thunderbird was part of the aforementioned GmailUI. A kind-hearted dev has ported it over to <a href="https://addons.mozilla.org/en-US/thunderbird/addon/gmailui/">Expression Search</a>, which adds the same syntax to a special Expression box on the Quick Filter bar. (This last point is important &#8211; I spent some time messing around, thinking that the extension was broken, because I was expecting it to interact with the main search bar. It works only on the Filter bar.)</li>
</ol>
<p>As a side note related to search, I fear that one of the things I will lose irrevocably when I move away from Gmail as a provider is <em>mobile search</em>. Gmail searches take place on Gmail&#8217;s servers, so they work equally well on a mobile device. Thunderbird searches depend on local copies of the mail archive, which is impractical on a mobile phone. Suggestions for getting around this restriction are quite welcome.</p>
</section>
<section name="offline-throttling" id="offline-throttling">
<h3>Bonus! Offline Access and New Email Throttling</h3>
<p>Moving to a non-web-based email client is not all bad. For one thing, moving to a local application means that my email &#8211; archives and all &#8211; are available offline. I know that Google Gears and some of the new HTML5 goodies mitigate the issue somewhat with respect to Gmail, but offline access for a webapp is always going to be something of a hack.</p>
<p>On a related note, one thing that I have always hated about using Gmail is how it weaves together the process of checking for new email and accessing old email. I like to check for new mail at specified intervals only (once every few hours); anything more than that is extremely distracting. In Gmail, this meant closing the browser tab. Yet, fairly frequently, I find that I need to access an older email from my archive in order to do a specific task. In Gmail, this meant checking my new email as well. Now that I&#8217;ve moved to Thunderbird, I can access my archive without checking for new mail &#8211; the way it ought to be!</p>
<p>Setting it up this way was not straightforward. There are a few things you&#8217;ve got to do:</p>
<ol>
<li>In Tools > Account Settings > Server Settings, configure the &#8216;Check for new messages at startup&#8217; and &#8216;Check for new messages every x minutes&#8217; however you&#8217;d like. I have them both disabled, so that email can only be checked manually.</li>
<li>Here&#8217;s the tricky part: Gmail, in its futuristic wisdom, uses a special protocol called IDLE to push new email to remote clients &#8211; bypassing the settings from step (1). (This took me half a day to figure out.) Disable this feature at Tools > Account Settings > Server Settings > Advanced > &#8216;Use IDLE command if the server supports it&#8217;.</li>
</ol>
<p>I&#8217;m planning to spend a few weeks improving and getting used to this setup before starting the migration to self-hosted email.</p>
</section>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/2011/10/project-reclaim-and-the-email-dilemma/' rel='bookmark' title='Project Reclaim and the email dilemma'>Project Reclaim and the email dilemma</a></li>
<li><a href='http://teleogistic.net/2010/06/making-userthemes-work-on-wordpress-3-0/' rel='bookmark' title='Making Userthemes work on WordPress 3.0'>Making Userthemes work on WordPress 3.0</a></li>
<li><a href='http://teleogistic.net/2009/07/making-sitewide-tags-work/' rel='bookmark' title='Making Sitewide Tags work'>Making Sitewide Tags work</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/2011/03/making-the-thunderbird-interface-more-gmail-y/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Wildcard email whitelists in WordPress and BuddyPress</title>
		<link>http://teleogistic.net/2010/12/wildcard-email-whitelists-in-wordpress-and-buddypress/</link>
		<comments>http://teleogistic.net/2010/12/wildcard-email-whitelists-in-wordpress-and-buddypress/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 01:59:12 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[dev.wpmued]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[registration]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?p=1065</guid>
		<description><![CDATA[Cross-posted on the CUNY Academic Commons Development Blog WordPress (and before that WPMU) has long had a feature that allows admins to set a whitelist of email domains for registration (Limited Email Registration). On the Commons, we need to account for a lot of different domains, some of which are actually dynamic &#8211; but they [...]]]></description>
			<content:encoded><![CDATA[<p><em>Cross-posted on the <a href="http://dev.commons.gc.cuny.edu/2010/12/13/wildcard-email-whitelists-in-wordpress-and-buddypress/">CUNY Academic Commons Development Blog</a></em></p>
<p>WordPress (and before that WPMU) has long had a feature that allows admins to set a whitelist of email domains for registration (Limited Email Registration). On the Commons, we need to account for a lot of different domains, some of which are actually dynamic &#8211; but they are all of the form *.cuny.edu. WP doesn&#8217;t support this kind of wildcards, but we&#8217;ve got it working through a series of customizations.</p>
<p>These first two functions form the heart of the process. The first one hooks to the end of the BP registration process, looks for email domain errors, and then sends the request to the second function, which does some regex to check against the wildcard domains you&#8217;ve specified. This is BP-specific, but I think you could make it work with WPMS just by changing the hook name.</p>
<pre><code>
function cac_signup_email_filter( $result ) {
	global $limited_email_domains;

	if ( !is_array( $limited_email_domains ) )
		$limited_email_domains = get_site_option( 'limited_email_domains' );

	$valid_email_domain_check = cac_wildcard_email_domain_check( $result['user_email'] );	

	if( $valid_email_domain_check ) {
		if ( isset( $result['errors']->errors['user_email'] ) )
			unset( $result['errors']->errors['user_email'] );
	}

	return $result;
}
add_filter( 'bp_core_validate_user_signup', 'cac_signup_email_filter', 8 );

function cac_wildcard_email_domain_check( $user_email ) {
	global $limited_email_domains;

	if ( !is_array( $limited_email_domains ) )
		$limited_email_domains = get_site_option( 'limited_email_domains' );

	if ( is_array( $limited_email_domains ) &#038;&#038; empty( $limited_email_domains ) == false ) {
		$valid_email_domain_check = false;
		$emaildomain = substr( $user_email, 1 + strpos( $user_email, '@' ) );
		foreach ($limited_email_domains as $limited_email_domain) {
			$limited_email_domain = str_replace( '.', '\.', $limited_email_domain);        // Escape your .s
			$limited_email_domain = str_replace('*', '[-_\.a-zA-Z0-9]+', $limited_email_domain);     // replace * with REGEX for 1+ occurrence of anything
			$limited_email_domain = "/^" . $limited_email_domain . "/";   // bracket the email with the necessary pattern markings
			$valid_email_domain_check = ( $valid_email_domain_check or preg_match( $limited_email_domain, $emaildomain ) );
		}
	}	

	return $valid_email_domain_check;
}
</code></pre>
<p>Before WP 3.0, this was enough to make it work. The latest WP does increased sanitization on the input of the limited_email_domains field, however, which makes it reject lines like *.cuny.edu. The following functions add an additional field to the ms-options.php panel that saves the limited domains without doing WP&#8217;s core checks. (Beware: bypassing WP&#8217;s checks like this means that there are no safeguards in place for well-formedness. Be careful about what you type in the field, or strange things may happen.)</p>
<pre><code>
function cac_save_limited_email_domains() {
	if ( $_POST['cac_limited_email_domains'] != '' ) {
		$limited_email_domains = str_replace( ' ', "\n", $_POST['cac_limited_email_domains'] );
		$limited_email_domains = split( "\n", stripslashes( $limited_email_domains ) );

		$limited_email = array();
		foreach ( (array) $limited_email_domains as $domain ) {
				$domain = trim( $domain );
			//if ( ! preg_match( '/(--|\.\.)/', $domain ) &#038;&#038; preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) )
				$limited_email[] = trim( $domain );
		}
		update_site_option( 'limited_email_domains', $limited_email );
	} else {
		update_site_option( 'limited_email_domains', '' );
	}
}
add_action( 'update_wpmu_options', 'cac_save_limited_email_domains' );

function cac_limited_email_domains_markup() {
	?>

	&lt;h3>&lt;?php _e( 'Limited Email Domains That Actually Work' ); ?>&lt;/h3>

	&lt;table class="form-table">
	&lt;tr valign="top">
		&lt;th scope="row">&lt;label for="cac_limited_email_domains">&lt;?php _e( 'Limited Email Registrations' ) ?>&lt;/label>&lt;/th>
		&lt;td>
			&lt;?php $limited_email_domains = get_site_option( 'limited_email_domains' );
			$limited_email_domains = str_replace( ' ', "\n", $limited_email_domains ); ?>
			&lt;textarea name="cac_limited_email_domains" id="limited_email_domains" cols="45" rows="5">< ?php echo wp_htmledit_pre( $limited_email_domains == '' ? '' : implode( "\n", (array) $limited_email_domains ) ); ?>
			&lt;br />
			&lt;?php _e( 'If you want to limit site registrations to certain domains. One domain per line.' ) ?>
		&lt;/td>
	&lt;/tr>
	&lt;/table>

	&lt;?php
}
add_action( 'wpmu_options', 'cac_limited_email_domains_markup' );
</code></pre>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/2010/05/adding-an-email-to-members-checkbox-to-the-buddypress-group-activity-stream/' rel='bookmark' title='Adding an &#8220;email to members&#8221; checkbox to the BuddyPress group activity stream'>Adding an &#8220;email to members&#8221; checkbox to the BuddyPress group activity stream</a></li>
<li><a href='http://teleogistic.net/2010/01/blog-specific-email-plugin-for-wpmu-users/' rel='bookmark' title='Blog-specific email plugin for WPMU users'>Blog-specific email plugin for WPMU users</a></li>
<li><a href='http://teleogistic.net/2010/05/new-buddypress-plugin-buddypress-group-email-subscription/' rel='bookmark' title='New BuddyPress plugin: BuddyPress Group Email Subscription'>New BuddyPress plugin: BuddyPress Group Email Subscription</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/2010/12/wildcard-email-whitelists-in-wordpress-and-buddypress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>New BuddyPress plugin: BuddyPress Group Email Subscription</title>
		<link>http://teleogistic.net/2010/05/new-buddypress-plugin-buddypress-group-email-subscription/</link>
		<comments>http://teleogistic.net/2010/05/new-buddypress-plugin-buddypress-group-email-subscription/#comments</comments>
		<pubDate>Thu, 13 May 2010 03:37:19 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[dev.wpmued]]></category>
		<category><![CDATA[edtech]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[groups]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?p=784</guid>
		<description><![CDATA[I&#8217;m quite happy to announce the release of a more-or-less stable (we hope!) version of BuddyPress Group Email Subscription, a BuddyPress plugin that allows for fine-grained, user-controllable email subscription to group content in BuddyPress. This plugin is different from some of my others in that it was truly a group endeavor. The base of the [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_777" class="wp-caption alignright" style="width: 310px"><a href="http://teleogistic.net/wp-content/uploads/2010/05/screenshot-1.png"><img src="http://teleogistic.net/wp-content/uploads/2010/05/screenshot-1-300x232.png" alt="Email Options on settings page" title="Email Options on settings page" width="300" height="232" class="size-medium wp-image-777" style="border: 1px solid #aaa" /></a><p class="wp-caption-text">Email Options on settings page</p></div>
<p>I&#8217;m quite happy to announce the release of a more-or-less stable (we hope!) version of <a href="http://teleogistic.net/code/buddypress/buddypress-group-email-subscription/">BuddyPress Group Email Subscription</a>, a BuddyPress plugin that allows for fine-grained, user-controllable email subscription to group content in BuddyPress.</p>
<p>This plugin is different from some of my others in that it was truly a group endeavor. The base of the plugin was written by <a href="http://namoo.co.uk">David Cartwright</a>, with a little bit of code from me. A nearly complete rewrite of the front-end and most of the guts of the plugin was undertaken by <a href="http://www.bluemandala.com/index.html">Deryk Wenaus</a>. I wrote the daily and weekly digest functionality, along with some of the settings pages and various bugfixes throughout. The current codebase of the plugin is probably 60% Deryk, 30% me, and 10% David.</p>
<p>It was my first time working on a truly collaborative software development project like this, and it was a real pleasure working with both of these gentlemen. Thanks, guys.</p>
<p><a href="http://teleogistic.net/code/buddypress/buddypress-group-email-subscription/">Get BuddyPress Group Email Subscription here.</a></p>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/2009/09/new-buddypress-bbpress-plugin-group-forum-subscription/' rel='bookmark' title='New BuddyPress / bbPress plugin: Group Forum Subscription'>New BuddyPress / bbPress plugin: Group Forum Subscription</a></li>
<li><a href='http://teleogistic.net/2009/10/group-forum-subscription-for-buddypress-1-1/' rel='bookmark' title='Group Forum Subscription for BuddyPress 1.1'>Group Forum Subscription for BuddyPress 1.1</a></li>
<li><a href='http://teleogistic.net/2010/05/adding-an-email-to-members-checkbox-to-the-buddypress-group-activity-stream/' rel='bookmark' title='Adding an &#8220;email to members&#8221; checkbox to the BuddyPress group activity stream'>Adding an &#8220;email to members&#8221; checkbox to the BuddyPress group activity stream</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/2010/05/new-buddypress-plugin-buddypress-group-email-subscription/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BuddyPress Group Email Subscription</title>
		<link>http://teleogistic.net/code/buddypress/buddypress-group-email-subscription/</link>
		<comments>http://teleogistic.net/code/buddypress/buddypress-group-email-subscription/#comments</comments>
		<pubDate>Thu, 13 May 2010 03:28:33 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[edtech]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[groups]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[WPMu]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?page_id=773</guid>
		<description><![CDATA[Authors: Deryk Wenaus, Boone Gorges, David Cartwright BuddyPress Group Email Subscription allows group members to receive email notifications for all types of group activity, especially forum posts. Each user can choose how they want to subscribe to the group. EMAIL SUBSCRIPTION LEVELS: There are 5 levels of email subscription options: No Email &#8211; Read this [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_777" class="wp-caption alignright" style="width: 310px"><a href="http://teleogistic.net/wp-content/uploads/2010/05/screenshot-1.png"><img src="http://teleogistic.net/wp-content/uploads/2010/05/screenshot-1-300x232.png" alt="Email Options on settings page" title="Email Options on settings page" width="300" height="232" class="size-medium wp-image-777" style="border: 1px solid #aaa" /></a><p class="wp-caption-text">Email Options on settings page</p></div>
<p><strong>Authors: <a href="http://www.bluemandala.com/index.html">Deryk Wenaus</a>, <a href="http://teleogistic.net">Boone Gorges</a>, <a href="http://namoo.co.uk">David Cartwright</a></strong></p>
<p><a href="http://wordpress.org/extend/plugins/buddypress-group-email-subscription/">BuddyPress Group Email Subscription</a> allows group members to receive email notifications for all types of group activity, especially forum posts. Each user can choose how they want to subscribe to the group.</p>
<p><strong>EMAIL SUBSCRIPTION LEVELS</strong>: There are 5 levels of email subscription options:</p>
<ol>
<li>No Email &#8211; Read this group on the web</li>
<li>Weekly Summary Email &#8211; A summary of new topics each week</li>
<li>Daily Digest Email &#8211; All the day&#8217;s activity bundled into a single email</li>
<li>New Topics Email &#8211; Send new topics as they arrive (but don&#8217;t send replies)</li>
<li>All Email &#8211; Send all group activity as it arrives</li>
</ol>
<p><strong>DEFAULT SUBSCRIPTION STATUS</strong>: Group admins can choose one of the 5 subscription levels as a default that gets applied when new members join.</p>
<p><strong>DIGEST AND SUMMARY EMAILS</strong>: The daily digest email is sent every morning and contains all the emails from all the groups a user is subscribed to. The digest begins with a helpful topic summary. The weekly summary email contains just the topic titles from the past week. Summary and digest timing can be configured in the back end.</p>
<p><strong>EMAILS FOR TOPICS I&#8217;VE STARTED OR COMMENTED ON</strong>: Users receive email notifications when someone replies to a topic they create or comment on (similar to Facebook). This happens whether they are subscribed or not. Users can control this behaviour in their notifications page.</p>
<div id="attachment_780" class="wp-caption alignright" style="width: 310px"><a href="http://teleogistic.net/wp-content/uploads/2010/05/screenshot-2.png"><img src="http://teleogistic.net/wp-content/uploads/2010/05/screenshot-2-300x211.png" alt="Email options on group pages" title="Email options on group pages" width="300" height="211" class="size-medium wp-image-780" style="border: 1px solid #aaa" /></a><p class="wp-caption-text">Email options on group pages</p></div>
<p><strong>TOPIC FOLLOW AND MUTE</strong>: Users who are not fully subscribed to a group (ie. maybe they are on digest) can choose to get immediate email updates for specific topic threads. Any subsequent replies to that thread will be emailed to them. In an opposite way, users who are fully subscribed to a group but want to stop getting emails from a specific (perhaps annoying) thread can choose to mute that topic.</p>
<p><strong>ADMIN NOTIFICATION</strong>: Group admins can send out an email to all group members from the group&#8217;s admin section. The email will be sent to all group members regardless of subscription status. This feature is helpful to quickly communicate to the whole group, but it should be used with caution.</p>
<p><strong>SPAM PROTECTION</strong>: To protect against spam, you can set a minimum number of days users need to be registered before their group activity will be emailed to other users. This feature is off by default, but can be enabled in the admin.</p>
<p>The plugin is fully internationalized.</p>
<p><strong>NOTE TO PLUGIN AUTHORS</strong>: If your plugin posts updates to the standard BuddyPress activity stream, then group members who are subscribed via 3. Daily Digest and 5. All Email will get your updates automatically. However people subscribed as 2. Weekly Summary and 4. New Topic will not. If you feel some of your plugin&#8217;s updates are very important and want to make sure all subscribed members them, then you can filter &#8216;ass_this_activity_is_important&#8217; and return TRUE when $type matches your activity. See the ass_this_activity_is_important() function in bp-activity-subscription-functions.php for code you can copy and use. An example: adding a new wiki page would be considered important and should be filtered in, whereas a comment on a wiki page would be less important and should not be hooked in.</p>
<p>BuddyPress Group Email Subscription has been downloaded <strong>62,717</strong> times. Are you using this plugin? Consider a <strong><a href="/donate">donation</a></strong>.</p>
<h2>Version history</h2>
<dl>
<dt><strong>2.3 &#8211; May 12, 2010</strong></dt>
<dd>
Initial release</dd>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/code/buddypress/group-forum-subscription-for-buddypress/' rel='bookmark' title='Group Forum Subscription for BuddyPress'>Group Forum Subscription for BuddyPress</a></li>
<li><a href='http://teleogistic.net/code/buddypress/bp-group-management/' rel='bookmark' title='BP Group Management'>BP Group Management</a></li>
<li><a href='http://teleogistic.net/code/buddypress/bp-group-reviews/' rel='bookmark' title='BP Group Reviews'>BP Group Reviews</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/code/buddypress/buddypress-group-email-subscription/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Adding an &#8220;email to members&#8221; checkbox to the BuddyPress group activity stream</title>
		<link>http://teleogistic.net/2010/05/adding-an-email-to-members-checkbox-to-the-buddypress-group-activity-stream/</link>
		<comments>http://teleogistic.net/2010/05/adding-an-email-to-members-checkbox-to-the-buddypress-group-activity-stream/#comments</comments>
		<pubDate>Thu, 06 May 2010 11:57:23 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[dev.wpmued]]></category>
		<category><![CDATA[edtech]]></category>
		<category><![CDATA[activity]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?p=738</guid>
		<description><![CDATA[During the recent upgrade from BuddyPress 1.1.x to BuddyPress 1.2.x, and the subsequent move away from group wires to interactive group activity streams, one thing that some users on the CUNY Academic Commons missed was the &#8220;Notify members by email&#8221; checkbox of the old wire. This morning I wrote a bit of code to add [...]]]></description>
			<content:encoded><![CDATA[<p>During the recent upgrade from BuddyPress 1.1.x to BuddyPress 1.2.x, and the subsequent move away from group wires to interactive group activity streams, one thing that some users on the CUNY Academic Commons missed was the &#8220;Notify members by email&#8221; checkbox of the old wire.</p>
<p>This morning I wrote a bit of code to add that kind of functionality to group activity streams. There are three functions, each of which goes in your plugins/bp-custom.php file.</p>
<p>First, adding the checkbox to the activity box. Notice that it only shows up when you&#8217;re on a group page.</p>
<pre class="brush: php">

function cac_email_activity_checkbox() {
	if ( !bp_is_groups_component() )
		return;
	?&gt;

	&lt;label for=&quot;cac_activity_mail&quot;&gt;
		Email this update to all group members?
		&lt;input type=&quot;checkbox&quot; name=&quot;cac_activity_mail&quot; id=&quot;cac_activity_mail&quot; value=&quot;mailme&quot; /&gt;
	&lt;/label&gt;
	&lt;?php
}
add_action( &#039;bp_activity_post_form_options&#039;, &#039;cac_email_activity_checkbox&#039; );
</pre>
<p>Second, handling the data when it gets to the server and sending the emails. Obviously, you&#8217;ll want to change the text of the email to match your own site and your own preferences. The line &#8220;remove_action( &#8216;bp_activity_after_save&#8217; , &#8216;ass_group_notification_activity&#8217; , 50 );&#8221; is there to prevent an email notification from being sent if you&#8217;re using the Group Activity Notification plugin, a big official release of which is coming soon :)</p>
<pre class="brush: php">

function cac_email_activity_handler( $activity ) {
	global $bp;

	if ( $_POST[&#039;mailme&#039;] == &#039;mailme&#039; ) {

		$subject = sprintf(&#039;[CUNY Academic Commons] New update in the group &quot;%s&quot;&#039;,  $bp-&gt;groups-&gt;current_group-&gt;name );

		$message = strip_tags($activity-&gt;action);
		$message .= &#039;

&#039;;
		$message .= strip_tags($activity-&gt;content);

		$message .= &#039;

-------
&#039;;

		$message .= sprintf(&#039;You recieved this message because you are a member of the group &quot;%s&quot; on the CUNY Academic Commons. Visit the group: %s&#039;, $bp-&gt;groups-&gt;current_group-&gt;name, $bp-&gt;root_domain . &#039;/&#039; . $bp-&gt;groups-&gt;current_group-&gt;slug . &#039;/&#039; . $bp-&gt;groups-&gt;current_group-&gt;slug . &#039;/&#039; );

		//print_r($message);

		if ( bp_group_has_members( &#039;exclude_admins_mods=0&amp;amp;per_page=10000&#039; ) ) {
			global $members_template;
			foreach( $members_template-&gt;members as $m ) {
				wp_mail( $m-&gt;user_email, $subject, $message );
			}
		}
	}

	remove_action( &#039;bp_activity_after_save&#039; , &#039;ass_group_notification_activity&#039; , 50 );
}
add_action( &#039;bp_activity_after_save&#039;, &#039;cac_email_activity_handler&#039;, 1 );
</pre>
<p>Finally, you&#8217;ll need some Javascript to make the AJAX activity submission work correctly. This is really just a copy of what&#8217;s in the bp-default JS file, with a few added lines to make it work.</p>
<pre class="brush: php">
function cac_email_activity_js() {
	if ( !bp_is_groups_component() )
		return;
	?&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;

	var jq = jQuery;
	jq(document).ready( function() {
jq(&quot;input#aw-whats-new-submit&quot;).unbind(&#039;click&#039;);
			/* New posts */
	jq(&quot;input#aw-whats-new-submit&quot;).click( function() {
		var button = jq(this);
		var form = button.parent().parent().parent().parent();

		form.children().each( function() {
			if ( jq.nodeName(this, &quot;textarea&quot;) || jq.nodeName(this, &quot;input&quot;) )
				jq(this).attr( &#039;disabled&#039;, &#039;disabled&#039; );
		});

		jq( &#039;form#&#039; + form.attr(&#039;id&#039;) + &#039; span.ajax-loader&#039; ).show();

		/* Remove any errors */
		jq(&#039;div.error&#039;).remove();
		button.attr(&#039;disabled&#039;,&#039;disabled&#039;);

		/* Default POST values */
		var object = &#039;&#039;;
		var item_id = jq(&quot;#whats-new-post-in&quot;).val();
		var content = jq(&quot;textarea#whats-new&quot;).val();
		var mailme = jq(&quot;#cac_activity_mail:checked&quot;).val();

		/* Set object for non-profile posts */
		if ( item_id &gt; 0 ) {
			object = jq(&quot;#whats-new-post-object&quot;).val();
		}

		jq.post( ajaxurl, {
			action: &#039;post_update&#039;,
			&#039;cookie&#039;: encodeURIComponent(document.cookie),
			&#039;_wpnonce_post_update&#039;: jq(&quot;input#_wpnonce_post_update&quot;).val(),
			&#039;content&#039;: content,
			&#039;object&#039;: object,
			&#039;mailme&#039;: mailme,
			&#039;item_id&#039;: item_id
		},
		function(response)
		{
			jq( &#039;form#&#039; + form.attr(&#039;id&#039;) + &#039; span.ajax-loader&#039; ).hide();

			form.children().each( function() {
				if ( jq.nodeName(this, &quot;textarea&quot;) || jq.nodeName(this, &quot;input&quot;) )
					jq(this).attr( &#039;disabled&#039;, &#039;&#039; );
			});

			/* Check for errors and append if found. */
			if ( response[0] + response[1] == &#039;-1&#039; ) {
				form.prepend( response.substr( 2, response.length ) );
				jq( &#039;form#&#039; + form.attr(&#039;id&#039;) + &#039; div.error&#039;).hide().fadeIn( 200 );
				button.attr(&quot;disabled&quot;, &#039;&#039;);
			} else {
				if ( 0 == jq(&quot;ul.activity-list&quot;).length ) {
					jq(&quot;div.error&quot;).slideUp(100).remove();
					jq(&quot;div#message&quot;).slideUp(100).remove();
					jq(&quot;div.activity&quot;).append( &#039;&lt;ul id=&quot;activity-stream&quot; class=&quot;activity-list item-list&quot;&gt;&#039; );
				}

				jq(&quot;ul.activity-list&quot;).prepend(response);
				jq(&quot;ul.activity-list li:first&quot;).addClass(&#039;new-update&#039;);
				jq(&quot;li.new-update&quot;).hide().slideDown( 300 );
				jq(&quot;li.new-update&quot;).removeClass( &#039;new-update&#039; );
				jq(&quot;textarea#whats-new&quot;).val(&#039;&#039;);
				jq(&quot;#cac_activity_mail&quot;).removeAttr(&#039;checked&#039;);

				/* Re-enable the submit button after 8 seconds. */
				setTimeout( function() { button.attr(&quot;disabled&quot;, &#039;&#039;); }, 8000 );
			}
		});

		return false;
	});
	});

	&lt;/script&gt;
	&lt;?php
}
add_action( &#039;bp_activity_post_form_options&#039;, &#039;cac_email_activity_js&#039;, 999 );
</pre>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/2010/05/new-buddypress-plugin-buddypress-group-email-subscription/' rel='bookmark' title='New BuddyPress plugin: BuddyPress Group Email Subscription'>New BuddyPress plugin: BuddyPress Group Email Subscription</a></li>
<li><a href='http://teleogistic.net/2012/04/add-an-other-checkbox-with-textbox-to-a-buddypress-profile-field/' rel='bookmark' title='Add an &#8220;Other&#8221; checkbox (with textbox) to a BuddyPress profile field'>Add an &#8220;Other&#8221; checkbox (with textbox) to a BuddyPress profile field</a></li>
<li><a href='http://teleogistic.net/2010/05/new-buddypress-plugin-bp-external-activity/' rel='bookmark' title='New BuddyPress plugin: BP External Activity'>New BuddyPress plugin: BP External Activity</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/2010/05/adding-an-email-to-members-checkbox-to-the-buddypress-group-activity-stream/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Big new version of Invite Anyone for BuddyPress</title>
		<link>http://teleogistic.net/2010/04/big-new-version-of-invite-anyone-for-buddypress/</link>
		<comments>http://teleogistic.net/2010/04/big-new-version-of-invite-anyone-for-buddypress/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 05:27:02 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[edtech]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[invitations]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[WPMu]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?p=677</guid>
		<description><![CDATA[My BuddyPress function Invite Anyone has always been misleadingly named. It expanded on BuddyPress&#8217;s default setup, which only allows members to send group invitations to people who they&#8217;re friends with, by allowing individuals to send invitations to anyone in the entire installation. This only qualifies as inviting anyone on a, er, very austere ontology of [...]]]></description>
			<content:encoded><![CDATA[<p>My BuddyPress function <a href="http://teleogistic.net/code/buddypress/invite-anyone">Invite Anyone</a> has always been misleadingly named. It expanded on BuddyPress&#8217;s default setup, which only allows members to send group invitations to people who they&#8217;re friends with, by allowing individuals to send invitations to anyone in the entire installation. This only qualifies as inviting <strong>anyone</strong> on a, er, very austere ontology of personhood. The new version of Invite Anyone, version 0.4, adds a new tab to BuddyPress profile tabs that allows invitation both to groups and to the site in general via email. It&#8217;s a big update, both in terms of features and in terms of sheer code (pretty sure the number of lines of code is close to triple what it was before).</p>
<p>And now you know what I did on my spring break.</p>
<p>If you know what&#8217;s good for you, you will <a href="http://teleogistic.net/code/buddypress/invite-anyone/">Check It Out</a>.</p>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/2010/03/new-version-of-forum-attachments-for-buddypress/' rel='bookmark' title='New version of Forum Attachments for BuddyPress'>New version of Forum Attachments for BuddyPress</a></li>
<li><a href='http://teleogistic.net/2011/05/invite-anyone-0-9-admin-management-and-stats/' rel='bookmark' title='Invite Anyone 0.9: Admin management and stats'>Invite Anyone 0.9: Admin management and stats</a></li>
<li><a href='http://teleogistic.net/2009/12/new-buddypress-plugin-invite-anyone/' rel='bookmark' title='New BuddyPress plugin: Invite Anyone'>New BuddyPress plugin: Invite Anyone</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/2010/04/big-new-version-of-invite-anyone-for-buddypress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Group Forum Subscription for BuddyPress</title>
		<link>http://teleogistic.net/code/buddypress/group-forum-subscription-for-buddypress/</link>
		<comments>http://teleogistic.net/code/buddypress/group-forum-subscription-for-buddypress/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 03:45:46 +0000</pubDate>
		<dc:creator>Boone Gorges</dc:creator>
				<category><![CDATA[edtech]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[groups]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[subscription]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[WPMu]]></category>

		<guid isPermaLink="false">http://teleogistic.net/?page_id=660</guid>
		<description><![CDATA[This plugin allows users to subscribe to email notifications of forum activity in their BuddyPress groups. Use of this plugin for versions of BuddyPress 1.2 and higher is not recommended. New plugins, such as Group Activity Notifications, are more general (encompassing all group activity instead of just forums) and are built with BP 1.2 in [...]]]></description>
			<content:encoded><![CDATA[<p>This plugin allows users to subscribe to email notifications of forum activity in their BuddyPress groups.</p>
<p><strong>Use of this plugin for versions of BuddyPress 1.2 and higher is not recommended.</strong> New plugins, such as <a href="http://wordpress.org/extend/plugins/buddypress-group-activity-stream-subscription/">Group Activity Notifications</a>, are more general (encompassing all group activity instead of just forums) and are built with BP 1.2 in mind. I encourage you to use that plugin instead, as this plugin will not be officially supported for new versions of BuddyPress.</p>
<p><a href="http://wordpress.org/extend/plugins/group-forum-subscription-for-buddypress/">Download the plugin here</a>.</p>
<p>Group Forum Subscription for BuddyPress has been downloaded <strong>6,940</strong> times. Are you using this plugin? Consider a <strong><a href="/donate">donation</a></strong>.</p>
<p>Other posts about this plugin can be found <a href="http://teleogistic.net/2009/10/group-forum-subscription-for-buddypress-1-1/">here</a>, <a href="http://teleogistic.net/2009/09/new-buddypress-bbpress-plugin-group-forum-subscription/">here</a>, <a href="http://dev.commons.gc.cuny.edu/2009/12/07/group-forum-subscription-v1-4/">here</a>, <a href="http://dev.commons.gc.cuny.edu/2009/10/14/group-forum-subscription-v1-3/">here</a>, <a href="http://dev.commons.gc.cuny.edu/2009/10/10/group-forum-subscription-v1-1/">here</a>, and <a href="http://dev.commons.gc.cuny.edu/2009/10/01/new-buddypress-bbpress-plugin-group-forum-subscription/">here</a>.</p>
<h2>Version history</h2>
<dl>
<dt><strong>0.1</strong></dt>
<dd>Initial release</dd>
<dt><strong>0.2</strong></dt>
<dd>Bug fixes</dd>
<dt><strong>1.0</strong></dt>
<dd>Compatibility with BP 1.1</dd>
<dd>Bug fixes</dd>
<dt><strong>1.1</strong></dt>
<dd>Quite a few bug fixes, especially with BP 1.1 compatibility</dd>
<dt><strong>1.2</strong></dt>
<dd>Post reply bugfix for IE</dd>
<dd>Updated readme information for installation with older versions of BP</dd>
<dd>Resolved issues some users were having with PHP errors</dd>
<dd>Moved stable tag away from trunk. Use trunk at your own risk!</dd>
<dt><strong>1.3</strong></dt>
<dd>Localization complete. Shipped with four translations: French, German, Russian, Spanish</dd>
<dd>Dashboard menu moved under BuddyPress section</dd>
<dd>Forum Subscription notification block added to BP&#8217;s forum index.php pages</dd>
<dd>Forum subscription notification block removed for non-logged-in users</dd>
<dd>Fixed bug that subscribed non-confirmed users to forums created in standalone bbPress</dd>
<dd>Admins can choose whether posters receive notifications of their own posts (off by default; not togglable in standalone bbPress)</dd>
<dt><strong>1.4</strong></dt>
<dd>Fixed bug that prevented members of large groups from being subscribed to new topics</dd>
<dd>Fixed bug that kept email headers/footers from being translated</dd>
<dd>Fixed bug that kept subscribing banned members in bbPress standalone</dd>
<dd>Fixed bug that didn&#8217;t check to see if members wanted automatic subscription for a given group in bbPress standalone</dd>
<dd>Added topic title to bbPress standalone email</dd>
<dd>Fixed bug that kept admin_menu from hooking correctly for some users installing BP in non-standard location</dd>
<dt><strong>1.4.1 &#8211; March 27, 2010</strong></dt>
<dd>Loader file added to prevent crashes when BP is upgraded</dd>
<dd>Duplicate notifications menu functions removed to ensure interoperability with BP 1.2 bp-default</dd>
</dl>
<p>Related posts:<ol>
<li><a href='http://teleogistic.net/code/buddypress/buddypress-group-email-subscription/' rel='bookmark' title='BuddyPress Group Email Subscription'>BuddyPress Group Email Subscription</a></li>
<li><a href='http://teleogistic.net/code/buddypress/forum-attachments-for-buddypress/' rel='bookmark' title='Forum Attachments for BuddyPress'>Forum Attachments for BuddyPress</a></li>
<li><a href='http://teleogistic.net/code/buddypress/bp-group-reviews/' rel='bookmark' title='BP Group Reviews'>BP Group Reviews</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://teleogistic.net/code/buddypress/group-forum-subscription-for-buddypress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

