* SPDX-License-Identifier: AGPL-3.0-only ************************************/ /* crmv@174812 */ class ModNotifications_CommentsModel { protected $data; static $ownerNamesCache = array(); static $ownerPhotoCache = array(); static $customerPortalUserId = null; function __construct($datarow) { $this->data = $datarow; if (empty(self::$customerPortalUserId) && isModuleInstalled('CustomerPortal')) { // crmv@189136 require_once('modules/CustomerPortal/PortalUtils.php'); self::$customerPortalUserId = cp_getCurrentUser(); } } function author() { if ($this->data['mod_not_type'] == 'Generic') return ''; //crmv@183346 $authorid = $this->data['smcreatorid']; if (!empty($this->data['from_email_name']) && ($authorid == self::$customerPortalUserId || in_array($this->data['mod_not_type'],array('Ticket portal replied','Ticket portal created','Calendar invitation answer yes contact','Calendar invitation answer no contact')))) { return $this->data['from_email_name']; } if(!isset(self::$ownerNamesCache[$authorid])) { self::$ownerNamesCache[$authorid] = trim(getUserFullName($authorid)); } return self::$ownerNamesCache[$authorid]; } function authorPhoto() { $authorid = $this->data['smcreatorid']; if ($authorid == self::$customerPortalUserId || in_array($this->data['mod_not_type'],array('Ticket portal replied','Ticket portal created','Calendar invitation answer yes contact','Calendar invitation answer no contact'))) { return getPortalAvatar(); } if(!isset(self::$ownerPhotoCache[$authorid])) { self::$ownerPhotoCache[$authorid] = getUserAvatar($authorid); } return self::$ownerPhotoCache[$authorid]; } function timestamp(){ return CRMVUtils::timestamp($this->data['createdtime']); // crmv@164654 } function timestampAgo(){ return CRMVUtils::timestampAgo($this->data['createdtime']); // crmv@164654 } function content() { global $adb, $current_user,$table_prefix,$site_URL; // crmv@178322 $focus = ModNotifications::getInstance(); // crmv@164122 //crmv@183346 if ($this->data['mod_not_type'] == 'Generic') { $html = $this->data['description']; } else { $html = $focus->translateNotificationType($this->data['mod_not_type'],'action'); } //crmv@183346e //crmv@31126 if ($this->data['mod_not_type'] == 'Import Completed') { $html .= ' '.$this->data['description'].''; } //crmv@31126e if ($this->data['mod_not_type'] == 'Relation') { $parent_id = $this->data['description']; $parent_module = getSalesEntityType($parent_id); $entityType = getSingleModuleName($parent_module,$parent_id); $displayValueArray = getEntityName($parent_module, $parent_id); if(!empty($displayValueArray)){ foreach($displayValueArray as $key=>$value){ $displayValue = $value; } } $html .= " $displayValue ($entityType) "; $html .= getTranslatedString('LBL_TO','ModComments'); } $html .= ' '.$this->relatedToString(); if ($this->data['mod_not_type'] == 'ListView changed') { $html .= ' :
'; $changes = array_filter(explode(',',$this->data['description'])); $html_changes = array(); // crmv@177137 if (!empty($changes)) { //crmv@58625 global $list_max_entries_per_page; $cnt_changes = 1; $show_other = ''; if (count($changes) > $list_max_entries_per_page){ $show_other = ", ...".getTranslatedString('LBL_OTHERS')." ".(count($changes)-$list_max_entries_per_page); } foreach($changes as $id) { $module = getSalesEntityType($id); $displayValueArray = getEntityName($module,$id); if(!empty($displayValueArray)){ foreach($displayValueArray as $key=>$value){ $displayValue = $value; } } $html_changes[] = "$displayValue"; $cnt_changes++; if ($cnt_changes > $list_max_entries_per_page){ break; } } $html .= implode(', ',$html_changes).$show_other; //crmv@58625 e } } if ($this->parent_module != '' && in_array($this->data['mod_not_type'],array('Changed followed record','Changed record'))) { // crmv@164120 $q = "SELECT changelogid, description FROM {$table_prefix}_changelog WHERE parent_id = ? AND user_name <> ? AND hide = 0 ORDER BY changelogid DESC"; //crmv@135193 $ress = $adb->limitpQuery($q,0,1,array($this->parent_id, $current_user->user_name)); $changelogid = $adb->query_result_no_html($ress,0,"changelogid"); $description = $adb->query_result_no_html($ress,0,"description"); $description_elements = Zend_Json::decode($description); $ChangeLogFocus = ChangeLog::getInstance(); // crmv@164120e $html .= '
keyboard_arrow_right'.getTranslatedString('LBL_DETAILS','ModNotifications').''; //crmv@104566 $html .= ''; } // crmv@43194 crmv@54917 if ($this->data['related_to'] > 0 && in_array($this->data['mod_not_type'], array('Calendar invitation', 'Calendar invitation edit'))) { $rowid = $this->data['modnotificationsid']; $checkedYes = $checkedNo = ''; $res = $adb->pquery("select partecipation from {$table_prefix}_invitees where activityid = ? and inviteeid = ?",array($this->data['related_to'],$this->data['smownerid'])); if ($res) $invitationAnswer = $adb->query_result($res,0,'partecipation'); if ($invitationAnswer == 1) { $checkedNo = 'checked="checked"'; } elseif ($invitationAnswer == 2) { $checkedYes = 'checked="checked"'; } $html .= '
'.getTranslatedString('LBL_INVITATION_QUESTION', 'ModNotifications').'? '; $html .= ''; $html .= ''; } // crmv@43194e crmv@54917e //crmv@65455 if ($this->data['mod_not_type'] == 'Import Error') { // crmv@178322 $dataimporter_url = $site_URL.'/index.php?module=Settings&action=DataImporter'; $desc = sprintf(getTranslatedString('LBL_IMPORT_ERROR_NOTIF_DESC', 'Settings'),$dataimporter_url); // crmv@178322e $html = "$html ".$desc; } //crmv@65455e //crmv@91571 if ($this->data['mod_not_type'] == 'MassEdit' || $this->data['mod_not_type'] == 'MassEditError') { $MUtils = MassEditUtils::getInstance(); $html = $MUtils->getNotificationHtml($this->data['related_to'], $html); } //crmv@91571e // crmv@202577 if ($this->data['mod_not_type'] == 'MassCreate' || $this->data['mod_not_type'] == 'MassCreateError') { $MUtils = MassCreateUtils::getInstance(); $html = $MUtils->getNotificationHtml($this->data['related_to'], $html); } // crmv@202577e return $html; } // crmv@31780 - restituisce un array, no html // TODO: listview function content_no_html() { global $adb, $current_user,$table_prefix; $ret = array(); $focus = ModNotifications::getInstance(); // crmv@164122 //crmv@183346 if ($this->data['mod_not_type'] == 'Generic') { $ret['action'] = $this->data['description']; } else { $ret['action'] = $focus->translateNotificationType($this->data['mod_not_type'],'action'); } //crmv@183346e $ret['notification_type'] = $this->data['mod_not_type']; //crmv@31126 /*if ($this->data['mod_not_type'] == 'Import Completed') { $html .= ' '.$this->data['description'].''; }*/ //crmv@31126e if ($this->data['mod_not_type'] == 'Relation') { $parent_id = $this->data['description']; $parent_module = getSalesEntityType($parent_id); $entityType = getSingleModuleName($parent_module,$parent_id); $displayValueArray = getEntityName($parent_module, $parent_id); if(!empty($displayValueArray)){ foreach($displayValueArray as $key=>$value){ $displayValue = $value; } } $html .= " $displayValue ($entityType) "; $html .= getTranslatedString('LBL_TO','ModComments'); $ret['related'] = array( 'module' => $parent_module, 'record' => $parent_id, 'value' => $displayValue, 'type' => $entityType ); } $ret['item'] = $this->relatedToString(true); if (!empty($ret['item']) && !empty($ret['action']) && $this->data['mod_not_type'] == 'Generic') $ret['action'] .= ' '.getTranslatedString('LBL_ABOUT','ModComments'); //crmv@183346 $ret['haslist'] = false; if ($this->data['mod_not_type'] == 'ListView changed') { $changes = array_filter(explode(',',$this->data['description'])); $html_changes = ''; if (!empty($changes)) { foreach($changes as $id) { $module = getSalesEntityType($id); $displayValueArray = getEntityName($module,$id); if(!empty($displayValueArray)){ foreach($displayValueArray as $key=>$value){ $displayValue = $value; } } $ret['list'][] = array( // crmv@175507 'module' => $module, 'record' => $id, 'value' => $displayValue ); } $ret['haslist'] = true; } } $ret['hasdetails'] = false; if ($this->parent_module != '' && in_array($this->data['mod_not_type'],array('Changed followed record','Changed record'))) { // crmv@164120 $q = "SELECT changelogid, description FROM {$table_prefix}_changelog WHERE parent_id = ? AND user_name <> ? AND hide = 0 ORDER BY changelogid DESC"; //crmv@135193 $ress = $adb->limitpQuery($q,0,1,array($this->parent_id, $current_user->user_name)); $changelogid = $adb->query_result_no_html($ress,0,"changelogid"); $description = $adb->query_result_no_html($ress,0,"description"); $ChangeLogFocus = ChangeLog::getInstance(); // crmv@164120e $ret['details'] = $ChangeLogFocus->getFieldsTable($description, $this->parent_module, true); if (is_array($ret['details'])) { foreach ($ret['details'] as $k=>$v) if (is_array($ret['details'][$k])) $ret['details'][$k]['changelogid'] = $changelogid; if (count($ret['details']) == 0) { unset($ret['details']); } else { $ret['hasdetails'] = true; } } $ret['changelogid'] = $changelogid; } //crmv@91571 if ($this->data['mod_not_type'] == 'MassEdit' || $this->data['mod_not_type'] == 'MassEditError') { $MUtils = MassEditUtils::getInstance(); $ret['massedit'] = $MUtils->getNotificationInfo($this->data['related_to']); } //crmv@91571e // crmv@202577 if ($this->data['mod_not_type'] == 'MassCreate' || $this->data['mod_not_type'] == 'MassCreateError') { $MUtils = MassCreateUtils::getInstance(); $ret['masscreate'] = $MUtils->getNotificationInfo($this->data['related_to']); } // crmv@202577e return $ret; } // crmv@31780e function id() { return $this->data['modnotificationsid']; // crmv@164122 } function relatedTo() { return $this->data['related_to']; } // crmv@31780 function relatedToString($nohtml = false) { global $table_prefix; $this->parent_id = $this->relatedTo(); if (!in_array($this->parent_id,array('',0))) { if ($this->data['mod_not_type'] == 'ListView changed') { global $adb, $app_strings; $result = $adb->query('SELECT * FROM '.$table_prefix.'_customview WHERE cvid = '.$this->parent_id); if ($result) { $this->parent_module = $adb->query_result($result,0,'entitytype'); $entityType = getTranslatedString($this->parent_module,$this->parent_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]; } $displayValue = $viewname; } if (empty($displayValue)) { $displayValue = $entityType; } if ($nohtml) { return array( 'module' => $this->parent_module, 'action' => 'index', 'viewname' => $this->parent_id, 'value' => $displayValue, 'type' => $entityType ); } else { return " $displayValue ($entityType)"; // crmv@157081 } } else { //crmv@157603 $this->parent_module = $real_parent_module = getSalesEntityType($this->parent_id); if ($this->parent_module == 'Calendar') $real_parent_module = getSalesEntityType($this->parent_id,true); $entityType = getSingleModuleName($real_parent_module,$this->parent_id); $displayValueArray = getEntityName($real_parent_module, $this->parent_id); //crmv@157603e $displayValue = $displayValueArray[$this->parent_id]; if (empty($displayValue)) { $displayValue = $entityType; } if ($nohtml) { return array( 'module' => $this->parent_module, 'action' => 'DetailView', 'record' => $this->parent_id, 'value' => $displayValue, 'type' => $entityType ); } else { // crmv@43050 if ($this->parent_module == 'ModComments') { return " $displayValue ($entityType) "; // crmv@43194 } else { //crmv@183346 $html = ''; if ($this->data['mod_not_type'] == 'Generic') $html = '
'.getTranslatedString('LBL_ABOUT','ModComments'); $html .= " $displayValue ($entityType)"; // crmv@191501 if ($real_parent_module == 'Leads') { // check if converted $leadFocus = CRMEntity::getInstance('Leads'); if ($leadFocus->isConverted($this->parent_id)) { $contid = $leadFocus->getConvertedContact($this->parent_id); if ($contid > 0) { $convModule = 'Contacts'; $entityType2 = getSingleModuleName($convModule,$contid); $displayValue2 = getEntityName($convModule, $contid, true); $html .= ' '.getTranslatedString('LBL_CONVERTED_IN', 'ModNotifications'); $html .= " $displayValue2 ($entityType2)"; } } } // crmv@191501e return $html; //crmv@183346e } // crmv@43050e } } } } // crmv@31780e function isUnseen() { if ($this->data['seen'] == 1) { return false; } else { return true; } } }