Dave Burke : Freelance .NET Web Developer specializing in Online Communities

Patterns and Origins: Sueetie Member Following

Sueetie Member Following is complete for BlogEngine.NET post authors and commenters.  While implementation of member following for, say, YetAnotherForum.NET will be somewhat different than member following for BlogEngine.NET, I like to write up the documentation while the code is still fresh, so here is the newest Sueetie Wiki document, “The Design of Sueetie Member Following.”  I’ll update the wiki after I implement following on YAF.NET, ScrewTurn Wiki and Gallery Server Pro.

I hope to have the source code on CodePlex in a couple of weeks.  I want to finish Following and Favorites on BlogEngine.NET and YetAnotherForum.NET, then upgrade BE.NET to 1.5.

The document starts in the database backend, then moves back up to the page covering the Sueetie WCF Service, the JQuery script, and finally the code that creates the HTML on the BlogEngine.NET page.  For more information about Sueetie Friends and Favorites, see my earlier announcement.


_____________________


Sueetie supports Following Members by adding buttons and links to members associated with application content like blog post authors, commenters, forum threads originators, reply authors, media object contributors, and more. This document will grow as the support for Member Following evolves. See Sueetie Favorites for information on the related functions of tagging content as Favorites.


An Overview of Sueetie Member Following


Below is an example of a Sueetie button to follow the author of a BlogEngine.NET post. The button is generated with JQuery and uses Ajax to call a WCF Service performing the data processing. The Follow logic is akin to the Twitter model of following rather than Facebook friends, as no official request for friendship is performed. Friend status is attained when reciprocal following occurs.


Example of a Sueetie Following Button


Sueetie Member Following: Patterns


Each application requires a slightly different approach to supporting Sueetie Member Following. We will cover implementation of following at the application level after looking at the shared logic and data structure of Member Following.

Data Logic


Two Sueetie SQL tables are used to hold Following data, Sueetie_Followers and Sueetie_UserFriendsFavorites. The pertinent fields in UserFriendsFavorites are highlighted.

Member Following Tables


One important point to make here is that the data logic supporting Following and Favorites was designed with site analytic capabilities in mind. We'll get more into that with Sueetie Favorites, but one eye-to-analytics item shown here is the ContentIDFollowed field in Sueetie_Followers. This ID is keyed to the content item viewed when the act of following occurs, possibly yielding valuable insights into what prompted the act of following an individual by other community members.

When populated, the tables appear as below.

Following Table Data


WCF Service Logic


Each of the applications' client-side JQuery scripts call /app_code/SueetieService.cs to populate the tables and calculate the updated totals in followers, following and friends. (The calculations are performed in SQL Stored Procedures, Sueetie_Follower_Add and Sueetie_Follower_Remove.)

The logic of the WCF method is to retrieve an enhanced blog post object containing Sueetie User and Content data to populate the SueetieFollow data object. SueetieFollow is then passed to the data provider in SueetieUsers.FollowUser(sueetieFollow);

You'll notice that the user must be authenticated to follow a member (as Following buttons and links are displayed universally regardless of user status), and a user cannot following himself.

[OperationContract]
public string BlogAuthorFollow(int userID, string postGuid) { SueetieBlogPost sueetieBlogPost = SueetieBlogs.GetSueetieBlogPost(postGuid); if (userID > 0) { if (sueetieBlogPost.SueetiePostID > 0) { string result = "You are now following " + sueetieBlogPost.DisplayName; SueetieFollow sueetieFollow = new SueetieFollow { FollowerUserID = userID, FollowingUserID = sueetieBlogPost.SueetieUserID, ContentIDFollowed = sueetieBlogPost.SueetiePostID }; if (sueetieFollow.FollowerUserID == sueetieFollow.FollowingUserID) result = "Sorry, you cannot follow yourself..."; else SueetieUsers.FollowUser(sueetieFollow); return result; } } else return "Please login or become a member to follow this person."; }

The JQuery Script


Because each application yields author and content identification data differently, the JQuery is typically unique to that content, like BlogEngine.NET blog posts and comments. The script below in /scripts/sueetie.js is used to call the WCF BlogAuthorFollow() method shown above. The ASPNET AJAX ScriptManager control is used to perform the communications.


function followPostAuthor(postGuid, blnMember, followDiv) {
    SueetieService.BlogAuthorFollow(postGuid, blnMember, 
        onFollowFaveSuccess, null, followDiv);
}

function onFollowFaveSuccess(result, followDiv) {
  $(followDiv).slideUp("fast", function() {
    $(this)
        .text(result)
        .slideDown("fast");
  });
  $(followDiv).click(function() {
  $(this).hide("fast");
    return false;
  });
}


The HTML


We're at the page level now where we create the HTML to execute the JQuery to call the WCF Service. In BlogEngine.NET we're going to create a custom Sueetie.Blog Class Library to add our Sueetie Follow and Favorite services.

We'll isolate our code from BlogEngine.NET's source code base by creating a custom Sueetie.Blog class library project from which we will reference BlogEngine.Core.  Then we’ll add our custom comment and post base classes.


Sueetie.Blog Class Library Project


Here is the code used to enable the followPostAuthor() script.


C# HTML Code


Sueetie Member Following: Origins


Member Following was one of the first Sueetie "add-ons."  It was important to support a Following and Friends function because communities are all about the people in them, and strong communities are all about the depth of communication between its members. Spending a lot of time in Twitter (and very little in Facebook), the Following concept seemed more natural than a strict "Friends" approach.

As for the technical origins of Member Following, we looked at BlogEngine.NET comments source and YetAnotherForum.NET functions like "Watch this thread." Both of these functions were fast and client-side requiring no postback, which was the top priority for Following and Favorites. This was an excellent opportunity to start using JQuery in Sueetie, so this was the technology we chose. Plan to see a lot of JQuery, AJAX and WCF in future Sueetie features.

Comments (3) | Post RSS RSS comment feed

Posted on 4/14/2009 7:02:34 PM by Dave Burke
Categories: Sueetie | .NET | BlogEngine.NET | JQuery
Tags: No tags for this post

Related posts

Comments

4/16/2009 3:40:18 AM Permalink

Hey - just checking out the blogengine.net platform on yoru site as I am looking to change over from wordpress. How are you finding it's backend and themes?

Franchise Options United Kingdom |

4/16/2009 5:12:53 AM Permalink

Matthew, More info in BlogEngine.NET themes is located here:

http://www.dotnetblogengine.net/page/themes.aspx

daveburke United States |

5/13/2009 4:50:47 PM Permalink

Sueetie YetAnotherForum.NET Update Roundup

Sueetie YetAnotherForum.NET Update Roundup

Dave Burke |

Comments are closed

This site was built with the Sueetie .NET Open Source Community Framework. Learn more about Sueetie at Sueetie.com.