* SPDX-License-Identifier: AGPL-3.0-only ************************************/ require_once("include/utils/EntityColorUtils.php"); // crmv@105538 /** * Description of ListViewController * * @author MAK */ class ListViewController extends SDKExtendableClass { /** * * @var QueryGenerator */ protected $queryGenerator; /** * * @var PearDatabase */ protected $db; protected $nameList; protected $typeList; protected $ownerNameList; protected $user; protected $picklistValueMap; protected $picklistRoleMap; protected $headerSortingEnabled; public function __construct($db, $user, $generator) { $this->queryGenerator = $generator; $this->db = $db; $this->user = $user; $this->nameList = array(); $this->typeList = array(); $this->ownerNameList = array(); $this->picklistValueMap = array(); $this->picklistRoleMap = array(); $this->headerSortingEnabled = true; } public function isHeaderSortingEnabled() { return $this->headerSortingEnabled; } public function setHeaderSorting($enabled) { $this->headerSortingEnabled = $enabled; } public function setupAccessiblePicklistValueList($name) { $isRoleBased = vtws_isRoleBasedPicklist($name); $this->picklistRoleMap[$name] = $isRoleBased; if ($this->picklistRoleMap[$name]) { $this->picklistValueMap[$name] = getAssignedPicklistValues($name, $this->user->roleid, $this->db, '', '', false, false); //crmv@27889 //crmv@29102 if($name == 'activitytype'){ $this->picklistValueMap[$name]['Task'] = getTranslatedString('Task','Calendar'); } //crmv@29102e } } //crmv@42931 public function setQueryGenerator($generator) { $this->queryGenerator = $generator; } //crmv@42931e public function fetchNameList($field, $result) { $referenceFieldInfoList = $this->queryGenerator->getReferenceFieldInfoList(); $fieldName = $field->getFieldName(); $rowCount = $this->db->num_rows($result); $idList = array(); for ($i = 0; $i < $rowCount; $i++) { $id = $this->db->query_result($result, $i, $field->getColumnName()); if (!isset($this->nameList[$fieldName][$id])) { $idList[$id] = $id; } } //crmv@fix empty array $idList = array_values(array_filter(array_keys($idList))); //crmv@fix empty array end if(count($idList) == 0) { return; } $moduleList = $referenceFieldInfoList[$fieldName]; foreach ($moduleList as $module) { $meta = $this->queryGenerator->getMeta($module); if ($meta->isModuleEntity()) { if($module == 'Users') { $nameList = getOwnerNameList($idList); } else { //TODO handle multiple module names overriding each other. $nameList = getEntityName($module, $idList); } } else { $nameList = vtws_getActorEntityName($module, $idList); } //crmv@fix empty array if(count($nameList) == 0) { continue; } $entityTypeList = array_intersect(array_keys($nameList), $idList); foreach ($entityTypeList as $id) { $this->typeList[$id] = $module; } if(empty($this->nameList[$fieldName])) { $this->nameList[$fieldName] = array(); } foreach ($entityTypeList as $id) { $this->typeList[$id] = $module; $this->nameList[$fieldName][$id] = $nameList[$id]; } } } /**This function generates the List view entries in a list view * Param $focus - module object * Param $result - resultset of a listview query * Param $navigation_array - navigation values in an array * Param $relatedlist - check for related list flag * Param $returnset - list query parameters in url string * Param $edit_action - Edit action value * Param $del_action - delete action value * Param $oCv - vte_customview object * Returns an array type */ function getListViewEntries($focus,$module,$result,$navigationInfo,$skipActions=false,$listview_entries_other='',$otherActions=array()) { //crmv@34627 //crmv@OPER6288 // crmv@167234 VteSession::set('query_show', $result->sql); //crmv@show_query // crmv@39110 $userid = $this->user->id; require('user_privileges/requireUserPrivileges.php'); // crmv@39110e global $listview_max_textlength,$theme,$default_charset,$current_user,$table_prefix,$showfullusername; if (!isset($otherActions['moreInformation'])) $otherActions['moreInformation'] = true; //crmv@161440 $InventoryUtils = InventoryUtils::getInstance(); // crmv@42024 $ECU = EntityColorUtils::getInstance(); // crmv@105538 $TU = ThemeUtils::getInstance($theme); $fields = $this->queryGenerator->getFields(); $whereFields = $this->queryGenerator->getWhereFields(); $meta = $this->queryGenerator->getMeta($this->queryGenerator->getModule()); $tabid = getTabid($module); //crmv@7230 //crmv@62929 //$moduleFields = $meta->getModuleFields(); $moduleFields = $this->queryGenerator->getModuleFields(); //crmv@62929e $accessibleFieldList = array_keys($moduleFields); $listViewFields = array_intersect($fields, $accessibleFieldList); $referenceFieldList = $this->queryGenerator->getReferenceFieldList(); foreach ($referenceFieldList as $fieldName) { if (in_array($fieldName, $listViewFields)) { $field = $moduleFields[$fieldName]; $this->fetchNameList($field, $result); } } $db = PearDatabase::getInstance(); $rowCount = $db->num_rows($result); $idList = array(); $ownerFieldList = $this->queryGenerator->getOwnerFieldList(); if (!empty($ownerFieldList)) { foreach ($ownerFieldList as $fieldName) { if (in_array($fieldName, $listViewFields)) { $field = $moduleFields[$fieldName]; for ($i = 0; $i < $rowCount; $i++) { $id = $this->db->query_result($result, $i, $field->getColumnName()); if (!isset($this->ownerNameList[$id])) $idList[] = $id; } } } } $referenceFieldInfoList = $this->queryGenerator->getReferenceFieldInfoList(); if (!empty($referenceFieldInfoList)) { foreach ($referenceFieldInfoList as $fieldName => $moduleList) { if (count($moduleList) == 1 && in_array($moduleList[0],array('Users','Groups'))) { if (in_array($fieldName, $listViewFields)) { $field = $moduleFields[$fieldName]; for ($i = 0; $i < $rowCount; $i++) { $id = $this->db->query_result($result, $i, $field->getColumnName()); if (!isset($this->ownerNameList[$id])) $idList[] = $id; } } } } } if (!empty($idList)) { $groupNameList = array(); $this->ownerNameList = getOwnerNameList($idList, $showfullusername, $groupNameList); } foreach ($listViewFields as $fieldName) { $field = $moduleFields[$fieldName]; //crmv@9433 $conditional_fieldid[] = $field->getFieldId(); //crmv@9433 end if(!$is_admin && ($field->getFieldDataType() == 'picklist' || $field->getFieldDataType() == 'multipicklist')) { $this->setupAccessiblePicklistValueList($fieldName); } } //crmv@9433 if (vtlib_isModuleActive('Conditionals') && !is_admin($current_user)){ //crmv@36505 $conditionals_obj = CRMEntity::getInstance('Conditionals'); $conditional_fields_arr = $conditionals_obj->getConditionalFields($module); //crmv@36505 e } //crmv@9433 end //crmv@34627 $secondary_fields = $this->queryGenerator->getSecondaryFields(); if (!empty($secondary_fields)) { foreach($secondary_fields as $secondary_module => $sec_fields) { $meta_sec = $this->queryGenerator->getMeta($secondary_module); $secModuleFields[$secondary_module] = $meta_sec->getModuleFields(); $i = 0; foreach($sec_fields as $sec_field) { if (isset($secModuleFields[$secondary_module][$sec_field])) { //crmv@145724 $sec_field_instance = $secModuleFields[$secondary_module][$sec_field]; $listViewFields[] = $secondary_module.'::'.$sec_field.'::'.$i++; } } } } //crmv@34627e $data = array(); for ($i = 0; $i < $rowCount; ++$i) { //Getting the recordId if($module != 'Users') { $baseTable = $meta->getEntityBaseTable(); $moduleTableIndexList = $meta->getEntityTableIndexList(); $baseTableIndex = $moduleTableIndexList[$baseTable]; $recordId = $db->query_result($result,$i,$baseTableIndex); $ownerId = $db->query_result($result,$i,"smownerid"); } else { $recordId = $db->query_result($result,$i,"id"); } //crmv@17001 : Private Permissions if($module == 'Calendar') { $visibility = $db->query_result($result,$i,"visibility"); $activityType = $this->db->query_result($result, $i, 'activitytype'); //crmv@21618 } //crmv@17001e $row = array(); //crmv@9433 if (vtlib_isModuleActive('Conditionals') && !is_admin($current_user) && is_array($conditional_fields_arr)){ foreach ($conditional_fields_arr as $arr_cond){ $conditional_column_fields[$arr_cond['fieldname']] = $this->db->query_result($result, $i, $arr_cond['columnname']); // crmv@178440 } //crmv@36505 $conditionals_obj = CRMEntity::getInstance('Conditionals'); $conditionals_obj->Initialize($module,$tabid,$conditional_column_fields); //crmv@36505 e $conditional_rules = $conditionals_obj->permissions; } //crmv@9433 end if ($module != 'Messages') { //crmv@18744 //Added for Actions ie., edit and delete links in listview $actionLinkInfo = ""; $editPermission = isPermitted($module,"EditView",""); $deletePermission = isPermitted($module,"Delete",""); //crmv@179057 if($editPermission == 'yes' && $module != 'Sms'){ //crmv@16703 //crmv@fix Calendar $edit_link = $this->getListViewEditLink($module,$recordId,$activityType); //crmv@fix Calendar end if (isset($navigationInfo['start']) && $navigationInfo['start'] > 1) { $actionLinkInfo .= "create "; } else { $actionLinkInfo .= "create "; } } if($deletePermission == 'yes'){ //crmv@179057 $del_link = $this->getListViewDeleteLink($module,$recordId); if($actionLinkInfo != "" && $del_link != "") $actionLinkInfo .= " "; if($del_link != "") $actionLinkInfo .= "clear"; //crmv@144123 } // Record Change Notification //crmv@23685 $change_indic = PerformancePrefs::getBoolean('LISTVIEW_RECORD_CHANGE_INDICATOR', true); if(method_exists($focus, 'isViewed') && $change_indic) { //crmv@23685e if(!$focus->isViewed($recordId)) { $actionLinkInfo .= " "; } } // END //crmv@56233 if ($editPermission == 'yes' && $deletePermission == 'yes' && $module == 'HelpDesk') { //crmv@179057 $mailscanner_action = $this->db->query_result($result, $i, 'mailscanner_action'); if (!empty($mailscanner_action)) { $actionLinkInfo .= " whatshot "; } } //crmv@56233e if(!$skipActions && ($change_indic || $actionLinkInfo != "")) { //crmv@23685 $row[] = $actionLinkInfo; } //crmv@18744e } foreach ($listViewFields as $fieldName) { //crmv@34627 if(strpos($fieldName,'::') !== false) { $rawValue = $this->db->query_result($result, $i, strtolower($fieldName)); $tmp = explode('::',$fieldName); $tmp_value = $listview_entries_other[$tmp[0]][$rawValue][$tmp[2]]; //N->1 if (empty($tmp_value) && !empty($listview_entries_other[$tmp[0]])) { $tmp_value = getRelationFields($this->queryGenerator->getModule(), $tmp[0], $rawValue, array_keys($listview_entries_other[$tmp[0]])); if (!empty($fieldinfo['ids']) && is_array($fieldinfo['ids']) && count($fieldinfo['ids']) > 1) { // crmv@198985 foreach($tmp_value['fields']['indirect'] as $fieldid=>$fieldinfo) { if (!empty($fieldinfo['ids']) && count($fieldinfo['ids']) > 1) { $tmp_value = ''.getTranslatedString('LBL_MULTIPLE').''; } elseif (!empty($fieldinfo['ids']) && is_array($fieldinfo['ids']) && count($fieldinfo['ids']) == 1) { // crmv@198985 $tmp_value = $listview_entries_other[$tmp[0]][$fieldinfo['ids'][0]][$tmp[2]]; } else { $tmp_value = ''; } break; } } elseif (is_array($tmp_value['related']) && !empty($tmp_value['related'])) { //N->N foreach($tmp_value['related'] as $rel_module=>$rel_ids) { if (!empty($rel_ids) && is_array($rel_ids) && count($rel_ids) > 1) { // crmv@198985 $tmp_value = ''.getTranslatedString('LBL_MULTIPLE').''; } elseif (!empty($rel_ids) && is_array($rel_ids) && count($rel_ids) == 1) { // crmv@198985 $tmp_value = $listview_entries_other[$tmp[0]][$rel_ids[0]][$tmp[2]]; } else { $tmp_value = ''; } break; } } else { $tmp_value = ''; } } $value = ''; if (!empty($tmp_value)) { $value = $tmp_value; } $row[] = $value; continue; } //crmv@34627e $field = $moduleFields[$fieldName]; $uitype = $field->getUIType(); $rawValue = $this->db->query_result($result, $i, $field->getColumnName()); //crmv@fix Calendar if($module == 'Calendar' && ($fieldName=='status' || $fieldName=='taskstatus')){ //crmv@33466 if($activityType == 'Task'){ $fieldName='taskstatus'; } else { $fieldName='eventstatus'; $rawValue = $this->db->query_result($result, $i, $fieldName); } } //crmv@fix Calendar end if(stristr(html_entity_decode($rawValue), "getUIType() != 8 && $field->getUIType() != 207 && !($field->getFieldDataType() == 'picklist' || $field->getFieldDataType() == 'multipicklist')){ //crmv@29102 // crmv@206419 $value = textlength_check($rawValue); // crmv@126043 }elseif($uitype == 8 || $uitype == 300){ $value = $rawValue; }else{ $value = html_entity_decode($rawValue,ENT_QUOTES); } // crmv@126043e //crmv@9433 crmv@sdk-18508 if (vtlib_isModuleActive('Conditionals')){ $conditional_permissions = null; if(!is_admin($current_user) && $fieldName != "") { $conditional_permissions = $conditional_rules[$field->getFieldId()]; } } $readonly = $field->getReadOnly(); if(vtlib_isModuleActive('Conditionals') && $conditional_permissions != null && $conditional_permissions['f2fp_visible'] == "0") { $readonly = 100; } $sdk_files = SDK::getViews($module,'list'); if (!empty($sdk_files)) { foreach($sdk_files as $sdk_file) { $success = false; $readonly_old = $readonly; $fieldname = $fieldName; include($sdk_file['src']); SDK::checkReadonly($readonly_old,$readonly,$sdk_file['mode']); if ($success && $sdk_file['on_success'] == 'stop') { break; } } } if ($readonly == 100) { $value = "".getTranslatedString('LBL_NOT_ACCESSIBLE').""; } //crmv@9433 end crmv@sdk-18508e // Private Permissions: crmv@17001 crmv@158871 elseif ($module == 'Calendar' && $focus->isFieldMasked($recordId, $fieldName, array('assigned_user_id' => $ownerId, 'visibility' => $visibility))) { // crmv@187823 if ($fieldName == 'subject') $value = getTranslatedString('Private Event','Calendar'); else $value = "".getTranslatedString('LBL_NOT_ACCESSIBLE').""; } //crmv@17001e crmv@158871e elseif($module == 'Documents' && $fieldName == 'filename') { $downloadtype = $db->query_result($result,$i,'filelocationtype'); if($downloadtype == 'I' || $downloadtype == 'B') { // crmv@95157 $ext =substr($value, strrpos($value, ".") + 1); $ext = strtolower($ext); if($value != ''){ if($ext == 'bin' || $ext == 'exe' || $ext == 'rpm') { $fileicon = ""; } elseif($ext == 'jpg' || $ext == 'gif' || $ext == 'bmp') { $fileicon = ""; } elseif($ext == 'txt' || $ext == 'doc' || $ext == 'xls') { $fileicon = ""; } elseif($ext == 'zip' || $ext == 'gz' || $ext == 'rar') { $fileicon = ""; } else { $fileicon = ""; } } } elseif($downloadtype == 'E') { if(trim($value) != '' ) { $fileicon = "".getTranslatedString("; } else { $value = '--'; $fileicon = ''; } } else { $value = ' --'; $fileicon = ''; } $fileName = $db->query_result($result,$i,'filename'); $downloadType = $db->query_result($result,$i,'filelocationtype'); $status = $db->query_result($result,$i,'filestatus'); $fileIdQuery = "select attachmentsid from ".$table_prefix."_seattachmentsrel where crmid=?"; $fileIdRes = $db->pquery($fileIdQuery,array($recordId)); $fileId = $db->query_result($fileIdRes,0,'attachmentsid'); if($fileName != '' && $status == 1) { if($downloadType == 'I' || $downloadtype == 'B') { // crmv@95157 $value = html_entity_decode($value,ENT_QUOTES,$default_charset); //crmv@131416 $value = "".$value. ""; } elseif($downloadType == 'E') { $value = "".$value. ""; } else { $value = ' --'; } } $value = $fileicon.$value; } elseif($module == 'Documents' && $fieldName == 'filesize') { $downloadType = $db->query_result($result,$i,'filelocationtype'); if($downloadType == 'I' || $downloadType == 'B') { // crmv@95157 $filesize = $value; if($filesize < 1024) $value=$filesize.' B'; elseif($filesize > 1024 && $filesize < 1048576) $value=round($filesize/1024,2).' KB'; else if($filesize > 1048576) $value=round($filesize/(1024*1024),2).' MB'; } else { $value = ' --'; } } elseif( $module == 'Documents' && $fieldName == 'filestatus') { if($value == 1) $value=getTranslatedString('yes',$module); elseif($value == 0) $value=getTranslatedString('no',$module); else $value='--'; } elseif( $module == 'Documents' && $fieldName == 'filetype') { // crmv@95157 $downloadType = $db->query_result($result,$i,'filelocationtype'); if($downloadType != 'I' && $downloadType != 'B') { $value = '--'; } // crmv@95157e //crmv@sdk-18509 } elseif(SDK::isUitype($field->getUIType())) { $sdk_file = SDK::getUitypeFile('php','list',$field->getUIType()); $sdk_value = $value; if ($sdk_file != '') { include($sdk_file); } //crmv@sdk-18509 e } elseif ($field->getUIType() == '27') { // crmv@95157 if ($value == 'I') { $value = getTranslatedString('LBL_INTERNAL',$module); }elseif ($value == 'E') { $value = getTranslatedString('LBL_EXTERNAL',$module); }elseif ($value == 'B') { $SBU = StorageBackendUtils::getInstance(); $backend = $db->query_result_no_html($result,$i,'backend_name'); if (empty($backend)) { $backend = $SBU->getBackendForCrmid($module, $recordId); } $value = $SBU->getBackendLabel($backend); }else { $value = ' --'; } // crmv@95157e }elseif ($field->getFieldDataType() == 'picklist') { //crmv@27889 $value = correctEncoding($value); if ($value != '' && !$is_admin && $this->picklistRoleMap[$fieldName] && !in_array($value, array_keys($this->picklistValueMap[$fieldName]))) { //crmv@27889e $value = "".getTranslatedString('LBL_NOT_ACCESSIBLE', $module).""; } else { //crmv@fix translate $value = textlength_check(getTranslatedString($value,$module)); //crmv@fix translate end } //crmv@picklistmultilanguage }elseif ($field->getFieldDataType() == 'picklistmultilanguage') { $value = textlength_check(PickListMulti::getTranslatedPicklist($value,$fieldName)); //crmv@picklistmultilanguage end }elseif($field->getFieldDataType() == 'date' || $field->getFieldDataType() == 'datetime') { //crmv@fix date if ($field->getFieldDataType() == 'date'){ $value = substr($value,0,10); //crmv@calendar fix if ($module == 'Calendar' && $fieldName == 'date_start'){ $time_start = $this->db->query_result($result, $i, 'time_start'); $value .= " $time_start"; } //crmv@16703 if ($module == 'Sms' && $fieldName == 'date_start'){ $sql="select sms_flag from ".$table_prefix."_smsdetails where smsid=?"; $tmp_res=$db->pquery($sql, array($recordId)); $sms_flag=$db->query_result($tmp_res,0,"sms_flag"); if($sms_flag != 'SENT') $value = ''; } //crmv@16703e } // crmv@25610 crmv@50039 $removetime = false; if ($module == 'Calendar' && $fieldName == 'due_date'){ $value .= ' '.$this->db->query_result($result, $i, 'time_end'); $removetime = true; } $value = adjustTimezone($value, 0, null, false); if ($module == 'Calendar' && $fieldName == 'date_start'){ //remove seconds $value = substr($value, 0, 16); } if ($removetime) $value = substr($value, 0, 10); // crmv@25610e //crmv@fix date end //crmv@2963m //crmv@3083m if(($module == 'Messages' && $fieldName == 'mdate') || $module == 'MyNotes') { $value = $focus->getFriendlyDate($value); //crmv@2963me //crmv@3083me } elseif($value != '' && $value != '0000-00-00') { $value = getDisplayDate($value); } elseif ($value == '0000-00-00') { $value = ''; } } elseif(in_array($fieldName,array('time_start','time_end')) && $module == 'Calendar' && !empty($value)) { $value = adjustTimezone($value, 0, null, false); // crmv@50039 // strip the date (if the date is different, there's a problem) if (strlen($value) > 5) { $value = substr($value, -8, 5); } } elseif($field->getUIType() == 71 || $field->getUIType() == 72) { if($value != '') { if(in_array($fieldName, array('unit_price', 'unit_cost'))) { // crmv@92112 $currencyId = $InventoryUtils->getProductBaseCurrency($recordId,$module); // crmv@42024 $cursym_convrate = getCurrencySymbolandCRate($currencyId); $value = "".$cursym_convrate['symbol']. " ". formatUserNumber(floatval($value)); // crmv@42024 } else { //changes made to remove vte_currency symbol infront of each //vte_potential amount if ($value != 0) { $value = convertFromMasterCurrency($value, $user_info['conv_rate']); // crmv@92519 } $value = formatUserNumber(floatval($value)); // crmv@83877 } } // crmv@83877 crmv@92112 } elseif($field->getUIType() == 7 || $field->getUIType() == 9) { if ($value !== '') { $value = formatUserNumber(floatval($value), true); } // crmv@83877e crmv@92112e } elseif($field->getFieldDataType() == 'url') { // crmv@159970 $url_scheme = parse_url($rawValue, PHP_URL_SCHEME); $scheme = empty($url_scheme) ? 'http://' : ''; $value = ''.$value.''; // crmv@159970e //crmv@28670 }elseif($fieldName == 'salutation') { //crmv@60730 avoid translating name $value = getTranslatedString($value,$module); //crmv@28670e } elseif ($field->getFieldDataType() == 'email') { if(VteSession::get('internal_mailer') == 1) { //check added for email link in user detailview $fieldId = $field->getFieldId(); $value = "$value"; }else { $value = ''.$value.''; } } elseif($field->getFieldDataType() == 'boolean') { // crmv@67339 crmv@94838 if ($field->getFieldName() == 'newsletter_unsubscrpt') { $focusnl = CRMEntity::getInstance('Newsletter'); if (array_key_exists($module, $focusnl->email_fields)) { $mailTable = $focusnl->email_fields[$module]['tablename']; $mailField = $focusnl->email_fields[$module]['columnname']; $sql = "SELECT {$mailField} as email FROM {$mailTable} WHERE {$baseTableIndex} = ?"; $nlres = $this->db->pquery($sql, array($recordId)); if ($nlres && $this->db->num_rows($nlres) > 0) { $email_check = $this->db->query_result($nlres,0,'email'); $value = intval($focusnl->receivingNewsletter($email_check)); } } } // crmv@67339e crmv@94838e if($value == 1) { $value = getTranslatedString('yes',$module); } elseif($value == 0) { $value = getTranslatedString('no',$module); } else { $value = '--'; } } elseif($field->getUIType() == 98) { $value = ''.textlength_check(getRoleName($value)).''; } elseif($field->getFieldDataType() == 'multipicklist') { $value = correctEncoding($value); $valueArray = ($value != "") ? explode(' |##| ',$value) : array(); $notaccess = ''.getTranslatedString('LBL_NOT_ACCESSIBLE', $module).""; $tmp = ''; $tmpArray = array(); foreach($valueArray as $index => $val) { if(!$listview_max_textlength || !(strlen(preg_replace("/(<\/?)(\w+)([^>]*>)/i","",$tmp)) > $listview_max_textlength)) { if (!$is_admin && $this->picklistRoleMap[$fieldName] && !in_array(trim($val), array_keys($this->picklistValueMap[$fieldName]))) { //crmv@27889 $tmpArray[] = $notaccess; $tmp .= ', '.$notaccess; } else { $tmpArray[] = getTranslatedString($val,$module); $tmp .= ', '.getTranslatedString($val,$module); } } else { $tmpArray[] = '...'; $tmp .= '...'; } } $value = implode(', ', $tmpArray); } elseif ($field->getFieldDataType() == 'skype') { $value = ($value != "") ? "$value" : ""; //crmv@17471 } elseif ($field->getFieldDataType() == 'phone' && get_use_asterisk($current_user->id) == 'true') { $value = "$value"; //crmv@17471 end } elseif($field->getFieldDataType() == 'reference') { $referenceFieldInfoList = $this->queryGenerator->getReferenceFieldInfoList(); $moduleList = $referenceFieldInfoList[$fieldName]; if(count($moduleList) == 1) { $parentModule = $moduleList[0]; } else { $parentModule = $this->typeList[$value]; } if(!empty($value) && !empty($this->nameList[$fieldName]) && !empty($parentModule)) { $tmp_reference_value = $value; if ($parentModule == 'Users') { $value = textlength_check($this->ownerNameList[$value]); if (isset($groupNameList[$tmp_reference_value]) && $otherActions['moreInformation']) { //crmv@161440 $value .= $this->getMoreInformationsDiv($recordId,$fieldName,implode('
',$groupNameList[$tmp_reference_value])); } } else { $parentMeta = $this->queryGenerator->getMeta($parentModule); $value = textlength_check($this->nameList[$fieldName][$value]); if ($parentModule == 'Groups') { if (isset($groupNameList[$tmp_reference_value]) && $otherActions['moreInformation']) { //crmv@161440 $value .= $this->getMoreInformationsDiv($recordId,$fieldName,implode('
',$groupNameList[$tmp_reference_value])); } } elseif ($parentMeta->isModuleEntity()) { $value = "$value"; } } // crmv@132073 } elseif(!empty($value)) { $parentModule = getSalesEntityType($value); $rawValue = $value; $name = getEntityName($parentModule,$value); $value = $name[$rawValue]; $value = textlength_check($value); if ($parentModule != "Users") { $value = "$value"; } // crmv@132073e } else { $value = '--'; } } elseif($field->getFieldDataType() == 'owner') { //crmv@OPER6288 if (isset($otherActions['doNotEvaluate']) && in_array($fieldName,$otherActions['doNotEvaluate'])) { // do nothing } else { $tmp_userid = $value; $value = textlength_check($this->ownerNameList[$value]); if (isset($groupNameList[$tmp_userid]) && $otherActions['moreInformation']) { //crmv@161440 $value .= $this->getMoreInformationsDiv($recordId,$fieldName,implode('
',$groupNameList[$tmp_userid])); } } //crmv@OPER6288e } elseif ($field->getUIType() == 25) { //TODO clean request object reference. $contactId=$_REQUEST['record']; $emailId=$this->db->query_result($result,$i,"activityid"); $result1 = $this->db->pquery("SELECT access_count FROM ".$table_prefix."_email_track WHERE ". "crmid=? AND mailid=?", array($contactId,$emailId)); $value=$this->db->query_result($result1,0,"access_count"); if(!$value) { $value = 0; } } elseif($field->getUIType() == 8){ if(!empty($value)){ $temp_val = html_entity_decode($value,ENT_QUOTES,$default_charset); $json = new Zend_Json(); $value = vt_suppressHTMLTags(implode(',',$json->decode($temp_val))); } } //crmv@18338 elseif($field->getUIType() == 1020){ $temp_val = $value; $value=time_duration(abs($temp_val)); if (strpos($fieldName,"remaining")!==false || strpos($fieldName,"_out_")!==false){ if (strpos($fieldName,"remaining")!==false){ if ($temp_val<=0) $color = "red"; else $color = "green"; } if (strpos($fieldName,"_out_")!==false){ if ($temp_val>0) $color = "red"; else $color = "green"; } $value = "$value"; } } //crmv@18338 end elseif ($fieldName == 'expectedroi' || $fieldName == 'actualroi' || $fieldName == 'actualcost' || $fieldName == 'budgetcost' || $fieldName == 'expectedrevenue') { $rate = $user_info['conv_rate']; $value = convertFromDollar($value,$rate); // crmv@42024 } elseif (isInventoryModule($module) && (in_array($fieldName, array('hdnGrandTotal', 'hdnSubTotal', 'txtAdjustment', 'hdnDiscountAmount', 'hdnS_H_Amount')))) { $currencyInfo = $InventoryUtils->getInventoryCurrencyInfo($module, $recordId); $currencyId = $currencyInfo['currency_id']; $currencySymbol = $currencyInfo['currency_symbol']; $value = $currencySymbol." ".formatUserNumber(floatval($value)); // crmv@42024e //crmv@21092 crmv@23734 } elseif ($field->getFieldDataType() == 'text') { //crmv@2963m if ($module == 'Messages' && ($fieldName == 'description' || $fieldName == 'cleaned_body')) { // crmv@93095 $layout = $focus->getLayoutSettings(); if (empty($layout['list_descr_preview'])) { $value = ''; } else { $value = $focus->getPreviewBody($rawValue); } } else { //crmv@2963me $temp_val = preg_replace("/(<\/?)(\w+)([^>]*>)/i","",$rawValue); $temp_val = trim(html_entity_decode($temp_val, ENT_QUOTES, $default_charset)); $temp_val = nl2br($temp_val); if ($value != '' && strlen($temp_val) > $listview_max_textlength && $otherActions['moreInformation']) { //crmv@161440 $value .= $this->getMoreInformationsDiv($recordId,$fieldName,$temp_val); //crmv@59091 crmv@68641 } } //crmv@21092e crmv@23734e } if ( in_array($uitype,array(71,72,7,9,90)) ) { $value = "$value"; } //crmv@16312 $nameFields = $this->queryGenerator->getModuleNameFields($module); $nameFieldList = explode(',',$nameFields); if(in_array($fieldName, $nameFieldList) && $module != 'Messages') { //crmv@2963m $parenttab = getParentTab(); // performance fix $value = "$value"; } elseif($fieldName == $focus->list_link_field && $module != 'Messages') { //crmv@2963m $parenttab = getParentTab(); // performance fix $value = "$value"; } //crmv@16312 end // vtlib customization: For listview javascript triggers $value = "$value "; // END //crmv@2963m if ($module == 'Messages') { $row[$fieldName] = $value; } else { $row[] = $value; } //crmv@2963me } //crmv@2963m if ($module == 'Messages') { $row['thread'] = $db->query_result($result,$i,"thread"); } //crmv@2963me //crmv@7230 crmv@10445 crmv@105538 $clvValue = ""; $blend = !(isset($otherActions['KanbanView']) && isset($otherActions['KanbanView']) === true); $clvColor = $ECU->getEntityColor($module, $recordId, $clvValue, $blend); if ($clvColor) { $row['clv_color'] = $clvColor; $row['clv_status'] = getTranslatedString($clvValue); // crmv@187406 $row['clv_foreground'] = ''; if ($TU->isDarkModePermitted($current_user)) { $clvForeground = $ECU->getForegroundColor($clvColor); $row['clv_foreground'] = $clvForeground; } // crmv@187406e } //crmv@7230e crmv@10445e crmv@105538e $data[$recordId] = $row; } //crmv@94282 if ($module == 'Messages' && count($data) == $navigationInfo['list_max_entries_per_query']) { $this->override_params['has_next_page'] = true; array_pop($data); } //crmv@94282e return $data; } //crmv@94282 crmv@OPER8279 function getListViewEntriesLight($focus,$module,$result,$navigationInfo,$skipActions=false,$listview_entries_other='') { global $adb, $table_prefix; $ret_arr = Array(); switch ($module){ case 'Messages': if ($result){ $numrows = $adb->num_rows($result); if ($numrows == $navigationInfo['list_max_entries_per_query']){ $limit_cnt = $numrows-1; $this->override_params['has_next_page'] = true; } else { $limit_cnt = $numrows; } $cnt = 0; while($row=$adb->fetchByAssoc($result,-1,false)){ ($focus->haveAttachments($row['messagesid'])) ? $row['has_attachments'] = 1 : $row['has_attachments'] = 0; $ret_arr[$row['messagesid']] = $this->getListViewEntryLight($focus,$module,$row); if (++$cnt == $limit_cnt){ break; } } } break; default: $ret_arr = $this->getListViewEntries($focus,$module,$result,$navigationInfo,$skipActions,$listview_entries_other); break; } return $ret_arr; } function getListViewEntryLight($focus,$module,$row) { $ret_arr = array(); switch ($module){ case 'Messages': $layout = $focus->getLayoutSettings(); if (empty($layout['list_descr_preview'])) { $row['cleaned_body'] = ''; } else { $row['cleaned_body'] = $focus->getPreviewBody($row['cleaned_body']); } // crmv@136430 $mdate = $row['mdate']; if (empty($mdate) || $mdate == '0000-00-00 00:00:00') { $mdate = ''; } else { $mdate = $focus->getFriendlyDate($mdate); } // crmv@136430e $ret_arr = Array( 'subject'=>textlength_check(to_html($row['subject'])), 'mdate'=>$mdate, // crmv@136430 'mfrom'=>to_html($row['mfrom']), 'mfrom_n'=>to_html($row['mfrom_n']), 'mfrom_f'=>to_html($row['mfrom_f']), 'mto'=>to_html($row['mto']), 'mto_n'=>to_html($row['mto_n']), 'mto_f'=>textlength_check(to_html($row['mto_f'])), 'cleaned_body'=>$row['cleaned_body'], 'seen'=>($row['seen']=='1')?'yes':'no', 'answered'=>($row['answered']=='1')?'yes':'no', 'forwarded'=>($row['forwarded']=='1')?'yes':'no', 'flagged'=>($row['flagged']=='1')?'yes':'no', 'has_attachments'=>($row['has_attachments']=='1')?'yes':'no', 'thread'=>to_html($row['thread']), 'xuid'=>$row['xuid'], 'folder'=>$row['folder'], 'account'=>$row['account'], ); break; } return $ret_arr; } //crmv@94282e crmv@OPER8279e public function getListViewEditLink($module,$recordId, $activityType='') { if($module != 'Calendar') { $return_action = "index"; } else { $return_action = 'ListView'; } //Added to fix 4600 $url = getBasic_Advance_SearchURL(); $parent = getParentTab(); //Appending view name while editing from ListView $link = "index.php?module=$module&action=EditView&record=$recordId&return_module=$module". "&return_action=$return_action&parenttab=$parent".$url."&return_viewname=". getLVS($module,"viewname"); if($module == 'Calendar') { if($activityType == 'Task') { $link .= '&activity_mode=Task'; } else { $link .= '&activity_mode=Events'; } } return $link; } // modified to use a template for the non changing part of the url public function getListViewDeleteLink($module,$recordId) { static $linkTplCache = array(); $requestRecord = intval($_REQUEST['record']); $requestModule = vtlib_purify($_REQUEST['module']); if (!isset($linkTplCache[$module.'_'.$requestModule])) { //crmv@16312 $parenttab = getParentTab(); $viewname = getLVS($module,'viewname'); //Added to fix 4600 $url = getBasic_Advance_SearchURL(); if($module == "Calendar") $return_action = "ListView"; else $return_action = "index"; //This is added to avoid the del link in Product related list for the following modules $link = "index.php?module=$module&action=Delete&record={RECORDID}". "&return_module=$module&return_action=$return_action". "&parenttab=$parenttab&return_viewname=".$viewname.$url; //crmv@16312 end // vtlib customization: override default delete link for custom modules $requestAction = vtlib_purify($_REQUEST['action']); //crmv@39135 if ($requestAction == $requestModule.'Ajax') { $requestAction = vtlib_purify($_REQUEST['file']); } //crmv@39135e $parenttab = vtlib_purify($_REQUEST['parenttab']); $isCustomModule = vtlib_isCustomModule($requestModule); if($isCustomModule && !in_array($requestAction, Array('index','ListView'))) { $link = "index.php?module=$requestModule&action=updateRelations&parentid={REQRECORDID}"; $link .= "&destination_module=$module&idlist=$entity_id&mode=delete&parenttab=$parenttab"; } // END $linkTplCache[$module.'_'.$requestModule] = $link; } $link = $linkTplCache[$module.'_'.$requestModule]; $link = str_replace(array("{RECORDID}", "{REQRECORDID}"), array($recordId, $requestRecord), $link); return $link; } public function getListViewHeader($focus, $module,$sort_qry='',$sorder='',$orderBy='', $skipActions=false,$folderid='') { //crmv@83034 global $log;//crmv@203484 removed global singlepane global $theme; //crmv@203484 $VTEP = VTEProperties::getInstance(); $singlepane_view = $VTEP->getProperty('layout.singlepane_view'); //crmv@203484e $arrow=''; $qry = getURLstring($focus); $theme_path="themes/".$theme."/"; $image_path=$theme_path."images/"; $header = Array(); //Get the vte_tabid of the module $tabid = getTabid($module); $tabname = getParentTab(); global $current_user; require('user_privileges/requireUserPrivileges.php'); // crmv@39110 $fields = $this->queryGenerator->getFields(); $whereFields = $this->queryGenerator->getWhereFields(); $meta = $this->queryGenerator->getMeta($this->queryGenerator->getModule()); //crmv@62929 //$moduleFields = $meta->getModuleFields(); $moduleFields = $this->queryGenerator->getModuleFields(); //crmv@62929 e $accessibleFieldList = array_keys($moduleFields); $listViewFields = array_intersect($fields, $accessibleFieldList); //crmv@18744 crmv@23685 //Added for Action - edit and delete link header in listview $change_indic = PerformancePrefs::getBoolean('LISTVIEW_RECORD_CHANGE_INDICATOR', true); if(!$skipActions && ($change_indic || isPermitted($module,"EditView","") == 'yes' || isPermitted($module,"Delete","") == 'yes')) { $header[] = getTranslatedString("LBL_ACTION", $module); } //crmv@18744e crmv@23685e //Added on 14-12-2005 to avoid if and else check for every list //vte_field for arrow image and change order $change_sorder = array('ASC'=>'DESC','DESC'=>'ASC'); $arrow_gif = array('ASC'=>'arrow_down.gif','DESC'=>'arrow_up.gif'); $arrow_cls = array('ASC'=>'down','DESC'=>'up'); (!empty($folderid)) ? $folder_string = '&folderid='.$folderid : $folder_string = ''; //crmv@83034 foreach($listViewFields as $fieldName) { $field = $moduleFields[$fieldName]; if(in_array($field->getColumnName(),$focus->sortby_fields)) { if($orderBy == $field->getColumnName()) { $temp_sorder = $change_sorder[$sorder]; $arrow = " arrow_drop_{$arrow_cls[$sorder]}"; } else { $temp_sorder = 'ASC'; } $label = getTranslatedString($field->getFieldLabelKey(), $module); //added to display vte_currency symbol in listview header if($label =='Amount') { $label .=' ('.getTranslatedString('LBL_IN', $module).' '. $user_info['currency_symbol'].')'; } if($module == 'Users' && $fieldName == 'User Name') { $name = "". getTranslatedString('LBL_LIST_USER_NAME_ROLE',$module)."".$arrow.""; } else { if($this->isHeaderSortingEnabled()) { //crmv@16312 $name = "".$label."".$arrow.""; //crmv@16312 end } else { $name = $label; } } $arrow = ''; } else { $name = getTranslatedString($field->getFieldLabelKey(), $module); } //added to display vte_currency symbol in related listview header if($name =='Amount') { $name .=' ('.getTranslatedString('LBL_IN').' '.$user_info['currency_symbol'].')'; } $header[]=$name; } //crmv@34627 $secondary_fields = $this->queryGenerator->getSecondaryFields(); if (!empty($secondary_fields)) { foreach($secondary_fields as $module => $sec_fields) { $meta = $this->queryGenerator->getMeta($module); $secModuleFields = $meta->getModuleFields(); foreach($sec_fields as $sec_field) { if (isset($secModuleFields[$sec_field])) { //crmv@145724 $sec_field_instance = $secModuleFields[$sec_field]; $header[] = getTranslatedString($sec_field_instance->getFieldLabelKey(), $module); } } } } //crmv@34627e return $header; } public function getBasicSearchFieldInfoList() { $fields = $this->queryGenerator->getFields(); $whereFields = $this->queryGenerator->getWhereFields(); $meta = $this->queryGenerator->getMeta($this->queryGenerator->getModule()); //crmv@62929 //$moduleFields = $meta->getModuleFields(); $moduleFields = $this->queryGenerator->getModuleFields(); //crmv@62929e $accessibleFieldList = array_keys($moduleFields); $listViewFields = array_intersect($fields, $accessibleFieldList); $basicSearchFieldInfoList = array(); foreach ($listViewFields as $fieldName) { $field = $moduleFields[$fieldName]; $basicSearchFieldInfoList[$fieldName] = getTranslatedString($field->getFieldLabelKey(), $this->queryGenerator->getModule()); } return $basicSearchFieldInfoList; } //crmv@17997 public function getAdvancedSearchOptionString($old_mode=false) { $module = $this->queryGenerator->getModule(); //crmv@48693 $focus = CRMEntity::getInstance($module); if(method_exists($focus, 'getAdvancedSearchOptionString')) { return $focus->getAdvancedSearchOptionString($old_mode,$this,$this->queryGenerator); } //crmv@48693e $meta = $this->queryGenerator->getMeta($module); //crmv@62929 //$moduleFields = $meta->getModuleFields(); $moduleFields = $this->queryGenerator->getModuleFields(); //crmv@62929e $i =0; foreach ($moduleFields as $fieldName=>$field) { //crmv@32955 if(!in_array($field->getPresence(), array('0','2'))){ continue; } //crmv@32955e if($field->getFieldDataType() == 'reference' || $field->getFieldDataType() == 'owner') { $typeOfData = 'V'; } else if($field->getFieldDataType() == 'boolean') { $typeOfData = 'C'; } else { $typeOfData = $field->getTypeOfData(); $typeOfData = explode("~",$typeOfData); $typeOfData = $typeOfData[0]; } $label = getTranslatedString($field->getFieldLabelKey(), $module); if(empty($label)) { $label = $field->getFieldLabelKey(); } if($label == "Start Date & Time") { $fieldlabel = "Start Date"; } $selected = ''; if($i++ == 0) { $selected = "selected"; } //crmv@16312 // place option in array for sorting later $blockName = getTranslatedString($field->getBlockName(), $module); if ($old_mode){ $tableName = $field->getTableName(); //crmv@31979 $columnName = $field->getColumnName(); $OPTION_SET[$blockName][$label] = ""; //crmv@128159 crmv@159559 //crmv@31979e } else $OPTION_SET[$blockName][$label] = ""; //crmv@128159 crmv@159559 } if (!is_array($OPTION_SET)) return ''; //crmv@18917 // sort array on block label ksort($OPTION_SET, SORT_STRING); foreach ($OPTION_SET as $key=>$value) { $shtml .= ""; // sort array on field labels ksort($value, SORT_STRING); $shtml .= implode('',$value); } return $shtml; //crmv@16312 end } //crmv@17997 end //crmv@3084m public function getGridSearch($focus,$module,$sort_qry='',$sorder='',$orderBy='',$skipActions=false,&$grid_search_js_array) { $header = $grid_search_js_array = array(); //Get the vte_tabid of the module $tabid = getTabid($module); $tabname = getParentTab(); global $theme, $current_user, $default_charset; require('user_privileges/requireUserPrivileges.php'); // crmv@39110 $fields = $this->queryGenerator->getFields(); $whereFields = $this->queryGenerator->getWhereFields(); $meta = $this->queryGenerator->getMeta($this->queryGenerator->getModule()); //crmv@62929 //$moduleFields = $meta->getModuleFields(); $moduleFields = $this->queryGenerator->getModuleFields(); //crmv@62929e $accessibleFieldList = array_keys($moduleFields); $listViewFields = array_intersect($fields, $accessibleFieldList); $change_indic = PerformancePrefs::getBoolean('LISTVIEW_RECORD_CHANGE_INDICATOR', true); if(!$skipActions && ($change_indic || isPermitted($module,"EditView","") == 'yes' || isPermitted($module,"Delete","") == 'yes')) { $header[] = ''; } // crmv@99908 //TODO 33 $enable_uitypes = array(15,16,1015,/*54,*/56,300); $picklist_uitypes = array( 300 => '', 15 => '', 16 => '', 1015 => '', //54 => '', 56 => array( array('value'=>'yes','label'=>getTranslatedString('yes',$module)), array('value'=>'no','label'=>getTranslatedString('no',$module)), ), 27 => array( array('value'=>'I','label'=>getTranslatedString('LBL_INTERNAL',$module)), array('value'=>'E','label'=>getTranslatedString('LBL_EXTERNAL',$module)), ), 33 => '', ); //crmv@99908e if(!empty($_REQUEST['GridSearchCnt'])) { $grid_search_fields = array(); for($i=0;$i<$_REQUEST['GridSearchCnt'];$i++) { $value = urldecode($_REQUEST['GridSrch_value'.$i]); $value = function_exists('iconv') ? @iconv("UTF-8",$default_charset,$value) : $searchValue; // crmv@167702 $grid_search_fields[$_REQUEST['GridFields'.$i]] = $value; } } foreach($listViewFields as $fieldName) { $value = ''; if (isset($grid_search_fields[$fieldName])) { $value = $grid_search_fields[$fieldName]; } $field = $moduleFields[$fieldName]; if ($field->isReadOnly()) { $divclass = 'dvtCellInfoOff'; } else { $divclass = 'dvtCellInfo'; } $uitype = $field->getUIType(); if (isset($picklist_uitypes[$uitype])) { $select_value = array_filter(explode('|##|',$value)); $value = array(); if (!empty($picklist_uitypes[$uitype])) { $tmp_value = $picklist_uitypes[$uitype]; } else { $tmp_value = $field->getPickListOptions(); } if ($fieldName == 'activitytype' && $module == 'Calendar') { $tmp_value[] = array('value'=>'Task','label'=>getTranslatedString('Task',$module)); } //crmv@91678 if ($fieldName == 'taskstatus' && $module == 'Calendar') { $tocheck = array(); foreach($tmp_value as $check_value){ $tocheck[]=$check_value['value']; } $tmp = getPickListValues('eventstatus',$current_user->roleid); for($i=0;$i$picklistValue,'label'=>$picklistLabel); } } unset($tocheck); } //crmv@91678e foreach($tmp_value as $tmp) { $selected = ''; if (in_array($tmp['value'],$select_value)) { $selected = 'selected'; } $value[] = array($tmp['label'],$tmp['value'],$selected); } } if (isset($picklist_uitypes[$uitype])) { $uitype = 33; } elseif (!in_array($uitype,$enable_uitypes)) { $uitype = 1; } $header[] = array( 'module'=>$module, 'divclass'=>$divclass, 'uitype'=>$uitype, 'mandatory'=>$field->isMandatory(), 'label'=>$field->getFieldLabelKey(), 'name'=>'gs_'.$field->getFieldName(), 'value'=>$value, ); $grid_search_js_array[] = "'{$field->getFieldName()}'"; } //TODO $secondary_fields = $this->queryGenerator->getSecondaryFields(); if (!empty($secondary_fields)) { foreach($secondary_fields as $module => $sec_fields) { $meta = $this->queryGenerator->getMeta($module); $secModuleFields = $meta->getModuleFields(); foreach($sec_fields as $sec_field) { if (isset($secModuleFields[$sec_field])) { //crmv@145724 $sec_field_instance = $secModuleFields[$sec_field]; $header[] = Array(); //crmv@55007 } } } } $grid_search_js_array = implode(',',$grid_search_js_array); return $header; } //crmv@3084me //crmv@47905 function getListViewEntriesOther($list_result_sql,$queryGenerator,$customView,$viewid,$navigation_array) { global $currentModule, $current_user, $list_max_entries_per_page, $adb, $table_prefix; $focus = CRMEntity::getInstance($currentModule); $listview_entries_other = array(); $module_width_fields = $queryGenerator->getModuleWidthFields(); $secondary_fields = $queryGenerator->getSecondaryFields(); if (!empty($secondary_fields) && !empty($module_width_fields)) { $reportid = $customView->getReportId($viewid); $reportmodules = $customView->getReportModules(); foreach($module_width_fields as $module_width_field) { if ($reportmodules !== false && isset($secondary_fields[$module_width_field]) && in_array($module_width_field,$reportmodules)) { $focus_other = CRMEntity::getInstance($module_width_field); $instance_other = Vtecrm_Module::getInstance($module_width_field); $queryGeneratorOther = QueryGenerator::getInstance($module_width_field, $current_user); $queryGeneratorOther->setFields(array_merge(array('id'),$secondary_fields[$module_width_field])); $queryGeneratorOther->setReportFilter($reportid,$module_width_field,$instance_other->id); $list_query_other = $queryGeneratorOther->getQuery(); $list_result_other = $adb->query($list_query_other); if ($adb->num_rows($list_result_other) > $list_max_entries_per_page) { $relation_manager = RelationManager::getInstance(); $relations = $relation_manager->getRelations($currentModule,ModuleRelation::$TYPE_ALL,$module_width_field); if (!empty($relations)) { $relation = $relations[0]; $relation_type = $relation->getType(); if ($relation_type == 2) { $relation_type = '1TON'; } elseif ($relation_type == 4) { $relation_type = 'NTO1'; } elseif ($relation_type == 8) { $relation_type = 'NTON'; } } if ($relation_type == '1TON') { //es. Contacts, Accounts $related_fields2 = getRelationFields($module_width_field,$currentModule,null,null,$reportid); $field_join = ''; if (!empty($related_fields2['fields']['direct'])){ foreach ($related_fields2['fields']['direct'] as $fieldid => $rel_info) { $field_join = "{$rel_info['tablename']}.{$rel_info['columnname']}"; $field_join_short = "{$rel_info['columnname']}"; break; } } elseif (!empty($related_fields2['fields']['indirect']) && $field_join == ''){ foreach ($related_fields2['fields']['indirect'] as $fieldid => $rel_info) { //$field_join = "{$table_prefix}_crmentity.crmid"; //$field_join_short = "crmid"; $field_join = "{$rel_info['tablename']}.{$rel_info['columnname']}"; $field_join_short = "{$rel_info['columnname']}"; break; } } elseif (!empty($related_fields2['related']) && $field_join == ''){ foreach ($related_fields2['related'] as $rel_module) { $field_join = "{$table_prefix}_crmentity.crmid"; $field_join_short = "crmid"; } } if ($field_join != ''){ $query = preg_replace("/[\n\r\t]+/"," ",$list_result_sql); //crmv@20049 $query = "SELECT {$table_prefix}_crmentity.crmid ".substr($query, stripos($query,' FROM '),strlen($query)); $query_restrict = "select * from ({$query}) t group by t.crmid"; $list_query_other.=" and {$field_join} in ($query_restrict)"; $list_result_other = $adb->query($list_query_other); } } elseif ($relation_type == 'NTO1') { //es. Accounts, Contacts $related_fields = getRelationFields($currentModule,$module_width_field,null,null,$reportid); $field_join = ''; if (!empty($related_fields['fields']['direct'])){ foreach ($related_fields['fields']['direct'] as $fieldid => $rel_info) { $field_join = "{$rel_info['tablename']}.{$rel_info['columnname']}"; $field_join_short = "{$rel_info['columnname']}"; break; } } if (!empty($related_fields['fields']['indirect']) && $field_join == ''){ foreach ($related_fields['fields']['indirect'] as $fieldid => $rel_info) { $field_join = "{$table_prefix}_crmentity.crmid"; $field_join_short = "crmid"; break; } } if (!empty($related_fields['related']) && $field_join == '') { foreach ($related_fields['related'] as $rel_module) { $field_join = "{$table_prefix}_crmentity.crmid"; $field_join_short = "crmid"; } } if ($field_join != '') { $query_restrict = "select t.{$field_join_short} from ({$list_result_sql}) t group by t.{$field_join_short}"; $list_query_other.=" and {$table_prefix}_crmentity.crmid in ($query_restrict)"; $list_result_other = $adb->query($list_query_other); } } elseif ($relation_type == 'NTON') { //es. Accounts, Products $reltable = $relation->relationinfo['reltab']; $field_join = 'related'; $list_res_mod = preg_replace("/[\n\r\t]+/"," ",$list_result_sql); // crmv@63349 $tmodreltables = TmpUserModRelTables::getInstance(); $tabname = $focus->setupTemporaryRelTable($currentModule,$module_width_field,'',$relation->relationinfo); $replace = "{$table_prefix}_crmentity.crmid"; $list_res_mod = "SELECT $replace ".substr($list_res_mod, stripos($list_res_mod,' FROM '),strlen($list_res_mod)); $reltable_tmp = $this->createtempresultq($list_res_mod,$viewid); if ($tabname == $tmodreltables->tmpTable) { $viewid = intval($viewid); $join = $tmodreltables->getJoinCondition($currentModule, $module_width_field, $current_user->id, 0, '', '', 'c'); } else { $join = ''; } if (PerformancePrefs::getBoolean('USE_TEMP_TABLES')) { $query_restrict = "select {$relation->relationinfo['relidx2']} from $tabname c inner join {$reltable_tmp} t on t.crmid = c.crmid"; } else { $query_restrict = "select {$relation->relationinfo['relidx2']} from $tabname c INNER join {$reltable_tmp} t ON t.userid = {$current_user->id} AND t.viewid = $viewid AND t.id = c.crmid"; if ($join) $query_restrict .= " WHERE $join"; } $list_query_other .= " and {$table_prefix}_crmentity.crmid in ($query_restrict)"; // crmv@63349e $list_result_other = $adb->query($list_query_other); } } $controller_other = ListViewController::getInstance($adb, $current_user, $queryGeneratorOther); $fields = $controller_other->queryGenerator->getFields(); $listview_entries_other[$module_width_field] = $controller_other->getListViewEntries($focus_other,$module_width_field,$list_result_other,$navigation_array,true); } } } return $listview_entries_other; } // crmv@63349 function createtempresultq($query,$viewid) { if (PerformancePrefs::getBoolean('USE_TEMP_TABLES')) { return $this->createtempresultq_tmp($query, $viewid); } else { return $this->createtempresultq_notmp($query, $viewid); } } function createtempresultq_notmp($query,$viewid) { global $adb, $table_prefix; global $current_user; $viewid = intval($viewid); $reltable_tmp = $table_prefix.'_tmp_rst'; $sqlTableName = $adb->datadict->changeTableName($reltable_tmp); // clean $adb->pquery("DELETE FROM $sqlTableName WHERE userid = ? AND viewid = ?", array($current_user->id, $viewid)); $query = preg_replace('/^SELECT\s+(.*?)\s+FROM/i', "SELECT {$current_user->id} as userid, $viewid as viewid, \\1 FROM", $query); $query = "INSERT INTO $sqlTableName (userid, viewid, id) ".$query; $result = $adb->query($query); return $reltable_tmp; } // crmv@63349e function createtempresultq_tmp($query,$viewid){ // crmv@63349 global $table_prefix; global $current_user; $db = PearDatabase::getInstance(); $tableName = 'vt_tmp_u'.$current_user->id.'rst'.$viewid; $tableName = substr($tableName,0,29); $table_exist = $db->table_exist($tableName); if($table_exist){ $sql = "truncate table {$tableName}"; $db->query($sql); } else{ Vtecrm_Utils::CreateTable($tableName,"crmid I(19) key"); } if ($db->isMysql()){ $query = "insert ignore into {$tableName} ".$query; $result = $db->pquery($query,$params); } else { $tableName_ = $db->datadict->changeTableName($tableName); $query = "insert into $tableName ". $query."where not exists (select * from $tableName_ where $tableName_.crmid = un_table.crmid)"; $result = $db->pquery($query,$params); } return $tableName; } //crmv@47905e // crmv@197996 crmv@203081 function getMoreInformationsDiv($recordId,$fieldName,$moreInformations) { $value = ' chat '; return $value; } // crmv@197996e crmv@203081e }