* SPDX-License-Identifier: AGPL-3.0-only ************************************/ require_once('modules/Calendar/CalendarCommon.php'); require_once('modules/Calendar/iCal/includeAll.php'); // crmv@68357 // Task is used to store customer information. class Activity extends CRMEntity { var $log; var $db; var $table_name; var $table_index= 'activityid'; var $reminder_table ; var $tab_name = Array(); var $tab_name_index = Array(); var $column_fields = Array(); var $sortby_fields = Array('subject','due_date','date_start','smownerid','activitytype','lastname'); //Sorting is added for due date and start date // This is used to retrieve related vte_fields from form posts. var $additional_column_fields = Array('assigned_user_name', 'assigned_user_id', 'contactname', 'contact_phone', 'contact_email', 'parent_name'); /** * Mandatory table for supporting custom fields. */ var $customFieldTable = Array(); // This is the list of vte_fields that are in the lists. var $list_fields = Array( 'Close'=>Array('activity'=>'status'), 'Type'=>Array('activity'=>'activitytype'), 'Subject'=>Array('activity'=>'subject'), 'Related to'=>Array('seactivityrel'=>'crmid'), 'Start Date'=>Array('activity'=>'date_start'), 'Start Time'=>Array('activity'=>'time_start'), 'End Date'=>Array('activity'=>'due_date'), 'End Time'=>Array('activity'=>'time_end'), 'Assigned To'=>Array('crmentity'=>'smownerid'), 'Contact Name'=>Array('contactdetails'=>'lastname') ); var $range_fields = Array( 'name', 'date_modified', 'start_date', 'id', 'status', 'date_due', 'time_start', 'description', 'contact_name', 'priority', 'duehours', 'dueminutes', 'location' ); var $list_fields_name = Array( 'Close'=>'status', 'Type'=>'activitytype', 'Subject'=>'subject', 'Contact Name'=>'lastname', 'Related to'=>'parent_id', 'Start Date & Time'=>'date_start', 'End Date & Time'=>'due_date', 'Recurring Type'=>'recurringtype', 'Assigned To'=>'assigned_user_id'); var $list_link_field= 'subject'; //crmv@10759 var $search_base_field = 'subject'; //crmv@10759 e //Added these variables which are used as default order by and sortorder in ListView var $default_order_by = 'due_date'; var $default_sort_order = 'ASC'; //crmv@40525 // Event states processed by SendReminder.php. If it is empty all the states are processd. var $send_reminder_states = array('Planned'); //crmv@40525e function __construct() { global $table_prefix; // crmv@37004 parent::__construct(); $this->relation_table = $table_prefix.'_seactivityrel'; $this->relation_table_id = 'activityid'; $this->relation_table_otherid = 'crmid'; $this->relation_table_module = ''; $this->relation_table_othermodule = ''; $this->extra_relation_tables = array( 'Contacts' => array( 'relation_table' => "{$table_prefix}_cntactivityrel", 'relation_table_id' => 'activityid', 'relation_table_otherid' => 'contactid', //relation_table_module //relation_table_othermodule ), ); // crmv@37004e $this->reminder_table = $table_prefix.'_activity_reminder'; $this->table_name = $table_prefix."_activity"; // crmv@187823 $this->tab_name = Array($table_prefix.'_crmentity',$table_prefix.'_activity',$table_prefix.'_activitycf', $table_prefix.'_activity_organizer'); $this->tab_name_index = Array( $table_prefix.'_crmentity'=>'crmid', $table_prefix.'_activity'=>'activityid', $table_prefix.'_seactivityrel'=>'activityid', $table_prefix.'_cntactivityrel'=>'activityid', $table_prefix.'_salesmanactivityrel'=>'activityid', $table_prefix.'_activity_reminder'=>'activity_id', $table_prefix.'_recurringevents'=>'activityid', $table_prefix.'_activitycf'=>'activityid', $table_prefix.'_activity_organizer' => 'activityid' ); // crmv@187823e $this->customFieldTable = Array($table_prefix.'_activitycf', 'activityid'); $this->log = LoggerManager::getLogger('Calendar'); $this->db = PearDatabase::getInstance(); $this->column_fields = getColumnFields('Calendar'); } // crmv@187823 function retrieve_entity_info($record, $module, $dieOnError=true, $onlyFields = array()) { global $table_prefix; $r = parent::retrieve_entity_info($record, $module, $dieOnError, $onlyFields); // add organizer, since it's missing because this is the damned calendar and nothing works!! $this->column_fields['organizer'] = getSingleFieldValue($table_prefix.'_activity_organizer', 'email', $this->table_index, $this->id); return $r; } function retrieve_entity_info_no_html($record, $module, $dieOnError=true, $onlyFields = array()) { global $table_prefix; $r = parent::retrieve_entity_info_no_html($record, $module, $dieOnError, $onlyFields); // add organizer, since it's missing because this is the damned calendar and nothing works!! $this->column_fields['organizer'] = getSingleFieldValue($table_prefix.'_activity_organizer', 'email', $this->table_index, $this->id, false); return $r; } // crmv@187823e function save_module($module) { global $adb,$table_prefix, $current_user; // crmv@149399 if ($module == 'Events') $module = 'Calendar'; // crmv@74608 // crmv@149399 // fill the full datetime columns if (!empty($this->column_fields['date_start']) && !empty($this->column_fields['due_date'])) { if ($adb->isMysql()) { $adb->pquery( "UPDATE {$this->table_name} SET activity_start = CAST(".$adb->sql_concat(array('date_start', "' '", 'time_start'))." AS DATETIME), activity_end = CAST(".$adb->sql_concat(array('due_date', "' '", 'time_end'))." AS DATETIME) WHERE {$this->table_index} = ?", array($this->id) ); } elseif ($adb->isOracle()) { // crmv@165801 $adb->pquery( "UPDATE {$this->table_name} SET activity_start = TO_TIMESTAMP(".$adb->sql_concat(array('SUBSTR(date_start, 1, 10)', "' '", 'time_start')).", 'RRRR-MM-DD HH24:MI'), activity_end = TO_TIMESTAMP(".$adb->sql_concat(array('SUBSTR(due_date, 1, 10)', "' '", 'time_end')).", 'RRRR-MM-DD HH24:MI') WHERE {$this->table_index} = ?", array($this->id) ); // crmv@165801e } } // crmv@149399e //Handling module specific save //Insert into seactivity rel if(isset($this->column_fields['parent_id']) && $this->column_fields['parent_id'] != '') { $this->insertIntoEntityTable($table_prefix."_seactivityrel", $module); } elseif($this->column_fields['parent_id']=='' && $this->mode=="edit") { $this->deleteRelation($table_prefix."_seactivityrel"); } //Insert into cntactivity rel if(isset($this->column_fields['contact_id']) && $this->column_fields['contact_id'] != '') { $this->insertIntoEntityTable($table_prefix.'_cntactivityrel', $module); } elseif($this->column_fields['contact_id'] =='' && $this->mode=="edit") { $this->deleteRelation($table_prefix.'_cntactivityrel'); } $recur_type=''; if(($recur_type == "--None--" || $recur_type == '') && $this->mode == "edit") { $sql = 'delete from '.$table_prefix.'_recurringevents where activityid=?'; $adb->pquery($sql, array($this->id)); } //Handling for recurring type //Insert into vte_recurring event table if(isset($this->column_fields['recurringtype']) && $this->column_fields['recurringtype']!='' && $this->column_fields['recurringtype']!='--None--') { $recur_type = trim($this->column_fields['recurringtype']); $recur_data = $this->recurringObject ?: getrecurringObjValue(); // crmv@185576 if(is_object($recur_data)) $this->insertIntoRecurringTable($recur_data); } //Insert into vte_activity_remainder table if($_REQUEST['set_reminder'] == 'Yes') // crmv@150601 { $this->insertIntoReminderTable($table_prefix.'_activity_reminder',$module,""); } //crmv@32334 if (isZMergeAgent()) { //do nothing } else { //crmv@32334e //crmv@19555 //crmv@26807 //crmv@26961 if((isset($_REQUEST['inviteesid']) && $_REQUEST['inviteesid'] == '--none--')) { if($this->mode == 'edit'){ $sql = "delete from ".$table_prefix."_invitees where activityid=?"; $adb->pquery($sql, array($this->id)); } } if ((isset($_REQUEST['inviteesid_con']) && $_REQUEST['inviteesid_con'] == '--none--')) { if($this->mode == 'edit'){ $sql = "delete from ".$table_prefix."_invitees_con where activityid=?"; $adb->pquery($sql, array($this->id)); } } if(isset($_REQUEST['inviteesid']) || isset($_REQUEST['inviteesid_con'])) //crmv@26961e { $selected_users_string = $_REQUEST['inviteesid']; if($selected_users_string != '--none--' && $selected_users_string !='') { $invitees_array = explode(';',$selected_users_string); } else { $_REQUEST['inviteesid'] = ''; $invitees_array = array(); } if($_REQUEST['inviteesid_con'] != '--none--' && $_REQUEST['inviteesid_con'] != '') { $invitees_con_array = explode(';',$_REQUEST['inviteesid_con']); } else { $_REQUEST['inviteesid_con'] = ''; $invitees_con_array = array(); } $previousInvitees = $this->getInvitees($this->id); // crmv@110994 $this->insertIntoInviteeTable($module,$invitees_array,array(),$invitees_con_array); if($this->mode != 'edit') { //code added to send mail to the vte_invitees if (isset($_REQUEST['subject'])) { $mail_contents = $this->getRequestData($this->id); //crmv@32334 } else { $mail_contents = $this->getRequestData($this->id,$this); //crmv@32334 } $this->sendInvitation($_REQUEST['inviteesid'],$this->mode,$this->column_fields['subject'],$mail_contents,$this->id,$_REQUEST['inviteesid_con']); //crmv@32334 } else { // crmv@110994 // edit mode, I might have added users $invitees = array('Users' => array(), 'Contacts' => array()); foreach ($previousInvitees as $invitee) { $invitees[$invitee['type']][] = $invitee['id']; } $newUsers = array_diff($invitees_array, $invitees['Users']); $newContacts = array_diff($invitees_con_array, $invitees['Contacts']); if (count($newUsers) > 0 || count($newContacts) > 0) { //crmv@174732 if (isset($_REQUEST['subject'])) { $mail_contents = $this->getRequestData($this->id); //crmv@32334 } else { $mail_contents = $this->getRequestData($this->id,$this); //crmv@32334 } //crmv@174732e $this->sendInvitation(implode(';', $newUsers),$this->mode,$this->column_fields['subject'],$mail_contents,$this->id,implode(';',$newContacts)); } // crmv@110994e } } elseif($this->mode != 'edit') { //mando la mail anche se modifico l'attivita' dal wdCalendar (es. spostando l'orario) $tab_array = array($table_prefix.'_invitees',$table_prefix.'_invitees_con'); foreach ($tab_array as $k => $tab_name) { $partecipations = array(); $res = $adb->pquery("select inviteeid, partecipation from ".$tab_name." where activityid=?", array($this->id)); if ($res && $adb->num_rows($res)>0) { while($row=$adb->fetchByAssoc($res)) { $partecipations[$row['inviteeid']] = $row['partecipation']; } $inviteesid = implode(';',array_keys($partecipations)); $mail_contents = $this->getRequestData($this->id,$this); //crmv@32334 if ($k == 0) { $this->sendInvitation($inviteesid,$this->mode,$this->column_fields['subject'],$mail_contents,$this->id,''); //crmv@32334 } elseif ($k == 1) { $this->sendInvitation('',$this->mode,$this->column_fields['subject'],$mail_contents,$this->id,$inviteesid); //crmv@32334 } } } } //crmv@19555e //crmv@26807e } // crmv@30385 - aggiorno duration hours e minuti if (!empty($this->column_fields['date_start']) && !empty($this->column_fields['due_date'])) { $start_hour = empty($this->column_fields['time_start']) ? '00:00:00' : $this->column_fields['time_start']; $end_hour = empty($this->column_fields['time_end']) ? '00:00:00' : $this->column_fields['time_end']; $ts_start = strtotime($this->column_fields['date_start']." ".$start_hour); $ts_end = strtotime($this->column_fields['due_date']." ".$end_hour); $this->column_fields['duration_hours'] = (int)(abs($ts_end-$ts_start)/(3600)); $this->column_fields['duration_minutes'] = (int)((abs($ts_end-$ts_start)/60)%60); $adb->pquery('update '.$table_prefix.'_activity set duration_hours = ?, duration_minutes = ? where activityid = ?', array($this->column_fields['duration_hours'], $this->column_fields['duration_minutes'], $this->id)); } // crmv@30385e //Inserting into sales man activity rel $this->insertIntoSmActivityRel($module); $this->insertIntoActivityReminderPopup($module); } /** Function to insert values in vte_act_reminder_popup table for the specified module * @param $cbmodule -- module:: Type varchar */ function insertIntoActivityReminderPopup($cbmodule) { global $adb, $table_prefix; $cbrecord = $this->id; if(isset($cbmodule) && isset($cbrecord)) { $cbdate = $this->column_fields['date_start']; //crmv@fix date on massedit if (!isset($_REQUEST['massedit_module']) && !isset($_REQUEST['massedit_recordids']) && $_REQUEST['ajaxCalendar'] != 'quickAdd' && !isset($_REQUEST['change_status'])) { //crmv@21059 //crmv@25040 //crmv@73912 $cbdate = getValidDBInsertDateValue($cbdate); // crmv@103354 } //crmv@fix date end //crmv@65492 if($this->repeating){ $cbdate = getValidDBInsertDateValue($cbdate); // crmv@103354 } //crmv@65492 e $cbtime = $this->column_fields['time_start']; // crmv@103354 $date = $cbdate . ' ' . $cbtime; $adjustedDate = adjustTimezone($date, 0, null, true); $cbdate = substr($adjustedDate, 0, 10); if (strlen($adjustedDate) > 10) { $cbtime = substr($adjustedDate, strpos($adjustedDate, ' ') + 1, 5); } // crmv@103354e $reminder_query = "SELECT reminderid FROM ".$table_prefix."_act_reminder_popup WHERE semodule = ? and recordid = ?"; $reminder_params = array($cbmodule, $cbrecord); $reminderidres = $adb->pquery($reminder_query, $reminder_params); $reminderid = null; if($adb->num_rows($reminderidres) > 0) { $reminderid = $adb->query_result($reminderidres, 0, "reminderid"); } //crmv@25034 $status = 0; if(($this->column_fields['activitytype'] == 'Task' && $this->column_fields['taskstatus'] == 'Completed') || ($this->column_fields['activitytype'] != 'Task' && ($this->column_fields['eventstatus'] == 'Held' || $this->column_fields['eventstatus'] == 'Not Held')) ){ //crmv@78625 $status = 1; } if(isset($reminderid)) { $callback_query = "UPDATE ".$table_prefix."_act_reminder_popup set status = ?, date_start = ?, time_start = ? WHERE reminderid = ?"; $callback_params = array($status, $cbdate, $cbtime, $reminderid); } else { $reminderid = $adb->getUniqueID($table_prefix."_act_reminder_popup"); $callback_params = array($reminderid,$cbrecord, $cbmodule, $cbdate, $cbtime, $status); $callback_query = "INSERT INTO ".$table_prefix."_act_reminder_popup (reminderid,recordid, semodule, date_start, time_start,status) VALUES (".generateQuestionMarks($callback_params).")"; } //crmv@25034e $adb->pquery($callback_query, $callback_params); VteSession::remove('next_reminder_time'); // crmv@103354 } } /** Function to insert values in vte_activity_remainder table for the specified module, * @param $table_name -- table name:: Type varchar * @param $module -- module:: Type varchar */ function insertIntoReminderTable($table_name,$module,$recurid) { global $log; $log->info("in insertIntoReminderTable ".$table_name." module is ".$module); if($_REQUEST['set_reminder'] == 'Yes') { $log->debug("set reminder is set"); $rem_days = $_REQUEST['remdays']; $log->debug("rem_days is ".$rem_days); $rem_hrs = $_REQUEST['remhrs']; $log->debug("rem_hrs is ".$rem_hrs); $rem_min = $_REQUEST['remmin']; $log->debug("rem_minutes is ".$rem_min); $reminder_time = $rem_days * 24 * 60 + $rem_hrs * 60 + $rem_min; $log->debug("reminder_time is ".$reminder_time); if ($recurid == "") { if($_REQUEST['mode'] == 'edit') { $this->activity_reminder($this->id,$reminder_time,0,$recurid,'edit'); } else { $this->activity_reminder($this->id,$reminder_time,0,$recurid,''); } } else { $this->activity_reminder($this->id,$reminder_time,0,$recurid,''); } } elseif($_REQUEST['set_reminder'] == 'No') { $this->activity_reminder($this->id,'0',0,$recurid,'delete'); } } // Code included by Jaguar - starts /** Function to insert values in vte_recurringevents table for the specified tablename,module * @param $recurObj -- Recurring Object:: Type varchar */ function insertIntoRecurringTable(& $recurObj) { global $log,$adb, $table_prefix; $log->info("in insertIntoRecurringTable "); $st_date = $recurObj->startdate->get_formatted_date(); $log->debug("st_date ".$st_date); $end_date = $recurObj->enddate->get_formatted_date(); $log->debug("end_date is set ".$end_date); $type = $recurObj->recur_type; $log->debug("type is ".$type); $flag="true"; if($_REQUEST['mode'] == 'edit') { $activity_id=$this->id; $sql='select min(recurringdate) AS min_date,max(recurringdate) AS max_date, recurringtype, activityid from '.$table_prefix.'_recurringevents where activityid=? group by activityid, recurringtype'; $result = $adb->pquery($sql, array($activity_id)); $noofrows = $adb->num_rows($result); for($i=0; $i<$noofrows; $i++) { $recur_type_b4_edit = $adb->query_result($result,$i,"recurringtype"); $date_start_b4edit = $adb->query_result($result,$i,"min_date"); $end_date_b4edit = $adb->query_result($result,$i,"max_date"); } if(($st_date == $date_start_b4edit) && ($end_date==$end_date_b4edit) && ($type == $recur_type_b4_edit)) { if($_REQUEST['set_reminder'] == 'Yes') { $sql = 'delete from '.$table_prefix.'_activity_reminder where activity_id=?'; $adb->pquery($sql, array($activity_id)); $sql = 'delete from '.$table_prefix.'_recurringevents where activityid=?'; $adb->pquery($sql, array($activity_id)); $flag="true"; } elseif($_REQUEST['set_reminder'] == 'No') { $sql = 'delete from '.$table_prefix.'_activity_reminder where activity_id=?'; $adb->pquery($sql, array($activity_id)); $flag="false"; } else $flag="false"; } else { $sql = 'delete from '.$table_prefix.'_activity_reminder where activity_id=?'; $adb->pquery($sql, array($activity_id)); $sql = 'delete from '.$table_prefix.'_recurringevents where activityid=?'; $adb->pquery($sql, array($activity_id)); } } $date_array = $recurObj->recurringdates; if(isset($recurObj->recur_freq) && $recurObj->recur_freq != null) $recur_freq = $recurObj->recur_freq; else $recur_freq = 1; if($recurObj->recur_type == 'Daily' || $recurObj->recur_type == 'Yearly') $recurringinfo = $recurObj->recur_type; elseif($recurObj->recur_type == 'Weekly') { $recurringinfo = $recurObj->recur_type; if($recurObj->dayofweek_to_rpt != null) $recurringinfo = $recurringinfo.'::'.implode('::',$recurObj->dayofweek_to_rpt); } elseif($recurObj->recur_type == 'Monthly') { $recurringinfo = $recurObj->recur_type.'::'.$recurObj->repeat_monthby; if($recurObj->repeat_monthby == 'date') $recurringinfo = $recurringinfo.'::'.$recurObj->rptmonth_datevalue; else $recurringinfo = $recurringinfo.'::'.$recurObj->rptmonth_daytype.'::'.$recurObj->dayofweek_to_rpt[0]; } else { $recurringinfo = ''; } if($flag=="true") { for($k=0; $k< count($date_array); $k++) { $tdate=$date_array[$k]; if($tdate <= $end_date) { $max_recurid_qry = 'select max(recurringid) AS recurid from '.$table_prefix.'_recurringevents'; $result = $adb->pquery($max_recurid_qry, array()); $noofrows = $adb->num_rows($result); for($i=0; $i<$noofrows; $i++) { $recur_id = $adb->query_result($result,$i,"recurid"); } $current_id =$recur_id+1; $recurring_insert = "insert into ".$table_prefix."_recurringevents values (?,?,?,?,?,?)"; $rec_params = array($current_id, $this->id, $tdate, $type, $recur_freq, $recurringinfo); $adb->pquery($recurring_insert, $rec_params); //crmv@62592 /* if($_REQUEST['set_reminder'] == 'Yes') { $this->insertIntoReminderTable($table_prefix."_activity_reminder",$module,$current_id,''); } */ //crmv@62592e } } } } /** Function to insert values in vte_invitees table for the specified module,tablename ,invitees_array * @param $table_name -- table name:: Type varchar * @param $module -- module:: Type varchar * @param $invitees_array Array */ function insertIntoInviteeTable($module,$invitees_array=array(),$partecipations=array(),$invitees_con_array=array(),$other_partecipations=array()) //crmv@26807 //crmv@zmerge { global $log,$adb,$table_prefix; $log->debug("Entering insertIntoInviteeTable method ..."); //crmv@26807 //--Users--i// //crmv@17001 : Inviti $tmp_partecipations = array(); $res = $adb->pquery("select inviteeid, partecipation from ".$table_prefix."_invitees where activityid=?", array($this->id)); if ($res && $adb->num_rows($res)>0) while($row=$adb->fetchByAssoc($res)) { $tmp_partecipations[$row['inviteeid']] = $row['partecipation']; } //crmv@17001e //crmv@zmerge if ($adb->table_exist('tbl_s_zmerge_events')) { if (!empty($partecipations)) { foreach($partecipations as $inviteeid => $partecipation) { $tmp_partecipations[$inviteeid] = $partecipation; } if (in_array($this->column_fields['assigned_user_id'],array_keys($tmp_partecipations)) && !in_array($this->column_fields['assigned_user_id'],$invitees_array)) { $invitees_array[] = $this->column_fields['assigned_user_id']; } } } //crmv@zmerge e if($this->mode == 'edit'){ $sql = "delete from ".$table_prefix."_invitees where activityid=?"; $adb->pquery($sql, array($this->id)); } foreach($invitees_array as $inviteeid) { if($inviteeid != '') { //crmv@17001 : Inviti $query="insert into ".$table_prefix."_invitees(activityid,inviteeid,partecipation) values(?,?,?)"; if ($tmp_partecipations[$inviteeid] != '') $partecipation = $tmp_partecipations[$inviteeid]; else $partecipation = 0; $adb->pquery($query, array($this->id, $inviteeid, $partecipation)); //crmv@17001e } } //--Users--e// //--Contacts--i// $tmp_partecipations = array(); $res = $adb->pquery("select inviteeid, partecipation from ".$table_prefix."_invitees_con where activityid=?", array($this->id)); if ($res && $adb->num_rows($res)>0) while($row=$adb->fetchByAssoc($res)) { $tmp_partecipations[$row['inviteeid']] = $row['partecipation']; } if($this->mode == 'edit'){ $sql = "delete from ".$table_prefix."_invitees_con where activityid=?"; $adb->pquery($sql, array($this->id)); } //crmv@36511 if (!is_array($invitees_con_array)){ $invitees_con_array = Array(); } //crmv@36511 e foreach($invitees_con_array as $inviteeid) { if($inviteeid != '') { $query="insert into ".$table_prefix."_invitees_con(activityid,inviteeid,partecipation) values(?,?,?)"; if ($tmp_partecipations[$inviteeid] != '') $partecipation = $tmp_partecipations[$inviteeid]; else $partecipation = 0; $adb->pquery($query, array($this->id, $inviteeid, $partecipation)); } } //--Contacts--e// //crmv@26807e //crmv@zmerge if ($adb->table_exist('tbl_s_zmerge_events')) { $tmp_other_partecipations = array(); $res = $adb->pquery("select * from ".$table_prefix."_other_invitees where activityid=?", array($this->id)); if ($res && $adb->num_rows($res)>0) { while($row=$adb->fetchByAssoc($res)) { $tmp_other_partecipations[$row['email']] = array('partecipation'=>$row['partecipation'],'deleted'=>$row['deleted']); } } $adb->pquery('delete from '.$table_prefix.'_other_invitees where activityid=?', array($this->id)); foreach($other_partecipations as $email => $partecipation) { $tmp_other_partecipations[$email] = array('partecipation'=>$partecipation,'deleted'=>0); } foreach($tmp_other_partecipations as $email => $info) { if (is_array($other_partecipations) && !in_array($email,array_keys($other_partecipations))) { $info['deleted'] = 1; } $query="insert into ".$table_prefix."_other_invitees(activityid,email,partecipation,deleted) values(?,?,?,?)"; $adb->pquery($query, array($this->id, $email, $info['partecipation'], $info['deleted'])); } } //crmv@zmerge e $log->debug("Exiting insertIntoInviteeTable method ..."); } /** Function to insert values in vte_salesmanactivityrel table for the specified module * @param $module -- module:: Type varchar */ function insertIntoSmActivityRel($module) { global $adb,$table_prefix; global $current_user; if($this->mode == 'edit'){ $sql = "delete from ".$table_prefix."_salesmanactivityrel where activityid=?"; $adb->pquery($sql, array($this->id)); } $sql_qry = "insert into ".$table_prefix."_salesmanactivityrel (smid,activityid) values(?,?)"; $adb->pquery($sql_qry, array($this->column_fields['assigned_user_id'], $this->id)); if(isset($_REQUEST['inviteesid']) && $_REQUEST['inviteesid']!='') { $selected_users_string = $_REQUEST['inviteesid']; $invitees_array = explode(';',$selected_users_string); foreach($invitees_array as $inviteeid) { if($inviteeid != '') { $resultcheck = $adb->pquery("select * from ".$table_prefix."_salesmanactivityrel where activityid=? and smid=?",array($this->id,$inviteeid)); if($adb->num_rows($resultcheck) != 1){ $query="insert into ".$table_prefix."_salesmanactivityrel values(?,?)"; $adb->pquery($query, array($inviteeid, $this->id)); } } } } } static public function isUserInvited($activityid, $userid = null) { global $adb, $table_prefix, $current_user; if (is_null($userid)) $userid = $current_user->id; $res = $adb->pquery("select partecipation from {$table_prefix}_invitees where activityid = ? and inviteeid = ?", array($activityid, $userid)); return ($res && $adb->num_rows($res) > 0); } static public function getUserInvitationAnswer($activityid, $userid = null) { global $adb, $table_prefix, $current_user; if (is_null($userid)) $userid = $current_user->id; $res = $adb->pquery("select partecipation from {$table_prefix}_invitees where activityid = ? and inviteeid = ?", array($activityid, $userid)); if ($res && $adb->num_rows($res) > 0) { return $adb->query_result_no_html($res, 0, 'partecipation'); } else { return false; } } // crmv@81126 static public function setUserInvitationAnswer($activityid, $userid = null, $answer = 0) { global $adb, $table_prefix, $current_user; if (is_null($userid)) $userid = $current_user->id; $asnwer = intval($answer); $res = $adb->pquery("select partecipation from {$table_prefix}_invitees where activityid = ? and inviteeid = ?", array($activityid, $userid)); if ($res && $adb->num_rows($res) > 0) { // update $part = $adb->query_result_no_html($res, 0, 'partecipation'); if ($part != $answer) { $adb->pquery("UPDATE {$table_prefix}_invitees SET partecipation = ? WHERE activityid = ? AND inviteeid = ?", array($answer, $activityid, $userid)); } } else { // insert $adb->pquery("INSERT INTO {$table_prefix}_invitees (activityid, inviteeid, partecipation) VALUES (?,?,?)", array($activityid, $userid, $answer)); } } // crmv@81126e //crmv@392267 /** * * @param String $tableName * @return String */ public function getJoinClause($tableName) { global $table_prefix; if($tableName == $table_prefix."_activity_reminder") return 'LEFT JOIN'; return parent::getJoinClause($tableName); } //crmv@392267e //Function Call for Related List -- Start /** * Function to get Activity related Contacts * @param integer $id - activityid * returns related Contacts record in array format */ function get_contacts($id, $cur_tab_id, $rel_tab_id, $actions=false) { global $log,$currentModule,$current_user,$table_prefix; //crmv@203484 removed global singlepane $log->debug("Entering get_contacts(".$id.") method ..."); $this_module = $currentModule; $related_module = vtlib_getModuleNameById($rel_tab_id); $other = CRMEntity::getInstance($related_module); vtlib_setup_modulevars($related_module, $other); $parenttab = getParentTab(); $returnset = '&return_module='.$this_module.'&return_action=DetailView&activity_mode=Events&return_id='.$id; $search_string = ''; $button = ''; if($actions) { $button .= $this->get_related_buttons($currentModule, $id, $related_module, $actions); // crmv@43864 } //crmv@103400 crmv@128655 - added join _contactscf $query = 'select '.$table_prefix.'_users.user_name,'.$table_prefix.'_contactdetails.accountid,'.$table_prefix.'_contactdetails.contactid, '.$table_prefix.'_contactdetails.firstname,'.$table_prefix.'_contactdetails.lastname, '.$table_prefix.'_contactdetails.department, '.$table_prefix.'_contactdetails.title, '.$table_prefix.'_contactdetails.email, '.$table_prefix.'_contactdetails.phone, '.$table_prefix.'_crmentity.crmid, '.$table_prefix.'_crmentity.smownerid, '.$table_prefix.'_crmentity.modifiedtime from '.$table_prefix.'_contactdetails inner join '.$table_prefix.'_contactscf on '.$table_prefix.'_contactscf.contactid='.$table_prefix.'_contactdetails.contactid left join '.$table_prefix.'_contactsubdetails on '.$table_prefix.'_contactsubdetails.contactsubscriptionid = '.$table_prefix.'_contactdetails.contactid inner join '.$table_prefix.'_cntactivityrel on '.$table_prefix.'_cntactivityrel.contactid='.$table_prefix.'_contactdetails.contactid inner join '.$table_prefix.'_crmentity on '.$table_prefix.'_crmentity.crmid = '.$table_prefix.'_contactdetails.contactid left join '.$table_prefix.'_users on '.$table_prefix.'_users.id = '.$table_prefix.'_crmentity.smownerid left join '.$table_prefix.'_groups on '.$table_prefix.'_groups.groupid = '.$table_prefix.'_crmentity.smownerid where '.$table_prefix.'_cntactivityrel.activityid='.$id.' and '.$table_prefix.'_crmentity.deleted=0'; // crmv@128655 $return_value = GetRelatedList($this_module, $related_module, $other, $query, $button, $returnset); if($return_value == null) $return_value = Array(); $return_value['CUSTOM_BUTTON'] = $button; $log->debug("Exiting get_contacts method ..."); return $return_value; } /** * Function to get Activity related Users * @param integer $id - activityid * returns related Users record in array format */ function get_users($id) { global $log,$table_prefix; $log->debug("Entering get_contacts(".$id.") method ..."); global $app_strings; $focus = CRMEntity::getInstance('Users'); $button = ''; $returnset = '&return_module=Calendar&return_action=CallRelatedList&return_id='.$id; $query = 'SELECT '.$table_prefix.'_users.id, '.$table_prefix.'_users.first_name,'.$table_prefix.'_users.last_name, '.$table_prefix.'_users.user_name, '.$table_prefix.'_users.email1, '.$table_prefix.'_users.email2, '.$table_prefix.'_users.status, '.$table_prefix.'_users.is_admin, '.$table_prefix.'_user2role.roleid, '.$table_prefix.'_users.yahoo_id, '.$table_prefix.'_users.phone_home, '.$table_prefix.'_users.phone_work, '.$table_prefix.'_users.phone_mobile, '.$table_prefix.'_users.phone_other, '.$table_prefix.'_users.phone_fax,'.$table_prefix.'_activity.date_start,'.$table_prefix.'_activity.due_date,'.$table_prefix.'_activity.time_start,'.$table_prefix.'_activity.duration_hours,'.$table_prefix.'_activity.duration_minutes from '.$table_prefix.'_users inner join '.$table_prefix.'_salesmanactivityrel on '.$table_prefix.'_salesmanactivityrel.smid='.$table_prefix.'_users.id inner join '.$table_prefix.'_activity on '.$table_prefix.'_activity.activityid='.$table_prefix.'_salesmanactivityrel.activityid inner join '. $table_prefix.'_user2role on '.$table_prefix.'_user2role.userid='.$table_prefix.'_users.id where '.$table_prefix.'_activity.activityid='.$id . 'and '.$table_prefix.'_users.status=\'Active\'';//crmv@203476 $return_data = GetRelatedList('Calendar','Users',$focus,$query,$button,$returnset); if($return_data == null) $return_data = Array(); $return_data['CUSTOM_BUTTON'] = $button; $log->debug("Exiting get_users method ..."); return $return_data; } //calendarsync /** * Function to get meeting count * @param string $user_name - User Name * return integer $row["count(*)"] - count */ function getCount_Meeting($user_name) { global $log,$table_prefix; $log->debug("Entering getCount_Meeting(".$user_name.") method ..."); $query = "select count(*) from ".$table_prefix."_activity inner join ".$table_prefix."_crmentity on ".$table_prefix."_crmentity.crmid=".$table_prefix."_activity.activityid inner join ".$table_prefix."_salesmanactivityrel on ".$table_prefix."_salesmanactivityrel.activityid=".$table_prefix."_activity.activityid inner join ".$table_prefix."_users on ".$table_prefix."_users.id=".$table_prefix."_salesmanactivityrel.smid where user_name=? and ".$table_prefix."_crmentity.deleted=0 and ".$table_prefix."_activity.activitytype='Meeting'"; $result = $this->db->pquery($query, array($user_name),true,"Error retrieving contacts count"); $rows_found = $this->db->getRowCount($result); $row = $this->db->fetchByAssoc($result, 0); $log->debug("Exiting getCount_Meeting method ..."); return $row["count(*)"]; } //calendarsync /** * Function to get task count * @param string $user_name - User Name * return integer $row["count(*)"] - count */ function getCount($user_name) { global $log,$table_prefix; $log->debug("Entering getCount(".$user_name.") method ..."); $query = "select count(*) from ".$table_prefix."_activity inner join ".$table_prefix."_crmentity on ".$table_prefix."_crmentity.crmid=".$table_prefix."_activity.activityid inner join ".$table_prefix."_salesmanactivityrel on ".$table_prefix."_salesmanactivityrel.activityid=".$table_prefix."_activity.activityid inner join ".$table_prefix."_users on ".$table_prefix."_users.id=".$table_prefix."_salesmanactivityrel.smid where user_name=? and ".$table_prefix."_crmentity.deleted=0 and ".$table_prefix."_activity.activitytype='Task'"; $result = $this->db->pquery($query,array($user_name), true,"Error retrieving contacts count"); $rows_found = $this->db->getRowCount($result); $row = $this->db->fetchByAssoc($result, 0); $log->debug("Exiting getCount method ..."); return $row["count(*)"]; } /** * Function to process the activity list query * @param string $query - query string * return array $response - activity lists */ function process_list_query1($query) { global $log; $log->debug("Entering process_list_query1(".$query.") method ..."); $result =& $this->db->query($query,true,"Error retrieving $this->object_name list: "); $list = Array(); $rows_found = $this->db->getRowCount($result); if($rows_found != 0) { $task = Array(); for($index = 0 , $row = $this->db->fetchByAssoc($result, $index); $row && $index <$rows_found;$index++, $row = $this->db->fetchByAssoc($result, $index)) { foreach($this->range_fields as $columnName) { if (isset($row[$columnName])) { $task[$columnName] = $row[$columnName]; } else { $task[$columnName] = ""; } } $task[contact_name] = return_name($row, 'cfn', 'cln'); $list[] = $task; } } $response = Array(); $response['list'] = $list; $response['row_count'] = $rows_found; $response['next_offset'] = $next_offset; $response['previous_offset'] = $previous_offset; $log->debug("Exiting process_list_query1 method ..."); return $response; } /** * Function to get reminder for activity * @param integer $activity_id - activity id * @param string $reminder_time - reminder time * @param integer $reminder_sent - 0 or 1 * @param integer $recurid - recuring eventid * @param string $remindermode - string like 'edit' */ function activity_reminder($activity_id,$reminder_time,$reminder_sent=0,$recurid,$remindermode='') { global $log,$table_prefix; $log->debug("Entering ".$table_prefix."_activity_reminder(".$activity_id.",".$reminder_time.",".$reminder_sent.",".$recurid.",".$remindermode.") method ..."); //Check for vte_activityid already present in the reminder_table $query_exist = "SELECT activity_id FROM ".$this->reminder_table." WHERE activity_id = ?"; $result_exist = $this->db->pquery($query_exist, array($activity_id)); if($recurid == ''){ //crmv@19165 $recurid = 0; }//crmv@19165 - e if($remindermode == 'edit') { if($this->db->num_rows($result_exist) == 1) { $query = "UPDATE ".$this->reminder_table." SET"; $query .=" reminder_sent = ?, reminder_time = ? WHERE activity_id =?"; $params = array($reminder_sent, $reminder_time, $activity_id); } else { $query = "INSERT INTO ".$this->reminder_table." VALUES (?,?,?,?)"; $params = array($activity_id, $reminder_time, 0, $recurid); } } elseif(($remindermode == 'delete') && ($this->db->num_rows($result_exist) == 1)) { $query = "DELETE FROM ".$this->reminder_table." WHERE activity_id = ?"; $params = array($activity_id); } else { $query = "INSERT INTO ".$this->reminder_table." VALUES (?,?,?,?)"; $params = array($activity_id, $reminder_time, 0, $recurid); } $this->db->pquery($query,$params,true,"Error in processing ".$table_prefix."_table $this->reminder_table"); $log->debug("Exiting ".$table_prefix."_activity_reminder method ..."); } //Used for VteCRM Outlook Add-In /** * Function to get tasks to display in outlookplugin * @param string $username - User name * return string $query - sql query */ function get_tasksforol($username) { global $log,$adb,$table_prefix; $log->debug("Entering get_tasksforol(".$username.") method ..."); global $current_user; require_once("modules/Users/Users.php"); $seed_user=CRMEntity::getInstance('Users'); $user_id=$seed_user->retrieve_user_id($username); $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); require('user_privileges/requireUserPrivileges.php'); // crmv@39110 require('user_privileges/sharing_privileges_'.$current_user->id.'.php'); if($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0) { $sql1 = "select tablename,columnname from ".$table_prefix."_field where tabid=9 and tablename <> '".$table_prefix."_recurringevents' and tablename <> '".$table_prefix."_activity_reminder'"; $params1 = array(); }else { $profileList = getCurrentUserProfileList(); $sql1 = "select tablename,columnname from ".$table_prefix."_field inner join ".$table_prefix."_def_org_field on ".$table_prefix."_def_org_field.fieldid=".$table_prefix."_field.fieldid where ".$table_prefix."_field.tabid=9 and tablename <> '".$table_prefix."_recurringevents' and tablename <> '".$table_prefix."_activity_reminder' and ".$table_prefix."_field.displaytype in (1,2,4,3) and ".$table_prefix."_def_org_field.visible=0"; $params1 = array(); $sql1.=" AND EXISTS(SELECT * FROM ".$table_prefix."_profile2field WHERE ".$table_prefix."_profile2field.fieldid = ".$table_prefix."_field.fieldid "; if (count($profileList) > 0) { $sql1.=" AND ".$table_prefix."_profile2field.profileid IN (". generateQuestionMarks($profileList) .") "; array_push($params1, $profileList); } $sql1.=" AND ".$table_prefix."_profile2field.visible = 0) "; } $result1 = $adb->pquery($sql1,$params1); for($i=0;$i < $adb->num_rows($result1);$i++) { $permitted_lists[] = $adb->query_result($result1,$i,'tablename'); $permitted_lists[] = $adb->query_result($result1,$i,'columnname'); /*if($adb->query_result($result1,$i,'columnname') == "parentid") { $permitted_lists[] = 'vte_account'; $permitted_lists[] = 'accountname'; }*/ } $permitted_lists = array_chunk($permitted_lists,2); $column_table_lists = array(); for($i=0;$i < count($permitted_lists);$i++) { $column_table_lists[] = implode(".",$permitted_lists[$i]); } $query = "select ".$table_prefix."_activity.activityid as taskid, ".implode(',',$column_table_lists)." from ".$table_prefix."_activity inner join ".$table_prefix."_crmentity on ".$table_prefix."_crmentity.crmid=".$table_prefix."_activity.activityid inner join ".$table_prefix."_activitycf on ".$table_prefix."_activity.activityid = ".$table_prefix."_activitycf.activityid inner join ".$table_prefix."_users on ".$table_prefix."_users.id = ".$table_prefix."_crmentity.smownerid left join ".$table_prefix."_cntactivityrel on ".$table_prefix."_cntactivityrel.activityid=".$table_prefix."_activity.activityid left join ".$table_prefix."_contactdetails on ".$table_prefix."_contactdetails.contactid=".$table_prefix."_cntactivityrel.contactid left join ".$table_prefix."_seactivityrel on ".$table_prefix."_seactivityrel.activityid = ".$table_prefix."_activity.activityid where ".$table_prefix."_users.user_name='".$username."' and ".$table_prefix."_crmentity.deleted=0 and ".$table_prefix."_activity.activitytype='Task' and '.$table_prefix.'_users.status='Active'"; //crmv@203476 $log->debug("Exiting get_tasksforol method ..."); return $query; } /** * Function to get calendar query for outlookplugin * @param string $username - User name * return string $query - sql query */ function get_calendarsforol($user_name) { global $log,$adb,$table_prefix; $log->debug("Entering get_calendarsforol(".$user_name.") method ..."); global $current_user; require_once("modules/Users/Users.php"); $seed_user=CRMEntity::getInstance('Users'); $user_id=$seed_user->retrieve_user_id($user_name); $current_user=$seed_user; $current_user->retrieve_entity_info($user_id, 'Users'); require('user_privileges/requireUserPrivileges.php'); // crmv@39110 require('user_privileges/sharing_privileges_'.$current_user->id.'.php'); if($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0) { $sql1 = "select tablename,columnname from ".$table_prefix."_field where tabid=9 and tablename <> '".$table_prefix."_recurringevents' and tablename <> '".$table_prefix."_activity_reminder'"; $params1 = array(); }else { $profileList = getCurrentUserProfileList(); $sql1 = "select tablename,columnname from ".$table_prefix."_field inner join ".$table_prefix."_profile2field on ".$table_prefix."_profile2field.fieldid=".$table_prefix."_field.fieldid inner join ".$table_prefix."_def_org_field on ".$table_prefix."_def_org_field.fieldid=".$table_prefix."_field.fieldid where ".$table_prefix."_field.tabid=9 and tablename <> '".$table_prefix."_recurringevents' and tablename <> '".$table_prefix."_activity_reminder' and ".$table_prefix."_field.displaytype in (1,2,4,3) and ".$table_prefix."_profile2field.visible=0 and ".$table_prefix."_def_org_field.visible=0"; $params1 = array(); if (count($profileList) > 0) { $sql1 .= " and ".$table_prefix."_profile2field.profileid in (". generateQuestionMarks($profileList) .")"; array_push($params1,$profileList); } } $result1 = $adb->pquery($sql1, $params1); for($i=0;$i < $adb->num_rows($result1);$i++) { $permitted_lists[] = $adb->query_result($result1,$i,'tablename'); $permitted_lists[] = $adb->query_result($result1,$i,'columnname'); if($adb->query_result($result1,$i,'columnname') == "date_start") { $permitted_lists[] = $table_prefix.'_activity'; $permitted_lists[] = 'time_start'; } if($adb->query_result($result1,$i,'columnname') == "due_date") { $permitted_lists[] = $table_prefix.'_activity'; $permitted_lists[] = 'time_end'; } } $permitted_lists = array_chunk($permitted_lists,2); $column_table_lists = array(); for($i=0;$i < count($permitted_lists);$i++) { $column_table_lists[] = implode(".",$permitted_lists[$i]); } $query = "select ".$table_prefix."_activity.activityid as clndrid, ".implode(',',$column_table_lists)." from ".$table_prefix."_activity inner join ".$table_prefix."_activitycf on ".$table_prefix."_activity.activityid = ".$table_prefix."_activitycf.activityid inner join ".$table_prefix."_salesmanactivityrel on ".$table_prefix."_salesmanactivityrel.activityid=".$table_prefix."_activity.activityid inner join ".$table_prefix."_users on ".$table_prefix."_users.id=".$table_prefix."_salesmanactivityrel.smid left join ".$table_prefix."_cntactivityrel on ".$table_prefix."_cntactivityrel.activityid=".$table_prefix."_activity.activityid left join ".$table_prefix."_contactdetails on ".$table_prefix."_contactdetails.contactid=".$table_prefix."_cntactivityrel.contactid left join ".$table_prefix."_seactivityrel on ".$table_prefix."_seactivityrel.activityid = ".$table_prefix."_activity.activityid inner join ".$table_prefix."_crmentity on ".$table_prefix."_crmentity.crmid=".$table_prefix."_activity.activityid where ".$table_prefix."_users.user_name='".$user_name."' and ".$table_prefix."_crmentity.deleted=0 and ".$table_prefix."_activity.activitytype='Meeting'"; $log->debug("Exiting get_calendarsforol method ..."); return $query; } // Function to unlink all the dependent entities of the given Entity by Id function unlinkDependencies($module, $id) { global $log,$table_prefix; $sql = 'DELETE FROM '.$table_prefix.'_activity_reminder WHERE activity_id=?'; $this->db->pquery($sql, array($id)); $sql = 'DELETE FROM '.$table_prefix.'_recurringevents WHERE activityid=?'; $this->db->pquery($sql, array($id)); parent::unlinkDependencies($module, $id); } // Function to unlink an entity with given Id from another entity function unlinkRelationship($id, $return_module, $return_id) { global $log,$table_prefix; if(empty($return_module) || empty($return_id)) return; // crmv@OPER4876 crmv@189362 require_once('modules/SDK/src/CalendarTracking/CalendarTrackingUtils.php'); CalendarTracking::unTrackActivity($id); // crmv@OPER4876e crmv@189362e if($return_module == 'Contacts') { $sql = 'DELETE FROM '.$table_prefix.'_cntactivityrel WHERE contactid = ? AND activityid = ?'; $this->db->pquery($sql, array($return_id, $id)); } else { $sql='DELETE FROM '.$table_prefix.'_seactivityrel WHERE activityid=?'; $this->db->pquery($sql, array($id)); $sql = 'DELETE FROM '.$table_prefix.'_crmentityrel WHERE (crmid=? AND relmodule=? AND relcrmid=?) OR (relcrmid=? AND module=? AND crmid=?)'; $params = array($id, $return_module, $return_id, $id, $return_module, $return_id); $this->db->pquery($sql, $params); } $this->db->pquery("UPDATE {$table_prefix}_crmentity SET modifiedtime = ? WHERE crmid IN (?,?)", array($this->db->formatDate(date('Y-m-d H:i:s'), true), $id, $return_id)); // crmv@49398 crmv@69690 } /** * this function sets the status flag of activity to true or false depending on the status passed to it * @param string $status - the status of the activity flag to set * @return:: true if successful; false otherwise */ function setActivityReminder($status){ global $adb,$table_prefix; if($status == "on"){ $flag = 0; }elseif($status == "off"){ $flag = 1; }else{ return false; } $sql = "update ".$table_prefix."_act_reminder_popup set status=1 where recordid=?"; $adb->pquery($sql, array($this->id)); return true; } /* * Function to get the relation tables for related modules * @param - $secmodule secondary module name * returns the array with table names and fieldnames storing relations between module and this module */ function setRelationTables($secmodule){ global $table_prefix; $rel_tables = array ( "Contacts" => array($table_prefix."_cntactivityrel"=>array("activityid","contactid"),$table_prefix."_activity"=>"activityid"), "Leads" => array($table_prefix."_seactivityrel"=>array("activityid","crmid"),$table_prefix."_activity"=>"activityid"), "Accounts" => array($table_prefix."_seactivityrel"=>array("activityid","crmid"),$table_prefix."_activity"=>"activityid"), "Potentials" => array($table_prefix."_seactivityrel"=>array("activityid","crmid"),$table_prefix."_activity"=>"activityid"), ); return $rel_tables[$secmodule]; } /* * Function to get the secondary query part of a report * @param - $module primary module name * @param - $secmodule secondary module name * returns the query string formed on fetching the related data for report for secondary module */ //crmv@38798 function generateReportsSecQuery($module,$secmodule,$reporttype='',$useProductJoin=true,$joinUitype10=true){ //crmv@131239 global $table_prefix; $query = $this->getRelationQuery($module,$secmodule,$table_prefix."_activity","activityid"); //crmv@17001 $query .=" left join ".$table_prefix."_activitycf on ".$table_prefix."_activitycf.activityid = ".$table_prefix."_crmentityCalendar.crmid left join ".$table_prefix."_seactivityrel on ".$table_prefix."_seactivityrel.activityid = ".$table_prefix."_activity.activityid left join ".$table_prefix."_activity_reminder on ".$table_prefix."_activity_reminder.activity_id = ".$table_prefix."_activity.activityid left join ".$table_prefix."_recurringevents on ".$table_prefix."_recurringevents.activityid = ".$table_prefix."_activity.activityid left join ".$table_prefix."_crmentity ".$table_prefix."_crmentityRelCalendar on ".$table_prefix."_crmentityRelCalendar.crmid = ".$table_prefix."_seactivityrel.crmid and ".$table_prefix."_crmentityRelCalendar.deleted=0 left join ".$table_prefix."_account ".$table_prefix."_accountRelCalendar on ".$table_prefix."_accountRelCalendar.accountid=".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_leaddetails ".$table_prefix."_leaddetailsRelCalendar on ".$table_prefix."_leaddetailsRelCalendar.leadid = ".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_potential ".$table_prefix."_potentialRelCalendar on ".$table_prefix."_potentialRelCalendar.potentialid = ".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_quotes ".$table_prefix."_quotesRelCalendar on ".$table_prefix."_quotesRelCalendar.quoteid = ".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_purchaseorder ".substr($table_prefix.'_purchaseorderRelCalendar',0,29)." on ".substr($table_prefix.'_purchaseorderRelCalendar',0,29).".purchaseorderid = ".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_invoice ".$table_prefix."_invoiceRelCalendar on ".$table_prefix."_invoiceRelCalendar.invoiceid = ".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_salesorder ".$table_prefix."_salesorderRelCalendar on ".$table_prefix."_salesorderRelCalendar.salesorderid = ".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_troubletickets ".substr($table_prefix.'_troubleticketsRelCalendar',0,29)." on ".substr($table_prefix.'_troubleticketsRelCalendar',0,29).".ticketid = ".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_campaign ".$table_prefix."_campaignRelCalendar on ".$table_prefix."_campaignRelCalendar.campaignid = ".$table_prefix."_crmentityRelCalendar.crmid left join ".$table_prefix."_groups ".$table_prefix."_groupsCalendar on ".$table_prefix."_groupsCalendar.groupid = ".$table_prefix."_crmentityCalendar.smownerid left join ".$table_prefix."_users ".$table_prefix."_usersCalendar on ".$table_prefix."_usersCalendar.id = ".$table_prefix."_crmentityCalendar.smownerid"; //crmv@17001e return $query; } //crmv@38798e protected function setupTemporaryTable_tmp($tableName, $tabId, $user, $parentRole, $userGroups) { // crmv@81760 global $table_prefix; $module = null; if (!empty($tabId)) { $module = getTabname($tabId); } $query = $this->getNonAdminAccessQuery($module, $user, $parentRole, $userGroups); $db = PearDatabase::getInstance(); if ($db->isMysql()){ $query = "create temporary table IF NOT EXISTS $tableName(id int(11) primary key, shared ". "int(1) default 0) ignore ".$query; $result = $db->pquery($query, array()); if(is_object($result)) { $query = "replace into $tableName select 1 as shared,userid as id from {$table_prefix}_sharedcalendar where ". "sharedid = $user->id"; //crmv@31342 $result = $db->pquery($query, array()); } } else { if (!$db->table_exist($tableName,true)){ Vtecrm_Utils::CreateTable($tableName,"id I(11) NOTNULL PRIMARY,shared I(1) default 0",true,true); } $tableName = $db->datadict->changeTableName($tableName); $query = "insert into $tableName (id) ". $query. "where not exists (select * from $tableName where $tableName.id = un_table.id)"; $result = $db->pquery($query, array(),true); if(is_object($result)) { $query = "insert into $tableName select userid as id,1 as shared from ".$table_prefix."_sharedcalendar where ". "sharedid = $user->id and not exists (select * from $tableName where $tableName.id = ".$table_prefix."_sharedcalendar.userid)"; $result = $db->pquery($query, array()); } } //crmv@17001 $res = $db->query("SELECT id FROM ".$table_prefix."_users WHERE id NOT IN (SELECT id FROM $tableName) AND ".$table_prefix."_users.status = 'Active'"); //crmv@203476 if ($res && $db->num_rows($res)>0) { while($row=$db->fetchByAssoc($res)) { $db->pquery("insert into $tableName(shared,id) values (?,?)",array(2,$row['id'])); } } //crmv@17001e //crmv@25593 $query = "select {$table_prefix}_crmentity.smownerid from {$table_prefix}_activity inner join {$table_prefix}_crmentity on {$table_prefix}_crmentity.crmid = {$table_prefix}_activity.activityid inner join {$table_prefix}_groups on {$table_prefix}_groups.groupid = {$table_prefix}_crmentity.smownerid inner join (SELECT activityid FROM {$table_prefix}_invitees WHERE inviteeid = ? AND activityid > 0) t on t.activityid = {$table_prefix}_activity.activityid WHERE deleted = 0 GROUP BY {$table_prefix}_crmentity.smownerid"; $res = $db->pquery($query,array($user->id)); if ($res && $db->num_rows($res)>0) { while($row=$db->fetchByAssoc($res)) { // crmv@28028 insert ignore for oracle if ($db->isOracle()) { $par = array(3,$row['smownerid'],$row['smownerid']); $db->pquery("insert into $tableName (shared,id) select ?,? from dual where not exists (select id from $tableName where $tableName.id = ?)", $par); } elseif ($db->isMysql()) { $db->pquery("insert ignore into $tableName(shared,id) values (?,?)",array(3,$row['smownerid'])); } else { $db->pquery("insert into $tableName(shared,id) values (?,?)",array(3,$row['smownerid'])); } // crmv@28028e } } //crmv@25593e return $result; } //crmv@26265e //crmv@32334 function getActivityMailInfo($return_id,$status,$activity_type) { $mail_data = Array(); global $adb,$table_prefix; $qry = "select * from ".$table_prefix."_activity where activityid=?"; $ary_res = $adb->pquery($qry, array($return_id)); $subject = $adb->query_result($ary_res,0,"subject"); $priority = $adb->query_result($ary_res,0,"priority"); $st_date = $adb->query_result($ary_res,0,"date_start"); $st_time = $adb->query_result($ary_res,0,"time_start"); $end_date = $adb->query_result($ary_res,0,"due_date"); $end_time = $adb->query_result($ary_res,0,"time_end"); $location = $adb->query_result($ary_res,0,"location"); $description = $adb->query_result($ary_res,0,"description"); // crmv@150773 $owner_qry = "select smownerid from ".$table_prefix."_crmentity where crmid=?"; $res = $adb->pquery($owner_qry, array($return_id)); $owner_id = $adb->query_result($res,0,"smownerid"); $usr_res = $adb->pquery("select count(*) as count from ".$table_prefix."_users where id=?",array($owner_id)); if($adb->query_result($usr_res, 0, 'count')>0) { $assignType = "U"; $usr_id = $owner_id; } else { $assignType = "T"; $group_qry = "select groupname from ".$table_prefix."_groups where groupid=?"; $grp_res = $adb->pquery($group_qry, array($owner_id)); $grp_name = $adb->query_result($grp_res,0,"groupname"); } // crmv@150773 - removed description query $rel_qry = "select case ".$table_prefix."_crmentity.setype when 'Leads' then ".$table_prefix."_leaddetails.lastname when 'Accounts' then ".$table_prefix."_account.accountname when 'Potentials' then ".$table_prefix."_potential.potentialname when 'Quotes' then ".$table_prefix."_quotes.subject when 'PurchaseOrder' then ".$table_prefix."_purchaseorder.subject when 'SalesOrder' then ".$table_prefix."_salesorder.subject when 'Invoice' then ".$table_prefix."_invoice.subject when 'Campaigns' then ".$table_prefix."_campaign.campaignname when 'HelpDesk' then ".$table_prefix."_troubletickets.title end as relname from ".$table_prefix."_seactivityrel inner join ".$table_prefix."_crmentity on ".$table_prefix."_crmentity.crmid=".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_leaddetails on ".$table_prefix."_leaddetails.leadid = ".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_account on ".$table_prefix."_account.accountid=".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_potential on ".$table_prefix."_potential.potentialid=".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_quotes on ".$table_prefix."_quotes.quoteid= ".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_purchaseorder on ".$table_prefix."_purchaseorder.purchaseorderid = ".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_salesorder on ".$table_prefix."_salesorder.salesorderid = ".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_invoice on ".$table_prefix."_invoice.invoiceid = ".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_campaign on ".$table_prefix."_campaign.campaignid = ".$table_prefix."_seactivityrel.crmid left join ".$table_prefix."_troubletickets on ".$table_prefix."_troubletickets.ticketid = ".$table_prefix."_seactivityrel.crmid where ".$table_prefix."_seactivityrel.activityid=?"; $rel_res = $adb->pquery($rel_qry, array($return_id)); $rel_name = $adb->query_result($rel_res,0,"relname"); $cont_qry = "select * from ".$table_prefix."_cntactivityrel where activityid=?"; $cont_res = $adb->pquery($cont_qry, array($return_id)); $cont_id = $adb->query_result($cont_res,0,"contactid"); $cont_name = ''; if($cont_id != '') { $cont_name = getContactName($cont_id); } $mail_data['record'] = $return_id; //crmv@18871 $mail_data['mode'] = "edit"; $mail_data['activity_mode'] = $activity_type; $mail_data['user_id'] = $usr_id; $mail_data['subject'] = $subject; $mail_data['status'] = $status; $mail_data['taskpriority'] = $priority; $mail_data['relatedto'] = $rel_name; $mail_data['contact_name'] = $cont_name; $mail_data['description'] = $description; $mail_data['assingn_type'] = $assignType; $mail_data['group_name'] = $grp_name; $value = getaddEventPopupTime($st_time,$end_time,'24'); $start_hour = $value['starthour'].':'.$value['startmin'].''.$value['startfmt']; if($activity_type != 'Task' ) $end_hour = $value['endhour'] .':'.$value['endmin'].''.$value['endfmt']; $mail_data['st_date_time']=getDisplayDate($st_date)." ".$start_hour; $mail_data['end_date_time']=getDisplayDate($end_date)." ".$end_hour; $mail_data['location']=$location; return $mail_data; } function sendInvitation($inviteesid,$mode,$subject,$desc,$record='',$inviteesid_con='') //crmv@19555 //crmv@26807 { global $current_user; require_once("modules/Emails/mail.php"); $invites = getTranslatedString('INVITATION','Calendar'); //crmv@29617 if ($mode == 'edit') { $type = 'Calendar invitation edit'; } else { $type = 'Calendar invitation'; } //crmv@29617e //crmv@26807 if ($inviteesid !='') { $invitees_array = explode(';',$inviteesid); $email_subject = $invites.': '.$subject; foreach($invitees_array as $inviteeid) { if($inviteeid != '') { $this->switchUserLanguage($inviteeid); // crmv@150065 $description=$this->getActivityDetails($desc,$inviteeid,"invite",$mode,$record); //crmv@19555 //crmv@29617 $focus = ModNotifications::getInstance(); // crmv@164122 $focus->saveFastNotification( array( 'assigned_user_id' => $inviteeid, 'related_to' => $record, 'mod_not_type' => $type, 'subject' => $email_subject, 'description' => $description, 'from_email' => $current_user->email1, 'from_email_name' => getUserFullName($current_user->id), ) ); //crmv@29617e } } $this->switchUserLanguage($current_user->id); // crmv@150065 } // crmv@68357 if ($inviteesid_con !='') { $invitees_array = explode(';',$inviteesid_con); $email_subject = $invites.': '.$subject; $attachment = ''; $ics = $this->generateInvitationIcs($record, $this->column_fields); // crmv@69568 if ($ics) { // prepare the linked ics as invitation $attachment = array( array( 'sourcetype' => 'string', 'content' => $ics->serialize(), 'contenttype' => 'text/calendar', 'altbody' => true, 'charset' => 'UTF-8', 'encoding' => '7bit', 'method' => 'REQUEST', ), array( 'sourcetype' => 'string', 'filename' => 'invite.ics', 'content' => $ics->serialize(), 'contenttype' => 'application/ics', ), ); } foreach($invitees_array as $inviteeid) { if($inviteeid != '') { $description=$this->getActivityDetails($desc,$inviteeid,"invite_con",$mode,$record); $to_email = getContactsEmailId($inviteeid); send_mail('Calendar',$to_email,$current_user->user_name,'',$email_subject,$description, '', '', $attachment); } } } //crmv@26807e crmv@68357e } function sendInvitationAnswer($partecipation,$activityid,$userid,$from='') //crmv@26807 { global $current_user; require_once("modules/Emails/mail.php"); $focus_event = CRMEntity::getInstance('Calendar'); $focus_event->id = $activityid; $focus_event->retrieve_entity_info($focus_event->id,'Events'); $invites = getTranslatedString('INVITATION','Calendar'); if ($partecipation == 2) { $answer = getTranslatedString('LBL_YES','Calendar'); $type = 'Calendar invitation answer yes'; //crmv@29617 } elseif ($partecipation == 1) { $answer = getTranslatedString('LBL_NO','Calendar'); $type = 'Calendar invitation answer no'; //crmv@29617 } $subject = $invites.': '.$focus_event->column_fields['subject']; $description = $this->getInvitationDescription($focus_event->column_fields,$focus_event->column_fields['assigned_user_id'],$activityid,$answer,$userid,$from); //crmv@26807 //crmv@29617 $obj = ModNotifications::getInstance(); // crmv@164122 if ($from == 'invite_con') { $contactid = $_REQUEST['userid']; $obj->saveFastNotification( array( 'assigned_user_id' => $focus_event->column_fields['assigned_user_id'], 'related_to' => $focus_event->id, 'mod_not_type' => $type.' contact', 'subject' => $subject, 'description' => $description, 'from_email' => $current_user->email1, 'from_email_name' => getContactName($contactid), ) ); } else { $obj->saveFastNotification( array( 'assigned_user_id' => $focus_event->column_fields['assigned_user_id'], 'related_to' => $focus_event->id, 'mod_not_type' => $type, 'subject' => $subject, 'description' => $description, 'from_email' => $current_user->email1, 'from_email_name' => getUserFullName($current_user->id), ) ); } //crmv@29617e } // crmv@68357 crmv@69568 function generateInvitationIcs($activityid, $fields = null) { global $adb, $table_prefix; $ics = null; $config = array("unique_id" => "VTECRM"); $vcalendar = new VTEvcalendar($config); if (empty($fields)) { // generate from query // crmv@150773 $query = "SELECT a.*, c.smownerid, c.createdtime, c.modifiedtime, ar.reminder_time FROM {$table_prefix}_activity a INNER JOIN {$table_prefix}_crmentity c ON a.activityid = c.crmid LEFT JOIN {$table_prefix}_activity_reminder ar ON ar.activity_id = a.activityid AND ar.recurringid = 0 WHERE a.activityid = ?"; // crmv@150773e $ics = $vcalendar->generateFromSql($query, array($activityid)); } else { if (empty($fields['activityid'])) $fields['activityid'] = $activityid; // crmv@81140 $ics = $vcalendar->generateFromFields($fields); } $ics->add_property('METHOD', 'REQUEST'); return $ics; } // crmv@69568e function save($module_name,$longdesc=false,$offline_update=false,$triggerEvent=true) { global $adb, $table_prefix; // generate the ical_uuid if missing if (($this->mode == '' || $this->mode == 'create')) { // crmv@187823 if (empty($this->column_fields['ical_uuid'])) { $this->column_fields['ical_uuid'] = rfc2445_guid(); } if (empty($this->column_fields['organizer'])) { $this->column_fields['organizer'] = array( 'type' => 'Users', 'value' => $this->column_fields['assigned_user_id'] ?: $current_user->id, ); } // crmv@187823e } elseif ($this->id > 0) { // This is the calendar people! On save, not all columns are retrieved, so the uuid is empty and I have to reload it, damn! $res = $adb->pquery("SELECT ical_uuid FROM {$this->table_name} WHERE {$this->table_index} = ?", array($this->id)); if ($res && $adb->num_rows($res) > 0) { $this->column_fields['ical_uuid'] = $adb->query_result_no_html($res, 0, 'ical_uuid'); } // crmv@187823 // avoid clearing the organizer user on edit if (empty($this->column_fields['organizer'])) { $this->column_fields['organizer'] = getSingleFieldValue($table_prefix.'_activity_organizer', 'email', 'activityid', $this->id); } // crmv@187823e } return parent::save($module_name,$longdesc,$offline_update,$triggerEvent); } // crmv@81126 function getCrmidFromUuid($uuid, $recurrIdx = 0) { global $adb, $table_prefix; $crmid = null; if (!empty($uuid)) { $res = $adb->pquery(" SELECT {$table_prefix}_crmentity.crmid FROM {$table_prefix}_activity INNER JOIN {$table_prefix}_crmentity ON {$table_prefix}_activity.activityid = {$table_prefix}_crmentity.crmid WHERE deleted = 0 AND ical_uuid = ? AND recurr_idx = ? ", array($uuid, intval($recurrIdx))); if ($res && $adb->num_rows($res) > 0) { $crmid = intval($adb->query_result_no_html($res, 0, 'crmid')); } } return $crmid; } // crmv@81126e // crmv@68357e //crmv@19555 function getRequestData($return_id,$focus='') { global $adb,$table_prefix; $cont_qry = "select * from ".$table_prefix."_cntactivityrel where activityid=?"; $cont_res = $adb->pquery($cont_qry, array($return_id)); $noofrows = $adb->num_rows($cont_res); $cont_id = array(); if($noofrows > 0) { for($i=0; $i<$noofrows; $i++) { $cont_id[] = $adb->query_result($cont_res,$i,"contactid"); } } $cont_name = ''; foreach($cont_id as $key=>$id) { if($id != '') { $cont_name .= getContactName($id).', '; } } $cont_name = trim($cont_name,', '); $mail_data = Array(); if ($focus == '') { $mail_data['user_id'] = $_REQUEST['assigned_user_id']; $mail_data['subject'] = $_REQUEST['subject']; $mail_data['status'] = (($_REQUEST['activity_mode']=='Task')?($_REQUEST['taskstatus']):($_REQUEST['eventstatus'])); $mail_data['activity_mode'] = $_REQUEST['activity_mode']; $mail_data['taskpriority'] = $_REQUEST['taskpriority']; $mail_data['relatedto'] = $_REQUEST['parent_name']; $mail_data['contact_name'] = $cont_name; $mail_data['description'] = $_REQUEST['description']; $mail_data['assingn_type'] = $_REQUEST['assigntype']; $mail_data['group_name'] = getGroupName($_REQUEST['assigned_group_id']); $mail_data['mode'] = $_REQUEST['mode']; $value = getaddEventPopupTime($_REQUEST['time_start'],$_REQUEST['time_end'],'24'); $start_hour = $value['starthour'].':'.$value['startmin'].''.$value['startfmt']; if($_REQUEST['activity_mode']!='Task') $end_hour = $value['endhour'] .':'.$value['endmin'].''.$value['endfmt']; $mail_data['st_date_time'] = getDisplayDate($_REQUEST['date_start'])." ".$start_hour; $mail_data['end_date_time']=getDisplayDate($_REQUEST['due_date'])." ".$end_hour; $mail_data['location']=vtlib_purify($_REQUEST['location']); } else { $info = getEntityName(getSalesEntityType($focus->column_fields['parent_id']),array($focus->column_fields['parent_id'])); $parent_name = $info[$focus->column_fields['parent_id']]; $mail_data['user_id'] = $focus->column_fields['assigned_user_id']; $mail_data['subject'] = $focus->column_fields['subject']; $mail_data['status'] = (($focus->column_fields['activitytype']=='Task')?($focus->column_fields['taskstatus']):($focus->column_fields['eventstatus'])); $mail_data['activity_mode'] = (($focus->column_fields['activitytype']=='Task')?('Task'):('Events')); $mail_data['taskpriority'] = $focus->column_fields['taskpriority']; $mail_data['relatedto'] = $parent_name; $mail_data['contact_name'] = $cont_name; $mail_data['description'] = $focus->column_fields['description']; $mail_data['assingn_type'] = $focus->column_fields['assigntype']; // $mail_data['group_name'] = getGroupName($_REQUEST['assigned_group_id']); $mail_data['mode'] = $focus->mode; $value = getaddEventPopupTime($focus->column_fields['time_start'],$focus->column_fields['time_end'],'24'); $start_hour = $value['starthour'].':'.$value['startmin'].''.$value['startfmt']; if($focus->column_fields['activitytype']!='Task') $end_hour = $value['endhour'] .':'.$value['endmin'].''.$value['endfmt']; $mail_data['st_date_time'] = getDisplayDate($focus->column_fields['date_start'])." ".$start_hour; $mail_data['end_date_time']=getDisplayDate($focus->column_fields['due_date'])." ".$end_hour; $mail_data['location']=vtlib_purify($focus->column_fields['location']); } return $mail_data; } //crmv@19555e /** * Function to get the '.$table_prefix.'_activity details for mail body * @param string $description - activity description * @param string $from - to differenciate from notification to invitation. * return string $list - HTML in string format */ function getActivityDetails($description,$user_id,$from='',$save_mode='',$record='') //crmv@17001 //crmv@19555 { global $log,$current_user; global $adb; $log->debug("Entering getActivityDetails(".$description.") method ..."); $updated = getTranslatedString('LBL_UPDATED','Calendar'); $created = getTranslatedString('LBL_CREATED','Calendar'); //crmv@17001 if ($save_mode != '') $reply = (($save_mode == 'edit')?"$updated":"$created"); else $reply = (($description['mode'] == 'edit')?"$updated":"$created"); //crmv@17001e if($description['activity_mode'] == "Events") { $end_date_lable = getTranslatedString('End date and time','Calendar'); } else { $end_date_lable = getTranslatedString('Due Date','Calendar'); } //crmv@26807 if ($from == 'invite_con') { $name = getContactName($user_id); } else { $name = getUserName($user_id); } //crmv@26807e if($from == "invite" || $from == "invite_con") $msg = getTranslatedString('LBL_ACTIVITY_INVITATION','Calendar'); else $msg = getTranslatedString('LBL_ACTIVITY_NOTIFICATION','Calendar'); $current_username = getUserName($current_user->id); $status = getTranslatedString($description['status'],'Calendar'); // crmv@25610 $tzinfo = ''; if (!empty($current_user->column_fields['user_timezone'])) { $tzinfo = " ({$current_user->column_fields['user_timezone']})"; } // crmv@25610e $list = $name.','; $list .= '

