Exemplo n.º 1
0
 /**
  * Process the source document using the given Tabular definition and return a table document.
  *
  * The definition can be passed either as an array, a Defintion class or a file name.
  *
  * @param \DOMDocument $sourceDom
  * @param array|string|Definition $definition
  * @param array $parameters
  *
  * @return TableDom
  */
 public function tabulate(\DOMDocument $sourceDom, $definition, array $parameters = array())
 {
     $definition = $this->definitionLoader->load($definition, $sourceDom);
     if (isset($definition['params'])) {
         $parameters = array_merge($definition['params'], $parameters);
     }
     $this->expander->expand($definition, $parameters);
     $tableDom = $this->tableBuilder->buildTable($sourceDom, $definition, $parameters);
     if (isset($definition['sort'])) {
         Sort::sortTable($tableDom, $definition['sort']);
     }
     if (isset($definition['classes'])) {
         foreach ($definition['classes'] as $class => $classDefinition) {
             $formatters = array();
             foreach ($classDefinition as $formatDefinition) {
                 $options = array();
                 if (count($formatDefinition) == 2) {
                     list($formatter, $options) = $formatDefinition;
                 } else {
                     list($formatter) = $formatDefinition;
                 }
                 $formatters[] = array($formatter, $options ?: array());
             }
             $this->formatter->setClassDefinition($class, $formatters);
         }
     }
     $this->formatter->formatTable($tableDom);
     return $tableDom;
 }
Exemplo n.º 2
0
    /**
     * It should sort with multiple columns.
     */
    public function testSortMultipleColumns()
    {
        $table = $this->createTable(<<<EOT
<?xml version="1.0"?>
<table>
    <group name="_default">
        <row>
            <cell name="chocolate">10</cell>
            <cell name="coffee">20</cell>
        </row>
        <row>
            <cell name="chocolate">10</cell>
            <cell name="coffee">10</cell>
        </row>
        <row>
            <cell name="chocolate">5</cell>
            <cell name="coffee">20</cell>
        </row>
    </group>
</table>
EOT
);
        Sort::sortTable($table, array('chocolate', 'coffee'));
        $this->assertSortOrder($table, 0, 'chocolate', 5);
        $this->assertSortOrder($table, 0, 'coffee', 20);
        $this->assertSortOrder($table, 1, 'chocolate', 10);
        $this->assertSortOrder($table, 1, 'coffee', 10);
        $this->assertSortOrder($table, 2, 'chocolate', 10);
        $this->assertSortOrder($table, 2, 'coffee', 20);
    }