X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/8c2415d4d1ce708d2c67a264f4f370b470f06868..2891a2a1de4e3d46c7561c27758ad1b2d2ed0d6a:/doc/plugins/write.mdwn diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 5c2e14135..d2d1a6329 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -59,33 +59,39 @@ an example. Alice browses to a page and clicks Edit. -* Ikiwiki is run as a cgi. It assigns Alice a session cookie, and, - by calling the `auth` hooks, sees that she is not yet logged in. -* The `sessioncgi` hooks are then called, and one of them, - from the [[editpage]] plugin, notices that the cgi has been told "do=edit". -* The [[editpage]] plugin calls the `canedit` hook to check if this - page edit is allowed. The [[signinedit]] plugin has a hook that says not: - Alice is not signed in. -* The [[signinedit]] plugin then launches the signin process. A signin - page is built by calling the `formbuilder_setup` hook. +* Ikiwiki is run as a cgi. It assigns Alice a session cookie, and, by calling + the [[`auth`|plugins/write#auth]] hooks, sees that she is not yet logged in. +* The [[`sessioncgi`|plugins/write#sessioncgi]] hooks are then called, and one + of them, from the [[editpage]] plugin, notices that the cgi has been told + "do=edit". +* The [[editpage]] plugin calls the [[`canedit`|plugins/write#canedit]] hook + to check if this page edit is allowed. The [[signinedit]] plugin has a hook + that says not: Alice is not signed in. +* The [[signinedit]] plugin then launches the signin process. A signin page is + built by calling the [[`formbuilder_setup`|plugins/write#formbuilder]] + hook. Alice signs in with her openid. -* The [[openid]] plugin's `formbuilder` hook sees that an openid was - entered in the signin form, and redirects to Alice's openid provider. -* Alice's openid provider calls back to ikiwiki. The [[openid]] plugin - has an `auth` hook that finishes the openid signin process. +* The [[openid]] plugin's [[`formbuilder`|plugins/write#formbuilder]] hook + sees that an openid was entered in the signin form, and redirects to Alice's + openid provider. +* Alice's openid provider calls back to ikiwiki. The [[openid]] plugin has an + [[`auth`|plugins/write#auth]] hook that finishes the openid signin process. * Signin complete, ikiwiki returns to what Alice was doing before; editing a page. -* Now all the `canedit` hooks are happy. The [[editpage]] plugin calls - `formbuilder_setup` to display the page editing form. +* Now all the [[`canedit`|plugins/write#canedit]] hooks are happy. The + [[editpage]] plugin calls + [[`formbuilder_setup`|plugins/write#formbuilder]] to display the page + editing form. Alice saves her change to the page. -* The [[editpage]] plugin's `formbuilder` hook sees that the Save button - was pressed, and calls the `checkcontent` and `editcontent` hooks. - Then it saves the page to disk, and branches into the compiler part - of ikiwiki to refresh the wiki. +* The [[editpage]] plugin's [[`formbuilder`|plugins/write#formbuilder]] hook + sees that the Save button was pressed, and calls the + [[`checkcontent`|plugins/write#checkcontent]] and + [[`editcontent`|plugins/write#editcontent]] hooks. Then it saves the page + to disk, and branches into the compiler part of ikiwiki to refresh the wiki. ## Types of plugins @@ -416,7 +422,7 @@ parameters, and if it will handle this CGI request, output a page Note that cgi hooks are called as early as possible, before any ikiwiki state is loaded, and with no session information. -### auth +### auth hook(type => "auth", id => "foo", call => \&auth); @@ -429,7 +435,7 @@ object's "name" parameter to the authenticated user's name. Note that if the name is set to the name of a user who is not registered, a basic registration of the user will be automatically performed. -### sessioncgi +### sessioncgi hook(type => "sessioncgi", id => "foo", call => \&sessioncgi); @@ -438,7 +444,7 @@ is only run once a session object is available. It is passed both a CGI object and a session object. To check if the user is in fact signed in, you can check if the session object has a "name" parameter set. -### canedit +### canedit hook(type => "canedit", id => "foo", call => \&canedit); @@ -478,7 +484,7 @@ bypass it). It works exactly like the `canedit` hook, but is passed the named parameters `cgi` (a CGI object), `session` (a session object), `src`, `srcfile`, `dest` and `destfile`. -### checkcontent +### checkcontent hook(type => "checkcontent", id => "foo", call => \&checkcontent); @@ -499,7 +505,7 @@ should return a message stating what the problem is, or a function that can be run to perform whatever action is necessary to allow the user to post the content. -### editcontent +### editcontent hook(type => "editcontent", id => "foo", call => \&editcontent); @@ -510,7 +516,7 @@ user, the page name, a `CGI` object, and the user's `CGI::Session`. It can modify the content as desired, and should return the content. -### formbuilder +### formbuilder hook(type => "formbuilder_setup", id => "foo", call => \&formbuilder_setup); hook(type => "formbuilder", id => "foo", call => \&formbuilder); @@ -627,7 +633,7 @@ describes the plugin as a whole. For example: strictly required. * `section` can optionally specify which section in the config file the plugin fits in. The convention is to name the sections the - same as the tags used for [[plugins|plugin]] on this wiki. + same as the tags used for [[plugins]] on this wiki. ### genwrapper @@ -678,7 +684,7 @@ wiki updates. The `%wikistate` hash can be used by a plugin to store persistant state that is not bound to any one page. To set a value, use -`$wikistate{$id}{$key}=$value, where `$value` is anything Storable can +`$wikistate{$id}{$key}=$value`, where `$value` is anything Storable can serialize, `$key` is any string you like, and `$id` must be the same as the "id" parameter passed to `hook()` when registering the plugin, so that the state can be dropped if the plugin is no longer used. @@ -1253,6 +1259,20 @@ and an error message on failure. This hook and `rcs_preprevert` are optional, if not implemented, no revert web interface will be available. +### `rcs_find_changes($)` + +Finds changes committed since the passed RCS-specific rev. Returns +a hash of the files changed, a hash of the files deleted, and the +current rev. + +This hook is optional. + +### `rcs_get_current_rev()` + +Gets a RCS-specific rev, which can later be passed to `rcs_find_changes`. + +This hook is optional. + ### PageSpec plugins It's also possible to write plugins that add new functions to