AnsweredAssumed Answered

I can not look at all, after adding a function create_new_list_query in opportunity.php

Question asked by Juan Fernando on Oct 13, 2015
Hello, I have a problem as a function I've added to modules / Opportunities / Opportunity.php to visualize opportunities that belong to a sales manager is assigned as a salesperson, the function fulfills its purpose but not me It allows you to search any data oportuidades list.
To succeed it this tutorial
http://www.itsomniacs.com/2013/01/01/sugarcrm-tweaking-with-security-and-records-ownership/#codesynt...

function that aggregates is this:

function create_new_list_query($order_by, $where,$filter=array(),$params=array(), $show_deleted = 0,$join_type='', $return_array = false,$parentbean=null, $singleSelect = false, $ifListForExport = false)    {
        global $beanFiles, $beanList;
        $selectedFields = array();
        $secondarySelectedFields = array();
        $ret_array = array();
        $distinct = '';
        if($this->bean_implements('ACL') && ACLController::requireOwner($this->module_dir, 'list') )
        {
            global $current_user;
            $owner_where = $this->getOwnerWhere($current_user->id);
            if(empty($where))
            {
                $where = $owner_where;
            }
            else
            {
                $where .= ' AND '.  $owner_where;
            }
        }
        if(!empty($params['distinct']))
        {
            $distinct = ' DISTINCT ';
        }
        if(empty($filter))
        {
            $ret_array['select'] = " SELECT $distinct $this->table_name.* ";
        }
        else
        {
            $ret_array['select'] = " SELECT $distinct $this->table_name.id ";
        }
        $ret_array['from'] = " FROM $this->table_name ";
        $ret_array['from_min'] = $ret_array['from'];
        $ret_array['secondary_from'] = $ret_array['from'] ;
        $ret_array['where'] = '';
        $ret_array['order_by'] = '';
        //secondary selects are selects that need to be run after the primary query to retrieve additional info on main
        if($singleSelect)
        {
            $ret_array['secondary_select']=& $ret_array['select'];
            $ret_array['secondary_from'] = & $ret_array['from'];
        }
        else
        {
            $ret_array['secondary_select'] = '';
        }
        $custom_join = $this->getCustomJoin( empty($filter)? true: $filter );
        if((!isset($params['include_custom_fields']) || $params['include_custom_fields']))
        {
            $ret_array['select'] .= $custom_join['select'];
        }
        $ret_array['from'] .= $custom_join['join'];
        // Bug 52490 - Captivea (Sve) - To be able to add custom fields inside where clause in a subpanel
        $ret_array['from_min'] .= $custom_join['join'];
        $jtcount = 0;
        //LOOP AROUND FOR FIXIN VARDEF ISSUES
        require('include/VarDefHandler/listvardefoverride.php');
        if (file_exists('custom/include/VarDefHandler/listvardefoverride.php'))
        {
            require('custom/include/VarDefHandler/listvardefoverride.php');
        }

        $joined_tables = array();
        if(!empty($params['joined_tables']))
        {
            foreach($params['joined_tables'] as $table)
            {
                $joined_tables[$table] = 1;
            }
        }

        if(!empty($filter))
        {
            $filterKeys = array_keys($filter);
            if(is_numeric($filterKeys[0]))
            {
                $fields = array();
                foreach($filter as $field)
                {
                    $field = strtolower($field);
                    //remove out id field so we don't duplicate it
                    if ( $field == 'id' && !empty($filter) ) {
                        continue;
                    }
                    if(isset($this->field_defs[$field]))
                    {
                        $fields[$field]= $this->field_defs[$field];
                    }
                    else
                    {
                        $fields[$field] = array('force_exists'=>true);
                    }
                }
            }else{
                $fields =  $filter;
            }
        }
        else
        {
            $fields =  $this->field_defs;
        }

        $used_join_key = array();

        foreach($fields as $field=>$value)
        {
            //alias is used to alias field names
            $alias='';
            if  (isset($value['alias']))
            {
                $alias =' as ' . $value['alias'] . ' ';
            }

            if(empty($this->field_defs[$field]) || !empty($value['force_blank']) )
            {
                if(!empty($filter) && isset($filter[$field]['force_exists']) && $filter[$field]['force_exists'])
                {
                    if ( isset($filter[$field]['force_default']) )
                        $ret_array['select'] .= ", {$filter[$field]['force_default']} $field ";
                    else
                    //spaces are a fix for length issue problem with unions.  The union only returns the maximum number of characters from the first select statement.
                        $ret_array['select'] .= ", '                                                                                                                                                                                                                                                              ' $field ";
                }
                continue;
            }
            else
            {
                $data = $this->field_defs[$field];
            }

            //ignore fields that are a part of the collection and a field has been removed as a result of
            //layout customization.. this happens in subpanel customizations, use case, from the contacts subpanel
            //in opportunities module remove the contact_role/opportunity_role field.
            $process_field=true;
            if (isset($data['relationship_fields']) and !empty($data['relationship_fields']))
            {
                foreach ($data['relationship_fields'] as $field_name)
                {
                    if (!isset($fields[$field_name]))
                    {
                        $process_field=false;
                    }
                }
            }
            if (!$process_field)
            {
                continue;
            }

            if(  (!isset($data['source']) || $data['source'] == 'db') && (!empty($alias) || !empty($filter) ))
            {
                $ret_array['select'] .= ", $this->table_name.$field $alias";
                $selectedFields["$this->table_name.$field"] = true;
            } else if(  (!isset($data['source']) || $data['source'] == 'custom_fields') && (!empty($alias) || !empty($filter) )) {
                //add this column only if it has NOT already been added to select statement string
                $colPos = strpos($ret_array['select'],"$this->table_name"."_cstm".".$field");
                if(!$colPos || $colPos<0)
                {
                    $ret_array['select'] .= ", $this->table_name"."_cstm".".$field $alias";
                }

                $selectedFields["$this->table_name.$field"] = true;
            }

            if($data['type'] != 'relate' && isset($data['db_concat_fields']))
            {
                $ret_array['select'] .= ", " . $this->db->concat($this->table_name, $data['db_concat_fields']) . " as $field";
                $selectedFields[$this->db->concat($this->table_name, $data['db_concat_fields'])] = true;
            }
            //Custom relate field or relate fields built in module builder which have no link field associated.
            if ($data['type'] == 'relate' && (isset($data['custom_module']) || isset($data['ext2']))) {
                $joinTableAlias = 'jt' . $jtcount;
                $relateJoinInfo = $this->custom_fields->getRelateJoin($data, $joinTableAlias, false);
                $ret_array['select'] .= $relateJoinInfo['select'];
                $ret_array['from'] .= $relateJoinInfo['from'];
                //Replace any references to the relationship in the where clause with the new alias
                //If the link isn't set, assume that search used the local table for the field
                $searchTable = isset($data['link']) ? $relateJoinInfo['rel_table'] : $this->table_name;
                $field_name = $relateJoinInfo['rel_table'] . '.' . !empty($data['name'])?$data['name']:'name';
                $where = preg_replace('/(^|[\s(])' . $field_name . '/' , '${1}' . $relateJoinInfo['name_field'], $where);
                $jtcount++;
            }
            //Parent Field
            if ($data['type'] == 'parent') {
                //See if we need to join anything by inspecting the where clause
                $match = preg_match('/(^|[\s(])parent_(\w+)_(\w+)\.name/', $where, $matches);
                if ($match) {
                    $joinTableAlias = 'jt' . $jtcount;
                    $joinModule = $matches[2];
                    $joinTable = $matches[3];
                    $localTable = $this->table_name;
                    if (!empty($data['custom_module'])) {
                        $localTable .= '_cstm';
                    }
                    global $beanFiles, $beanList, $module;
                    require_once($beanFiles[$beanList[$joinModule]]);
                    $rel_mod = new $beanList[$joinModule]();
                    $nameField = "$joinTableAlias.name";
                    if (isset($rel_mod->field_defs['name']))
                    {
                        $name_field_def = $rel_mod->field_defs['name'];
                        if(isset($name_field_def['db_concat_fields']))
                        {
                            $nameField = $this->db->concat($joinTableAlias, $name_field_def['db_concat_fields']);
                        }
                    }
                    $ret_array['select'] .= ", $nameField {$data['name']} ";
                    $ret_array['from'] .= " LEFT JOIN $joinTable $joinTableAlias
                        ON $localTable.{$data['id_name']} = $joinTableAlias.id";
                    //Replace any references to the relationship in the where clause with the new alias
                    $where = preg_replace('/(^|[\s(])parent_' . $joinModule . '_' . $joinTable . '\.name/', '${1}' . $nameField, $where);
                    $jtcount++;
                }
            }

            if ($this->is_relate_field($field))
            {
                $this->load_relationship($data['link']);
                if(!empty($this->$data['link']))
                {
                    $params = array();
                    if(empty($join_type))
                    {
                        $params['join_type'] = ' LEFT JOIN ';
                    }
                    else
                    {
                        $params['join_type'] = $join_type;
                    }
                    if(isset($data['join_name']))
                    {
                        $params['join_table_alias'] = $data['join_name'];
                    }
                    else
                    {
                        $params['join_table_alias'] = 'jt' . $jtcount;

                    }
                    if(isset($data['join_link_name']))
                    {
                        $params['join_table_link_alias'] = $data['join_link_name'];
                    }
                    else
                    {
                        $params['join_table_link_alias'] = 'jtl' . $jtcount;
                    }
                    $join_primary = !isset($data['join_primary']) || $data['join_primary'];

                    $join = $this->$data['link']->getJoin($params, true);
                    $used_join_key[] = $join['rel_key'];
                    $rel_module = $this->$data['link']->getRelatedModuleName();
                    $table_joined = !empty($joined_tables[$params['join_table_alias']]) || (!empty($joined_tables[$params['join_table_link_alias']]) && isset($data['link_type']) && $data['link_type'] == 'relationship_info');

     //if rname is set to 'name', and bean files exist, then check if field should be a concatenated name
     global $beanFiles, $beanList;
     if($data['rname'] && !empty($beanFiles[$beanList[$rel_module]])) {

      //create an instance of the related bean
      require_once($beanFiles[$beanList[$rel_module]]);
      $rel_mod = new $beanList[$rel_module]();
      //if bean has first and last name fields, then name should be concatenated
      if(isset($rel_mod->field_name_map['first_name']) && isset($rel_mod->field_name_map['last_name'])){
        $data['db_concat_fields'] = array(0=>'first_name', 1=>'last_name');
      }
     }


        if($join['type'] == 'many-to-many')
        {
         if(empty($ret_array['secondary_select']))
         {
          $ret_array['secondary_select'] = " SELECT $this->table_name.id ref_id  ";

                            if(!empty($beanFiles[$beanList[$rel_module]]) && $join_primary)
                            {
                                require_once($beanFiles[$beanList[$rel_module]]);
                                $rel_mod = new $beanList[$rel_module]();
                                if(isset($rel_mod->field_defs['assigned_user_id']))
                                {
                                    $ret_array['secondary_select'].= " , ". $params['join_table_alias'] . ".assigned_user_id {$field}_owner, '$rel_module' {$field}_mod";
                                }
                                else
                                {
                                    if(isset($rel_mod->field_defs['created_by']))
                                    {
                                        $ret_array['secondary_select'].= " , ". $params['join_table_alias'] . ".created_by {$field}_owner , '$rel_module' {$field}_mod";
                                    }
                                }
                            }
                        }

                        if(isset($data['db_concat_fields']))
                        {
                            $ret_array['secondary_select'] .= ' , ' . $this->db->concat($params['join_table_alias'], $data['db_concat_fields']) . ' ' . $field;
                        }
                        else
                        {
                            if(!isset($data['relationship_fields']))
                            {
                                $ret_array['secondary_select'] .= ' , ' . $params['join_table_alias'] . '.' . $data['rname'] . ' ' . $field;
                            }
                        }
                        if(!$singleSelect)
                        {
                            $ret_array['select'] .= ", '                                                                                                                                                                                                                                                              ' $field ";
                        }
                        $count_used =0;
                        foreach($used_join_key as $used_key) {
                            if($used_key == $join['rel_key']) $count_used++;
                        }
                        if($count_used <= 1) {//27416, the $ret_array['secondary_select'] should always generate, regardless the dbtype
                            // add rel_key only if it was not aready added
                            if(!$singleSelect)
                            {
                                $ret_array['select'] .= ", '                                    '  " . $join['rel_key'] . ' ';
                            }
                            $ret_array['secondary_select'] .= ', ' . $params['join_table_link_alias'].'.'. $join['rel_key'] .' ' . $join['rel_key'];
                        }
                        if(isset($data['relationship_fields']))
                        {
                            foreach($data['relationship_fields'] as $r_name=>$alias_name)
                            {
                                if(!empty( $secondarySelectedFields[$alias_name]))continue;
                                $ret_array['secondary_select'] .= ', ' . $params['join_table_link_alias'].'.'. $r_name .' ' . $alias_name;
                                $secondarySelectedFields[$alias_name] = true;
                            }
                        }
                        if(!$table_joined)
                        {
      &n

Outcomes