1. <?php
  2. require_once 'HTML/Table.php';
  3.  
  4. /**
  5. * @author Laurent Laville
  6. */
  7. class HTML_Table_ColGroup extends HTML_Table {
  8.  
  9.     /**
  10.      * Array containing the table column group specifications
  11.      *
  12.      * @var     array
  13.      * @access  private
  14.      */
  15.     var $_colgroup = array();
  16.  
  17.     /**
  18.      * Class constructor (ZE1)
  19.      */
  20.     function HTML_Table_ColGroup($attributes = null, $tabOffset = 0, $useTGroups = false)
  21.     {
  22.         $this->HTML_Table($attributes, $tabOffset, $useTGroups);
  23.     }
  24.  
  25.     /**
  26.      * Sets the table columns group specifications, or removes existing ones.
  27.      *
  28.      * @param   mixed     $colgroup         (optional) Columns attributes
  29.      * @param   mixed     $attributes       (optional) Associative array or string of table row attributes
  30.      * @access  public
  31.      */
  32.     function setColGroup($colgroup = null, $attributes = null)
  33.     {
  34.         if (isset($colgroup)) {
  35.             $attributes = $this->_parseAttributes($attributes);
  36.             $this->_colgroup[] = array('attr' => $attributes, 'contents' => $colgroup);
  37.         } else {
  38.             $this->_colgroup = array();
  39.         }
  40.     }
  41.  
  42.     /**
  43.      * Returns the table structure as HTML
  44.      * !!! Code are copied from HTML_Table except for paragraph between lines 70 to 86 !!!
  45.      *
  46.      * @access  public
  47.      * @return  string
  48.      */
  49.     function toHtml()
  50.     {
  51.         $strHtml = '';
  52.         $tabs = $this->_getTabs();
  53.         $tab = $this->_getTab();
  54.         $lnEnd = $this->_getLineEnd();
  55.         if ($this->_comment) {
  56.             $strHtml .= $tabs . "<!-- $this->_comment -->" . $lnEnd;
  57.         }
  58.         $strHtml .=
  59.             $tabs . '<table' . $this->_getAttrString($this->_attributes) . '>' . $lnEnd;
  60.         if (!empty($this->_caption)) {
  61.             $attr = $this->_caption['attr'];
  62.             $contents = $this->_caption['contents'];
  63.             $strHtml .= $tabs . $tab . '<caption' . $this->_getAttrString($attr) . '>';
  64.             if (is_array($contents)) {
  65.                 $contents = implode(', ', $contents);
  66.             }
  67.             $strHtml .= $contents;
  68.             $strHtml .= '</caption>' . $lnEnd;
  69.         }
  70.         if (!empty($this->_colgroup)) {
  71.             foreach($this->_colgroup as $g => $col) {
  72.                 $attr = $this->_colgroup[$g]['attr'];
  73.                 $contents = $this->_colgroup[$g]['contents'];
  74.                 $strHtml .= $tabs . $tab . '<colgroup' . $this->_getAttrString($attr) . '>';
  75.                 if (!empty($contents)) {
  76.                     $strHtml .= $lnEnd;
  77.                     if (!is_array($contents)) {
  78.                         $contents = array($contents);
  79.                     }
  80.                     foreach($contents as $a => $colAttr) {
  81.                         $attr = $this->_parseAttributes($colAttr);
  82.                         $strHtml .= $tabs . $tab . $tab . '<col' . $this->_getAttrString($attr) . '>' . $lnEnd;
  83.                     }
  84.                     $strHtml .= $tabs . $tab;
  85.                 }
  86.                 $strHtml .= '</colgroup>' . $lnEnd;
  87.             }
  88.         }
  89.         if ($this->_useTGroups) {
  90.             $tHeadColCount = 0;
  91.             if ($this->_thead !== null) {
  92.                 $tHeadColCount = $this->_thead->getColCount();
  93.             }
  94.             $tFootColCount = 0;
  95.             if ($this->_tfoot !== null) {
  96.                 $tFootColCount = $this->_tfoot->getColCount();
  97.             }
  98.             $tBodyColCount = 0;
  99.             if ($this->_tbody !== null) {
  100.                 $tBodyColCount = $this->_tbody->getColCount();
  101.             }
  102.             $maxColCount = max($tHeadColCount, $tFootColCount, $tBodyColCount);
  103.             if ($this->_thead !== null) {
  104.                 $this->_thead->setColCount($maxColCount);
  105.                 if ($this->_thead->getRowCount() > 0) {
  106.                     $strHtml .= $tabs . $tab . '<thead>' . $lnEnd;
  107.                     $strHtml .= $this->_thead->toHtml();
  108.                     $strHtml .= $tabs . $tab . '</thead>' . $lnEnd;
  109.                 }
  110.             }
  111.             if ($this->_tfoot !== null) {
  112.                 $this->_tfoot->setColCount($maxColCount);
  113.                 if ($this->_tfoot->getRowCount() > 0) {
  114.                     $strHtml .= $tabs . $tab . '<tfoot>' . $lnEnd;
  115.                     $strHtml .= $this->_tfoot->toHtml();
  116.                     $strHtml .= $tabs . $tab . '</tfoot>' . $lnEnd;
  117.                 }
  118.             }
  119.             if ($this->_tbody !== null) {
  120.                 $this->_tbody->setColCount($maxColCount);
  121.                 if ($this->_tbody->getRowCount() > 0) {
  122.                     $strHtml .= $tabs . $tab . '<tbody>' . $lnEnd;
  123.                     $strHtml .= $this->_tbody->toHtml();
  124.                     $strHtml .= $tabs . $tab . '</tbody>' . $lnEnd;
  125.                 }
  126.             }
  127.         } else {
  128.             $strHtml .= $this->_tbody->toHtml();
  129.         }
  130.         $strHtml .= $tabs . '</table>' . $lnEnd;
  131.         return $strHtml;
  132.     }
  133. }
  134. ?>