/**
  * tests the correct replacement of markers with different contents
  */
 public function testMarkerReplacement()
 {
     $doc = new OpenDocument_Document(OpenDocument_Document::SPREADSHEET);
     $table = $doc->getBody()->appendTable('UNITTEST');
     $titleText = 'Hello unittest!';
     $row = $table->appendRow();
     $cell = $row->appendCell($titleText);
     $row = $table->appendRow();
     $row = $table->appendRow();
     $cell = $row->appendCell('###MATRIX###');
     $row = $table->appendRow();
     $row = $table->appendRow();
     $cell = $row->appendCell('###MARKER###');
     $filename = Tinebase_Config::getInstance()->get('tmpdir') . DIRECTORY_SEPARATOR . Tinebase_Record_Abstract::generateUID(4) . '-ods-unittest.ods';
     $ccc = Sales_Controller_CostCenter::getInstance();
     $cc1 = $ccc->create(new Sales_Model_CostCenter(array('number' => 'cc1', 'remark' => 'unittest-cc1')));
     $cc2 = $ccc->create(new Sales_Model_CostCenter(array('number' => 'cc2', 'remark' => 'unittest-cc2')));
     $colInfo = array();
     $colInfo[$cc1->getId()] = $cc1->number;
     $colInfo[$cc2->getId()] = $cc2->number;
     $matrixArray = array($cc1->getId() => array($cc2->getId() => '100'), $cc2->getId() => array($cc1->getId() => '200'));
     $matrix = new OpenDocument_Matrix($matrixArray, $colInfo, $colInfo, OpenDocument_Matrix::TYPE_FLOAT);
     $matrix->setColumnLegendDescription('Cat');
     $matrix->setRowLegendDescription('Dog');
     $markerText = 'unittest-marker';
     $doc->replaceMarker('marker', $markerText)->replaceMatrix('matrix', $matrix);
     $doc->getDocument($filename);
     $contentXml = file_get_contents('zip://' . $filename . '#content.xml');
     $xml = simplexml_load_string($contentXml);
     unlink($filename);
     $spreadSheets = $xml->xpath('//office:body/office:spreadsheet');
     $this->assertEquals(1, count($spreadSheets));
     $spreadSheet = $spreadSheets[0];
     $results = $spreadSheet->xpath("//text()[contains(., '{$markerText}')]");
     $this->assertEquals(1, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., '{$titleText}')]");
     $this->assertEquals(1, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., '{$cc1->number}')]");
     $this->assertEquals(2, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., '{$cc2->number}')]");
     $this->assertEquals(2, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., 'Sum')]");
     $this->assertEquals(2, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., 'Cat')]");
     $this->assertEquals(1, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., 'Dog')]");
     $this->assertEquals(1, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., '100')]");
     $this->assertEquals(3, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., '200')]");
     $this->assertEquals(3, count($results));
     $results = $spreadSheet->xpath("//text()[contains(., '300')]");
     $this->assertEquals(1, count($results));
 }
예제 #2
0
 /**
  * generate export
  * 
  * @return string filename
  */
 public function generate()
 {
     $this->_createDocument();
     // build export table (use current table if using template)
     Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . ' Creating export for ' . $this->_modelName . ' . ' . $this->_getDataTableName());
     if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) {
         Tinebase_Core::getLogger()->trace(__METHOD__ . '::' . __LINE__ . ' ' . print_r($this->_config->toArray(), TRUE));
     }
     $spreadSheet = $this->_openDocumentObject->getBody();
     // append / use existing table
     if ($spreadSheet->tableExists($this->_getDataTableName()) === true) {
         $this->_activeTable = $spreadSheet->getTable($this->_getDataTableName());
     } else {
         $this->_activeTable = $spreadSheet->appendTable($this->_getDataTableName());
     }
     // add header (disabled at the moment)
     if (isset($this->_config->header) && $this->_config->header) {
         $this->_addHead($this->_activeTable);
     }
     $this->_exportRecords();
     // create file
     $result = $this->_openDocumentObject->getDocument();
     return $result;
 }