'.$msg.' '.$reply.'.
'.getTranslatedString('LBL_DETAILS_STRING','Calendar').':
'; $list .= '
      '.getTranslatedString("LBL_SUBJECT",'Calendar').' '.$description['subject']; $list .= '
      '.getTranslatedString("Start date and time",'Calendar').' : '.$description['st_date_time'].$tzinfo; // crmv@25610 $list .= '
      '.$end_date_lable.' : '.$description['end_date_time'].$tzinfo; // crmv@25610 $list .= '
      '.getTranslatedString("LBL_STATUS",'Calendar').': '.$status; $list .= '
      '.getTranslatedString("Priority",'Calendar').': '.getTranslatedString($description['taskpriority']); $list .= '
      '.getTranslatedString("Related To",'Calendar').': '.getTranslatedString($description['relatedto']); if($description['activity_mode'] != 'Events') { $list .= '
      '.getTranslatedString("LBL_CONTACT",'Calendar').' '.$description['contact_name']; } else $list .= '
      '.getTranslatedString("Location",'Calendar').' : '.$description['location']; $list .= '
      '.getTranslatedString("LBL_APP_DESCRIPTION",'Calendar').': '.$description['description']; //crmv@17001 : Inviti //crmv@26807 if($from == "invite" || $from == "invite_con") { global $site_URL,$application_unique_key; //crmv@19555 //crmv@21995 if ($record == '' && $_REQUEST['record'] != '') $record = $_REQUEST['record']; $confirm_url = $site_URL."/hub/cinv.php?from=$from&app_key=$application_unique_key&record=$record&userid=".$user_id; // crmv@192078 $link_yes = "".getTranslatedString('LBL_YES','Calendar').""; $link_no = "".getTranslatedString('LBL_NO','Calendar').""; $list .= '

