diff --git a/build/tests/testgetRAC.php b/build/tests/testgetRAC.php index a28d60af8c..1622ad47d7 100644 --- a/build/tests/testgetRAC.php +++ b/build/tests/testgetRAC.php @@ -15,7 +15,7 @@ ini_set('memory_limit','1024M'); $current_user = Users::getActiveAdminUser(); -$recs = $adb->query('SELECT crmid,setype FROM `vtiger_crmentity` where deleted=0 group by setype'); +$recs = $adb->query('SELECT max(crmid),setype FROM `vtiger_crmentity` where deleted=0 group by setype'); echo ""; while ($rec = $adb->fetch_row($recs)) { echo ""; diff --git a/cron/SendReminder.service b/cron/SendReminder.service index 2f41093cbb..2840ce5842 100644 --- a/cron/SendReminder.service +++ b/cron/SendReminder.service @@ -37,8 +37,7 @@ if(empty($current_language)) $current_language = 'en_us'; //modified query for recurring events -Jag -$query="select vtiger_crmentity.crmid,vtiger_seactivityrel.crmid as setype,vtiger_activity.*, - vtiger_activity_reminder.reminder_time,vtiger_activity_reminder.recurringid,vtiger_recurringevents.recurringdate +$query="select vtiger_activity.activityid,vtiger_recurringevents.recurringid from vtiger_activity inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_activity.activityid inner join vtiger_activity_reminder on vtiger_activity.activityid=vtiger_activity_reminder.activity_id @@ -52,8 +51,17 @@ $result = $adb->pquery($query, array()); if($adb->num_rows($result) >= 1) { - while($result_set = $adb->fetch_array($result)) - { + $query='select vtiger_crmentity.crmid,vtiger_seactivityrel.crmid as setype,vtiger_activity.*, + vtiger_activity_reminder.reminder_time,vtiger_activity_reminder.recurringid,vtiger_recurringevents.recurringdate + from vtiger_activity + inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_activity.activityid + inner join vtiger_activity_reminder on vtiger_activity.activityid=vtiger_activity_reminder.activity_id + left outer join vtiger_recurringevents on vtiger_activity.activityid=vtiger_recurringevents.activityid + left outer join vtiger_seactivityrel on vtiger_seactivityrel.activityid = vtiger_activity.activityid + where vtiger_activity.activityid = ? limit 1'; + while($allactrs = $adb->fetch_array($result)) { + $actrs = $adb->pquery($query, array($allactrs['activityid'])); + $result_set = $adb->fetch_array($actrs); $date_start = $result_set['date_start']; $time_start = $result_set['time_start']; $reminder_time = $result_set['reminder_time']; diff --git a/data/CRMEntity.php b/data/CRMEntity.php index 43611c3e97..973f79e5cc 100755 --- a/data/CRMEntity.php +++ b/data/CRMEntity.php @@ -410,44 +410,42 @@ function insertIntoEntityTable($table_name, $module, $fileid = '') { if ($module == 'Calendar' && $this->column_fields["activitytype"] != null && $this->column_fields["activitytype"] != 'Task') { $tabid = getTabid('Events'); } + $uniqueFieldsRestriction = 'vtiger_field.fieldid IN (select min(vtiger_field.fieldid) from vtiger_field where vtiger_field.tabid=? GROUP BY vtiger_field.columnname)'; if ($insertion_mode == 'edit') { $update = array(); $update_params = array(); checkFileAccessForInclusion('user_privileges/user_privileges_' . $current_user->id . '.php'); require('user_privileges/user_privileges_' . $current_user->id . '.php'); if (isset($from_wf) && $from_wf) { - $sql = "select * from vtiger_field where tabid in (" . generateQuestionMarks($tabid) . ") and tablename=? and displaytype in (1,3,4) and presence in (0,2) group by columnname"; + $sql = "select * from vtiger_field where $uniqueFieldsRestriction and tablename=? and displaytype in (1,3,4) and presence in (0,2)"; $params = array($tabid, $table_name); - } elseif ($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0) { - $sql = "select * from vtiger_field where tabid in (" . generateQuestionMarks($tabid) . ") and tablename=? and displaytype in (1,3) and presence in (0,2) group by columnname"; + } elseif ($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0) { + $sql = "select * from vtiger_field where $uniqueFieldsRestriction and tablename=? and displaytype in (1,3) and presence in (0,2)"; $params = array($tabid, $table_name); } else { $profileList = getCurrentUserProfileList(); - if (count($profileList) > 0) { - $sql = "SELECT * + $sql = "SELECT distinct vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid = vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid = vtiger_field.fieldid - WHERE vtiger_field.tabid = ? + WHERE $uniqueFieldsRestriction AND vtiger_profile2field.visible = 0 AND vtiger_profile2field.readonly = 0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") - AND vtiger_def_org_field.visible = 0 and vtiger_field.tablename=? and vtiger_field.displaytype in (1,3) and vtiger_field.presence in (0,2) group by columnname"; - + AND vtiger_def_org_field.visible = 0 and vtiger_field.tablename=? and vtiger_field.displaytype in (1,3) and vtiger_field.presence in (0,2)"; $params = array($tabid, $profileList, $table_name); } else { - $sql = "SELECT * + $sql = "SELECT distinct vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid = vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid = vtiger_field.fieldid - WHERE vtiger_field.tabid = ? + WHERE $uniqueFieldsRestriction AND vtiger_profile2field.visible = 0 AND vtiger_profile2field.readonly = 0 - AND vtiger_def_org_field.visible = 0 and vtiger_field.tablename=? and vtiger_field.displaytype in (1,3) and vtiger_field.presence in (0,2) group by columnname"; - + AND vtiger_def_org_field.visible = 0 and vtiger_field.tablename=? and vtiger_field.displaytype in (1,3) and vtiger_field.presence in (0,2)"; $params = array($tabid, $table_name); } } @@ -459,7 +457,7 @@ function insertIntoEntityTable($table_name, $module, $fileid = '') { } $column = array($table_index_column); $value = array($this->id); - $sql = "select * from vtiger_field where tabid=? and tablename=? and displaytype in (1,3,4) and vtiger_field.presence in (0,2)"; + $sql = "select * from vtiger_field where $uniqueFieldsRestriction and tablename=? and displaytype in (1,3,4) and vtiger_field.presence in (0,2)"; $params = array($tabid, $table_name); } diff --git a/include/ComboUtil.php b/include/ComboUtil.php index f10da96695..460d88d188 100644 --- a/include/ComboUtil.php +++ b/include/ComboUtil.php @@ -37,7 +37,7 @@ function getComboArray($combofieldNames) { $roleids = $roleid; } - $sql = "select distinct $tableName from vtiger_$tableName inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_$tableName.picklist_valueid where roleid in(". generateQuestionMarks($roleids) .") order by sortid"; + $sql = "select distinct $tableName,sortid from vtiger_$tableName inner join vtiger_role2picklist on vtiger_role2picklist.picklistvalueid = vtiger_$tableName.picklist_valueid where roleid in(". generateQuestionMarks($roleids) .") order by sortid"; $params = array($roleids); } $result = $adb->pquery($sql, $params); diff --git a/include/Webservices/VtigerCRMObjectMeta.php b/include/Webservices/VtigerCRMObjectMeta.php index b614fe2890..f4dd99198c 100644 --- a/include/Webservices/VtigerCRMObjectMeta.php +++ b/include/Webservices/VtigerCRMObjectMeta.php @@ -363,11 +363,12 @@ private function retrieveUserHierarchy(){ private function retrieveMetaForBlock($block){ global $adb; $tabid = $this->getTabId(); + $uniqueFieldsRestriction = 'vtiger_field.fieldid IN (select min(vtiger_field.fieldid) from vtiger_field where vtiger_field.tabid=? GROUP BY vtiger_field.columnname)'; //Select condition if we are in Calendar if($tabid == '9') - $condition = "(vtiger_field.tabid=? or vtiger_field.tablename='vtiger_activitycf')"; + $condition = "($uniqueFieldsRestriction or vtiger_field.tablename='vtiger_activitycf')"; else - $condition = "vtiger_field.tabid=?"; + $condition = $uniqueFieldsRestriction; require('user_privileges/user_privileges_'.$this->user->id.'.php'); if($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] ==0){ $sql = "select *, '0' as readonly from vtiger_field where ".$condition." and block in (".generateQuestionMarks($block).") and displaytype in (1,2,3,4)"; @@ -375,7 +376,7 @@ private function retrieveMetaForBlock($block){ }else{ $profileList = getCurrentUserProfileList(); if (count($profileList) > 0) { - $sql = "SELECT vtiger_field.*, vtiger_profile2field.readonly + $sql = "SELECT distinct vtiger_field.*, vtiger_profile2field.readonly FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid = vtiger_field.fieldid @@ -383,10 +384,10 @@ private function retrieveMetaForBlock($block){ ON vtiger_def_org_field.fieldid = vtiger_field.fieldid WHERE ".$condition." AND vtiger_profile2field.visible = 0 AND vtiger_profile2field.profileid IN (". generateQuestionMarks($profileList) .") - AND vtiger_def_org_field.visible = 0 and vtiger_field.block in (".generateQuestionMarks($block).") and vtiger_field.displaytype in (1,2,3,4) and vtiger_field.presence in (0,2) group by columnname"; + AND vtiger_def_org_field.visible = 0 and vtiger_field.block in (".generateQuestionMarks($block).") and vtiger_field.displaytype in (1,2,3,4) and vtiger_field.presence in (0,2)"; $params = array($tabid, $profileList, $block); } else { - $sql = "SELECT vtiger_field.*, vtiger_profile2field.readonly + $sql = "SELECT distinct vtiger_field.*, vtiger_profile2field.readonly FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid = vtiger_field.fieldid @@ -394,16 +395,11 @@ private function retrieveMetaForBlock($block){ ON vtiger_def_org_field.fieldid = vtiger_field.fieldid WHERE ".$condition." AND vtiger_profile2field.visible = 0 - AND vtiger_def_org_field.visible = 0 and vtiger_field.block in (".generateQuestionMarks($block).") and vtiger_field.displaytype in (1,2,3,4) and vtiger_field.presence in (0,2) group by columnname"; + AND vtiger_def_org_field.visible = 0 and vtiger_field.block in (".generateQuestionMarks($block).") and vtiger_field.displaytype in (1,2,3,4) and vtiger_field.presence in (0,2)"; $params = array($tabid, $block); } } - // Bulk Save Mode: Group by is not required!? - if(CRMEntity::isBulkSaveMode()) { - $sql = preg_replace("/group by [^ ]*/", " ", $sql); - } - $result = $adb->pquery($sql,$params); $noofrows = $adb->num_rows($result); $referenceArray = array(); diff --git a/include/freetag/freetag.class.php b/include/freetag/freetag.class.php index bcdad9aade..caf6fc2e6e 100644 --- a/include/freetag/freetag.class.php +++ b/include/freetag/freetag.class.php @@ -1101,7 +1101,7 @@ function get_tag_cloud_tags($max = 100, $tagger_id = NULL,$module = "",$obj_id = ON (${prefix}freetags.id = tag_id) WHERE 1=1 $tagger_sql - GROUP BY tag + GROUP BY tag_id ORDER BY quantity DESC LIMIT 0, $max"; $rs = $adb->pquery($sql, $params); $retarr = $retarr1 = $return_value = array(); diff --git a/include/home.php b/include/home.php index 96c9f909f1..2ae5e4c3a8 100644 --- a/include/home.php +++ b/include/home.php @@ -539,12 +539,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query = ''; $params = array(); if(isPermitted('Leads','index') == "yes"){ - $query = "select vtiger_leaddetails.leadid as id,vtiger_leaddetails.lastname as name,vtiger_groups.groupname as groupname, 'Leads ' as Type from vtiger_leaddetails inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_leaddetails.leadid inner join vtiger_groups on vtiger_crmentity.smownerid=vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_leaddetails.leadid > 0"; + $query = "(select vtiger_leaddetails.leadid as id,vtiger_leaddetails.lastname as name,vtiger_groups.groupname as groupname, 'Leads ' as Type from vtiger_leaddetails inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_leaddetails.leadid inner join vtiger_groups on vtiger_crmentity.smownerid=vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_leaddetails.leadid > 0"; if (count($groupids) > 0){ $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("Calendar") && isPermitted('Calendar','index') == "yes"){ @@ -552,12 +552,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .= " union all "; } //Get the activities assigned to group - $query .= "select vtiger_activity.activityid as id,vtiger_activity.subject as name,vtiger_groups.groupname as groupname,'Activities' as Type from vtiger_activity inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_activity.activityid inner join vtiger_groups on vtiger_crmentity.smownerid=vtiger_groups.groupid where vtiger_crmentity.deleted=0 and ((vtiger_activity.eventstatus !='held'and (vtiger_activity.status is null or vtiger_activity.status ='')) or (vtiger_activity.status !='completed' and (vtiger_activity.eventstatus is null or vtiger_activity.eventstatus=''))) and vtiger_activity.activityid > 0"; + $query .= "(select vtiger_activity.activityid as id,vtiger_activity.subject as name,vtiger_groups.groupname as groupname,'Activities' as Type from vtiger_activity inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_activity.activityid inner join vtiger_groups on vtiger_crmentity.smownerid=vtiger_groups.groupid where vtiger_crmentity.deleted=0 and ((vtiger_activity.eventstatus !='held'and (vtiger_activity.status is null or vtiger_activity.status ='')) or (vtiger_activity.status !='completed' and (vtiger_activity.eventstatus is null or vtiger_activity.eventstatus=''))) and vtiger_activity.activityid > 0"; if (count($groupids) > 0) { $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("HelpDesk") && isPermitted('HelpDesk','index') == "yes"){ @@ -565,12 +565,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .= " union all "; } //Get the tickets assigned to group (status not Closed -- hardcoded value) - $query .= "select vtiger_troubletickets.ticketid,vtiger_troubletickets.title as name,vtiger_groups.groupname,'Tickets ' as Type from vtiger_troubletickets inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_troubletickets.ticketid inner join vtiger_groups on vtiger_crmentity.smownerid=vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_troubletickets.status != 'Closed' and vtiger_troubletickets.ticketid > 0"; + $query .= "(select vtiger_troubletickets.ticketid,vtiger_troubletickets.title as name,vtiger_groups.groupname,'Tickets ' as Type from vtiger_troubletickets inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_troubletickets.ticketid inner join vtiger_groups on vtiger_crmentity.smownerid=vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_troubletickets.status != 'Closed' and vtiger_troubletickets.ticketid > 0"; if (count($groupids) > 0) { $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("Potentials") && isPermitted('Potentials','index') == "yes"){ @@ -578,12 +578,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the potentials assigned to group(sales stage not Closed Lost or Closed Won-- hardcoded value) - $query .= "select vtiger_potential.potentialid,vtiger_potential.potentialname as name,vtiger_groups.groupname as groupname,'Potentials ' as Type from vtiger_potential inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_potential.potentialid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and ((vtiger_potential.sales_stage !='Closed Lost') or (vtiger_potential.sales_stage != 'Closed Won')) and vtiger_potential.potentialid > 0"; + $query .= "(select vtiger_potential.potentialid,vtiger_potential.potentialname as name,vtiger_groups.groupname as groupname,'Potentials ' as Type from vtiger_potential inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_potential.potentialid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and ((vtiger_potential.sales_stage !='Closed Lost') or (vtiger_potential.sales_stage != 'Closed Won')) and vtiger_potential.potentialid > 0"; if (count($groupids) > 0){ $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("Accounts") && isPermitted('Accounts','index') == "yes"){ @@ -591,12 +591,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the Accounts assigned to group - $query .= "select vtiger_account.accountid as id,vtiger_account.accountname as name,vtiger_groups.groupname as groupname, 'Accounts ' as Type from vtiger_account inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_account.accountid inner join vtiger_groups on vtiger_crmentity.smownerid=vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_account.accountid > 0"; + $query .= "(select vtiger_account.accountid as id,vtiger_account.accountname as name,vtiger_groups.groupname as groupname, 'Accounts ' as Type from vtiger_account inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_account.accountid inner join vtiger_groups on vtiger_crmentity.smownerid=vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_account.accountid > 0"; if (count($groupids) > 0){ $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("Contacts") && isPermitted('Contacts','index') =='yes'){ @@ -604,12 +604,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the Contacts assigned to group - $query .= "select vtiger_contactdetails.contactid as id, vtiger_contactdetails.lastname as name ,vtiger_groups.groupname as groupname, 'Contacts ' as Type from vtiger_contactdetails inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_contactdetails.contactid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_contactdetails.contactid > 0"; + $query .= "(select vtiger_contactdetails.contactid as id, vtiger_contactdetails.lastname as name ,vtiger_groups.groupname as groupname, 'Contacts ' as Type from vtiger_contactdetails inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_contactdetails.contactid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_contactdetails.contactid > 0"; if (count($groupids) > 0) { $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("Campaigns") && isPermitted('Campaigns','index') =='yes'){ @@ -617,12 +617,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the Campaigns assigned to group(Campaign status not Complete -- hardcoded value) - $query .= "select vtiger_campaign.campaignid as id, vtiger_campaign.campaignname as name, vtiger_groups.groupname as groupname,'Campaigns ' as Type from vtiger_campaign inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_campaign.campaignid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and (vtiger_campaign.campaignstatus != 'Complete') and vtiger_campaign.campaignid > 0"; + $query .= "(select vtiger_campaign.campaignid as id, vtiger_campaign.campaignname as name, vtiger_groups.groupname as groupname,'Campaigns ' as Type from vtiger_campaign inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_campaign.campaignid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and (vtiger_campaign.campaignstatus != 'Complete') and vtiger_campaign.campaignid > 0"; if (count($groupids) > 0) { $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("Quotes") && isPermitted('Quotes','index') == 'yes'){ @@ -630,12 +630,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the Quotes assigned to group(Quotes stage not Rejected -- hardcoded value) - $query .="select vtiger_quotes.quoteid as id,vtiger_quotes.subject as name, vtiger_groups.groupname as groupname ,'Quotes 'as Type from vtiger_quotes inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_quotes.quoteid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and (vtiger_quotes.quotestage != 'Rejected') and vtiger_quotes.quoteid > 0"; + $query .="(select vtiger_quotes.quoteid as id,vtiger_quotes.subject as name, vtiger_groups.groupname as groupname ,'Quotes 'as Type from vtiger_quotes inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_quotes.quoteid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and (vtiger_quotes.quotestage != 'Rejected') and vtiger_quotes.quoteid > 0"; if (count($groupids) > 0) { $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("SalesOrder") && isPermitted('SalesOrder','index') =='yes'){ @@ -643,12 +643,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the Sales Order assigned to group - $query .="select vtiger_salesorder.salesorderid as id, vtiger_salesorder.subject as name,vtiger_groups.groupname as groupname,'SalesOrder ' as Type from vtiger_salesorder inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_salesorder.salesorderid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_salesorder.salesorderid > 0"; + $query .="(select vtiger_salesorder.salesorderid as id, vtiger_salesorder.subject as name,vtiger_groups.groupname as groupname,'SalesOrder ' as Type from vtiger_salesorder inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_salesorder.salesorderid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_salesorder.salesorderid > 0"; if (count($groupids) > 0){ $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("Invoice") && isPermitted('Invoice','index') =='yes'){ @@ -656,12 +656,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the Sales Order assigned to group(Invoice status not Paid -- hardcoded value) - $query .="select vtiger_invoice.invoiceid as Id , vtiger_invoice.subject as Name, vtiger_groups.groupname as groupname,'Invoice ' as Type from vtiger_invoice inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_invoice.invoiceid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and(vtiger_invoice.invoicestatus != 'Paid') and vtiger_invoice.invoiceid > 0"; + $query .="(select vtiger_invoice.invoiceid as Id , vtiger_invoice.subject as Name, vtiger_groups.groupname as groupname,'Invoice ' as Type from vtiger_invoice inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_invoice.invoiceid inner join vtiger_groups on vtiger_crmentity.smownerid = vtiger_groups.groupid where vtiger_crmentity.deleted=0 and(vtiger_invoice.invoicestatus != 'Paid') and vtiger_invoice.invoiceid > 0"; if (count($groupids) > 0){ $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("PurchaseOrder") && isPermitted('PurchaseOrder','index') == 'yes'){ @@ -669,12 +669,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the Purchase Order assigned to group - $query .="select vtiger_purchaseorder.purchaseorderid as id,vtiger_purchaseorder.subject as name,vtiger_groups.groupname as groupname, 'PurchaseOrder ' as Type from vtiger_purchaseorder inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_purchaseorder.purchaseorderid inner join vtiger_groups on vtiger_crmentity.smownerid =vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_purchaseorder.purchaseorderid >0"; + $query .="(select vtiger_purchaseorder.purchaseorderid as id,vtiger_purchaseorder.subject as name,vtiger_groups.groupname as groupname, 'PurchaseOrder ' as Type from vtiger_purchaseorder inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_purchaseorder.purchaseorderid inner join vtiger_groups on vtiger_crmentity.smownerid =vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_purchaseorder.purchaseorderid >0"; if (count($groupids) > 0) { $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } if(vtlib_isModuleActive("Documents") && isPermitted('Documents','index') == 'yes'){ @@ -682,12 +682,12 @@ function getGroupTaskLists($maxval,$calCnt){ $query .=" union all "; } //Get the Purchase Order assigned to group - $query .="select vtiger_notes.notesid as id,vtiger_notes.title as name,vtiger_groups.groupname as groupname, 'Documents' as Type from vtiger_notes inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_notes.notesid inner join vtiger_groups on vtiger_crmentity.smownerid =vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_notes.notesid > 0"; + $query .="(select vtiger_notes.notesid as id,vtiger_notes.title as name,vtiger_groups.groupname as groupname, 'Documents' as Type from vtiger_notes inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_notes.notesid inner join vtiger_groups on vtiger_crmentity.smownerid =vtiger_groups.groupid where vtiger_crmentity.deleted=0 and vtiger_notes.notesid > 0"; if (count($groupids) > 0) { $query .= " and vtiger_groups.groupid in (". generateQuestionMarks($groupids). ")"; array_push($params, $groupids); } - $query .= " LIMIT $maxval"; + $query .= " LIMIT $maxval)"; } $log->info("Here is the where clause for the list view: $query"); diff --git a/include/utils/CommonUtils.php b/include/utils/CommonUtils.php index 944533e23d..d69f07b842 100644 --- a/include/utils/CommonUtils.php +++ b/include/utils/CommonUtils.php @@ -1253,15 +1253,16 @@ function getBlocks($module, $disp_view, $mode, $col_fields = '', $info_type = '' require('user_privileges/user_privileges_' . $current_user->id . '.php'); if ($disp_view == "detail_view") { if ($is_admin == true || $profileGlobalPermission[2] == 0 || $module == "Users" || $module == "Emails") { - $sql = "SELECT vtiger_field.*, '0' as readonly FROM vtiger_field WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND vtiger_field.displaytype IN (1,2,4) and vtiger_field.presence in (0,2) ORDER BY block,sequence"; + $uniqueFieldsRestriction = 'vtiger_field.fieldid IN (select max(vtiger_field.fieldid) from vtiger_field where vtiger_field.tabid=? GROUP BY vtiger_field.columnname)'; + $sql = "SELECT distinct vtiger_field.*, '0' as readonly FROM vtiger_field WHERE $uniqueFieldsRestriction AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND vtiger_field.displaytype IN (1,2,4) and vtiger_field.presence in (0,2) ORDER BY block,sequence"; $params = array($tabid, $blockid_list); } elseif ($profileGlobalPermission[1] == 0) { // view all $profileList = getCurrentUserProfileList(); - $sql = "SELECT vtiger_field.*, vtiger_profile2field.readonly FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND vtiger_field.displaytype IN (1,2,4) and vtiger_field.presence in (0,2) AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") ORDER BY block,sequence"; + $sql = "SELECT distinct vtiger_field.*, vtiger_profile2field.readonly FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND vtiger_field.displaytype IN (1,2,4) and vtiger_field.presence in (0,2) AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") ORDER BY block,sequence"; $params = array($tabid, $blockid_list, $profileList); } else { $profileList = getCurrentUserProfileList(); - $sql = "SELECT vtiger_field.*, vtiger_profile2field.readonly FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND vtiger_field.displaytype IN (1,2,4) and vtiger_field.presence in (0,2) AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") GROUP BY vtiger_field.fieldid ORDER BY block,sequence"; + $sql = "SELECT distinct vtiger_field.*, vtiger_profile2field.readonly FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND vtiger_field.displaytype IN (1,2,4) and vtiger_field.presence in (0,2) AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") ORDER BY block,sequence"; $params = array($tabid, $blockid_list, $profileList); } $result = $adb->pquery($sql, $params); @@ -1279,7 +1280,7 @@ function getBlocks($module, $disp_view, $mode, $col_fields = '', $info_type = '' $params = array($tabid, $blockid_list, $info_type); } else { $profileList = getCurrentUserProfileList(); - $sql = "SELECT vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND $display_type_check AND info_type = ? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly = 0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid ORDER BY block,sequence"; + $sql = "SELECT distinct vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND $display_type_check AND info_type = ? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly = 0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") and vtiger_field.presence in (0,2) ORDER BY block,sequence"; $params = array($tabid, $blockid_list, $info_type, $profileList); } } @@ -1289,7 +1290,7 @@ function getBlocks($module, $disp_view, $mode, $col_fields = '', $info_type = '' $params = array($tabid, $blockid_list); } else { $profileList = getCurrentUserProfileList(); - $sql = "SELECT vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND $display_type_check AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly = 0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid ORDER BY block,sequence"; + $sql = "SELECT distinct vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_field.block IN (" . generateQuestionMarks($blockid_list) . ") AND $display_type_check AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly = 0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") and vtiger_field.presence in (0,2) ORDER BY block,sequence"; $params = array($tabid, $blockid_list, $profileList); } } @@ -2016,7 +2017,7 @@ function QuickCreate($module) { $params = array($tabid); } else { $profileList = getCurrentUserProfileList(); - $quickcreate_query = "SELECT vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND quickcreate in (0,2) AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly = 0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") and vtiger_field.presence in (0,2) and displaytype != 2 GROUP BY vtiger_field.fieldid ORDER BY quickcreatesequence"; + $quickcreate_query = "SELECT distinct vtiger_field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND quickcreate in (0,2) AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly = 0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (" . generateQuestionMarks($profileList) . ") and vtiger_field.presence in (0,2) and displaytype != 2 ORDER BY quickcreatesequence"; $params = array($tabid, $profileList); } $category = getParentTab(); diff --git a/include/utils/InventoryUtils.php b/include/utils/InventoryUtils.php index 474eb87004..bf7ccf6282 100644 --- a/include/utils/InventoryUtils.php +++ b/include/utils/InventoryUtils.php @@ -385,7 +385,7 @@ function getTaxDetailsForProduct($productid, $available='all', $acvid=0) } if($available != 'all' && $available == 'available_associated') { - $query = "SELECT vtiger_producttaxrel.*, vtiger_inventorytaxinfo.* FROM vtiger_inventorytaxinfo left JOIN vtiger_producttaxrel ON vtiger_inventorytaxinfo.taxid = vtiger_producttaxrel.taxid WHERE vtiger_producttaxrel.productid = ? or vtiger_inventorytaxinfo.deleted=0 GROUP BY vtiger_inventorytaxinfo.taxid"; + $query = "SELECT max(vtiger_producttaxrel.taxpercentage), vtiger_inventorytaxinfo.* FROM vtiger_inventorytaxinfo left JOIN vtiger_producttaxrel ON vtiger_inventorytaxinfo.taxid = vtiger_producttaxrel.taxid WHERE vtiger_producttaxrel.productid = ? or vtiger_inventorytaxinfo.deleted=0 GROUP BY vtiger_inventorytaxinfo.taxid"; } else { @@ -396,7 +396,7 @@ function getTaxDetailsForProduct($productid, $available='all', $acvid=0) $res = $adb->pquery($query, $params); for($i=0;$i<$adb->num_rows($res);$i++) { - $tax_details[$i]['productid'] = $adb->query_result($res,$i,'productid'); + $tax_details[$i]['productid'] = $productid; $tax_details[$i]['taxid'] = $adb->query_result($res,$i,'taxid'); $tax_details[$i]['taxname'] = $adb->query_result($res,$i,'taxname'); $tax_details[$i]['taxlabel'] = html_entity_decode($adb->query_result($res,$i,'taxlabel'),ENT_QUOTES,$default_charset); @@ -1175,7 +1175,7 @@ function createRecords($obj) { } $tableName = Import_Utils::getDbTableName($obj->user); - $sql = 'SELECT * FROM ' . $tableName . ' WHERE status = '. Import_Data_Controller::$IMPORT_RECORD_NONE .' GROUP BY subject'; + $sql = 'SELECT subject FROM ' . $tableName . ' WHERE status = '. Import_Data_Controller::$IMPORT_RECORD_NONE .' GROUP BY subject'; if($obj->batchImport) { $importBatchLimit = GlobalVariable::getVariable('Import_Batch_Limit', 100); $sql .= ' LIMIT '. $importBatchLimit; @@ -1283,9 +1283,9 @@ function createRecords($obj) { array_push($lineItems,$lineItemData); } foreach ($fieldMapping as $fieldName => $index) { - $fieldData[$fieldName] = $row[strtolower($fieldName)]; + $fieldData[$fieldName] = $subjectRow[strtolower($fieldName)]; if ($fieldName=='hdnTaxType') { - $fieldData['taxtype'] = $row[strtolower($fieldName)]; + $fieldData['taxtype'] = $subjectRow[strtolower($fieldName)]; } if ($fieldName=='txtAdjustment' and $fieldData[$fieldName]!=0) { $fieldData['adjustmentType'] = 'add'; @@ -1351,7 +1351,7 @@ function importRecord($obj, $inventoryFieldData, $lineItems) { function getImportStatusCount($obj) { global $adb; $tableName = Import_Utils_Helper::getDbTableName($obj->user); - $result = $adb->query('SELECT status FROM '.$tableName. ' GROUP BY subject'); + $result = $adb->query('SELECT status FROM '.$tableName. ' GROUP BY subject,status'); $statusCount = array('TOTAL' => 0, 'IMPORTED' => 0, 'FAILED' => 0, 'PENDING' => 0, 'CREATED' => 0, 'SKIPPED' => 0, 'UPDATED' => 0, 'MERGED' => 0); @@ -1399,7 +1399,7 @@ function undoLastImport($obj, $user) { exit; } $result = $adb->query("SELECT recordid FROM $dbTableName WHERE status = ". Import_Data_Controller::$IMPORT_RECORD_CREATED - ." AND recordid IS NOT NULL GROUP BY subject"); + ." AND recordid IS NOT NULL GROUP BY subject,recordid"); $noOfRecords = $adb->num_rows($result); $noOfRecordsDeleted = 0; for($i=0; $i<$noOfRecords; ++$i) { diff --git a/include/utils/ListViewUtils.php b/include/utils/ListViewUtils.php index 195598aeaa..c5825e8029 100755 --- a/include/utils/ListViewUtils.php +++ b/include/utils/ListViewUtils.php @@ -2445,7 +2445,7 @@ function getListQuery($module, $where = '') { $query .= "WHERE vtiger_crmentity.deleted = 0 " . $where; break; Case "Calendar": - + // only one row per event no matter how many contacts are related $query = "SELECT vtiger_activity.activityid as act_id,vtiger_crmentity.crmid, vtiger_crmentity.smownerid, vtiger_crmentity.setype, vtiger_activity.*, vtiger_contactdetails.lastname, vtiger_contactdetails.firstname, @@ -2454,10 +2454,12 @@ function getListQuery($module, $where = '') { FROM vtiger_activity LEFT JOIN vtiger_activitycf ON vtiger_activitycf.activityid = vtiger_activity.activityid - LEFT JOIN vtiger_cntactivityrel - ON vtiger_cntactivityrel.activityid = vtiger_activity.activityid - LEFT JOIN vtiger_contactdetails - ON vtiger_contactdetails.contactid = vtiger_cntactivityrel.contactid + LEFT JOIN (SELECT min(vtiger_cntactivityrel.contactid) as contactid,vtiger_cntactivityrel.activityid + from vtiger_cntactivityrel + inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_cntactivityrel.contactid and deleted=0 + GROUP BY vtiger_cntactivityrel.activityid + ) ctorel ON ctorel.activityid = vtiger_activity.activityid + LEFT JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid = ctorel.contactid LEFT JOIN vtiger_seactivityrel ON vtiger_seactivityrel.activityid = vtiger_activity.activityid LEFT OUTER JOIN vtiger_activity_reminder diff --git a/include/utils/SearchUtils.php b/include/utils/SearchUtils.php index 7ce5252b07..9a79e10524 100755 --- a/include/utils/SearchUtils.php +++ b/include/utils/SearchUtils.php @@ -78,12 +78,11 @@ function getSearchListHeaderValues($focus, $module,$sort_qry='',$sorder='',$orde } array_push($field_list, $fieldname); } - //Getting the Entries from Profile2 vtiger_field vtiger_table + //Getting the Entries from Profile2field table if($is_admin == false) { $profileList = getCurrentUserProfileList(); - //changed to get vtiger_field.fieldname - $query = "SELECT vtiger_profile2field.*,vtiger_field.fieldname FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (". generateQuestionMarks($profileList) .") AND vtiger_field.fieldname IN (". generateQuestionMarks($field_list) .") and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + $query = "SELECT vtiger_field.fieldname FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid IN (". generateQuestionMarks($profileList) .") AND vtiger_field.fieldname IN (". generateQuestionMarks($field_list) .") and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; $result = $adb->pquery($query, array($tabid, $profileList, $field_list)); $field=Array(); for($k=0;$k < $adb->num_rows($result);$k++) @@ -535,9 +534,7 @@ function getAdvSearchfields($module) if($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] == 0) { - $sql = "select * from vtiger_field "; - $sql.= " where vtiger_field.tabid in(?) and"; - $sql.= " vtiger_field.displaytype in (1,2,3) and vtiger_field.presence in (0,2)"; + $sql = 'select vtiger_field.* from vtiger_field where vtiger_field.displaytype in (1,2,3) and vtiger_field.presence in (0,2)'; if($tabid == 13 || $tabid == 15) { $sql.= " and vtiger_field.fieldlabel != 'Add Comment'"; @@ -558,18 +555,17 @@ function getAdvSearchfields($module) { $sql.= " and vtiger_field.fieldlabel != 'Attachment'"; } - $sql.= " group by vtiger_field.fieldlabel order by block,sequence"; + $sql.= ' and vtiger_field.fieldid in (select min(fieldid) from vtiger_field where vtiger_field.tabid in (?) group by vtiger_field.fieldlabel) order by block,sequence'; $params = array($tabid); } else { $profileList = getCurrentUserProfileList(); - $sql = "select * from vtiger_field inner join vtiger_profile2field on vtiger_profile2field.fieldid=vtiger_field.fieldid inner join vtiger_def_org_field on vtiger_def_org_field.fieldid=vtiger_field.fieldid "; - $sql.= " where vtiger_field.tabid in(?) and"; - $sql.= " vtiger_field.displaytype in (1,2,3) and vtiger_field.presence in (0,2) and vtiger_profile2field.visible=0 and vtiger_def_org_field.visible=0"; + $sql = "select distinct vtiger_field.* from vtiger_field inner join vtiger_profile2field on vtiger_profile2field.fieldid=vtiger_field.fieldid inner join vtiger_def_org_field on vtiger_def_org_field.fieldid=vtiger_field.fieldid "; + $sql.= ' where vtiger_field.displaytype in (1,2,3) and vtiger_field.presence in (0,2) and vtiger_profile2field.visible=0 and vtiger_def_org_field.visible=0'; - $params = array($tabid); + $params = array(); if (count($profileList) > 0) { $sql.= " and vtiger_profile2field.profileid in (". generateQuestionMarks($profileList) .")"; @@ -596,7 +592,8 @@ function getAdvSearchfields($module) { $sql.= " and vtiger_field.fieldlabel != 'Attachment'"; } - $sql .= " group by vtiger_field.fieldlabel order by block,sequence"; + $sql.= ' and vtiger_field.fieldid in (select min(fieldid) from vtiger_field where vtiger_field.tabid in (?) group by vtiger_field.fieldlabel) order by block,sequence'; + $params[] = $tabid; } $result = $adb->pquery($sql, $params); diff --git a/include/utils/UserInfoUtil.php b/include/utils/UserInfoUtil.php index f66bdc092c..380b1133d9 100755 --- a/include/utils/UserInfoUtil.php +++ b/include/utils/UserInfoUtil.php @@ -3672,6 +3672,7 @@ function getFieldVisibilityPermission($fld_module, $userid, $fieldname, $accessm return '1'; } + if (empty($userid)) $userid = $current_user->id; require('user_privileges/user_privileges_'.$userid.'.php'); /* Asha: Fix for ticket #4508. Users with View all and Edit all permission will also have visibility permission for all fields */ @@ -3682,32 +3683,34 @@ function getFieldVisibilityPermission($fld_module, $userid, $fieldname, $accessm } else { - //get vtiger_profile list using userid - $profilelist = getCurrentUserProfileList(); + //get profile list using userid + $profilelist = array(); + foreach ($current_user_profiles as $profid) { + array_push($profilelist, $profid); + } //get tabid $tabid = getTabid($fld_module); if (count($profilelist) > 0) { if($accessmode == 'readonly') { - $query="SELECT vtiger_profile2field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid in (". generateQuestionMarks($profilelist) .") AND vtiger_field.fieldname= ? and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + $query="SELECT vtiger_profile2field.visible FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid in (". generateQuestionMarks($profilelist) .") AND vtiger_field.fieldname= ? and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; } else { - $query="SELECT vtiger_profile2field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid in (". generateQuestionMarks($profilelist) .") AND vtiger_field.fieldname= ? and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + $query="SELECT vtiger_profile2field.visible FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid in (". generateQuestionMarks($profilelist) .") AND vtiger_field.fieldname= ? and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; } $params = array($tabid, $profilelist, $fieldname); - } else { if($accessmode == 'readonly') { - $query="SELECT vtiger_profile2field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_field.fieldname= ? and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; - } else { - $query="SELECT vtiger_profile2field.* FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly=0 AND vtiger_def_org_field.visible=0 AND vtiger_field.fieldname= ? and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + $query="SELECT vtiger_profile2field.visible FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_field.fieldname= ? and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + } else { + $query="SELECT vtiger_profile2field.visible FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly=0 AND vtiger_def_org_field.visible=0 AND vtiger_field.fieldname= ? and vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; } $params = array($tabid, $fieldname); } $result = $adb->pquery($query, $params); $log->debug("Exiting getFieldVisibilityPermission method ..."); if($adb->num_rows($result) == 0) return '1'; - return ($adb->query_result($result,"0","visible").""); + return ($adb->query_result($result,0,'visible').''); } } diff --git a/modules/Accounts/ListViewTop.php b/modules/Accounts/ListViewTop.php index 7d40b39e49..9afd815dc7 100644 --- a/modules/Accounts/ListViewTop.php +++ b/modules/Accounts/ListViewTop.php @@ -25,7 +25,7 @@ function getTopAccounts($maxval,$calCnt) require('user_privileges/user_privileges_'.$current_user->id.'.php'); require('user_privileges/sharing_privileges_'.$current_user->id.'.php'); - $list_query = "select vtiger_potential.potentialname,vtiger_account.accountid, vtiger_account.accountname, ". + $list_query = "select vtiger_account.accountid, vtiger_account.accountname, ". "vtiger_account.tickersymbol, sum(vtiger_potential.amount) as amount from vtiger_potential ". "inner join vtiger_crmentity on (vtiger_potential.potentialid=vtiger_crmentity.crmid) ". "inner join vtiger_account on (vtiger_potential.related_to=vtiger_account.accountid) "; diff --git a/modules/Calendar/Activity.php b/modules/Calendar/Activity.php index 4dbcb40928..5eb44edac9 100644 --- a/modules/Calendar/Activity.php +++ b/modules/Calendar/Activity.php @@ -641,15 +641,16 @@ function get_calendarsforol($user_name) $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") - { + $tname = $adb->query_result($result1,$i,'tablename'); + if ($tname == 'vtiger_seactivityrel' or $tname == 'vtiger_contactdetails') continue; + $cname = $adb->query_result($result1,$i,'columnname'); + $permitted_lists[] = $tname; + $permitted_lists[] = $cname; + if($cname == "date_start") { $permitted_lists[] = 'vtiger_activity'; $permitted_lists[] = 'time_start'; } - if($adb->query_result($result1,$i,'columnname') == "due_date") - { + if($cname == "due_date") { $permitted_lists[] = 'vtiger_activity'; $permitted_lists[] = 'time_end'; } @@ -665,18 +666,12 @@ function get_calendarsforol($user_name) INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_activity.activityid LEFT JOIN vtiger_salesmanactivityrel ON vtiger_salesmanactivityrel.activityid=vtiger_activity.activityid LEFT JOIN vtiger_users ON vtiger_users.id=vtiger_salesmanactivityrel.smid - LEFT JOIN vtiger_cntactivityrel ON vtiger_cntactivityrel.activityid=vtiger_activity.activityid - LEFT JOIN vtiger_contactdetails ON vtiger_contactdetails.contactid=vtiger_cntactivityrel.contactid - LEFT JOIN vtiger_seactivityrel ON vtiger_seactivityrel.activityid = vtiger_activity.activityid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted=0 AND vtiger_activity.activitytype='Meeting' "; if (isset($groupidlist)) $query .= " AND (vtiger_users.user_name='".$user_name."' OR vtiger_crmentity.smownerid IN (".substr($groupidlist,1)."))"; else $query .= " AND vtiger_users.user_name='".$user_name."'"; - //crm-now added GROUP BY to prevent the same entry to appear multiple times if assigned to multiple contacts during synchronization with Outlook - $query .= " GROUP BY clndrid"; - $log->debug("Exiting get_calendarsforol method ..."); return $query; } diff --git a/modules/Calendar/ListView.php b/modules/Calendar/ListView.php index 839aa7ba42..c3b08e7f91 100755 --- a/modules/Calendar/ListView.php +++ b/modules/Calendar/ListView.php @@ -195,7 +195,6 @@ elseif ($_REQUEST['from_homepage'] == 'pending_activities') $list_query .= " AND (vtiger_activity.status is NULL OR vtiger_activity.status not in ('Completed','Deferred')) and (vtiger_activity.eventstatus is NULL OR vtiger_activity.eventstatus not in ('Held','Not Held')) AND (CAST((CONCAT(due_date,' ',time_end)) AS DATETIME) <= '$endDateTime' OR CAST((CONCAT(vtiger_recurringevents.recurringdate,' ',time_start)) AS DATETIME) <= '$endDateTime')"; } -$list_query .= ' GROUP BY vtiger_activity.activityid'; // only one row per event no matter how many contacts are related if(isset($order_by) && $order_by != '') { if($order_by == 'smownerid') { $list_query .= ' ORDER BY user_name '.$sorder; diff --git a/modules/CustomView/CustomView.php b/modules/CustomView/CustomView.php index 618175c862..c1db23a69c 100644 --- a/modules/CustomView/CustomView.php +++ b/modules/CustomView/CustomView.php @@ -305,8 +305,9 @@ function getColumnsListbyBlock($module, $block,$markMandatory = true) { } else { $tab_ids = explode(",", $tabid); $profileList = getCurrentUserProfileList(); - $sql = "select * from vtiger_field inner join vtiger_profile2field on vtiger_profile2field.fieldid=vtiger_field.fieldid inner join vtiger_def_org_field on vtiger_def_org_field.fieldid=vtiger_field.fieldid "; - $sql.= " where vtiger_field.tabid in (" . generateQuestionMarks($tab_ids) . ") and vtiger_field.block in (" . generateQuestionMarks($block_ids) . ") and"; + $uniqueFieldsRestriction = 'vtiger_field.fieldid IN (select min(vtiger_field.fieldid) from vtiger_field where vtiger_field.tabid in ('. generateQuestionMarks($tab_ids) .') GROUP BY vtiger_field.columnname)'; + $sql = "select distinct vtiger_field.* from vtiger_field inner join vtiger_profile2field on vtiger_profile2field.fieldid=vtiger_field.fieldid inner join vtiger_def_org_field on vtiger_def_org_field.fieldid=vtiger_field.fieldid "; + $sql.= " where $uniqueFieldsRestriction and vtiger_field.block in (" . generateQuestionMarks($block_ids) . ") and"; $sql.= "$display_type and vtiger_profile2field.visible=0 and vtiger_def_org_field.visible=0 and vtiger_field.presence in (0,2)"; $params = array($tab_ids, $block_ids); @@ -319,7 +320,7 @@ function getColumnsListbyBlock($module, $block,$markMandatory = true) { $sql.= " and vtiger_field.fieldname not in('notime','duration_minutes','duration_hours')"; } - $sql.= " group by columnname order by sequence"; + $sql.= ' order by sequence'; } if ($tabid == '9,16') $tabid = "9"; diff --git a/modules/Home/HomeUtils.php b/modules/Home/HomeUtils.php index f0c2262cd0..fb39bab9d8 100644 --- a/modules/Home/HomeUtils.php +++ b/modules/Home/HomeUtils.php @@ -47,7 +47,7 @@ function homepage_getUpcomingActivities($maxval,$calCnt){ "('Completed','Deferred')) and ( vtiger_activity.eventstatus is NULL OR ". "vtiger_activity.eventstatus not in ('Held','Not Held') )".$upcoming_condition; - $list_query.= " GROUP BY vtiger_activity.activityid"; + $list_query.= ' GROUP BY vtiger_activity.activityid,vtiger_recurringevents.recurringdate'; $list_query.= " ORDER BY date_start,time_start ASC"; $list_query.= " limit $maxval"; @@ -177,7 +177,7 @@ function homepage_getPendingActivities($maxval,$calCnt){ "('Completed','Deferred')) and (vtiger_activity.eventstatus is NULL OR vtiger_activity.". "eventstatus not in ('Held','Not Held')) ".$pending_condition; - $list_query.= " GROUP BY vtiger_activity.activityid"; + $list_query.= ' GROUP BY vtiger_activity.activityid,vtiger_recurringevents.recurringdate'; $list_query.= " ORDER BY date_start,time_start ASC"; $list_query.= " limit $maxval"; diff --git a/modules/Reports/ReportRun.php b/modules/Reports/ReportRun.php index a1fd6d8509..c3b55e3299 100644 --- a/modules/Reports/ReportRun.php +++ b/modules/Reports/ReportRun.php @@ -1761,9 +1761,6 @@ function sGetSQLforReport($reportid,$filtersql,$type='',$chartReport=false) if(isset($selectlist)) { $selectedcolumns = implode(", ",$selectlist); - if($chartReport == true){ - $selectedcolumns .= ", count(*) AS 'groupby_count'"; - } } //groups list if(isset($groupslist)) @@ -1806,7 +1803,7 @@ function sGetSQLforReport($reportid,$filtersql,$type='',$chartReport=false) $wheresql .= " and ".$advfiltersql; } - $reportquery = $this->getReportsQuery($this->primarymodule, $type,$where_condition); + $reportquery = $basereportquery = $this->getReportsQuery($this->primarymodule, $type,$where_condition); // If we don't have access to any columns, let us select one column and limit result to show we have no results // Fix for: http://trac.vtiger.com/cgi-bin/trac.cgi/ticket/4758 - Prasad @@ -1859,7 +1856,9 @@ function sGetSQLforReport($reportid,$filtersql,$type='',$chartReport=false) if(trim($groupsquery) != "" && $type !== 'COLUMNSTOTOTAL') { if($chartReport == true){ - $reportquery .= " group by ".$this->GetFirstSortByField($reportid); + reset($groupslist); + $first_key = key($groupslist); + $reportquery = 'select '.$columnlist[$first_key].", count(*) AS 'groupby_count' $basereportquery $wheresql group by ".$this->GetFirstSortByField($reportid); }else{ $reportquery .= " order by ".$groupsquery; } diff --git a/modules/Reports/Reports.php b/modules/Reports/Reports.php index 3d5fd6506e..cdd5123e07 100644 --- a/modules/Reports/Reports.php +++ b/modules/Reports/Reports.php @@ -572,37 +572,45 @@ function getColumnsListbyBlock($module,$block) if ($module == 'Calendar') { $tabid = array('9','16'); } - $params = array($tabid, $block); require('user_privileges/user_privileges_'.$current_user->id.'.php'); //Security Check if($is_admin == true || $profileGlobalPermission[1] == 0 || $profileGlobalPermission[2] ==0) { - $sql = "select * from vtiger_field where vtiger_field.tabid in (". generateQuestionMarks($tabid) .") and vtiger_field.block in (". generateQuestionMarks($block) .") and vtiger_field.displaytype in (1,2,3) and vtiger_field.presence in (0,2) AND tablename NOT IN (".generateQuestionMarks($skipTalbes).") "; - - //fix for Ticket #4016 - if($module == "Calendar") - $sql.=" group by vtiger_field.fieldlabel order by sequence"; - else - $sql.=" order by sequence"; + if($module == 'Calendar') { + // calendar is special because it is two modules and has many overlapping fields so we have to filter them + $sql = 'select * from vtiger_field where vtiger_field.block in ('. generateQuestionMarks($block) .') and vtiger_field.displaytype in (1,2,3) and vtiger_field.presence in (0,2) AND tablename NOT IN ('.generateQuestionMarks($skipTalbes).') '; + $sql.= ' and vtiger_field.fieldid in (select min(fieldid) from vtiger_field where vtiger_field.tabid in ('. generateQuestionMarks($tabid) .') group by fieldlabel) order by sequence'; + $params = array($block, $skipTalbes, $tabid); + } else { + $sql = 'select * from vtiger_field where vtiger_field.tabid in ('. generateQuestionMarks($tabid) .') and vtiger_field.block in ('. generateQuestionMarks($block) .') and vtiger_field.displaytype in (1,2,3) and vtiger_field.presence in (0,2) AND tablename NOT IN ('.generateQuestionMarks($skipTalbes).') order by sequence'; + $params = array($tabid, $block, $skipTalbes); + } } else { + if($module == 'Calendar') { + // calendar is special because it is two modules and has many overlapping fields so we have to filter them + $sql = 'select distinct vtiger_field.* from vtiger_field inner join vtiger_profile2field on vtiger_profile2field.fieldid=vtiger_field.fieldid inner join vtiger_def_org_field on vtiger_def_org_field.fieldid=vtiger_field.fieldid where vtiger_field.block in ('. generateQuestionMarks($block) .') and vtiger_field.displaytype in (1,2,3) and vtiger_profile2field.visible=0 and vtiger_def_org_field.visible=0 and vtiger_field.presence in (0,2)'; + $params = array($block); + } else { + $sql = 'select distinct vtiger_field.* from vtiger_field inner join vtiger_profile2field on vtiger_profile2field.fieldid=vtiger_field.fieldid inner join vtiger_def_org_field on vtiger_def_org_field.fieldid=vtiger_field.fieldid where vtiger_field.tabid in ('. generateQuestionMarks($tabid) .') and vtiger_field.block in ('. generateQuestionMarks($block) .') and vtiger_field.displaytype in (1,2,3) and vtiger_profile2field.visible=0 and vtiger_def_org_field.visible=0 and vtiger_field.presence in (0,2)'; + $params = array($tabid, $block); + } $profileList = getCurrentUserProfileList(); - $sql = "select * from vtiger_field inner join vtiger_profile2field on vtiger_profile2field.fieldid=vtiger_field.fieldid inner join vtiger_def_org_field on vtiger_def_org_field.fieldid=vtiger_field.fieldid where vtiger_field.tabid in (". generateQuestionMarks($tabid) .") and vtiger_field.block in (". generateQuestionMarks($block) .") and vtiger_field.displaytype in (1,2,3) and vtiger_profile2field.visible=0 and vtiger_def_org_field.visible=0 and vtiger_field.presence in (0,2)"; if (count($profileList) > 0) { $sql .= " and vtiger_profile2field.profileid in (". generateQuestionMarks($profileList) .")"; array_push($params, $profileList); } $sql .= ' and tablename NOT IN ('.generateQuestionMarks($skipTalbes).') '; - - //fix for Ticket #4016 - if($module == "Calendar") - $sql.=" group by vtiger_field.fieldlabel order by sequence"; - else - $sql.=" group by vtiger_field.fieldid order by sequence"; + array_push($params, $skipTalbes); + if($module == 'Calendar') { + $sql.= ' and vtiger_field.fieldid in (select min(fieldid) from vtiger_field where vtiger_field.tabid in ('. generateQuestionMarks($tabid) .') group by fieldlabel) order by sequence'; + array_push($params, $tabid); + } else { + $sql.= ' group by vtiger_field.fieldid order by sequence'; + } } - array_push($params, $skipTalbes); $module_columnlist = array(); $result = $adb->pquery($sql, $params); $noofrows = $adb->num_rows($result);
EntityIDRelated AccountRelated Contact