<?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 2010 PeoplePods.net</copyright>
      <generator>RSS 2.0 generation class</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs>
      <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;=&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;=&gt;$_COOKIE[&apos;pp_auth&apos;],
  &apos;lockdown&apos;=&gt;&apos;login&apos;
));

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

// only allow logged in people with the adminUser permission
$POD = new PeoplePod(array(
  &apos;authSecret&apos;=&gt;$_COOKIE[&apos;pp_auth&apos;],
  &apos;lockdown&apos;=&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;/readme/pod-isauthenticated&quot;&gt;$POD-&gt;isAuthenticated()&lt;/a&gt; and &lt;a href=&quot;/readme/pod-currentuser&quot;&gt;$POD-&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;/readme/content-object&quot;&gt;content object&lt;/a&gt; to store it using &lt;a href=&quot;/readme/pod-getcontent&quot;&gt;$POD-&gt;getContent()&lt;/a&gt;, then calling the &lt;a href=&quot;/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-&gt;getContent();
$new_content-&gt;headline = &apos;This is a new post&apos;;
$new_content-&gt;type = &apos;post&apos;;
$new_content-&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;/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-&gt;new_field = &apos;foo&apos;;
echo $new_content-&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;/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;/readme/content-addtag&quot;&gt;add tags&lt;/a&gt;, &lt;a href=&quot;/readme/content-addcomment&quot;&gt;comments&lt;/a&gt; and &lt;a href=&quot;/readme/content-addfile&quot;&gt;files&lt;/a&gt; using simple object methods:&lt;/p&gt;

&lt;pre&gt;
$content-&gt;addComment(&apos;my comment goes here&apos;);
$content-&gt;addTag(&apos;foo&apos;);
$content-&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-&gt;getContent();
$new_post-&gt;type=&apos;post&apos;;
$new_post-&gt;headline=&apos;my new post&apos;;
$new_post-&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-&gt;getContent();
$receipt-&gt;type = &apos;receipt&apos;;
$receipt-&gt;headline=&apos;Created content&apos;;
$receipt-&gt;content_created = $new_post-&gt;get(&apos;id&apos;);
$receipt-&gt;cost = 500;
$receipt-&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-&gt;getContents($conditions,$sort,$count,$offset);
$people = $POD-&gt;getPeople($conditions,$sort,$count,$offset);
$files = $POD-&gt;getFiles($conditions,$sort,$count,$offset);
$groups = $POD-&gt;getGroups($conditions,$sort,$count,$offset);
$tags = $POD-&gt;getTags($conditions,$sort,$count,$offset);
$comments = $POD-&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=&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;/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;/readme/stacks&quot;&gt;stack&lt;/a&gt;.  You can do all sorts of things with stacks, including &lt;a href=&quot;/readme/stack-getnext&quot;&gt;iterating over them&lt;/a&gt;, &lt;a href=&quot;/readme/stack-contains&quot;&gt;searching them&lt;/a&gt;, &lt;a href=&quot;/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;/readme/content-output&quot;&gt;output function&lt;/a&gt;, which uses a template file located in one of the &lt;A href=&quot;/readme/themes&quot;&gt;themes&lt;/a&gt;.  You can also output individual fields using &lt;a href=&quot;/readme/obj-write&quot;&gt;write()&lt;/a&gt; and other related functions.&lt;/p&gt;

&lt;pre&gt;
// get recent posts
$posts = $POD-&gt;getContents(array(&apos;type&apos;=&gt;&apos;post&apos;));

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

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

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

// just output the entire list, with automatically generated headers and footers
$posts-&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-&gt;getComments(array(&apos;d.groupId&apos;=&gt;5));

// get all files created by an admin user
$files = $POD-&gt;getFiles(array(&apos;u.adminUser&apos;=&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-&gt;comments();
$author = $content-&gt;author();
$files = $content-&gt;files();
$content = $comment-&gt;parent();
$people = $group-&gt;members();
&lt;/pre&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;/readme/flags&quot;&gt;flags&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;
// add $content to $user&apos;s favorites
$content-&gt;addFlag(&apos;favorite&apos;,$user);

// add $friend as $user&apos;s friend
$friend-&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-&gt;getContents(array(
  &apos;flag.name&apos;=&gt;&apos;favorite&apos;,
   &apos;flag.userId&apos;=&gt;$user-&gt;id
));

// load my friends
$friends = $POD-&gt;getPeople(array(
  &apos;flag.name&apos;=&gt;&apos;friend&apos;,
  &apos;flag.userId&apos;=&gt;$user-&gt;id
));
&lt;/pre&gt;

&lt;p&gt;Luckily, PeoplePods provides a bunch of built in flag management for &lt;a href=&quot;/readme/person-favorites&quot;&gt;favorites&lt;/a&gt;, &lt;a href=&quot;/readme/person-friends&quot;&gt;friends&lt;/a&gt;, &lt;a href=&quot;/readme/person-followers&quot;&gt;followers&lt;/a&gt;, &lt;a href=&quot;/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-&gt;getGroup();
$new_group-&gt;group_name = &apos;Scoobies&apos;;
$new_group-&gt;description = &apos;For vampire hunters&apos;;
$new_group-&gt;save();

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

// add a user to the group
$new_group-&gt;addMember($user);
&lt;/pre&gt;

&lt;p&gt;&lt;a href=&quot;/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;);
&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>
      <item>
         <title>$POD-&gt;getFiles()</title>
         <link>http://peoplepods.net/readme/pod-getfiles</link>
         <description>&lt;pre&gt;
$POD-&gt;getFiles($conditions,$sort,$count,$offset);
&lt;/pre&gt;

&lt;p&gt;Get a &lt;a href=&quot;/readme/stacks&quot;&gt;stack&lt;/a&gt; of &lt;a href=&quot;/readme/file-object&quot;&gt;file objects&lt;/a&gt; that match the parameters you pass in.&lt;/p&gt;

&lt;h3&gt;Parameters&lt;/h3&gt;

&lt;table border=1 bordercolor=#000000 cellpadding=3 cellspacing=0 &gt;
	&lt;tbody&gt;
	&lt;tr&gt;
	  &lt;td valign=top&gt;
		&lt;i&gt;$conditions&lt;/i&gt;
	  &lt;/td&gt;
	  &lt;td&gt;
			An associative array of &lt;a href=&quot;/readme/stack-parameters&quot;&gt;stack parameters&lt;/a&gt; that describe the files you want to load.   See the stack parameters document for constructing these arrays.
		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
	  &lt;td valign=top&gt;
		&lt;i&gt;$sort&lt;/i&gt;
	  &lt;/td&gt;
	  &lt;td&gt;
			A SQL style sort statement.  Defaults to &apos;date DESC&apos;
 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td valign=top&gt;
  &lt;i&gt;$count&lt;/i&gt;&lt;br&gt;
 &lt;/td&gt;
 &lt;td&gt;
		Maximum number of pieces of content to return.  Defaults to 100
 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
 &lt;td valign=top&gt;
  &lt;i&gt;$offset&lt;/i&gt;&lt;br&gt;
 &lt;/td&gt;
 &lt;td&gt;
		Offset results by this many files. (for use in paging)
 &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Examples&lt;/h3&gt;

&lt;p&gt;Get a simple list of the most recent files.&lt;/p&gt;

&lt;pre&gt;
$most_recent = $POD-&gt;getFiles();
&lt;/pre&gt;

&lt;p&gt;Get a simple list of the most recent files by a specific person.&lt;/p&gt;

&lt;pre&gt;
$most_recent = $POD-&gt;getFiles(array(
  &apos;userId&apos;=&gt;$person-&gt;get(&apos;id&apos;)
));
&lt;/pre&gt;

&lt;p&gt;Get a simple list of the most recent files on a piece of content:&lt;/p&gt;

&lt;pre&gt;
$most_recent = $POD-&gt;getFiles(array(
  &apos;contentId&apos;=&gt;$content-&gt;get(&apos;id&apos;)
));
&lt;/pre&gt;

&lt;p&gt;The above example is essentially the same thing as using the &lt;a href=&quot;/readme/content-files&quot;&gt;$content-&gt;files()&lt;/a&gt; function.&lt;/p&gt;

&lt;p&gt;Get files from a group.&lt;/p&gt;

&lt;pre&gt;
$group_files = $POD-&gt;getFiles(array(
	&apos;d.groupId&apos;=&gt;$group-&gt;get(&apos;id&apos;)
));
&lt;/pre&gt;

&lt;p&gt;Be sure to check out the &lt;a href=&quot;/readme/stacks&quot;&gt;stack documentation&lt;/a&gt; for all the functionality the resulting stack will have!&lt;/p&gt;
</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/pod-getfiles</guid>
         <pubDate>2009-12-03T02:36:39-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$file-&gt;src()</title>
         <link>http://peoplepods.net/readme/file-src</link>
         <description>&lt;pre&gt;
$src = $file-&gt;src($max_width,$square=false);
&lt;/pre&gt;

&lt;p&gt;This function will resize the image to $max_width pixels wide and return the URL for the new image.   If $square is true, the image will also be cropped into a square.&lt;/p&gt;

&lt;p&gt;This function caches the resulting image, so it will only be generated once.&lt;/p&gt;

&lt;pre&gt;
// get a 100 pixel wide image
$src = $image-&gt;src(100);

// get a 50 pixel square image
$src = $image-&gt;src(50,true);
&lt;/pre&gt;

&lt;p&gt;Note: If the image is smaller than $max_width, no resizing will occur.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/file-src</guid>
         <pubDate>2009-12-03T02:34:07-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$file-&gt;download()</title>
         <link>http://peoplepods.net/readme/file-download</link>
         <description>&lt;pre&gt;
// download original file
$file-&gt;download();

// download resized image file
$file-&gt;download(&apos;resized&apos;);

// download thumbnail image file
$file-&gt;download(&apos;thumbnail&apos;);
&lt;/pre&gt;

&lt;p&gt;Cause the contents of the file to be sent to the browser, complete with mime-type headers.  The file will download with the original uploaded file&apos;s name.&lt;/p&gt;
</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/file-download</guid>
         <pubDate>2009-12-03T02:29:29-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$file-&gt;isImage()</title>
         <link>http://peoplepods.net/readme/file-isimage</link>
         <description>&lt;p&gt;Returns true if the file is an image file, false if it is any other kind of file.&lt;/p&gt;

&lt;p&gt;Image files include jpg, gif and png files.&lt;/p&gt;

</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/file-isimage</guid>
         <pubDate>2009-12-03T02:24:56-08:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>README</title>
         <link>http://peoplepods.net/readme/index</link>
         <description>&lt;p&gt;
Welcome to the PeoplePods documentation!
Below, we&apos;ve collected links to the high level documentation.  Many more pages of documentation, including descriptions of every object and every function, can be found by following these links.
If you cannot find an answer to your question, &lt;a href=&quot;/forum&quot;&gt;visit the forum&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;Getting Started&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/readme/what-is-peoplepods&quot;&gt;What is PeoplePods?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/readme/installing-peoplepods&quot;&gt;Installing PeoplePods&lt;/a&gt;

&lt;p&gt;&lt;a href=&quot;/readme/core-pods&quot;&gt;Core Pods&lt;/a&gt;

&lt;p&gt;&lt;a href=&quot;/readme/sdk-quick-start-guide&quot;&gt;SDK Quick Start Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/readme/all&quot;&gt;ALL of the documentation on ONE GIANT PAGE&lt;/a&gt; - handy if you need to quickly search for something.&lt;/p&gt;

&lt;h3&gt;Developing with PeoplePods&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/readme/themes&quot;&gt;Themes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/readme/sdk&quot;&gt;SDK Documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/readme/object-definitions&quot;&gt;Object Definitions&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Tutorials&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;/readme/creating-new-pods&quot;&gt;Creating new pods&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/readme/new-content-type&quot;&gt;Creating new content types&lt;/a&gt;
</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/index</guid>
         <pubDate>2009-10-29T02:30:20-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$POD-&gt;registerPOD()</title>
         <link>http://peoplepods.net/readme/pod-registerpod</link>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/pod-registerpod</guid>
         <pubDate>2009-09-11T11:00:12-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Creating a new content type</title>
         <link>http://peoplepods.net/readme/new-content-type</link>
         <description>&lt;P&gt;To create a new content type, use the core_usercontent pod as an example.  This pod contains several files, including generic handlers for adding and editing content, viewing permalinks, viewing lists of content, adding comments, add accepting votes.&lt;/p&gt;

&lt;P&gt;You can customize the content type by editing a simple config file and creating a few templates in your theme!  However, you&apos;ll probably want to dig deeper into the code to add special functionality.&lt;/p&gt;



&lt;P&gt;1) Copy core_usercontent pod to a new name&lt;/p&gt;

&lt;pre&gt;
cp -R core_usercontent content_post
&lt;/pre&gt;

2) Edit the content_type.php file. This file contains information used by all the other files.

&lt;P&gt;Set the $content_type variable to a short name for the new content type.  No spaces!&lt;/p&gt;
&lt;pre&gt;
	$content_type =&apos;post&apos;;
&lt;/pre&gt;

&lt;p&gt;Set the $permamlink variable tp first part of the permalink.  This will be used to make links to each piece of content, as well as to the list of most recent content.  We&apos;ll use &quot;blog.&quot;  This means we can get a list of new posts at /blog and each post will be located at /blog/title-of-post&lt;/p&gt;

&lt;pre&gt;
	$permalink = &apos;blog&apos;;
&lt;/pre&gt;

&lt;p&gt;Set the edit/add url.  This means I can go to /edit to create a new post.&lt;/p&gt;

&lt;pre&gt;
$edit_link = &quot;edit&quot;;
&lt;/pre&gt;

&lt;p&gt;Change the name of the edit form template.  This template will be located in the theme/content folder and will be used on the add/edit page&lt;/p&gt;

&lt;pre&gt;
	$input_template = &apos;postform&apos;;
&lt;/pre&gt;

&lt;p&gt;Change the name of the default output template for the content permalink:
&lt;pre&gt;
	$output_template = &apos;post&apos;;
&lt;/pre&gt;

&lt;P&gt;Change the $pod_dir variable to the same name as the folder you created in step 1.&lt;/p&gt;

&lt;pre&gt;
	$pod_dir = &quot;content_post&quot;;
&lt;/pre&gt;

&lt;p&gt;3) Go into your theme content directory.  Copy editform.php to the new template you referenced in step 2.&lt;/p&gt;

