Просмотр исходного кода

TableAjax add TypeSpecial simpleLink column type

Piotr Labudda 10 лет назад
Родитель
Сommit
eb250981fe
1 измененных файлов с 86 добавлено и 33 удалено
  1. 86 33
      SE/se-lib/TableAjax.php

+ 86 - 33
SE/se-lib/TableAjax.php

@@ -740,7 +740,7 @@ class TableAjax extends ViewAjax {
 							colTitle = props.description;
 							colTitle += ' (' + column + ')';
 						}
-						else if (props._tsRetId) {
+						else if (props._tsRetId > 0) {
 							colTitle = 'Kliknij na pole i przejdź do powiązanych rekordów (' + colTitle + ')';
 						}
 
@@ -877,6 +877,9 @@ class TableAjax extends ViewAjax {
 								case "special":
 										elem = $('<div>&nbsp;</div>');
 										break;
+								case "simpleLink":
+										elem = $('<div>&nbsp;</div>');
+										break;
 								case "geom":
 										if (placeHolder == undefined) placeHolder = priv.options.types.string.placeHolder;
 										placeHolder = (placeHolder === true || placeHolder == undefined) ? '%' : placeHolder === false ? '' : placeHolder;
@@ -1031,6 +1034,21 @@ class TableAjax extends ViewAjax {
 								case "special":
 									cellCnt.html(format.f(val));
 									break;
+								case "simpleLink":
+									var valLink = String(val);
+									if (undefined !== _data.cols[key]._tsRetId
+											&& (0 === _data.cols[key]._tsRetId || '0' === _data.cols[key]._tsRetId)
+											&& undefined !== _data.cols[key]._tsSimpleLink) {
+										valLink = _data.cols[key]._tsSimpleLink.format;
+										$.each(_data.cols[key]._tsSimpleLink.aliasMap, function (i, v) {
+											//console.log('simpleLink aliasMap key:', key, 'i:', i, 'v:', v, 'props['+v+']', props[v], 'val', val, 'typeof val', typeof val);
+											if (undefined !== props[v]) {
+												valLink = valLink.replace(new RegExp('\{' + i + '\}', 'g'), props[v]);
+											}
+										});
+									}
+									cellCnt.html(format.f(valLink));
+									break;
 								case "geom":
 									cellCnt.TableAjaxGeomField({
 										recordID: cellID,
@@ -5142,42 +5160,10 @@ jQuery(document).ready(function(){
 			if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">vCols (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($vCols);echo'</pre>';}
 		}
 
-		$total = $this->_acl->getTotal($params);
-		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">get_total (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($total);echo'</pre>';}
-		$items = $this->_acl->getItems($params);
-		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">items (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($items);echo'</pre>';}
-		// TODO: add virtual data by Typespecial
-		if (!empty($vCols) && !empty($items)) {
-			foreach ($vCols as $vColID => $vCol) {
-				$colType = $this->_acl->getFieldTypeById($vColID);
-				if ($colType) {
-					continue;// pomin Typespecial dla realnych komorek w bazie danych
-				}
-
-				$typeSpecial = Typespecial::getInstance($vColID, $vCol);
-				if ($typeSpecial) {
-					if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">Typespecial('.$vColID.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($typeSpecial);echo'</pre>';}
-					$ids = array_keys($items);
-					$specialValues = $typeSpecial->getValuesByIds($this->_zasobID, $ids);
-					if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">Typespecial('.$vCol.') specialValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($specialValues);echo'</pre>';}
-					if (!empty($specialValues)) foreach ($specialValues as $kItemID => $vValues) {
-						$tsValue = implode('<br>', $vValues);
-						if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">Item['.$kItemID.'].'.$vCol.' specialValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($items[$kItemID]);echo'</pre>';}
-						if (!empty($items[$kItemID]->{$vCol}) && !empty($tsValue)) {
-							$items[$kItemID]->{$vCol} .= ": {$tsValue}";
-						} else {
-							$items[$kItemID]->{$vCol} = $tsValue;
-						}
-					}
-				}
-			}
-		}
-
 		$visibleCols = $this->_acl->getVisibleFieldList();
 		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">visibleCols (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($visibleCols);echo'</pre>';}
 
 		$jsonData = new stdClass();
-		$jsonData->total = $total;
 		$jsonData->cols = new stdClass();
 		$ind = 0;
 		foreach ($visibleCols as $fieldID => $col) {
@@ -5212,6 +5198,38 @@ jQuery(document).ready(function(){
 			if ($typeSpecial) {
 				if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">typeSpecial (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($typeSpecial);echo'</pre>';}
 				$columnConfig->_tsRetId = $typeSpecial->getReturnId();
+				if ($columnConfig->_tsRetId == 0) {
+					$tsParamOut = V::get('param_out', null, $typeSpecial);
+					if ($tsParamOut) {
+						$tsFormat = V::get('format', null, $tsParamOut);
+						$tsValues = V::get('values', null, $tsParamOut);
+						$tsAliases = V::get('alias', null, $tsParamOut);
+						if (false !== strpos($tsFormat, '<a') && !empty($tsValues) && !empty($tsAliases)) {
+							$tsAliasMap = array();
+							/* [values] => Array([ID] => 1467), [alias] => Array([1467] => ID) */
+							$bugTsColsNotVisible = array();
+							foreach ($tsValues as $kVarName => $vIdZasob) {
+								if (array_key_exists($vIdZasob, $tsAliases)) {
+									$tsAliasMap[$kVarName] = $tsAliases[$vIdZasob];
+								} else {
+									$bugTsColsNotVisible[] = "noAliasFor {$vIdZasob}";
+								}
+								if (!array_key_exists($vIdZasob, $visibleCols)) {
+									$bugTsColsNotVisible[] = $vIdZasob;
+								}
+							}
+							if (empty($bugTsColsNotVisible)) {
+								$tsSimpleLink = new stdClass();
+								$tsSimpleLink->format = $tsFormat;
+								$tsSimpleLink->aliasMap = $tsAliasMap;
+								$columnConfig->_tsSimpleLink = $tsSimpleLink;
+								$columnConfig->type = 'simpleLink';
+							} else {
+								$columnConfig->_tsSimpleLinkBug = $bugTsColsNotVisible;
+							}
+						}
+					}
+				}
 			}
 
 			// @see ajaxHiddenColsSave
@@ -5229,6 +5247,41 @@ jQuery(document).ready(function(){
 			$jsonData->cols->{$col} = $columnConfig;
 		}
 		$jsonData->rows = array();
+		$jsonData->total = $this->_acl->getTotal($params);
+		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">get_total (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($jsonData->total);echo'</pre>';}
+		$items = $this->_acl->getItems($params);
+		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">items (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($items);echo'</pre>';}
+		// TODO: add virtual data by Typespecial
+		if (!empty($vCols) && !empty($items)) {
+			foreach ($vCols as $vColID => $vCol) {
+				$colType = $this->_acl->getFieldTypeById($vColID);
+				if ($colType) {
+					continue;// pomin Typespecial dla realnych komorek w bazie danych
+				}
+
+				$typeSpecial = Typespecial::getInstance($vColID, $vCol);
+				if ($typeSpecial) {
+					$columnConfig = V::get($vCol, null, $jsonData->cols);
+					if ($columnConfig && !empty($columnConfig->_tsSimpleLink)) {
+						// pomin simple link values - mved to js render
+					} else {
+						if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">Typespecial('.$vColID.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($typeSpecial);echo'</pre>';}
+						$ids = array_keys($items);
+						$specialValues = $typeSpecial->getValuesByIds($this->_zasobID, $ids);
+						if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">Typespecial('.$vCol.') specialValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($specialValues);echo'</pre>';}
+						if (!empty($specialValues)) foreach ($specialValues as $kItemID => $vValues) {
+							$tsValue = implode('<br>', $vValues);
+							if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">Item['.$kItemID.'].'.$vCol.' specialValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($items[$kItemID]);echo'</pre>';}
+							if (!empty($items[$kItemID]->{$vCol}) && !empty($tsValue)) {
+								$items[$kItemID]->{$vCol} .= ": {$tsValue}";
+							} else {
+								$items[$kItemID]->{$vCol} = $tsValue;
+							}
+						}
+					}
+				}
+			}
+		}
 		foreach ($items as $vItem) {
 			// TODO: hide items without 'R'
 			foreach ($visibleCols as $kID => $vCol) {