Login   Register  
PHP Classes
elePHPant
Icontem

File: Table.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Sam Barnett-Cormack  >  PHP Tables  >  Table.php  >  Download  
File: Table.php
Role: Class source
Content type: text/plain
Description: Table class
Class: PHP Tables
Generate HTML tables programmatically
Author: By
Last change: Version 0.2 update
Date: 6 years ago
Size: 4,619 bytes
 

Contents

Class file image Download
<?php

/*
* Copyright 2008 Sam Barnett-Cormack
*
* This file is part of PHPTables.
*
* PHPTables is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Foobar is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Foobar.  If not, see <http://www.gnu.org/licenses/>.
*/

class Table {
    
    private 
$num_columns;
    private 
$rows = array();
    private 
$headings;
    public 
$style_class NULL;
    
    private function 
update_state() {
        if (isset(
$this->headings)) {
        
$this->num_columns $this->headings->get_width();
        } else {
        
$this->num_columns 0;
        }
    }
    
    function 
__construct(Row $headings NULL) {
        if (isset(
$headings)) {
            
$this->headings $headings;
        } else {
            
$this->headings = new Row();
        }
        
$this->update_state();
    }
    
    function 
empty_headings() {
        
$this->headings->empty_row();
    }
    
    function 
add_heading(Cell $heading) {
        
$this->headings->add_cell($heading);
        
$this->update_state();
    }
    
    function 
set_headings(Row $headings) {
        
$this->headings $headings;
        
$this->update_state();
    }
    
    function 
num_rows() {
        return 
count($this->rows);
    }
    
    function 
num_cols() {
        return 
$this->num_columns;
    }
    
    function 
clear_rows() {
        
$this->rows = array();
    }
    
    function 
add_row(Row $row$index NULL) {
        if (
$row->get_width() != $this->num_columns) {
            throw new 
Exception("Row does not have correct number of columns (want " $this->num_columns ", row has " $row->get_width() . ")");
        }
        if (isset(
$index)) {
            if (!
is_int($index)) {
                throw new 
InvalidArgumentException("Index must be an integer");
            }
            if (isset(
$this->rows[$index])) {
                
$rkeys rsort(array_keys($this->rows));
                for (
$i $rkeys[0]; >= $index$i++) {
                    
$this->rows[$i+1] = $this->rows[$i];
                }
            }
            
$this->rows[$index] = &$row;
            
$this->condense_rows();
        } else {
            
$this->rows[] = &$row;
        }
    }
    
    function 
set_row(Row $row$index) {
        if (
$row->get_width() != $this->num_columns) {
            throw new 
Exception("Row does not have correct number of columns");
        }
        if (!
is_int($index)) {
            throw new 
InvalidArgumentException("Index must be an integer");
        }
        
$this->rows[$index] = $row;
        
$this->condense_rows();
    }
    
    private function 
condense_rows() {
        
$newrows = array();
        foreach (
$this->rows as $row) {
            
$newrows[] = $row;    
        }
        
$this->rows $newrows;
    }
    
    function 
get_cell_at($rowindex,$columnindex) {
        if (!
is_int($rowindex)) {
            throw new 
InvalidArgumentException("Row index must be an integer");
        }
        if (!
is_int($columnindex)) {
            throw new 
InvalidArgumentException("Column index must be an integer");
        }
        if (
$columnindex >= $this->num_columns) {
            throw new 
InvalidArgumentException("Column index out of bounds");
        }
        if (isset(
$this->rows[$rowindex])) {
            return 
$this->rows[$rowindex]->get_cell_at_column($columnindex);
        } else {
            throw new 
InvalidArgumentException("Row index out of bounds");
        }
    }
    
    function 
get_html() {
        
$output "<!-- PHPTables generated table follows: -->\n";
        
$output .= "<table";
        if (isset(
$this->style_class)) {
            
$output .= " class=\"" $this->style_class "\" ";
        }
        
$output .= ">\n";
        
// fill in headings
        
if (isset($this->headings->style_class)) {
            
$output .= "\t<tr class=\"" $this->headings->style_class "\" >\n";
        } else {
            
$output .= "\t<tr>\n";
        }
        foreach (
$this->headings as $head) {
            if (isset(
$head->style_class)) {
                
$output .= "\t\t<th class=\"" $head->style_class "\" >\n";
            } else {
                
$output .= "\t\t<th>\n";
            }
            
$output .= "\t\t\t" $head->get_content() . "\n";
            
$output .= "\t\t</th>\n";
        }
        
$output .= "\t</tr>\n";
        
// fill in everything else
        
foreach ($this->rows as $row) {
            if (isset(
$row->style_class)) {
                
$output .= "\t<tr class=\"" $row->style_class "\" >\n";
            } else {
                
$output .= "\t<tr>\n";
            }
            foreach (
$row as $cell) {
                if (isset(
$cell->style_class)) {
                    
$output .= "\t\t<td class=\"" $cell->style_class "\" >\n";
                } else {
                    
$output .= "\t\t<td>\n";
                }
                
$output .= "\t\t\t" $cell->get_content() . "\n";
                
$output .= "\t\t</td>\n";
            }
            
$output .= "\t</tr>\n";
        }
        
// and finish
        
$output .= "</table>";
            return 
$output;
    }
}
?>