diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php index be1fdafa2..b96011f4a 100644 --- a/application/displayblock.class.inc.php +++ b/application/displayblock.class.inc.php @@ -772,13 +772,57 @@ EOF $sHtml .= "
If the chart does not display, install Flash
\n"; $oPage->add_script("function ofc_resize(left, width, top, height) { /* do nothing special */ }"); $oPage->add_ready_script("swfobject.embedSWF(\"../images/open-flash-chart.swf\", \"my_chart_{$iChartCounter}\", \"100%\", \"300\",\"9.0.0\", \"expressInstall.swf\", - {\"data-file\":\"".urlencode("../pages/ajax.render.php?operation=open_flash_chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[chart_type]=$sChartType¶ms[chart_title]=$sTitle&filter=".$sFilter)."\"}, {wmode: 'transparent'} );\n"); + {\"data-file\":\"".urlencode("../pages/ajax.render.php?operation=open_flash_chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[chart_type]=$sChartType¶ms[chart_title]=$sTitle&id=$sId&filter=".$sFilter)."\"}, {wmode: 'transparent'} );\n"); $iChartCounter++; + if (isset($aExtraParams['group_by'])) + { + $sGroupByField = $aExtraParams['group_by']; + $aGroupBy = array(); + while($oObj = $this->m_oSet->Fetch()) + { + if (isset($aExtraParams['group_by_expr'])) + { + eval("\$sValue = ".sprintf($aExtraParams['group_by_expr'], $oObj->Get($sGroupByField)).';'); + } + else + { + $sValue = $oObj->Get($sGroupByField); + } + $aGroupBy[$sValue] = isset($aGroupBy[$sValue]) ? $aGroupBy[$sValue]+1 : 1; + } + $sFilter = urlencode($this->m_oFilter->serialize()); + $aData = array(); + $aLabels = array(); + $idx = 0; + foreach($aGroupBy as $sValue => $iValue) + { + $oDrillDownFilter = clone $this->m_oFilter; + $oDrillDownFilter->AddCondition($sGroupByField, $sValue, '='); + $aURLs[$idx] = $oDrillDownFilter->serialize(); + $idx++; + } + $sURLList = ''; + foreach($aURLs as $index => $sURL) + { + $sURLList .= "\taURLs[$index] = '".utils::GetAbsoluteUrlAppRoot()."pages/UI.php?operation=search&format=html&filter=".addslashes($sURL)."';\n"; + } + $oPage->add_script( +<<m_oFilter->serialize()); $aData = array(); $aLabels = array(); + $maxValue = 0; foreach($aGroupBy as $sValue => $iValue) { - $aData[] = $iValue; + $oBarValue = new bar_value($iValue); + $oBarValue->on_click("ofc_drill_down_$sId"); + $aData[] = $oBarValue; + if ($iValue > $maxValue) $maxValue = $iValue; $aLabels[] = $sValue; } - $maxValue = max($aData); $oYAxis = new y_axis(); $aMagicValues = array(1,2,5,10); $iMultiplier = 1; @@ -869,7 +916,9 @@ EOF $aData = array(); foreach($aGroupBy as $sValue => $iValue) { - $aData[] = new pie_value($iValue, $sValue); //@@ BUG: not passed via ajax !!! + $PieValue = new pie_value($iValue, $sValue); //@@ BUG: not passed via ajax !!! + $PieValue->on_click("ofc_drill_down_$sId"); + $aData[] = $PieValue; } diff --git a/application/sqlblock.class.inc.php b/application/sqlblock.class.inc.php index 7696babfb..07f6c3efa 100644 --- a/application/sqlblock.class.inc.php +++ b/application/sqlblock.class.inc.php @@ -236,7 +236,7 @@ class SqlBlock { $sFilter = str_replace(':'.$sColName, "'".addslashes( $aRow[$sColName] )."'", $sFilter); } - $sURL = '../pages/UI.php?operation=search_oql&search_form=0&oql_class='.$sClass.'&oql_clause='.urlencode($sFilter).'&format=html?'.$oAppContext->GetForLink(); + $sURL = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search_oql&search_form=0&oql_class='.$sClass.'&oql_clause='.urlencode($sFilter).'&format=html?'.$oAppContext->GetForLink(); $aDisplayRow[$sName] = ''.$aRow[$sName].""; } else @@ -270,7 +270,7 @@ class SqlBlock $sOQLClause = str_replace('SELECT '.$sClass, '', $sDrillDown); $aSQLColNames = array_keys(current($aRows)); // Read the list of columns from the current (i.e. first) element of the array $oAppContext = new ApplicationContext(); - $sURL = '../pages/UI.php?operation=search_oql&search_form=0&oql_class='.$sClass.'&format=html&'.$oAppContext->GetForLink().'&oql_clause='; + $sURL = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search_oql&search_form=0&oql_class='.$sClass.'&format=html&'.$oAppContext->GetForLink().'&oql_clause='; $aURLs = array(); } foreach($aValues as $key => $value)