1 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" |
2 |
"http://www.w3.org/TR/html4/strict.dtd"> |
3 |
<html> |
4 |
<head> |
5 |
<title>Reblog Plug-ins</title> |
6 |
<link rel="stylesheet" href="../softwarestyle.css" type="text/css"> |
7 |
<style type="text/css" title="text/css"> |
8 |
<!-- |
9 |
|
10 |
dl.methods dt |
11 |
{ |
12 |
clear: left; |
13 |
} |
14 |
|
15 |
dl dt |
16 |
{ |
17 |
font-weight: bold; |
18 |
font-family: helvetica, sans-serif; |
19 |
} |
20 |
|
21 |
dl.methods dd |
22 |
{ |
23 |
margin-bottom: 2em; |
24 |
} |
25 |
|
26 |
dl.methods dd p.arguments-head |
27 |
{ |
28 |
float: left; |
29 |
width: 2em; |
30 |
margin-top: 0; |
31 |
} |
32 |
|
33 |
dl.methods dd ol.arguments |
34 |
{ |
35 |
margin-left: 2em; |
36 |
} |
37 |
|
38 |
--> |
39 |
</style> |
40 |
</head> |
41 |
<body> |
42 |
<h1>Reblog Plug-ins</h1> |
43 |
<p>$Revision: 1.10 $</p> |
44 |
<div id="toc"> |
45 |
<h2>Table of Contents</h2> |
46 |
<ul> |
47 |
<li> |
48 |
<a href="#overview">Overview</a> |
49 |
</li> |
50 |
<li><a href="#using">Using Plug-ins</a></li> |
51 |
<li> |
52 |
<a href="#example">Example Plug-ins</a> |
53 |
<ul> |
54 |
<li><a href="#plugin-obsessivelogger">Obsessive Logger</a></li> |
55 |
<li><a href="#plugin-updatelogger">Update Logger</a></li> |
56 |
<li><a href="#plugin-feeextinguisher">Feed Extinguisher</a></li> |
57 |
<li><a href="#plugin-feedsparkliner">Feed Sparkliner</a></li> |
58 |
<li><a href="#plugin-flaggedentry">Flagged Entry</a></li> |
59 |
<li><a href="#plugin-enclosurehandler">Enclosure Handler</a></li> |
60 |
<li><a href="#plugin-metaweblogrpc">MetaWeblog RPC</a></li> |
61 |
<li><a href="#plugin-atomapi">Atom API</a></li> |
62 |
<li><a href="#plugin-deliciouspost">Del.icio.us Post</a></li> |
63 |
<li><a href="#plugin-similarentries">Similar Entries</a></li> |
64 |
</ul> |
65 |
</li> |
66 |
<li> |
67 |
<a href="#writing">Writing Plug-ins</a> |
68 |
<ul> |
69 |
<li><a href="#writing-requirements">Requirements</a></li> |
70 |
<li><a href="#writing-instantiationinvokation">Instantiation and Remote Invokation</a></li> |
71 |
<li><a href="#writing-arguments">Arguments</a></li> |
72 |
<li><a href="#writing-cachingdata">Caching Data</a></li> |
73 |
</ul> |
74 |
</li> |
75 |
<li> |
76 |
<a href="#builtin-methods">Built-in Methods</a> |
77 |
<ul> |
78 |
<li><a href="#builtin-gettinglists">Getting Lists of Items and Feeds</a></li> |
79 |
<li><a href="#builtin-templatemethods">Template Methods</a></li> |
80 |
<li><a href="#builtin-order">Order of Invokation</a></li> |
81 |
<li> |
82 |
<a href="#builtin-dictionary">Method Dictionary</a> |
83 |
<ul> |
84 |
<li><a href="#method-clientCreated">clientCreated</a></li> |
85 |
<li><a href="#method-feedDeleted">feedDeleted</a></li> |
86 |
<li><a href="#method-feedTabHTML">feedTabHTML</a></li> |
87 |
<li><a href="#method-flushedObsoleteItems">flushedObsoleteItems</a></li> |
88 |
<li><a href="#method-flushedObsoleteUserItems">flushedObsoleteUserItems</a></li> |
89 |
<li><a href="#method-freshenedUserFeedItems">freshenedUserFeedItems</a></li> |
90 |
<li><a href="#method-gotFeedItems">gotFeedItems</a></li> |
91 |
<li><a href="#method-gotFeeds">gotFeeds</a></li> |
92 |
<li><a href="#method-gotFeedUsers">gotFeedUsers</a></li> |
93 |
<li><a href="#method-gotUserFeeds">gotUserFeeds</a></li> |
94 |
<li><a href="#method-gotUserFeedsQuery">gotUserFeedsQuery</a></li> |
95 |
<li><a href="#method-gotUserFeedsQueryArguments">gotUserFeedsQueryArguments</a></li> |
96 |
<li><a href="#method-gotUserFeedsQueryConditions">gotUserFeedsQueryConditions</a></li> |
97 |
<li><a href="#method-gotUserItems">gotUserItems</a></li> |
98 |
<li><a href="#method-gotUserItemsQuery">gotUserItemsQuery</a></li> |
99 |
<li><a href="#method-gotUserItemsQueryArguments">gotUserItemsQueryArguments</a></li> |
100 |
<li><a href="#method-gotUserItemsQueryConditions">gotUserItemsQueryConditions</a></li> |
101 |
<li><a href="#method-gotUserTags">gotUserTags</a></li> |
102 |
<li><a href="#method-itemTabHTML">itemTabHTML</a></li> |
103 |
<li><a href="#method-loadedPlugins">loadedPlugins</a></li> |
104 |
<li><a href="#method-markedFeedPublished">markedFeedPublished</a></li> |
105 |
<li><a href="#method-markedFeedUnpublished">markedFeedUnpublished</a></li> |
106 |
<li><a href="#method-markedItemPublished">markedItemPublished</a></li> |
107 |
<li><a href="#method-markedItemRead">markedItemRead</a></li> |
108 |
<li><a href="#method-markedItemsPublished">markedItemsPublished</a></li> |
109 |
<li><a href="#method-markedItemsRead">markedItemsRead</a></li> |
110 |
<li><a href="#method-markedItemsUnread">markedItemsUnread</a></li> |
111 |
<li><a href="#method-markedItemUnpublished">markedItemUnpublished</a></li> |
112 |
<li><a href="#method-markedItemUnread">markedItemUnread</a></li> |
113 |
<li><a href="#method-menuMessageHTML">menuMessageHTML</a></li> |
114 |
<li><a href="#method-pageHeadHTML">pageHeadHTML</a></li> |
115 |
<li><a href="#method-postedItem">postedItem</a></li> |
116 |
<li><a href="#method-preparedItemArguments">preparedItemArguments</a></li> |
117 |
<li><a href="#method-savedExistingFeed">savedExistingFeed</a></li> |
118 |
<li><a href="#method-saveModifiedItemBefore">saveModifiedItemBefore</a></li> |
119 |
<li><a href="#method-savedModifiedItem">savedModifiedItem</a></li> |
120 |
<li><a href="#method-saveNewFeedBefore">saveNewFeedBefore</a></li> |
121 |
<li><a href="#method-savedNewFeed">savedNewFeed</a></li> |
122 |
<li><a href="#method-savedNewItem">savedNewItem</a></li> |
123 |
<li><a href="#method-setFeedTags">setFeedTags</a></li> |
124 |
<li><a href="#method-setItemCommentTags">setItemCommentTags</a></li> |
125 |
<li><a href="#method-setItemLink">setItemLink</a></li> |
126 |
<li><a href="#method-setItemTags">setItemTags</a></li> |
127 |
<li><a href="#method-setItemTitleContentLink">setItemTitleContentLink</a></li> |
128 |
<li><a href="#method-setKeyboardUse">setKeyboardUse</a></li> |
129 |
<li><a href="#method-subscribedUserToFeed">subscribedUserToFeed</a></li> |
130 |
<li><a href="#method-unsubscribedUserFromFeed">unsubscribedUserFromFeed</a></li> |
131 |
<li><a href="#method-updatedFeed">updatedFeed</a></li> |
132 |
</ul> |
133 |
</li> |
134 |
</ul> |
135 |
</li> |
136 |
<li> |
137 |
<a href="#license">License</a> |
138 |
</li> |
139 |
</ul> |
140 |
</div> |
141 |
<div id="contents"> |
142 |
<h2><a name="overview"></a>Overview</h2> |
143 |
<p> |
144 |
Reblog provides has an internal plug-in API which allows various |
145 |
aspects of its behavior to be changed or augmented. It is distributed |
146 |
with several plug-ins that demonstrate the possibilities. |
147 |
</p> |
148 |
<h2><a name="using"></a>Using Plug-ins</h2> |
149 |
<p> |
150 |
Reblog plug-ins are found in the <code>plugins</code> directory. |
151 |
Each plug-in is a PHP class, which must have a static property |
152 |
<code>$activePlugin</code> set to boolean <code>true</code>. |
153 |
Example plugins typically have <code>$activePlugin</code> set to |
154 |
<code>false</code>; change the value in order to use them. |
155 |
</p> |
156 |
<p> |
157 |
The value of this property is determined using |
158 |
<code class="method">get_class_vars()</code>, so it must be set in |
159 |
the source code, like this: |
160 |
</p> |
161 |
<blockquote> |
162 |
<code>var $activePlugin = true;</code> |
163 |
</blockquote> |
164 |
<p> |
165 |
Plugins are found and instantiated in <code class="class">RF_Controller</code>'s |
166 |
<code class="method">loadPlugins()</code> method. The <code>plugins</code> |
167 |
directory is checked for files whose names end in <em>.plugin.php</em>, which are |
168 |
then included using <code class="method">include_once()</code>. |
169 |
</p> |
170 |
<h2><a name="example"></a>Example Plug-ins</h2> |
171 |
<p> |
172 |
Example plug-ins are distributed with Reblog, and can be activated by |
173 |
following <a href="#using">the directions for use above</a>. |
174 |
Some (<a href="#plugin-obsessivelogger">Obsessive Logger</a>) |
175 |
are simple demonstrations without much utility. Others |
176 |
(<a href="#plugin-metaweblogrpc">MetaWeblog RPC</a>, |
177 |
<a href="#plugin-feedsparkliner">Feed Sparkliner</a>) are |
178 |
fully-functional Reblog enhancements. |
179 |
</p> |
180 |
<dl> |
181 |
<dt><a name="plugin-obsessivelogger"></a>Obsessive Logger</dt> |
182 |
<dd> |
183 |
<p> |
184 |
This example plug-in contains handlers for every |
185 |
overridable event in Reblog. Each handler method |
186 |
appends a note to the webserver error log using |
187 |
PHP's <code>error_log</code> function. |
188 |
</p> |
189 |
<p> |
190 |
Useful for debugging, not recommended for use in |
191 |
a production environment. |
192 |
</p> |
193 |
<p> |
194 |
Demonstrates entry-level plug-in functionality. |
195 |
</p> |
196 |
</dd> |
197 |
<dt><a name="plugin-updatelogger"></a>Update Logger</dt> |
198 |
<dd> |
199 |
<p> |
200 |
Logs updates to individual feed items. Logs are stored |
201 |
in <code>items_userdata</code> table, and can be |
202 |
displayed in the item list to show when and how |
203 |
individual items were modified. |
204 |
</p> |
205 |
<p> |
206 |
Useful for debugging purposes, initially written in |
207 |
response to strange "resurrection" behavior in certain |
208 |
feeds where past archived items were being marked unread. |
209 |
Helped in understanding GUID generation behavior and led |
210 |
to <a href="#plugin-feeextinguisher">Feed Extinguisher</a> |
211 |
plugin. |
212 |
</p> |
213 |
<p> |
214 |
Demonstrates modifications to database in response to |
215 |
specific events (<a href="#method-savedModifiedItem">savedModifiedItem</a>, |
216 |
<a href="#method-savedNewItem">savedNewItem</a>, |
217 |
<a href="#method-freshenedUserFeedItems">freshenedUserFeedItems</a>) |
218 |
and persistence of plugin class instances. Also shows |
219 |
how to use existing Reblog Javascript functions |
220 |
(<code class="method">populate_item_body()</code> from |
221 |
<code>style/dom.js</code> in <a href="#method-itemTabHTML">itemTabHTML</a> |
222 |
method) and remotely-available methods |
223 |
(<code class="method">updateLogHTML()</code>) |
224 |
to create interactive interface elements. |
225 |
</p> |
226 |
</dd> |
227 |
<dt><a name="plugin-feeextinguisher"></a>Feed Extinguisher</dt> |
228 |
<dd> |
229 |
<p> |
230 |
Munges incoming information from <a |
231 |
href="http://feedburner.com">FeedBurner</a>, removing |
232 |
“Feed Flare” and restoring original |
233 |
item links. |
234 |
</p> |
235 |
<p> |
236 |
Useful for minimizing specious updates to entries |
237 |
resulting from flare changes in Feed Burner, rather |
238 |
than actual content changes in the original feed. |
239 |
</p> |
240 |
<p> |
241 |
Demonstrates modification of raw feed data before |
242 |
saving to database, without modifying Reblog interface. |
243 |
</p> |
244 |
</dd> |
245 |
<dt><a name="plugin-feedsparkliner"></a>Feed Sparkliner</dt> |
246 |
<dd> |
247 |
<p> |
248 |
Generates "sparklines", tiny graphs showing feed |
249 |
activity over time. These are displayed in the feed list. |
250 |
Active only when PHP GD (graphics library) extension |
251 |
is present. |
252 |
</p> |
253 |
<p> |
254 |
Useful for comparing relative amounts of activity |
255 |
between feeds. |
256 |
</p> |
257 |
<p> |
258 |
Demonstrates caching of files (each |
259 |
sparkline is a PNG graphic stashed in the |
260 |
<code>cache</code> directory) and additional feed |
261 |
interface tabs (<a href="#method-feedTabHTML">feedTabHTML</a>). |
262 |
</p> |
263 |
</dd> |
264 |
<dt><a name="plugin-flaggedentry"></a>Flagged Entry</dt> |
265 |
<dd> |
266 |
<p> |
267 |
Adds a "Flag" tab to each item in Reblog, so that |
268 |
individual items can be flagged for later reading. |
269 |
Also adds a short menu to the right-hand sidebar with |
270 |
a quick link to flagged items that have been archived, |
271 |
published, or are new. |
272 |
</p> |
273 |
<p> |
274 |
Demonstrates custom additional interface tabs and |
275 |
metadata-specific item view URL's. |
276 |
</p> |
277 |
</dd> |
278 |
<dt><a name="plugin-enclosurehandler"></a>Enclosure Handler</dt> |
279 |
<dd> |
280 |
<p> |
281 |
Basic awareness and handling of RSS 2.0 enclosures, |
282 |
used by podcasters to distribute audio and video |
283 |
files. Encountered enclosures are saved to the |
284 |
database, and shown as links in item tabs or |
285 |
collected into playlists and displayed in feeds list. |
286 |
</p> |
287 |
<p> |
288 |
Useful for subscribing to podcasts within Reblog. |
289 |
</p> |
290 |
<p> |
291 |
Demonstrates advanced use of the <code>items_userdata</code> |
292 |
table: new data about item enclosures are written to |
293 |
the database, and the <code class="method">getUserItems()</code> |
294 |
and <code class="method">getUserFeeds()</code> argument lists are modified |
295 |
(<a href="#method-gotUserItemsQueryArguments">gotUserItemsQueryArguments</a>, |
296 |
<a href="#method-gotUserFeedsQueryArguments">gotUserFeedsQueryArguments</a>) |
297 |
to automatically extract this information when |
298 |
generating item and feed lists. Links are added to the |
299 |
sidebar (<a href="#method-menuMessageHTML">menuMessageHTML</a>) |
300 |
that show only those items which contain enclosures, |
301 |
showing that the item list can be generated based on |
302 |
matched metadata criteria. |
303 |
</p> |
304 |
<p> |
305 |
Each feed in the feed list also gets a new enclosure |
306 |
tab, which uses plugin-provided Javascript methods to |
307 |
generate an instance of the XSPF Flash Player, a |
308 |
lightweight audio player. XSPF playlists are generated |
309 |
at feed-update time and stored in the <code>cache</code> |
310 |
directory. |
311 |
</p> |
312 |
<p> |
313 |
Also demonstrates that plug-ins may make use of |
314 |
additional code beyond the core class. This one contains |
315 |
and additional helper class and the XSPF player library. |
316 |
</p> |
317 |
</dd> |
318 |
<dt><a name="plugin-metaweblogrpc"></a>MetaWeblog RPC</dt> |
319 |
<dd> |
320 |
<p> |
321 |
Implements the MetaWeblog API, a method for remotely |
322 |
updating blogs. If configured, all published Reblog |
323 |
items are also automatically posted to an external |
324 |
weblog. This API is implemented by the popular |
325 |
blogging tool Wordpress. |
326 |
</p> |
327 |
<p> |
328 |
Useful for populating an external blog with published |
329 |
RSS entries. |
330 |
</p> |
331 |
<p> |
332 |
Demonstrates advanced actions in response to specific events |
333 |
(<a href="#method-markedItemPublished">markedItemPublished</a>, |
334 |
<a href="#method-markedItemsPublished">markedItemsPublished</a>, |
335 |
<a href="#method-markedItemUnpublished">markedItemUnpublished</a>, |
336 |
<a href="#method-markedItemsUnpublished">markedItemsUnpublished</a>, |
337 |
<a href="#method-postedItem">postedItem</a>, |
338 |
<a href="#method-setItemCommentTags">setItemCommentTags</a>, |
339 |
<a href="#method-setItemTitleContentLink">setItemTitleContentLink</a>, |
340 |
<a href="#method-setItemLink">setItemLink</a>) and |
341 |
possibilities for connections between Reblog and |
342 |
external services. |
343 |
</p> |
344 |
</dd> |
345 |
<dt><a name="plugin-atomapi"></a>Atom API</dt> |
346 |
<dd> |
347 |
<p> |
348 |
Based on <a href="#plugin-metaweblogrpc">MetaWeblog RPC</a>, |
349 |
implements Atom protocol for publishing Reblog items |
350 |
to blogs such as <a href="http://www.blogger.com">Blogger</a>. |
351 |
</p> |
352 |
</dd> |
353 |
<dt><a name="plugin-deliciouspost"></a>Del.icio.us Post</dt> |
354 |
<dd> |
355 |
<p> |
356 |
Based on <a href="#plugin-metaweblogrpc">MetaWeblog RPC</a>, |
357 |
implements Del.icio.us API for posting new social bookmarks. |
358 |
</p> |
359 |
</dd> |
360 |
<dt><a name="plugin-similarentries"></a>Similar Entries</dt> |
361 |
<dd> |
362 |
<p> |
363 |
Displays a list of similar RSS entries based on full |
364 |
text search. |
365 |
</p> |
366 |
<p> |
367 |
Useful for finding duplicate information |
368 |
among many feeds, and searching for older related items. |
369 |
</p> |
370 |
<p> |
371 |
Demonstrates advanced interface modifications, with |
372 |
new item tabs for pulling in chunks of server-generated |
373 |
HTML asynchronously from <code class="method">similarEntriesHTML()</code>, |
374 |
and interactive elements for archiving similar items |
375 |
within and among dynamically-generated content areas. |
376 |
</p> |
377 |
</dd> |
378 |
</dl> |
379 |
<h2><a name="writing"></a>Writing Plug-ins</h2> |
380 |
<h3><a name="writing-requirements"></a>Requirements</h3> |
381 |
<p> |
382 |
A valid Reblog plug-in: |
383 |
</p> |
384 |
<ol> |
385 |
<li> |
386 |
<p> |
387 |
Must be a PHP class, included in a file whose name ends |
388 |
in <em>.plugin.php</em>, in the <code>plugins</code> directory. |
389 |
</p> |
390 |
</li> |
391 |
<li> |
392 |
<p> |
393 |
Must have a static class variable <code>$activePlugin</code>, |
394 |
set to boolean <code>true</code>: |
395 |
</p> |
396 |
<blockquote> |
397 |
<code>var $activePlugin = true;</code> |
398 |
</blockquote> |
399 |
</li> |
400 |
<li> |
401 |
<p> |
402 |
Must have a constructor that accepts a single argument, an |
403 |
instance of <code>RF_Controller</code>. Plug-in classes are |
404 |
instantiated in <code class="method">RF_Controller::loadPlugins()</code>, |
405 |
and the passed instance may be used for database access. |
406 |
</p> |
407 |
</li> |
408 |
<li> |
409 |
<p> |
410 |
Must statically declare any methods intended for remote |
411 |
access via JSON RPC: |
412 |
</p> |
413 |
<blockquote> |
414 |
<code>var $remoteMethods = array("method1", "method2");</code> |
415 |
</blockquote> |
416 |
</li> |
417 |
</ol> |
418 |
<h3><a name="writing-instantiationinvokation"></a>Instantiation and Remote Invokation</h3> |
419 |
<p> |
420 |
See <code class="method">RF_Controller::loadPlugins()</code> for the |
421 |
iteration over <code class="method">get_declared_classes()</code> and |
422 |
<code class="method">get_class_vars()</code> that determines valid plugin |
423 |
classes and instantiates them into a <code>$plugins</code> array. |
424 |
</p> |
425 |
<p> |
426 |
See <code class="method">RF_Controller::invokePlugin()</code> for the call |
427 |
to <code class="method">method_exists()</code> and comparison to |
428 |
<code>$remoteMethods</code> which verifies a valid remote RPC call. |
429 |
In remote requests, method names can be specified in one of two ways: |
430 |
</p> |
431 |
<ol> |
432 |
<li> |
433 |
<p> |
434 |
Retrieve an array of responses to all plugins with |
435 |
a named method defined: <em>method_name</em>. |
436 |
If only one plugin defines a method with this name, |
437 |
a one-element array will be returned. |
438 |
</p> |
439 |
</li> |
440 |
<li> |
441 |
<p> |
442 |
Retrieve a single response from an existing named |
443 |
plugin with a named method defined: |
444 |
<em>plugin_classname.method_name</em>. |
445 |
</p> |
446 |
</li> |
447 |
</ol> |
448 |
<p> |
449 |
Methods whose names conflict with those belonging to |
450 |
<code>RF_Userdata_Controller</code> will not work in JSON |
451 |
RPC calls. Most methods of <code>RF_Userdata_Controller</code> |
452 |
make calls to <code class="method">RF_Controller::invokePlugin()</code> |
453 |
after performing their assigned actions. For example, in |
454 |
<code class="method">RF_Userdata_Controller::markItemPublished()</code>, the plug-in |
455 |
method <a href="#method-markedItemPublished">markedItemPublished</a> |
456 |
is invoked. This method should be implented in a plug-in where |
457 |
actions resulting from item publishing are desired. |
458 |
</p> |
459 |
<h3><a name="writing-arguments"></a>Arguments</h3> |
460 |
<p> |
461 |
Instances of <code class="class">RF_Item</code> or |
462 |
<code class="class">RF_Feed</code> passed to a method via remote calls |
463 |
typically have only an <code>id</code> defined, and other properties may |
464 |
need to loaded from the database. See the <code class="method">similarEntriesHTML()</code> |
465 |
method in <a href="#plugin-similarentries">Similar Entries</a> |
466 |
for an example of this pattern: |
467 |
</p> |
468 |
<blockquote> |
469 |
<code> |
470 |
$item = $this->controller->getUserItem($GLOBALS['REBLOG_USER'], $item); |
471 |
</code> |
472 |
</blockquote> |
473 |
<h3><a name="writing-cachingdata"></a>Caching Data</h3> |
474 |
<p> |
475 |
Plug-ins may write to the cache directory, generally called |
476 |
<em>cache</em> and accessible via the function |
477 |
<code>get_configured_cache_dir()</code>. This directory is world readable |
478 |
and accessible via HTTP, so no sensitive information should be saved there. |
479 |
</p> |
480 |
<h2><a name="builtin-methods"></a>Built-in Methods</h2> |
481 |
<p> |
482 |
Reblog has a wide variety of built-in methods. These are generally |
483 |
event hooks called at particular points in the operation of classes |
484 |
such as <code>RF_Controller</code> or <code>RF_Userdata_Controller</code> |
485 |
which allow default behaviors to be modified. These are typically |
486 |
named with past-tense verbs, and are invoked <em>after</em> their |
487 |
associated action. |
488 |
</p> |
489 |
<p> |
490 |
All built-in plug-in methods have arguments passed by reference and |
491 |
most have no return values. |
492 |
</p> |
493 |
<blockquote> |
494 |
<code> |
495 |
$item = $this->controller->getUserItem($GLOBALS['REBLOG_USER'], $item); |
496 |
</code> |
497 |
</blockquote> |
498 |
<h3><a name="builtin-gettinglists"></a>Getting Lists of Items and Feeds</h3> |
499 |
<p> |
500 |
When retrieving user <code class="class">RF_Item</code>s via |
501 |
<code class="method">RF_Controller::getUserItems()</code>, a |
502 |
series of events takes place: |
503 |
</p> |
504 |
<ol> |
505 |
<li> |
506 |
<p> |
507 |
<a href="#method-gotUserItemsQueryArguments">gotUserItemsQueryArguments</a>: |
508 |
<br /> |
509 |
Arguments to <code class="method">RF_Controller::getUserItems()</code> |
510 |
have been processed and may be modified. For example, the |
511 |
<a href="#plugin-enclosurehandler">Enclosure Handler</a> |
512 |
plug-in adds <em>metadata</em> arguments so that extra |
513 |
information from the <code>items_userdata</code> table |
514 |
may be included in the listing with no extra SQL queries. |
515 |
</p> |
516 |
</li> |
517 |
<li> |
518 |
<p> |
519 |
<a href="#method-gotUserItemsQueryConditions">gotUserItemsQueryConditions</a>: |
520 |
<br /> |
521 |
SQL conditions (based on arguments passed and |
522 |
modified earlier) for use by |
523 |
<code class="method">RF_Controller::getUserItemsQuery()</code> |
524 |
have been compiled into an array of test fragments which |
525 |
may be modified individually. |
526 |
</p> |
527 |
</li> |
528 |
<li> |
529 |
<p> |
530 |
<a href="#method-gotUserItemsQuery">gotUserItemsQuery</a>: |
531 |
<br /> |
532 |
An SQL query (based on arguments passed and modified |
533 |
earlier) has been generated, including conditions from |
534 |
the previous step. This query may be edited as a |
535 |
string before being passed to the database. |
536 |
</p> |
537 |
</li> |
538 |
<li> |
539 |
<p> |
540 |
<a href="#method-gotUserItems">gotUserItems</a>: |
541 |
<br /> |
542 |
A list of <code class="class">RF_Item</code>s has been |
543 |
retrieved from the database based on the SQL query, |
544 |
and may be modified individually before return from |
545 |
<code class="method">RF_Controller::getUserItems()</code>. |
546 |
</p> |
547 |
</li> |
548 |
</ol> |
549 |
<p> |
550 |
This series of methods is identical in the case of |
551 |
<code class="class">RF_Feed</code>s returned by |
552 |
<code class="method">RF_Controller::getUserFeeds()</code>: |
553 |
<a href="#method-gotUserFeedsQueryArguments">gotUserFeedsQueryArguments</a>, |
554 |
<a href="#method-gotUserFeedsQueryConditions">gotUserFeedsQueryConditions</a>, |
555 |
<a href="#method-gotUserFeedsQuery">gotUserFeedsQuery</a>, |
556 |
<a href="#method-gotUserFeeds">gotUserFeeds</a>. |
557 |
</p> |
558 |
<h3><a name="builtin-templatemethods"></a>Template Methods</h3> |
559 |
<p> |
560 |
Some methods should return simple HTML strings, for use by |
561 |
Smarty templates: |
562 |
</p> |
563 |
<ul> |
564 |
<li> |
565 |
<p> |
566 |
<a href="#method-pageHeadHTML">pageHeadHTML</a>: |
567 |
<br /> |
568 |
Included in the <code><head></code> of the |
569 |
HTML page, an ideal location for <code><script/></code> |
570 |
or <code><style/></code> sections. |
571 |
</p> |
572 |
</li> |
573 |
<li> |
574 |
<p> |
575 |
<a href="#method-menuMessageHTML">menuMessageHTML</a>: |
576 |
<br /> |
577 |
Included at the bottom of the sidebar menu, good for |
578 |
interface elements that should affect the whole page. |
579 |
</p> |
580 |
</li> |
581 |
<li> |
582 |
<p> |
583 |
<a href="#method-feedTabHTML">feedTabHTML</a>: |
584 |
<br /> |
585 |
Included in each feed's <code>extra</code> section. |
586 |
Additional tabs should be simple <code><a/></code> |
587 |
elements with enclosed text or graphics. |
588 |
</p> |
589 |
</li> |
590 |
<li> |
591 |
<p> |
592 |
<a href="#method-itemTabHTML">itemTabHTML</a>: |
593 |
<br /> |
594 |
Included in each item's <code>extra</code> section. |
595 |
Additional tabs should be simple <code><a/></code> |
596 |
elements with enclosed text or graphics. |
597 |
</p> |
598 |
</li> |
599 |
</ul> |
600 |
<h3><a name="builtin-order"></a>Order of Invokation</h3> |
601 |
<p> |
602 |
All built-in plug-in methods have arguments passed by reference, so |
603 |
that chains of plug-ins can perform operations serially. The order in |
604 |
which plug-ins are invoked is somewhat arbitrary, determined by |
605 |
<code class="method">get_declared_classes()</code>. |
606 |
</p> |
607 |
<h3><a name="builtin-dictionary"></a>Method Dictionary</h3> |
608 |
<dl class="methods"> |
609 |
<dt><a name="method-clientCreated"></a>clientCreated</dt> |
610 |
<dd> |
611 |
<p>Created a new RF_Client_Controller instance, with |
612 |
with contained view and controller objects.</p> |
613 |
<p class="arguments-head">Args:</p> |
614 |
<ol class="arguments"> |
615 |
<li><code class="class">RF_Client_Controller</code></li> |
616 |
</ol> |
617 |
</dd> |
618 |
<dt><a name="method-feedDeleted"></a>feedDeleted</dt> |
619 |
<dd> |
620 |
<p>Deleted a feed completely.</p> |
621 |
<p class="arguments-head">Args:</p> |
622 |
<ol class="arguments"> |
623 |
<li><code class="class">RF_Feed</code></li> |
624 |
</ol> |
625 |
</dd> |
626 |
<dt><a name="method-feedTabHTML"></a>feedTabHTML</dt> |
627 |
<dd> |
628 |
<p>Retrieve a string of HTML for use in the feed tabs, |
629 |
useful when a plug-in requires per-feed interface or |
630 |
form elements. Return value should be a single HTML |
631 |
anchor ("A") element.</p> |
632 |
<p class="arguments-head">Args:</p> |
633 |
<ol class="arguments"> |
634 |
<li><code class="class">RF_Feed</code></li> |
635 |
</ol> |
636 |
</dd> |
637 |
<dt><a name="method-flushedObsoleteItems"></a>flushedObsoleteItems</dt> |
638 |
<dd> |
639 |
<p>Flushed obsolete items from a feed for all users.</p> |
640 |
<p class="arguments-head">Args:</p> |
641 |
<ol class="arguments"> |
642 |
<li><code class="class">RF_Feed</code></li> |
643 |
<li>array of <code class="class">RF_Item</code>s</li> |
644 |
</ol> |
645 |
</dd> |
646 |
<dt><a name="method-flushedObsoleteUserItems"></a>flushedObsoleteUserItems</dt> |
647 |
<dd> |
648 |
<p>Flushed obsolete items from a feed for a given user.</p> |
649 |
<p class="arguments-head">Args:</p> |
650 |
<ol class="arguments"> |
651 |
<li><code class="class">RF_User</code></li> |
652 |
<li><code class="class">RF_Feed</code></li> |
653 |
<li>array of <code class="class">RF_Item</code>s</li> |
654 |
</ol> |
655 |
</dd> |
656 |
<dt><a name="method-freshenedUserFeedItems"></a>freshenedUserFeedItems</dt> |
657 |
<dd> |
658 |
<p>Freshened items in a feed for a given user. These items |
659 |
may have already been archived, but they were changed in |
660 |
the original RSS feed and thus should be revived.</p> |
661 |
<p class="arguments-head">Args:</p> |
662 |
<ol class="arguments"> |
663 |
<li><code class="class">RF_User</code></li> |
664 |
<li><code class="class">RF_Feed</code></li> |
665 |
<li>array of <code class="class">RF_Item</code>s</li> |
666 |
</ol> |
667 |
</dd> |
668 |
<dt><a name="method-gotFeedItems"></a>gotFeedItems</dt> |
669 |
<dd> |
670 |
<p>Got a list of items for a given feed.</p> |
671 |
<p class="arguments-head">Args:</p> |
672 |
<ol class="arguments"> |
673 |
<li><code class="class">RF_Feed</code></li> |
674 |
<li>array of <code class="class">RF_Item</code>s</li> |
675 |
</ol> |
676 |
</dd> |
677 |
<dt><a name="method-gotFeeds"></a>gotFeeds</dt> |
678 |
<dd> |
679 |
<p>Got a list of all feeds.</p> |
680 |
<p class="arguments-head">Args:</p> |
681 |
<ol class="arguments"> |
682 |
<li>array of <code class="class">RF_Feed</code>s</li> |
683 |
</ol> |
684 |
</dd> |
685 |
<dt><a name="method-gotFeedUsers"></a>gotFeedUsers</dt> |
686 |
<dd> |
687 |
<p>Got a list of users for a given feed.</p> |
688 |
<p class="arguments-head">Args:</p> |
689 |
<ol class="arguments"> |
690 |
<li><code class="class">RF_Feed</code></li> |
691 |
<li>array of <code class="class">RF_User</code>s</li> |
692 |
</ol> |
693 |
</dd> |
694 |
<dt><a name="method-gotUserFeeds"></a>gotUserFeeds</dt> |
695 |
<dd> |
696 |
<p>Got a list of feeds resulting from SQL query, for a given user.</p> |
697 |
<p class="arguments-head">Args:</p> |
698 |
<ol class="arguments"> |
699 |
<li><code class="class">RF_User</code></li> |
700 |
<li>array of <code class="class">RF_Feed</code>s</li> |
701 |
</ol> |
702 |
</dd> |
703 |
<dt><a name="method-gotUserFeedsQuery"></a>gotUserFeedsQuery</dt> |
704 |
<dd> |
705 |
<p>Got a complete SQL query for selecting a list of feeds, |
706 |
for a given user.</p> |
707 |
<p class="arguments-head">Args:</p> |
708 |
<ol class="arguments"> |
709 |
<li><code class="class">RF_User</code></li> |
710 |
<li>string: query</li> |
711 |
</ol> |
712 |
</dd> |
713 |
<dt><a name="method-gotUserFeedsQueryArguments"></a>gotUserFeedsQueryArguments</dt> |
714 |
<dd> |
715 |
<p>Got a list arguments, which are subsequently used to |
716 |
generate an SQL query for a given user. These may include |
717 |
qualifiers to select a range of feeds, or perform joins |
718 |
to retrieve feed metadata.</p> |
719 |
<p class="arguments-head">Args:</p> |
720 |
<ol class="arguments"> |
721 |
<li>associative array of arguments</li> |
722 |
</ol> |
723 |
</dd> |
724 |
<dt><a name="method-gotUserFeedsQueryConditions"></a>gotUserFeedsQueryConditions</dt> |
725 |
<dd> |
726 |
<p>Got a list of SQL conditions, used in generated SQL |
727 |
query for a given user. These are mostly conditionals |
728 |
used directly in <code>WHERE</code> clauses.</p> |
729 |
<p class="arguments-head">Args:</p> |
730 |
<ol class="arguments"> |
731 |
<li><code class="class">RF_User</code></li> |
732 |
<li>associative array of conditions</li> |
733 |
<li>associative array of arguments, from which conditions were generated</li> |
734 |
</ol> |
735 |
</dd> |
736 |
<dt><a name="method-gotUserItems"></a>gotUserItems</dt> |
737 |
<dd> |
738 |
<p>Got a list of items resulting from SQL query, for a given user.</p> |
739 |
<p class="arguments-head">Args:</p> |
740 |
<ol class="arguments"> |
741 |
<li><code class="class">RF_User</code></li> |
742 |
<li>array of <code class="class">RF_Item</code>s</li> |
743 |
</ol> |
744 |
</dd> |
745 |
<dt><a name="method-gotUserItemsQuery"></a>gotUserItemsQuery</dt> |
746 |
<dd> |
747 |
<p>Got a complete SQL query for selecting a list of items, |
748 |
for a given user.</p> |
749 |
<p class="arguments-head">Args:</p> |
750 |
<ol class="arguments"> |
751 |
<li><code class="class">RF_User</code></li> |
752 |
<li>string: query</li> |
753 |
</ol> |
754 |
</dd> |
755 |
<dt><a name="method-gotUserItemsQueryArguments"></a>gotUserItemsQueryArguments</dt> |
756 |
<dd> |
757 |
<p>Got a list arguments, which are subsequently used to |
758 |
generate an SQL query for a given user. These may include |
759 |
qualifiers to select a range of items, or perform joins |
760 |
to retrieve item metadata.</p> |
761 |
<p class="arguments-head">Args:</p> |
762 |
<ol class="arguments"> |
763 |
<li>associative array of arguments</li> |
764 |
</ol> |
765 |
</dd> |
766 |
<dt><a name="method-gotUserItemsQueryConditions"></a>gotUserItemsQueryConditions</dt> |
767 |
<dd> |
768 |
<p>Got a list of SQL conditions, used in generated SQL |
769 |
query for a given user. These are mostly conditionals |
770 |
used directly in <code>WHERE</code> clauses.</p> |
771 |
<p class="arguments-head">Args:</p> |
772 |
<ol class="arguments"> |
773 |
<li><code class="class">RF_User</code></li> |
774 |
<li>associative array of conditions</li> |
775 |
<li>associative array of arguments, from which conditions were generated</li> |
776 |
</ol> |
777 |
</dd> |
778 |
<dt><a name="method-gotUserTags"></a>gotUserTags</dt> |
779 |
<dd> |
780 |
<p>Got a list of tags for a given user.</p> |
781 |
<p class="arguments-head">Args:</p> |
782 |
<ol class="arguments"> |
783 |
<li><code class="class">RF_User</code></li> |
784 |
<li>string: "item" or "feed", depending on which tags were retreived.</li> |
785 |
<li>array of strings: tags</li> |
786 |
</ol> |
787 |
</dd> |
788 |
<dt><a name="method-itemTabHTML"></a>itemTabHTML</dt> |
789 |
<dd> |
790 |
<p>Retrieve a string of HTML for use in the item tabs, |
791 |
useful when a plug-in requires per-item interface or |
792 |
form elements. Return value should be a single HTML |
793 |
anchor ("A") element.</p> |
794 |
<p class="arguments-head">Args:</p> |
795 |
<ol class="arguments"> |
796 |
<li><code class="class">RF_Item</code></li> |
797 |
</ol> |
798 |
</dd> |
799 |
<dt><a name="method-loadedPlugins"></a>loadedPlugins</dt> |
800 |
<dd> |
801 |
<p>Finished loading plug-ins.</p> |
802 |
</dd> |
803 |
<dt><a name="method-markedFeedPublished"></a>markedFeedPublished</dt> |
804 |
<dd> |
805 |
<p>Marked a user's feed published.</p> |
806 |
<p class="arguments-head">Args:</p> |
807 |
<ol class="arguments"> |
808 |
<li><code class="class">RF_User</code></li> |
809 |
<li><code class="class">RF_Feed</code></li> |
810 |
</ol> |
811 |
</dd> |
812 |
<dt><a name="method-markedFeedUnpublished"></a>markedFeedUnpublished</dt> |
813 |
<dd> |
814 |
<p>Marked a user's feed unpublished.</p> |
815 |
<p class="arguments-head">Args:</p> |
816 |
<ol class="arguments"> |
817 |
<li><code class="class">RF_User</code></li> |
818 |
<li><code class="class">RF_Feed</code></li> |
819 |
</ol> |
820 |
</dd> |
821 |
<dt><a name="method-markedItemPublished"></a>markedItemPublished</dt> |
822 |
<dd> |
823 |
<p>Marked a user's items published.</p> |
824 |
<p class="arguments-head">Args:</p> |
825 |
<ol class="arguments"> |
826 |
<li><code class="class">RF_User</code></li> |
827 |
<li><code class="class">RF_Item</code></li> |
828 |
</ol> |
829 |
</dd> |
830 |
<dt><a name="method-markedItemRead"></a>markedItemRead</dt> |
831 |
<dd> |
832 |
<p>Marked a user's item read.</p> |
833 |
<p class="arguments-head">Args:</p> |
834 |
<ol class="arguments"> |
835 |
<li><code class="class">RF_User</code></li> |
836 |
<li><code class="class">RF_Item</code></li> |
837 |
</ol> |
838 |
</dd> |
839 |
<dt><a name="method-markedItemsPublished"></a>markedItemsPublished</dt> |
840 |
<dd> |
841 |
<p>Marked a user's items published.</p> |
842 |
<p class="arguments-head">Args:</p> |
843 |
<ol class="arguments"> |
844 |
<li><code class="class">RF_User</code></li> |
845 |
<li>array of <code class="class">RF_Item</code>s</li> |
846 |
</ol> |
847 |
</dd> |
848 |
<dt><a name="method-markedItemsRead"></a>markedItemsRead</dt> |
849 |
<dd> |
850 |
<p>Marked a user's items read.</p> |
851 |
<p class="arguments-head">Args:</p> |
852 |
<ol class="arguments"> |
853 |
<li><code class="class">RF_User</code></li> |
854 |
<li>array of <code class="class">RF_Item</code>s</li> |
855 |
</ol> |
856 |
</dd> |
857 |
<dt><a name="method-markedItemsUnread"></a>markedItemsUnread</dt> |
858 |
<dd> |
859 |
<p>Marked a user's items unread.</p> |
860 |
<p class="arguments-head">Args:</p> |
861 |
<ol class="arguments"> |
862 |
<li><code class="class">RF_User</code></li> |
863 |
<li>array of <code class="class">RF_Item</code>s</li> |
864 |
</ol> |
865 |
</dd> |
866 |
<dt><a name="method-markedItemUnpublished"></a>markedItemUnpublished</dt> |
867 |
<dd> |
868 |
<p>Marked a user's items unpublished.</p> |
869 |
<p class="arguments-head">Args:</p> |
870 |
<ol class="arguments"> |
871 |
<li><code class="class">RF_User</code></li> |
872 |
<li><code class="class">RF_Item</code></li> |
873 |
</ol> |
874 |
</dd> |
875 |
<dt><a name="method-markedItemUnread"></a>markedItemUnread</dt> |
876 |
<dd> |
877 |
<p>Marked a user's item unread.</p> |
878 |
<p class="arguments-head">Args:</p> |
879 |
<ol class="arguments"> |
880 |
<li><code class="class">RF_User</code></li> |
881 |
<li><code class="class">RF_Item</code></li> |
882 |
</ol> |
883 |
</dd> |
884 |
<dt><a name="method-menuMessageHTML"></a>menuMessageHTML</dt> |
885 |
<dd> |
886 |
<p>Retrieve a string of HTML for use in the page menu, |
887 |
useful when a plug-in requires page-wide interface or |
888 |
form elements.</p> |
889 |
</dd> |
890 |
<dt><a name="method-pageHeadHTML"></a>pageHeadHTML</dt> |
891 |
<dd> |
892 |
<p>Retrieve a string of HTML for use in the page head, |
893 |
useful when a plug-in requires additional javascript |
894 |
or style sheets.</p> |
895 |
</dd> |
896 |
<dt><a name="method-postedItem"></a>postedItem</dt> |
897 |
<dd> |
898 |
<p>Posted a new item to a user's own feed.</p> |
899 |
<p class="arguments-head">Args:</p> |
900 |
<ol class="arguments"> |
901 |
<li><code class="class">RF_User</code></li> |
902 |
<li><code class="class">RF_Item</code></li> |
903 |
</ol> |
904 |
</dd> |
905 |
<dt><a name="method-preparedItemArguments"></a>preparedItemArguments</dt> |
906 |
<dd> |
907 |
<p>Prepared item arguments, after parsing RSS but before |
908 |
saving to database. This is the last chance to munge |
909 |
item data before it's saved.</p> |
910 |
<p class="arguments-head">Args:</p> |
911 |
<ol class="arguments"> |
912 |
<li><code class="class">RF_Feed</code></li> |
913 |
<li>associative array: names and values of arguments ready for <code class="class">RF_Item</code> constructor</li> |
914 |
<li>associative array: names and values of item data direct from RSS parser</li> |
915 |
</ol> |
916 |
</dd> |
917 |
<dt><a name="method-savedExistingFeed"></a>savedExistingFeed</dt> |
918 |
<dd> |
919 |
<p>Saved an existing feed.</p> |
920 |
<p class="arguments-head">Args:</p> |
921 |
<ol class="arguments"> |
922 |
<li><code class="class">RF_Feed</code></li> |
923 |
</ol> |
924 |
</dd> |
925 |
<dt><a name="method-saveModifiedItemBefore"></a>saveModifiedItemBefore</dt> |
926 |
<dd> |
927 |
<p>Before saving an item to the database, after it has been |
928 |
fetched from an RSS source and determined to have been |
929 |
modified since it was last seen. If you want to ditch the item |
930 |
entirely, you can set it to <code>null</code>.</p> |
931 |
<p class="arguments-head">Args:</p> |
932 |
<ol class="arguments"> |
933 |
<li><code class="class">RF_Item</code></li> |
934 |
</ol> |
935 |
</dd> |
936 |
<dt><a name="method-savedModifiedItem"></a>savedModifiedItem</dt> |
937 |
<dd> |
938 |
<p>Saved an item to the database, after it has been |
939 |
fetched from an RSS source and determined to have been |
940 |
modified since it was last seen.</p> |
941 |
<p class="arguments-head">Args:</p> |
942 |
<ol class="arguments"> |
943 |
<li><code class="class">RF_Item</code></li> |
944 |
</ol> |
945 |
</dd> |
946 |
<dt><a name="method-savedNewFeed"></a>savedNewFeed</dt> |
947 |
<dd> |
948 |
<p>Saved a new feed.</p> |
949 |
<p class="arguments-head">Args:</p> |
950 |
<ol class="arguments"> |
951 |
<li><code class="class">RF_Feed</code></li> |
952 |
</ol> |
953 |
</dd> |
954 |
<dt><a name="method-saveNewItemBefore"></a>saveNewItemBefore</dt> |
955 |
<dd> |
956 |
<p>Before saving an item to the database, after it has been |
957 |
fetched from an RSS source and determined to be new. |
958 |
If you want to ditch the item |
959 |
entirely, you can set it to <code>null</code>.</p> |
960 |
<p class="arguments-head">Args:</p> |
961 |
<ol class="arguments"> |
962 |
<li><code class="class">RF_Item</code></li> |
963 |
</ol> |
964 |
</dd> |
965 |
<dt><a name="method-savedNewItem"></a>savedNewItem</dt> |
966 |
<dd> |
967 |
<p>Saved an item to the database, after it has been |
968 |
fetched from an RSS source and determined to be new.</p> |
969 |
<p class="arguments-head">Args:</p> |
970 |
<ol class="arguments"> |
971 |
<li><code class="class">RF_Item</code></li> |
972 |
</ol> |
973 |
</dd> |
974 |
<dt><a name="method-setFeedTags"></a>setFeedTags</dt> |
975 |
<dd> |
976 |
<p>Modified feed tags for a given user.</p> |
977 |
<p class="arguments-head">Args:</p> |
978 |
<ol class="arguments"> |
979 |
<li><code class="class">RF_User</code></li> |
980 |
<li><code class="class">RF_feed</code></li> |
981 |
<li>array of strings: tags</li> |
982 |
</ol> |
983 |
</dd> |
984 |
<dt><a name="method-setItemCommentTags"></a>setItemCommentTags</dt> |
985 |
<dd> |
986 |
<p>Modified item comment and tags for a given user.</p> |
987 |
<p class="arguments-head">Args:</p> |
988 |
<ol class="arguments"> |
989 |
<li><code class="class">RF_User</code></li> |
990 |
<li><code class="class">RF_Item</code></li> |
991 |
<li>string: comment</li> |
992 |
<li>array of strings: tags</li> |
993 |
</ol> |
994 |
</dd> |
995 |
<dt><a name="method-setItemLink"></a>setItemLink</dt> |
996 |
<dd> |
997 |
<p>Modified item link for a given user.</p> |
998 |
<p class="arguments-head">Args:</p> |
999 |
<ol class="arguments"> |
1000 |
<li><code class="class">RF_User</code></li> |
1001 |
<li><code class="class">RF_Item</code></li> |
1002 |
<li>string: new link</li> |
1003 |
</ol> |
1004 |
</dd> |
1005 |
<dt><a name="method-setItemTags"></a>setItemTags</dt> |
1006 |
<dd> |
1007 |
<p>Modified item tags for a given user.</p> |
1008 |
<p class="arguments-head">Args:</p> |
1009 |
<ol class="arguments"> |
1010 |
<li><code class="class">RF_User</code></li> |
1011 |
<li><code class="class">RF_Item</code></li> |
1012 |
<li>array of strings: tags</li> |
1013 |
</ol> |
1014 |
</dd> |
1015 |
<dt><a name="method-setItemTitleContentLink"></a>setItemTitleContentLink</dt> |
1016 |
<dd> |
1017 |
<p>Modified item title, content and link for a given user.</p> |
1018 |
<p class="arguments-head">Args:</p> |
1019 |
<ol class="arguments"> |
1020 |
<li><code class="class">RF_User</code></li> |
1021 |
<li><code class="class">RF_Item</code></li> |
1022 |
<li>string: title</li> |
1023 |
<li>string: content</li> |
1024 |
<li>string: link</li> |
1025 |
</ol> |
1026 |
</dd> |
1027 |
<dt><a name="method-setKeyboardUse"></a>setKeyboardUse</dt> |
1028 |
<dd> |
1029 |
<p>Keyboard use has been set to <em>on</em> or <em>off</em>.</p> |
1030 |
<p class="arguments-head">Args:</p> |
1031 |
<ol class="arguments"> |
1032 |
<li><code class="class">RF_User</code></li> |
1033 |
<li>boolean: keyboard status</li> |
1034 |
</ol> |
1035 |
</dd> |
1036 |
<dt><a name="method-subscribedUserToFeed"></a>subscribedUserToFeed</dt> |
1037 |
<dd> |
1038 |
<p>Subscribed a user to a feed.</p> |
1039 |
<p class="arguments-head">Args:</p> |
1040 |
<ol class="arguments"> |
1041 |
<li><code class="class">RF_User</code></li> |
1042 |
<li><code class="class">RF_Feed</code></li> |
1043 |
</ol> |
1044 |
</dd> |
1045 |
<dt><a name="method-unsubscribedUserFromFeed"></a>unsubscribedUserFromFeed</dt> |
1046 |
<dd> |
1047 |
<p>Unsubscribed a user from a feed.</p> |
1048 |
<p class="arguments-head">Args:</p> |
1049 |
<ol class="arguments"> |
1050 |
<li><code class="class">RF_User</code></li> |
1051 |
<li><code class="class">RF_Feed</code></li> |
1052 |
</ol> |
1053 |
</dd> |
1054 |
<dt><a name="method-updatedFeed"></a>updatedFeed</dt> |
1055 |
<dd> |
1056 |
<p>Updated a feed from source URL.</p> |
1057 |
<p class="arguments-head">Args:</p> |
1058 |
<ol class="arguments"> |
1059 |
<li><code class="class">RF_Feed</code></li> |
1060 |
</ol> |
1061 |
</dd> |
1062 |
</dl> |
1063 |
<h2><a name="license"></a>License</h2> |
1064 |
<p> |
1065 |
Reblog is distributed under the GPL (see the <a href="LICENSE">LICENSE</a> file in this directory), though some of its included libraries (in<code>./library/</code>) are not. |
1066 |
</p> |
1067 |
</div> |
1068 |
</body> |
1069 |
</html> |