/usr/local/CPAN/Kwiki-HatenaAuth/Kwiki/Edit/HatenaAuthRequired.pm
package Kwiki::Edit::HatenaAuthRequired;
use strict;
our $VERSION = 0.01;
use Kwiki::Plugin '-Base';
use mixin 'Kwiki::Installer';
const class_id => 'EditHatenaAuthRequired';
const class_title => 'Require HatenaAuth to edit';
sub register {
my $registry = shift;
$registry->add(action => 'edit_noHatenaAuth');
$registry->add(hook => 'edit:edit', pre => 'require_hatenaauth');
}
sub require_hatenaauth {
my $hook = pop;
my $req = $self->hub->load_class('EditHatenaAuthRequired');
my $page = $self->pages->current;
if (! $req->have_HatenaAuth && ! $req->is_skip ) {
my $page_uri = $page->uri;
$hook->cancel(); # don't bother calling Kwiki::Edit::edit
return $self->redirect("action=edit_noHatenaAuth&page_name=$page_uri");
}
}
sub have_HatenaAuth {
return defined $self->hub->users->current->name;
}
sub edit_noHatenaAuth {
return $self->render_screen(
content_pane => 'edit_noHatenaAuth.html',
);
}
sub is_skip {
my $pages = $self->hub->config;
foreach (@{ $self->hub->config->hatenaauth_required_pages }) {
return 1 if $_ eq $self->pages->current->id;
}
return 0;
}
1;
__DATA__
__template/tt2/edit_noHatenaAuth.html__
<!-- BEGIN edit_noHatenaAuth.html -->
<div class="error">
<p>
This web site does not allow anonymous editing.
Please <a href="[% hub.load_class('user_name').uri_to_login -%]">Login via HatenaAuth</a> first.
</p>
<p>
</p>
</div>
<!-- END edit_noHatenaAuth.html -->
__template/tt2/edit_button.html__
<!-- BEGIN edit_button.html -->
[% IF hub.pages.current.is_writable && (hub.users.current.name || hub.load_class('EditHatenaAuthRequired').is_skip) %]
[% rev_id = hub.have_plugin('revisions') ? hub.revisions.revision_id : 0 %]
<a href="[% script_name %]?action=edit&page_name=[% page_uri %][% IF rev_id %]&revision_id=[% rev_id %][% END %]" accesskey="e" title="Edit This Page">
[% INCLUDE edit_button_icon.html %]
</a>
[% END %]
<!-- END edit_button.html -->
__config/hatenaauth_required.yaml__
hatenaauth_required_pages:
- skip page name
- skip page name