コード例 #1
0
 /**
  * @return string
  */
 protected function renderChartContent()
 {
     $reportDataProviderToAmChartMakerAdapter = $this->dataProvider->makeReportDataProviderToAmChartMakerAdapter();
     Yii::import('ext.amcharts.AmChartMaker');
     $amChart = new AmChartMaker();
     $amChart->categoryField = ReportDataProviderToAmChartMakerAdapter::resolveFirstSeriesDisplayLabelName(1);
     $amChart->data = $reportDataProviderToAmChartMakerAdapter->getData();
     $amChart->id = $this->uniqueLayoutId;
     $amChart->type = $reportDataProviderToAmChartMakerAdapter->getType();
     $amChart->xAxisName = $this->dataProvider->resolveFirstSeriesLabel();
     $amChart->yAxisName = $this->dataProvider->resolveFirstRangeLabel();
     $amChart->yAxisUnitContent = $this->resolveYAxisUnitContent();
     if ($reportDataProviderToAmChartMakerAdapter->isStacked()) {
         for ($i = 1; $i < $reportDataProviderToAmChartMakerAdapter->getSecondSeriesValueCount() + 1; $i++) {
             $title = $reportDataProviderToAmChartMakerAdapter->getSecondSeriesDisplayLabelByKey($i);
             $balloonText = '"[[' . ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesDisplayLabelName($i) . ']] - [[' . ReportDataProviderToAmChartMakerAdapter::resolveFirstRangeDisplayLabelName($i) . ']] : [[' . ReportDataProviderToAmChartMakerAdapter::resolveFirstSeriesFormattedValueName($i) . ']] - [[' . ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesDisplayLabelName($i) . ']] : [[' . ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesFormattedValueName($i) . ']] "';
             $amChart->addSerialGraph(ReportDataProviderToAmChartMakerAdapter::resolveFirstSeriesValueName($i), 'column', array('title' => '"' . CJavaScript::quote($title) . '"', 'balloonText' => $balloonText));
         }
     } else {
         $amChart->addSerialGraph(ReportDataProviderToAmChartMakerAdapter::resolveFirstSeriesValueName(1), 'column');
     }
     $scriptContent = $amChart->javascriptChart();
     Yii::app()->getClientScript()->registerScript(__CLASS__ . '#' . $this->uniqueLayoutId, $scriptContent);
     $cClipWidget = new CClipWidget();
     $cClipWidget->beginClip("Chart" . $this->uniqueLayoutId);
     $cClipWidget->widget('application.core.widgets.AmChart', array('id' => $this->uniqueLayoutId));
     $cClipWidget->endClip();
     return $cClipWidget->getController()->clips['Chart' . $this->uniqueLayoutId];
 }
コード例 #2
0
 /**
  * @return ReportDataProviderToAmChartMakerAdapter
  */
 protected function makeStackedReportDataProviderToAmChartMakerAdapter()
 {
     $resultsData = $this->fetchChartData();
     $firstRangeAttributeName = $this->resolveChartFirstRangeAttributeNameForReportResultsRowData();
     $secondRangeAttributeName = $this->resolveChartSecondRangeAttributeNameForReportResultsRowData();
     $chartData = array();
     $secondSeriesValueData = array();
     $secondSeriesDisplayLabels = array();
     $secondSeriesValueCount = 1;
     $firstSeriesDisplayAttributeKey = $this->getDisplayAttributeKeyByAttribute($this->report->getChart()->firstSeries);
     $secondSeriesDisplayAttributeKey = $this->getDisplayAttributeKeyByAttribute($this->report->getChart()->secondSeries);
     foreach ($resultsData as $data) {
         $firstSeriesDataValue = $data->resolveRawValueByDisplayAttributeKey($firstSeriesDisplayAttributeKey);
         $chartData[$firstSeriesDataValue] = array(ReportDataProviderToAmChartMakerAdapter::resolveFirstSeriesDisplayLabelName(1) => $this->getDisplayAttributeByAttribute($this->report->getChart()->firstSeries)->resolveValueAsLabelForHeaderCell($firstSeriesDataValue, true));
         $secondSeriesDataValue = $data->resolveRawValueByDisplayAttributeKey($secondSeriesDisplayAttributeKey);
         if (!isset($secondSeriesValueData[$secondSeriesDataValue])) {
             $secondSeriesValueData[$secondSeriesDataValue] = $secondSeriesValueCount;
             $secondSeriesDisplayLabels[$secondSeriesValueCount] = $this->getDisplayAttributeByAttribute($this->report->getChart()->secondSeries)->resolveValueAsLabelForHeaderCell($secondSeriesDataValue, true);
             $secondSeriesValueCount++;
         }
     }
     foreach ($resultsData as $data) {
         $firstSeriesDataValue = $data->resolveRawValueByDisplayAttributeKey($firstSeriesDisplayAttributeKey);
         $secondSeriesDataValue = $data->resolveRawValueByDisplayAttributeKey($secondSeriesDisplayAttributeKey);
         $secondSeriesKey = $secondSeriesValueData[$secondSeriesDataValue];
         if (!isset($chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveFirstSeriesValueName($secondSeriesKey)])) {
             $chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveFirstSeriesValueName($secondSeriesKey)] = 0;
         }
         $chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveFirstSeriesValueName($secondSeriesKey)] += $data->{$firstRangeAttributeName};
         if (!isset($chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveFirstRangeDisplayLabelName($secondSeriesKey)])) {
             $chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveFirstRangeDisplayLabelName($secondSeriesKey)] = $this->getDisplayAttributeByAttribute($this->report->getChart()->firstRange)->label;
         }
         if (!isset($chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesValueName($secondSeriesKey)])) {
             $chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesValueName($secondSeriesKey)] = 0;
         }
         $chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesValueName($secondSeriesKey)] += $data->{$secondRangeAttributeName};
         if (!isset($chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesDisplayLabelName($secondSeriesKey)])) {
             $chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesDisplayLabelName($secondSeriesKey)] = $secondSeriesDisplayLabels[$secondSeriesKey];
         }
         if (!isset($chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesDisplayLabelName($secondSeriesKey)])) {
             $chartData[$firstSeriesDataValue][ReportDataProviderToAmChartMakerAdapter::resolveSecondSeriesDisplayLabelName($secondSeriesKey)] = $this->getDisplayAttributeByAttribute($this->report->getChart()->secondRange)->label;
         }
     }
     return new ReportDataProviderToAmChartMakerAdapter($this->report, array_values($chartData), $secondSeriesValueData, $secondSeriesDisplayLabels, $secondSeriesValueCount - 1);
 }
コード例 #3
0
 public function testGetSecondSeriesDisplayLabelByKey()
 {
     $data = array();
     $secondSeriesValueData = array();
     $secondSeriesDisplayLabels = array('abc', 'def');
     $secondSeriesValueCount = 5;
     $chart = new ChartForReportForm();
     $chart->type = 'Bar2D';
     $chart->firstSeries = 'dropDown';
     $chart->firstRange = 'float__Summation';
     $chart->secondSeries = 'radioDropDown';
     $chart->secondRange = 'integer__Summation';
     $report = new Report();
     $report->setChart($chart);
     $adapter = new ReportDataProviderToAmChartMakerAdapter($report, $data, $secondSeriesValueData, $secondSeriesDisplayLabels, $secondSeriesValueCount);
     $this->assertEquals('def', $adapter->getSecondSeriesDisplayLabelByKey(1));
 }