#!/usr/bin/perl package usage_log_to_consent_activity; use strict; use FindBin; use lib "$FindBin::Bin/../"; use lib "$FindBin::Bin/../DADA/perllib"; BEGIN { my $b__dir = ( getpwuid($>) )[7] . '/perl'; push @INC, $b__dir . '5/lib/perl5', $b__dir . '5/lib/perl5/x86_64-linux-thread-multi', $b__dir . 'lib', map { $b__dir . $_ } @INC; } # use some of those Modules use DADA::Config 11.0.0; use DADA::Template::HTML; use DADA::Template::Widgets; use DADA::App::Guts; use DADA::MailingList::Settings; my $list; my $admin_list; my $root_login; sub reset_globals { } run() unless caller(); sub run { my $q = shift; reset_globals(); require CGI; my $q = CGI->new; $q->charset($DADA::Config::HTML_CHARSET); if ( !$ENV{GATEWAY_INTERFACE} ) { my $inject; my $run_list; require Getopt::Long; my $cl_list; my $cl_consent; my $cl_privacy_policy; my $cl_verbose; Getopt::Long::GetOptions( "list=s" => \$cl_list, "consent=s@" => \$cl_consent, "privacy_policy" => \$cl_privacy_policy, "verbose" => \$cl_verbose, ); $list = $cl_list; if($cl_consent->[0]){ $q->param( -name => 'consents', -value => $cl_consent, ); } if($cl_privacy_policy){ $q->param( -name => 'add_privacy_policy', -value => 1, ); } if($cl_verbose){ $q->param( -name => 'verbose', -value => 1, ); } my $r = process($q); print $r; exit; } else { return cgi_main($q); } } sub test_sub { return "Hello, World!"; } sub cgi_main { my $q = shift; my $prm = $q->param('prm') || 'cgi_default'; my $function = 'usage_log_to_consent_activity'; ( $admin_list, $root_login ) = check_list_security( -cgi_obj => $q, -Function => $function, ); $list = $admin_list; my $ls = DADA::MailingList::Settings->new( { -list => $list } ); my $li = $ls->get(); my %Mode = ( 'cgi_default' => \&cgi_default, 'process' => \&process, ); if ( exists( $Mode{$prm} ) ) { return $Mode{$prm}->($q); #call the correct subroutine } else { return cgi_default($q); } } sub cgi_default { my $q = shift; require DADA::MailingList::Settings; my $ls = DADA::MailingList::Settings->new({-list => $list}); require DADA::MailingList::Consents; my $con = DADA::MailingList::Consents->new; my $consents = $con->give_me_all_consents($ls); my $scrn = DADA::Template::Widgets::wrap_screen( { -expr => 1, -screen => 'plugins/usage_log_to_consent_activity/default.tmpl', -with => 'admin', -wrapper_params => { -Root_Login => $root_login, -List => $list, }, -vars => { consents => $consents, }, -list_settings_vars_param => { -list => $list, -dot_it => 1, -i_know_what_im_doing => 1, }, } ); return ( {}, $scrn ); } sub process { my $q = shift; my $add_privacy_policy = $q->param('add_privacy_policy') || 0; my @consents = $q->multi_param('consents'); my $r = '
'; 
	
	require DADA::MailingList::Settings; 
	my $ls = DADA::MailingList::Settings->new({-list => $list}); 
	
	require DADA::MailingList::Consents; 
	my $con = DADA::MailingList::Consents->new; 
	my $consents = $con->give_me_all_consents($ls);
	
	require DADA::MailingList::PrivacyPolicyManager; 
	my $dmppm = DADA::MailingList::PrivacyPolicyManager->new; 
	
	my $pp_data = $dmppm->latest_privacy_policy({-list => $list});
	
	my $latest_privacy_policy_id = $pp_data->{privacy_policy_id};
		
	require DADA::App::LogSearch;
	my $dals = DADA::App::LogSearch->new;
	my $file = $DADA::Config::PROGRAM_USAGE_LOG;

	open my $LOG_FILE, '<', $file
	  or die "Cannot read log at: '" . $file . "' because: " . $!;
		my $lines = 0; 
	  	require DADA::MailingList::ConsentActivity; 
	  	my $dmlch = DADA::MailingList::ConsentActivity->new;
	
	LOGFILE: while ( my $l = <$LOG_FILE> ) {
	    chomp($l);
		$lines++; 
	    my $llr = $dals->log_line_report(
	        {
	            -line  => $l,
				-list  => $list,
	        }
	    );
	
		if($llr->{action} =~ m/subscribed|unsubscribed|confirmation_sent|subscription_updated/){
			# 2018-05-12 18:46:19
			next if $llr->{type} ne 'list';
		
			# DATE
			use Date::Parse; 
			my $date_wo_br = $llr->{date}; 
			$date_wo_br    =~ s/\]|\[//gi; 
			#print '$date_wo_br' . $date_wo_br . "\n";
			my $unix_time = str2time($date_wo_br); 
			# 1426342445 will be stored in $unix_time
			#print $unix_time . "\n"; 
			require Time::Piece::MySQL; 
			my $t = Time::Piece::localtime($unix_time);
			#print localtime->mysql_datetime."\n";  
			$llr->{mysql_datetime} =  $t->mysql_datetime;
			#print '$llr->{mysql_datetime} ' . $llr->{mysql_datetime} . "\n"; 
			#/DATE

			my @actions = (); 
			if($llr->{action} eq 'confirmation_sent'){ 
				$llr->{action} = 'cloic sent';
				# This is where we put the privacy policy stuff, as well as 
				# consents
				# 
				
				if($add_privacy_policy == 1){ 
					push(
						@actions,
						{ 
							-action            => 'start consent', 
							-privacy_policy_id => $latest_privacy_policy_id, 
						}, 
					); 			
				}
				else { 
					push(
					@actions, 
						{ 
							-action => 'start consent',
						}, 
					)
				}
				
				push(
					@actions,
					{ 
						-action => 'subscription requested',	
					}
				); 
				
				for my $in_consent(@consents){
					push(@actions,{ 
						-action     => 'consent granted', 
						-consent_id => $in_consent,
					});
				}
				
				push(@actions,{ 
						-action => 'cloic sent',
					}); 
				
			}
			elsif($llr->{action} eq 'subscribed'){ 
				push(
					@actions,
					{ 
						-action => 'subscription',
					}, 
				); 
			} 
			elsif($llr->{action} eq 'unsubscribed'){ 
				
				for my $in_consent(@consents){
					push(@actions,{ 
						-action     => 'consent revoked', 
						-consent_id => $in_consent,
					});
				}
				
				push(
					@actions,
					{ 
						-action => 'consent revoked', # consent ids, of course, for each one... 
					}, 
					{ 
						-action => 'unsubscribe',
					}, 
				); 
			}
			else { 
			
				next; 
				#push(
				#	@actions,
				#	{ 
				#		-action => $llr->{action}, 
				#	}
				#); 
			}
		
			for my $ind_action(@actions){
				$dmlch->ch_record({ 
					-list         => $llr->{list}, 
					-timestamp    => $llr->{mysql_datetime},
					-email        => $llr->{email},
					#-action      => $llr->{action}, 
					-remote_addr  => $llr->{ip}, 
					-source       => 'import script',
					%$ind_action, 
				});
			}
		}
	}
	$r .= "\n\nComplete.\n\n";
	
    return ( {}, $r );

	
	
}



1;