Confluence-Client-XMLRPC
view release on metacpan or search on metacpan
lib/Confluence/Client/XMLRPC.pm view on Meta::CPAN
return '';
}
$self->{token} = $result;
_debugPrint( "Checking Confluence server version" ) if $CONFLDEBUG;
my $serverInfo = _rpc( $self, 'getServerInfo' );
if ( !defined($serverInfo) or ref($serverInfo) ne ref({}) ) {
croak "Unable to determine Confluence version: aborting" if $RaiseError;
warn "Unable to determine Confluence version: aborting" if $PrintError;
$self->{token} = '';
return '';
}
$self->{'_serverInfo'} = $serverInfo;
$self->{'_cflVersion'} = sprintf( "%03s%03s%03s", @{ $serverInfo }{ 'majorVersion', 'minorVersion', 'patchLevel' } );
# set default API version based on Confluence version (unless explicitly given)
unless ( defined($version) and $version =~ /\A(?:confluence)?([1-9])\Z/i ) {
if ( $self->{'_cflVersion'} ge '004000000' ) {
$API = 'confluence2';
}
else {
$API = 'confluence1';
}
}
return $self;
} ## end sub new
# login is an alias for new
sub login {
return new @_;
}
sub getServerInfo {
my Confluence::Client::XMLRPC $self = shift;
if ($CONFLDEBUG) {
_debugPrint("Retrieving serverInfo from local cache");
_debugPrint( "Result=", $self->{'_serverInfo'} );
}
return $self->{'_serverInfo'};
}
sub getPageSummary {
my Confluence::Client::XMLRPC $self = shift;
if ( $self->{'_cflVersion'} ge "004000000" ) {
return _rpc( $self, 'getPageSummary', @_ );
}
else {
# Emulate method on older Confluence versions
if ( my $page = _rpc( $self, 'getPage', @_ ) ) {
my (%data) = map { $_ => $page->{$_} } grep { /\A(?:id|parentId|permissions|space|title|url|version)\Z/ } keys %{$page};
return \%data;
}
else {
return '';
}
}
}
sub updatePage {
my Confluence::Client::XMLRPC $self = shift;
my $page = shift;
my $pageUpdateOptions = ( shift || {} );
if ( $self->{'_cflVersion'} ge "002010000" ) {
_debugPrint("Using API method updatePage() for Confluence >= 2.10") if $CONFLDEBUG;
return _rpc( $self, 'updatePage', $page, $pageUpdateOptions );
}
else {
_debugPrint("Trying to emulate updatePage() for Confluence < 2.10") if $CONFLDEBUG;
if ( my $existingPage = $self->getPage( $page->{'id'} ) ) {
my %new = ();
foreach my $key ( keys %{$existingPage} ) {
$new{$key} = $existingPage->{$key};
}
foreach my $key ( keys %{$page} ) {
$new{$key} = $page->{$key};
}
return _rpc( $self, 'storePage', \%new );
}
}
return '';
}
sub updateOrStorePage {
my Confluence::Client::XMLRPC $self = shift;
my $newPage = shift;
my $couldUpdate = 1;
foreach my $field ( qw( id space title content version ) ) {
$couldUpdate--, last unless exists $newPage->{$field};
}
# do we have all necessary data for calling the updatePage method?
if ($couldUpdate) {
return $self->updatePage( $newPage, @_ );
}
elsif ( exists( $newPage->{'id'} ) ) {
# something is missing, but we might be able to get it from Confluence
# check if page already exists
my ( $raise, $print ) = ( setRaiseError(0), setPrintError(0) );
my $oldPage = $self->getPageSummary( $newPage->{'id'} );
setRaiseError($raise);
setPrintError($print);
if ( defined($oldPage) and ref($oldPage) eq ref({}) ) {
foreach my $key ( keys %{$newPage} ) {
$oldPage->{$key} = $newPage->{$key}
}
return $self->updatePage( $oldPage, @_ );
}
}
elsif ( exists( $newPage->{'space'} ) and exists( $newPage->{'title'} ) ) {
# can store new page with these two fields
# check if page already exists
my ( $raise, $print ) = ( setRaiseError(0), setPrintError(0) );
my $oldPage = $self->getPageSummary( $newPage->{'space'}, $newPage->{'title'} );
setRaiseError($raise);
setPrintError($print);
if ( defined($oldPage) and ref($oldPage) eq ref({}) ) {
foreach my $key ( keys %{$newPage} ) {
$oldPage->{$key} = $newPage->{$key}
}
return $self->updatePage( $oldPage, @_ );
}
}
# might as well fail...
return _rpc( $self, 'storePage', $newPage );
}
sub _rpc {
my Confluence::Client::XMLRPC $self = shift;
my $method = shift;
croak "ERROR: Not connected" unless $self->{token};
my @args = map { argcopy( $_, 0 ) } @_;
_debugPrint( "Sending $API.$method ", @args ) if $CONFLDEBUG;
my $result = $self->{client}->simple_request( "$API.$method", $self->{token}, @args );
$LastError
= defined($result)
? (
ref($result) eq 'HASH'
? (
exists $result->{faultString}
( run in 1.704 second using v1.01-cache-2.11-cpan-39bf76dae61 )