&lt;pre&gt;
cp editform.php postform.php
&lt;/pre&gt;

&lt;p&gt;4) Make changes to the form design and fields.&lt;/p&gt;

&lt;p&gt;You can create meta fields by naming them meta_&lt;i&gt;fieldname&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;You can attach files by simply creating file inputs.  The files will be named the same as thing as the input.&lt;/p&gt;

&lt;p&gt;For example, if we wanted to add a meta field named &quot;Via&quot; we could add this to our form:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;input type=&quot;text&quot; name=&quot;meta_via&quot; value=&quot;&quot; /&amp;gt;
&lt;/pre&gt;


&lt;p&gt;5) Copy output.php to the the new template you referenced in step 2.&lt;/p&gt;

&lt;pre&gt;
cp output.php post.php
&lt;/pre&gt;

&lt;p&gt;6) Load the PeoplePods Command Center, go to Options-&gt;Plugin Pods and turn on your new custom content type pods.  They&apos;ll be called contenttype_YOURCONTENTTYPE_add, contenttype_YOURCONTENTTYPE_edit, and contenttype_YOURCONTENTTYPE_list.


&lt;p&gt;7) Navigate to your new add/edit screen.  You should see your new form.  Create your first test post!&lt;/p&gt;

&lt;p&gt;8) Your new post should show up at the top of your content list.  Click on it.  You should see that it goes to a new permalink url as descrived in step 2.  But the template is the generic template!&lt;/p&gt;

