display();
}
function display(){
require_once("modules/Calendar/CalendarUtils.php");
$field_list = CalendarUtils::get_fields();
global $beanFiles,$beanList;
$module = $_REQUEST['current_module'];
require_once($beanFiles[$beanList[$module]]);
$bean = new $beanList[$module]();
$type = strtolower($beanList[$module]);
$table_name = $bean->table_name;
if(!empty($_REQUEST['record']))
$bean->retrieve($_REQUEST['record']);
if(!$bean->ACLAccess('Save')) {
$json_arr = array(
'success' => 'no',
);
echo json_encode($json_arr);
die;
}
require_once('include/formbase.php');
$bean = populateFromPost("",$bean);
if(!$_REQUEST['reminder_checked'])
$bean->reminder_time = -1;
if(empty($_REQUEST['record']) && strpos($_POST['user_invitees'],$bean->assigned_user_id) === false)
$_POST['user_invitees'] .= ",".$bean->assigned_user_id;
// fill invites and save the entry
$this->save_activity($bean);
if($r_id = $bean->id){
$u = new User();
$u->retrieve($bean->assigned_user_id);
$arr_rec = array();
$bean->retrieve($r_id);
if(isset($bean->parent_name))
$bean->parent_name = $_REQUEST['parent_name'];
$bean->fill_in_additional_parent_fields();
global $timedate;
$date_field = "date_start";
if($_REQUEST['current_module'] == "Tasks")
$date_field = "date_due";
$timestamp = SugarDateTime::createFromFormat($GLOBALS['timedate']->get_date_time_format(),$bean->$date_field,new DateTimeZone('UTC'))->format('U');
if($_REQUEST['current_module'] == 'Calls')
$users = $bean->get_call_users();
if($_REQUEST['current_module'] == 'Meetings')
$users = $bean->get_meeting_users();
$user_ids = array();
foreach($users as $u)
$user_ids[] = $u->id;
$field_arr = array();
foreach($field_list[$_REQUEST['current_module']] as $field){
$field_arr[$field] = $bean->$field;
if($bean->field_defs[$field]['type'] == 'text'){
$t = $field_arr[$field];
if(strlen($t) > 300){
$t = substr($t, 0, 300);
$t .= "...";
}
$t = str_replace("\r\n","
",$t);
$t = str_replace("\r","
",$t);
$t = str_replace("\n","
",$t);
$t = html_entity_decode($t,ENT_QUOTES);
$field_arr[$field] = $t;
}
}
$json_arr = array(
'success' => 'yes',
'type' => $type,
'module_name' => $bean->module_dir,
'user_id' => $GLOBALS['current_user']->id,
'detail' => 1,
'edit' => 1,
'record_name' => html_entity_decode($bean->name,ENT_QUOTES),
'record' => $bean->id,
'users' => $user_ids,
);
$json_arr = array_merge($json_arr,$field_arr);
$json_arr = array_merge($json_arr,CalendarUtils::get_time_data($bean));
}else{
$json_arr = array(
'success' => 'no',
);
}
ob_clean();
echo json_encode($json_arr);
}
private function save_activity(&$bean,$notify = true){
if($_REQUEST['current_module'] == 'Meetings'){
if(!empty($_POST['user_invitees'])) {
$userInvitees = explode(',', trim($_POST['user_invitees'], ','));
} else {
$userInvitees = array();
}
// Calculate which users to flag as deleted and which to add
$deleteUsers = array();
$bean->load_relationship('users');
// Get all users for the meeting
$q = 'SELECT mu.user_id, mu.accept_status FROM meetings_users mu WHERE mu.meeting_id = \''.$bean->id.'\'';
$r = $bean->db->query($q);
$acceptStatusUsers = array();
while($a = $bean->db->fetchByAssoc($r)) {
if(!in_array($a['user_id'], $userInvitees)) {
$deleteUsers[$a['user_id']] = $a['user_id'];
} else {
$acceptStatusUsers[$a['user_id']] = $a['accept_status'];
}
}
if(count($deleteUsers) > 0) {
$sql = '';
foreach($deleteUsers as $u) {
$sql .= ",'" . $u . "'";
}
$sql = substr($sql, 1);
// We could run a delete SQL statement here, but will just mark as deleted instead
$sql = "UPDATE meetings_users set deleted = 1 where user_id in ($sql) AND meeting_id = '". $bean->id . "'";
$bean->db->query($sql);
}
// Get all contacts for the meeting
if(!empty($_POST['contact_invitees'])) {
$contactInvitees = explode(',', trim($_POST['contact_invitees'], ','));
} else {
$contactInvitees = array();
}
$deleteContacts = array();
$bean->load_relationship('contacts');
$q = 'SELECT mu.contact_id, mu.accept_status FROM meetings_contacts mu WHERE mu.meeting_id = \''.$bean->id.'\'';
$r = $bean->db->query($q);
$acceptStatusContacts = array();
while($a = $bean->db->fetchByAssoc($r)) {
if(!in_array($a['contact_id'], $contactInvitees)) {
$deleteContacts[$a['contact_id']] = $a['contact_id'];
} else {
$acceptStatusContacts[$a['contact_id']] = $a['accept_status'];
}
}
if(count($deleteContacts) > 0) {
$sql = '';
foreach($deleteContacts as $u) {
$sql .= ",'" . $u . "'";
}
$sql = substr($sql, 1);
// We could run a delete SQL statement here, but will just mark as deleted instead
$sql = "UPDATE meetings_contacts set deleted = 1 where contact_id in ($sql) AND meeting_id = '". $bean->id . "'";
$bean->db->query($sql);
}
if(!empty($_POST['lead_invitees'])) {
$leadInvitees = explode(',', trim($_POST['lead_invitees'], ','));
} else {
$leadInvitees = array();
}
$deleteLeads = array();
$bean->load_relationship('leads');
$q = 'SELECT mu.lead_id, mu.accept_status FROM meetings_leads mu WHERE mu.meeting_id = \''.$bean->id.'\'';
$r = $bean->db->query($q);
$acceptStatusLeads = array();
while($a = $bean->db->fetchByAssoc($r)) {
if(!in_array($a['lead_id'], $leadInvitees)) {
$deleteLeads[$a['lead_id']] = $a['lead_id'];
} else {
$acceptStatusLeads[$a['lead_id']] = $a['accept_status'];
}
}
if(count($deleteLeads) > 0) {
$sql = '';
foreach($deleteLeads as $u) {
$sql .= ",'" . $u . "'";
}
$sql = substr($sql, 1);
// We could run a delete SQL statement here, but will just mark as deleted instead
$sql = "UPDATE meetings_leads set deleted = 1 where lead_id in ($sql) AND meeting_id = '". $bean->id . "'";
$bean->db->query($sql);
}
//// END REMOVE
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
//// REBUILD INVITEE RELATIONSHIPS
$bean->users_arr = array();
$bean->users_arr = $userInvitees;
$bean->contacts_arr = array();
$bean->contacts_arr = $contactInvitees;
$bean->leads_arr = array();
$bean->leads_arr = $leadInvitees;
if(!empty($_POST['parent_id']) && $_POST['parent_type'] == 'Contacts') {
$bean->contacts_arr[] = $_POST['parent_id'];
}
if(!empty($_POST['parent_id']) && $_POST['parent_type'] == 'Leads') {
$bean->leads_arr[] = $_POST['parent_id'];
}
$bean->save($notify);
// Process users
$existing_users = array();
if(!empty($_POST['existing_invitees'])) {
$existing_users = explode(",", trim($_POST['existing_invitees'], ','));
}
foreach($bean->users_arr as $user_id) {
if(empty($user_id) || isset($existing_users[$user_id]) || isset($deleteUsers[$user_id])) {
continue;
}
if(!isset($acceptStatusUsers[$user_id])) {
$bean->users->add($user_id);
} else {
// update query to preserve accept_status
$qU = 'UPDATE meetings_users SET deleted = 0, accept_status = \''.$acceptStatusUsers[$user_id].'\' ';
$qU .= 'WHERE meeting_id = \''.$bean->id.'\' ';
$qU .= 'AND user_id = \''.$user_id.'\'';
$bean->db->query($qU);
}
}
// Process contacts
$existing_contacts = array();
if(!empty($_POST['existing_contact_invitees'])) {
$existing_contacts = explode(",", trim($_POST['existing_contact_invitees'], ','));
}
foreach($bean->contacts_arr as $contact_id) {
if(empty($contact_id) || isset($exiting_contacts[$contact_id]) || isset($deleteContacts[$contact_id])) {
continue;
}
if(!isset($acceptStatusContacts[$contact_id])) {
$bean->contacts->add($contact_id);
} else {
// update query to preserve accept_status
$qU = 'UPDATE meetings_contacts SET deleted = 0, accept_status = \''.$acceptStatusContacts[$contact_id].'\' ';
$qU .= 'WHERE meeting_id = \''.$bean->id.'\' ';
$qU .= 'AND contact_id = \''.$contact_id.'\'';
$bean->db->query($qU);
}
}
// Process leads
$existing_leads = array();
if(!empty($_POST['existing_lead_invitees'])) {
$existing_leads = explode(",", trim($_POST['existing_lead_invitees'], ','));
}
foreach($bean->leads_arr as $lead_id) {
if(empty($lead_id) || isset($exiting_leads[$lead_id]) || isset($deleteLeads[$lead_id])) {
continue;
}
if(!isset($acceptStatusLeads[$lead_id])) {
$bean->leads->add($lead_id);
} else {
// update query to preserve accept_status
$qU = 'UPDATE meetings_leads SET deleted = 0, accept_status = \''.$acceptStatusLeads[$lead_id].'\' ';
$qU .= 'WHERE meeting_id = \''.$bean->id.'\' ';
$qU .= 'AND lead_id = \''.$lead_id.'\'';
$bean->db->query($qU);
}
}
}else if($_REQUEST['current_module'] == 'Calls'){
if(!empty($_POST['user_invitees'])) {
$userInvitees = explode(',', trim($_POST['user_invitees'], ','));
}else {
$userInvitees = array();
}
// Calculate which users to flag as deleted and which to add
$deleteUsers = array();
$bean->load_relationship('users');
// Get all users for the call
$q = 'SELECT mu.user_id, mu.accept_status FROM calls_users mu WHERE mu.call_id = \''.$bean->id.'\'';
$r = $bean->db->query($q);
$acceptStatusUsers = array();
while($a = $bean->db->fetchByAssoc($r)) {
if(!in_array($a['user_id'], $userInvitees)) {
$deleteUsers[$a['user_id']] = $a['user_id'];
} else {
$acceptStatusUsers[$a['user_id']] = $a['accept_status'];
}
}
if(count($deleteUsers) > 0) {
$sql = '';
foreach($deleteUsers as $u) {
// make sure we don't delete the assigned user
if ( $u != $bean->assigned_user_id )
$sql .= ",'" . $u . "'";
}
$sql = substr($sql, 1);
// We could run a delete SQL statement here, but will just mark as deleted instead
$sql = "UPDATE calls_users set deleted = 1 where user_id in ($sql) AND call_id = '". $bean->id . "'";
$bean->db->query($sql);
}
// Get all contacts for the call
if(!empty($_POST['contact_invitees'])) {
$contactInvitees = explode(',', trim($_POST['contact_invitees'], ','));
} else {
$contactInvitees = array();
}
$deleteContacts = array();
$bean->load_relationship('contacts');
$q = 'SELECT mu.contact_id, mu.accept_status FROM calls_contacts mu WHERE mu.call_id = \''.$bean->id.'\'';
$r = $bean->db->query($q);
$acceptStatusContacts = array();
while($a = $bean->db->fetchByAssoc($r)) {
if(!in_array($a['contact_id'], $contactInvitees)) {
$deleteContacts[$a['contact_id']] = $a['contact_id'];
}else{
$acceptStatusContacts[$a['contact_id']] = $a['accept_status'];
}
}
if(count($deleteContacts) > 0) {
$sql = '';
foreach($deleteContacts as $u) {
$sql .= ",'" . $u . "'";
}
$sql = substr($sql, 1);
// We could run a delete SQL statement here, but will just mark as deleted instead
$sql = "UPDATE calls_contacts set deleted = 1 where contact_id in ($sql) AND call_id = '". $bean->id . "'";
$bean->db->query($sql);
}
if(!empty($_POST['lead_invitees'])) {
$leadInvitees = explode(',', trim($_POST['lead_invitees'], ','));
} else {
$leadInvitees = array();
}
// Calculate which leads to flag as deleted and which to add
$deleteLeads = array();
$bean->load_relationship('leads');
// Get all leads for the call
$q = 'SELECT mu.lead_id, mu.accept_status FROM calls_leads mu WHERE mu.call_id = \''.$bean->id.'\'';
$r = $bean->db->query($q);
$acceptStatusLeads = array();
while($a = $bean->db->fetchByAssoc($r)) {
if(!in_array($a['lead_id'], $leadInvitees)) {
$deleteLeads[$a['lead_id']] = $a['lead_id'];
} else {
$acceptStatusLeads[$a['user_id']] = $a['accept_status'];
}
}
if(count($deleteLeads) > 0) {
$sql = '';
foreach($deleteLeads as $u) {
// make sure we don't delete the assigned user
if ( $u != $bean->assigned_user_id )
$sql .= ",'" . $u . "'";
}
$sql = substr($sql, 1);
// We could run a delete SQL statement here, but will just mark as deleted instead
$sql = "UPDATE calls_leads set deleted = 1 where lead_id in ($sql) AND call_id = '". $bean->id . "'";
$bean->db->query($sql);
}
//// END REMOVE
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
//// REBUILD INVITEE RELATIONSHIPS
$bean->users_arr = array();
$bean->users_arr = $userInvitees;
$bean->contacts_arr = array();
$bean->contacts_arr = $contactInvitees;
$bean->leads_arr = array();
$bean->leads_arr = $leadInvitees;
if(!empty($_POST['parent_id']) && $_POST['parent_type'] == 'Contacts') {
$bean->contacts_arr[] = $_POST['parent_id'];
}
if(!empty($_POST['parent_id']) && $_POST['parent_type'] == 'Leads') {
$bean->leads_arr[] = $_POST['parent_id'];
}
$bean->save($notify);
// Process users
$existing_users = array();
if(!empty($_POST['existing_invitees'])) {
$existing_users = explode(",", trim($_POST['existing_invitees'], ','));
}
foreach($bean->users_arr as $user_id) {
if(empty($user_id) || isset($existing_users[$user_id]) || isset($deleteUsers[$user_id])) {
continue;
}
if(!isset($acceptStatusUsers[$user_id])) {
$bean->users->add($user_id);
} else {
// update query to preserve accept_status
$qU = 'UPDATE calls_users SET deleted = 0, accept_status = \''.$acceptStatusUsers[$user_id].'\' ';
$qU .= 'WHERE call_id = \''.$bean->id.'\' ';
$qU .= 'AND user_id = \''.$user_id.'\'';
$bean->db->query($qU);
}
}
// Process contacts
$existing_contacts = array();
if(!empty($_POST['existing_contact_invitees'])) {
$existing_contacts = explode(",", trim($_POST['existing_contact_invitees'], ','));
}
foreach($bean->contacts_arr as $contact_id) {
if(empty($contact_id) || isset($exiting_contacts[$contact_id]) || isset($deleteContacts[$contact_id])) {
continue;
}
if(!isset($acceptStatusContacts[$contact_id])) {
$bean->contacts->add($contact_id);
} else {
// update query to preserve accept_status
$qU = 'UPDATE calls_contacts SET deleted = 0, accept_status = \''.$acceptStatusContacts[$contact_id].'\' ';
$qU .= 'WHERE call_id = \''.$bean->id.'\' ';
$qU .= 'AND contact_id = \''.$contact_id.'\'';
$bean->db->query($qU);
}
}
// Process leads
$existing_leads = array();
if(!empty($_POST['existing_lead_invitees'])) {
$existing_contacts = explode(",", trim($_POST['existing_lead_invitees'], ','));
}
foreach($bean->leads_arr as $lead_id) {
if(empty($lead_id) || isset($existing_leads[$lead_id]) || isset($deleteLeads[$lead_id])) {
continue;
}
if(!isset($acceptStatusLeads[$lead_id])) {
$bean->leads->add($lead_id);
} else {
// update query to preserve accept_status
$qU = 'UPDATE calls_leads SET deleted = 0, accept_status = \''.$acceptStatusLeads[$lead_id].'\' ';
$qU .= 'WHERE call_id = \''.$bean->id.'\' ';
$qU .= 'AND lead_id = \''.$lead_id.'\'';
$bean->db->query($qU);
}
}
}else if($_REQUEST['current_module'] == 'Tasks'){
if (!isset($GLOBALS['check_notify'])){
$GLOBALS['check_notify'] = false;
}
$bean->save($GLOBALS['check_notify']);
}
}
}
?>