Skip to content

Commit

Permalink
Allow saving reports fields down arbritrarily deep relationships. Sti…
Browse files Browse the repository at this point in the history
…ll a WIP.
  • Loading branch information
JimMackin committed Nov 24, 2014
1 parent 267b870 commit 2cb8605
Show file tree
Hide file tree
Showing 9 changed files with 128 additions and 65 deletions.
3 changes: 3 additions & 0 deletions modules/AOR_Fields/AOR_Field.php
Expand Up @@ -75,6 +75,9 @@ function save_lines($post_data, $parent, $key = ''){
} else if($field_def['name'] == 'value') {
$post_data[$key.$field_def['name']][$i] = fixUpFormatting($_REQUEST['report_module'], $field->field, $post_data[$key.$field_def['name']][$i]);
}
if($field_def['name'] == 'module_path'){
$post_data[$key.$field_def['name']][$i] = base64_encode(serialize(explode(":",$post_data[$key.$field_def['name']][$i])));
}
$field->$field_def['name'] = $post_data[$key.$field_def['name']][$i];
}

Expand Down
2 changes: 1 addition & 1 deletion modules/AOR_Fields/fieldLines.js
Expand Up @@ -269,7 +269,7 @@ function insertFieldLine(){
b.style.width = '12%';
var viewStyle = 'display:none';
if(action_sugar_grp1 == 'EditView'){viewStyle = '';}
b.innerHTML = "<input type='hidden' name='aor_fields_module_path["+ fieldln +"][0]' id='aor_fields_module_path" + fieldln + "' value=''>";
b.innerHTML = "<input type='hidden' name='aor_fields_module_path["+ fieldln +"]' id='aor_fields_module_path" + fieldln + "' value=''>";
if(action_sugar_grp1 == 'EditView'){viewStyle = 'display:none';}else{viewStyle = '';}
b.innerHTML += "<span id='aor_fields_module_path_display" + fieldln + "'></span>";

Expand Down
60 changes: 35 additions & 25 deletions modules/AOR_Reports/AOR_Report.php
Expand Up @@ -149,7 +149,7 @@ function build_group_report($offset = -1, $links = true){
if($path[0] != $module->module_dir){
foreach($path as $rel){
$new_field_module = new $beanList[getRelatedModule($field_module->module_dir,$rel)];
$query_array = $this->build_report_query_join($rel, $field_module, 'relationship', $query_array, $new_field_module);
$query_array = $this->build_report_query_join($rel, $table_alias,$field_module, 'relationship', $query_array, $new_field_module);
$field_module = $new_field_module;
$table_alias = $rel;
}
Expand All @@ -167,7 +167,7 @@ function build_group_report($offset = -1, $links = true){

if( (isset($data['source']) && $data['source'] == 'custom_fields')) {
$select_field = $table_alias.'_cstm.'.$field->field;
$query_array = $this->build_report_query_join($table_alias.'_cstm', $field_module, 'custom', $query);
$query_array = $this->build_report_query_join($table_alias.'_cstm', $table_alias.'_cstm', $field_module, 'custom', $query);
} else {
$select_field= $table_alias.'.'.$field->field;
}
Expand Down Expand Up @@ -508,7 +508,7 @@ function build_report_query($group_value =''){
$query .= ($query == '' ? 'SELECT ' : ', ').$select;
}

$query .= ' FROM '.$module->table_name.' ';
$query .= ' FROM '.$this->db->quoteIdentifier($module->table_name).' ';

if(isset($query_array['join'])){
foreach ($query_array['join'] as $join){
Expand Down Expand Up @@ -542,13 +542,21 @@ function build_report_query($group_value =''){

}

function getAliasForField($module, AOR_Field $field){
$path = unserialize(base64_decode($field->module_path));
if(empty($path[0])){
return $module;
}

}

function build_report_query_select($query = array(), $group_value =''){
global $beanList;

if($beanList[$this->report_module]){
$module = new $beanList[$this->report_module]();

$query['select'][] = $module->table_name.".id AS '".$module->table_name."_id'";
$query['select'][] = $this->db->quoteIdentifier($module->table_name).".id AS '".$module->table_name."_id'";

$sql = "SELECT id FROM aor_fields WHERE aor_report_id = '".$this->id."' AND deleted = 0 ORDER BY field_order ASC";
$result = $this->db->query($sql);
Expand All @@ -564,12 +572,14 @@ function build_report_query_select($query = array(), $group_value =''){

$field_module = $module;
$table_alias = $field_module->table_name;
if($path[0] != $module->module_dir){
if(!empty($path[0]) && $path[0] != $module->module_dir){
foreach($path as $rel){
$new_field_module = new $beanList[getRelatedModule($field_module->module_dir,$rel)];
$query = $this->build_report_query_join($rel, $field_module, 'relationship', $query, $new_field_module);
$oldAlias = $table_alias;
$table_alias = $table_alias.":".$rel;
$query = $this->build_report_query_join($rel, $table_alias, $oldAlias, $field_module, 'relationship', $query, $new_field_module);

$field_module = $new_field_module;
$table_alias = $rel;
}
}

Expand All @@ -587,9 +597,9 @@ function build_report_query_select($query = array(), $group_value =''){

if($data['type'] == 'link' && $data['source'] == 'non-db') {
$new_field_module = new $beanList[getRelatedModule($field_module->module_dir,$data['relationship'])];
$query = $this->build_report_query_join($data['relationship'], $field_module, 'relationship', $query, $new_field_module);
$field_module = $new_field_module;
$table_alias = $data['relationship'];
$query = $this->build_report_query_join($data['relationship'],$table_alias, $field_module, 'relationship', $query, $new_field_module);
$field_module = $new_field_module;
$field->field = 'id';
}

Expand All @@ -599,9 +609,9 @@ function build_report_query_select($query = array(), $group_value =''){

if((isset($data['source']) && $data['source'] == 'custom_fields')) {
$select_field = $table_alias.'_cstm.'.$field->field;
$query = $this->build_report_query_join($table_alias.'_cstm', $field_module, 'custom', $query);
$query = $this->build_report_query_join($table_alias.'_cstm', $table_alias.'_cstm', $field_module, 'custom', $query);
} else {
$select_field= $table_alias.'.'.$field->field;
$select_field= $this->db->quoteIdentifier($table_alias).'.'.$field->field;
}

if($field->sort_by != ''){
Expand All @@ -626,24 +636,24 @@ function build_report_query_select($query = array(), $group_value =''){
}


function build_report_query_join($name, SugarBean $module, $type, $query = array(),SugarBean $rel_module = null ){
function build_report_query_join($name, $alias, $parentAlias, SugarBean $module, $type, $query = array(),SugarBean $rel_module = null ){

if(!isset($query['join'][$name])){
if(!isset($query['join'][$alias])){

switch ($type){
case 'custom':
$query['join'][$name] = 'LEFT JOIN '.$module->get_custom_table_name().' '.$name.' ON '.$module->table_name.'.id = '. $name.'.id_c ';
$query['join'][$alias] = 'LEFT JOIN '.$this->db->quoteIdentifier($module->get_custom_table_name()).' '.$this->db->quoteIdentifier($name).' ON '.$module->table_name.'.id = '. $this->db->quoteIdentifier($name).'.id_c ';
break;

case 'relationship':
if($module->load_relationship($name)){
$params['join_type'] = 'LEFT JOIN';
$params['join_table_alias'] = $name;
$params['join_table_alias'] = $this->db->quoteIdentifier($alias);
$params['right_join_table_alias'] = $this->db->quoteIdentifier($parentAlias);
$join = $module->$name->getJoin($params, true);

$query['join'][$name] = $join['join'];
if($rel_module != null) $query['join'][$name] .= $this->build_report_access_query($rel_module, $name);
$query['select'][] = $join['select']." AS '".$name."_id'";
$query['join'][$alias] = $join['join'];
if($rel_module != null) $query['join'][$alias] .= $this->build_report_access_query($rel_module, $name);
$query['select'][] = $join['select']." AS '".$alias."_id'";
}
break;
default:
Expand Down Expand Up @@ -708,7 +718,7 @@ function build_report_query_where($query = array()){
if($path[0] != $module->module_dir){
foreach($path as $rel){
$new_condition_module = new $beanList[getRelatedModule($condition_module->module_dir,$rel)];
$query = $this->build_report_query_join($rel, $condition_module, 'relationship', $query, $new_condition_module);
$query = $this->build_report_query_join($rel, $table_alias, $condition_module, 'relationship', $query, $new_condition_module);
$condition_module = $new_condition_module;
$table_alias = $rel;
}
Expand All @@ -731,14 +741,14 @@ function build_report_query_where($query = array()){

if($data['type'] == 'link' && $data['source'] == 'non-db'){
$new_field_module = new $beanList[getRelatedModule($condition_module->module_dir,$data['relationship'])];
$query = $this->build_report_query_join($data['relationship'], $condition_module, 'relationship', $query, $new_field_module);
$query = $this->build_report_query_join($data['relationship'], $table_alias, $condition_module, 'relationship', $query, $new_field_module);
$field_module = $new_field_module;
$table_alias = $data['relationship'];
$condition->field = 'id';
}
if( (isset($data['source']) && $data['source'] == 'custom_fields')) {
$field = $table_alias.'_cstm.'.$condition->field;
$query = $this->build_report_query_join($table_alias.'_cstm', $condition_module, 'custom', $query);
$query = $this->build_report_query_join($table_alias.'_cstm',$table_alias.'_cstm', $condition_module, 'custom', $query);
} else {
$field = $table_alias.'.'.$condition->field;
}
Expand All @@ -759,14 +769,14 @@ function build_report_query_where($query = array()){

if($data['type'] == 'link' && $data['source'] == 'non-db'){
$new_field_module = new $beanList[getRelatedModule($field_module->module_dir,$data['relationship'])];
$query = $this->build_report_query_join($data['relationship'], $field_module, 'relationship', $query, $new_field_module);
$query = $this->build_report_query_join($data['relationship'], $table_alias, $field_module, 'relationship', $query, $new_field_module);
$field_module = $new_field_module;
$table_alias = $data['relationship'];
$field->field = 'id';
}
if( (isset($data['source']) && $data['source'] == 'custom_fields')) {
$value = $condition_module->table_name.'_cstm.'.$condition->value;
$query = $this->build_report_query_join($condition_module->table_name.'_cstm', $condition_module, 'custom', $query);
$query = $this->build_report_query_join($condition_module->table_name.'_cstm', $table_alias.'_cstm', $condition_module, 'custom', $query);
} else {
$value = $condition_module->table_name.'.'.$condition->value;
}
Expand All @@ -784,7 +794,7 @@ function build_report_query_where($query = array()){
$data = $condition_module->field_defs[$params[0]];
if( (isset($data['source']) && $data['source'] == 'custom_fields')) {
$value = $condition_module->table_name.'_cstm.'.$params[0];
$query = $this->build_report_query_join($condition_module->table_name.'_cstm', $condition_module, 'custom', $query);
$query = $this->build_report_query_join($condition_module->table_name.'_cstm', $table_alias.'_cstm', $condition_module, 'custom', $query);
} else {
$value = $condition_module->table_name.'.'.$params[0];
}
Expand Down
46 changes: 23 additions & 23 deletions modules/AOR_Reports/js/jqtree/tree.jquery.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions modules/AOR_Reports/language/en_us.lang.php
Expand Up @@ -62,4 +62,5 @@
'LBL_DOWNLOAD_PDF' => 'Download PDF',
'LBL_ADD_TO_PROSPECT_LIST' => 'Add To Target List',
'LBL_AOR_FIELDS_SUBPANEL_TITLE' => 'Fields',
'LBL_AOR_CONDITIONS_SUBPANEL_TITLE' => 'Conditions',
);
1 change: 1 addition & 0 deletions modules/AOR_Reports/language/es_es.lang.php
Expand Up @@ -62,4 +62,5 @@
'LBL_DOWNLOAD_PDF' => 'Descargar PDF',
'LBL_ADD_TO_PROSPECT_LIST' => 'Agregar a Lista de Público Objetivo',
'LBL_AOR_FIELDS_SUBPANEL_TITLE' => 'Campos',
'LBL_AOR_CONDITIONS_SUBPANEL_TITLE' => 'Condiciones',
);
1 change: 1 addition & 0 deletions modules/AOR_Reports/language/ru_ru.lang.php
Expand Up @@ -68,4 +68,5 @@
'LBL_DOWNLOAD_PDF' => 'Сохранить в PDF',
'LBL_ADD_TO_PROSPECT_LIST' => 'Добавить в список адресатов',
'LBL_AOR_FIELDS_SUBPANEL_TITLE' => 'Поля',
'LBL_AOR_CONDITIONS_SUBPANEL_TITLE' => 'Условия',
);

0 comments on commit 2cb8605

Please sign in to comment.