'.getTranslatedString('LBL_MAIL_INVITATION_CONFIRM','Calendar').' '.$link_yes.' - '.$link_no.'
'; $link = "".getTranslatedString('LBL_HERE','Calendar').""; //crmv@19555e //crmv@21995e $list .= getTranslatedString('LBL_MAIL_INVITATION_1','Calendar').' '.$link.' '.getTranslatedString('LBL_MAIL_INVITATION_2','Calendar'); } //crmv@17001e //crmv@26807e $list .= '

'.getTranslatedString("LBL_REGARDS_STRING",'Calendar').' ,'; $list .= '
'.$current_username.'.'; $log->debug("Exiting getActivityDetails method ..."); return $list; } function getInvitationDescription($description,$user_id,$record='',$answer='',$userid='',$from='') //crmv@26807 { global $adb,$log,$current_user,$site_URL,$table_prefix; $name = getUserName($user_id); $current_username = getUserName($current_user->id); $status = getTranslatedString($description['eventstatus'],'Calendar'); //crmv@26807 if ($from == 'invite_con') { $user_name = getContactName($userid); } else { $user_name = $current_user->user_name; } $desc = $user_name.' '.getTranslatedString('LBL_ANSWER','Calendar').' "'.$answer.'" '.getTranslatedString('LBL_TO_INVITATION','Calendar'); //crmv@26807e // crmv@25610 $tzinfo = ''; if (!empty($current_user->column_fields['user_timezone'])) { $tzinfo = " ({$current_user->column_fields['user_timezone']})"; } // crmv@25610e $list = $name.','; $list .= '
'.$desc.'.
'; $list .= '
'.getTranslatedString('LBL_DETAILS_STRING','Calendar').':'; $list .= '
      '.getTranslatedString("LBL_SUBJECT",'Calendar').' '.$description['subject']; $list .= '
      '.getTranslatedString("Start date and time",'Calendar').' : '.$description['date_start'].' '.$description['time_start'].$tzinfo; // crmv@25610 $list .= '
      '.getTranslatedString('End date and time','Calendar').' : '.$description['due_date'].' '.$description['time_end'].$tzinfo; // crmv@25610 $list .= '
      '.getTranslatedString("LBL_STATUS",'Calendar').': '.$status; $list .= '
      '.getTranslatedString("Priority",'Calendar').': '.getTranslatedString($description['taskpriority']); $list .= '
      '.getTranslatedString("Location",'Calendar').': '.getTranslatedString($description['location']); $list .= '
      '.getTranslatedString("LBL_APP_DESCRIPTION",'Calendar').': '.$description['description']; //crmv@26807 $invitees = '
      '.getTranslatedString("LBL_CAL_INVITATION",'Calendar').': '; $query = ' SELECT inviteeid, partecipation, last_name, first_name FROM '.$table_prefix.'_invitees LEFT JOIN '.$table_prefix.'_users ON '.$table_prefix.'_users.id = '.$table_prefix.'_invitees.inviteeid WHERE activityid = ? '; $res = $adb->pquery($query, array($record)); if ($res && $adb->num_rows($res)>0) { while($row = $adb->fetchByAssoc($res)) { if ($row['partecipation'] == 2) { $answer = getTranslatedString('LBL_YES','Calendar'); } elseif ($row['partecipation'] == 1) { $answer = getTranslatedString('LBL_NO','Calendar'); } else { $answer = '?'; } $invitees .= $row['last_name'].' '.$row['first_name'].' ('.$answer.'), '; } } $query = 'SELECT inviteeid,partecipation FROM '.$table_prefix.'_invitees_con WHERE activityid = ? '; $res = $adb->pquery($query, array($record)); if ($res && $adb->num_rows($res)>0) { while($row = $adb->fetchByAssoc($res)) { if ($row['partecipation'] == 2) { $answer = getTranslatedString('LBL_YES','Calendar'); } elseif ($row['partecipation'] == 1) { $answer = getTranslatedString('LBL_NO','Calendar'); } else { $answer = '?'; } $invitees .= getContactName($row['inviteeid']).' ('.$answer.'), '; } } $list .= substr($invitees,0,strlen($invitees)-2); //crmv@26807e $link = "".getTranslatedString('LBL_HERE','Calendar').""; $list .= '

