Edit file File name : Popup_picker.php Content :<?php /* * * SugarCRM Community Edition is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. * * SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd. * Copyright (C) 2011 - 2017 SalesAgility Ltd. * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU Affero General Public License version 3. * * In accordance with Section 7(b) of the GNU Affero General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not * reasonably feasible for technical reasons, the Appropriate Legal Notices must * display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM". */ if (!defined('sugarEntry') || !sugarEntry) { die('Not A Valid Entry Point'); } require_once 'include/upload_file.php'; require_once 'include/utils/db_utils.php'; global $currentModule; global $focus; global $action; global $app_strings; global $app_list_strings; //we don't want the parent module's string file, but rather the string file specific to this subpanel global $current_language, $beanList, $beanFiles; $current_module_strings = return_module_language($current_language, 'Activities'); $focus = BeanFactory::getBean($_REQUEST['module_name']); class Popup_Picker { /** * sole constructor */ public function __construct() { } /** * @deprecated deprecated since version 7.6, PHP4 Style Constructors are deprecated and will be remove in 8.0, * please update your code, use __construct instead */ public function Popup_Picker() { $deprecatedMessage = 'PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code'; if (isset($GLOBALS['log'])) { $GLOBALS['log']->deprecated($deprecatedMessage); } else { trigger_error($deprecatedMessage, E_USER_DEPRECATED); } self::__construct(); } public function process_page() { global $focus; global $mod_strings; global $app_strings; global $app_list_strings; global $odd_bg; global $even_bg; global $timedate; $history_list = array(); if (!empty($_REQUEST['record'])) { $result = $focus->retrieve($_REQUEST['record']); if ($result == null) { sugar_die($app_strings['ERROR_NO_RECORD']); } } $activitiesRels = array( 'tasks' => 'Task', 'meetings' => 'Meeting', 'calls' => 'Call', 'emails' => 'Email', 'notes' => 'Note' ); //Setup the arrays to store the linked records. foreach ($activitiesRels as $relMod => $beanName) { $varname = 'focus_' . $relMod . '_list'; $$varname = array(); } foreach ($focus->get_linked_fields() as $field => $def) { if ($focus->load_relationship($field)) { $relTable = BeanFactory::getBean($focus->$field->getRelatedModuleName())->table_name; if (array_key_exists($relTable, $activitiesRels)) { $varname = 'focus_' . $relTable . '_list'; $$varname = sugarArrayMerge($$varname, $focus->get_linked_beans($field, $activitiesRels[$relTable])); } } } foreach ($focus_tasks_list as $task) { if (empty($task->date_due) || $task->date_due == '0000-00-00') { $date_due = ''; } else { $date_due = $task->date_due; } if ($task->status !== 'Not Started' && $task->status !== 'In Progress' && $task->status !== 'Pending Input' ) { $ts = ''; if (!empty($task->fetched_row['date_due'])) { //tasks can have an empty date due field $ts = $timedate->fromDb($task->fetched_row['date_due'])->ts; } $history_list[] = array( 'name' => $task->name, 'id' => $task->id, 'type' => 'Task', 'direction' => '', 'module' => 'Tasks', 'status' => $task->status, 'parent_id' => $task->parent_id, 'parent_type' => $task->parent_type, 'parent_name' => $task->parent_name, 'contact_id' => $task->contact_id, 'contact_name' => $task->contact_name, 'date_modified' => $date_due, 'description' => $this->getTaskDetails($task), 'date_type' => $app_strings['DATA_TYPE_DUE'], 'sort_value' => $ts, ); } else { $open_activity_list[] = array( 'name' => $task->name, 'id' => $task->id, 'type' => 'Task', 'direction' => '', 'module' => 'Tasks', 'status' => $task->status, 'parent_id' => $task->parent_id, 'parent_type' => $task->parent_type, 'parent_name' => $task->parent_name, 'contact_id' => $task->contact_id, 'contact_name' => $task->contact_name, 'date_due' => $date_due, 'description' => $this->getTaskDetails($task), 'date_type' => $app_strings['DATA_TYPE_DUE'] ); } } // end Tasks foreach ($focus_meetings_list as $meeting) { if (empty($meeting->contact_id) && empty($meeting->contact_name)) { $meeting_contacts = $meeting->get_linked_beans('contacts', 'Contact'); if (!empty($meeting_contacts[0]->id) && !empty($meeting_contacts[0]->name)) { $meeting->contact_id = $meeting_contacts[0]->id; $meeting->contact_name = $meeting_contacts[0]->name; } } if ($meeting->status !== 'Planned') { $history_list[] = array( 'name' => $meeting->name, 'id' => $meeting->id, 'type' => 'Meeting', 'direction' => '', 'module' => 'Meetings', 'status' => $meeting->status, 'parent_id' => $meeting->parent_id, 'parent_type' => $meeting->parent_type, 'parent_name' => $meeting->parent_name, 'contact_id' => $meeting->contact_id, 'contact_name' => $meeting->contact_name, 'date_modified' => $meeting->date_start, 'description' => $this->formatDescription($meeting->description), 'date_type' => $app_strings['DATA_TYPE_START'], 'sort_value' => $timedate->fromDb($meeting->fetched_row['date_start'])->ts, ); } else { $open_activity_list[] = array( 'name' => $meeting->name, 'id' => $meeting->id, 'type' => 'Meeting', 'direction' => '', 'module' => 'Meetings', 'status' => $meeting->status, 'parent_id' => $meeting->parent_id, 'parent_type' => $meeting->parent_type, 'parent_name' => $meeting->parent_name, 'contact_id' => $meeting->contact_id, 'contact_name' => $meeting->contact_name, 'date_due' => $meeting->date_start, 'description' => $this->formatDescription($meeting->description), 'date_type' => $app_strings['DATA_TYPE_START'] ); } } // end Meetings foreach ($focus_calls_list as $call) { if (empty($call->contact_id) && empty($call->contact_name)) { $call_contacts = $call->get_linked_beans('contacts', 'Contact'); if (!empty($call_contacts[0]->id) && !empty($call_contacts[0]->name)) { $call->contact_id = $call_contacts[0]->id; $call->contact_name = $call_contacts[0]->name; } } if ($call->status !== 'Planned') { $history_list[] = array( 'name' => $call->name, 'id' => $call->id, 'type' => 'Call', 'direction' => $call->direction, 'module' => 'Calls', 'status' => $call->status, 'parent_id' => $call->parent_id, 'parent_type' => $call->parent_type, 'parent_name' => $call->parent_name, 'contact_id' => $call->contact_id, 'contact_name' => $call->contact_name, 'date_modified' => $call->date_start, 'description' => $this->formatDescription($call->description), 'date_type' => $app_strings['DATA_TYPE_START'], 'sort_value' => $timedate->fromDb($call->fetched_row['date_start'])->ts, ); } else { $open_activity_list[] = array( 'name' => $call->name, 'id' => $call->id, 'direction' => $call->direction, 'type' => 'Call', 'module' => 'Calls', 'status' => $call->status, 'parent_id' => $call->parent_id, 'parent_type' => $call->parent_type, 'parent_name' => $call->parent_name, 'contact_id' => $call->contact_id, 'contact_name' => $call->contact_name, 'date_due' => $call->date_start, 'description' => $this->formatDescription($call->description), 'date_type' => $app_strings['DATA_TYPE_START'] ); } } // end Calls foreach ($focus_emails_list as $email) { if (empty($email->contact_id) && empty($email->contact_name)) { $email_contacts = $email->get_linked_beans('contacts', 'Contact'); if (!empty($email_contacts[0]->id) && !empty($email_contacts[0]->name)) { $email->contact_id = $email_contacts[0]->id; $email->contact_name = $email_contacts[0]->name; } } $ts = ''; if (!empty($email->fetched_row['date_sent'])) { //emails can have an empty date sent field $ts = $timedate->fromDb($email->fetched_row['date_sent'])->ts; } $history_list[] = array( 'name' => $email->name, 'id' => $email->id, 'type' => 'Email', 'direction' => '', 'module' => 'Emails', 'status' => '', 'parent_id' => $email->parent_id, 'parent_type' => $email->parent_type, 'parent_name' => $email->parent_name, 'contact_id' => $email->contact_id, 'contact_name' => $email->contact_name, 'date_modified' => $email->date_start . ' ' . $email->time_start, 'description' => $this->getEmailDetails($email), 'date_type' => $app_strings['DATA_TYPE_SENT'], 'sort_value' => $ts, ); } //end Emails // Bug 46439 'No email archived when clicking on View Summary' (All condition) if (method_exists($focus, 'get_unlinked_email_query')) { $queryArray = $focus->get_unlinked_email_query(array('return_as_array' => 'true')); $query = $queryArray['select']; $query .= $queryArray['from']; if (!empty($queryArray['join_tables'])) { foreach ($queryArray['join_tables'] as $join_table) { if ($join_table != '') { $query .= ', ' . $join_table . ' '; } } } $query .= $queryArray['join']; $query .= $queryArray['where']; $emails = new Email(); $focus_unlinked_emails_list = $emails->process_list_query($query, 0); $focus_unlinked_emails_list = $focus_unlinked_emails_list['list']; foreach ($focus_unlinked_emails_list as $email) { $email->retrieve($email->id); $history_list[] = array( 'name' => $email->name, 'id' => $email->id, 'type' => 'Email', 'direction' => '', 'module' => 'Emails', 'status' => '', 'parent_id' => $email->parent_id, 'parent_type' => $email->parent_type, 'parent_name' => $email->parent_name, 'contact_id' => $email->contact_id, 'contact_name' => $email->contact_name, 'date_modified' => $email->date_start . ' ' . $email->time_start, 'description' => $this->getEmailDetails($email), 'date_type' => $app_strings['DATA_TYPE_SENT'], 'sort_value' => strtotime($email->fetched_row['date_sent'] . ' GMT'), ); } } //end Unlinked Emails foreach ($focus_notes_list as $note) { if ($note->ACLAccess('view')) { $history_list[] = array( 'name' => $note->name, 'id' => $note->id, 'type' => 'Note', 'direction' => '', 'module' => 'Notes', 'status' => '', 'parent_id' => $note->parent_id, 'parent_type' => $note->parent_type, 'parent_name' => $note->parent_name, 'contact_id' => $note->contact_id, 'contact_name' => $note->contact_name, 'date_modified' => $note->date_modified, 'description' => $this->formatDescription($note->description), 'date_type' => $app_strings['DATA_TYPE_MODIFIED'], 'sort_value' => strtotime($note->fetched_row['date_modified'] . ' GMT'), ); if (!empty($note->filename)) { $count = count($history_list); $count--; $history_list[$count]['filename'] = $note->filename; $history_list[$count]['fileurl'] = UploadFile::get_url($note->filename, $note->id); } } } // end Notes $xtpl = new XTemplate('modules/Activities/Popup_picker.html'); $xtpl->assign('MOD', $mod_strings); $xtpl->assign('APP', $app_strings); insert_popup_header(); //output header echo "<table width='100%' cellpadding='0' cellspacing='0'><tr><td>"; echo getClassicModuleTitle( $focus->module_dir, array(translate('LBL_MODULE_NAME', $focus->module_dir), $focus->name), false ); echo "</td><td align='right' class='moduleTitle'>"; echo "<A href='javascript:print();' class='utilsLink'>" . SugarThemeRegistry::current()->getImage( 'print', "border='0' align='absmiddle'", 13, 13, '.gif', $app_strings['LNK_PRINT'] ) . "</a> <A href='javascript:print();' class='utilsLink'>" . $app_strings['LNK_PRINT'] . "</A>\n"; echo '</td></tr></table>'; $oddRow = true; if (count($history_list) > 0) { $history_list = array_csort($history_list, 'sort_value', SORT_DESC); } foreach ($history_list as $activity) { $activity_fields = array( 'ID' => $activity['id'], 'NAME' => $activity['name'], 'MODULE' => $activity['module'], 'CONTACT_NAME' => $activity['contact_name'], 'CONTACT_ID' => $activity['contact_id'], 'PARENT_TYPE' => $activity['parent_type'], 'PARENT_NAME' => $activity['parent_name'], 'PARENT_ID' => $activity['parent_id'], 'DATE' => $activity['date_modified'], 'DESCRIPTION' => $activity['description'], 'DATE_TYPE' => $activity['date_type'] ); if (empty($activity['direction'])) { $activity_fields['TYPE'] = $app_list_strings['activity_dom'][$activity['type']]; } else { $activity_fields['TYPE'] = $app_list_strings['call_direction_dom'][$activity['direction']] . ' ' . $app_list_strings['activity_dom'][$activity['type']]; } switch ($activity['type']) { case 'Call': $activity_fields['STATUS'] = $app_list_strings['call_status_dom'][$activity['status']]; break; case 'Meeting': $activity_fields['STATUS'] = $app_list_strings['meeting_status_dom'][$activity['status']]; break; case 'Task': $activity_fields['STATUS'] = $app_list_strings['task_status_dom'][$activity['status']]; break; } if (isset($activity['location'])) { $activity_fields['LOCATION'] = $activity['location']; } if (isset($activity['filename'])) { $activity_fields['ATTACHMENT'] = "<a href='index.php?entryPoint=download&id=" . $activity['id'] . "&type=Notes' target='_blank'>" . SugarThemeRegistry::current()->getImage( 'attachment', "border='0' align='absmiddle'", null, null, '.gif', $activity['filename'] ) . '</a>'; } if (isset($activity['parent_type'])) { $activity_fields['PARENT_MODULE'] = $activity['parent_type']; } $xtpl->assign('ACTIVITY', $activity_fields); $xtpl->assign( 'ACTIVITY_MODULE_PNG', SugarThemeRegistry::current()->getImage( $activity_fields['MODULE'] . '', 'border="0"', null, null, '.gif', $activity_fields['NAME'] ) ); if ($oddRow) { //todo move to themes $xtpl->assign('ROW_COLOR', 'oddListRow'); $xtpl->assign('BG_COLOR', $odd_bg); } else { //todo move to themes $xtpl->assign('ROW_COLOR', 'evenListRow'); $xtpl->assign('BG_COLOR', $even_bg); } $oddRow = !$oddRow; if (!empty($activity_fields['DESCRIPTION'])) { $xtpl->parse('history.row.description'); } $xtpl->parse('history.row'); // Put the rows in. } $xtpl->parse('history'); $xtpl->out('history'); insert_popup_footer(); } /** * @param $email * * @return string */ public function getEmailDetails($email) { $details = ""; if (!empty($email->to_addrs)) { $details .= 'To: ' . $email->to_addrs . '<br>'; } if (!empty($email->from_addr)) { $details .= 'From: ' . $email->from_addr . '<br>'; } if (!empty($email->cc_addrs)) { $details .= 'CC: ' . $email->cc_addrs . '<br>'; } if (!empty($email->from_addr) || !empty($email->cc_addrs) || !empty($email->to_addrs)) { $details .= '<br>'; } // cn: bug 8433 - history does not distinguish b/t text/html emails $details .= empty($email->description_html) ? $this->formatDescription($email->description) : $this->formatDescription(strip_tags(br2nl(from_html($email->description_html)))); return $details; } /** * @param $task * * @return string */ public function getTaskDetails($task) { global $app_strings; $details = ""; if (!empty($task->date_start) && $task->date_start != '0000-00-00') { $details .= $app_strings['DATA_TYPE_START'] . $task->date_start . '<br>'; $details .= '<br>'; } $details .= $this->formatDescription($task->description); return $details; } /** * @param $description * * @return string */ public function formatDescription($description) { return nl2br($description); } } // end of class Popup_Picker Save