&lt;p&gt;9) Go back to your theme directory and customize post.php

&lt;p&gt;VOILA!&lt;/p&gt;

&lt;p&gt;You may want to change the access restrictions on your new content type pods.  For example, you may want to restrict the add/edit pod to admin users.  You can do this by changing the &apos;lockdown&apos; parameter in the pod files.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/new-content-type</guid>
         <pubDate>2009-09-07T10:21:25-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Creating New Pods</title>
         <link>http://peoplepods.net/readme/creating-new-pods</link>
         <description>&lt;p&gt;Pods are reusable modules that define areas of functionality on a PeoplePods site.  Each pod lives in it&apos;s own folder, and contains the following elements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A file called &apos;settings.php&apos; which contains an API call that describes the pod and how it works to PeoplePods.&lt;/li&gt;
&lt;li&gt;One or more script files containing PHP code and &lt;a href=&quot;/readme/sdk&quot;&gt;SDK calls&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Any custom template files referenced within the scripts.&lt;/li&gt;
&lt;/ul&gt;

&lt;P&gt;In this tutorial, we will explain each of these components and walk you through the creation of a new pod.  This example pod will create a welcome page that displays a personalized message to the visitor.&lt;/p&gt;

&lt;h3&gt;Set Up Your New Pod&lt;/h3&gt;

