* // Create new table row * $row = new ezcConsoleTableRow(); * * // Set default format of the row's cells * $row->format = 'headline'; * * // On the fly create the cell no 0 * $row[0]->content = 'Name'; * // On the fly create the cell no 1 * $row[1]->content = 'Cellphone'; * * // Change a setting on cell 0 * $row[0]->align = ezcConsoleTable::ALIGN_CENTER; * * // Iterate through the row's cells. * foreach ( $row as $cell ) * { * var_dump( $cell ); * } * * // Set the default align property for all cells in the row * $row->align = ezcConsoleTable::ALIGN_CENTER; * * * * This class stores the rows for the {@link ezcConsoleTable} class. * * @property string $borderFormat * Set the format applied to the borders of this row. See * {@link ezcConsoleOutput} * @property string $format * Format applied to cell contents of cells marked with * format "default" in this row. * @property mixed $align * Alignment applied to cells marked with * ezcConsoleTable::ALIGN_DEFAULT. * * @package ConsoleTools * @version 1.3 */ class ezcConsoleTableRow implements Countable, Iterator, ArrayAccess { /** * Container to hold the properties * * @var array(string=>mixed) */ protected $properties; /** * The cells of the row. * * @var array(ezcConsoleTableCell) */ protected $cells = array(); /** * Create a new ezcConsoleProgressbarRow. * Creates a new ezcConsoleProgressbarRow. * * This method takes any number of {@link ezcConsoleTableCell} objects as * parameter, which will be added as table cells to the row in their * specified order. * * @throws ezcBaseValueException * If a parameter is not of type {@link ezcConsoleTableCell}. */ public function __construct() { $this->properties['borderFormat'] = 'default'; $this->properties['format'] = 'default'; $this->properties['align'] = ezcConsoleTable::ALIGN_DEFAULT; if ( func_num_args() > 0 ) { foreach ( func_get_args() as $id => $arg ) { if ( !( $arg instanceof ezcConsoleTableCell ) ) { throw new ezcBaseValueException( 'Parameter'.$id, $arg, 'ezcConsoleTableCell' ); } $this->cells[] = $arg; } } } /** * Returns if the given offset exists. * This method is part of the ArrayAccess interface to allow access to the * data of this object as if it was an array. * * @param int $offset The offset to check. * @return bool True when the offset exists, otherwise false. * * @throws ezcBaseValueException * If a non numeric cell ID is requested. */ public function offsetExists( $offset ) { if ( !is_int( $offset ) || $offset < 0 ) { throw new ezcBaseValueException( 'offset', $offset, 'int >= 0' ); } return isset( $this->cells[$offset] ); } /** * Returns the element with the given offset. * This method is part of the ArrayAccess interface to allow access to the * data of this object as if it was an array. In case of the * ezcConsoleTableRow class this method always returns a valid cell object * since it creates them on the fly, if a given item does not exist. * * @param int $offset The offset to check. * @return ezcConsoleTableCell * * @throws ezcBaseValueException * If a non numeric cell ID is requested. */ public function offsetGet( $offset ) { if ( !isset( $offset ) ) { $offset = count( $this ); $this->cells[$offset] = new ezcConsoleTableCell(); } if ( !is_int( $offset ) || $offset < 0 ) { throw new ezcBaseValueException( 'offset', $offset, 'int >= 0' ); } if ( !isset( $this->cells[$offset] ) ) { $this->cells[$offset] = new ezcConsoleTableCell(); } return $this->cells[$offset]; } /** * Set the element with the given offset. * This method is part of the ArrayAccess interface to allow access to the * data of this object as if it was an array. * * @param int $offset The offset to assign an item to. * @param ezcConsoleTableCell $value The cell to assign. * @return void * * @throws ezcBaseValueException * If a non numeric cell ID is requested. * @throws ezcBaseValueException * If the provided value is not of type {@ling ezcConsoleTableCell}. */ public function offsetSet( $offset, $value ) { if ( !( $value instanceof ezcConsoleTableCell ) ) { throw new ezcBaseValueException( 'value', $value, 'ezcConsoleTableCell' ); } if ( !isset( $offset ) ) { $offset = count( $this ); } if ( !is_int( $offset ) || $offset < 0 ) { throw new ezcBaseValueException( 'offset', $offset, 'int >= 0' ); } $this->cells[$offset] = $value; } /** * Unset the element with the given offset. * This method is part of the ArrayAccess interface to allow access to the * data of this object as if it was an array. * * @param int $offset The offset to unset the value for. * @return void * * @throws ezcBaseValueException * If a non numeric cell ID is requested. */ public function offsetUnset( $offset ) { if ( !is_int( $offset ) || $offset < 0 ) { throw new ezcBaseValueException( 'offset', $offset, 'int >= 0' ); } if ( isset( $this->cells[$offset] ) ) { unset( $this->cells[$offset] ); } } /** * Returns the number of cells in the row. * This method is part of the Countable interface to allow the usage of * PHP's count() function to check how many cells this row has. * * @return int Number of cells in this row. */ public function count() { $keys = array_keys( $this->cells ); return count( $keys ) > 0 ? ( end( $keys ) + 1 ) : 0; } /** * Returns the currently selected cell. * This method is part of the Iterator interface to allow acces to the * cells of this row by iterating over it like an array (e.g. using * foreach). * * @return ezcConsoleTableCell The currently selected cell. */ public function current() { return current( $this->cells ); } /** * Returns the key of the currently selected cell. * This method is part of the Iterator interface to allow acces to the * cells of this row by iterating over it like an array (e.g. using * foreach). * * @return int The key of the currently selected cell. */ public function key() { return key( $this->cells ); } /** * Returns the next cell and selects it or false on the last cell. * This method is part of the Iterator interface to allow acces to the * cells of this row by iterating over it like an array (e.g. using * foreach). * * @return mixed ezcConsoleTableCell if the next cell exists, or false. */ public function next() { return next( $this->cells ); } /** * Selects the very first cell and returns it. * This method is part of the Iterator interface to allow acces to the * cells of this row by iterating over it like an array (e.g. using * foreach). * * @return ezcConsoleTableCell The very first cell of this row. */ public function rewind() { return reset( $this->cells ); } /** * Returns if the current cell is valid. * This method is part of the Iterator interface to allow acces to the * cells of this row by iterating over it like an array (e.g. using * foreach). * * @return ezcConsoleTableCell The very first cell of this row. */ public function valid() { return current( $this->cells ) !== false; } /** * Property read access. * * @param string $key Name of the property. * @return mixed Value of the property or null. * * @throws ezcBasePropertyNotFoundException * If the the desired property is not found. * @ignore */ public function __get( $key ) { if ( isset( $this->properties[$key] ) ) { return $this->properties[$key]; } throw new ezcBasePropertyNotFoundException( $key ); } /** * Property write access. * * @param string $key Name of the property. * @param mixed $val The value for the property. * * @throws ezcBaseValueException * If a the value submitted for the align is not in the range of * {@link ezcConsoleTable::ALIGN_LEFT}, * {@link ezcConsoleTable::ALIGN_CENTER}, * {@link ezcConsoleTable::ALIGN_RIGHT}, * {@link ezcConsoleTable::ALIGN_DEFAULT} * * @ignore */ public function __set( $key, $val ) { switch ( $key ) { case 'format': case 'borderFormat': if ( is_string( $val ) === false || strlen( $val ) < 1 ) { throw new ezcBaseValueException( $key, $val, "string, length > 0" ); } break; case 'align': if ( $val !== ezcConsoleTable::ALIGN_LEFT && $val !== ezcConsoleTable::ALIGN_CENTER && $val !== ezcConsoleTable::ALIGN_RIGHT && $val !== ezcConsoleTable::ALIGN_DEFAULT ) { throw new ezcBaseValueException( $key, $val, 'ezcConsoleTable::ALIGN_DEFAULT, ezcConsoleTable::ALIGN_LEFT, ezcConsoleTable::ALIGN_CENTER, ezcConsoleTable::ALIGN_RIGHT' ); } break; default: throw new ezcBasePropertyNotFoundException( $key ); } $this->properties[$key] = $val; } /** * Property isset access. * * @param string $key Name of the property. * @return bool True is the property is set, otherwise false. * @ignore */ public function __isset( $key ) { switch ( $key ) { case 'format': case 'borderFormat': case 'align': return true; default: return false; } } } ?>