Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 88 additions & 19 deletions system/services/email/EmailLoggingService.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -585,31 +585,100 @@ component {
*
*/
public boolean function deleteExpiredContent( any logger ) {
var canLog = StructKeyExists( arguments, "logger" );
var canInfo = canLog && logger.canInfo();
var canError = canLog && logger.canError();
var dao = $getPresideObject( "email_template_send_log_content");
var canLog = StructKeyExists( arguments, "logger" );
var canInfo = canLog && logger.canInfo();
var canError = canLog && logger.canError();
var batchSize = 1000;
var dao = $getPresideObject( "email_template_send_log_content" );
var contentIdField = dao.getIdField();

if ( canInfo ) { logger.info( "Deleting expired email content from logs..." ); }

var deleted = dao.deleteData(
filter = "expires <= :expires"
, filterParams = { expires=now() }
);

if ( canInfo ) { logger.info( "Content of [#deleted#] emails deleted." ); }
try {
var hadAbortIssue = false;
var totalDeleted = 0;
var batchDeleted = 0;
do {
var expiredBatch = dao.selectData(
filter = "expires <= :expires"
, filterParams = { expires=now() }
, selectFields = [ contentIdField ]
, maxRows = batchSize
);
if ( !expiredBatch.recordCount ) { break; }
var batchIds = [];
for ( var row in expiredBatch ) {
if ( Len( Trim( row[ contentIdField ] ?: "" ) ) ) {
arrayAppend( batchIds, row[ contentIdField ] );
}
}
if ( !ArrayLen( batchIds ) ) {
if ( canError ) { logger.error( "Delete expired email content aborted: no valid IDs found in selected batch." ); }
hadAbortIssue = true;
break;
}
batchDeleted = dao.deleteData( filter={ "#contentIdField#"=batchIds } );
if ( batchDeleted != ArrayLen( batchIds ) && canError ) {
logger.error( "Delete expired email content mismatch: selected [#ArrayLen( batchIds )#] IDs but deleted [#batchDeleted#] rows." );
}
if ( batchDeleted <= 0 ) {
if ( canError ) { logger.error( "Delete expired email content aborted: selected batch but deleted zero rows." ); }
hadAbortIssue = true;
break;
}
totalDeleted += batchDeleted;
} while ( expiredBatch.recordCount == batchSize );

if ( canInfo ) { logger.info( "Content of [#totalDeleted#] emails deleted." ); }

var emailSettings = $getPresideCategorySettings( "email" );
if ( $helpers.isTrue( emailSettings.remove_view_online_content ?: "" ) && ( val( emailSettings.view_online_content_expiry ?: "" ) > 0 ) ) {
var viewOnlineContentDao = $getPresideObject( "email_template_view_online_content" );
var viewContentIdField = viewOnlineContentDao.getIdField();
var expiryDate = dateAdd( "d", -val( emailSettings.view_online_content_expiry ), now() );
var totalViewDeleted = 0;
var batchViewDeleted = 0;
do {
var expiredViewBatch = viewOnlineContentDao.selectData(
filter = "datecreated <= :datecreated"
, filterParams = { datecreated=expiryDate }
, selectFields = [ viewContentIdField ]
, maxRows = batchSize
);
if ( !expiredViewBatch.recordCount ) { break; }
var batchViewIds = [];
for ( var viewRow in expiredViewBatch ) {
if ( Len( Trim( viewRow[ viewContentIdField ] ?: "" ) ) ) {
arrayAppend( batchViewIds, viewRow[ viewContentIdField ] );
}
}
if ( !ArrayLen( batchViewIds ) ) {
if ( canError ) { logger.error( "Delete view online content aborted: no valid IDs found in selected batch." ); }
hadAbortIssue = true;
break;
}
batchViewDeleted = viewOnlineContentDao.deleteData( filter={ "#viewContentIdField#"=batchViewIds } );
if ( batchViewDeleted != ArrayLen( batchViewIds ) && canError ) {
logger.error( "Delete view online content mismatch: selected [#ArrayLen( batchViewIds )#] IDs but deleted [#batchViewDeleted#] rows." );
}
if ( batchViewDeleted <= 0 ) {
if ( canError ) { logger.error( "Delete view online content aborted: selected batch but deleted zero rows." ); }
hadAbortIssue = true;
break;
}
totalViewDeleted += batchViewDeleted;
} while ( expiredViewBatch.recordCount == batchSize );

var emailSettings = $getPresideCategorySettings( "email" );
if ( $helpers.isTrue( emailSettings.remove_view_online_content ?: "" ) && ( val( emailSettings.view_online_content_expiry ?: "" ) > 0 ) ) {
var deleted = $getPresideObject( "email_template_view_online_content").deleteData(
filter = "datecreated <= :datecreated"
, filterParams = { datecreated=dateAdd( "d", -val( emailSettings.view_online_content_expiry ), now() ) }
);
if ( canInfo ) { logger.info( "[#totalViewDeleted#] emails' view online contents deleted." ); }
}

if ( canInfo ) { logger.info( "[#deleted#] emails' view online contents deleted." ); }
return !hadAbortIssue;
} catch( any e ) {
if ( canError ) {
logger.error( "Delete expired email content task failed. Message: [#e.message#], detail: [#( e.detail ?: '' )#].", e );
}
return false;
}

return true;
}

/**
Expand Down
Loading