&lt;p&gt;The first step to creating a new pod is to create a new folder in your PeoplePod&apos;s installation under the &lt;i&gt;pods/&lt;/i&gt; folder.  The name of the folder should match the name of your new pod.  For our example, we&apos;ll create a folder called &quot;custom_welcome&quot;&lt;/p&gt;

&lt;p&gt;Inside this folder, immediately create two files blank files: settings.php and index.php.&lt;/p&gt;

&lt;p&gt;Once you&apos;re done, you should have a file structure something like this:&lt;/p&gt;

&lt;pre&gt;
/mywebsite/peoplepods/pods/custom_welcome/settings.php

/mywebsite/peoplepods/pods/custom_welcome/index.php
&lt;/pre&gt;

&lt;h3&gt;Settings.php&lt;/h3&gt;

&lt;p&gt;The settings.php file tells PeoplePods how to integrate the pods functionality into the site.   It tells PeoplePods what the pods name is, describes it&apos;s functionality, sets up the path to the new functionality, and defines any system-wide variables the pod requires.&lt;/p&gt;

&lt;p&gt;This file should contain just one command, a call to &lt;a href=&quot;/readme/pod-registerpod&quot;&gt;$POD-&gt;registerPOD()&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For our example pod, we&apos;ll put the following code:&lt;/p&gt;

&lt;pre&gt;
$POD-&gt;registerPOD(
  &apos;custom_welcome&apos;,
  &apos;display a custom welcome page&apos;,
  array(
    &apos;^welcome&apos;=&gt;&apos;custom_welcome/index.php&apos;
  ),
  array()
);
&lt;/pre&gt;

&lt;P&gt;SWEET FANCY MOSES, that looks complicated!   But don&apos;t fret! Let&apos;s break it down.&lt;/p&gt;

&lt;p&gt;The first parameter we pass to registerPOD is the name of the pod.  This is the same as the name of the folder you created above.&lt;/p&gt;

&lt;p&gt;The second parameter is a short description of the pod. This is what will be displayed in the &lt;a href=&quot;/readme/admin-tools&quot;&gt;admin tools&lt;/A&gt;.&lt;/p&gt;

&lt;p&gt;The third parameter is where we start to get tricky.  This parameter is an array that defines the URL mapping, which is then used to build one or more mod_rewrite rules that tell your web server what to do.  For each URL pattern you want to map, you&apos;ll add a value to this array.&lt;/p&gt;

&lt;p&gt;In our example above, we are mapping the url /welcome to the code contained within the index.php script.  That is, once this pod is enabled, the url &quot;http://mywebsite.com/welcome&quot; will actually execute the code inside this pod.&lt;/p&gt;

&lt;P&gt;This pattern can contain multiple parameters, and may include wildcards.  This allows you to define patterns that actually define many dynamic pages, such as content permalink pages.  Read the &lt;A href=&quot;/readme/pod-registerpod&quot;&gt;registerPOD() page&lt;/a&gt; for information on how to construct these patterns.&lt;/p&gt;

&lt;p&gt;The final parameter is an optional array of key/value pairs that will be available to all of PeoplePods when this pod is enabled.  For this example pod, we don&apos;t need anything here.  This parameter is most often used to define the permalink structure for &lt;A href=&quot;/readme/new-content-type&quot;&gt;new content types&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Index.php&lt;/h3&gt;

&lt;p&gt;The index.php file contains the actual code of the module.   You may have all of your code in one file, or you may have multiple files that provide different pieces of the functionality.   Regardless, each file will follow the same basic structure.&lt;/p&gt;

&lt;P&gt;The first thing we need to put in this file is a call to include the PeoplePods library and boot up the $POD object.  As part of the boot up, we pass in the authentication cookie that identifies the current user, a parameter that describes the minimum access level a person must have to access the pod, and a debug level.  These options are described in more detail &lt;a href=&quot;/readme/peoplepods-object&quot;&gt;here&lt;/a&gt;.  In this example, we are not putting any access restrictions on this page, and we&apos;re turning off the debug information.&lt;/p&gt;

&lt;pre&gt;
include_once(&quot;../../PeoplePods.php&quot;);
$POD = new PeoplePod(array(
  &apos;authSecret&apos;=&gt;$_COOKIE[&apos;pp_auth&apos;],
  &apos;lockdown&apos;=&gt;null,
  &apos;debug&apos;=&gt;0
));
&lt;/pre&gt;

&lt;p&gt;After the $POD has been created, you&apos;ll want to actually do something with it.   We&apos;ll start off by calling the &lt;a href=&quot;/readme/pod-header&quot;&gt;header()&lt;/a&gt; and &lt;a href=&quot;/readme/pod-footer&quot;&gt;footer()&lt;/a&gt; functions which will wrap the pod&apos;s output in the site&apos;s header and footer:&lt;/p&gt;

&lt;pre&gt;
include_once(&quot;../../PeoplePods.php&quot;);
$POD = new PeoplePod(array(
  &apos;authSecret&apos;=&gt;$_COOKIE[&apos;pp_auth&apos;],
  &apos;lockdown&apos;=&gt;null,
  &apos;debug&apos;=&gt;0
));

