<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://gwiki3.thatlinuxbox.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TimPatrick</id>
		<title>GeeklogWiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://gwiki3.thatlinuxbox.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TimPatrick"/>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/Special:Contributions/TimPatrick"/>
		<updated>2026-04-06T05:15:49Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.5</generator>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5847</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5847"/>
				<updated>2010-08-16T21:49:38Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
'''NOTE: This guide is IN PROGESS so until this message is removed then the information is NOT COMPLETE'''&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
All data (Group, Feed, Subscriber, and Data information) are passed to and from methods using objects. These objects are GroupObject, FeedObject, DataObject, SecurityObject. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;MAKE SURE TO READ THE DOCUMENTATION FOR EACH METHOD&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following is a list of classes for manipulating the basic structures for publishing&lt;br /&gt;
&lt;br /&gt;
* Managing groups - PublishingGroupControl&lt;br /&gt;
* Managing feeds - PublishingFeedControl&lt;br /&gt;
* Managing data - PublishingDataControl&lt;br /&gt;
* Managing security and subscriptions - PublishingSecurityManagement&lt;br /&gt;
* Managing types - TypeObject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For receiving, there is only one class&lt;br /&gt;
&lt;br /&gt;
* ReceivingControlManagement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle($title)&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Code Study - Autoinstall and creating a no display group&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$pgc = new PublishingGroupControl();&lt;br /&gt;
$groupObject = new GroupObject();&lt;br /&gt;
&lt;br /&gt;
// Fill the group object&lt;br /&gt;
$groupObject-&amp;gt;_Title = &amp;quot;Cross Site Alert Plugin - csa - % -100&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Summary = &amp;quot;Cross site alert plugin only group&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Type = TypeObject::O_PUBLIC; // Always make the no display group public&lt;br /&gt;
&lt;br /&gt;
// Create the group&lt;br /&gt;
try {&lt;br /&gt;
    $pgc-&amp;gt;createGroup($groupObject, TRUE); // Create the group with no display on. Since no display is on, the % sign is OK. However if it was no a no display group, the % is reserved.&lt;br /&gt;
} catch(PublishingException $p) {&lt;br /&gt;
    echo &amp;quot;HELP&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basis to any successful integration of the CSPR is understanding the two sections - the server or repository and the client. You may only want one or both of the sections depending on what your plugin is designed to do. &lt;br /&gt;
The actual data in a feed is bound to a unique Access Code that identifies the destination for the data. For example, the access code will determine what plugin or use the data is used for.&lt;br /&gt;
You can register a new access code at the main geeklog site for use with your plugin. You are also able to use an existing access code for your plugin if you want to use data intending for another use.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5846</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5846"/>
				<updated>2010-08-16T21:49:07Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
All data (Group, Feed, Subscriber, and Data information) are passed to and from methods using objects. These objects are GroupObject, FeedObject, DataObject, SecurityObject. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;MAKE SURE TO READ THE DOCUMENTATION FOR EACH METHOD&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following is a list of classes for manipulating the basic structures for publishing&lt;br /&gt;
&lt;br /&gt;
* Managing groups - PublishingGroupControl&lt;br /&gt;
* Managing feeds - PublishingFeedControl&lt;br /&gt;
* Managing data - PublishingDataControl&lt;br /&gt;
* Managing security and subscriptions - PublishingSecurityManagement&lt;br /&gt;
* Managing types - TypeObject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For receiving, there is only one class&lt;br /&gt;
&lt;br /&gt;
* ReceivingControlManagement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle($title)&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Code Study - Autoinstall and creating a no display group&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$pgc = new PublishingGroupControl();&lt;br /&gt;
$groupObject = new GroupObject();&lt;br /&gt;
&lt;br /&gt;
// Fill the group object&lt;br /&gt;
$groupObject-&amp;gt;_Title = &amp;quot;Cross Site Alert Plugin - csa - % -100&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Summary = &amp;quot;Cross site alert plugin only group&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Type = TypeObject::O_PUBLIC; // Always make the no display group public&lt;br /&gt;
&lt;br /&gt;
// Create the group&lt;br /&gt;
try {&lt;br /&gt;
    $pgc-&amp;gt;createGroup($groupObject, TRUE); // Create the group with no display on. Since no display is on, the % sign is OK. However if it was no a no display group, the % is reserved.&lt;br /&gt;
} catch(PublishingException $p) {&lt;br /&gt;
    echo &amp;quot;HELP&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basis to any successful integration of the CSPR is understanding the two sections - the server or repository and the client. You may only want one or both of the sections depending on what your plugin is designed to do. &lt;br /&gt;
The actual data in a feed is bound to a unique Access Code that identifies the destination for the data. For example, the access code will determine what plugin or use the data is used for.&lt;br /&gt;
You can register a new access code at the main geeklog site for use with your plugin. You are also able to use an existing access code for your plugin if you want to use data intending for another use.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5845</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5845"/>
				<updated>2010-08-16T21:44:35Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
All data (Group, Feed, Subscriber, and Data information) are passed to and from methods using objects. These objects are GroupObject, FeedObject, DataObject, SecurityObject. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;MAKE SURE TO READ THE DOCUMENTATION FOR EACH METHOD&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following is a list of classes for manipulating the basic structures for publishing&lt;br /&gt;
&lt;br /&gt;
* Managing groups - PublishingGroupControl&lt;br /&gt;
* Managing feeds - PublishingFeedControl&lt;br /&gt;
* Managing data - PublishingDataControl&lt;br /&gt;
* Managing security and subscriptions - PublishingSecurityManagement&lt;br /&gt;
* Managing types - TypeObject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For receiving, there is only one class&lt;br /&gt;
&lt;br /&gt;
* ReceivingControlManagement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle($title)&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Code Study - Autoinstall and creating a no display group&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$pgc = new PublishingGroupControl();&lt;br /&gt;
$groupObject = new GroupObject();&lt;br /&gt;
&lt;br /&gt;
// Fill the group object&lt;br /&gt;
$groupObject-&amp;gt;_Title = &amp;quot;Cross Site Alert Plugin - csa - % -100&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Summary = &amp;quot;Cross site alert plugin only group&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Type = TypeObject::O_PUBLIC; // Always make the no display group public&lt;br /&gt;
&lt;br /&gt;
// Create the group&lt;br /&gt;
try {&lt;br /&gt;
    $pgc-&amp;gt;createGroup($groupObject, TRUE); // Create the group with no display on. Since no display is on, the % sign is OK. However if it was no a no display group, the % is reserved.&lt;br /&gt;
} catch(PublishingException $p) {&lt;br /&gt;
    echo &amp;quot;HELP&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The basis to any successful integration of the CSPR is understanding the two sections - the server or repository and the client. You may only want one or both of the sections depending on what your plugin is designed to do. &lt;br /&gt;
The actual data in a feed is bound to a unique Access Code that identifies the destination for the data. For example, the access code will determine what plugin or use the data is used for.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5844</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5844"/>
				<updated>2010-08-16T19:30:28Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
All data (Group, Feed, Subscriber, and Data information) are passed to and from methods using objects. These objects are GroupObject, FeedObject, DataObject, SecurityObject. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;MAKE SURE TO READ THE DOCUMENTATION FOR EACH METHOD&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following is a list of classes for manipulating the basic structures for publishing&lt;br /&gt;
&lt;br /&gt;
* Managing groups - PublishingGroupControl&lt;br /&gt;
* Managing feeds - PublishingFeedControl&lt;br /&gt;
* Managing data - PublishingDataControl&lt;br /&gt;
* Managing security and subscriptions - PublishingSecurityManagement&lt;br /&gt;
* Managing types - TypeObject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For receiving, there is only one class&lt;br /&gt;
&lt;br /&gt;
* ReceivingControlManagement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle($title)&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Code Study - Autoinstall and creating a no display group&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$pgc = new PublishingGroupControl();&lt;br /&gt;
$groupObject = new GroupObject();&lt;br /&gt;
&lt;br /&gt;
// Fill the group object&lt;br /&gt;
$groupObject-&amp;gt;_Title = &amp;quot;Cross Site Alert Plugin - csa - % -100&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Summary = &amp;quot;Cross site alert plugin only group&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Type = TypeObject::O_PUBLIC; // Always make the no display group public&lt;br /&gt;
&lt;br /&gt;
// Create the group&lt;br /&gt;
try {&lt;br /&gt;
    $pgc-&amp;gt;createGroup($groupObject, TRUE); // Create the group with no display on. Since no display is on, the % sign is OK. However if it was no a no display group, the % is reserved.&lt;br /&gt;
} catch(PublishingException $p) {&lt;br /&gt;
    echo &amp;quot;HELP&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5843</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5843"/>
				<updated>2010-08-16T19:30:12Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
All data (Group, Feed, Subscriber, and Data information) are passed to and from methods using objects. These objects are GroupObject, FeedObject, DataObject, SecurityObject. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;MAKE SURE TO READ THE DOCUMENTATION FOR EACH METHOD&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following is a list of classes for manipulating the basic structures for publishing&lt;br /&gt;
&lt;br /&gt;
* Managing groups - PublishingGroupControl&lt;br /&gt;
* Managing feeds - PublishingFeedControl&lt;br /&gt;
* Managing data - PublishingDataControl&lt;br /&gt;
* Managing security and subscriptions - PublishingSecurityManagement&lt;br /&gt;
* Managing types - TypeObject&lt;br /&gt;
&lt;br /&gt;
For receiving, there is only one class&lt;br /&gt;
* ReceivingControlManagement&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle($title)&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Code Study - Autoinstall and creating a no display group&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$pgc = new PublishingGroupControl();&lt;br /&gt;
$groupObject = new GroupObject();&lt;br /&gt;
&lt;br /&gt;
// Fill the group object&lt;br /&gt;
$groupObject-&amp;gt;_Title = &amp;quot;Cross Site Alert Plugin - csa - % -100&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Summary = &amp;quot;Cross site alert plugin only group&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Type = TypeObject::O_PUBLIC; // Always make the no display group public&lt;br /&gt;
&lt;br /&gt;
// Create the group&lt;br /&gt;
try {&lt;br /&gt;
    $pgc-&amp;gt;createGroup($groupObject, TRUE); // Create the group with no display on. Since no display is on, the % sign is OK. However if it was no a no display group, the % is reserved.&lt;br /&gt;
} catch(PublishingException $p) {&lt;br /&gt;
    echo &amp;quot;HELP&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5842</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5842"/>
				<updated>2010-08-16T19:22:20Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
All data (Group, Feed, Subscriber, and Data information) are passed to and from methods using objects. These objects are GroupObject, FeedObject, DataObject, SecurityObject. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;MAKE SURE TO READ THE DOCUMENTATION FOR EACH METHOD&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following is a list of classes for manipulating the basic structures for publishing&lt;br /&gt;
&lt;br /&gt;
* Managing groups - PublishingGroupControl&lt;br /&gt;
* Managing feeds - PublishingFeedControl&lt;br /&gt;
* Managing data - PublishingDataControl&lt;br /&gt;
* Managing security and subscriptions - PublishingSecurityManagement&lt;br /&gt;
* Managing types - TypeObject&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle($title)&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Code Study - Autoinstall and creating a no display group&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$pgc = new PublishingGroupControl();&lt;br /&gt;
$groupObject = new GroupObject();&lt;br /&gt;
&lt;br /&gt;
// Fill the group object&lt;br /&gt;
$groupObject-&amp;gt;_Title = &amp;quot;Cross Site Alert Plugin - csa - % -100&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Summary = &amp;quot;Cross site alert plugin only group&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Type = TypeObject::O_PUBLIC; // Always make the no display group public&lt;br /&gt;
&lt;br /&gt;
// Create the group&lt;br /&gt;
try {&lt;br /&gt;
    $pgc-&amp;gt;createGroup($groupObject, TRUE); // Create the group with no display on. Since no display is on, the % sign is OK. However if it was no a no display group, the % is reserved.&lt;br /&gt;
} catch(PublishingException $p) {&lt;br /&gt;
    echo &amp;quot;HELP&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5841</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5841"/>
				<updated>2010-08-16T19:18:09Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
All data (Group, Feed, Subscriber, and Data information) are passed to and from methods using objects. These objects are GroupObject, FeedObject, DataObject, SecurityObject. &lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle($title)&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Code Study - Autoinstall and creating a no display group&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$pgc = new PublishingGroupControl();&lt;br /&gt;
$groupObject = new GroupObject();&lt;br /&gt;
&lt;br /&gt;
// Fill the group object&lt;br /&gt;
$groupObject-&amp;gt;_Title = &amp;quot;Cross Site Alert Plugin - csa - % -100&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Summary = &amp;quot;Cross site alert plugin only group&amp;quot;;&lt;br /&gt;
$groupObject-&amp;gt;_Type = TypeObject::O_PUBLIC; // Always make the no display group public&lt;br /&gt;
&lt;br /&gt;
// Create the group&lt;br /&gt;
try {&lt;br /&gt;
    $pgc-&amp;gt;createGroup($groupObject, TRUE); // Create the group with no display on. Since no display is on, the % sign is OK. However if it was no a no display group, the % is reserved.&lt;br /&gt;
} catch(PublishingException $p) {&lt;br /&gt;
    echo &amp;quot;HELP&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A case study that will help understand how to create a plugin that uses these features is the cross site alert plugin, that allows sites to create alerts and share them.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5840</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5840"/>
				<updated>2010-08-16T19:12:11Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle($title)&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A case study that will help understand how to create a plugin that uses these features is the cross site alert plugin, that allows sites to create alerts and share them.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5839</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5839"/>
				<updated>2010-08-16T19:11:51Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: &lt;br /&gt;
&amp;lt;pre&amp;gt;`Plugin Full Name - plugin_dir_name - % - randomvalue` &lt;br /&gt;
eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can then always get the group id for this group by using the &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PublishingGroupControl::getIdForNDTitle&amp;lt;/pre&amp;gt;&lt;br /&gt;
method that matches the unique title against the database to retrieve the ID for the group.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A case study that will help understand how to create a plugin that uses these features is the cross site alert plugin, that allows sites to create alerts and share them.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5838</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5838"/>
				<updated>2010-08-16T19:10:10Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;br /&gt;
&lt;br /&gt;
Using the API differs depending on what side of the exchange you are developing for. For example, there are the PublishingControlManagement classes and methods that deal with repository or server end of things, and the ReceivingControlManagement classes and methods that deal with the joining/client end of things.&lt;br /&gt;
&lt;br /&gt;
Plugins are able to utilize the API and structure into their existing code in any way they want to allow communication across the internet. &lt;br /&gt;
Since most plugins will not need groups, there is a way to have one main group for the entire plugin, that is not visible to the administrators, and looks to be part of the plugin. &lt;br /&gt;
This feature is called `no display`. &lt;br /&gt;
&lt;br /&gt;
If you decide that you only want one group for the plugin (so no display is for you), then in the plugin's auto install, create the group with the no display flag set to true as the parameter, and the name to be unique. To ensure the name is unique, it MUST have a `%` symbol (percent) in it somewhere. This is a reserved character that is only available for no display groups. &lt;br /&gt;
The format for a unique group name is: `Plugin Full Name - plugin_dir_name - % - randomvalue` eg. `Cross Site Publishing and Receiving - cspr - % - 0.30`. &lt;br /&gt;
You can then always get the group id for this group by using the `PublishingGroupControl::getIdForNDTitle` method that matches the unique title against the database to retrieve the ID for the group.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5837</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5837"/>
				<updated>2010-08-16T18:13:05Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Plugins and using the API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
&lt;br /&gt;
NOTE: @Result, directions for including lib files if not integrated into geeklog&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5836</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5836"/>
				<updated>2010-08-16T18:12:17Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Overview, Groups, Feeds, Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;br /&gt;
&lt;br /&gt;
Private subscriptions are assigned security groups. A security group is a collection of feeds that members of the group have access to. Private subscriptions can be assigned more than one security group. This allows an administrator of the repository to break down access into smaller chunks, and if a pay-subscription was wanted by the repository, it could offer different packages which then would match up to security group configurations.&lt;br /&gt;
&lt;br /&gt;
The CSPR is modified through two interfaces. There is a GUI for the server and for the client (publishing and receiving respectively) which allow all basic tasks to be performed, eg. approving subscriptions, assigning security groups, creating groups and feeds, etc. The only thing the GUI does not support is adding data to a feed. The API on the other hand allow total manipulation of every aspect of the CSPR functionality. As well, the API allows plugins to hook into some of the GUI parts (subscribing, joining feeds) so the plugin does not have to recreate the wheel every time, however if the plugin developers so want to, it is easy to do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Plugins and using the API =&lt;br /&gt;
s&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5835</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5835"/>
				<updated>2010-08-16T18:05:37Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls (for integrating support) or in a few clicks (using the GUI).&lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5834</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5834"/>
				<updated>2010-08-16T18:03:15Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Overview, Groups, Feeds, Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls. &lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;br /&gt;
Anyone is able to subscribe to a repository, however depending on the type (Public or Private) a different thing happens. &lt;br /&gt;
Each subscription is based on the actual repository - a public subscription means that only public groups and feeds are able to be joined, while a private subscription allows both public and private feeds to which the subscription is allowed.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5833</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5833"/>
				<updated>2010-08-16T18:00:49Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Overview, Groups, Feeds, Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls. &lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
The CSPR contains three main components - repositories, groups and feeds. &lt;br /&gt;
&lt;br /&gt;
* Repositories are a collection of groups, most likely a Geeklog site (or could be another application). &lt;br /&gt;
* Groups are collections of feeds, usually about a standard topic (eg. News, Alerts, etc).&lt;br /&gt;
* Feeds hold data, and are derived from the group, eg. a `Main Geeklog News Feed` and a `VVT News Feed` for the group News. &lt;br /&gt;
&lt;br /&gt;
Groups and Feeds can either be private or public. Public groups and feeds allow anyone to subscribe to them. Private on the other hand forces subscribers to be approved for access to various feeds.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5832</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5832"/>
				<updated>2010-08-16T17:54:36Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to accomplish the following:&lt;br /&gt;
&lt;br /&gt;
* Publish and receive any type of data among not only Geeklog sites but any application (web or desktop) that support the ATOM protocol and implement the REQUEST commands. &lt;br /&gt;
&lt;br /&gt;
Using the CSPR is extremely easy, and all work can usually be done in a few API calls. &lt;br /&gt;
&lt;br /&gt;
= Overview, Groups, Feeds, Data =&lt;br /&gt;
&lt;br /&gt;
dd&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5831</id>
		<title>Cross Site Publishing and Receiving Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Cross_Site_Publishing_and_Receiving_Information&amp;diff=5831"/>
				<updated>2010-08-16T17:49:41Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: New page: = Introduction =  The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to send and receive data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Cross Site Publishing and Receiving API and GUI (Referred to as `CSPR` from here on) allows plugins to send and receive data&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5830</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5830"/>
				<updated>2010-08-16T16:22:24Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5829</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5829"/>
				<updated>2010-08-16T16:22:11Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5828</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5828"/>
				<updated>2010-08-16T16:05:53Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5559</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5559"/>
				<updated>2009-08-09T21:29:19Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5558</id>
		<title>Patches and Upgrades</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5558"/>
				<updated>2009-08-09T20:10:29Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The repository allows a way to have patches or upgrades to existing plugins offered for one-click automatic installation via. the repository.&lt;br /&gt;
However, there is a certain file format that must be followed for patches and upgrades.&lt;br /&gt;
&lt;br /&gt;
Since the act of patching and upgrading are almost the same (Both add/edit/remove files and / or SQL), the only difference is that an upgrade updates your plugin version number as well.&lt;br /&gt;
Hence the structure of both are identical.&lt;br /&gt;
&lt;br /&gt;
In the root directory of the patch / upgrade, there has to be the following directories and files:&lt;br /&gt;
&lt;br /&gt;
* admin - This folder holds the files that you would like to be moved to the public_html/admin/plugins/yourplugin folder. Files with the same name will overwrite existing ones.&lt;br /&gt;
&lt;br /&gt;
* public_html - All files that you would like copied to /public_html/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* plugins - All files you would like to be copied to /plugins/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* updates.php -- See below for information on this file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UPDATES.PHP ==&lt;br /&gt;
&lt;br /&gt;
This file contains the instructions for the update / upgrade process to follow. This file is mandatory, and without it your patches / upgrades will not be able to be offered for automatic one-click install, instead will have to be manually installed by the user.&lt;br /&gt;
&lt;br /&gt;
The structure of the file is as follows:&lt;br /&gt;
&lt;br /&gt;
The file MUST include a static class named UpdatePlugin, that implements the PluginUpdateInterface interface. &lt;br /&gt;
&lt;br /&gt;
PluginUpdateInterface interface:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static function init();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sample class is below, with explanations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class UpdatePlugin implements PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static $_SQL_DATA = array();&lt;br /&gt;
    public static $_SQL_PTABLES = array();&lt;br /&gt;
    public static $PLUGIN_NAME = 'repositorylisting';&lt;br /&gt;
	&lt;br /&gt;
    public static function init()&lt;br /&gt;
    {&lt;br /&gt;
        // do nothing&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $_SQL_DATA&amp;lt;/tt&amp;gt; - This is an array of SQL files, that is any SQL you would like to be executed as part of the update / upgrade. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $_SQL_PTABLES &amp;lt;/tt&amp;gt;- This is an array of all tables that your plugin currently has assigned to it in the Geeklog database. This is for backup purposes, as all plugin data is backed up before an update / upgrade, in case of corruption to avoid data loss.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $PLUGIN_NAME&amp;lt;/tt&amp;gt;- This is the name of the plugin that it goes by in the plugin table. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static boolean function init();&amp;lt;/tt&amp;gt; This function must return either true or false. False indicates a serious error occurred and the update must be terminated. This function allows you to include any code you want to execute during the update / upgrade. UpdatePlugin::init() is called after everything has been performed (SQL and file moves), before cleanup happens.&lt;br /&gt;
This cannot be stressed enough - you MUST return TRUE or the installation of your update / upgrade will be terminated, and the changes rolled back. Hence do NOT return false for some tiny warning, unless it is serious enough to cancel installation. In this regard, this function is really only for adding new configuration values, removing old ones, and so on. This is not for any SQL or FILE MOVE operations - allow the built in functions do that work more efficiently and with corruption protection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
Once an upgrade or a patch has been uploaded into the repository, if it is a patch, it is assigned a unique patch id for that plugin. If it is an upgrade, all it needs is the old version it is replacing. This is important. While patches can be made to work with any Plugin version, Upgrades will ONLY upgrade from the 'old plugin version' specified on upgrade upload. This is a security feature to prevent security holes where code is thought to be there, however since it is an old version, the code is missing and the plugin crashes or has vulnerabilities. With patches, this is not so much an issue, as upgrades will always include any fixes that have been issued as patches. &lt;br /&gt;
&lt;br /&gt;
Once the client clicks 'Check for Updates', a check is performed against every repository in their repository database, and any updates / upgrades are returned. The user may then select which ones they wish to install, and they will install / or fail without affecting any other updates. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin Development]]&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5557</id>
		<title>Patches and Upgrades</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5557"/>
				<updated>2009-08-09T20:08:07Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The repository allows a way to have patches or upgrades to existing plugins offered for one-click automatic installation via. the repository.&lt;br /&gt;
However, there is a certain file format that must be followed for patches and upgrades.&lt;br /&gt;
&lt;br /&gt;
Since the act of patching and upgrading are almost the same (Both add/edit/remove files and / or SQL), the only difference is that an upgrade updates your plugin version number as well.&lt;br /&gt;
Hence the structure of both are identical.&lt;br /&gt;
&lt;br /&gt;
In the root directory of the patch / upgrade, there has to be the following directories and files:&lt;br /&gt;
&lt;br /&gt;
* admin - This folder holds the files that you would like to be moved to the public_html/admin/plugins/yourplugin folder. Files with the same name will overwrite existing ones.&lt;br /&gt;
&lt;br /&gt;
* public_html - All files that you would like copied to /public_html/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* plugins - All files you would like to be copied to /plugins/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* updates.php -- See below for information on this file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UPDATES.PHP ==&lt;br /&gt;
&lt;br /&gt;
This file contains the instructions for the update / upgrade process to follow. This file is mandatory, and without it your patches / upgrades will not be able to be offered for automatic one-click install, instead will have to be manually installed by the user.&lt;br /&gt;
&lt;br /&gt;
The structure of the file is as follows:&lt;br /&gt;
&lt;br /&gt;
The file MUST include a static class named UpdatePlugin, that implements the PluginUpdateInterface interface. &lt;br /&gt;
&lt;br /&gt;
PluginUpdateInterface interface:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static function init();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sample class is below, with explanations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class UpdatePlugin implements PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static $_SQL_DATA = array();&lt;br /&gt;
    public static $_SQL_PTABLES = array();&lt;br /&gt;
    public static $PLUGIN_NAME = 'repositorylisting';&lt;br /&gt;
	&lt;br /&gt;
    public static function init()&lt;br /&gt;
    {&lt;br /&gt;
        // do nothing&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $_SQL_DATA&amp;lt;/tt&amp;gt; - This is an array of SQL files, that is any SQL you would like to be executed as part of the update / upgrade. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $_SQL_PTABLES &amp;lt;/tt&amp;gt;- This is an array of all tables that your plugin currently has assigned to it in the Geeklog database. This is for backup purposes, as all plugin data is backed up before an update / upgrade, in case of corruption to avoid data loss.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $PLUGIN_NAME&amp;lt;/tt&amp;gt;- This is the name of the plugin that it goes by in the plugin table. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static boolean function init();&amp;lt;/tt&amp;gt; This function must return either true or false. False indicates a serious error occurred and the update must be terminated. This function allows you to include any code you want to execute during the update / upgrade. UpdatePlugin::init() is called after everything has been performed (SQL and file moves), before cleanup happens.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How it works ==&lt;br /&gt;
&lt;br /&gt;
Once an upgrade or a patch has been uploaded into the repository, if it is a patch, it is assigned a unique patch id for that plugin. If it is an upgrade, all it needs is the old version it is replacing. This is important. While patches can be made to work with any Plugin version, Upgrades will ONLY upgrade from the 'old plugin version' specified on upgrade upload. This is a security feature to prevent security holes where code is thought to be there, however since it is an old version, the code is missing and the plugin crashes or has vulnerabilities. With patches, this is not so much an issue, as upgrades will always include any fixes that have been issued as patches. &lt;br /&gt;
&lt;br /&gt;
Once the client clicks 'Check for Updates', a check is performed against every repository in their repository database, and any updates / upgrades are returned. The user may then select which ones they wish to install, and they will install / or fail without affecting any other updates. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugin Development]]&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5556</id>
		<title>Patches and Upgrades</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5556"/>
				<updated>2009-08-09T18:23:17Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The repository allows a way to have patches or upgrades to existing plugins offered for one-click automatic installation via. the repository.&lt;br /&gt;
However, there is a certain file format that must be followed for patches and upgrades.&lt;br /&gt;
&lt;br /&gt;
Since the act of patching and upgrading are almost the same (Both add/edit/remove files and / or SQL), the only difference is that an upgrade updates your plugin version number as well.&lt;br /&gt;
Hence the structure of both are identical.&lt;br /&gt;
&lt;br /&gt;
In the root directory of the patch / upgrade, there has to be the following directories and files:&lt;br /&gt;
&lt;br /&gt;
* admin - This folder holds the files that you would like to be moved to the public_html/admin/plugins/yourplugin folder. Files with the same name will overwrite existing ones.&lt;br /&gt;
&lt;br /&gt;
* public_html - All files that you would like copied to /public_html/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* plugins - All files you would like to be copied to /plugins/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* updates.php -- See below for information on this file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UPDATES.PHP ==&lt;br /&gt;
&lt;br /&gt;
This file contains the instructions for the update / upgrade process to follow. This file is mandatory, and without it your patches / upgrades will not be able to be offered for automatic one-click install, instead will have to be manually installed by the user.&lt;br /&gt;
&lt;br /&gt;
The structure of the file is as follows:&lt;br /&gt;
&lt;br /&gt;
The file MUST include a static class named UpdatePlugin, that implements the PluginUpdateInterface interface. &lt;br /&gt;
&lt;br /&gt;
PluginUpdateInterface interface:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static function init();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sample class is below, with explanations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class UpdatePlugin implements PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static $_SQL_DATA = array();&lt;br /&gt;
    public static $_SQL_PTABLES = array();&lt;br /&gt;
    public static $PLUGIN_NAME = 'repositorylisting';&lt;br /&gt;
	&lt;br /&gt;
    public static function init()&lt;br /&gt;
    {&lt;br /&gt;
        // do nothing&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $_SQL_DATA&amp;lt;/tt&amp;gt; - This is an array of SQL files, that is any SQL you would like to be executed as part of the update / upgrade. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $_SQL_PTABLES &amp;lt;/tt&amp;gt;- This is an array of all tables that your plugin currently has assigned to it in the Geeklog database. This is for backup purposes, as all plugin data is backed up before an update / upgrade, in case of corruption to avoid data loss.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $PLUGIN_NAME&amp;lt;/tt&amp;gt;- This is the name of the plugin that it goes by in the plugin table. &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static boolean function init();&amp;lt;/tt&amp;gt; This function must return either true or false. False indicates a serious error occurred and the update must be terminated. This function allows you to include any code you want to execute during the update / upgrade. UpdatePlugin::init() is called after everything has been performed (SQL and file moves), before cleanup happens.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5555</id>
		<title>Patches and Upgrades</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5555"/>
				<updated>2009-08-09T18:22:30Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The repository allows a way to have patches or upgrades to existing plugins offered for one-click automatic installation via. the repository.&lt;br /&gt;
However, there is a certain file format that must be followed for patches and upgrades.&lt;br /&gt;
&lt;br /&gt;
Since the act of patching and upgrading are almost the same (Both add/edit/remove files and / or SQL), the only difference is that an upgrade updates your plugin version number as well.&lt;br /&gt;
Hence the structure of both are identical.&lt;br /&gt;
&lt;br /&gt;
In the root directory of the patch / upgrade, there has to be the following directories and files:&lt;br /&gt;
&lt;br /&gt;
* admin - This folder holds the files that you would like to be moved to the public_html/admin/plugins/yourplugin folder. Files with the same name will overwrite existing ones.&lt;br /&gt;
&lt;br /&gt;
* public_html - All files that you would like copied to /public_html/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* plugins - All files you would like to be copied to /plugins/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* updates.php -- See below for information on this file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UPDATES.PHP ==&lt;br /&gt;
&lt;br /&gt;
This file contains the instructions for the update / upgrade process to follow. This file is mandatory, and without it your patches / upgrades will not be able to be offered for automatic one-click install, instead will have to be manually installed by the user.&lt;br /&gt;
&lt;br /&gt;
The structure of the file is as follows:&lt;br /&gt;
&lt;br /&gt;
The file MUST include a static class named UpdatePlugin, that implements the PluginUpdateInterface interface. &lt;br /&gt;
&lt;br /&gt;
PluginUpdateInterface interface:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static function init();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sample class is below, with explanations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class UpdatePlugin implements PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static $_SQL_DATA = array();&lt;br /&gt;
    public static $_SQL_PTABLES = array();&lt;br /&gt;
    public static $PLUGIN_NAME = 'repositorylisting';&lt;br /&gt;
	&lt;br /&gt;
    public static function init()&lt;br /&gt;
    {&lt;br /&gt;
        // do nothing&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $_SQL_DATA&amp;lt;/tt&amp;gt; - This is an array of SQL files, that is any SQL you would like to be executed as part of the update / upgrade. &lt;br /&gt;
&lt;br /&gt;
* public static $_SQL_PTABLES - This is an array of all tables that your plugin currently has assigned to it in the Geeklog database. This is for backup purposes, as all plugin data is backed up before an update / upgrade, in case of corruption to avoid data loss.&lt;br /&gt;
&lt;br /&gt;
* public static $PLUGIN_NAME - This is the name of the plugin that it goes by in the plugin table. &lt;br /&gt;
&lt;br /&gt;
* public static boolean function init();&lt;br /&gt;
  - This function must return either true or false. False indicates a serious error occurred and the update must be terminated. &lt;br /&gt;
    This function allows you to include any code you want to execute during the update / upgrade. UpdatePlugin::init() is called after everything has been performed (SQL and file moves), before cleanup happens.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5554</id>
		<title>Patches and Upgrades</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Patches_and_Upgrades&amp;diff=5554"/>
				<updated>2009-08-09T18:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: New page: == Introduction ==  The repository allows a way to have patches or upgrades to existing plugins offered for one-click automatic installation via. the repository. However, there is a certai...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The repository allows a way to have patches or upgrades to existing plugins offered for one-click automatic installation via. the repository.&lt;br /&gt;
However, there is a certain file format that must be followed for patches and upgrades.&lt;br /&gt;
&lt;br /&gt;
Since the act of patching and upgrading are almost the same (Both add/edit/remove files and / or SQL), the only difference is that an upgrade updates your plugin version number as well.&lt;br /&gt;
Hence the structure of both are identical.&lt;br /&gt;
&lt;br /&gt;
In the root directory of the patch / upgrade, there has to be the following directories and files:&lt;br /&gt;
&lt;br /&gt;
* admin - This folder holds the files that you would like to be moved to the public_html/admin/plugins/yourplugin folder. Files with the same name will overwrite existing ones.&lt;br /&gt;
&lt;br /&gt;
* public_html - All files that you would like copied to /public_html/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* plugins - All files you would like to be copied to /plugins/yourplugin folder.&lt;br /&gt;
&lt;br /&gt;
* updates.php -- See below for information on this file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UPDATES.PHP ==&lt;br /&gt;
&lt;br /&gt;
This file contains the instructions for the update / upgrade process to follow. This file is mandatory, and without it your patches / upgrades will not be able to be offered for automatic one-click install, instead will have to be manually installed by the user.&lt;br /&gt;
&lt;br /&gt;
The structure of the file is as follows:&lt;br /&gt;
&lt;br /&gt;
The file MUST include a static class named UpdatePlugin, that implements the PluginUpdateInterface interface. &lt;br /&gt;
&lt;br /&gt;
PluginUpdateInterface interface:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
    public static function init();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sample class is below, with explanations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class UpdatePlugin implements PluginUpdateInterface&lt;br /&gt;
{&lt;br /&gt;
	public static $_SQL_DATA = array();&lt;br /&gt;
	public static $_SQL_PTABLES = array();&lt;br /&gt;
	public static $PLUGIN_NAME = 'repositorylisting';&lt;br /&gt;
	&lt;br /&gt;
    public static function init()&lt;br /&gt;
    {&lt;br /&gt;
		// do nothing&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;public static $_SQL_DATA&amp;lt;/tt&amp;gt; -&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Developing_Plugins&amp;diff=5553</id>
		<title>Developing Plugins</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Developing_Plugins&amp;diff=5553"/>
				<updated>2009-08-09T17:53:14Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
To allow your plugin to be automatically installed by a user from the repository, you must develop it (or convert it) to use the autoinstall.php method of installation.&lt;br /&gt;
&lt;br /&gt;
You must follow the Directory Layout for your plugin as outlined here [[Suggested_and_Required_Directory_Layout_and_Files]].&lt;br /&gt;
&lt;br /&gt;
As well, there are four files that must be included in the root directory of your plugin archive. These files are:&lt;br /&gt;
&lt;br /&gt;
autoinstall.php [[Plugin_Autoinstall]]&lt;br /&gt;
&lt;br /&gt;
autouninstall.php [[Plugin_Auto-Uninstall]]&lt;br /&gt;
&lt;br /&gt;
functions.inc [[Functions.inc_-_Listing_of_the_Plugin_Functions]]&lt;br /&gt;
&lt;br /&gt;
install_defaults.php [[Install_Defaults]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uploading ==&lt;br /&gt;
&lt;br /&gt;
If your plugin includes these files, then it will be offered for auto install via the repository (and download and manual install if the user so wishes).&lt;br /&gt;
&lt;br /&gt;
However, if any of these files are missing, a warning will be shown and the plugin will ONLY be offered for manual download. &lt;br /&gt;
This can be fixed at any time, however, by simply editing your plugin in the repository, and uploading your fixed archive.&lt;br /&gt;
Supported archives to the repository are .tar.gz, .tar, .tar.bz2, and .zip. &lt;br /&gt;
Once you upload a plugin, it will be displayed when you go to the Repository Manager, and you will be able to edit it, upload patches for it, and upload upgrades for it, as well as remove it.&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Developing_Plugins&amp;diff=5552</id>
		<title>Developing Plugins</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Developing_Plugins&amp;diff=5552"/>
				<updated>2009-08-09T17:49:50Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
To allow your plugin to be automatically installed by a user from the repository, you must develop it (or convert it) to use the autoinstall.php method of installation.&lt;br /&gt;
&lt;br /&gt;
You must follow the Directory Layout for your plugin as outlined here [[Suggested_and_Required_Directory_Layout_and_Files]].&lt;br /&gt;
&lt;br /&gt;
As well, there are four files that must be included in the root directory of your plugin archive. These files are:&lt;br /&gt;
&lt;br /&gt;
autoinstall.php [[Plugin_Autoinstall]]&lt;br /&gt;
&lt;br /&gt;
autouninstall.php [[Plugin_Auto-Uninstall]]&lt;br /&gt;
&lt;br /&gt;
functions.inc [[Functions.inc_-_Listing_of_the_Plugin_Functions]]&lt;br /&gt;
&lt;br /&gt;
install_defaults.php [[Install_Defaults]]&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Developing_Plugins&amp;diff=5551</id>
		<title>Developing Plugins</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Developing_Plugins&amp;diff=5551"/>
				<updated>2009-08-09T17:49:14Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
To allow your plugin to be automatically installed by a user from the repository, you must develop it (or convert it) to use the autoinstall.php method of installation.&lt;br /&gt;
&lt;br /&gt;
You must follow the Directory Layout for your plugin as outlined here [[Suggested_and_Required_Directory_Layout_and_Files]].&lt;br /&gt;
&lt;br /&gt;
As well, there are four files that must be included in the root directory of your plugin archive. These files are:&lt;br /&gt;
&lt;br /&gt;
autoinstall.php [[Plugin_Autoinstall]]&lt;br /&gt;
&lt;br /&gt;
autouninstall.php [[Plugin_Auto-Uninstall]]&lt;br /&gt;
&lt;br /&gt;
functions.inc [[Functions.inc_-_Listing_of_the_Plugin_Functions]]&lt;br /&gt;
&lt;br /&gt;
install_defaults.php [[]]&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Developing_Plugins&amp;diff=5550</id>
		<title>Developing Plugins</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Developing_Plugins&amp;diff=5550"/>
				<updated>2009-08-09T17:48:10Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: New page: == Introduction ==  To allow your plugin to be automatically installed by a user from the repository, you must develop it (or convert it) to use the autoinstall.php method of installation....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
To allow your plugin to be automatically installed by a user from the repository, you must develop it (or convert it) to use the autoinstall.php method of installation.&lt;br /&gt;
You must follow the Directory Layout for your plugin as outlined here [[Suggested_and_Required_Directory_Layout_and_Files]].&lt;br /&gt;
As well, there are four files that must be included in the root directory of your plugin archive. These files are:&lt;br /&gt;
&lt;br /&gt;
autoinstall.php [[Plugin_Autoinstall]]&lt;br /&gt;
autouninstall.php [[Plugin_Auto-Uninstall]]&lt;br /&gt;
functions.inc [[Functions.inc_-_Listing_of_the_Plugin_Functions]]&lt;br /&gt;
install_defaults.php [[]]&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5549</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5549"/>
				<updated>2009-08-09T17:43:26Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Structure_and_Information&amp;diff=5548</id>
		<title>Structure and Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Structure_and_Information&amp;diff=5548"/>
				<updated>2009-08-09T17:42:40Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The repository allows a plugin to be automatically installed by the end user with a single click, receive updates and upgrades that can be installed with the click of a mouse!&lt;br /&gt;
However, to allow for single click installs, a few things must be done to your Plugins, Patches, and Upgrades.&lt;br /&gt;
&lt;br /&gt;
For more information on patches and upgrades see:&lt;br /&gt;
*[[ Patches and Upgrades ]]&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Structure_and_Information&amp;diff=5547</id>
		<title>Structure and Information</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Structure_and_Information&amp;diff=5547"/>
				<updated>2009-08-09T17:40:16Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: New page: == Introduction ==  The repository allows a plugin to be automatically installed by the end user with a single click, receive updates and upgrades that can be installed with the click of a...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The repository allows a plugin to be automatically installed by the end user with a single click, receive updates and upgrades that can be installed with the click of a mouse!&lt;br /&gt;
However, to allow for single click installs, a few things must be done to your Plugins, Patches, and Upgrades.&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
*[[ Patches and Upgrades ]]&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5546</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5546"/>
				<updated>2009-08-09T17:02:50Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5545</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5545"/>
				<updated>2009-08-09T17:00:26Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5544</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5544"/>
				<updated>2009-08-09T16:59:50Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	<entry>
		<id>http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5543</id>
		<title>Programmers/Developers Documentation</title>
		<link rel="alternate" type="text/html" href="http://gwiki3.thatlinuxbox.com/index.php?title=Programmers/Developers_Documentation&amp;diff=5543"/>
				<updated>2009-08-09T16:58:56Z</updated>
		
		<summary type="html">&lt;p&gt;TimPatrick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TimPatrick</name></author>	</entry>

	</feed>