'.getTranslatedString('LBL_MAIL_INVITATION_1','Calendar').' '.$link.' '.getTranslatedString('LBL_MAIL_INVITATION_3','Calendar'); $list .= '

'.getTranslatedString("LBL_REGARDS_STRING",'Calendar').' ,'; $list .= '
'.$current_username.'.'; return $list; } //crmv@26030m e //crmv@32334 e //crmv@zmerge function trash($module, $id) { global $adb; // crmv@OPER4876 crmv@189362 require_once('modules/SDK/src/CalendarTracking/CalendarTrackingUtils.php'); CalendarTracking::unTrackActivity($id); // crmv@OPER4876e crmv@189362e CRMEntity::trash($module, $id); if ($adb->table_exist('tbl_s_zmerge_events')) { require_once('modules/Calendar/ZMergeUtils.php'); ZMerge::setZMergeEvents($id); } } //crmv@zmerge e //crmv@20629 crmv@23461 crmv@24020 crmv@36555 function getShownUserId($userid,$all=false){ global $adb,$showfullusername,$table_prefix,$current_user; $shownid = Array(); if ($all) { $query = "SELECT * FROM tbl_s_showncalendar WHERE userid = ? AND shownid IN ('all','mine','others')"; $result = $adb->pquery($query, array($userid)); $rows = $adb->num_rows($result); for($j=0;$j<$rows;$j++) { $id = $adb->query_result($result,$j,'shownid'); $selected = $adb->query_result($result,$j,'selected'); $shownname = $id; $shownid[$id] = array('name'=>$shownname,'selected'=>$selected); } } //crmv@152712 $query = "SELECT tbl_s_showncalendar.*, ".$table_prefix."_users.last_name, ".$table_prefix."_users.first_name FROM tbl_s_showncalendar INNER JOIN ".$table_prefix."_users ON tbl_s_showncalendar.shownid = ".$table_prefix."_users.id WHERE userid = ? and ".$table_prefix."_users.status = 'Active' and shownid not in ('all','mine','others') ORDER BY ".$table_prefix."_users.user_name"; $result = $adb->pquery($query, array($userid)); if ($result && $adb->num_rows($result) > 0) { while($row=$adb->fetchByAssoc($result,-1,false)) { $id = $row['shownid']; $selected = $row['selected']; $shownname = getUserName($id,false,array( 'withoutname'=>$current_user->formatUserName($id,$row,false,Users::USERNAME_FORMAT_INVERTED), 'withname'=>$current_user->formatUserName($id,$row,true,Users::USERNAME_FORMAT_INVERTED), )); $shownid[$id] = array('name'=>$shownname,'selected'=>$selected); } } //crmv@152712e return $shownid; } function getSharedUserId($id, $onlyOccupation = false) { // crmv@187823 global $adb,$showfullusername,$table_prefix; $sharedid = Array(); // crmv@187823 $query = "SELECT sc.* FROM {$table_prefix}_sharedcalendar sc LEFT JOIN {$table_prefix}_users u ON sc.sharedid = u.id WHERE userid = ? AND only_occ = ? AND u.status='Active'";//crmv@203476 crmv@204903 $params = array($id, $onlyOccupation ? 1 : 0); $result = $adb->pquery($query, $params); // crmv@187823e $rows = $adb->num_rows($result); for($j=0;$j<$rows;$j++) { $id = $adb->query_result($result,$j,'sharedid'); $sharedname = getUserName($id,$showfullusername); $sharedid[$id]=$sharedname; } return $sharedid; } function getSharingUserName($id){ global $adb,$table_prefix; $user_details=Array(); require('user_privileges/sharing_privileges_'.$id.'.php'); // crmv@39110 $userid = $id; require('user_privileges/requireUserPrivileges.php'); // crmv@39110e //crmv@23460 $query = "SELECT id, user_name,first_name AS first_name,last_name AS last_name from ".$table_prefix."_users WHERE status=?"; $params = array('Active'); //crmv@23460e $query .= " order by user_name ASC"; $result = $adb->pquery($query, $params, true, "Error filling in user array: "); while($row = $adb->fetchByAssoc($result)) { $temp_result[$row['id']] = $row['user_name']; } $user_details = &$temp_result; unset($user_details[$id]); return $user_details; } function getShownUserList($id){ global $current_user,$adb,$table_prefix; // crmv@39110 $userid = $id; require('user_privileges/requireUserPrivileges.php'); // crmv@39110e require('user_privileges/sharing_privileges_'.$id.'.php'); //crmv@70053 if($is_admin==false && $defaultOrgSharingPermission[9] != 3) { $query = "SELECT id, user_name,first_name AS first_name,last_name AS last_name from ".$table_prefix."_users WHERE status=?"; $params = array('Active'); } elseif($is_admin==false && $profileGlobalPermission[2] == 1 && ($defaultOrgSharingPermission[9] == 3 or $defaultOrgSharingPermission[9] == 0)) //crmv@70053e { $query = "select id as id,user_name as user_name,first_name AS first_name,last_name AS last_name from ".$table_prefix."_users where id=? and status='Active'"; $query.=" union select ".$table_prefix."_user2role.userid as id,".$table_prefix."_users.user_name as user_name,first_name AS first_name,last_name AS last_name from ".$table_prefix."_user2role inner join ".$table_prefix."_users on ".$table_prefix."_users.id=".$table_prefix."_user2role.userid inner join ".$table_prefix."_role on ".$table_prefix."_role.roleid=".$table_prefix."_user2role.roleid where ".$table_prefix."_role.parentrole like ? and status='Active' union select shareduserid as id,".$table_prefix."_users.user_name as user_name,first_name AS first_name,last_name AS last_name from ".$table_prefix."_tmp_write_u_per inner join ".$table_prefix."_users on ".$table_prefix."_users.id=".$table_prefix."_tmp_write_u_per.shareduserid where status='Active' and ".$table_prefix."_tmp_write_u_per.userid=? and ".$table_prefix."_tmp_write_u_per.tabid=?"; $query.=" UNION SELECT userid AS id, ".$table_prefix."_users.user_name AS user_name, first_name AS first_name, last_name AS last_name FROM ".$table_prefix."_sharedcalendar INNER JOIN ".$table_prefix."_users ON ".$table_prefix."_users.id = ".$table_prefix."_sharedcalendar.userid WHERE STATUS = 'Active' AND ".$table_prefix."_sharedcalendar.sharedid = ?"; $params = array($id,$current_user_parent_role_seq."::%",$id,9,$id); } else { $query = "SELECT id, user_name,first_name AS first_name,last_name AS last_name from ".$table_prefix."_users WHERE status=?"; $params = array('Active'); } $query .= " order by user_name ASC"; $result = $adb->pquery($query, $params); while($row = $adb->fetchByAssoc($result)) { $user_details[$row['id']] = getUserName($row['id']); } unset($user_details[$id]); return $user_details; } //crmv@20209e crmv@23461e crmv@24020e crmv@36555e // crmv@187823 /** * Return wether the $viewer user can see the content of event owned by $owner. * @param int $owner The owner of the record being viewed * @param int $viewer The user viewing the record * @return bool */ public function isOnlySharingOccupation($owner, $viewer) { global $adb, $table_prefix; static $occupCache = array(); $key = $viewer.'_'.$owner; if (!array_key_exists($key, $occupCache)) { $res = $adb->pquery( "SELECT COUNT(*) as cnt FROM {$table_prefix}_sharedcalendar WHERE userid = ? AND sharedid = ? AND only_occ = 1", array($owner, $viewer) ); $occupCache[$key] = ($adb->query_result_no_html($res, 0, 'cnt') == 1); } return $occupCache[$key]; } /** * Return which fields are shown when others are masked (to allow occupation visibility) * @return array */ public function getNonMaskedFields() { $fields = array('assigned_user_id','date_start','time_start','time_end','due_date','activitytype','visibility','duration_hours','duration_minutes'); return $fields; } /** * Return true if the field should not be visible to the $forUser argument * @param int $record The record id of the event * @param string $fieldname The fieldname to check * @param array $recordInfo Additional fields of the event, if empty they will be retrieved from database * @param int $forUser The user asking to see the field, if empty use $current_user * @return bool */ public function isFieldMasked($record, $fieldname, $recordInfo = array(), $forUser = null) { global $current_user; if (empty($forUser)) { $forUser = $current_user->id; $isAdmin = is_admin($current_user); } else { $userid = $forUser; require('user_privileges/requireUserPrivileges.php'); $isAdmin = $is_admin; } if (empty($recordInfo)) { $res = $adb->pquery( "SELECT c.smownerid as assigned_user_id, a.visibility FROM {$this->tablename} a INNER JOIN {$table_prefix}_crmentity c ON c.crmid = a.activityid AND c.deleted = 0 WHERE a.activityid = ?", array($record) ); $recordInfo = $adb->fetchByAssoc($res, -1, false); } $ownerId = $recordInfo['assigned_user_id']; $visibility = $recordInfo['visibility']; // now implement quick checks and fast exit first // admin and owner see everything! if ($isAdmin || $ownerId == $forUser) return false; // public events are world visible! if ($visibility == 'Public') return false; // some fields are always shown $allowedFields = $this->getNonMaskedFields(); if (in_array($fieldname,$allowedFields)) return false; // then some slower checks if ( ($visibility == 'Private' || $this->isOnlySharingOccupation($ownerId, $forUser)) && isCalendarInvited($forUser,$record,true) == 'no' ) { return true; } return false; } /** * Return true if the record has masked fields for the user $forUser * @param int $record The record id of the event * @param array $recordInfo Additional fields of the event, if empty they will be retrieved from database * @param int $forUser The user asking to see the record, if empty use $current_user * @return bool */ public function hasMaskedFields($record, $recordInfo = array(), $forUser = null) { return $this->isFieldMasked($record, 'subject', $recordInfo, $forUser); } /** * Check if the passed user matches the organizer field of the $record event * @param int $record the crmid of the event * @param int $userid The id of the user * @return bool */ public function isOrganizer($record, $userid = null) { global $current_user; require_once('modules/SDK/src/49/OrganizerField.php'); $ofield = $ofield = OrganizerField::getInstance('Calendar', 'organizer'); return $ofield->compareUser($userid ?: $current_user->id, $record); } // crmv@187823e // crmv@48267 static function getInvitees($activityid) { global $adb, $table_prefix; $invitees = array(); $q = "select i.inviteeid as id, i.partecipation, u.user_name, u.first_name as firstname, u.last_name as lastname, u.email1, u.email2, 'Users' as type from {$table_prefix}_invitees i inner join {$table_prefix}_activity a on i.activityid = a.activityid inner join {$table_prefix}_crmentity c on a.activityid = c.crmid inner join {$table_prefix}_users u on u.id = i.inviteeid where c.deleted = 0 and u.deleted = 0 and i.activityid = ?"; $res = $adb->pquery($q, array($activityid)); if ($res) { while ($row = $adb->fetchByAssoc($res, -1, false)) { $invitees[] = $row; } } $q = "select i.inviteeid as id, i.partecipation, cd.firstname, cd.lastname, cd.email as email1, cd.otheremail as email2, 'Contacts' as type from {$table_prefix}_invitees_con i inner join {$table_prefix}_activity a on i.activityid = a.activityid inner join {$table_prefix}_crmentity c on a.activityid = c.crmid inner join {$table_prefix}_contactdetails cd on cd.contactid = i.inviteeid inner join {$table_prefix}_crmentity cc on cd.contactid = cc.crmid where c.deleted = 0 and cc.deleted = 0 and i.activityid = ?"; $res = $adb->pquery($q, array($activityid)); if ($res) { while ($row = $adb->fetchByAssoc($res, -1, false)) { $invitees[] = $row; } } return $invitees; } //crmv@48267e // crmv@150065 public function switchUserLanguage($userid){ global $app_strings, $mod_strings; global $currentModule, $current_language; $user_language = getUserLanguage($userid); if ($user_language != $current_language) { $current_language = $user_language; $app_strings = return_application_language($current_language); $mod_strings = return_module_language($current_language, $currentModule); } } //crmv@150065e // crmv@181170 public function getCalendarShareContent($record, $mode) { $record = intval($record); $shareduser_ids = $this->getSharedUserId($record); $shareduserocc_ids = $this->getSharedUserId($record, true); $shownduser_ids = $this->getShownUserId($record); $smartyCal = new VteSmarty(); $smartyCal->assign('MODE', $mode); $smartyCal->assign('SHAREDUSERS', $shareduser_ids); $smartyCal->assign('SHAREDUSERSOCC', $shareduserocc_ids); $smartyCal->assign('SHOWNUSERS', $shownduser_ids); // these only in edit if ($mode != 'detail' && $mode != 'create') { //crmv@36555 $shareduser_list = $this->getSharingUserName($record); $shownuser_list = $this->getShownUserList($record); //crmv@36555e $smartyCal->assign('SHAREDUSERS_LIST', $shareduser_list); $smartyCal->assign('SHOWNUSERS_LIST', $shownuser_list); } return $smartyCal->fetch('modules/Calendar/ShareSettings.tpl'); } // crmv@181170e // crmv@194723 crmv@202029 function getUserResourceList($userid) { global $adb, $table_prefix, $current_user; $resourceList = array(); $query = " SELECT cr.*, u.user_name, u.last_name, u.first_name, u.cal_color FROM tbl_s_calendar_resources cr INNER JOIN tbl_s_showncalendar ON tbl_s_showncalendar.userid = cr.userid AND tbl_s_showncalendar.shownid = cr.shownid INNER JOIN {$table_prefix}_users u ON u.id = cr.shownid WHERE cr.userid = ? AND u.status = 'Active' UNION SELECT cr.*, u.user_name, u.last_name, u.first_name, u.cal_color FROM tbl_s_calendar_resources cr INNER JOIN {$table_prefix}_users u ON u.id = cr.shownid WHERE cr.userid = ? AND cr.shownid = cr.userid AND u.status = 'Active' ORDER BY user_name"; $result = $adb->pquery($query, array($userid, $userid)); if (!!$result && $adb->num_rows($result) > 0) { while ($row = $adb->fetchByAssoc($result, -1, false)) { $id = $row['shownid']; $shownname = getUserName($id, false, array( 'withoutname' => $current_user->formatUserName($id, $row, false, Users::USERNAME_FORMAT_INVERTED), 'withname' => $current_user->formatUserName($id, $row, true, Users::USERNAME_FORMAT_INVERTED) )); $row['name'] = $shownname; $resourceList[$id] = $row; } } return $resourceList; } // crmv@194723e crmv@202029e }