/** * 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)); }
/** * 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; }