tabs[] = array('title' => $app_strings['LNK_SAVED_VIEWS'], 'link' => $module . '|saved_views', 'key' => $module . '|saved_views'); */ } function setup() { parent::setup(); //date settings global $timedate; $time_format = $timedate->get_user_time_format(); $date_format = $timedate->get_cal_date_format(); $time_separator = ":"; if(preg_match('/\d+([^\d])\d+([^\d]*)/s', $time_format, $match)) { $time_separator = $match[1]; } $t23 = strpos($time_format, '23') !== false ? '%H' : '%I'; if(!isset($match[2]) || $match[2] == '') { $this->xtpl->assign("CALENDAR_FORMAT",$date_format . ' ' . $t23 . $time_separator . "%M"); } else { $pm = $match[2] == "pm" ? "%P" : "%p"; $this->xtpl->assign("CALENDAR_FORMAT",$date_format . ' ' . $t23 . $time_separator . "%M" . $pm); } $this->xtpl->assign("TIME_FORMAT",$time_format); global $app_list_strings, $mod_strings; $parents = array( '' => '', 'Contacts' => $app_list_strings['moduleList']['Contacts'], 'Accounts' => $app_list_strings['moduleList']['Accounts'], 'Users' => $mod_strings['LBL_PARENT_FROM'],//$app_list_strings['moduleList']['Users'], ); if(isset($_REQUEST['calldate_basic']) && $_REQUEST['calldate_basic'] != '') { $_REQUEST['call_date_from_basic'] = ''; $_REQUEST['call_date_to_basic'] = ''; } $this->xtpl->assign("PARENT_FROM_BASIC",get_select_options_with_id($parents, $_REQUEST['parent_from_basic'])); $this->xtpl->assign("PARENT_TO_BASIC",get_select_options_with_id($parents, $_REQUEST['parent_to_basic'])); if(isset($_REQUEST['call_date_from_basic']) && strlen($_REQUEST['call_date_from_basic'])>6) $this->xtpl->assign("CALLDATEFROMBASIC",$_REQUEST['call_date_from_basic']); if(isset($_REQUEST['call_date_to_basic']) && strlen($_REQUEST['call_date_to_basic'])>6) $this->xtpl->assign("CALLDATETOBASIC",$_REQUEST['call_date_to_basic']); global $app_list_strings; $this->xtpl->assign("CALLDATE_BASIC",get_select_options_with_id($app_list_strings['search_date_type_dom'], $_REQUEST['calldate_basic'])); if(isset($_REQUEST['calldate_advanced']) && $_REQUEST['calldate_advanced'] != '') { $_REQUEST['call_date_from_advanced'] = ''; $_REQUEST['call_date_to_advanced'] = ''; } $this->xtpl->assign("PARENT_FROM_ADVANCED",get_select_options_with_id($parents, $_REQUEST['parent_from_advanced'])); $this->xtpl->assign("PARENT_TO_ADVANCED",get_select_options_with_id($parents, $_REQUEST['parent_to_advanced'])); $json = getJSONobj(); $pio = array ( 'ids' => array ( 'Accounts' => $this->getParentsIds('Accounts',true), 'Contacts' => $this->getParentsIds('Contacts',true), 'Users' => $this->getParentsIds('Users',true), ), ); $this->xtpl->assign("PARENT_IDS_OBJECTS", str_replace('"', '\"', $json->encode($pio))); $this->xtpl->assign("PARENT_FROM_ID_ADVANCED",get_select_options_with_id($this->getParentsIds($_REQUEST['parent_from_advanced'],true),$_REQUEST['parent_from_id_advanced'])); $this->xtpl->assign("PARENT_TO_ID_ADVANCED",get_select_options_with_id($this->getParentsIds($_REQUEST['parent_to_advanced'],true),$_REQUEST['parent_to_id_advanced'])); if(isset($_REQUEST['call_date_from_advanced']) && strlen($_REQUEST['call_date_from_advanced'])>6) $this->xtpl->assign("CALLDATEFROMADVANCED",$_REQUEST['call_date_from_advanced']); if(isset($_REQUEST['call_date_to_advanced']) && strlen($_REQUEST['call_date_to_advanced'])>6) $this->xtpl->assign("CALLDATETOADVANCED",$_REQUEST['call_date_to_advanced']); global $app_list_strings; $this->xtpl->assign("CALLDATE_ADVANCED",get_select_options_with_id($app_list_strings['search_date_type_dom'], $_REQUEST['calldate_advanced'])); $this->xtpl->assign("CURRENT_USER_ONLY_ADVANCED",((isset($_REQUEST['current_user_only_advanced']) && $_REQUEST['current_user_only_advanced']=="on")?"checked":"")); $this->xtpl->assign("IN_OUT_ADVANCED",((isset($_REQUEST['in_out_advanced']) && $_REQUEST['in_out_advanced']=="on")?"checked":"")); } function getParentsIds($module,$empty=false) { $arr = array(); //if($empty) $arr[''] = ' '; $where = ''; switch ($module) { case "Users": $what = " `id`, CONCAT(IFNULL(CONCAT(`first_name`,' '),''), `last_name`) as name "; $where = " `id` <> '1' AND "; $order_by = " `name` ASC"; break; case "Contacts": $what = " `id`, CONCAT(IFNULL(CONCAT(`first_name`,' '),''), `last_name`) as name "; $order_by = " `name` ASC"; break; case "Accounts": $what = " `id`, `name` "; $order_by = " `name` ASC"; break; } $query = "SELECT $what FROM `".strtolower($module)."` WHERE $where `deleted`='0' ORDER BY ".$order_by; $result = $GLOBALS['db']->query($query); if($result) while($row = $GLOBALS['db']->fetchByAssoc($result)) $arr[$row['id']] = $row['name']; return $arr; } function generateSearchWhere($add_custom_fields = false, $module='') { //var_dump($_REQUEST); global $timedate; $values = $this->searchFields; $where_clauses = array(); $like_char = '%'; $table_name = $this->bean->object_name; foreach($this->searchFields as $field=>$parms) { $customField = false; // Jenny - Bug 7462: We need a type check here to avoid database errors // when searching for numeric fields. This is a temporary fix until we have // a generic search form validation mechanism. $type = (!empty($this->bean->field_name_map[$field]['type']))?$this->bean->field_name_map[$field]['type']:''; if(!empty($this->bean->field_name_map[$field]['source']) && $this->bean->field_name_map[$field]['source'] == 'custom_fields'){ $customField = true; } if ($type == 'int') { if (!empty($parms['value'])) { $tempVal = explode(',', $parms['value']); $newVal = ''; foreach($tempVal as $key => $val) { if (!empty($newVal)) $newVal .= ','; if(!empty($val) && !(is_numeric($val))) $newVal .= -1; else $newVal .= $val; } $parms['value'] = $newVal; } } // do not include where clause for custom fields with checkboxes that are unchecked elseif($type == 'bool' && empty($parms['value']) && $customField) { continue; } elseif($type == 'bool' && !empty($parms['value'])){ if ($parms['value'] == 'on'){ $parms['value'] = 1; } } if(isset($parms['value']) && $parms['value'] != "") { $operator = 'like'; if(!empty($parms['operator'])) { $operator = $parms['operator']; } if(is_array($parms['value'])) { $field_value = ''; // If it is a custom field of mutliselect we have to do some special processing if($customField && !empty($this->bean->field_name_map[$field]['isMultiSelect']) && $this->bean->field_name_map[$field]['isMultiSelect']) { $operator = 'custom_enum'; $db_field = $this->bean->table_name . "_cstm." . $field; foreach($parms['value'] as $key => $val) { if($val != ' ' and $val != '') { $qVal = $GLOBALS['db']->quote($val); if (!empty($field_value)) { $field_value .= ' or '; } $field_value .= "$db_field like '$qVal' or $db_field like '%$qVal^%' or $db_field like '%^$qVal%' or $db_field like '%^$qVal^%'"; } } } else { $operator = 'in'; foreach($parms['value'] as $key => $val) { if($val != ' ' and $val != '') { if (!empty($field_value)) { $field_value .= ','; } $field_value .= "'" . $GLOBALS['db']->quote($val) . "'"; } } } } else { $field_value = $GLOBALS['db']->quote($parms['value']); } //set db_fields array. if(!isset($parms['db_field'])) { $parms['db_field'] = array($field); } if(isset($parms['my_items']) and $parms['my_items'] == true) { global $current_user; $field_value = $GLOBALS['db']->quote($current_user->id); $operator = '='; } $where = ''; $itr = 0; if($field_value != '') { foreach ($parms['db_field'] as $db_field) { if (strstr($db_field, '.') === false) { if(!$customField){ $db_field = $this->bean->table_name . "." . $db_field; }else{ $db_field = $this->bean->table_name . "_cstm." . $db_field; } } if($type == 'date') { // Collin - Have mysql as first because it's usually the case // The regular expression check is to circumvent special case YYYY-MM if($GLOBALS['db']->dbType == 'mysql') { if(preg_match('/^\d{4}.\d{1,2}$/', $field_value) == 0) { $field_value = $timedate->to_db_date($field_value, false); $operator = '='; } else { $operator = 'db_date'; } } else if($GLOBALS['db']->dbType == 'oci8') { if(preg_match('/^\d{4}.\d{1,2}$/', $field_value) == 0) { $field_value = $timedate->to_db_date($field_value, false); $field_value = "to_date('" . $field_value . "', 'YYYY-MM-DD hh24:mi:ss')"; } $operator = 'db_date'; } else if($GLOBALS['db']->dbType == 'mssql') { if(preg_match('/^\d{4}.\d{1,2}$/', $field_value) == 0) { $field_value = "Convert(DateTime, '".$timedate->to_db_date($field_value, false)."')"; } $operator = 'db_date'; } else { $field_value = $timedate->to_db_date($field_value, false); $operation = '='; } } if($GLOBALS['db']->dbType == 'oci8' && isset($parms['query_type']) && $parms['query_type'] == 'case_insensitive') { $db_field = 'upper(' . $db_field . ")"; $field_value = strtoupper($field_value); } $itr++; if(!empty($where)) { $where .= " OR "; } switch(strtolower($operator)) { case 'subquery': $where .= "{$db_field} IN ({$parms['subquery']} '{$field_value}%')"; break; case 'like': $where .= $db_field . " like '".$field_value.$like_char."'"; break; case 'in': $where .= $db_field . " in (".$field_value.')'; break; case '=': $where .= $db_field . " = '".$field_value ."'"; break; case 'db_date': if(preg_match('/^\d{4}.\d{1,2}$/', $field_value) == 0) { $where .= $db_field . " = ". $field_value; } else { // Create correct date_format conversion String if($GLOBALS['db']->dbType == 'oci8') { $where .= db_convert($db_field,'date_format',array("'YYYY-MM'")) . " = '" . $field_value . "'"; } else { $where .= db_convert($db_field,'date_format',array("'%Y-%m'")) . " = '" . $field_value . "'"; } } break; } } } if(!empty($where)) { if($itr > 1) { array_push($where_clauses, '( '.$where.' )'); } else { array_push($where_clauses, $where); } } } } return $where_clauses; } } ?>