コード例 #1
0
 public function &initPivotTable()
 {
     $dataOut = new DataTable();
     $dataIn =& $this->pivotDescription->getDataTable();
     // First add all the row fields.
     // Just copy these as-is from the input DataTable
     $rowFieldIndexes = $this->getRowFieldIndexes();
     foreach ($rowFieldIndexes as $columnIndex) {
         $columnDescription = $dataIn->getColumnDescription($columnIndex);
         $columnDescription->setCustomProperty('rowFieldIndex', $columnIndex);
         $dataOut->addColumn($columnDescription);
     }
     // Next add a column for each unique column in
     // the column key index
     $columnDescriptions = array();
     $columnFieldIndexes = $this->getColumnFieldIndexes();
     $numColumnFields = count($columnFieldIndexes);
     foreach ($columnFieldIndexes as $columnIndex) {
         $columnDescription = $dataIn->getColumnDescription($columnIndex);
         $columnDescriptions[] = $columnDescription;
     }
     $dataColumnDescriptions = array();
     $dataFieldIndexes = $this->getDataFieldIndexes();
     $numDataFields = count($dataFieldIndexes);
     foreach ($dataFieldIndexes as $columnIndex) {
         $columnDescription = $dataIn->getColumnDescription($columnIndex);
         $dataColumnDescriptions[] = $columnDescription;
     }
     $uniqueColumnKeys = $this->columnKeyIndex->getKeys();
     foreach ($uniqueColumnKeys as $hash => $key) {
         $idParts = array();
         $labelParts = array();
         $columnValues = $key->getColumnValues();
         for ($i = 0; $i < $numColumnFields; $i++) {
             $columnDescription = $columnDescriptions[$i];
             $columnValue = $columnValues[$i];
             $idParts[] = $columnDescription->getId() . '=' . $columnValue;
             $labelParts[] = $columnValue;
         }
         for ($di = 0; $di < $numDataFields; $di++) {
             $dataFieldIndex = $dataFieldIndexes[$di];
             $dataColumnDescription = $dataColumnDescriptions[$di];
             $fieldId = $dataColumnDescription->getId();
             $fieldLabel = $dataColumnDescription->getLabel();
             $aggregationType = $this->pivotDescription->getAggregationType($fieldId);
             $id = implode("__", $idParts) . "__" . $fieldId;
             $label = ($aggregationType ? $aggregationType->getCode() . ' ' : '') . implode(" ", $labelParts) . " " . $fieldLabel;
             // For now copy the same type as the input column.
             // In the future we may need to set this explicitly based on the calculation.
             $type = $dataColumnDescription->getType();
             $columnDescription = new ColumnDescription($id, $type, $label);
             $columnDescription->setCustomProperty('columnKeyId', $key->__toString());
             $columnDescription->setCustomProperty('dataFieldIndex', $dataFieldIndex);
             $dataOut->addColumn($columnDescription);
         }
     }
     return $dataOut;
 }
コード例 #2
0
 public function testColumnDescriptionJsonWithLabelAndPattern()
 {
     $expected = '{"id":"foo","label":"foo label","type":"date","pattern":"YYYY-mm-dd"}';
     $cd = new ColumnDescription('foo', ValueType::DATE, 'foo label');
     $cd->setPattern('YYYY-mm-dd');
     $renderer = new JsonRenderer();
     $actual = $renderer->renderColumnDescriptionJson($cd);
     $this->assertSame($expected, $actual, "ColumnDescription JSON render must match");
 }
コード例 #3
0
 public function testGetCustomNonexistentProperty()
 {
     $cd = new ColumnDescription('first', ValueType::STRING);
     $this->assertNull($cd->getCustomProperty('no-such-property'), "Expect null return for no-such-property");
 }
コード例 #4
0
 /**
  * @param ColumnDescription $column
  * @return string
  */
 public function renderColumnDescriptionJson(ColumnDescription $column)
 {
     $output = "{";
     $output .= "\"id\":" . json_encode($column->getId());
     $output .= ",\"label\":" . json_encode($column->getLabel());
     $output .= ",\"type\":" . json_encode($column->getType()->getTypeName());
     $output .= ",\"pattern\":" . json_encode($column->getPattern());
     $customProperties = $this->renderCustomPropertiesString($column->getCustomProperties());
     if ($customProperties !== null) {
         $output .= ",\"p\":" . $customProperties;
     }
     $output .= "}";
     return $output;
 }