getNamespace(); $tbl = new TableAjax($acl); // $tbl->showProcesInitFiltr = true; // TODO: activate when ready $tblLabel = $acl->getNamespace(); if ('default_db' == $acl->getSourceName()) { $tblLabel = array(); DBG::nicePrint($acl->getID(), '$acl->getID()'); $zasobObj = ProcesHelper::getZasobTableInfo($acl->getID()); DBG::nicePrint($zasobObj, '$zasobObj'); $sqlId = $acl->getID(); if (!$sqlId) throw new Exception("Missing zasob id!"); $zasobItem = DB::getPDO()->fetchFirst(" select z.ID, z.`DESC`, z.DESC_PL, z.OPIS from CRM_LISTA_ZASOBOW z where z.ID = {$sqlId} and z.`TYPE` = 'TABELA' "); DBG::nicePrint($zasobItem, '$zasobItem'); // if (!$zasobObj) throw new Exception("Zasob TABELA ID=" . $acl->getID() . " nie istnieje"); // if (!empty($zasobObj->DESC_PL)) $tblLabel []= $zasobObj->DESC_PL; // if (!empty($zasobObj->OPIS)) $tblLabel []= $zasobObj->OPIS; if (!$zasobItem) throw new Exception("Zasob TABELA ID=" . $acl->getID() . " nie istnieje"); if (!empty($zasobItem['DESC_PL'])) $tblLabel []= $zasobItem['DESC_PL']; if (!empty($zasobItem['OPIS'])) $tblLabel []= $zasobItem['OPIS']; $tblLabel = implode(" - ", $tblLabel); } $tbl->setSyncUrl($syncUrl); $tbl->setLabel($tblLabel); $tbl->addRowFunction('edit'); $tbl->addRowFunction('hist'); $tbl->addRowFunction('files'); $tbl->addRowFunction('cp'); $tbl->addRowFunction('msgs'); return $tbl; } public function defaultAction() { UI::gora(); UI::menu(); try { $namespace = V::get('namespace', '', $_GET, 'word'); if (!$namespace) { $typeName = V::get('typeName', '', $_GET, 'word'); if (!$typeName) throw new Exception("Wrong param typeName"); $namespace = Api_WfsNs::getBaseWfsUri() . '/' . str_replace(':', '/', $typeName); } $acl = P5::getAclByNamespace($namespace, $forceTblAclInit = ('1' == V::get('_force', '', $_GET))); $forceFilterInit = array(); $filterInit = new stdClass(); $filterInit->currSortCol = $acl->getPrimaryKeyField(); $filterInit->currSortFlip = 'desc'; foreach ($_GET as $k => $v) { if (strlen($k) > 3 && substr($k, 0, 2) == 'f_' && !empty($v)) {// filter prefix $filterInit->$k = $v; } else if (strlen($k) > 4 && substr($k, 0, 3) == 'sf_' && !empty($v)) {// special filter prefix $filterInit->$k = $v; } else if (strlen($k) > 4 && substr($k, 0, 3) == 'ff_' && !empty($v)) {// force filter prefix $fldName = substr($k, 3); $forceFilterInit[$fldName] = $v; } } $tbl = $this->getTableAjaxWidget($acl); $tbl->setFilterInit($filterInit); if (!empty($forceFilterInit)) $tbl->setForceFilterInit($forceFilterInit); if (V::get('DBG_INST', '', $_GET)) { // TODO: TEST namespace $siblings = ACL::getNamespaceSiblings($namespace); DBG::nicePrint($siblings, '$siblings'); $filtrInstance = V::get('f_instance', [], $_POST, 'array'); DBG::nicePrint($filtrInstance, '$filtrInstance'); $sibling = 'default_db/CRM_PROCES/PROCES_INIT'; DBG::nicePrint(array_merge(['type'=>"radio", 'name'=>"f_instance[{$sibling}]", 'value'=>'YES'], ('YES' === V::get($sibling, '', $filtrInstance)) ? ['checked' => "checked"] : []), "merge {$sibling} YES"); $sibling = 'default_db/CRM_PROCES/PROCES_INIT'; DBG::nicePrint(array_merge(['type'=>"radio", 'name'=>"f_instance[{$sibling}]", 'value'=>'NO'], ('NO' === V::get($sibling, '', $filtrInstance)) ? ['checked' => "checked"] : []), "merge {$sibling} NO"); $_ = array(UI, 'h'); echo $_('form', ['method' => "POST", 'style' => "width:600px; border:1px solid #ddd; border-radius:2px"], [ $_('div', ['style' => "background-color:#ddd"], "Test Filtr instancji"), $_('div', ['style' => "padding:8px"], array_map(function ($sibling) use ($filtrInstance, $_) { return $_('div', [], [ $_('label', ['style' => "margin:0 8px"], [ $_('input', array_merge(['type'=>"radio", 'name'=>"f_instance[{$sibling}]", 'value'=>'YES'], ('YES' === V::get($sibling, '', $filtrInstance)) ? ['checked' => "checked"] : [])), " TAK " ]), $_('label', ['style' => "margin:0 8px"], [ $_('input', array_merge(['type'=>"radio", 'name'=>"f_instance[{$sibling}]", 'value'=>'NO'], ('NO' === V::get($sibling, '', $filtrInstance)) ? ['checked' => "checked"] : [])), " NIE " ]), $_('label', ['style' => "margin:0 8px"], [ $_('input', ['type'=>"radio", 'name'=>"f_instance[{$sibling}]", 'value'=>'x']), " pomiń " ]), // $_('button', ['onClick'=>"this.form.f_instance['{$sibling}'].value = ''; return false"], "odznacz"), $_('button', ['onClick'=>"console.log(this.form.elements['f_instance[{$sibling}]']); this.form.elements['f_instance[{$sibling}]'].value = 'x'; return false"], "odznacz"), " - {$sibling}" ]); }, $siblings)), $_('div', [], [ $_('input', ['type'=>"hidden", 'name'=>'_route', 'value'=>"ViewObject"]), $_('input', ['type'=>"hidden", 'name'=>'namespace', 'value'=>$namespace]), $_('input', ['type'=>"submit", 'value'=>"Filtruj - TEST"]), ]), ]); DBG::nicePrint($_POST, '$_POST'); { $args = $_POST; $fIsInstance = []; $fIsNotInstance = []; if (!empty($args['f_instance'])) { foreach ($args['f_instance'] as $inst => $selected) { if ('YES' === $selected) { $fIsInstance[] = $inst; } else if ('NO' === $selected) { $fIsNotInstance[] = $inst; } } } } $queryFeatures = $acl->buildQuery([ // TODO: 'propertyName' => "*,@instance", 'f_is_instance' => $fIsInstance, 'f_is_not_instance' => $fIsNotInstance, '@instances' => '1', 'limit' => 10 ]); // $total = $queryFeatures->getTotal(); $items = $queryFeatures->getItems(); $rootNamespace = $acl->getRootNamespace(); DBG::nicePrint($rootNamespace, '$rootNamespace'); $jsRenderFunName = 'render_dropdown_instances_' . substr(md5(time()), 0, 6); DBG::nicePrint($jsRenderFunName, '$jsRenderFunName'); UI::table([ 'rows' => array_map(function($row) use ($namespace, $siblings, $rootNamespace, $jsRenderFunName) { return [ 'ID' => $row['ID'], 'DESC' => $row['DESC'], 'TYPE' => $row['TYPE'], 'Typ' => UI::h('div', ['class'=>"p5UI__dropdown-wrap"], [ UI::h('button', [ // 'onClick' => "p5UI__dropdown(event, this, 'left bottom')", 'onClick' => "p5UI__dropdown(event, this, 'left bottom', {$jsRenderFunName}({$row['ID']}))", 'class' => "btn btn-xs btn-default p5UI__dropdown-btn" ], [ UI::h('i', ['class' => "glyphicon glyphicon-tags", 'title' => "Ustaw typ danych (instancje)"]), ]), UI::h('div', ['class' => "p5UI__dropdown-content"] , array_merge( [ UI::h('input', ['type' => "text", 'placeholder' => "Search..", 'class' => "p5UI__dropdown-input", 'onkeyup' => "p5_ViewObject_instances_filterInput(this)"], null), ] , array_map(function ($sibling) use ($row, $namespace, $rootNamespace) { return UI::h('div', ['label'=>$sibling, 'style'=>"padding:4px 0"], [ UI::h('button', array_merge(['class' => "btn btn-xs btn-default", 'style' => "margin:0 4px 0 0", 'title' => "Ustaw instancje '{$sibling}'", 'onClick' => "return p5_ViewObject_instance_set(this, '{$row['ID']}', '{$sibling}', 'yes')"], (in_array($sibling, explode(',', $row['@instances']))) ? ['disabled' => "disabled"] : [] ), "+"), UI::h('button', ['class' => "btn btn-xs btn-default", 'style' => "margin:0 4px 0 0", 'title' => "Usuń instancje '{$sibling}'", 'onClick' => "return p5_ViewObject_instance_set(this, '{$row['ID']}', '{$sibling}', 'no')"], "-"), UI::h('span', [], substr($sibling, strlen($rootNamespace) + 1)), ]); }, $siblings) ) ) ]), 'instancesList' => implode(', ', ACL::getFeatureNamespaces($namespace, $row['ID'])), ]; }, $items) ]); echo UI::h('style', ['type' => "text/css"], " .p5UI__dropdown-content { min-width:400px; border:1px solid #ccc; background-color: #fff; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2) } .p5UI__dropdown-content .p5UI__dropdown-item { display:block; color:#000; padding:4px; text-decoration:none } .p5UI__dropdown-content .p5UI__dropdown-item:hover { background-color:#ebebeb } "); echo UI::h('script', ['src'=>"static/vendor.js", 'type'=>"text/javascript"]); $jsArgs = [ 'SET_INSTANCE_URL' => $this->getLink('setInstanceAjax'), 'NAMESPACE' => $namespace, 'DBG' => DBG::isActive() ? 'true' : 'false', ]; UI::inlineJS(__FILE__ . '.instancesDropdown.js', [ 'JS_GLOBAL_FUNCTION_NAME' => $jsRenderFunName, 'NAMESPACE' => $namespace, 'SET_INSTANCE_URL' => $this->getLink('setInstanceAjax'), 'DBG' => DBG::isActive() ? 1 : 0, 'INITIAL_DROPDOWN_DATA' => [ // 'allowed_instances' => $siblings, 'allowed_instances' => array_map(function ($sibling) use ($rootNamespace) { return [ 'namespace' => $sibling, 'label' => substr($sibling, strlen($rootNamespace) + 1) ]; }, $siblings), 'items' => array_map(function($row) use ($namespace, $siblings, $rootNamespace, $jsRenderFunName) { return [ 'pk' => $row['ID'], // TODO: $primaryKeyField 'instances' => explode(',', $row['@instances']), ]; }, $items) ], ]); echo UI::h('script', [], " var SET_INSTANCE_URL = '{$jsArgs['SET_INSTANCE_URL']}' var NAMESPACE = '{$jsArgs['NAMESPACE']}' function p5_ViewObject_instance_set(n, pk, sibling, toConnect) { console.log('p5_ViewObject_instance_set pk('+pk+'), sibling('+sibling+'), toConnect('+toConnect+'), n', n); window.fetch(SET_INSTANCE_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin', body: JSON.stringify({ namespace: NAMESPACE, primaryKey: pk, instance: sibling, toConnect: toConnect, }) }).then(function (response) { return response.json() }).then(function (response) { p5UI__notifyAjaxCallback(response) console.log(response) // TODO: render list }) } "); echo UI::h('script', [], " function p5_ViewObject_instances_filterInput(n) { var input, filter, ul, li, a, i, div; input = n // .id-myInput filter = input.value.toUpperCase() div = n.parentNode // .id-myDropdown a = div.getElementsByTagName('div') for (i = 0; i < a.length; i++) { if (a[i].getAttribute('label') && a[i].getAttribute('label').toUpperCase().indexOf(filter) > -1) { a[i].style.display = 'block' } else { a[i].style.display = 'none' } } } "); echo '
vCols (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($vCols);echo'';}
}
$visibleCols = $acl->getVisibleFieldListByIdZasob();
if($DBG){echo'visibleCols (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($visibleCols);echo'';} $jsonData = new stdClass(); $jsonData->page = $page + 1; $jsonData->pageSize = $pageSize; $jsonData->filters = $filters; $jsonData->cols = new stdClass(); $jsonData->primaryKey = $acl->getPrimaryKeyField(); $ind = 0; foreach ($visibleCols as $fieldID => $col) { $ind++; $columnConfig = (object)array('index'=>$ind); if (in_array($col, array('A_STATUS','A_STATUS_CURRENT','A_SERVICES_STATUS_CURRENT'))) { $columnConfig->format = '
field('.$col.') $colType (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($colType);echo'';}
if ($colType['type'] == 'date') {
//$columnConfig->type = 'date';// TODO: require datetimepicker
}
if (!empty($colType['simpleType'])) $columnConfig->type = $colType['simpleType'];
} else {// typespecial - no type
$columnConfig->type = 'special';
}
$columnConfig->xsdType = $acl->getXsdFieldType($col);
if ($columnConfig->xsdType) {
$ex = explode(":", $columnConfig->xsdType);
switch ($ex[0]) {
case 'ref':
case 'alias_ref':
if (3 != count($ex)) throw new HttpException("Schema Error for field({$col}) xsdType({$columnConfig->xsdType})", 500);
$columnConfig->type = 'ref';
$columnConfig->xsdRefUri = Api_WfsNs::getNsUri($ex[1]);
$columnConfig->xsdRefType = $ex[2];
$columnConfig->xsdRefNsPrefix = $ex[1];
break;
case 'xsd':
switch ($ex[1]) {
case 'string': $columnConfig->type = 'string'; break;
case 'ind': $columnConfig->type = 'number'; break;// TODO: bug 'ind'?
}
break;
case 'p5':
switch ($ex[1]) {
case 'alias': {
$format = $acl->getXsdFieldParam($col, 'format');
if ($format) $columnConfig->format = $format;
} break;
case 'string': {
$columnConfig->type = 'p5:string';
$columnConfig->formatByValue = $acl->getXsdFieldParam($col, 'formatByValue');
} break;
}
break;
}
}
$typeSpecial = Typespecial::getInstance($fieldID, $col);
if ($typeSpecial) {
if($DBG){echo'typeSpecial (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($typeSpecial);echo'';} $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, ' 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; } } } } } if ($columnConfig->xsdType) {// fix fields type p5:typeSpecialSimpleLink (previously defined by Typespecial) switch ($columnConfig->xsdType) { case 'p5:typeSpecialSimpleLink': { $columnConfig->type = 'simpleLink'; $columnConfig->_tsRetId = 0; $columnConfig->_tsSimpleLink = new stdClass(); $columnConfig->_tsSimpleLink->format = $acl->getXsdFieldParam($col, 'format'); $columnConfig->_tsSimpleLink->aliasMap = $acl->getXsdFieldParam($col, 'aliasMap'); } break; } } // @see ajaxHiddenColsSave if (UserProfile::isHiddenColumn($acl->getID(), $fieldID)) { $columnConfig->hidden = true; } $columnConfig->description = $acl->getFieldOpis($col); $jsonData->cols->{$col} = $columnConfig; } $jsonData->rows = array(); $queryFeatures = $acl->buildQuery($params); $jsonData->total = $queryFeatures->getTotal(); if($DBG){echo'
get_total (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($jsonData->total);echo'';} $listItems = $queryFeatures->getItems(); $primaryKeyField = $acl->getPrimaryKeyField(); $items = []; foreach ($listItems as $item) $items[ $item[$primaryKeyField] ] = $item; foreach ($items as $idx => $item) $items[$idx] = (array)$item; if($DBG){echo'
items (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($items);echo'';} // TODO: add virtual data by Typespecial if (!empty($vCols) && !empty($items)) { foreach ($vCols as $vColID => $vCol) { $colType = $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'
Typespecial('.$vColID.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($typeSpecial);echo'';}
$ids = array_keys($items);
$specialValues = $typeSpecial->getValuesByIds($this->_zasobID, $ids);
if($DBG){echo'Typespecial('.$vCol.') specialValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($specialValues);echo'';}
if (!empty($specialValues)) foreach ($specialValues as $kItemID => $vValues) {
$tsValue = implode('Item['.$kItemID.'].'.$vCol.' specialValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($items[$kItemID]);echo'';}
if (!empty($items[$kItemID][$vCol]) && !empty($tsValue)) {
$items[$kItemID][$vCol] .= ": {$tsValue}";
} else {
$items[$kItemID][$vCol] = $tsValue;
}
}
}
}
}
}
{
if(V::get('DBG', '', $_GET)){$jsonData->__DBG__ = [];}
$p5Alias = [];
foreach ((array)$jsonData->cols as $fieldName => $conf) {
if ('p5:alias' == V::get('xsdType', '', $conf)) {
if(V::get('DBG', '', $_GET)){$jsonData->__DBG__[$fieldName] = $conf;}
$aliasType = $acl->getXsdFieldParam($fieldName, 'type');// 'type' => 'sql_table_alias',
if ('sql_table_alias' == $aliasType) {
$p5Alias[$fieldName] = (array)$conf;
$p5Alias[$fieldName]['type'] = 'sql_table_alias';
$p5Alias[$fieldName]['local_join_key'] = $acl->getXsdFieldParam($fieldName, 'local_join_key');// 'local_join_key' => 'ID',
$p5Alias[$fieldName]['remote_table_name'] = $acl->getXsdFieldParam($fieldName, 'remote_table_name');// 'remote_table_name' => 'CRM_LISTA_ZASOBOW_ORDERS_summary_view',
$p5Alias[$fieldName]['remote_join_key'] = $acl->getXsdFieldParam($fieldName, 'remote_join_key');// 'remote_join_key' => 'ID',
$p5Alias[$fieldName]['remote_column_value'] = $acl->getXsdFieldParam($fieldName, 'remote_column_value');// 'remote_column_value' => 'SUM_POS',
} else if ('sql_query_alias' == $aliasType) {
$p5Alias[$fieldName] = (array)$conf;
$p5Alias[$fieldName]['type'] = 'sql_query_alias';
$p5Alias[$fieldName]['local_join_key'] = $acl->getXsdFieldParam($fieldName, 'local_join_key');
$p5Alias[$fieldName]['join_query_format'] = $acl->getXsdFieldParam($fieldName, 'join_query_format');
}
}
}
if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['$p5Alias'] = $p5Alias;}
if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['$aliasValuesRaw'] = [];}
if ($p5Alias) {
$sqlLocalTableName = $acl->getRootTableName();
$primaryKeyField = $acl->getPrimaryKeyField();
foreach ($p5Alias as $fieldName => $conf) {
$aliasValuesRaw = [];
if ('sql_table_alias' == $conf['type']) {
$localKeys = [];
$localKeyName = V::get('local_join_key', '', $conf);
if ($localKeyName) {
if (!array_key_exists($localKeyName, $localKeys)) {
$localKeys[$localKeyName] = [];
foreach ($items as $item) {
$keyLocal = V::get($localKeyName, 0, $item);
if ($keyLocal) $localKeys[$localKeyName][] = DB::getPDO()->quote($keyLocal, PDO::PARAM_STR);
}
}
if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['$localKeys'] = $localKeys;}
if (!empty($localKeys[$localKeyName])) {
$sqlRemoteTable = V::get('remote_table_name', '', $conf);
$sqlRemoteValueFieldName = V::get('remote_column_value', '', $conf);
$sqlRemoteKeyName = V::get('remote_join_key', '', $conf);
$sqlLocalKeyName = $acl->getSqlFieldName($localKeyName);
$aliasValuesRaw = DB::getPDO()->fetchAllByKey("
select r.{$sqlRemoteKeyName} as {$sqlLocalKeyName}, r.{$sqlRemoteValueFieldName} as remote_value
from {$sqlRemoteTable} r
where r.{$sqlRemoteKeyName} in(" . implode(",", $localKeys[$localKeyName]) . ")
", $sqlLocalKeyName);
if(V::get('DBG', '', $_GET)){$jsonData->__DBG__['$aliasValuesRaw'][$fieldName] = $aliasValuesRaw;}
}
}
} else if ('sql_query_alias' == $conf['type']) {
$localKeys = [];
$localKeyName = V::get('local_join_key', '', $conf);
$sqlFormat = V::get('join_query_format', '', $conf);
if ($localKeyName && $sqlFormat) {
if (!array_key_exists($localKeyName, $localKeys)) {
$localKeys[$localKeyName] = [];
foreach ($items as $item) {
$keyLocal = V::get($localKeyName, 0, $item);
if ($keyLocal) $localKeys[$localKeyName][] = DB::getPDO()->quote($keyLocal, PDO::PARAM_STR);
}
}
}
if (!empty($localKeys[$localKeyName])) {
$sql = str_replace('{sql_in_local_join_key}', implode(",", $localKeys[$localKeyName]), $sqlFormat);
$sqlLocalKeyName = $acl->getSqlFieldName($localKeyName);
$aliasValuesRaw = DB::getPDO()->fetchAllByKey($sql, $sqlLocalKeyName);
}
}
DBG::log($aliasValuesRaw, 'array', '$aliasValuesRaw');
if (!empty($aliasValuesRaw)) {
if(V::get('DBG_P5', '', $_GET)){echo '{ "$aliasValuesRaw": '.json_encode($aliasValuesRaw).', "dbg": [' . "\n";}
array_walk($items, function (&$item) use ($fieldName, $sqlLocalKeyName, $aliasValuesRaw) {
$sqlValue = V::get($sqlLocalKeyName, null, $item);
if(V::get('DBG_P5', '', $_GET)){echo '{ "sqlValue": "'.$sqlValue.'", "remote_value": "'.$aliasValuesRaw[$sqlValue]['remote_value'].'", "item": '.json_encode($item) . '},' . "\n";}
if ($sqlValue !== null && array_key_exists($sqlValue, $aliasValuesRaw)) {
if(V::get('DBG_P5', '', $_GET)){echo '{ "TODO_update_value": "'.$aliasValuesRaw[$sqlValue]['remote_value'].'"},' . "\n";}
$item[$fieldName] = $aliasValuesRaw[$sqlValue]['remote_value'];
if(V::get('DBG_P5', '', $_GET)){echo '{ "TODO_updated_value": "'.$item[$fieldName].'"},' . "\n";}
}
});
if(V::get('DBG_P5', '', $_GET)){echo "\n".'{}]}';die();}
}
}
}
}
foreach ($items as $item) {
// TODO: hide items without 'R'
foreach ($visibleCols as $fieldName) {
// TODO: ID default 'R'
if (!$acl->canReadObjectField($fieldName, $item)) $item[$fieldName] = '*****';
// null => empty string
if (!isset($item[$fieldName]) || (!$item[$fieldName] && $item[$fieldName] !== '0')) {
if($DBG){echo'isEmptyString['.$fieldName.'] (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($item[$fieldName]);echo'';} $item[$fieldName] = ''; } } $jsonData->rows[] = $item; } $jsonData->type = 'success'; $jsonData->msg = 'pobrano nowe dane'; return $jsonData; } }