$POD-&gt;header(&apos;Welcome!&apos;);

// the pod&apos;s main code will go here

$POD-&gt;footer();
&lt;/pre&gt;

&lt;p&gt;Now, all that&apos;s left is to write the custom code that will power the pod.  Like any PHP script, you can put code and HTML markup here, though most of the markup should live in &lt;A href=&quot;/readme/themes&quot;&gt;template files&lt;/a&gt;.  For this example, we&apos;ll start by putting everything in the pod file, then later we&apos;ll move some of it into a new template file.&lt;/p&gt;

&lt;p&gt;For our example, we&apos;re going to do something really, really basic: print a personalized welcome message to the current visitor.   The visitor may be a member of the site, or they may be anonymous - that is, not logged in.  So we&apos;ll have to tap into the PeoplePods library to do some basic logic - checking to see if the person is authenticated, then printing one of two messages.   Put this code in between the calls to header() and footer().&lt;/p&gt;

&lt;pre&gt;
if ($POD-&gt;isAuthenticated()) { 
  echo &quot;Welcome back, &quot;;
  $POD-&gt;currentUser()-&gt;write(&apos;nick&apos;);
} else {
  echo &quot;Hello stranger!  Welcome to PeoplePods.&quot;;
}
&lt;/pre&gt;

&lt;p&gt;At this point, you&apos;ve got a fully functioning pod!  Save the index.php file and the settings.php file, and load up your PeoplePods admin tool.  Navigate to Options -&gt; Plugin Pods, and you should the name and description of your new pod in the list.   Click &quot;Turn On&quot; to enable the pod.  If everything has been set up correctly, you should now be able to navigate to &quot;http://mywebsite.com/welcome&quot; and see the output of the new pod, which should look something like this:

&lt;pre&gt;
Welcome back, admin
&lt;/pre&gt;

&lt;p&gt;Wow!  Wow!&lt;/p&gt;

&lt;p&gt;Ok, it is a bit boring.  Let&apos;s give the visitor a little something extra to look at.  How about a list of the most recent content posted to the site?   Easy!  
We&apos;ll just use the &lt;a href=&quot;/readme/pod-getcontents&quot;&gt;getContents()&lt;/a&gt; function.  (This is a very simple use of this function - check the function page for more information on customizing what content you load.)  This code will load the most recent content of any type, then print out a paragraph for each post with a link to the post and a timestamp.  Add it underneath the code you just added:&lt;/p&gt;

&lt;pre&gt;
$recent_posts = $POD-&gt;getContents();
foreach($recent_posts as $post) {
  echo &quot;&amp;lt;p&amp;gt;&quot;;
  $post-&gt;permalink();
  echo &quot;, posted &quot;;
  $post-&gt;write(&apos;timesince&apos;);  
  echo &quot;&amp;lt;/p&amp;gt;&quot;
}
&lt;/pre&gt;

&lt;p&gt;Now, you&apos;re output will look something like this:&lt;/p&gt;

&lt;pre&gt;
Welcome back, admin

Post #5, posted 15 minutes ago

Post #4, posted 20 minutes ago

Post #3, posted 1 hour ago

Post #2, posted 1 day ago

Post #1, posted 5 days ago
&lt;/pre&gt;

&lt;p&gt;Not too shabby!  But having the markup of the content list in the pod is a bit messy, and will make the pod more difficult to manage in the future when modifications to the output styles are required.   We can fix this by moving the markup for the content into a new template file.&lt;/p&gt;

&lt;h3&gt;Custom Template Files&lt;/h3&gt;

&lt;p&gt;PeoplePods allows you to create template files for any bit of markup or code you are going to use or reuse.  This allows you to separate the application logic from your presentation.&lt;/p&gt;

&lt;p&gt;Template files are located inside of themes, which are located in the &lt;i&gt;themes/&lt;/i&gt; folder of your PeoplePods installation.  By default, PeoplePods uses a theme called &lt;i&gt;default&lt;/i&gt;, located in &lt;i&gt;themes/default/&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;Inside each theme are many template files, spread across a few folders.  Template files for outputting a person object are inside the &lt;i&gt;people/&lt;/i&gt; folder, whereas template files for outputting a content object are inside the &lt;i&gt;content/&lt;/i&gt; folder.&lt;/p&gt;

&lt;p&gt;For this example, we are going to create a new template file inside the &lt;i&gt;content/&lt;/i&gt; folder called &quot;&lt;i&gt;recent_post.php&lt;/i&gt;&quot;  So, when you&apos;re done, your file structure should be:&lt;/p&gt;

&lt;pre&gt;
/mywebsite/peoplepods/themes/default/content/recent_post.php
&lt;/pre&gt;

&lt;p&gt;Inside this file, we want to put the code and markup that represents the output of one piece of content.  This code and markup will then be re-used for each item in the $recent_posts list.   Inside the template, we still have access to the $POD variable, and we also have a new variable called &lt;i&gt;$content&lt;/i&gt; which represents the piece of content that is being displayed.   So, inside of recent_post.php, put the following code:&lt;/p&gt;

&lt;pre&gt;
  echo &quot;&amp;lt;p&amp;gt;&quot;;
  $content-&gt;permalink();
  echo &quot;, posted &quot;;
  $content-&gt;write(&apos;timesince&apos;);  
  echo &quot;&amp;lt;/p&amp;gt;&quot;
&lt;/pre&gt;

