Commit 750a5de6 authored by sikeda's avatar sikeda
Browse files

[svn] Retrieving modificatrions from sympa-spool branch, note that

DB spool feature was excluded.


git-svn-id: https://subversion.renater.fr/sympa/branches/sympa-6.2-branch@10140 05aa8bb8-cd2b-0410-b1d7-8918dfa770ce
parent 563f494e
......@@ -21,7 +21,7 @@ Content-Disposition: inline
[%- IF spam_status == 'spam' -%]
[%|loc%]Because the new message is suspected to be a spam it is not attached to this one. You must use the web interface to reject or validate it.[%END%]
[%- ELSE -%]
[%- ELSE -%]
[% IF ! request_topic %]
[%|loc(list.name)%]To distribute the attached message in list %1:[%END%]
<[% FILTER escape_url %]mailto:[%conf.sympa%]?subject=DISTRIBUTE [%list.name%] [%modkey%][% END %]>
......@@ -29,7 +29,8 @@ Content-Disposition: inline
DISTRIBUTE [% list.name %] [% modkey %]
[%|loc%]To reject it (it will be removed):[%END%]
<[% FILTER escape_url %]mailto:[%conf.sympa%]?subject=REJECT [%list.name%] [%modkey%][% END %]>
<[% FILTER escape_url %]mailto:[%conf.sympa%]?subject=REJECT [%list.name%] [%modkey%]
[% END %]>
[%|loc(conf.email,conf.host)%]Or send a message to %1@%2 with the following subject:[%END%]
REJECT [% list.name %] [% modkey %]
[%END%]
......@@ -41,9 +42,7 @@ Content-Transfer-Encoding: 8bit
Content-Disposition: inline
X-Sympa-Attach: yes
[% INSERT $msg_path IF msg_path %]
[%# msg_as_string %]
--[% boundary %]--
[%- END -%]
[% END %]
[% END -%]
......@@ -289,6 +289,101 @@ sub load_html_message {
return \%metadata;
}
1;
sub clean_archived_message{
my $params = shift;
&do_log('debug',"Cleaning HTML parts of a message input %s , output %s ",$params->{'input'},$params->{'output'});
my $input = $params->{'input'};
my $output = $params->{'output'};
if (my $msg = new Message({'file'=>$input})){
if($msg->clean_html()){
if(open TMP, ">$output") {
print TMP $msg->{'msg'}->as_string;
close TMP;
}else{
&do_log('err','Unable to create a tmp file to write clean HTML to file %s',$output);
return undef;
}
}else{
&do_log('err','HTML cleaning in file %s failed.',$output);
return undef;
}
}else{
&do_log('err','Unable to create a Message object with file %s',$input);
exit;
return undef;
}
}
#############################
# convert a messsage to html.
# result is stored in $destination_dir
# attachement_url is used to link attachement
#
sub convert_single_msg_2_html {
my $data =shift;
my $msg_as_string = $data->{'msg_as_string'};
my $destination_dir = $data->{'destination_dir'};
my $attachement_url = $data->{'attachement_url'};
my $list = $data->{'list'};
my $robot = $data->{'robot'};
my $messagekey = $data->{'messagekey'};
my $listname =''; my $msg_file;
my $host = $robot;
if ($list) {
$host = $list->{'admin'}{'host'};
$robot = $list->{'robot'};
$listname = $list->{'name'};
$msg_file = &Conf::get_robot_conf($robot, 'tmpdir').'/'.$list->get_list_id().'_'.$$;
}else{
$msg_file = &Conf::get_robot_conf($robot, 'tmpdir').'/'.$messagekey.'_'.$$;
}
my $pwd = getcwd; # mhonarc require du change workdir so this proc must retore it
unless (open(OUT, ">$msg_file")) {
do_log('notice', 'Could Not open %s', $msg_file);
return undef;
}
printf OUT $msg_as_string ;
close(OUT);
unless (-d $destination_dir) {
unless (&tools::mkdir_all($destination_dir, 0777)) {
&do_log('err','Unable to create %s', $destination_dir);
return undef;
}
}
my $mhonarc_ressources = &tools::get_filename('etc',{},'mhonarc-ressources.tt2', $robot,$list);
unless ($mhonarc_ressources) {
do_log('notice',"Cannot find any MhOnArc ressource file");
return undef;
}
## generate HTML
unless (chdir $destination_dir) {
do_log('err',"Could not change working directory to %s",$destination_dir);
}
my $tracepwd = getcwd ;
my $mhonarc = &Conf::get_robot_conf($robot, 'mhonarc');
my $base_url = &Conf::get_robot_conf($robot, 'wwsympa_url');
#open ARCMOD, "$mhonarc -single --outdir .. -rcfile $mhonarc_ressources -definevars listname=$listname -definevars hostname=$host -attachmenturl=$attachement_url $msg_file |";
#open MSG, ">msg00000.html";
#&do_log('debug', "$mhonarc --outdir .. -single -rcfile $mhonarc_ressources -definevars listname=$listname -definevars hostname=$host $msg_file");
#print MSG <ARCMOD>;
#close MSG;
#close ARCMOD;
`$mhonarc -single --outdir .. -rcfile $mhonarc_ressources -definevars listname=$listname -definevars hostname=$host -attachmenturl=$attachement_url $msg_file > msg00000.html`;
# restore current wd
chdir $pwd;
return 1;
}
1;
......@@ -123,8 +123,9 @@ sub is_autoinc {
sub set_autoinc {
my $self = shift;
my $param = shift;
my $field_type = defined ($param->{'field_type'}) ? $param->{'field_type'} : 'BIGINT( 20 )';
&Log::do_log('debug','Setting field %s.%s as autoincremental',$param->{'field'},$param->{'table'});
unless ($self->do_query("ALTER TABLE `%s` CHANGE `%s` `%s` BIGINT( 20 ) NOT NULL AUTO_INCREMENT",$param->{'table'},$param->{'field'},$param->{'field'})) {
unless ($self->do_query("ALTER TABLE `%s` CHANGE `%s` `%s` %s NOT NULL AUTO_INCREMENT",$param->{'table'},$param->{'field'},$param->{'field'},$field_type)) {
&Log::do_log('err','Unable to set field %s in table %s as autoincrement',$param->{'field'},$param->{'table'});
return undef;
}
......
......@@ -6555,7 +6555,7 @@ sub get_list_member_no_object {
if ($Conf::Conf{'db_additional_subscriber_fields'}) {
$additional = ',' . $Conf::Conf{'db_additional_subscriber_fields'};
}
unless ($sth = SDM::do_query( "SELECT user_subscriber AS email, comment_subscriber AS gecos, bounce_subscriber AS bounce, bounce_score_subscriber AS bounce_score, bounce_address_subscriber AS bounce_address, reception_subscriber AS reception, topics_subscriber AS topics, visibility_subscriber AS visibility, %s AS date, %s AS update_date, subscribed_subscriber AS subscribed, included_subscriber AS included, include_sources_subscriber AS id, custom_attribute_subscriber AS custom_attribute, suspend_subscriber AS suspend, suspend_start_date_subscriber AS startdate, suspend_end_date_subscriber AS enddate %s FROM subscriber_table WHERE (user_subscriber = %s AND list_subscriber = %s AND robot_subscriber = %s)",
unless ($sth = SDM::do_query(q{SELECT user_subscriber AS email, comment_subscriber AS gecos, bounce_subscriber AS bounce, bounce_score_subscriber AS bounce_score, bounce_address_subscriber AS bounce_address, reception_subscriber AS reception, topics_subscriber AS topics, visibility_subscriber AS visibility, %s AS "date", %s AS update_date, subscribed_subscriber AS subscribed, included_subscriber AS included, include_sources_subscriber AS id, custom_attribute_subscriber AS custom_attribute, suspend_subscriber AS suspend, suspend_start_date_subscriber AS startdate, suspend_end_date_subscriber AS enddate, number_messages_subscriber AS number_messages %s FROM subscriber_table WHERE (user_subscriber = %s AND list_subscriber = %s AND robot_subscriber = %s)},
&SDM::get_canonical_read_date('date_subscriber'),
&SDM::get_canonical_read_date('update_subscriber'),
$additional,
......
......@@ -288,6 +288,10 @@ sub db_log {
do_log('err','Unable to insert new db_log entry in the database');
return undef;
}
#if (($action eq 'send_mail') && $list && $robot){
# &update_subscriber_msg_send($user_email,$list,$robot,1);
#}
return 1;
}
......@@ -563,7 +567,7 @@ sub aggregate_data {
#store send mail data-------------------------------
if($key_op eq 'send_mail'){
foreach my $key_robot (keys (%{$aggregated_data->{$key_op}})){
foreach my $key_robot (keys (%{$aggregated_data->{$key_op}})){
foreach my $key_list (keys (%{$aggregated_data->{$key_op}->{$key_robot}})){
......@@ -571,11 +575,11 @@ sub aggregate_data {
&db_stat_counter_log({'begin_date' => $begin_date, 'end_date' => $end_date, 'data' => $key_op, 'list' => $key_list, 'variation' => $aggregated_data->{$key_op}->{$key_robot}->{$key_list}->{'count'}, 'total' => '', 'robot' => $key_robot});
#updating susbcriber_table
foreach my $key_mail (keys (%{$aggregated_data->{$key_op}->{$key_robot}->{$key_list}})){
if (($key_mail ne 'count') && ($key_mail ne 'size')){
&update_subscriber_msg_send($key_mail, $key_list, $key_robot, $aggregated_data->{$key_op}->{$key_robot}->{$key_list}->{$key_mail});
}
foreach my $key_mail (keys (%{$aggregated_data->{$key_op}->{$key_robot}->{$key_list}})){
if (($key_mail ne 'count') && ($key_mail ne 'size')){
&update_subscriber_msg_send($key_mail, $key_list, $key_robot, $aggregated_data->{$key_op}->{$key_robot}->{$key_list}->{$key_mail});
}
}
}
}
......
......@@ -44,11 +44,11 @@ use Sympa::DatabaseDescription;
# db structure description has moved in Sympa/Constant.pm
my %db_struct = &Sympa::DatabaseDescription::db_struct();
my %not_null = %Sympa::DatabaseDescription::not_null;
my %not_null = &Sympa::DatabaseDescription::not_null();
my %primary = %Sympa::DatabaseDescription::primary ;
my %primary = &Sympa::DatabaseDescription::primary() ;
my %autoincrement = %Sympa::DatabaseDescription::autoincrement ;
my %autoincrement = &Sympa::DatabaseDescription::autoincrement() ;
## List the required INDEXES
## 1st key is the concerned table
......@@ -103,7 +103,7 @@ sub db_get_handler {
## Just check if DB connection is ok
sub check_db_connect {
&Log::do_log('debug2', 'Checking connection to the Sympa database');
#&Log::do_log('debug2', 'Checking connection to the Sympa database');
## Is the Database defined
unless (&Conf::get_robot_conf('*','db_name')) {
&Log::do_log('err', 'No db_name defined in configuration file');
......@@ -165,17 +165,12 @@ sub probe_db {
&Log::do_log('debug3', 'Checking database structure');
my (%checked, $table);
my $dbh = &db_get_handler();
## Database structure
## Report changes to listmaster
my @report;
unless (&check_db_connect) {
&Log::do_log('err', 'Unable to get a connection to the Sympa database');
return undef;
}
my $dbh = &db_get_handler();
## Get tables
my @tables;
my $list_of_tables;
......@@ -209,7 +204,7 @@ sub probe_db {
## Only performed with mysql , Pg and SQLite
if (%real_struct) {
foreach my $t (keys %{$db_struct{&Conf::get_robot_conf('*','db_type')}}) {
foreach my $t (keys %{$db_struct{'mysql'}}) {
unless ($real_struct{$t}) {
&Log::do_log('err', "Table '%s' not found in database '%s' ; you should create it with create_db.%s script", $t, &Conf::get_robot_conf('*','db_name'), &Conf::get_robot_conf('*','db_type'));
return undef;
......@@ -227,7 +222,7 @@ sub probe_db {
delete $real_struct{$t}{'temporary'};
}
if ((&Conf::get_robot_conf('*','db_type') eq 'mysql')||(&Conf::get_robot_conf('*','db_type') eq 'Pg')) {
if ((&Conf::get_robot_conf('*','db_type') eq 'mysql')||(&Conf::get_robot_conf('*','db_type') eq 'Pg')||(&Conf::get_robot_conf('*','db_type') eq 'SQLite')) {
## Check that primary key has the right structure.
unless (&check_primary_key({'table' => $t,'report' => \@report})) {
&Log::do_log('err', "Unable to check the valifity of primary key for table %s. Aborting.", $t);
......@@ -240,52 +235,20 @@ sub probe_db {
}
}
elsif (&Conf::get_robot_conf('*','db_type') eq 'SQLite') {
## Create required INDEX and PRIMARY KEY
my $should_update;
foreach my $field (@{$primary{$t}}) {
}
if ($should_update) {
my $fields = join ',',@{$primary{$t}};
## drop previous index
my $success;
foreach my $field (@{$primary{$t}}) {
unless ($dbh->do("DROP INDEX $field")) {
next;
}
$success = 1; last;
}
if ($success) {
push @report, sprintf('Table %s, INDEX dropped', $t);
&Log::do_log('info', 'Table %s, INDEX dropped', $t);
}else {
&Log::do_log('err', 'Could not drop INDEX, table \'%s\'.', $t);
}
## Add INDEX
unless ($dbh->do("CREATE INDEX IF NOT EXIST $t\_index ON $t ($fields)")) {
&Log::do_log('err', 'Could not set INDEX on field \'%s\', table\'%s\'.', $fields, $t);
return undef;
}
push @report, sprintf('Table %s, INDEX set on %s', $t, $fields);
&Log::do_log('info', 'Table %s, INDEX set on %s', $t, $fields);
}
}
}
# add autoincrement if needed
foreach my $table (keys %autoincrement) {
&Log::do_log('notice',"Checking autoincrement for table $table, field $autoincrement{$table}");
unless ($db_source->is_autoinc({'table'=>$table,'field'=>$autoincrement{$table}})){
if ($db_source->set_autoinc({'table'=>$table,'field'=>$autoincrement{$table}})){
if ($db_source->set_autoinc({'table'=>$table,'field'=>$autoincrement{$table},
'field_type'=>$db_struct{'mysql'}{$table}{'fields'}{$autoincrement{$table}}{'struct'}})){
&Log::do_log('notice',"Setting table $table field $autoincrement{$table} as autoincrement");
}else{
&Log::do_log('err',"Could not set table $table field $autoincrement{$table} as autoincrement");
return undef;
}
}
}
}
}else{
&Log::do_log('err',"Could not check the database structure. consider verify it manually before launching Sympa.");
return undef;
......@@ -365,7 +328,10 @@ sub check_primary_key {
my $param = shift;
my $t = $param->{'table'};
my $report_ref = $param->{'report'};
&Log::do_log('debug','Checking primary key for table %s',$t);
my $list_of_keys = join ',',@{$primary{$t}};
my $key_as_string = "$t [$list_of_keys]";
&Log::do_log('debug','Checking primary keys for table %s expected_keys %s',$t,$key_as_string );
my $should_update = $db_source->check_key({'table'=>$t,'key_name'=>'primary','expected_keys'=>$primary{$t}});
if ($should_update){
......
......@@ -115,9 +115,9 @@ sub new {
sub connect {
my $self = shift;
&Log::do_log('debug',"Checking connection to database %s",$self->{'db_name'});
&Log::do_log('debug3',"Checking connection to database %s",$self->{'db_name'});
if ($self->{'dbh'} && $self->{'dbh'}->ping) {
&Log::do_log('debug','Connection to database %s already available',$self->{'db_name'});
&Log::do_log('debug3','Connection to database %s already available',$self->{'db_name'});
return 1;
}
unless($self->establish_connection()) {
......
......@@ -26,11 +26,7 @@ use strict;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(db_struct not_null %not_null primary %primary autoincrement %autoincrement %indexes %former_indexes);
our %not_null = &not_null;
our %primary = &primary;
our %autoincrement = &autoincrement;
our @EXPORT = qw(db_struct not_null primary %indexes %former_indexes autoincrement);
sub full_db_struct {
......@@ -205,10 +201,11 @@ my %full_db_struct = (
'bulkspool_table' => {
'fields' => {
'messagekey_bulkspool' => {
'struct'=> 'varchar(33)',
'struct'=> 'bigint(20)',
'doc'=>'primary key',
'primary'=>1,
'not_null'=>1,
'autoincrement'=>1,
'order'=>1,
},
'message_bulkspool' => {
......@@ -361,6 +358,7 @@ my %full_db_struct = (
'family_exclusion' => {
'struct'=> 'varchar(50)',
'doc'=>'',
'primary'=>1,
'order' => 4,
},
'date_exclusion' => {
......@@ -1070,7 +1068,6 @@ my %full_db_struct = (
);
return %full_db_struct;
}
sub db_struct {
......@@ -1079,8 +1076,7 @@ sub db_struct {
foreach my $table ( keys %full_db_struct ) {
foreach my $field ( keys %{ $full_db_struct{$table}{'fields'} }) {
my $trans = $full_db_struct{$table}{'fields'}{$field}{
'struct'};
my $trans = $full_db_struct{$table}{'fields'}{$field}{'struct'};
my $trans_o = $trans;
my $trans_pg = $trans;
my $trans_syb = $trans;
......@@ -1138,7 +1134,7 @@ sub not_null {
my %db_struct = &db_struct() ;
foreach my $table ( keys %full_db_struct ) {
foreach my $field ( keys %{ $full_db_struct{$table}{'fields'} }) {
$not_null{'$field'} = $full_db_struct{$table}{'fields'}{'not_null'};
$not_null{'$field'} = $full_db_struct{$table}{'fields'}{$field}{'not_null'};
}
}
return %not_null;
......@@ -1150,7 +1146,7 @@ sub autoincrement {
my %db_struct = &db_struct() ;
foreach my $table ( keys %full_db_struct ) {
foreach my $field ( keys %{ $full_db_struct{$table}{'fields'} }) {
$autoincrement{$table} = $field if ($full_db_struct{$table}{'fields'}{'autoincrement'});
$autoincrement{$table} = $field if ($full_db_struct{$table}{'fields'}{$field}{'autoincrement'});
}
}
return %autoincrement;
......
......@@ -32,6 +32,7 @@ use List;
use Conf;
use Log;
use tools;
use Data::Dumper;
my @task_list;
my %task_by_list;
......@@ -80,7 +81,7 @@ sub new {
return undef;
}
$task->{'id'} = $task->{'object'};
$task->{'id'} = $task->{'list_object'}{'name'};
$task->{'id'} .= '@'.$task->{'domain'} if (defined $task->{'domain'});
## Bless Task object
......@@ -100,6 +101,7 @@ sub list_tasks {
my @task_files = sort epoch_sort (grep !/^\.\.?$/, readdir DIR); # @tasks updating
closedir DIR;
&Log::do_log('debug',"Listing all tasks");
## Reset the list of tasks
undef @task_list;
undef %task_by_list;
......@@ -116,17 +118,16 @@ sub list_tasks {
my $list_id = $task->{'id'};
my $model = $task->{'model'};
$task_by_model{$model}->{$list_id} = $task;
$task_by_list{$list_id}->{$model} = $task;
$task_by_model{$model}{$list_id} = $task;
$task_by_list{$list_id}{$model} = $task;
}
return 1;
}
## Return a list tasks for the given list
sub get_tasks_by_list {
my $list_id = shift;
&Log::do_log('debug',"Getting tasks for list '%s'",$list_id);
return () unless (defined $task_by_list{$list_id});
return values %{$task_by_list{$list_id}};
}
......@@ -134,11 +135,14 @@ sub get_tasks_by_list {
sub get_used_models {
## Optional list parameter
my $list_id = shift;
&Log::do_log('debug',"Getting used models for list '%s'",$list_id);
if (defined $list_id) {
if (defined $task_by_list{$list_id}) {
&Log::do_log('debug2',"Found used models for list '%s'",$list_id);
return keys %{$task_by_list{$list_id}}
}else {
&Log::do_log('debug2',"Did not find any used models for list '%s'",$list_id);
return ();
}
......@@ -148,6 +152,7 @@ sub get_used_models {
}
sub get_task_list {
&Log::do_log('debug',"Getting tasks list");
return @task_list;
}
......
......@@ -453,7 +453,7 @@ sub create_list{
$param->{'listname'}, $family->{'name'},$robot);
return undef;
}
## Create the list directory
my $list_dir;
......
......@@ -830,9 +830,14 @@ our @params = (
{
'name' => 'tmpdir',
'default' => Sympa::Constants::SPOOLDIR . '/tmp',
'query' => gettext('Temporary directory used by OpenSSL and antivirus plugins'),
'query' => gettext('Temporary directory used by OpenSSL, antivirus plugins, mhonarc etc'),
},
{
name => 'viewmail_dir',
default => Sympa::Constants::EXPLDIR . '/viewmail',
'query' => gettext('Directory containing html file generated by mhonarc while diplay messages others than archives'),
file => 'sympa.conf',
},
##{ viewmail_dir: not yet implemented. },
{
'name' => 'clean_delay_queue',
'default' => '7',
......
......@@ -148,6 +148,7 @@ sub mail_file {
my $output;
my @path = split /\//, $filename;
&Language::PushLang($data->{'lang'}) if (defined $data->{'lang'});
my $dump = &Dumper($data); open (DUMP,">>/tmp/dumper2"); printf DUMP 'avant tt2 \n%s',$dump ; close DUMP;
&tt2::parse_tt2($data, $path[$#path], \$output);
&Language::PopLang() if (defined $data->{'lang'});
$message_as_string .= join('',$output);
......@@ -303,6 +304,7 @@ sub mail_file {
unless ($message_as_string = &reformat_message("$headers"."$message_as_string", \@msgs, $data->{'charset'})) {
&Log::do_log('err', "mail::mail_file: Failed to reformat message");
}
my $dump = &Dumper($message_as_string); open (DUMP,">>/tmp/dumper2"); printf DUMP 'avant \n%s',$dump ; close DUMP;
## Set it in case it was not set
$data->{'return_path'} ||= &Conf::get_robot_conf($robot, 'request');
......@@ -1126,7 +1128,6 @@ sub reformat_message($;$$) {
return undef;
}
}
$msg->head->delete("X-Mailer");
$msg = &fix_part($msg, $parser, $attachments, $defcharset);
$msg->head->add("X-Mailer", sprintf "Sympa %s", Sympa::Constants::VERSION);
......@@ -1142,11 +1143,14 @@ sub fix_part($$$$) {
my $enc = $part->head->mime_attr("Content-Transfer-Encoding");
# Parts with nonstandard encodings aren't modified.
return $part
if $enc and $enc !~ /^(?:base64|quoted-printable|[78]bit|binary)$/i;
if ($enc and $enc !~ /^(?:base64|quoted-printable|[78]bit|binary)$/i) {
return $part;
}
my $eff_type = $part->effective_type;
return $part if $eff_type =~ m{^multipart/(signed|encrypted)$};
if ($eff_type =~ m{^multipart/(signed|encrypted)$}){
return $part;
}
if ($part->head->get('X-Sympa-Attach')) { # Need re-attaching data.
my $data = shift @{$attachments};
......
......@@ -11,8 +11,15 @@
<form action="[% path_cgi %]" method="post">
<fieldset>
<select name="list">
[% FOREACH l = get_which_owner %]
<option value="[% l.name %]">[% l.name %]</option>
[% IF is_listmaster %]
[% FOREACH l = all_lists %]
<option value="[% l.name %]">[% l.name %]</option>
[% END %]
[% ELSE %]
[% FOREACH l = get_which_owner %]
<option value="[% l.name %]">[% l.name %]</option>
[% END %]
[% END %]
</select>
<label for="new_listname">[%|loc%]New list name:[%END%]</label> <input id="new_listname" name="new_listname" value="" />
......
......@@ -7280,19 +7280,21 @@ sub do_viewmod {
}
}
unless (-d $tmp_dir) {
&report::reject_report_web('intern','no_html_message_available',{'dir' => $tmp_dir},$param->{'action'});
&wwslog('err','do_viewmod: no HTML version of the message available in %s', $tmp_dir);
my $html_dir = $Conf::Conf{'viewmail_dir'}.'/mod/'.$list->get_list_id().'/'.$in{'id'};
unless (-d $html_dir) {
&report::reject_report_web('intern','no_html_message_available',{'dir' => $html_dir},$param->{'action'});
&wwslog('err','do_viewmod: no HTML version of the message available in %s', $html_dir);
return undef;
}
 
if ($in{'file'}) {
$in{'file'} =~ /\.(\w+)$/;
$param->{'file_extension'} = $1;
$param->{'file'} = $tmp_dir.'/'.$in{'file'};
$param->{'file'} = $html_dir.'/'.$in{'file'};
$param->{'bypass'} = 1;
}else {
&tt2::add_include_path($tmp_dir) ;
&tt2::add_include_path($html_dir) ;
}
 
$param->{'base'} = sprintf "%s/viewmod/%s/%s/", &Conf::get_robot_conf($robot, 'wwsympa_url'), $param->{'list'}, $in{'id'};
......@@ -7736,6 +7738,7 @@ sub do_arc {
## File exist ?
my $arc_file_path = $arc_month_path.'/'.$in{'arc_file'};
unless (-r $arc_file_path) {
&wwslog('err',"unable to read $arc_file_path");
&report::reject_report_web('user','arc_not_found',{'arc_file' => $in{'arc_file'},
......@@ -9037,6 +9040,8 @@ Sends back the list creation edition form.
&wwslog('info','do_create_list: not allowed');
return undef;
}
$param->{'all_lists'} = &List::get_lists($robot);
 
my %topics;
unless (%topics = &List::load_topics($robot)) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment