Kwiki-Purple
view release on metacpan or search on metacpan
lib/Kwiki/Purple/Sequence.pm view on Meta::CPAN
package Kwiki::Purple::Sequence;
use Kwiki::Plugin '-Base';
use Kwiki::Installer '-base';
use Carp;
const class_id => 'purple_sequence';
const class_title => 'Purple Sequence';
const css_file => 'purple.css';
const config_file => 'purple_sequence.yaml';
const cgi_class => 'Kwiki::Purple::Sequence::CGI';
field remote_sequence => -init =>
'$self->config->can("purple_sequence_remote") ? $self->config->purple_sequence_remote : ""';
our $VERSION = '0.03';
sub register {
my $registry = shift;
$registry->add(action => 'purple_post');
$registry->add(action => 'purple_query');
}
sub purple_post {
my $url = $self->cgi->url;
my $nid = $self->cgi->nid;
warn "URL: $url\n";
warn "NID: $nid\n";
if ($nid && $url) {
$self->_local_update_index($url, $nid);
} elsif ($url) {
$nid = $self->_local_get_next_and_update($url);
} else {
$nid = $self->_local_get_next;
}
$self->hub->headers->content_type('text/plain');
return $nid;
}
sub purple_query {
my $nid = $self->cgi->nid;
my $url = $self->_local_query_index($nid);
$self->hub->headers->content_type('text/plain');
return $url;
}
sub query_index {
my $nid = shift;
return $self->_remote_query_index($nid) if
$self->remote_sequence;
return $self->_local_query_index($nid);
}
# XXX do permissions checking a la PurpleWiki 0.9[56]
# XXX Error Handling!!!??
sub update_index {
my $url = shift or croak "must supply url";
my $nid = shift;
return $self->_remote_update_index($url, $nid) if
$self->remote_sequence;
return $self->_local_update_index($url, $nid);
}
sub get_next {
return $self->_remote_get_next if
$self->remote_sequence;
return $self->_local_get_next;
}
sub get_next_and_update {
my $url = shift;
return $self->_remote_get_next_and_update($url) if
$self->remote_sequence;
return $self->_local_get_next_and_update($url);
}
#### PRIVATE
sub _local_get_next {
$self->_lock;
my $nid = $self->_update_value($self->_increment_value($self->_get_value));
$self->_unlock;
return $nid;
}
sub _remote_get_next {
return $self->_remote_get_next_and_update;
}
sub _remote_update_index {
$self->_remote_get_next_and_update(@_);
}
sub _remote_get_next_and_update {
my $url = shift;
my $nid = shift;
my $request_url = $self->remote_sequence;
my $new_nid = $self->hub->purple->web_request(
method => 'POST',
request_url => $request_url,
post_data => [
action => 'purple_post',
$url ? (url => $url) : (),
$nid ? (nid => $nid) : (),
],
);
return $new_nid;
}
( run in 0.354 second using v1.01-cache-2.11-cpan-13bb782fe5a )