&lt;p&gt;Save the new template file.  Now, go back to your pod&apos;s index.php file and strip out the markup that you just moved to the template, and replace it with a call to the content object&apos;s &lt;a href=&quot;/readme/content-output&quot;&gt;output() function&lt;/a&gt;.  Notice that we pass in the name of the new template file to the output function.&lt;/p&gt;

&lt;pre&gt;
foreach ($recent_posts as $post) {
  $post-&gt;output(&apos;recent_post&apos;);
}
&lt;/pre&gt;

&lt;p&gt;Save your index.php file, and reload the welcome page in your browser.  The output should look exactly the same as before!&lt;/p&gt;

&lt;p&gt;If we wanted to be extra clever, we could shorten this code even further by using stack object&apos;s &lt;a href=&quot;/readme/stack-output&quot;&gt;output() function&lt;/a&gt;.  This is just like the content object&apos;s output function, except that it will cause each item in the stack to output itself without having to use the foreach() loop:&lt;/p&gt;

&lt;pre&gt;
$recent_posts-&gt;output(&apos;recent_post&apos;);
&lt;/pre&gt;

&lt;p&gt;Again, the output should be exactly the same as before.&lt;/p&gt;

&lt;p&gt;It should be noted that, theoretically, we could also move the actual welcome message to a template within the &lt;i&gt;people/&lt;/i&gt; folder, and instead of printing it in the pod&apos;s code, simply call the &lt;a href=&quot;/readme/person-output&quot;&gt;output() function&lt;/a&gt; on the person object.   However, since we&apos;re not going to be reusing that markup anywhere, and because it only appears once on the page, it&apos;s not necessary to add another template file in this case.&lt;/p&gt;

&lt;p&gt;Our completed pod code should now look like this:&lt;/p&gt;

&lt;pre&gt;
include_once(&quot;../../PeoplePods.php&quot;);
$POD = new PeoplePod(array(
  &apos;authSecret&apos;=&gt;$_COOKIE[&apos;pp_auth&apos;],
  &apos;lockdown&apos;=&gt;null,
  &apos;debug&apos;=&gt;0
));

$POD-&gt;header(&apos;Welcome!&apos;);

if ($POD-&gt;isAuthenticated()) { 
  echo &quot;Welcome back, &quot;;
  $POD-&gt;currentUser()-&gt;write(&apos;nick&apos;);
} else {
  echo &quot;Hello stranger!  Welcome to PeoplePods.&quot;;
}

$recent_posts = $POD-&gt;getContents();
$recent_posts-&gt;output(&apos;recent_post&apos;);

$POD-&gt;footer();
&lt;/pre&gt;

&lt;p&gt;At this point, you&apos;ve got a fully functioning custom pod!  You can turn it on and off via the admin tools, and you can customize its display by modifying the recent_post template file instead of hacking into the pod&apos;s code.  You can even share this pod with other PeoplePod&apos;s sites by simply zipping up the &lt;i&gt;custom_welcome/&lt;/i&gt; folder and sending it to other developers.&lt;/p&gt;

&lt;h3&gt;Further Reading&lt;/h3&gt;

&lt;p&gt;If you are going to develop your own pods, you will definitely want to familiarize yourself with the &lt;a href=&quot;/readme/sdk&quot;&gt;PeoplePods SDK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The best way to start a new pod - the way we do it in the home office - is to copy &lt;a href=&quot;/readme/core-pods&quot;&gt;an existing pod&lt;/a&gt; and make modifications.&lt;/p&gt;

&lt;p&gt;We anticipate that one of the most popular uses of custom pods will be to create interfaces for new content types - that is, to add functionality to the site to support the creation and display of custom information.  For details on how to make this specific kind of pod, read &lt;a href=&quot;/readme/new-content-type&quot;&gt;read this tutorial.&lt;/a&gt;&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/creating-new-pods</guid>
         <pubDate>2009-09-07T02:36:35-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Core Pods</title>
         <link>http://peoplepods.net/readme/core-pods</link>
         <description>&lt;p&gt;&lt;strong&gt;core_api_simple&lt;/strong&gt; provides a simple RESTful JSON api to many of the common functions you&apos;ll need to implement Ajax controsl.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_authentication&lt;/strong&gt; provides everything you need to enable visitors to join your site, verify their accounts, and manage their security preferences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_feeds&lt;/strong&gt; provides a flexible method for producing lists and feeds of documents that match certain conditions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_files&lt;/strong&gt; handles file attachements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_friends&lt;/strong&gt; provides a friend management interface with friends, followers, and recommended friends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_groups&lt;/strong&gt; provides an interface for members to create and join groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_invite&lt;/strong&gt; provides an email invitation tool so that members can invite their friends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_newest&lt;/strong&gt; provides a simple list of the newest posts on the site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_private_messaging&lt;/strong&gt; provides the ability for members to send messages to one another on the site, and to manage these conversations in an onsite inbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_profiles&lt;/strong&gt; provides member with ability to create and modify personal profiles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_search&lt;/strong&gt; provides an interface for searching the content and the members of the site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;core_usercontent&lt;/strong&gt; provides a default handler for generic content.  creates the add/edit screen, the permalink pages, and the reverse cron list of content.  Can be customized to create new content types!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;dashboard&lt;/strong&gt; provides a customized activity dashboard for members including new content from their friends, as well as new comments on content they&apos;re interested in.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/core-pods</guid>
         <pubDate>2009-09-07T02:36:24-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Admin Tools</title>
         <link>http://peoplepods.net/readme/admin-tools</link>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/admin-tools</guid>
         <pubDate>2009-09-07T02:36:09-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>Installing PeoplePods</title>
         <link>http://peoplepods.net/readme/installing-peoplepods</link>
         <description>&lt;p&gt;To install PeoplePods, you will need a web server, a MySQL database server, and a copy of the PeoplePods code.&lt;/p&gt;

