CC-2166: Packaging Improvements. Moved the Zend app into airtime_mvc. It is now installed to /var/www/airtime. Storage is now set to /srv/airtime/stor. Utils are now installed to /usr/lib/airtime/utils/. Added install/airtime-dircheck.php as a simple test to see if everything is install/uninstalled correctly.
This commit is contained in:
parent
514777e8d2
commit
b11cbd8159
4546 changed files with 138 additions and 51 deletions
532
airtime_mvc/library/Zend/Text/Table.php
Normal file
532
airtime_mvc/library/Zend/Text/Table.php
Normal file
|
@ -0,0 +1,532 @@
|
|||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Text_Table
|
||||
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Table.php 20096 2010-01-06 02:05:09Z bkarwin $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_Text_Table enables developers to create tables out of characters
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Text_Table
|
||||
* @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Text_Table
|
||||
{
|
||||
/**
|
||||
* Auto seperator settings
|
||||
*/
|
||||
const AUTO_SEPARATE_NONE = 0x0;
|
||||
const AUTO_SEPARATE_HEADER = 0x1;
|
||||
const AUTO_SEPARATE_FOOTER = 0x2;
|
||||
const AUTO_SEPARATE_ALL = 0x4;
|
||||
|
||||
/**
|
||||
* Decorator used for the table borders
|
||||
*
|
||||
* @var Zend_Text_Table_Decorator_Interface
|
||||
*/
|
||||
protected $_decorator = null;
|
||||
|
||||
/**
|
||||
* List of all column widths
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_columnWidths = null;
|
||||
|
||||
/**
|
||||
* Rows of the table
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_rows = array();
|
||||
|
||||
/**
|
||||
* Auto separation mode
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
protected $_autoSeparate = self::AUTO_SEPARATE_ALL;
|
||||
|
||||
/**
|
||||
* Padding for columns
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
protected $_padding = 0;
|
||||
|
||||
/**
|
||||
* Default column aligns for rows created by appendRow(array $data)
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_defaultColumnAligns = array();
|
||||
|
||||
/**
|
||||
* Plugin loader for decorators
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_pluginLoader = null;
|
||||
|
||||
/**
|
||||
* Charset which is used for input by default
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected static $_inputCharset = 'utf-8';
|
||||
|
||||
/**
|
||||
* Charset which is used internally
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected static $_outputCharset = 'utf-8';
|
||||
|
||||
/**
|
||||
* Option keys to skip when calling setOptions()
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_skipOptions = array(
|
||||
'options',
|
||||
'config',
|
||||
'defaultColumnAlign',
|
||||
);
|
||||
|
||||
/**
|
||||
* Create a basic table object
|
||||
*
|
||||
* @param array $columnsWidths List of all column widths
|
||||
* @param Zend_Config|array $options Configuration options
|
||||
* @throws Zend_Text_Table_Exception When no columns widths were set
|
||||
*/
|
||||
public function __construct($options = null)
|
||||
{
|
||||
// Set options
|
||||
if (is_array($options)) {
|
||||
$this->setOptions($options);
|
||||
} else if ($options instanceof Zend_Config) {
|
||||
$this->setConfig($options);
|
||||
}
|
||||
|
||||
// Check if column widths were set
|
||||
// @todo When column widths were not set, assume auto-sizing
|
||||
if ($this->_columnWidths === null) {
|
||||
require_once 'Zend/Text/Table/Exception.php';
|
||||
throw new Zend_Text_Table_Exception('You must define the column widths');
|
||||
}
|
||||
|
||||
// If no decorator was given, use default unicode decorator
|
||||
if ($this->_decorator === null) {
|
||||
if (self::getOutputCharset() === 'utf-8') {
|
||||
$this->setDecorator('unicode');
|
||||
} else {
|
||||
$this->setDecorator('ascii');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set options from array
|
||||
*
|
||||
* @param array $options Configuration for Zend_Text_Table
|
||||
* @return Zend_Text_Table
|
||||
*/
|
||||
public function setOptions(array $options)
|
||||
{
|
||||
foreach ($options as $key => $value) {
|
||||
if (in_array(strtolower($key), $this->_skipOptions)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$method = 'set' . ucfirst($key);
|
||||
if (method_exists($this, $method)) {
|
||||
$this->$method($value);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set options from config object
|
||||
*
|
||||
* @param Zend_Config $config Configuration for Zend_Text_Table
|
||||
* @return Zend_Text_Table
|
||||
*/
|
||||
public function setConfig(Zend_Config $config)
|
||||
{
|
||||
return $this->setOptions($config->toArray());
|
||||
}
|
||||
|
||||
/**
|
||||
* Set column widths
|
||||
*
|
||||
* @param array $columnWidths Widths of all columns
|
||||
* @throws Zend_Text_Table_Exception When no columns were supplied
|
||||
* @throws Zend_Text_Table_Exception When a column has an invalid width
|
||||
* @return Zend_Text_Table
|
||||
*/
|
||||
public function setColumnWidths(array $columnWidths)
|
||||
{
|
||||
if (count($columnWidths) === 0) {
|
||||
require_once 'Zend/Text/Table/Exception.php';
|
||||
throw new Zend_Text_Table_Exception('You must supply at least one column');
|
||||
}
|
||||
|
||||
foreach ($columnWidths as $columnNum => $columnWidth) {
|
||||
if (is_int($columnWidth) === false or $columnWidth < 1) {
|
||||
require_once 'Zend/Text/Table/Exception.php';
|
||||
throw new Zend_Text_Table_Exception('Column ' . $columnNum . ' has an invalid'
|
||||
. ' column width');
|
||||
}
|
||||
}
|
||||
|
||||
$this->_columnWidths = $columnWidths;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set auto separation mode
|
||||
*
|
||||
* @param integer $autoSeparate Auto separation mode
|
||||
* @return Zend_Text_Table
|
||||
*/
|
||||
public function setAutoSeparate($autoSeparate)
|
||||
{
|
||||
$this->_autoSeparate = (int) $autoSeparate;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set decorator
|
||||
*
|
||||
* @param Zend_Text_Table_Decorator_Interface|string $decorator Decorator to use
|
||||
* @return Zend_Text_Table
|
||||
*/
|
||||
public function setDecorator($decorator)
|
||||
{
|
||||
if ($decorator instanceof Zend_Text_Table_Decorator_Interface) {
|
||||
$this->_decorator = $decorator;
|
||||
} else {
|
||||
$classname = $this->getPluginLoader()->load($decorator);
|
||||
$this->_decorator = new $classname;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the column padding
|
||||
*
|
||||
* @param integer $padding The padding for the columns
|
||||
* @return Zend_Text_Table
|
||||
*/
|
||||
public function setPadding($padding)
|
||||
{
|
||||
$this->_padding = max(0, (int) $padding);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plugin loader for decorators
|
||||
*
|
||||
* @return Zend_Loader_PluginLoader
|
||||
*/
|
||||
public function getPluginLoader()
|
||||
{
|
||||
if ($this->_pluginLoader === null) {
|
||||
$prefix = 'Zend_Text_Table_Decorator_';
|
||||
$pathPrefix = 'Zend/Text/Table/Decorator/';
|
||||
|
||||
require_once 'Zend/Loader/PluginLoader.php';
|
||||
$this->_pluginLoader = new Zend_Loader_PluginLoader(array($prefix => $pathPrefix));
|
||||
}
|
||||
|
||||
return $this->_pluginLoader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default column align for rows created by appendRow(array $data)
|
||||
*
|
||||
* @param integer $columnNum
|
||||
* @param string $align
|
||||
* @return Zend_Text_Table
|
||||
*/
|
||||
public function setDefaultColumnAlign($columnNum, $align)
|
||||
{
|
||||
$this->_defaultColumnAligns[$columnNum] = $align;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the input charset for column contents
|
||||
*
|
||||
* @param string $charset
|
||||
*/
|
||||
public static function setInputCharset($charset)
|
||||
{
|
||||
self::$_inputCharset = strtolower($charset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the input charset for column contents
|
||||
*
|
||||
* @param string $charset
|
||||
*/
|
||||
public static function getInputCharset()
|
||||
{
|
||||
return self::$_inputCharset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the output charset for column contents
|
||||
*
|
||||
* @param string $charset
|
||||
*/
|
||||
public static function setOutputCharset($charset)
|
||||
{
|
||||
self::$_outputCharset = strtolower($charset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the output charset for column contents
|
||||
*
|
||||
* @param string $charset
|
||||
*/
|
||||
public static function getOutputCharset()
|
||||
{
|
||||
return self::$_outputCharset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Append a row to the table
|
||||
*
|
||||
* @param array|Zend_Text_Table_Row $row The row to append to the table
|
||||
* @throws Zend_Text_Table_Exception When $row is neither an array nor Zend_Zext_Table_Row
|
||||
* @throws Zend_Text_Table_Exception When a row contains too many columns
|
||||
* @return Zend_Text_Table
|
||||
*/
|
||||
public function appendRow($row)
|
||||
{
|
||||
if (!is_array($row) && !($row instanceof Zend_Text_Table_Row)) {
|
||||
require_once 'Zend/Text/Table/Exception.php';
|
||||
throw new Zend_Text_Table_Exception('$row must be an array or instance of Zend_Text_Table_Row');
|
||||
}
|
||||
|
||||
if (is_array($row)) {
|
||||
if (count($row) > count($this->_columnWidths)) {
|
||||
require_once 'Zend/Text/Table/Exception.php';
|
||||
throw new Zend_Text_Table_Exception('Row contains too many columns');
|
||||
}
|
||||
|
||||
require_once 'Zend/Text/Table/Row.php';
|
||||
|
||||
$data = $row;
|
||||
$row = new Zend_Text_Table_Row();
|
||||
$colNum = 0;
|
||||
foreach ($data as $columnData) {
|
||||
if (isset($this->_defaultColumnAligns[$colNum])) {
|
||||
$align = $this->_defaultColumnAligns[$colNum];
|
||||
} else {
|
||||
$align = null;
|
||||
}
|
||||
|
||||
$row->appendColumn(new Zend_Text_Table_Column($columnData, $align));
|
||||
$colNum++;
|
||||
}
|
||||
}
|
||||
|
||||
$this->_rows[] = $row;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the table
|
||||
*
|
||||
* @throws Zend_Text_Table_Exception When no rows were added to the table
|
||||
* @return string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
// There should be at least one row
|
||||
if (count($this->_rows) === 0) {
|
||||
require_once 'Zend/Text/Table/Exception.php';
|
||||
throw new Zend_Text_Table_Exception('No rows were added to the table yet');
|
||||
}
|
||||
|
||||
// Initiate the result variable
|
||||
$result = '';
|
||||
|
||||
// Count total columns
|
||||
$totalNumColumns = count($this->_columnWidths);
|
||||
|
||||
// Now render all rows, starting from the first one
|
||||
$numRows = count($this->_rows);
|
||||
foreach ($this->_rows as $rowNum => $row) {
|
||||
// Get all column widths
|
||||
if (isset($columnWidths) === true) {
|
||||
$lastColumnWidths = $columnWidths;
|
||||
}
|
||||
|
||||
$renderedRow = $row->render($this->_columnWidths, $this->_decorator, $this->_padding);
|
||||
$columnWidths = $row->getColumnWidths();
|
||||
$numColumns = count($columnWidths);
|
||||
|
||||
// Check what we have to draw
|
||||
if ($rowNum === 0) {
|
||||
// If this is the first row, draw the table top
|
||||
$result .= $this->_decorator->getTopLeft();
|
||||
|
||||
foreach ($columnWidths as $columnNum => $columnWidth) {
|
||||
$result .= str_repeat($this->_decorator->getHorizontal(),
|
||||
$columnWidth);
|
||||
|
||||
if (($columnNum + 1) === $numColumns) {
|
||||
$result .= $this->_decorator->getTopRight();
|
||||
} else {
|
||||
$result .= $this->_decorator->getHorizontalDown();
|
||||
}
|
||||
}
|
||||
|
||||
$result .= "\n";
|
||||
} else {
|
||||
// Else check if we have to draw the row separator
|
||||
if ($this->_autoSeparate & self::AUTO_SEPARATE_ALL) {
|
||||
$drawSeparator = true;
|
||||
} else if ($rowNum === 1 && $this->_autoSeparate & self::AUTO_SEPARATE_HEADER) {
|
||||
$drawSeparator = true;
|
||||
} else if ($rowNum === ($numRows - 1) && $this->_autoSeparate & self::AUTO_SEPARATE_FOOTER) {
|
||||
$drawSeparator = true;
|
||||
} else {
|
||||
$drawSeparator = false;
|
||||
}
|
||||
|
||||
if ($drawSeparator) {
|
||||
$result .= $this->_decorator->getVerticalRight();
|
||||
|
||||
$currentUpperColumn = 0;
|
||||
$currentLowerColumn = 0;
|
||||
$currentUpperWidth = 0;
|
||||
$currentLowerWidth = 0;
|
||||
|
||||
// Loop through all column widths
|
||||
foreach ($this->_columnWidths as $columnNum => $columnWidth) {
|
||||
// Add the horizontal line
|
||||
$result .= str_repeat($this->_decorator->getHorizontal(),
|
||||
$columnWidth);
|
||||
|
||||
// If this is the last line, break out
|
||||
if (($columnNum + 1) === $totalNumColumns) {
|
||||
break;
|
||||
}
|
||||
|
||||
// Else check, which connector style has to be used
|
||||
$connector = 0x0;
|
||||
$currentUpperWidth += $columnWidth;
|
||||
$currentLowerWidth += $columnWidth;
|
||||
|
||||
if ($lastColumnWidths[$currentUpperColumn] === $currentUpperWidth) {
|
||||
$connector |= 0x1;
|
||||
$currentUpperColumn += 1;
|
||||
$currentUpperWidth = 0;
|
||||
} else {
|
||||
$currentUpperWidth += 1;
|
||||
}
|
||||
|
||||
if ($columnWidths[$currentLowerColumn] === $currentLowerWidth) {
|
||||
$connector |= 0x2;
|
||||
$currentLowerColumn += 1;
|
||||
$currentLowerWidth = 0;
|
||||
} else {
|
||||
$currentLowerWidth += 1;
|
||||
}
|
||||
|
||||
switch ($connector) {
|
||||
case 0x0:
|
||||
$result .= $this->_decorator->getHorizontal();
|
||||
break;
|
||||
|
||||
case 0x1:
|
||||
$result .= $this->_decorator->getHorizontalUp();
|
||||
break;
|
||||
|
||||
case 0x2:
|
||||
$result .= $this->_decorator->getHorizontalDown();
|
||||
break;
|
||||
|
||||
case 0x3:
|
||||
$result .= $this->_decorator->getCross();
|
||||
break;
|
||||
|
||||
default:
|
||||
// This can never happen, but the CS tells I have to have it ...
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$result .= $this->_decorator->getVerticalLeft() . "\n";
|
||||
}
|
||||
}
|
||||
|
||||
// Add the rendered row to the result
|
||||
$result .= $renderedRow;
|
||||
|
||||
// If this is the last row, draw the table bottom
|
||||
if (($rowNum + 1) === $numRows) {
|
||||
$result .= $this->_decorator->getBottomLeft();
|
||||
|
||||
foreach ($columnWidths as $columnNum => $columnWidth) {
|
||||
$result .= str_repeat($this->_decorator->getHorizontal(),
|
||||
$columnWidth);
|
||||
|
||||
if (($columnNum + 1) === $numColumns) {
|
||||
$result .= $this->_decorator->getBottomRight();
|
||||
} else {
|
||||
$result .= $this->_decorator->getHorizontalUp();
|
||||
}
|
||||
}
|
||||
|
||||
$result .= "\n";
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic method which returns the rendered table
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
try {
|
||||
return $this->render();
|
||||
} catch (Exception $e) {
|
||||
trigger_error($e->getMessage(), E_USER_ERROR);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue