mirror of
https://github.com/VTECRM/vtenext.git
synced 2026-02-27 08:38:46 +00:00
172 lines
7.0 KiB
PHP
172 lines
7.0 KiB
PHP
<?php
|
|
/*************************************
|
|
* SPDX-FileCopyrightText: 2009-2020 Vtenext S.r.l. <info@vtenext.com>
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
************************************/
|
|
|
|
/* crmv@56233 */
|
|
|
|
require_once('modules/SDK/src/204/204.php');
|
|
require_once('modules/Settings/MailScanner/core/MailScannerInfo.php');
|
|
require_once('modules/Settings/MailScanner/core/MailBox.php');
|
|
|
|
class Vtecrm_MailScannerSpam {
|
|
|
|
var $_table;
|
|
|
|
function __construct() {
|
|
global $table_prefix;
|
|
$this->_table = $table_prefix.'_mailscanner_spam';
|
|
}
|
|
|
|
function add2Queue($scannername, $xuid, $folder, $spam_folder) {
|
|
global $adb;
|
|
if ($adb->isMysql()) {
|
|
$adb->pquery("insert ignore into {$this->_table} (scannername, xuid, folder, spam_folder) values (?,?,?,?)",array($scannername, $xuid, $folder, $spam_folder));
|
|
} else {
|
|
$this->removeFromQueue($scannername, $xuid, $folder);
|
|
$adb->pquery("insert into {$this->_table} (scannername, xuid, folder, spam_folder) values (?,?,?,?)",array($scannername, $xuid, $folder, $spam_folder));
|
|
}
|
|
}
|
|
|
|
function removeFromQueue($scannername, $xuid, $folder) {
|
|
global $adb;
|
|
$adb->pquery("delete from {$this->_table} where scannername = ? and xuid = ? and folder = ?",array($scannername, $xuid, $folder));
|
|
}
|
|
|
|
function processQueue($scannername='') {
|
|
global $adb;
|
|
$query = "select * from {$this->_table}";
|
|
//crmv@208173
|
|
if (!empty($scannername)) {
|
|
$query .= " where scannername = ?";
|
|
$result = $adb->pquery($query, array($scannername));
|
|
} else{
|
|
$result = $adb->pquery($query, array());
|
|
}
|
|
//crmv@208173e
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
while($row=$adb->fetchByAssoc($result)) {
|
|
$scannerinfo = new Vtenext_MailScannerInfo($row['scannername']);//crmv@207843
|
|
$mailbox = new Vtenext_MailBox($scannerinfo);//crmv@207843
|
|
$mailbox->connect($row['folder']);
|
|
$return = $mailbox->moveMessage($row['xuid'], $row['spam_folder'], true);
|
|
$this->removeFromQueue($row['scannername'], $row['xuid'], $row['folder']);
|
|
}
|
|
}
|
|
}
|
|
|
|
function spam($record) {
|
|
global $adb, $table_prefix;
|
|
|
|
$module = getSalesEntityType($record);
|
|
|
|
$focus = CRMEntity::getInstance($module);
|
|
$focus->retrieve_entity_info($record, $module);
|
|
|
|
$deepClear = false;
|
|
$record2Trash = array();
|
|
$move2Spam = array();
|
|
|
|
if (!empty($focus->column_fields['parent_id'])) {
|
|
$parent_id = $focus->column_fields['parent_id'];
|
|
$parent_module = getSalesEntityType($parent_id);
|
|
if ($parent_module == 'Leads') {
|
|
$parentFocus = CRMEntity::getInstance($parent_module);
|
|
$parentFocus->retrieve_entity_info($parent_id, $parent_module);
|
|
if ($parentFocus->column_fields['leadsource'] == 'Mail Converter') {
|
|
// check if all related tickets are created by MailConverter
|
|
$result = $adb->pquery("SELECT crmid, mailscanner_action FROM {$table_prefix}_troubletickets
|
|
INNER JOIN {$table_prefix}_crmentity ON {$table_prefix}_crmentity.crmid = {$table_prefix}_troubletickets.ticketid
|
|
WHERE {$table_prefix}_crmentity.deleted = 0 AND parent_id = ?
|
|
AND (mailscanner_action IS NULL OR mailscanner_action = '' OR mailscanner_action = 0)",
|
|
array($parent_id));
|
|
if ($adb->num_rows($result) == 0) {
|
|
$deepClear = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($deepClear) {
|
|
$record2Trash[$parent_module][] = $parent_id; // trash parent
|
|
|
|
$result = $adb->pquery("SELECT crmid, mailscanner_action, scannername
|
|
FROM {$table_prefix}_troubletickets
|
|
INNER JOIN {$table_prefix}_crmentity ON {$table_prefix}_crmentity.crmid = {$table_prefix}_troubletickets.ticketid
|
|
INNER JOIN {$table_prefix}_mailscanner_actions ON {$table_prefix}_mailscanner_actions.actionid = mailscanner_action
|
|
INNER JOIN {$table_prefix}_mailscanner ON {$table_prefix}_mailscanner.scannerid = {$table_prefix}_mailscanner_actions.scannerid
|
|
WHERE {$table_prefix}_crmentity.deleted = 0 AND parent_id = ?",
|
|
array($parent_id));
|
|
if ($result && $adb->num_rows($result) > 0) {
|
|
while($row=$adb->fetchByASsoc($result)) {
|
|
$record2Trash[$module][] = $row['crmid']; // trash all tickets associated
|
|
|
|
$result2 = $adb->pquery("SELECT foldername
|
|
FROM {$table_prefix}_mailscanner_folders
|
|
INNER JOIN {$table_prefix}_mailscanner_actions ON {$table_prefix}_mailscanner_actions.scannerid = {$table_prefix}_mailscanner_folders.scannerid
|
|
WHERE {$table_prefix}_mailscanner_actions.actionid = ? AND spam = 1",array($row['mailscanner_action']));
|
|
if ($result2 && $adb->num_rows($result2) > 0) {
|
|
$foldername = $adb->query_result($result2,0,'foldername');
|
|
}
|
|
|
|
// spam and trash all messages associated to tickets
|
|
//crmv@171021
|
|
$result1 = $adb->pquery("SELECT messagesid, folder, xuid
|
|
FROM {$table_prefix}_messages
|
|
INNER JOIN {$table_prefix}_messagesrel ON {$table_prefix}_messages.messagehash = {$table_prefix}_messagesrel.messagehash
|
|
WHERE deleted = 0 AND mtype = ? AND {$table_prefix}_messagesrel.crmid = ?",array('Link',$row['crmid']));
|
|
//crmv@171021e
|
|
if ($result1 && $adb->num_rows($result1) > 0) {
|
|
while($row1=$adb->fetchByAssoc($result1)) {
|
|
$move2Spam[$row['scannername']][] = array('folder'=>$row1['folder'],'xuid'=>$row1['xuid'],'spam_folder'=>$foldername);
|
|
$record2Trash['Messages'][] = $row1['messagesid'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$record2Trash[$module][] = $record;
|
|
$scannername = getScannerNameFromAction($focus->column_fields['mailscanner_action']);
|
|
|
|
$result2 = $adb->pquery("SELECT foldername
|
|
FROM {$table_prefix}_mailscanner_folders
|
|
INNER JOIN {$table_prefix}_mailscanner_actions ON {$table_prefix}_mailscanner_actions.scannerid = {$table_prefix}_mailscanner_folders.scannerid
|
|
WHERE {$table_prefix}_mailscanner_actions.actionid = ? AND spam = 1",array($focus->column_fields['mailscanner_action']));
|
|
if ($result2 && $adb->num_rows($result2) > 0) {
|
|
$foldername = $adb->query_result($result2,0,'foldername');
|
|
}
|
|
|
|
// spam and trash all messages associated to tickets
|
|
//crmv@171021
|
|
$result1 = $adb->pquery("SELECT messagesid, folder, xuid
|
|
FROM {$table_prefix}_messages
|
|
INNER JOIN {$table_prefix}_messagesrel ON {$table_prefix}_messages.messagehash = {$table_prefix}_messagesrel.messagehash
|
|
WHERE deleted = 0 AND mtype = ? AND {$table_prefix}_messagesrel.crmid = ?",array('Link',$record));
|
|
//crmv@171021e
|
|
if ($result1 && $adb->num_rows($result1) > 0) {
|
|
while($row1=$adb->fetchByAssoc($result1)) {
|
|
$move2Spam[$scannername][] = array('folder'=>$row1['folder'],'xuid'=>$row1['xuid'],'spam_folder'=>$foldername);
|
|
$record2Trash['Messages'][] = $row1['messagesid'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!empty($move2Spam)) {
|
|
foreach($move2Spam as $scannername => $info) {
|
|
foreach($info as $i) {
|
|
$this->add2Queue($scannername, $i['xuid'], $i['folder'], $i['spam_folder']);
|
|
}
|
|
}
|
|
}
|
|
if (!empty($record2Trash)) {
|
|
foreach($record2Trash as $mod => $ids) {
|
|
$tmpFocus = CRMEntity::getInstance($mod);
|
|
foreach($ids as $id) {
|
|
$tmpFocus->trash($module, $id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
?>
|