diff --git a/templates/default/admin_audit.html.ep b/templates/default/admin_audit.html.ep index 16c977e..6360884 100644 --- a/templates/default/admin_audit.html.ep +++ b/templates/default/admin_audit.html.ep @@ -26,10 +26,12 @@ + <% if ($self->get_opt_features->{excel}){ %> + <% } %> diff --git a/vroom.pl b/vroom.pl index 1cab83e..9fdaf85 100755 --- a/vroom.pl +++ b/vroom.pl @@ -25,8 +25,6 @@ use File::Path qw(make_path); use File::Basename; use DateTime; use Array::Diff; -use File::Temp; -use Excel::Writer::XLSX; use Data::Dumper; app->log->level('info'); @@ -43,19 +41,20 @@ foreach my $dir (qw/assets/){ } } +# Optional features +our $optf = {}; # Create etherpad api client if enabled -our $ec = undef; -my $etherpad = eval { require Etherpad::API }; if ($config->{'etherpad.uri'} =~ m/https?:\/\/.*/ && $config->{'etherpad.api_key'} ne ''){ + my $etherpad = eval { require Etherpad::API }; if ($etherpad){ import Etherpad::API; - $ec = Etherpad::API->new({ + $optf->{etherpad} = Etherpad::API->new({ url => $config->{'etherpad.uri'}, apikey => $config->{'etherpad.api_key'} }); - if (!$ec->check_token){ + if (!$optf->{etherpad}->check_token){ app->log->info("Can't connect to Etherpad-Lite API, check your API key and uri"); - $ec = undef; + $optf->{etherpad} = undef; } } else{ @@ -63,6 +62,17 @@ if ($config->{'etherpad.uri'} =~ m/https?:\/\/.*/ && $config->{'etherpad.api_key } } +# Check if Excel export is available +my $excel = eval { + require File::Temp; + require Excel::Writer::XLSX; +}; +if ($excel){ + import File::Temp; + import Excel::Writer::XLSX; + $optf->{excel} = 1; +} + # Global error check our $error = undef; @@ -170,6 +180,12 @@ helper check_db_version => sub { return ($ver eq Vroom::Constants::DB_VERSION) ? '1' : '0'; }; +# Get optional features +helper get_opt_features => sub { + my $self = shift; + return $optf; +}; + # Log an event helper log_event => sub { my $self = shift; @@ -309,8 +325,8 @@ helper logout => sub { my $self = shift; my ($room) = @_; # Logout from etherpad - if ($ec && $self->session($room) && $self->session($room)->{etherpadSessionId}){ - $ec->delete_session($self->session($room)->{etherpadSessionId}); + if ($optf->{etherpad} && $self->session($room) && $self->session($room)->{etherpadSessionId}){ + $optf->{etherpad}->delete_session($self->session($room)->{etherpadSessionId}); } if ($self->session('peer_id') && $peers->{$self->session('peer_id')} && @@ -364,7 +380,7 @@ helper create_room => sub { msg => "Room $name created" }); # Etherpad integration ? If so, create the corresponding pad - if ($ec){ + if ($optf->{etherpad}){ $self->create_pad($name); } return 1; @@ -552,9 +568,9 @@ helper purge_rooms => sub { msg => "Deleting room $room after inactivity timeout" }); # Remove Etherpad group - if ($ec){ - $ec->delete_pad($toDelete->{$room} . '$' . $room); - $ec->delete_group($toDelete->{$room}); + if ($optf->{etherpad}){ + $optf->{etherpad}->delete_pad($toDelete->{$room} . '$' . $room); + $optf->{etherpad}->delete_group($toDelete->{$room}); } } # Now remove rooms @@ -578,9 +594,9 @@ helper delete_room => sub { $self->app->log->debug("Error: room $room doesn't exist"); return 0; } - if ($ec && $data->{etherpad_group}){ - $ec->delete_pad($data->{etherpad_group} . '$' . $room); - $ec->delete_group($data->{etherpad_group}); + if ($optf->{etherpad} && $data->{etherpad_group}){ + $optf->{etherpad}->delete_pad($data->{etherpad_group} . '$' . $room); + $optf->{etherpad}->delete_group($data->{etherpad_group}); } my $sth = eval { $self->db->prepare('DELETE FROM `rooms` @@ -910,13 +926,13 @@ helper create_pad => sub { my $self = shift; my ($room) = @_; my $data = $self->get_room_by_name($room); - if (!$ec || !$data){ + if (!$optf->{etherpad} || !$data){ return 0; } # Create the etherpad group if not already done # and register it in the DB if (!$data->{etherpad_group} || $data->{etherpad_group} eq ''){ - $data->{etherpad_group} = $ec->create_group(); + $data->{etherpad_group} = $optf->{etherpad}->create_group(); if (!$data->{etherpad_group}){ return 0; } @@ -930,7 +946,7 @@ helper create_pad => sub { $data->{id} ); } - $ec->create_group_pad($data->{etherpad_group},$room); + $optf->{etherpad}->create_group_pad($data->{etherpad_group},$room); $self->log_event({ event => 'pad_create', msg => "Creating group pad " . $data->{etherpad_group} . " for room $room" @@ -943,12 +959,12 @@ helper create_etherpad_session => sub { my $self = shift; my ($room) = @_; my $data = $self->get_room_by_name($room); - if (!$ec || !$data || !$data->{etherpad_group}){ + if (!$optf->{etherpad} || !$data || !$data->{etherpad_group}){ return 0; } - my $id = $ec->create_author_if_not_exists_for($self->get_name); + my $id = $optf->{etherpad}->create_author_if_not_exists_for($self->get_name); $self->session($room)->{etherpadAuthorId} = $id; - my $etherpadSession = $ec->create_session( + my $etherpadSession = $optf->{etherpad}->create_session( $data->{etherpad_group}, $id, time + 86400 @@ -1476,7 +1492,7 @@ get '/' => sub { $self->login; $self->stash( page => 'index', - etherpad => ($ec) ? 'true' : 'false' + etherpad => ($optf->{etherpad}) ? 'true' : 'false' ); } => 'index'; @@ -1793,7 +1809,7 @@ any '/api' => sub { if (!$self->session($room->{name})){ $self->session($room->{name} => {}); } - if ($ec && !$self->session($room->{name})->{etherpadSession}){ + if ($optf->{etherpad} && !$self->session($room->{name})->{etherpadSession}){ $self->create_etherpad_session($room->{name}); } if ($self->session('peer_id')){ @@ -2217,7 +2233,7 @@ any '/api' => sub { } # Wipe room data (chat history and etherpad content) elsif ($req->{action} eq 'wipe_data'){ - if (!$ec || ($ec->delete_pad($room->{etherpad_group} . '$' . $room->{name}) && + if (!$optf->{etherpad} || ($optf->{etherpad}->delete_pad($room->{etherpad_group} . '$' . $room->{name}) && $self->create_pad($room->{name}) && $self->create_etherpad_session($room->{name}))){ return $self->render( @@ -2307,6 +2323,13 @@ group { get '/export_events' => sub { my $self = shift; + if (!$optf->{excel}){ + return $self->render('error', + msg => $self->l('ERROR_FEATURE_NOT_AVAILABLE'), + err => 'ERROR_FEATURE_NOT_AVAILABLE', + room => '' + ); + } my $from = $self->param('from') || DateTime->now->ymd; my $to = $self->param('to') || DateTime->now->ymd; my $file = $self->export_events_xlsx($from,$to); @@ -2366,7 +2389,7 @@ get '/:room' => sub { ); } # pad doesn't exist yet ? - if ($ec && !$data->{etherpad_group}){ + if ($optf->{etherpad} && !$data->{etherpad_group}){ $self->create_pad($room); # Reload data so we get the etherpad_group $data = $self->get_room_by_name($room); @@ -2376,7 +2399,7 @@ get '/:room' => sub { page => 'room', moh => $self->choose_moh(), video => $video, - etherpad => ($ec) ? 'true' : 'false', + etherpad => ($optf->{etherpad}) ? 'true' : 'false', etherpadGroup => $data->{etherpad_group}, ua => $self->req->headers->user_agent );