* If pivot have not fieldSettings, try to init it. if pivot filters !is_array(), try to json_decode it. Compatibility screen/model use processPivot.

This commit is contained in:
songchenxuan
2023-06-06 16:39:09 +08:00
parent 0648689d24
commit e46a29fd32
2 changed files with 72 additions and 63 deletions
+70 -61
View File
@@ -212,85 +212,94 @@ class pivotModel extends model
*/
public function processFieldSettings($pivot)
{
$this->loadModel('chart');
$this->loadModel('dataview');
if(isset($pivot->fieldSettings))
{
$fieldSettings = $pivot->fieldSettings;
}
else
{
$fieldSettings = (!empty($pivot->fields) and $pivot->fields != 'null') ? json_decode($pivot->fields) : array();
}
if(empty($fieldSettings)) return $pivot;
$sql = isset($pivot->sql) ? $pivot->sql : '';
$filters = isset($pivot->filters) ? $pivot->filters : array();
$recPerPage = 20;
$pageID = 1;
$this->loadModel('chart');
$this->loadModel('dataview');
if(!empty($filters))
{
foreach($filters as $index => $filter)
{
if(empty($filter['default'])) continue;
$sql = isset($pivot->sql) ? $pivot->sql : '';
$filters = isset($pivot->filters) ? (is_array($pivot->filters) ? $pivot->filters : json_decode($pivot->filters, true)) : array();
$recPerPage = 20;
$pageID = 1;
$filters[$index]['default'] = $this->processDateVar($filter['default']);
}
}
$querySQL = $this->chart->parseSqlVars($sql, $filters);
if(!empty($filters))
{
foreach($filters as $index => $filter)
{
if(empty($filter['default'])) continue;
$columns = $this->dataview->getColumns($querySQL);
$columnFields = array();
foreach($columns as $column => $type) $columnFields[$column] = $column;
$filters[$index]['default'] = $this->processDateVar($filter['default']);
}
}
$querySQL = $this->chart->parseSqlVars($sql, $filters);
$tableAndFields = $this->chart->getTables($querySQL);
$tables = $tableAndFields['tables'];
$fields = $tableAndFields['fields'];
$querySQL = $tableAndFields['sql'];
$columns = $this->dataview->getColumns($querySQL);
$columnFields = array();
foreach($columns as $column => $type) $columnFields[$column] = $column;
$moduleNames = array();
if($tables) $moduleNames = $this->dataview->getModuleNames($tables);
$tableAndFields = $this->chart->getTables($querySQL);
$tables = $tableAndFields['tables'];
$fields = $tableAndFields['fields'];
$querySQL = $tableAndFields['sql'];
list($fieldPairs, $relatedObject) = $this->dataview->mergeFields($columnFields, $fields, $moduleNames);
$moduleNames = array();
if($tables) $moduleNames = $this->dataview->getModuleNames($tables);
/* Use fieldPairs, columns, relatedObject, objectFields refresh pivot fieldSettings .*/
list($fieldPairs, $relatedObject) = $this->dataview->mergeFields($columnFields, $fields, $moduleNames);
$fieldSettings = $pivot->fieldSettings;
$objectFields = array();
foreach($this->lang->dataview->objects as $object => $objectName) $objectFields[$object] = $this->dataview->getTypeOptions($object);
/* Use fieldPairs, columns, relatedObject, objectFields refresh pivot fieldSettings .*/
$fieldSettingsNew = new stdclass();
$objectFields = array();
foreach($this->lang->dataview->objects as $object => $objectName) $objectFields[$object] = $this->dataview->getTypeOptions($object);
foreach($fieldPairs as $index => $field)
{
$defaultType = $columns->$index;
$defaultObject = $relatedObject[$index];
$fieldSettingsNew = new stdclass();
if(!empty($objectFields) and isset($objectFields[$defaultObject]) and isset($objectFields[$defaultObject][$index])) $defaultType = $objectFields[$defaultObject][$index]['type'] == 'object' ? 'string' : $objectFields[$defaultObject][$index]['type'];
foreach($fieldPairs as $index => $field)
{
$defaultType = $columns->$index;
$defaultObject = $relatedObject[$index];
if(!isset($fieldSettings->$index))
{
$fieldItem = new stdclass();
$fieldItem->name = $field;
$fieldItem->object = $defaultObject;
$fieldItem->field = $index;
$fieldItem->type = $defaultType;
if(!empty($objectFields) and isset($objectFields[$defaultObject]) and isset($objectFields[$defaultObject][$index])) $defaultType = $objectFields[$defaultObject][$index]['type'] == 'object' ? 'string' : $objectFields[$defaultObject][$index]['type'];
$fieldSettingsNew[$index] = $fieldItem;
}
else
{
if(!isset($fieldSettings->$index->object) or strlen($fieldSettings->$index->object) == 0) $fieldSettings->$index->object = $defaultObject;
if(!isset($fieldSettings->$index))
{
$fieldItem = new stdclass();
$fieldItem->name = $field;
$fieldItem->object = $defaultObject;
$fieldItem->field = $index;
$fieldItem->type = $defaultType;
if(!isset($fieldSettings->$index->field) or strlen($fieldSettings->$index->field) == 0)
{
$fieldSettings->$index->field = $index;
$fieldSettings->$index->object = $defaultObject;
$fieldSettings->$index->type = 'string';
}
$fieldSettingsNew[$index] = $fieldItem;
}
else
{
if(!isset($fieldSettings->$index->object) or strlen($fieldSettings->$index->object) == 0) $fieldSettings->$index->object = $defaultObject;
$object = $fieldSettings->$index->object;
$type = $fieldSettings->$index->type;
if($object == $defaultObject && $type != $defaultType) $fieldSettings->$index->type = $defaultType;
if(!isset($fieldSettings->$index->field) or strlen($fieldSettings->$index->field) == 0)
{
$fieldSettings->$index->field = $index;
$fieldSettings->$index->object = $defaultObject;
$fieldSettings->$index->type = 'string';
}
$fieldSettingsNew->$index = $fieldSettings->$index;
}
}
$pivot->fieldSettings = $fieldSettingsNew;
$object = $fieldSettings->$index->object;
$type = $fieldSettings->$index->type;
if($object == $defaultObject && $type != $defaultType) $fieldSettings->$index->type = $defaultType;
return $pivot;
$fieldSettingsNew->$index = $fieldSettings->$index;
}
}
$pivot->fieldSettings = $fieldSettingsNew;
return $pivot;
}
/**
+2 -2
View File
@@ -361,7 +361,7 @@ class screenModel extends model
foreach($yStats as $index => $dataList)
{
$field = zget($fields, $metrics[$index]);
$fieldName = $field->name;
$fieldName = $field->name;
if(isset($langs[$field->field]) and !empty($langs[$field->field][$clientLang])) $fieldName = $langs[$field->field][$clientLang];
$field = $fieldName . '(' . zget($this->lang->chart->aggList, $aggs[$index]) . ')';
$dimensions[] = $field;
@@ -514,7 +514,7 @@ class screenModel extends model
foreach($yStats as $index => $dataList)
{
$field = zget($fields, $metrics[$index]);
$fieldName = $field->name;
$fieldName = $field->name;
if(isset($langs[$field->field]) and !empty($langs[$field->field][$clientLang])) $fieldName = $langs[$field->field][$clientLang];
$field = $fieldName . '(' . zget($this->lang->chart->aggList, $aggs[$index]) . ')';