_id = $id;
$this->_title = $title;
$this->_isMulti = $isMulti;
$this->_addTbl = $addTbl;
$this->_align = $align;
$this->_icon = $icon;
if ($hasNote === NULL && $this->_isMulti)
$this->_hasNote = TRUE;
}
public function dup($newId, $title=NULL)
{
$d = new DTbl($newId, $this->_title, $this->_isMulti, $this->_addTbl, $this->_align, $this->_icon);
$d->_dattrs = $this->_dattrs;
$d->_helpKey = $this->_helpKey;
$d->_width = $this->_width;
$d->_cols = $this->_cols;
$d->_hasNote = $this->_hasNote;
$d->_hasB = $this->_hasB;
$d->_layerId = $this->_layerId;
$d->_dataLoc = $this->_dataLoc;
$d->_holderIndex = $this->_holderIndex;
$d->_subTbls = $this->_subTbls;
$d->_defaultExtract = $this->_defaultExtract;
$d->_linkedTbls = $this->_linkedTbls;
$d->_showParentRef = $this->_showParentRef;
if ($title != NULL) {
$d->_title = $title;
}
return $d;
}
public function setRepeated( $holderIndex )
{
$this->_holderIndex = $holderIndex;
}
public function setAttr(&$attrs, $dataLoc=NULL, $layerId=NULL, $helpKey=NULL)
{
$this->_dattrs = &$attrs;
$this->_layerId = $layerId;
$this->_dataLoc = $dataLoc;
$this->_helpKey = $helpKey;
if ( $this->_isMulti == 1 ) {
$this->_cols = count($attrs);
if ($this->_hasNote)
$this->_cols++;
if($this->_icon != NULL)
$this->_cols++;
}
else {
if (count($attrs) == 1 && $this->_dattrs[0]->_label == '') {
$this->_cols = 1;
}
else
$this->_cols = 3;
}
}
public function setDataLoc($dataLoc, $layerId=NULL)
{
$this->_dataLoc = $dataLoc;
if ($layerId != NULL)
$this->_layerId = $layerId;
}
public function GetTags()
{
$tags = array();
$keys = array_keys($this->_dattrs);
foreach ( $keys as $key )
{
$attr = $this->_dattrs[$key];
$pos = strpos($attr->_key, ':');
if ( $pos === false )
$tags[$attr->_key] = $attr->_multiInd;
else
{
$layer = substr($attr->_key, 0, $pos);
$id = substr($attr->_key, $pos+1);
$tags[$layer][$id] = $attr->_multiInd;
}
}
return $tags;
}
public function getActionLink($disp, $actions, $editTid='', $editRef='')
{
$buf = '';
$allActions = array('a'=>'Add', 'v'=>'View', 'e'=>'Edit',
'E'=>'Edit', 'd'=>'Delete', 's'=>'Save',
'b'=>'Back', 'B'=>'Back', 'n'=>'Next',
'D'=>'Yes', 'c'=>'Cancel', 'C'=>'Cancel',
'i'=>'Instantiate', 'I'=>'Yes',
'X' => 'View/Edit');
$chars = preg_split('//', $actions, -1, PREG_SPLIT_NO_EMPTY);
foreach ( $chars as $act )
{
$ctrlUrl = 'Save';
}
elseif ( $act == 'n' ) {
$buf .= 'Next';
}
elseif( $act == 'X') {
//vhtop=>vh_... tptop=>tp_.... sltop=>sl_...
$menuType = substr($disp->_type, 0, 2);
if ($menuType == 'sl' && isset($disp->_info['LNS_menu'])) {
$menuType = $disp->_info['LNS_menu'][$editRef]; // for lslb
}
elseif ($menuType == 'lb' && isset($disp->_info['CLS_menu'])) {
$menuType = $disp->_info['CLS_menu'][$editRef]; // for lslb
}
$buf .= '{$name}";
}
else {
$buf .= $ctrlUrl . $t . $r . '&a=' . $act . '&tk=' . $disp->_token . '">' . $name . '';
}
}
return $buf;
}
public function PrintHtml(&$data, $ref, $disp, $isEdit)
{
if ($isEdit)
$this->printEditHtml($data, $disp);
else
$this->printViewHtml($data, $ref, $disp);
}
private function getPrintHeader($disp, $actString)
{
$buf = '
\n";
if ( $this->_isMulti == 1 )
{
$buf .= '';
$hasSort = ( $disp->_sort != NULL && $disp->_sort[0] == $this->_id );
$a = '1'; //ascend
$url = $disp->_ctrlUrl . 'm=' . $disp->_mid . '&p=' . $disp->_pid;
if ( $disp->_tid != NULL )
$url .= '&t=' . $disp->_tid;
if ( $disp->_ref != NULL )
$url .= '&r=' . $disp->_ref;
if ($this->_icon != NULL)
$buf .= ' | ';
if ($this->_hasNote)
$buf .= ' | ';
foreach( $keys as $i )
{
$attr = $this->_dattrs[$i];
if ( $attr->_FDE[1] == 'N' )
continue;
$buf .= '_align[$i]) )
$buf .= ' align="'.$this->_align[$i] .'"';
$buf .= '>' . $attr->_label;
if ( $attr->_type != 'action' )
{
$buf .= ' ';
$buf .= ($a=='1')? ' ' : ' ';
$buf .= '';
}
if ( $attr->_type == 'ctxseq' ) {
$attr->_hrefLink = $url . $attr->_href;
}
$buf .= ' | ';
}
$buf .= "
\n";
}
return $buf;
}
private function printViewHtml(&$data, $ref, $disp)
{
$buf = '' . "\n";
if ( $this->_isMulti == 1)
{
if ( $this->_addTbl == NULL )
$actString = 'e';
else if ( $this->_addTbl != 'N' )
$actString = 'a';
else
$actString = '';
if ( $this->_hasB )
$actString .= 'B';
$buf .= $this->getPrintHeader($disp, $actString);
if ( $data != NULL && count($data) > 0 )
{
$keys = array_keys($data);
if ( $disp->_sort[0] == $this->_id )
{
if ( array_key_exists(2,$disp->_sort) && $this->_holderIndex == $disp->_sort[2] )
{
if ( $disp->_sort[1] == 1 )
sort($keys);
else
rsort($keys);
}
else
{
//default context view sort
if(!array_key_exists(1,$disp->_sort) && $disp->_pid == "context" ) {
$disp->_sort[2] = "order";
$disp->_sort[1] = 0; //asc
}
$s = array();
if(array_key_exists(2,$disp->_sort))
$by = $disp->_sort[2];
else
$by = NULL;
foreach( $keys as $key )
{
$d = &$data[$key];
if(array_key_exists($by, $d)) {
$a = $d[$by];
$a = $a->GetVal();
}
else {
$a = NULL;
}
$s[$key] = $a;
}
if ( array_key_exists(1,$disp->_sort) && $disp->_sort[1] == 1 )
{
if ( $by == 'order' )
asort($s, SORT_NUMERIC);
else
asort($s, SORT_STRING);
}
else
{
if ( $by == 'order' )
arsort($s, SORT_NUMERIC);
else
arsort($s, SORT_STRING);
}
$keys = array_keys($s);
}
}
$action_attr = NULL;
foreach ($this->_dattrs as $attr) {
if ($attr->_type == 'action') {
$action_attr = $attr;
break;
}
}
foreach ( $keys as $key ) {
$buf .= $this->getPrintHtmlLine1($data[$key], $key, $disp, $action_attr);
}
}
}
else
{
if ( $ref == NULL ) {
$actString = 'e';
if ( $this->_hasB )
$actString .= 'B';
}
else {
$actString = 'Ed';
$actString .= ($this->_hasB ? 'B' : 'b');
}
$buf .= $this->getPrintHeader($disp, $actString);
$keys = array_keys($this->_dattrs);
foreach( $keys as $i ) {
$buf .= $this->getPrintHtmlLine($data, $disp, $i);
}
}
$buf .= '
';
echo "$buf \n";
}
private function getEditTips()
{
$labels = array($this->_helpKey);
foreach ($this->_dattrs as $attr) {
$labels[] = $attr->_helpKey;
}
$tips = DATTR_HELP::GetInstance()->GetEditTip($labels);
$buf = '';
if (!empty($tips)) {
$buf = '';
foreach( $tips as $tip ) {
if(strlen($tip)) {
$buf .= "- $tip
\n";
}
}
$buf .= '
';
}
return $buf;
}
private function printEditHtml(&$data, $disp)
{
$buf = $this->getEditTips();
$buf .= "\n". '' . "\n";
$actString = ( (substr($this->_id, -3) == 'SEL') ? 'n':'s' ) . ( $this->_hasB ? 'B':'b');
$buf .= $this->getPrintHeader($disp, $actString);
$keys = array_keys($this->_dattrs);
foreach ( $keys as $key ) {
$buf .= $this->getPrintHtmlInputLine($data, $disp->_info, $key);
}
$buf .= '
';
echo "$buf \n";
}
private function getPrintHtmlLine(&$data, $disp, $index)
{
$valwid = 0;
$attr = $this->_dattrs[$index];
if ( $attr == NULL || $attr->_FDE[1] == 'N') {
return '';
}
$blockedReason = $attr->blockedReason();
if ( $attr->_type == 'sel1' ) {
$attr->populate_sel1_options($disp->_info, $data);
}
$buf = '';
if ( $attr->_label ) {
if ($blockedReason) {
$buf .= '| ';
}
else {
$buf .= ' | ';
}
$buf .= $attr->_label;
if ($this->_cols == 1) {
$buf .= ' ';
}
else {
$buf .= ' | ';
}
//add tooltip
$dhelp_item = DATTR_HELP::GetInstance()->GetItem($attr->_helpKey);
if($dhelp_item != NULL) {
$buf .= $dhelp_item->render($attr->_helpKey, $blockedReason);
}
$buf .= ' | ';
}
if ($this->_cols == 1) {
$buf .= '
| 0) {
$buf .= " width=\"$valwid\"";
}
$buf .= '>';
if ( $attr->_href )
{
$link = $disp->_ctrlUrl . 'm=' . $disp->_mid . '&p=' . $disp->_pid;
if ( $disp->_tid != NULL )
$link .= '&t=' . $disp->_tid;
if ( $disp->_ref != NULL )
$link .= '&r='. $disp->_ref;
$link .= $attr->_href;
$attr->_hrefLink = str_replace('$R', $disp->_ref, $link);
}
$buf .= ($attr->toHtml($data[$attr->_key]));
$buf .= " |
\n";
return $buf;
}
private function getPrintHtmlInputLine(&$data, &$info, $key)
{
$attr = $this->_dattrs[$key];
if ( $attr == NULL || $attr->_FDE[2] == 'N')
return '';
$valwid = 0;
$blockedReason = $attr->blockedReason();
if ( $attr->_type == 'sel1' ) {
$attr->populate_sel1_options($info, $data);
}
$buf = '';
if ( $attr->_label ) {
if ($blockedReason) {
$buf .= '| ';
}
else {
$buf .= ' | ';
}
$buf .= $attr->_label;
if ($this->_cols == 1) {
$buf .= ' ';
}
else {
$buf .= ' | ';
}
//add tooltip
$dhelp_item = DATTR_HELP::GetInstance()->GetItem($attr->_helpKey);
if($dhelp_item != NULL) {
$buf .= $dhelp_item->render($attr->_helpKey, $blockedReason);
}
$buf .= ' | ';
}
if ($this->_cols == 1) {
$buf .= '
| 0) {
$buf .= " width=\"$valwid\"";
}
$buf .= '>';
if ($blockedReason)
$buf .= ($attr->toHtml($data[$attr->_key]));
else
$buf .= ($attr->toHtmlInput($data[$attr->_key]));
$buf .= " |
\n";
return $buf;
}
private function getPrintHtmlLine1(&$data, $key0, $disp, $action_attr)
{
static $htmlid;
if (isset($htmlid))
$htmlid++;
else
$htmlid = 1;
$buf = '';
$keys = array_keys($this->_dattrs);
//allow index field clickable, same as first action
$actionLink = null;
$indexActionLink = null;
if ($action_attr != NULL) {
if ( is_array($action_attr->_minVal) )
{
$index = $action_attr->_minVal[0];
$ti = $action_attr->_minVal[$data[$index]->GetVal()];
if ( $ti == NULL )
$ti = $action_attr->_minVal[1];
}
else
$ti = $action_attr->_minVal;
$actionLink = $this->getActionLink($disp, $action_attr->_maxVal, $ti, $key0);
$tmp_a = strpos($actionLink, '"') +1;
$tmp_e = strpos($actionLink, '">');
$indexActionLink = substr($actionLink, $tmp_a, $tmp_e - $tmp_a);
}
foreach( $keys as $key )
{
$attr = $this->_dattrs[$key];
if ( $attr->_FDE[1] == 'N' )
continue;
$linkedData = NULL;
if ($attr->_linkedkeys != NULL) {
$linkedData = $data[$attr->_linkedkeys];
}
if($key == 0) {
if ($this->_icon != NULL) {
if($attr->_key == "type" && is_array($attr->_maxVal) && is_array($this->_icon)) {
$icon_name = array_key_exists($data['type']->GetVal(), $this->_icon) ?
$this->_icon[$data['type']->GetVal()] : 'application';
}
else {
$icon_name = $this->_icon;
}
$buf .= ' | ';
}
if ($this->_hasNote) {
$buf .= '';
if(isset($data['note']) && $data['note']->HasVal()) {
$buf .= ' '
. ''
. $data['note']->GetVal() . ' ';
}
$buf .= ' | ';
}
}
$buf .= '_align[$key]) )
$buf .= ' align="'.$this->_align[$key] .'"';
$buf .= '>';
if ( $attr->_type == 'action' ) {
$buf .= ($attr->toHtml($actionLink));
}
else {
if ( $attr->_type == 'sel1' ) {
$attr->populate_sel1_options($disp->_info, $data);
}
if ($attr->_key == $this->_holderIndex) {
$buf .= ($attr->toHtml($data[$attr->_key], $indexActionLink, $linkedData));
}
else {
$buf .= ($attr->toHtml($data[$attr->_key], NULL, $linkedData));
}
}
$buf .= ' | ';
}
$buf .= "
\n";
return $buf;
}
}