* SPDX-License-Identifier: AGPL-3.0-only
************************************/
//crmv@start
class ModNotificationsHandler extends VTEventHandler {
function handleEvent($eventName, $data) {
global $adb, $current_user, $currentModule,$table_prefix;
$currentModule_tmp = $currentModule;
$currentModule = 'ModNotifications';
$obj = ModNotifications::getInstance(); // crmv@164122
$already_notified_users = array();
$id = $data->getId();
$column_fields = $data->getData();
$moduleName = $data->getModuleName();
if ($data->isNew()) {
$mode = 'create';
} else {
$mode = 'edit';
// crmv@198950
// check if changelog was created. if not, don't create the notification!
require_once('modules/ChangeLog/ChangeLog.php');
$clog = ChangeLog::getInstance();
if (!$clog->hasSavedChangelog($id)) {
$currentModule = $currentModule_tmp;
return;
}
// and clear them, so i can save the same record more times
$clog->clearSavedChangelogs($id);
// crmv@198950e
}
//crmv@47905
/*
if ($data->focus instanceof ModNotifications && $mode == 'create') {
if ($eventName == 'vte.entity.beforesave') {
$data->notify_me_via_email = false;
$userFocus = CRMEntity::getInstance('Users');
$userFocus->retrieve_entity_info($column_fields['assigned_user_id'],'Users');
if ($userFocus->column_fields['notify_me_via'] == 'Emails') {
$data->set('seen',1);
$data->notify_me_via_email = true;
}
}
if ($eventName == 'vte.entity.aftersave.notifications') { // crmv@198950
if ($column_fields['mod_not_type'] == 'ListView changed') {
$adb->pquery('update '.$table_prefix.'_crmentity set smcreatorid = ? where crmid = ?',array(0,$id));
}
if ($data->notify_me_via_email) {
require_once('modules/Emails/mail.php');
global $HELPDESK_SUPPORT_NAME,$HELPDESK_SUPPORT_EMAIL_ID;
$user_emailid = getUserEmailId('id',$column_fields['assigned_user_id']);
if ($user_emailid != '') {
$from_email = $column_fields['from_email'];
if ($from_email == '') {
$from_email = $HELPDESK_SUPPORT_EMAIL_ID;
}
$from_email_name = $column_fields['from_email_name'];
if ($from_email_name == '') {
$from_email_name = $HELPDESK_SUPPORT_NAME;
}
$subject = $column_fields['subject'];
if ($subject == '') {
$parent_module = getSalesEntityType($column_fields['related_to']);
$recordName = getEntityName($parent_module,$column_fields['related_to']);
$entityType = getSingleModuleName($parent_module,$column_fields['related_to']); //crmv@32334
$subject = trim(getUserFullName($current_user->id)).' '.$obj->translateNotificationType($column_fields['mod_not_type'],'action');
if ($column_fields['mod_not_type'] == 'Relation') {
$relation_parent_id = $column_fields['description'];
$relation_parent_module = getSalesEntityType($relation_parent_id);
$relation_recordName = getEntityName($relation_parent_module,$relation_parent_id);
$relation_entityType = getSingleModuleName($relation_parent_module,$relation_parent_id);
$subject .= ' '.$relation_recordName[$column_fields['description']]." ($relation_entityType) ";
$subject .= getTranslatedString('LBL_TO','ModComments');
}
if ($column_fields['mod_not_type'] == 'ListView changed') {
$subject = $obj->translateNotificationType($column_fields['mod_not_type'],'action');
global $app_strings;
$result = $adb->query('SELECT * FROM '.$table_prefix.'_customview WHERE cvid = '.$column_fields['related_to']);
if ($result) {
$module = $adb->query_result($result,0,'entitytype');
$entityType = getTranslatedString($module,$module);
$viewname = $adb->query_result($result,0,'viewname');
if ($viewname == 'All') {
$viewname = $app_strings['COMBO_ALL'];
} elseif($this->parent_module == 'Calendar' && in_array($viewname,array('Events','Tasks'))) {
$viewname = $app_strings[$viewname];
}
$subject .= " $viewname ($entityType)";
}
} else {
$subject .= ' '.$recordName[$column_fields['related_to']]." ($entityType)";
}
}
$body = $column_fields['description'];
if (in_array($column_fields['mod_not_type'],array('Relation','ListView changed'))) {
$body = '';
}
if ($body == '') {
if ($column_fields['mod_not_type'] == 'ListView changed') {
$body = $obj->getBodyNotificationCV($id,$column_fields,$from_email_name);
} else {
$body = $obj->getBodyNotification($id,$column_fields,$from_email_name);
}
}
$mail_status = send_mail($parent_module,$user_emailid,$from_email_name,$from_email,$subject,$body);
}
}
}
}
*/
//crmv@47905 e
/*
if ($data->focus instanceof HelpDesk) {
if($_REQUEST['service'] == 'customerportal') { //salvo la notifica direttamente in customerportal.php
$already_notified_users[] = $column_fields['assigned_user_id'];
}
if ($eventName == 'vte.entity.beforesave') {
if ($mode == 'create') {
$data->old_ticketstatus = '';
$data->old_solution = '';
$data->old_assigned_user_id = '';
} else {
$oldHelpDesk = CRMEntity::getInstance('HelpDesk');
$oldHelpDesk->retrieve_entity_info($id,'HelpDesk');
$data->old_ticketstatus = $oldHelpDesk->column_fields['ticketstatus'];
$data->old_solution = $oldHelpDesk->column_fields['solution'];
$data->old_assigned_user_id = $oldHelpDesk->column_fields['assigned_user_id'];
}
}
if ($eventName == 'vte.entity.aftersave.notifications' && !in_array($column_fields['assigned_user_id'],$already_notified_users)) { // crmv@198950
if ($mode == 'create') {
$type = 'Ticket created';
} else {
$type = 'Ticket changed';
}
if ($mode != 'edit' ||
($column_fields['ticketstatus'] != $data->old_ticketstatus && $column_fields['ticketstatus'] == getTranslatedString('Closed','HelpDesk')) ||
$column_fields['comments'] != '' ||
$column_fields['solution'] != $data->old_solution ||
$column_fields['assigned_user_id'] != $data->old_assigned_user_id)
{
$subject = $column_fields['ticket_no'].' [ '.getTranslatedString('LBL_TICKET_ID','HelpDesk').' : '.$id.' ] '.$column_fields['ticket_title'];
$info = array();
$info['mode'] = $mode;
$info['sub'] = $column_fields['ticket_title'];
$info['status'] = $column_fields['ticketstatus'];
$info['category'] = $column_fields['ticketcategories'];
$info['severity'] = $column_fields['ticketseverities'];
$info['priority'] = $column_fields['ticketpriorities'];
$info['description'] = $column_fields['description'];
$info['solution'] = $column_fields['solution'];
if (!in_array($column_fields['parent_id'],array('',0))) {
$recordName = array_values(getEntityName(getSalesEntityType($column_fields['parent_id']), $column_fields['parent_id']));
$recordName = $recordName[0];
$info['parent_name'] = $recordName;
}
$body = getTicketDetails($id,$info);
$notified_users = $obj->saveFastNotification(
array(
'assigned_user_id' => $column_fields['assigned_user_id'],
'related_to' => $id,
'mod_not_type' => $type,
'createdtime' => $column_fields['modifiedtime'],
'modifiedtime' => $column_fields['modifiedtime'],
'subject' => $subject,
'description' => $body,
)
);
if(!empty($notified_users)) {
foreach($notified_users as $notified_user) {
$already_notified_users[] = $notified_user;
}
}
}
}
}
*/
if ($data->focus instanceof Products) {
if ($eventName == 'vte.entity.beforesave') {//crmv@207852
$data->stock_level_check = false;
if ($mode == 'create') {
if($column_fields['qtyinstock'] != '' && $column_fields['reorderlevel'] != '' && $column_fields['qtyinstock'] < $column_fields['reorderlevel']) {
$data->stock_level_check = true;
}
} else {
$oldProducts = CRMEntity::getInstance('Products');
$oldProducts->retrieve_entity_info($id,'Products');
$data->old_qtyinstock = $oldProducts->column_fields['qtyinstock'];
$data->old_reorderlevel = $oldProducts->column_fields['reorderlevel'];
if ($column_fields['qtyinstock'] == '') {
$column_fields['qtyinstock'] = 0;
}
if ($column_fields['reorderlevel'] == '') {
$column_fields['reorderlevel'] = 0;
}
if(($column_fields['qtyinstock'] != $data->old_qtyinstock || $column_fields['reorderlevel'] != $data->old_reorderlevel) && $column_fields['qtyinstock'] < $column_fields['reorderlevel']) {
$data->stock_level_check = true;
}
}
}
if ($eventName == 'vte.entity.aftersave.notifications' && $data->stock_level_check) { // crmv@198950 crmv@207852
$productname = $column_fields['productname'];
$qty_stk = $column_fields['qtyinstock'];
$reord = $column_fields['reorderlevel'];
$handler = $column_fields['assigned_user_id'];
$handler_name = getUserName($handler);
$sender_name = getUserName($current_user->id);
$to_address= getUserEmail($handler);
$subject = $productname.' '.getTranslatedString('MSG_STOCK_LEVEL','Products');
$body = getTranslatedString('MSG_DEAR','Products').' '.$handler_name.',
'.
getTranslatedString('MSG_CURRENT_STOCK','Products').' '.$productname.' '.getTranslatedString('MSG_IN_OUR_WAREHOUSE','Products').' '.$qty_stk.'. '.getTranslatedString('MSG_PROCURE_REQUIRED_NUMBER','Products').' '.$reord.'.
'.
getTranslatedString('MSG_SEVERITY','Products').'
'.
getTranslatedString('MSG_THANKS','Products').'
'.
$sender_name;
$obj->saveFastNotification(
array(
'assigned_user_id' => $column_fields['assigned_user_id'],
'related_to' => $id,
'mod_not_type' => 'Product stock level',
'createdtime' => $column_fields['createdtime'],
'modifiedtime' => $column_fields['createdtime'],
'subject' => $subject,
'description' => $body,
'from_email' => $current_user->email1,
'from_email_name' => getUserFullName($current_user->id),
),false
);
}
}
if ($obj->isEnabled($moduleName)) {
if($eventName == 'vte.entity.aftersave.notifications') { // crmv@198950 crmv@207852
$following_users = $obj->getFollowingUsers($id);
if (!empty($following_users)) {
foreach($following_users as $following_user) {
if ($current_user->id != $following_user && !in_array($following_user,$already_notified_users)) {
$notified_users = $obj->saveFastNotification(
array(
'assigned_user_id' => $following_user,
'related_to' => $id,
'mod_not_type' => 'Changed followed record',
'createdtime' => $column_fields['modifiedtime'],
'modifiedtime' => $column_fields['modifiedtime'],
),false
);
if(!empty($notified_users)) {
foreach($notified_users as $notified_user) {
$already_notified_users[] = $notified_user;
}
}
}
}
}
if ($mode == 'create') {
$type = 'Created record';
} else {
$type = 'Changed record';
}
$interested_users = $obj->getInterestedToModuleUsers($mode,$moduleName);
$users = array();
$result = $adb->pquery('SELECT id FROM '.$table_prefix.'_users WHERE id = ? AND deleted = 0 AND status = ?', array($column_fields['assigned_user_id'],'Active'));
if ($result && $adb->num_rows($result) > 0) {
$users[] = $column_fields['assigned_user_id'];
} else {
$result = $adb->pquery('SELECT groupid FROM '.$table_prefix.'_groups WHERE groupid = ?', array($column_fields['assigned_user_id']));
if($result && $adb->num_rows($result) > 0) {
$groupid = $adb->query_result($result,0,'groupid');
require_once('include/utils/GetGroupUsers.php');
$focus = new GetGroupUsers();
$focus->getAllUsersInGroup($groupid);
$group_users = $focus->group_users;
if (!empty($group_users)) {
$group_users_str = implode(',',$group_users);
$result = $adb->pquery('select id from '.$table_prefix.'_users where id in ('.$group_users_str.') and deleted = 0 and status = ?',array('Active'));
if($result && $adb->num_rows($result) > 0) {
while($row=$adb->fetchByAssoc($result)) {
$users[] = $row['id'];
}
}
}
}
}
foreach($interested_users as $interested_user) {
if (in_array($interested_user,$already_notified_users)) {
continue;
}
//if ($interested_user == $column_fields['assigned_user_id'] && $interested_user != $current_user->id) {
if (in_array($interested_user,$users) && $interested_user != $current_user->id) {
$notified_users = $obj->saveFastNotification(
array(
'assigned_user_id' => $interested_user,
'related_to' => $id,
'mod_not_type' => $type,
'createdtime' => $column_fields['modifiedtime'],
'modifiedtime' => $column_fields['modifiedtime'],
),false
);
if(!empty($notified_users)) {
foreach($notified_users as $notified_user) {
$already_notified_users[] = $notified_user;
}
}
}
}
}
}
$currentModule = $currentModule_tmp;
}
}
//crmv@end