/[refeed]/trunk/plugins/README.html
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/plugins/README.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (show annotations)
Wed Jul 5 00:27:49 2006 UTC (17 years, 11 months ago) by dpavlin
File MIME type: text/html
File size: 55019 byte(s)
make working copy of trunk
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 &ldquo;Feed Flare&rdquo; 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-&gt;controller-&gt;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-&gt;controller-&gt;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>&lt;head&gt;</code> of the
569 HTML page, an ideal location for <code>&lt;script/&gt;</code>
570 or <code>&lt;style/&gt;</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>&lt;a/&gt;</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>&lt;a/&gt;</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>

Properties

Name Value
svn:mime-type text/html

  ViewVC Help
Powered by ViewVC 1.1.26