<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>All  Readmes  from PeoplePods.net</title>
      <link>http://peoplepods.net</link>
      <description>All  Readmes  from PeoplePods.net</description>
      <language>en-us</language>
      <copyright>Copyright 2012 PeoplePods.net</copyright>
      <generator>RSS 2.0 generation class</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs>
      <item>
         <title>$OBJ::addIgnoreFields()</title>
         <link>http://peoplepods.net/readme/obj-addignorefields</link>
         <description>&lt;p&gt;addIgnoreFields is a class method that teaches PeoplePods how to handle fields that you &lt;i&gt;do not want stored&lt;/i&gt; in the database - either as real fields, or as meta fields.&lt;/p&gt;
&lt;p&gt;This is very useful when one of your custom methods will regularly add temporary fields to the object, for use in templates or otherwise.&lt;/p&gt;
&lt;p&gt;This method should be called from within a methods.php file in a plugin pod.  The method is called on the class itself, much like the &lt;a href=&quot;http://peoplepods.net/readme/registermethod&quot;&gt;registerMethod() function&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This function takes an array of fieldnames.&lt;/p&gt;
&lt;pre&gt;Content::addIgnoreFields(array(&apos;temp&apos;,&apos;counter&apos;,&apos;fake&apos;));
&lt;/pre&gt;
&lt;p&gt;See also &lt;a href=&quot;/readme/obj-adddatabasefields&quot;&gt;$Obj::addDatabaseFields()&lt;/a&gt;.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/obj-addignorefields</guid>
         <pubDate>2011-04-18T12:29:52-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Obj::addDatabaseFields()</title>
         <link>http://peoplepods.net/readme/obj-adddatabasefields</link>
         <description>&lt;p&gt;addDatabaseFields is a class method that teaches PeoplePods how to handle database fields that you&apos;ve added to the schema (most likely via an &lt;a href=&quot;http://peoplepods.net/readme/creating-new-pods#install&quot;&gt;install function&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;This method should be called from within a methods.php file in a plugin pod.  The method is called on the class itself, much like the &lt;a href=&quot;http://peoplepods.net/readme/registermethod&quot;&gt;registerMethod() function&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This function takes an array of fieldnames.  If a field requires extra attention when going in and out of the database, you may also specify select and insert helpers.&lt;/p&gt;
&lt;pre&gt;// simply define 2 new fields called &quot;foo&quot; and &quot;bar&quot; in the content object
Content::addDatabaseFields(array(&apos;foo&apos;,&apos;bar&apos;));

// define an additional field on the person object
Person::addDatabaseFields(array(&apos;phone_number&apos;));

// add a field that requires processing on select and insert
Content::addDatabaseFields(array(
	&apos;zipcode&apos;=&amp;gt;array(
		&apos;select&apos;=&amp;gt;&apos;zipcodeSelectHelper&apos;,
		&apos;insert&apos;=&amp;gt;&apos;zipcodeInsertHelper&apos;
	)
));
&lt;/pre&gt;
&lt;p&gt;See also &lt;a href=&quot;/readme/obj-addignorefields&quot;&gt;$Obj::addIgnoreFields()&lt;/a&gt;.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/obj-adddatabasefields</guid>
         <pubDate>2011-04-18T12:26:44-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Creating Permalink Patterns</title>
         <link>http://peoplepods.net/readme/permalink-patterns</link>
         <description>&lt;p&gt;There are two methods available for specifying a custom permalink format for your content.  Both methods involve passing options to the &lt;a href=&quot;/readme/pod-registerpod&quot;&gt;$POD-&gt;registerPOD()&lt;/a&gt; method.&lt;/p&gt;

&lt;p&gt;The first allows for a simple root path to be defined, to which the content&apos;s stub is appended.&lt;/p&gt;

&lt;p&gt;Using this method, you can create permalinks like:&lt;/p&gt;

&lt;pre&gt;
mysite.com/posts/my-post
mysite.com/pictures/my-picture
&lt;/pre&gt;

&lt;p&gt;The second allows you to define a token replacement pattern which allows you to reference fields from the content, the content&apos;s author, and the content&apos;s parent to build complex urls.&lt;/p&gt;

&lt;p&gt;Using this method, you can create permalinks like:&lt;/p&gt;

&lt;pre&gt;
mysite.com/categories/cars/my-hotrod
mysite.com/people/chester/posts/my-post
&lt;/pre&gt;

&lt;h2&gt;Simple Permalinks&lt;/h2&gt;

&lt;p&gt;To create simple permalinks, where all content will have the same root url, you have to define the document path - the root url at which content will be viewed, and the document edit path - the root url at which content will be created and edited.  PeoplePods will use these values, in combination with the content&apos;s stub, to generate the permalink and editlink values.  These variables are called &quot;&lt;i&gt;TYPE&lt;/i&gt;_document_path&quot; and &quot;&lt;i&gt;TYPE&lt;/i&gt;_document_editpath.&quot;


&lt;p&gt;Given a content type called &quot;posts,&quot; you would create 2 variables called &quot;post_document_path&quot; and &quot;post_document_editpath.&quot;  The values of these variables should match the URLS you set up for the pod&apos;s view and edit handlers.

&lt;pre&gt;
$POD-&gt;registerPOD(
  &apos;my_post_type&apos;,
  &apos;a custom pod that sets up the &quot;post&quot; content type&apos;,
  // set up url rewrite rules
  array(
    &apos;^posts/(.*)&apos;=&gt;&apos;my_custom_pod/post_handler.php?stub=$1&apos;,
    &apos;^edit/(.*)&apos;=&gt;&apos;my_custom_pod/edit_handler.php?id=$1&apos;,
  ),
  // set up simple permalinks
  array(
    &apos;post_document_path&apos;=&gt;&apos;posts&apos;,
    &apos;post_document_editpath&apos;=&gt;&apos;edit&apos;,
  ),
);

// in any peoplepods script:
// create new content
$doc = $POD-&gt;getContent();

$doc-&gt;type = &apos;post&apos;;
$doc-&gt;headline = &apos;Test Post&apos;;
$doc-&gt;save();

echo $doc-&gt;permalink;
// $doc-&gt;permalink will be:
// http://mydomain.com/posts/test-post
// $doc-&gt;editlink will be:
// http://mydomain.com/edit/test-post
&lt;/pre&gt;

&lt;h2&gt;Permalink Patterns&lt;/h2&gt;

&lt;p&gt;Permalink patterns allow you to use values from the content item&apos;s parent object and author object in the permalink.&lt;/p&gt;

&lt;p&gt;The permalink pattern system uses tokens similar to the &lt;a href=&quot;/readme/activity&quot;&gt;activity stream system&lt;/a&gt;, translating a string with special codes into the final dynamic permalink.&lt;/p&gt;

&lt;p&gt;To create a permalink that references the parent object, such as a category, you&apos;d use a pattern like:&lt;/p&gt;

&lt;pre&gt;
$permalink = &quot;categories/{parent.stub}/posts/{this.stub}&quot;;
&lt;/pre&gt;

&lt;P&gt;To create a permalink that references the object&apos;s author, you&apos;d use a pattern like:&lt;/p&gt;

&lt;pre&gt;
$permalink = &quot;people/{author.stub}/posts/{this.stub}&quot;;
&lt;/pre&gt;

&lt;p&gt;In each example, the dynamic elements of the permalink are defined by a set of curly brackets {}, a reference to the object (parent or author) and the name of a field (stub).  You may use any field from the objects in these patterns:&lt;/p&gt;

&lt;pre&gt;
$permalink = &quot;people/{author.id}/{this.stub}&quot;;
$permalink = &quot;categories/{parent.stub}/view?id={this.id}&quot;;
$permalink = &quot;myscript.php?stub={this.stub}&amp;headline={this.headline}&quot;;
&lt;/pre&gt;


&lt;p&gt;In addition to the permalink, you may also specify an editlink - the url to edit the content, and an editpath - the url to create another piece of content of the same type as the current content object. These options use the same patterns as the permalink.&lt;/p&gt;

&lt;p&gt;Like the simple permalinks, these patterns are passed into the registerPOD call in your settings.php file using variable names that include the content type.  Given a content type called &quot;posts,&quot; you would create 3 variables called &quot;content_permalink_posts&quot; and &quot;content_editlink_posts&quot; and &quot;content_editpath_posts&quot;  The values of these variables should match the URLS you set up for the pod&apos;s view and edit handlers.&lt;/p&gt;


&lt;pre&gt;
$POD-&gt;registerPOD(
  &apos;my_post_type&apos;,
  &apos;a custom pod that sets up the &quot;post&quot; content type&apos;,
  // set up url rewrite rules
  array(
    &apos;^people/(.*)/posts/(.*)&apos;=&gt;&apos;my_custom_pod/post_handler.php?stub=$1&apos;,
    &apos;^edit/new&apos;=&gt;&apos;my_custom_pod/edit_handler.php&apos;,
    &apos;^edit/(.*)&apos;=&gt;&apos;my_custom_pod/edit_handler.php?id=$1&apos;,
  ),
  // set up simple permalinks
  array(
    &apos;content_permalink_posts&apos;=&gt;&apos;people/{author.stub}/posts/{this.stub}&apos;,
    &apos;content_editpath_posts&apos;=&gt;&apos;edit/new&apos;
    &apos;content_editlink_posts&apos;=&gt;&apos;edit/{this.id}&apos;,
  ),
);
&lt;/pre&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/permalink-patterns</guid>
         <pubDate>2011-04-15T02:18:20-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Download Themes</title>
         <link>http://peoplepods.net/readme/download-themes</link>
         <description>&lt;p&gt;&lt;strong&gt;Add flare to your site with one of these member-contributed themes!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;PeoplePods ships with a default theme, but developers can create new themes to redefine how PeoplePods looks and acts. &amp;nbsp;Check out the themes linked below.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/mediabugs-open&quot;&gt;MediaBugs&lt;/a&gt; - The MediaBugs package contains not only a custom theme, but a host of additional pods that turns PeoplePods into a bug tracker! &amp;nbsp;Created and maintained by&amp;nbsp;&lt;a href=&quot;http://mediabugs.org&quot;&gt;MediaBugs.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Themes by &lt;a href=&quot;http://ikon.my/profile/AhmadFaisal&quot;&gt;@mrahfa&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ikon.my/blogs/1/879/free-people-pods-theme-people-book&quot;&gt;PeopleBook&lt;/a&gt; - A theme inspired by Facebook.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ikon.my/blogs/1/857/free-people-pods-theme-koko-hitam&quot;&gt;KokoHitam&lt;/a&gt;&amp;nbsp;-&amp;nbsp;Inspired by Modularity Lite Wordpress Theme.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ikon.my/blogs/1/855/free-people-pods-theme-biru-muda&quot;&gt;BiruMuda&lt;/a&gt;&amp;nbsp;- It&apos;s light blue!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Have you built a theme? &amp;nbsp;Add a link to it in the comments below!&lt;/strong&gt;&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/download-themes</guid>
         <pubDate>2010-12-14T03:11:29-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Overriding Functions</title>
         <link>http://peoplepods.net/readme/overriding</link>
         <description>&lt;p&gt;Certain functions within the PeoplePods core libraries can be overridden using the&lt;a href=&quot;http://peoplepods.net/readme/registermethod&quot;&gt;plugin registerMethod method&lt;/a&gt;.   The functions that can be overridden are those that are frequently called from within other built in methods, such as methods dealing with the cache, templating system, email delivery, and generation of permalinks.

&lt;p&gt;To override a function, create a new function which matches the original functions parameter list, and then call  registerMethod.  The new function will then be called in place of the built in function.&lt;/p&gt;

&lt;pre&gt;
function personCustomPermalink($person,$field) {
    $person-&gt;permalink =  &apos;http://myothersite.com/profiles/&apos; . $person-&gt;stub;
}
Person::registerMethod(&apos;personCustomPermalink&apos;,&apos;generatePermalink&apos;);
&lt;/pre&gt;

&lt;p&gt;The full list of override-able functions is below.&lt;/p&gt;
&lt;p&gt;$person-&amp;gt;permalink&lt;/p&gt;
&lt;p&gt;$person-&amp;gt;render$person-&amp;gt;output&lt;/p&gt;
&lt;p&gt;$person-&amp;gt;sendEmail&lt;/p&gt;
&lt;p&gt;$person-&amp;gt;sendInvite&lt;/p&gt;
&lt;p&gt;$person-&amp;gt;sendMessage&lt;/p&gt;
&lt;p&gt;$person-&amp;gt;generatePermalink&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;$POD-&amp;gt;cachestatus&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;cacheflush&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;cachew&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;cacher&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;cachefact&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;factcache&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;cacheclea&lt;/p&gt;
&lt;p&gt;r$POD-&amp;gt;cachestore&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;checkcache&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;cachehasexpired&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;loadCache&lt;/p&gt;
&lt;p&gt;$POD-&amp;gt;writeCache&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;$activity-&amp;gt;formatActivity&lt;/p&gt;
&lt;p&gt;$activity-&amp;gt;render&lt;/p&gt;
&lt;p&gt;$activity-&amp;gt;output&lt;/p&gt;
&lt;p&gt;$activity-&amp;gt;publish&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;$comment-&amp;gt;generatePermalink&lt;/p&gt;
&lt;p&gt;$comment-&amp;gt;output&lt;/p&gt;
&lt;p&gt;$comment-&amp;gt;render&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;$content-&amp;gt;isEditable&lt;/p&gt;
&lt;p&gt;$content-&amp;gt;isViewable&lt;/p&gt;
&lt;p&gt;$content-&amp;gt;permalink&lt;/p&gt;
&lt;p&gt;$content-&amp;gt;generatePermalink&lt;/p&gt;
&lt;p&gt;$content-&amp;gt;render&lt;/p&gt;
&lt;p&gt;$content-&amp;gt;output&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;$file-&amp;gt;generatePermalink&lt;/p&gt;
&lt;p&gt;$file-&amp;gt;cleanup$file-&amp;gt;download&lt;/p&gt;
&lt;p&gt;$file-&amp;gt;src&lt;/p&gt;
&lt;p&gt;$file-&amp;gt;imageSize&lt;/p&gt;
&lt;p&gt;$file-&amp;gt;resizeImage&lt;/p&gt;
&lt;p&gt;$file-&amp;gt;createThumbs&lt;/p&gt;
&lt;p&gt;$file-&amp;gt;output&lt;/p&gt;
&lt;p&gt;$file-&amp;gt;render&lt;/p&gt;
&lt;p&gt;$file-&amp;gt;mime_content_type&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;$group-&amp;gt;permalink&lt;/p&gt;
&lt;p&gt;$group-&amp;gt;output&lt;/p&gt;
&lt;p&gt;$group-&amp;gt;render&lt;/p&gt;
&lt;p&gt;$group-&amp;gt;generatePermalink&lt;br /&gt;&lt;br /&gt;$message-&amp;gt;output$message-&amp;gt;render&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;$stack-&amp;gt;output&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;$tag-&amp;gt;output&lt;/p&gt;
&lt;p&gt;$tag-&amp;gt;render&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/overriding</guid>
         <pubDate>2010-11-24T09:36:09-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Private Messaging</title>
         <link>http://peoplepods.net/readme/private-messaging</link>
         <description>&lt;pre&gt;// send a message to $user from $POD-&amp;gt;currentUser()
$user-&amp;gt;sendMessage($message);

// return a Stack of &quot;thread&quot; objects sorted by most recent activity on the thread.
// this returns the inbox for the currentUser.
$inbox = $POD-&amp;gt;getInbox($count,$offset);

// get # of unread messages in all threads
$total_unread = $inbox-&amp;gt;unreadCount():

// get the most recent thread
$thread = $inbox-&amp;gt;getNext();

// get # of unread messages in a thread
$unread = $thread-&amp;gt;unreadCount();

// who am I talking to?
$user = $thread-&amp;gt;recipient();

// output a thread
$thread-&amp;gt;output();

// mark all messges in the thread as read
$thread-&amp;gt;markAsRead();

// reply to a thread
$thread-&amp;gt;reply($message);

// delete all messages from a thread
$thread-&amp;gt;clear();


// get messages out of a thread
// messages come out in cronological order!
$messages = $thread-&amp;gt;messages();

// get first message
$message = $messages-&amp;gt;getNext();

// message from returns a user object
$from = $message-&amp;gt;from();

// message to return s a user object
$to = $message-&amp;gt;to();

//output a message
$message-&amp;gt;output();
&lt;/pre&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/private-messaging</guid>
         <pubDate>2010-11-23T02:25:13-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Group-&gt;files()</title>
         <link>http://peoplepods.net/readme/group-files</link>
         <description>&lt;p&gt;Returns a stack of&amp;nbsp;&lt;a href=&quot;http://peoplepods.net/readme/file-object&quot;&gt;files&lt;/a&gt;&amp;nbsp;that have been uploaded and associated with $Group.&lt;/p&gt;
&lt;p&gt;Files of any type can be attached to Groups. Images are automatically resized to several sizes, as defined in the PeoplePods admin tool.&lt;/p&gt;
&lt;p&gt;You can pull this file out of the stack by using the&amp;nbsp;&lt;a href=&quot;http://peoplepods.net/readme/stack-contains&quot;&gt;-&amp;gt;contains()&lt;/a&gt;&amp;nbsp;function:&lt;/p&gt;
&lt;pre&gt;if ($img = $Group-&amp;gt;files()-&amp;gt;contains(&apos;file_name&apos;,&apos;img&apos;)) {
  $img-&amp;gt;write(&apos;thumbnail&apos;);
} else {
  echo &quot;No image&quot;;
}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
         <author>DamienB&lt;http://peoplepods.net/people/DamienB&gt;</author>
         <guid>http://peoplepods.net/readme/group-files</guid>
         <pubDate>2010-11-23T01:39:36-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Person-&gt;comments()</title>
         <link>http://peoplepods.net/readme/person-comments</link>
         <description>&lt;p&gt;Returns a stack of&amp;nbsp;&lt;a href=&quot;http://peoplepods.net/readme/comment-object&quot;&gt;comments&lt;/a&gt;&amp;nbsp;that have been uploaded and associated with that $Person.&lt;/p&gt;
&lt;p&gt;For example, the following code displays the first page of comments:&lt;/p&gt;
&lt;pre&gt;foreach($Person-&amp;gt;comments() as $comment) { 
  $comment-&amp;gt;output();
}
&lt;/pre&gt;
&lt;p&gt;To add a new comment to a piece of content, use the&amp;nbsp;&lt;a href=&quot;http://peoplepods.net/readme/content-addcomment&quot;&gt;$Person-&amp;gt;addComment()&lt;/a&gt;&amp;nbsp;function.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
         <author>DamienB&lt;http://peoplepods.net/people/DamienB&gt;</author>
         <guid>http://peoplepods.net/readme/person-comments</guid>
         <pubDate>2010-11-23T01:37:02-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Person-&gt;addComment()</title>
         <link>http://peoplepods.net/readme/person-addcomment</link>
         <description>&lt;p&gt;Add a new comment to this piece of content.&lt;/p&gt;
&lt;p&gt;The new comment will be owned by&amp;nbsp;&lt;a href=&quot;http://peoplepods.net/readme/pod-currentuser&quot;&gt;$POD-&amp;gt;currentUser()&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;$Person-&amp;gt;addComment(&apos;This content sucks!!&apos;);
&lt;/pre&gt;
&lt;p&gt;Of note, add comment causes&amp;nbsp;&lt;a href=&quot;http://peoplepods.net/readme/content-comments&quot;&gt;$Person-&amp;gt;comments()&lt;/a&gt;&amp;nbsp;to reload itself automatically, so the new comment will be present in the stack immediately.&lt;/p&gt;
&lt;p&gt;Comments can be assigned an arbitrary &quot;type&quot; field, though custom stack queries will have to be built to utilitize this field...&lt;/p&gt;
&lt;pre&gt;$Person-&amp;gt;addComment(&apos;This is great!&apos;,&apos;review&apos;);
$Person-&amp;gt;addComment(&apos;What is going on?&apos;,&apos;question&apos;);
&lt;/pre&gt;
&lt;p&gt;(To remove a comment, use&amp;nbsp;&lt;a href=&quot;http://peoplepods.net/readme/comment-delete&quot;&gt;$Comment-&amp;gt;delete()&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
         <author>DamienB&lt;http://peoplepods.net/people/DamienB&gt;</author>
         <guid>http://peoplepods.net/readme/person-addcomment</guid>
         <pubDate>2010-11-23T01:33:18-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Group-&gt;addFile()</title>
         <link>http://peoplepods.net/readme/group-addfile</link>
         <description>&lt;pre&gt;$Group-&amp;gt;addFile(&apos;img&apos;,$_FILES[&apos;img&apos;],&apos;optional caption goes here&apos;);
&lt;/pre&gt;
&lt;p&gt;Takes an uploaded file and attaches it to the group object. This function is designed to handle rows out of the $_FILES array which PHP automatically provides when a file has been uploaded via an HTTP POST.&lt;/p&gt;
&lt;pre&gt;// store all files that were uploaded
foreach ($_FILES as $file_name =&amp;gt; $file) { 
	$Group-&amp;gt;addFile($file_name,$file);
	if (!$Group-&amp;gt;success()) { 
	  echo $Group-&amp;gt;error();
	}
}
&lt;/pre&gt;
&lt;p&gt;Image files will be automatically resized upon upload.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
         <author>DamienB&lt;http://peoplepods.net/people/DamienB&gt;</author>
         <guid>http://peoplepods.net/readme/group-addfile</guid>
         <pubDate>2010-11-23T01:27:53-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Sending and Receiving Alerts</title>
         <link>http://peoplepods.net/readme/alerts</link>
         <description>&lt;p&gt;Alerts are automated messages sent to members by the system when certain events occur on the site,&amp;nbsp;&amp;nbsp;such as when a member adds another member as a friend, or when a comment is posted on a member&apos;s profile or content. &amp;nbsp;An alert is sent to and displayed for one specific member of the site, unlike an &lt;a href=&quot;http://peoplepods.net/readme/activity&quot;&gt;activity stream message&lt;/a&gt;, which may appear to all members of the site.&lt;/p&gt;
&lt;p&gt;Alerts share much in common with the activity stream and the private member-to-member messages. &amp;nbsp;They may have content or people attached to them, and they can be marked read or unread.&lt;/p&gt;
&lt;p&gt;Alerts may optionally be sent as email messages to the recipient.&lt;/p&gt;
&lt;h3&gt;Send an Alert&lt;/h3&gt;
&lt;pre&gt;// send an alert to a user
$user-&amp;gt;sendAlert(
	$message,
	$actingUser=null,
	$targetContent=null,
	$ok_to_send_email=true
);
&lt;/pre&gt;
&lt;p&gt;The sendAlert method in its simplest form can be called with one parameter - a message to be displayed to $user.&lt;/p&gt;
&lt;pre&gt;$user-&amp;gt;sendAlert(&apos;You are so cool.&apos;);
&lt;/pre&gt;
&lt;p&gt;In the event that the alert is being sent in response to another user&apos;s action, such as when a user leaves a comment on another user&apos;s profile, include the second parameter, which should be the Person record of the user who has performed the action about which the alert is being sent.&lt;/p&gt;
&lt;pre&gt;$friend-&amp;gt;addFriend($user);
$user-&amp;gt;sendAlert(&apos;{actor.nick} added you as a friend&apos;,$friend);
&lt;/pre&gt;
&lt;p&gt;In the event that the alert pertains to one specific piece of content (or comment or group), you may include that piece of content as an attachment:&lt;/p&gt;
&lt;pre&gt;$content-&amp;gt;addComment($comment);
$content-&amp;gt;author()-&amp;gt;sendAlert(
	&apos;{actor.nick} left a comment on {targetContent.headline}&apos;,
	$POD-&amp;gt;currentUser(),
	$content
);
&lt;/pre&gt;
&lt;p&gt;You may override the system-wide setting for sending alerts as email messages by passing in the final parameter.  This setting can be controlled in the PeoplePods Command Center on the Options -&amp;gt; Notifications menu.&lt;/p&gt;
&lt;pre&gt;// do NOT send this alert as an email
$user-&amp;gt;sendAlert($alert,$user,$content,false);
&lt;/pre&gt;
&lt;h3&gt;Attaching Data&lt;/h3&gt;
&lt;p&gt;If we attach  data to an alert when we publish it, we can reference values from the objects within the message using simple &lt;strong&gt;tokens&lt;/strong&gt;&amp;nbsp;- this allows the messages to stay correct, even as the data changes.&lt;/p&gt;
&lt;p&gt;There are two types of token available - one that simply inserts a value, and one that inserts a value that is also a link to the object&apos;s permalink page.&lt;/p&gt;
&lt;p&gt;To insert a simple value, use a token in the form of:&amp;nbsp;&lt;i&gt;@object.field&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;To insert a link, use a token in the form of&amp;nbsp;&lt;i&gt;{object.field}&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;To reference the recipient of the alert, use the targetUser token:&lt;/p&gt;
&lt;pre&gt;$user-&amp;gt;sendAlert(&apos;Hey @targetUser.nick!  You are receiving this alert&apos;);
&lt;/pre&gt;
&lt;p&gt;To reference the member whose action caused the alert to be triggered, use the actor token:&lt;/p&gt;
&lt;pre&gt;$user-&amp;gt;sendAlert(&apos;{actor.nick} is now following you&apos;,$actor);
&lt;/pre&gt;
&lt;p&gt;To reference the attached piece of content, use the targetContent token:&lt;/p&gt;
&lt;pre&gt;$user-&amp;gt;sendAlert(
	&apos;{actor.nick} left a comment on {targetContent.headline}&apos;,
	$actor,
	$targetContent
);
&lt;/pre&gt;
&lt;h3&gt;Getting Unread Alerts&lt;/h3&gt;
&lt;p&gt;To get a list of a member&apos;s unread alerts, use the $Person-&amp;gt;getAlerts() method.  This will return a stack of alert objects.&lt;/p&gt;
&lt;pre&gt;// get at most 5 unread alerts
$alerts = $user-&amp;gt;getAlerts(5);

// output all alerts using the theme/alerts/output.php template.
$alerts-&amp;gt;output();
&lt;/pre&gt;
&lt;h3&gt;Marking Alerts as Read&lt;/h3&gt;
&lt;p&gt;There are two methods for marking alerts as read.  You may mark individual alerts as read by calling the $alert-&amp;gt;markAsRead() method, or you may mark all alerts pertaining to a specific person or piece of content by calling the $person-&amp;gt;expireAlertsAbout($obj) method.&lt;/p&gt;
&lt;pre&gt;// mark each alert as read individually
$alerts = $user-&amp;gt;getAlerts();
foreach($alerts as $alert) {
	$alert-&amp;gt;markAsRead();
}

// mark alerts about $content as read
$user-&amp;gt;expireAlertsAbout($content);

// mark alerts about $person as read
$user-&amp;gt;expireAlertsAbout($person);
&lt;/pre&gt;
&lt;p&gt;Use $alert-&amp;gt;markAsRead() when a user manually dismisses an alert.  Use $person-&amp;gt;expireAlertsAbout() when a user visits the permalink page for an object so that any related alerts will automatically be marked as read once the user visits the object&apos;s page.&lt;/p&gt;
&lt;h3&gt;Displaying Activity Streams&lt;/h3&gt;
&lt;p&gt;Alerts are output via the output() method, either on the alert list itself, or on an individual alert message. Each message is output using a template from the alerts/ folder. By default, alerts/output.php will be used.&lt;/p&gt;
&lt;pre&gt;// output the entire stream
$alerts = $user-&amp;gt;getAlerts();
$alerts-&amp;gt;output();

// output one message at a time
foreach ($alerts as $alert) { 
	$alert-&amp;gt;output();
}

// output the stream using mytheme/alerts/custom.php
$alerts-&amp;gt;output(&apos;custom&apos;);
&lt;/pre&gt;
&lt;p&gt;Inside the template, you not only have access to the alert message, but also to all of the attached data. You can use the attached data to display thumbnail images, do additional processing, or whatever the heck you want.&lt;/p&gt;
&lt;p&gt;To display the formatted alert message, use the formatMessage() method. This method will choose the appropriate message to display and do all of the token replacement:&lt;/p&gt;
&lt;pre&gt;&amp;lt;? echo $alert-&amp;gt;formatMessage(); ?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;You can also access the attached data using the following variables:&lt;/p&gt;
&lt;pre&gt;// reference the alert itself
$message = $alert-&amp;gt;formatMessage();
$minutes_since = $alert-&amp;gt;minutes;

// reference the acting user
$actor = $alert-&amp;gt;author();
$actor-&amp;gt;permalink();

// reference the target user
$targetUser-&amp;gt;permalink();

// reference the target content
// this could be EITHER a piece of content
// or a comment
// check the TYPE field.
if ($targetContent-&amp;gt;TYPE==&apos;content&apos;)  {
	// do something with content
} else if ($targetContent-&amp;gt;TYPE==&apos;comment&apos;) { 
	// do something with a comment
}
&lt;/pre&gt;
&lt;h3&gt;Function Reference&lt;/h3&gt;
&lt;pre&gt;// query the alert inbox
$alerts = $person-&amp;gt;getAlerts($count);

// output a list of alerts:
$alerts-&amp;gt;output($template,$header,$footer,$empty_message);

// output individual alerts:
foreach ($alerts as $alert) { 
	$alert-&amp;gt;output($template,$alternative_path_to_template);
}

// format an alert for display:
$message = $alert-&amp;gt;formatActivity();

// send an alert
$user-&amp;gt;sendAlert(
	$message,
	$actor,
	$targetContent,
	$ok_to_send_email
);

// load a single alert by ID
$alert = $POD-&amp;gt;getAlert(5);

// query all alerts
$alerts = $POD-&amp;gt;getAlerts(
	$conditions,
	$sort,
	$count,
	$offset
);

&lt;/pre&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/alerts</guid>
         <pubDate>2010-11-23T01:20:26-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$POD-&gt;libOptions()</title>
         <link>http://peoplepods.net/readme/pod-liboptions</link>
         <description>&lt;pre&gt;
$val = $POD-&gt;libOptions($key);
&lt;/pre&gt;

&lt;p&gt;Returns the value of one of the PeoplePods library options.  These options are defined within the &lt;a href=&quot;/readme/admin-tools&quot;&gt;command center&lt;/a&gt;, by the library itself, and by &lt;a href=&quot;/readme/creating-new-pods#settings&quot;&gt;plugin pods.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the options are stored into the &lt;i&gt;lib/etc/options.php&lt;/i&gt; file within your PeoplePods install.  (Some may be defined at runtime by the &lt;a href=&quot;/readme/pod-registerpod&quot;&gt;$POD-&gt;registerPOD()&lt;/a&gt; function, though these should function in the same manner.)&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/pod-liboptions</guid>
         <pubDate>2010-10-07T03:25:13-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Add functionality to PeoplePods with registerMethod</title>
         <link>http://peoplepods.net/readme/registerMethod</link>
         <description>&lt;p&gt;As of 0.8, plugin pods can add functionality to core classes using the registerMethod() class method.  This allows PeoplePods to be extended without changing the library code, and thus allows the system to be upgraded without overwriting custom additions.&lt;/p&gt;
&lt;p&gt;The registerMethod() function should only be used within a methods.php plugin file, as described &lt;a href=&quot;http://peoplepods.net/readme/creating-new-pods#methods&quot;&gt;here&lt;/a&gt;.  Using it outside of the methods file will cause your entire website to explode.&lt;/p&gt;
&lt;p&gt;In addition, registerMethod() is a class method, which means it is called directly on a class, not on a specific object.  This way, the method is available to all objects of that class.&lt;/p&gt;
&lt;pre&gt;function myMethod($POD) {
// do stuff.
}

PeoplePod::registerMethod(&apos;myMethod&apos;);

function myPersonMethod($person) {
// do stuff.
}

Person::registerMethod(&apos;myPersonMethod&apos;);

function myContentMethod($content) {
// do stuff.
}

Content::registerMethod(&apos;myContentMethod&apos;);
&lt;/pre&gt;
&lt;p&gt;After being registered, the method may be used on any object of that class.&lt;/p&gt;
&lt;pre&gt;// create a piece of content
$doc = $POD-&amp;gt;getContent();

// call the custom method
$doc-&amp;gt;myContentMethod();
&lt;/pre&gt;
&lt;p&gt;Methods that are added in this manner must take as their first parameter an object which represents the object upon which the method was called.  That is, the first parameter is the object that would otherwise be referenced using the $this variable:&lt;/p&gt;
&lt;pre&gt;// in handler.php or other pod code:
$doc-&amp;gt;sampleFunction();


// in methods.php
function sampleFunction($content) {
  // $content == $doc
}

Content::registerMethod(&apos;sampleFunction&apos;);
&lt;/pre&gt;
&lt;p&gt;You may also specify additional parameters after the object:&lt;/p&gt;
&lt;pre&gt;// in handler.php
$doc-&amp;gt;sampleFunction2(&apos;foo&apos;);

// in methods.php
function sampleFunction2($content,$message) { 
// ...
}
Content::registerMethod(&apos;sampleFunction2&apos;);
&lt;/pre&gt;
&lt;p&gt;Note, methods added in this way are only available if the pod is enabled!&lt;/p&gt;
&lt;p&gt;In some circumstances, such as when &lt;a href=&quot;http://peoplepods.net/readme/overriding&quot;&gt;overriding core functions&lt;/a&gt;&amp;nbsp;or to avoid namespace collisions, you call your new method by a name that is different from the actual function name. &amp;nbsp;In this case, you can pass a second parameter to registerMethod which will be used instead of the real name.&lt;/p&gt;
&lt;pre&gt;
function functionWithALongUglyName($content){
...
}
Content::registerMethod(&apos;functionWithALongUglyName&apos;,&apos;foo&apos;);

// $content-&gt;foo() will now execute functionWithALongUglyName($content)
&lt;/pre&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/registerMethod</guid>
         <pubDate>2010-10-06T02:39:35-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Activity Streams</title>
         <link>http://peoplepods.net/readme/activity</link>
         <description>&lt;p&gt;PeoplePods has the ability to generate an &lt;a href=&quot;http://en.wikipedia.org/wiki/Activity_stream&quot;&gt;activity stream&lt;/a&gt; similar to the &quot;news feed&quot; found on Facebook and other social networking sites.   Activity streams describe recent activity on the site by members - containing such brilliant pieces of content as &quot;Joe is now following Bob,&quot; and &quot;Bob left a comment on Joe&apos;s photo.&quot;&lt;/p&gt;
&lt;p&gt;In order to make these messages as flexible and useful as possible, PeoplePods allows various pieces of data to be associated with the activity stream message.  This data, such as a record of the person who performed the action, is used to display the activity message, and also allows the activity stream to be queried by any field within any of the related records - just like any stack object.&lt;/p&gt;
&lt;p&gt;In addition, messages in the activity stream can include dynamic references to the associated data such as automatically generated links, usernames and headlines. Messages may also a &quot;You&quot; version for the acting user, and another for the target user.  So, one recorded action might be represented as &quot;Joe is now following Bob&quot; as well as &quot;You are now following Bob&quot; as well as &quot;Joe is now following you,&quot; depending on who is looking at it.&lt;/p&gt;
&lt;p&gt;PeoplePods automatically publishes activity stream messages in 2 cases - when a member leaves a comment on another member&apos;s content, and when a member adds the &quot;friend&quot; flag to another member.   Any additional messages must be added to &lt;a href=&quot;http://peoplepods.net/readme/creating-new-pods&quot;&gt;custom pods&lt;/a&gt; or &lt;a href=&quot;http://peoplepods.net/readme/registerMethod&quot;&gt;custom methods&lt;/a&gt; using the &lt;a href=&quot;#publish&quot;&gt;$user-&amp;gt;publishActivity method()&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Publishing Activity&lt;/h3&gt;
&lt;pre&gt;// publish an activity to the stream
$user-&amp;gt;publishActivity(
	$message,
	$userMessage,
	$targetMessage,
	$targetUser,
	$targetContent,
	$resultContent,
	$gid
);
&lt;/pre&gt;
&lt;p&gt;The publishActivity method in its simplest form can be called with one parameter - a message to be added to the stream.&lt;/p&gt;
&lt;pre&gt;$user-&amp;gt;publishActivity(&quot;Bob left a comment on Joe&apos;s photo.&quot;);
&lt;/pre&gt;
&lt;p&gt;However, in most cases, you will want to also pass a second message so that when a member sees a message about their own action, it is personalized.  This can be achieved by passing in the second parameters, $userMessage.&lt;/p&gt;
&lt;pre&gt;$user-&amp;gt;publishActivity(
	&quot;Bob left a comment on Joe&apos;s photo&quot;,
	&quot;You left a comment on Joe&apos;s photo.&quot;
);
&lt;/pre&gt;
&lt;p&gt;But why should Bob be the only member to receive the special first person treatment?  Joe is a first person too!  To personalize the message for the member who has been acted upon, we use the $targetMessage parameter.&lt;/p&gt;
&lt;pre&gt;$user-&amp;gt;publishActivity(
	&quot;Bob left a comment on Joe&apos;s photo&quot;,
	&quot;You left a comment on Joe&apos;s photo.&quot;,
	&quot;Bob left a comment on your photo.&quot;
);
&lt;/pre&gt;
&lt;h3&gt;Attaching Data&lt;/h3&gt;
&lt;p&gt;To really access the full power of the activity stream, we also need to pass along information about the activity.  We know who did it, but we should also keep a record of what content or member the action was performed upon, and if any new content resulted from the activity.   If we attach this data to the activity message when we publish it, we can reference values from the objects within the message using a simple &lt;strong&gt;tokens&lt;/strong&gt; - this allows the messages to stay correct, even as the data changes.&lt;/p&gt;
&lt;p&gt;There are two types of token available - one that simply inserts a value, and one that inserts a value that is also a link to the object&apos;s permalink page.&lt;/p&gt;
&lt;p&gt;To insert a simple value, use a token in the form of: &lt;i&gt;@object.field&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;To insert a link, use a token in the form of &lt;i&gt;{object.field}&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;In our example, we&apos;re using all of the different types of attached content.  The tokens for each type of attached content are explained below.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bob is the &lt;strong&gt;actor&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Bob took an action on a photo.  The photo is the &lt;strong&gt;targetContent&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Since the photo is owned by Joe, he is the &lt;strong&gt;targetUser&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;And since the action resulted in a new comment, the comment is the &lt;strong&gt;resultContent&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Using the token replacement system, the message becomes:&lt;/p&gt;
&lt;pre&gt;$message = &apos;{actor.nick} left &amp;lt;a href=&quot;@resultContent.permalink&quot;&amp;gt;a comment&amp;lt;/a&amp;gt; 
on {targetUser.nick}&apos;s &amp;lt;a href=&quot;@targetContent.permalink&quot;&amp;gt;photo&amp;lt;/a&amp;gt;.&apos;;
&lt;/pre&gt;
&lt;p&gt;The tokens give you access to any field within the object, and either style of token can be used on any of the attached objects.  Unless you need to construct a link with custom anchor text, we recommend you use the link tokens whenever possible:&lt;/p&gt;
&lt;pre&gt;// a message posted when someone posts something:
// members name will link to profile
// post headline will link to the post&apos;s permalink page
$message = &apos;{actor.nick} just posted {targetContent.headline}&apos;;
&lt;/pre&gt;
&lt;p&gt;Taking all of this together, we now have a publishActivity() call that looks something like this:&lt;/p&gt;
&lt;pre&gt;$comment = $photo-&amp;gt;addComment(&apos;This is great!&apos;);

$user-&amp;gt;publishActivity(
	&apos;{actor.nick} left &amp;lt;a href=&quot;@resultContent.permalink&quot;&amp;gt;a comment&amp;lt;/a&amp;gt; 
on {targetUser.nick}&apos;s &amp;lt;a href=&quot;@targetContent.permalink&quot;&amp;gt;photo&amp;lt;/a&amp;gt;.&apos;,
	&apos;You left &amp;lt;a href=&quot;@resultContent.permalink&quot;&amp;gt;a comment&amp;lt;/a&amp;gt; 
on {targetUser.nick}&apos;s &amp;lt;a href=&quot;@targetContent.permalink&quot;&amp;gt;photo&amp;lt;/a&amp;gt;.&apos;,
	&apos;{actor.nick} left &amp;lt;a href=&quot;@resultContent.permalink&quot;&amp;gt;a comment&amp;lt;/a&amp;gt; 
on &amp;lt;a href=&quot;@targetContent.permalink&quot;&amp;gt;your photo&amp;lt;/a&amp;gt;.&apos;,
	$photo-&amp;gt;author(),
	$photo,
	$comment
);
&lt;/pre&gt;
&lt;h3&gt;Repeating Actions&lt;/h3&gt;
&lt;p&gt;Your site might have certain actions that are repeatable.  You don&apos;t want the same message appearing in the activity stream over and over again for the same action.&lt;/p&gt;
&lt;p&gt;To avoid this, you can pass a unique identifier for the message into the publishActivity method.  If the unique identifier already exists in the activity stream, the new version will be ignored.&lt;/p&gt;
&lt;p&gt;This is useful for avoiding multiple &quot;X is friends with Y&quot; messages caused by members adding and removing friends.&lt;/p&gt;
&lt;pre&gt;$gid = $user-&amp;gt;id . &apos;-friends-with-&apos; . $targetUser-&amp;gt;id;	
$user-&amp;gt;publishActivity(
	$message,
	$userMessage,
	$targetMessage,
	$targetUser,
	null,
	null,
	$gid
);
&lt;/pre&gt;
&lt;h3&gt;Querying the Activity Stream&lt;/h3&gt;
&lt;pre&gt;$activity_stream = $POD-&amp;gt;getActivityStream(
	$conditions,
	$sort,
	$count,
	$offset);
&lt;/pre&gt;
&lt;p&gt;We can get a list of all activity on the site by calling the $POD-&amp;gt;getActivityStream method with no parameters:&lt;/p&gt;
&lt;pre&gt;$activity = $POD-&amp;gt;getActivityStream();
&lt;/pre&gt;
&lt;p&gt;Or we can get a list of activities performed by specific user:&lt;/p&gt;
&lt;pre&gt;$my_activity = $POD-&amp;gt;getActivityStream(array(&apos;u.id&apos;=&amp;gt;$userid));
&lt;/pre&gt;
&lt;p&gt;Or we can get a list of activities targeted at specific user:&lt;/p&gt;
&lt;pre&gt;$my_activity = $POD-&amp;gt;getActivityStream(array(&apos;tu.id&apos;=&amp;gt;$userid));
&lt;/pre&gt;
&lt;p&gt;Or about activity related to a specific piece of content:&lt;/p&gt;
&lt;pre&gt;$content_activity = $POD-&amp;gt;getActivityStream(array(&apos;d.id&apos;=&amp;gt;$contentId));
&lt;/pre&gt;
&lt;p&gt;The getActivityStream method can also be called on a Person object.  In this scenario, the activities returned include both activities performed by the person, and activities targeted at the person.  In other words, everything that person did, and everything that anyone else did to that person.&lt;/p&gt;
&lt;pre&gt;$my_activity = $user-&amp;gt;getActivityStream();
&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;http://peoplepods.net/readme/stack-parameters#activity&quot;&gt;Click here to view all of the options available when querying activity streams.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Displaying Activity Streams&lt;/h3&gt;
&lt;p&gt;Activity streams are output via the output() method, either on the activity stream itself, or on an individual activity message.  Each message is output using a template from the activity/ folder.  By default, activity/output.php will be used.&lt;/p&gt;
&lt;pre&gt;// output the entire stream
$activity_stream = $POD-&amp;gt;getActivityStream();
$activity_stream-&amp;gt;output();

// output one message at a time
foreach ($activity_stream as $action) { 
	$action-&amp;gt;output();
}

// output the stream using mytheme/activity/custom.php
$activity_stream-&amp;gt;output(&apos;custom&apos;);
&lt;/pre&gt;
&lt;p&gt;Inside the template, you not only have access to the activity message, but also to all of the attached data.  You can use the attached data to display thumbnail images, do additional processing, or whatever the heck you want.&lt;/p&gt;
&lt;p&gt;To display the formatted activity message, use the formatActivity() method.  This method will choose the appropriate message to display and do all of the token replacement:&lt;/p&gt;
&lt;pre&gt;&amp;lt;? echo $activity-&amp;gt;formatActivity(); ?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;You can also access the attached data using the following variables:&lt;/p&gt;
&lt;pre&gt;// reference the activity itself
$message = $activity-&amp;gt;formatActivity();
$minutes_since = $activity-&amp;gt;minutes;

// reference the acting user
$actor = $activity-&amp;gt;author();
$actor-&amp;gt;permalink();

// reference the target user
$targetUser-&amp;gt;permalink();

// reference the target content
// this could be EITHER a piece of content
// or a comment
// check the TYPE field.
if ($targetContent-&amp;gt;TYPE==&apos;content&apos;)  {
	// do something with content
} else if ($targetContent-&amp;gt;TYPE==&apos;comment&apos;) { 
	// do something with a comment
}

// reference the result content
// this can also be either content or a comment
if ($resultContent-&amp;gt;TYPE==&apos;content&apos;)  {
	// do something with content
} else if ($resultContent-&amp;gt;TYPE==&apos;comment&apos;) { 
	// do something with a comment
}
&lt;/pre&gt;
&lt;h3&gt;Function Reference&lt;/h3&gt;
&lt;pre&gt;// query the activity stream
$stream = $POD-&amp;gt;getActivityStream($conditions,$sort,$count,$offset);

// output a stream:
$stream-&amp;gt;output($template,$header,$footer,$empty_message);

// output individual activities:
foreach ($stream as $action) { 
	$action-&amp;gt;output($template,$alternative_path_to_template);
}

// format an activity for display:
$message = $activity-&amp;gt;formatActivity();

// publish an action
$user-&amp;gt;publishActivity(
	$message,
	$userMessage,
	$targetMessage,
	$targetUser,
	$targetContent,
	$resultContent,
	$gid
);


// get a personalized action stream of actions BY and UPON a user
$my_stream = $user-&amp;gt;getActivityStream($count);
&lt;/pre&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/activity</guid>
         <pubDate>2010-10-06T02:35:58-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Obj-&gt;flagDate()</title>
         <link>http://peoplepods.net/readme/obj-flagdate</link>
         <description>&lt;pre&gt;
$date = $obj-&gt;flagDate($flag,$person);
&lt;/pre&gt;

&lt;p&gt;Returns a string representing the date that $flag was added to $obj by $person&lt;/p&gt;

&lt;p&gt;If the flag has NOT been added, returns false.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/obj-flagdate</guid>
         <pubDate>2010-10-06T02:19:55-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>SDK Quick Start Guide</title>
         <link>http://peoplepods.net/readme/sdk-quick-start-guide</link>
         <description>&lt;p&gt;This page is intended to give developers a quick overview of the basic functionality of PeoplePods.  Links to further documentation are scattered throughout - we highly encourage you to explore further to get a good feel for the scope and power of PeoplePods.&lt;/p&gt;
&lt;p&gt;Using the techniques below, you can layer PeoplePods functionality onto existing PHP-powered sites, or you can &lt;a href=&quot;http://peoplepods.net/readme/creating-new-pods&quot;&gt;create new plugin pods&lt;/a&gt; which function within PeoplePods.&lt;/p&gt;
&lt;h3&gt;Creating a $POD&lt;/h3&gt;
&lt;p&gt;To access PeoplePods, you need to &lt;a href=&quot;http://peoplepods.net/readme/peoplepods-object&quot;&gt;create a $POD object&lt;/a&gt;.  You do this by including the library file, and calling PeoplePod&apos;s constructor.  In order to do so in a manner compatible with the core pods and default theme, you need to call it like so:&lt;/p&gt;
&lt;pre&gt;include_once(&quot;$my_peoplepods_dir/PeoplePods.php&quot;);
$POD = new PeoplePod(array(&apos;authSecret&apos;=&amp;gt;$_COOKIE[&apos;pp_auth&apos;]));
&lt;/pre&gt;
&lt;p&gt;You may want to specify that the new feature you are creating can only be accessed by certain people.    You can do this using the &apos;lockdown&apos; parameter:&lt;/p&gt;
&lt;pre&gt;// only allow logged in people
$POD = new PeoplePod(array(
 &apos;authSecret&apos;=&amp;gt;$_COOKIE[&apos;pp_auth&apos;],
  &apos;lockdown&apos;=&amp;gt;&apos;login&apos;
));

// only allow logged in people who have confirmed their email address
$POD = new PeoplePod(array(
  &apos;authSecret&apos;=&amp;gt;$_COOKIE[&apos;pp_auth&apos;],
  &apos;lockdown&apos;=&amp;gt;&apos;verified&apos;
));

// only allow logged in people with the adminUser permission
$POD = new PeoplePod(array(
  &apos;authSecret&apos;=&amp;gt;$_COOKIE[&apos;pp_auth&apos;],
  &apos;lockdown&apos;=&amp;gt;&apos;adminUser&apos;
));
&lt;/pre&gt;
&lt;p&gt;Once you&apos;ve got your $POD object, you can access the details about the current logged in user, if one exists, using &lt;a href=&quot;http://peoplepods.net/readme/pod-isauthenticated&quot;&gt;$POD-&amp;gt;isAuthenticated()&lt;/a&gt; and &lt;a href=&quot;http://peoplepods.net/readme/pod-currentuser&quot;&gt;$POD-&amp;gt;currentUser()&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Creating Content&lt;/h3&gt;
&lt;p&gt;Creating a piece of PeoplePods content is as easy as creating an empty &lt;a href=&quot;http://peoplepods.net/readme/content-object&quot;&gt;content object&lt;/a&gt; to store it using &lt;a href=&quot;http://peoplepods.net/readme/pod-getcontent&quot;&gt;$POD-&amp;gt;getContent()&lt;/a&gt;, then calling the &lt;a href=&quot;http://peoplepods.net/readme/content-save&quot;&gt;save() function&lt;/a&gt;.  At the bare minimum, a piece of content must have a headline and a type:&lt;/p&gt;
&lt;pre&gt;$new_content = $POD-&amp;gt;getContent();
$new_content-&amp;gt;headline = &apos;This is a new post&apos;;
$new_content-&amp;gt;type = &apos;post&apos;;
$new_content-&amp;gt;save();
&lt;/pre&gt;
&lt;p&gt;Part of the magic of PeoplePods is that you can create any field you want, on the fly, and PeoplePods will automatically handle it as if it was a native field in your database.   This allows you to create many types of content in many different configurations.  We call this &lt;a href=&quot;http://peoplepods.net/readme/meta-fields&quot;&gt;creating meta fields&lt;/a&gt;.  But you don&apos;t need to know anything special to access this functionality - it all happens behind the scenes.&lt;/p&gt;
&lt;pre&gt;$new_content-&amp;gt;new_field = &apos;foo&apos;;
echo $new_content-&amp;gt;new_field;
&lt;/pre&gt;
&lt;p&gt;PeoplePods automatically tracks a bunch of information about the content, including when it was created and &lt;a href=&quot;http://peoplepods.net/readme/obj-author&quot;&gt;who created it&lt;/a&gt;, so you can just worry about stuffing your website with cool content.&lt;/p&gt;
&lt;p&gt;Once you&apos;ve created your content, you can &lt;a href=&quot;http://peoplepods.net/readme/content-addtag&quot;&gt;add tags&lt;/a&gt;, &lt;a href=&quot;http://peoplepods.net/readme/content-addcomment&quot;&gt;comments&lt;/a&gt; and &lt;a href=&quot;http://peoplepods.net/readme/content-addfile&quot;&gt;files&lt;/a&gt; using simple object methods:&lt;/p&gt;
&lt;pre&gt;$content-&amp;gt;addComment(&apos;my comment goes here&apos;);
$content-&amp;gt;addTag(&apos;foo&apos;);
$content-&amp;gt;addFile($filename,$_FILES[$filename]);
&lt;/pre&gt;
&lt;p&gt;Combining all of these features, you can create and manage virtually any kind of web content, and can do so without any sort of pre-configuration.&lt;/p&gt;
&lt;pre&gt;// create a new piece of content of type &apos;post&apos;
$new_post = $POD-&amp;gt;getContent();
$new_post-&amp;gt;type=&apos;post&apos;;
$new_post-&amp;gt;headline=&apos;my new post&apos;;
$new_post-&amp;gt;save();

// now create another piece of content of type &apos;receipt&apos;
// the receipt will use a meta field to track what content was created
$receipt = $POD-&amp;gt;getContent();
$receipt-&amp;gt;type = &apos;receipt&apos;;
$receipt-&amp;gt;headline=&apos;Created content&apos;;
$receipt-&amp;gt;content_created = $new_post-&amp;gt;get(&apos;id&apos;);
$receipt-&amp;gt;cost = 500;
$receipt-&amp;gt;save();
&lt;/pre&gt;
&lt;h3&gt;Finding and Displaying Stuff&lt;/h3&gt;
&lt;p&gt;PeoplePods provides a query interface to all of the stuff it manages, including your website content, users, groups, comments, files and tags.   You can use this interface to generate customized and personalized lists of stuff, then output them into your pages.  In this way, you can create blogs, sidebars, tag clouds, lists of attached files, comment streams, and many other configurations.&lt;/p&gt;
&lt;p&gt;Each type of &quot;stuff&quot; PeoplePods manages has its own query function, but all of the functions take the same parameters:&lt;/p&gt;
&lt;pre&gt;$posts = $POD-&amp;gt;getContents($conditions,$sort,$count,$offset);
$people = $POD-&amp;gt;getPeople($conditions,$sort,$count,$offset);
$files = $POD-&amp;gt;getFiles($conditions,$sort,$count,$offset);
$groups = $POD-&amp;gt;getGroups($conditions,$sort,$count,$offset);
$tags = $POD-&amp;gt;getTags($conditions,$sort,$count,$offset);
$comments = $POD-&amp;gt;getComments($conditions,$sort,$count,$offset);
&lt;/pre&gt;
&lt;p&gt;Most of the time, you&apos;ll be concerned with the $conditions parameter.  This is an array of field=&amp;gt;value pairs that describe the content you want to load.  This might be as simple as specifying the type of content or the id of the content&apos;s owner, or it might involve a combination of several fields.   You can &lt;a href=&quot;http://peoplepods.net/readme/stack-parameters&quot;&gt;read about stack parameters here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The return value of these functions is a list of objects, or what we call a &lt;a href=&quot;http://peoplepods.net/readme/stacks&quot;&gt;stack&lt;/a&gt;.  You can do all sorts of things with stacks, including &lt;a href=&quot;http://peoplepods.net/readme/stack-getnext&quot;&gt;iterating over them&lt;/a&gt;, &lt;a href=&quot;http://peoplepods.net/readme/stack-contains&quot;&gt;searching them&lt;/a&gt;, &lt;a href=&quot;http://peoplepods.net/readme/stack-output&quot;&gt;and outputting them to the page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Each object also has its own &lt;a href=&quot;http://peoplepods.net/readme/content-output&quot;&gt;output function&lt;/a&gt;, which uses a template file located in one of the &lt;a href=&quot;http://peoplepods.net/readme/themes&quot;&gt;themes&lt;/a&gt;.  You can also output individual fields using &lt;a href=&quot;http://peoplepods.net/readme/obj-write&quot;&gt;write()&lt;/a&gt; and other related functions.&lt;/p&gt;
&lt;pre&gt;// get recent posts
$posts = $POD-&amp;gt;getContents(array(&apos;type&apos;=&amp;gt;&apos;post&apos;));

// get recent posts by a specific author
$posts = $POD-&amp;gt;getContents(array(&apos;type&apos;=&amp;gt;&apos;post&apos;,&apos;userId&apos;=&amp;gt;6));

// use foreach to iterate over the results
foreach ($posts as $post) { 
  $post-&amp;gt;output();
}

// use while to iterate over the results
while ($post = $posts-&amp;gt;getNext()) {
  $post-&amp;gt;output();
}

// just output the entire list, with automatically generated headers and footers
$posts-&amp;gt;output();
&lt;/pre&gt;
&lt;p&gt;You can query any of the different object types using any field in their object definition as well as any fields you create using the meta fields technique.   You can also query fields in related objects, like the author of a post, members of groups, or a comment&apos;s parent content.  Using this capability, you can create virtually any view of your website that you can imagine.&lt;/p&gt;
&lt;pre&gt;// get all comments that are attached to content in a specific group
$comments = $POD-&amp;gt;getComments(array(&apos;d.groupId&apos;=&amp;gt;5));

// get all files created by an admin user
$files = $POD-&amp;gt;getFiles(array(&apos;u.adminUser&apos;=&amp;gt;1));
&lt;/pre&gt;
&lt;p&gt;Once you have the stuff you want, you can access related stuff without more queries.  Each type of object comes with predefined stacks:&lt;/p&gt;
&lt;pre&gt;$comments = $content-&amp;gt;comments();
$author = $content-&amp;gt;author();
$files = $content-&amp;gt;files();
$content = $comment-&amp;gt;parent();
$people = $group-&amp;gt;members();
&lt;/pre&gt;
&lt;h3&gt;Activity Streams, Alerts and Private Messaging&lt;/h3&gt;
&lt;p&gt;PeoplePods supports a variety of messaging techniques, including public activity stream, automated alerts, and member-to-member private messaging.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://peoplepods.net/readme/activity&quot;&gt;Read about Activity Streams&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://peoplepods.net/readme/alerts&quot;&gt;Read about Alerts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://peoplepods.net/readme/private-messaging&quot;&gt;Read about Private Messaging&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Creating Relationships Between People and Content&lt;/h3&gt;
&lt;p&gt;You can create relationships between 2 people, or between a person and a piece of content using &lt;a href=&quot;http://peoplepods.net/readme/flags&quot;&gt;flags&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;// add $content to $user&apos;s favorites
$content-&amp;gt;addFlag(&apos;favorite&apos;,$user);

// add $friend as $user&apos;s friend
$friend-&amp;gt;addFlag(&apos;friend&apos;,$user);
&lt;/pre&gt;
&lt;p&gt;You can then query the content and people using those flags:&lt;/p&gt;
&lt;pre&gt;// load my favorites
$favorites = $POD-&amp;gt;getContents(array(
  &apos;flag.name&apos;=&amp;gt;&apos;favorite&apos;,
   &apos;flag.userId&apos;=&amp;gt;$user-&amp;gt;id
));

// load my friends
$friends = $POD-&amp;gt;getPeople(array(
  &apos;flag.name&apos;=&amp;gt;&apos;friend&apos;,
  &apos;flag.userId&apos;=&amp;gt;$user-&amp;gt;id
));
&lt;/pre&gt;
&lt;p&gt;Luckily, PeoplePods provides a bunch of built in flag management for &lt;a href=&quot;http://peoplepods.net/readme/person-favorites&quot;&gt;favorites&lt;/a&gt;, &lt;a href=&quot;http://peoplepods.net/readme/person-friends&quot;&gt;friends&lt;/a&gt;, &lt;a href=&quot;http://peoplepods.net/readme/person-followers&quot;&gt;followers&lt;/a&gt;, &lt;a href=&quot;http://peoplepods.net/readme/person-watched&quot;&gt;and comment subscriptions&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Groups&lt;/h3&gt;
&lt;p&gt;We believe the future of online community revolves around small groups.  Groups for clubs, groups for interests, groups for neighborhoods, and group for groups!   Thus, we&apos;ve built basic group handling right into the core of PeoplePods.&lt;/p&gt;
&lt;pre&gt;// create a group
$new_group = $POD-&amp;gt;getGroup();
$new_group-&amp;gt;group_name = &apos;Scoobies&apos;;
$new_group-&amp;gt;description = &apos;For vampire hunters&apos;;
$new_group-&amp;gt;save();

// add a piece of content to a group
$new_group-&amp;gt;addContent($post);

// add a user to the group
$new_group-&amp;gt;addMember($user);
&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;http://peoplepods.net/readme/group-object&quot;&gt;Read more about groups here&lt;/a&gt;.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/sdk-quick-start-guide</guid>
         <pubDate>2009-12-03T03:59:10-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$person-&gt;addFile()</title>
         <link>http://peoplepods.net/readme/person-addfile</link>
         <description>&lt;pre&gt;
$person-&gt;addFile(&apos;img&apos;,$_FILES[&apos;img&apos;],&apos;optional caption goes here&apos;);
&lt;/pre&gt;

&lt;p&gt;Takes an uploaded file and attaches it a person.  This function is designed to handle rows out of the $_FILES array which PHP automatically provides when a file has been uploaded via an HTTP POST.&lt;/p&gt;

&lt;pre&gt;
// store all files that were uploaded
foreach ($_FILES as $file_name =&gt; $file) { 
	$person-&gt;addFile($file_name,$file);
	if (!$person-&gt;success()) { 
	  echo $person-&gt;error();
	}
}
&lt;/pre&gt;

&lt;p&gt;Image files will be automatically resized upon upload.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/person-addfile</guid>
         <pubDate>2009-12-03T02:47:36-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$content-&gt;addFile()</title>
         <link>http://peoplepods.net/readme/content-addfile</link>
         <description>&lt;pre&gt;
$content-&gt;addFile(&apos;img&apos;,$_FILES[&apos;img&apos;],&apos;optional caption goes here&apos;);
&lt;/pre&gt;

&lt;p&gt;Takes an uploaded file and attaches it to the piece of content.  This function is designed to handle rows out of the $_FILES array which PHP automatically provides when a file has been uploaded via an HTTP POST.&lt;/p&gt;

&lt;pre&gt;
// store all files that were uploaded
foreach ($_FILES as $file_name =&gt; $file) { 
	$content-&gt;addFile($file_name,$file);
	if (!$content-&gt;success()) { 
	  echo $content-&gt;error();
	}
}
&lt;/pre&gt;

&lt;p&gt;Image files will be automatically resized upon upload.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/content-addfile</guid>
         <pubDate>2009-12-03T02:46:53-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$file-&gt;output()</title>
         <link>http://peoplepods.net/readme/file-output</link>
         <description>&lt;p&gt;Outputs the current file using a template.&lt;/p&gt;

&lt;p&gt;By default, this function will use the &lt;i&gt;files/output.php&lt;/i&gt; file in the current theme.  This can be overridden by passing in a template name:&lt;/p&gt;

&lt;pre&gt;
// output the file using the default template &apos;output&apos;
$file-&gt;output();

// output the file using an alternative template:
$file-&gt;output(&apos;short&apos;);

// output the file using a template from outside of the theme
// this will use /var/www/otherthemes/custom.php 
// unless custom.php is found in current theme.
$file-&gt;output(&apos;custom&apos;,&apos;/var/www/otherthemes/&apos;);
&lt;/pre&gt;

&lt;p&gt;Within the template, you can access the file&apos;s information using the &lt;i&gt;$file&lt;/i&gt; variable, and the POD using the &lt;i&gt;$POD&lt;/i&gt; variable.  So, you can do something like this:&lt;/p&gt;

&lt;pre&gt;
$p = $POD-&gt;currentUser();
$p-&gt;output(&apos;tiny&apos;);
&lt;/pre&gt;

&lt;p&gt;And then, in &lt;i&gt;files/tiny.php&lt;/i&gt; in your theme directory:&lt;/p&gt;

&lt;pre&gt;
// people/tiny.php template
&amp;lt;? $file-&gt;write(&apos;resized&apos;); ?&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Read more about &lt;a href=&quot;/readme/themes&quot;&gt;how templates and themes work in PeoplePods.&lt;/a&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/file-output</guid>
         <pubDate>2009-12-03T02:42:10-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$POD-&gt;getFile()</title>
         <link>http://peoplepods.net/readme/pod-getfile</link>
         <description>&lt;p&gt;Returns one specific &lt;a href=&quot;/readme/file-object&quot;&gt;File Object&lt;/a&gt;.  This function can be used to load existing content from the database, or create a new piece of content.&lt;/p&gt;

&lt;h3&gt;Loading Files&lt;/h3&gt;

&lt;p&gt;To load an existing file, pass in it&apos;s database id:&lt;/p&gt;

&lt;pre&gt;
$file = $POD-&gt;getFile(array(
  &apos;id&apos;=&gt;12
));
&lt;/pre&gt;

&lt;h3&gt;Creating Files&lt;/h3&gt;

&lt;p&gt;To create files, use the &lt;a href=&quot;/readme/content-addfile&quot;&gt;$content-&gt;addFile()&lt;/a&gt; and &lt;a href=&quot;/readme/person-addfile&quot;&gt;$person-&gt;addFile()&lt;/a&gt; functions.&lt;/p&gt;


&lt;h3&gt;Errors&lt;/h3&gt;

&lt;p&gt;Be sure to check for errors! In some instances, the content object may not be created properly, and will throw an error.&lt;/p&gt;

&lt;pre&gt;
if (!$file-&gt;success()) {
  echo $file-&gt;error();
}
&lt;/pre&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/pod-getfile</guid>
         <pubDate>2009-12-03T02:40:24-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
   </channel>
</rss>
