/**
* The required files
*/
require_once(HTML_BASE_UTIL_PATH.'/Htmlspecialchars.php');
require_once(HTML_MVC_VIEW_PATH.'/ViewCommon.php');
require_once(HTML_BASE_UTIL_PATH.'/Hr.php');
require_once(HTML_BASE_UTIL_PATH.'/EmailLink.php');
require_once(HTML_BASE_UTIL_PATH.'/Lookup.php');
if (defined('HTML_LANGUAGE_UTIL_PATH')) {
require_once(HTML_LANGUAGE_UTIL_PATH.'/Translate.php');
}
/**
* Generates the html for a View Simple like a business card look-a-like
* <code>
* Usage:
* $view = new ViewSimple($datareader,$text,$width,$class,$border,$cellpadding,$cellspacing,$summary,$caption);
* print $view->getHtml();
* Or
* ViewSimple::display($datareader,$text,$width,$class,$border,$cellpadding,$cellspacing,$summary,$caption);
*
* Generates a complete View Simple interface
* +--------+
* | Header |
* +--------+
* | data1 |
* +--------+
* | data2 |
* +--------+
* </code>
* @package mvc
*/
class ViewSimple extends ViewCommon {
/**
* Constructor
* @param DataReader $datareader The Data Reader object
* @param String $text The text header for the table
* @param String $width The Width for the table
* @param String $class The Class
* @param String $border The Border
* @param String $cellpadding The CellSpacing
* @param String $cellspacing The CellPadding
* @param String $summary The Summary
* @param String $caption The Caption
*/
function ViewSimple($datareader,$text='',$width='',$class='',$border='',$cellpadding='',$cellspacing='',$summary='',$caption='') {
$theText = $text!=''?$text:'';
/**
* Return the column header data as an object
* @param String $key The key to use
* @return Object The html as an object
*/
function newHeader($key) {
$text = $key;
if (defined('HTML_LANGUAGE_UTIL_PATH')) {
$text = Translate::sql($key,TRANSLATE_QUERY);
}
return new Raw($text." ");
}
/**
* Return the column data as an object
* @param String $key The key to use
* @param String $value The value to use
* @param String $cssData The CSS Data to use
* @param boolean $isSingleColumn The column data is a single column. Default more columns
* @return Object The html as an object
*/
function newColumn($key, $value, $cssData, $isSingleColumn=false) {
$object = new Raw();
$text = '';
$value = Htmlspecialchars::encode($value);
switch ($key) {
case SELECT_EMAIL:
$text = $key;
if (defined('HTML_LANGUAGE_UTIL_PATH')) {
$text = Translate::sql($key,TRANSLATE_QUERY);
}
$object->add(new EmailLink($isSingleColumn?"$text: $value":'',$value,$cssData));
break;
case SELECT_PRIVATE_PHONE:
case SELECT_BUSINESS_PHONE:
case SELECT_MOBILE_PHONE:
$text = $key;
if (defined('HTML_LANGUAGE_UTIL_PATH')) {
$text = Translate::sql($key,TRANSLATE_QUERY);
}
$object = new Raw(($isSingleColumn?"$text: ":'').$value);
//$object->add(new Lookup($value));
break;
default: // Use as is
$object = new Raw("$value ");
break;
}
return $object;
}
/**
* Return the row data as html
* <tr><td>header 1</td><td>data 1</td></tr> ...
* @param array $row The rows to loop
* @param String $cssHeader The CSS Header to use
* @param String $cssData The CSS Data to use
* @param boolean $isSingleColumn This is a single column if true. Default is false
* @return Object The html as an object
*/
function newRow($row,$cssHeader,$cssData,$isSingleColumn=false) {
$object = new Raw();
if (count($row)>0) {
$zip = '';
foreach($row as $key=>$rawvalue) {
$value = Htmlspecialchars::encode($rawvalue);
switch ($key) {
case SELECT_ZIP:
$zip = $value;
break;
case SELECT_CITY:
$value = $zip.' '.$value;
// Intentionally fall through
default:
if ($value != '') {
$tr = new Tr();
if ($isSingleColumn) {
// Ignore key column
} else {
$td = new Th($cssHeader);
$td->add($this->newHeader($key));
$tr->add($td);
}
$td = new Td($cssData);
$td->add($this->newColumn($key, $value, $cssData, $isSingleColumn));
$tr->add($td);
$object->add($tr);
}
break;
}
}
}
return $object;
}
/**
* Return the content as an object
* @return Object The content as an object
*/
function newContent() {
$object = new Raw();
$numrows = $this->datareader->getNumRows();
if ($numrows>0) {
if ($numrows>1) {
$this->text .= $this->text!=''?" ($numrows)":'';
$td = new Td();
$td->add(new Raw("TODO More than one ..."));
$object->add($td);
}
$isSingleColumn = true; // Single Column, like a business card
$count = 0;
foreach($this->datareader->getRows() as $no=>$row) {
$rowcolor = Rowcolor::get($count++);
$object->add($this->newRow($row,CSS_COLOR_HEADER,$rowcolor,$isSingleColumn));
}
} else {
$object = new Tr();
$object->add($this->newTextRow(TEXT_NO_DATA, LINK_BACK));
}
return $object;
}
/**
* Return the html
* @return String The html
*/
function getHtml() {
$html = $this->html;
$this->add($this->newContent());
// Render it
if ($this->text != '') {
$html .= $this->getTableHeader();
}
$html .= $this->getStart();
$html .= $this->getEnd();
return $html;
}
/**
* Display html
* <code>
* Usage:
* ViewSimple::display($datareader,$text,$width,$class,$border,$cellpadding,$cellspacing,$summary,$caption);
* </code>
* @static
* @param DataReader $datareader The Data Reader object
* @param String $text The text header for the table
* @param String $width The width of the table
* @param String $class The class of the table
* @param String $border The border of the table
* @param String $cellpadding The CellSpacing
* @param String $cellspacing The CellPadding
* @param String $summary The Summary
* @param String $caption The Caption
*/
function display($datareader,$text='',$width='',$class='',$border='',$cellpadding='',$cellspacing='',$summary='',$caption='') {
$html = new ViewSimple($datareader,$text,$width,$class,$border,$cellpadding,$cellspacing,$summary,$caption);
$html->addHtml();
}
}
?>