&lt;p&gt;NOTE: The PeoplePods archive contains a README.txt file which may have more up-to-date instructions!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the latest version of PeoplePods from &lt;a href=&quot;http://peoplepods.net/&quot;&gt;PeoplePods.net&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Upload the archive to your web server and place it in whatever directory you want PeoplePods to live in.&lt;p&gt;All of the PeoplePods code will live in a sub-folder of your website called &quot;peoplepods/&quot; that is created when you uncompress the tarball.  Thus, if you want PeoplePods functionality to be present on the homepage of your site, you&apos;d place the tarball in the root directory of your site.   If you want PeoplePods functionality to live in a sub-folder such as myurl.com/community, place the tarball into that folder.&lt;/p&gt;
&lt;pre&gt;
Example

My web root is: /var/www/httpdocs
My domain is: http://myurl.com

If I want PeoplePods to control the homepage and other root
 elements of my site, I decompress my tarball into my webroot,
 and end up with:

PeoplePods folder is: /var/www/httpdocs/peoplepods
PeoplePods admin tool: http://myurl.com/peoplepods/
PeoplePods homepage: http://myurl.com

If I want PeoplePods to live in a sub-folder of my site, I would
 decompress my tarball into that subfolder, and end up with:

PeoplePods folder is: /var/www/httpdocs/my_sub_folder/peoplepods
PeoplePods admin tool: http://myurl.com/my_sub_folder/peoplepods/
PeoplePOds homepage: http://myurl.com/my_sub_folder/
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Uncompress your PeoplePods tarball into your web folder
&lt;pre&gt;
      &gt; tar -zxvf peoplepods-0.667.tar.gz
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;This will create a new folder called peoplepods/ inside of which lives all of the PeoplePods code and configuration.&lt;/li&gt;
&lt;li&gt;Create a fresh, empty database on your MySQL server.  Note the name of the database as well as the username and password.&lt;/li&gt;
&lt;li&gt;Before running the install, you will need to set the permissions on several folders.   Change the permissions on files/ and lib/etc to 777:
&lt;pre&gt;
      &gt; chmod -R 777 peoplepods/files
      &gt; chmod 777 peoplepods/lib/etc
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Visit your new PeoplePods installaton in a browser.   Load http://myurl.com/peoplepods&lt;/li&gt;
&lt;li&gt;The automatic installation process should take over.  Enter details about the site and about the database.&lt;/li&gt;
&lt;li&gt;Once the installation has completed, visit the PeoplePods admin tool and turn on some built in functionality by using the Options -&gt; Plugin Pods menu.  NOTE: The site will not be functional until you turn on some of the built in pods!&lt;/li&gt;
&lt;li&gt;Visit your new PeoplePods powered site!&lt;/li&gt;
&lt;/ol&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/installing-peoplepods</guid>
         <pubDate>2009-09-07T02:36:00-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>SDK Documentation</title>
         <link>http://peoplepods.net/readme/sdk</link>
         <description>&lt;p&gt;&lt;strong&gt;If you are anxious to get hacking, we recommend the &lt;a href=&quot;/readme/sdk-quick-start-guide&quot;&gt;SDK Quick Start Guide&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the core of PeoplePods is an object oriented programming library that provides much of the functionality required for building today&apos;s modern social applications.  It provides a generic interface to create and manage content, members, and member activities.&lt;/p&gt;

&lt;p&gt;If you are not familiar with the &lt;a href=&quot;http://en.wikipedia.org/wiki/Object_oriented_programming&quot;&gt;basics of object oriented programming&lt;/a&gt;, take some time to read up before proceeding.   In short, object oriented programming, or OOP, allows you to bundle pieces of data and functionality together into logical units.  PeoplePods provides &lt;a href=&quot;/readme/object-definitions&quot;&gt;a variety of different objects&lt;/a&gt; that represent different kinds of information.&lt;/p&gt;

&lt;p&gt;For example, in PeoplePods, each member is represented by a &lt;a href=&quot;/readme/person-object&quot;&gt;person object&lt;/a&gt;.  The object contains information about the member, such as the name and email address used to sign up, as well as functions available to that member, such as adding a friend or bookmarking a page.  Here is a tiny snippet of code to illustrate this concept:&lt;/p&gt;

&lt;pre&gt;
// get my person object from the main POD object
$member = $POD-&gt;currentUser();

// write out some information about this person
echo &quot;My email address is:&quot;;
$member-&gt;write(&apos;email&apos;);

// add some content to this person&apos;s favorite list
$member-&gt;addFavorite($post);
&lt;/pre&gt;

&lt;p&gt;All of the functionality within a PeoplePods application originates from a single &lt;a href=&quot;/readme/peoplepods-object&quot;&gt;PeoplePods object&lt;/a&gt;.  We recommend developers name their parent object $POD, as this convention is used within many of the templates and sub-functions in the library.&lt;/p&gt;

&lt;pre&gt;
$POD = new PeoplePod();
$content = $POD-&gt;getContent();
$person = $POD-&gt;getPerson();
&lt;/pre&gt;

&lt;h3&gt;Core Concepts&lt;/h3&gt;

&lt;p&gt;&lt;b&gt;Generic Interfaces&lt;/b&gt; One of the main ideas behind PeoplePods is that it should be provide access to all sorts of content using the same set of functions.  That is, you can use the same function with the same syntax to load blog posts as you would to load calendar events.  Similarly, a generic system has been provided so that new types of relationships between memberships can be defined - friends, enemies, family, etc - that use the same syntax and provide the same access methods.  What this means is, you only have to master a few simple functions to gain access to all of the power of PeoplePods.&lt;/p&gt;

&lt;p&gt;This generic access is provided by &lt;a href=&quot;/readme/object-definitions&quot;&gt;the core objects&lt;/a&gt; such as &lt;a href=&quot;/readme/stacks&quot;&gt;$Stack&lt;/a&gt;, as well as the &lt;a href=&quot;/readme/flags&quot;&gt;flagging module&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Ad Hoc Data Definition&lt;/b&gt; PeoplePods is different from many content management systems in that it does not require you to pre-define your content types or database schema.  It uses a generic schema and the powers of it&apos;s underlying relational database system to allow you to create new fields on any content type at any time, and to define new content types on the fly.  The &lt;a href=&quot;/readme/admin-tools&quot;&gt;admin tools&lt;/a&gt; will automatically adapt to the new content types you create.

&lt;p&gt;This functionality is provided by the &lt;a href=&quot;/readme/meta-fields&quot;&gt;meta field module&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Building New Functionality&lt;/h3&gt;

&lt;p&gt;Unlike many website building systems available today, PeoplePods was not designed to create a specific type of website - a blog, for example.  There are no limits to the type of pages present on the site, and there is no predefined structure inherent to a PeoplePods site.  This allows developers to freely define new types of content and areas of functionality by building plugin pods, or by using PeoplePods functionality in other scripts.&lt;/p&gt;

&lt;h3&gt;Plugin Pods&lt;/h3&gt;

&lt;p&gt;PeoplePods has a simple plugin structure called &quot;Pods&quot; which allows developers to create reusable modules that define different functions of the site.  It is helpful to think of each pod as defining a specific page type.&lt;/p&gt;

&lt;p&gt;For example, one pod creates member profiles.  Another creates content permalink pages.   Yet another creates a personalized dashboard page.&lt;/p&gt;

&lt;p&gt;Using the pod plugin system has a variety of advantages, and is the recommended method for creating new functionality within your PeoplePods site.   Pods automatically map their functionality to friendly URLs, provide role-based security, and can be toggled on and off within the &lt;a href=&quot;/readme/admin-tools&quot;&gt;admin tools&lt;/a&gt;.

&lt;p&gt;We highly recommend using one of the &lt;a href=&quot;/readme/core-pods&quot;&gt;core pods&lt;/a&gt; as the basis for any new pods you create.  Doing this will provide you with a template for all the necessary components.&lt;/p&gt;

&lt;p&gt;Read the &lt;a href=&quot;/readme/creating-new-pods&quot;&gt;instructions for creating new pods&lt;/a&gt;, or the more specific instructions on &lt;a href=&quot;/readme/new-content-type&quot;&gt;create a pod that will create a new content type&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Stand Alone Scripts&lt;/h3&gt;

&lt;p&gt;If you don&apos;t want to play by our rules, you can use PeoplePods in normal PHP scripts. All one must do is include the PeoplePods library into the script:&lt;/p&gt;

&lt;pre&gt;
require_once(&quot;$podlib/PeoplePods.php&quot;);
$POD = new PeoplePod();
&lt;/pre&gt;

&lt;p&gt;After creating the $POD object, all of the power of PeoplePods is available for use in that script.  This makes it easy to add PeoplePods functionality to existing scripts - such as creating dynamic and personalized sidebars.&lt;/p&gt;

&lt;p&gt;It is important to note that the difference between a stand alone script and a full pod is relatively minor - a pod simply provides extra information on how the script should be integrated into the site, whereas a stand alone script is just a script.  This might mean the difference between having a pretty URL like &quot;mysite.com/people/chester&quot; and and ugly one like &quot;mysite.com/scripts/profilescript.php?username=chester&quot;  Of course, talented developers can fix this problem using &lt;a href=&quot;http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html&quot;&gt;mod_rewrite&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Hack Yourself Crazy&lt;/h3&gt;

&lt;p&gt;We highly recommend that you explore the code of the SDK library.  We have made every effort to make our code as readable and well organized as possible with the hopes that skilled developers will be able to modify and expand the provided functionality as necessary.   In many cases, creating custom functionality may be as easy as cutting and pasting a few lines of code, then tweaking a parameter or two.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/sdk</guid>
         <pubDate>2009-09-02T03:01:26-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Stack-&gt;sortBy()</title>
         <link>http://peoplepods.net/readme/stack-sortby</link>
         <description>&lt;pre&gt;
$Stack-&gt;sortBy($field,$reverse=false);
&lt;/pre&gt;

&lt;p&gt;Resort the contents of the stack by $field.  You can also sort by meta fields!&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/stack-sortby</guid>
         <pubDate>2009-09-02T02:56:02-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Stack-&gt;totalCount()</title>
         <link>http://peoplepods.net/readme/stack-totalcount</link>
         <description>&lt;p&gt;Returns the total number of items available to the stack in the database.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/stack-totalcount</guid>
         <pubDate>2009-09-02T02:55:00-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
      <item>
         <title>$Stack-&gt;count()</title>
         <link>http://peoplepods.net/readme/stack-count</link>
         <description>&lt;p&gt;Returns the number of items currently in the stack.&lt;/p&gt;</description>
         <author>benbrown&lt;http://peoplepods.net/people/benbrown&gt;</author>
         <guid>http://peoplepods.net/readme/stack-count</guid>
         <pubDate>2009-09-02T02:54:22-07:00</pubDate>
         <source url="http://peoplepods.net">PeoplePods.net</source>
      </item>
   </channel>
</rss>