navView(); // TODO: header like in Storage_AclUsage
UI::startTag('div', [ 'class' => 'container-fluid' ]);
try {
$namespace = V::get('namespace', '', $_GET);
if (empty($namespace)) throw new Exception("Missing param namespace");
// [idZasob] => 25872
// [idDatabase] => 36
// [namespace] => default_db/CRM_PROCES/CRM_PROCES
// [_rootTableName] => CRM_PROCES
// [_type] => AntAcl
// [hasStruct] => 1
// [isStructInstalled] => 1
// [isObjectActive] => 1
// [description] =>
// [name] => CRM_PROCES
// [nsPrefix] => default_db__x3A__CRM_PROCES
// [typeName] => default_db__x3A__CRM_PROCES:CRM_PROCES
// [reinstallLink] => https://biuro.biall-net.pl/dev-pl/se-master/index.php?_route=Storage&_task=objectReinstall&namespace=default_db/CRM_PROCES/CRM_PROCES
$item = SchemaFactory::loadDefaultObject('SystemObject')->getItem($namespace, [ 'propertyName' => '*,field' ]);
switch ($item['_type']) {
case 'TableAcl': $this->tableStructView($item, $item['name'], $item['idDatabase']); break;
case 'AntAcl': $this->objectStructView($item); break;
default: throw new Exception("Not implemented type"); break;
}
} catch (Exception $e) {
UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
DBG::log($e);
}
UI::endTag('div'); // .container-fluid
UI::dol();
}
public function tableStructAction() {
UI::gora();
UI::menu();
// Router::getRoute('Storage')->navView(); // TODO: header like in Storage_AclUsage
try {
$idStorage = V::get('idStorage', 0, $_REQUEST, 'int');
if (empty($idStorage)) throw new Exception("Missing id storage");
$storageList = Router::getRoute('Storage')->getStorageList();
if (empty($storageList)) throw new Exception("No storage defined");
if (!array_key_exists($idStorage, $storageList)) throw new Exception("Storage not exists");
$tblName = V::get('table', '', $_REQUEST, 'word');
if (empty($tblName)) throw new Exception("No table name");
$item = SchemaFactory::loadDefaultObject('SystemObject')->getItem($namespace, [ 'propertyName' => '*,field' ]);
$this->tableStructView($item, $tblName, $idStorage);
} catch (Exception $e) {
UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
}
UI::dol();
}
public function objectStructureAction() { // objectStructAction
UI::gora();
UI::menu();
// Router::getRoute('Storage')->navView(); // TODO: header like in Storage_AclUsage
UI::startTag('div', [ 'class' => 'container-fluid' ]);
try {
$namespace = V::get('namespace', '', $_GET);
if (empty($namespace)) throw new Exception("Missing param namespace");
$item = SchemaFactory::loadDefaultObject('SystemObject')->getItem($namespace, [ 'propertyName' => '*,field' ]);
$this->objectStructView($item);
} catch (Exception $e) {
UI::alert('danger', "Error #" . $e->getCode() . "|" . $e->getLine() . ": " . $e->getMessage());
DBG::log($e);
}
UI::endTag('div'); // .container-fluid
UI::dol();
}
public function tableStructView($item, $tblName, $idStorage) {
$storagePdo = DB::getStorage($idStorage);
$tblStruct = $storagePdo->getTableStruct($tblName);
$idTable = Router::getRoute('Storage')->fetchTableId($idStorage, $tblName);
if ($idTable <= 0) {
UI::alert('warning', "Zasob tabela '{$tblName}' nie istnieje");// TODO: add p5UI btn
DBG::table("tblStruct", $tblStruct, __CLASS__, __FUNCTION__, __LINE__);
throw new Exception("Zasob tabela '{$tblName}' nie istnieje");
}
$cellZasobList = array();
foreach (DB::getPDO()->fetchAllByKey("
select z.ID, z.`DESC`, z.`TYPE` as ZASOB_TYPE, z.A_STATUS
from CRM_LISTA_ZASOBOW z
where z.PARENT_ID = '{$idTable}'
", $key = 'DESC') as $ind => $row) {
$cellZasobList[strtolower($ind)] = $row;
}
$emptyItem = array();
$emptyItem['name'] = '';
$emptyItem['id_zasob'] = '';
$emptyItem['zasob_type'] = '';
$emptyItem['uwagi'] = '';
$emptyItem['type'] = '';
$emptyItem['is_nullable'] = '';
$emptyItem['default_value'] = '';
$emptyItem['default_is_null'] = '';
$emptyItem['max_length'] = '';
$emptyItem['num_precision'] = '';
$emptyItem['num_scale'] = '';
$emptyItem['char_encoding'] = '';
$emptyItem['char_collation'] = '';
$emptyItem['extra'] = '';
$emptyItem['raw_storage_type'] = '';
$tableList = array();
foreach ($tblStruct as $row) {
$cellName = $row['name'];
$tblItem = V::cloneArray($emptyItem);
$tblItem['name'] = $cellName;
foreach ($row as $fldName => $fldVal) {
if (array_key_exists($fldName, $tblItem)) $tblItem[$fldName] = $fldVal;
}
$tblItem['uwagi'] = '';
$lowerCellName = strtolower($cellName);
$tblZasob = V::get($lowerCellName, '', $cellZasobList);
if ($tblZasob) {
$cellZasobList[$lowerCellName]['_checked'] = true;
$tblItem['id_zasob'] = $tblZasob['ID'];
$tblItem['zasob_type'] = $tblZasob['ZASOB_TYPE'];
} else {
$tblItem['uwagi'] .= '!Zasob';//'TODO: ADD ZASOB';
$ajaxAddZasobLink = Router::getRoute('Storage')->getLink('addCellToZasoby', [ 'idStorage' => $idStorage, 'tblName' => $tblName, 'cellName' => $cellName]);
$onClick = "return p5UI__ButtonAjax(this, 'p5UIBtnAjax:Storage:addCellToZasoby', { href: '{$ajaxAddZasobLink}' })";
$tblItem['id_zasob'] = 'TODO: ADD ZASOB';
}
$tableList[] = $tblItem;
}
foreach ($cellZasobList as $cellName => $row) {
if ('URL_ACTION' == $row['ZASOB_TYPE']) continue;
if (!$row['_checked']) {
$tblItem = V::cloneArray($emptyItem);
$tblItem['name'] = $cellName;
$tblItem['id_zasob'] = $row['ID'];
$tblItem['zasob_type'] = $row['ZASOB_TYPE'];
$tblItem['uwagi'] = '!DB';//'TODO: nie istnieje w bazie danych';
$tableList[] = $tblItem;
}
}
usort($tableList, function($rowA, $rowB) {
$a = $rowA['name']; $b = $rowB['name'];
if ('ID' == $a) return -1;
if ('ID' == $b) return 1;
if ($a == $b) return 0;
$a1 = substr($a, 0, 1); $b1 = substr($b, 0, 1);
if (('_' == $a1 || '_' == $b1) && $a1 != $b1) {
return ($a1 < $b1) ? 1 : -1;
}
return ($a < $b) ? -1 : 1;
});
UI::table([
'caption' => UI::h('span', [], [
"Komórki [{$idTable}] ",
UI::h('a', [
'href' => "index.php?_route=ViewTableAjax&namespace=default_db/{$tblName}",
'class' => "btn btn-md btn-link"
], "Przeglądaj tabelę"),
UI::h('a', [
'href' => "procesy5.php?task=CRM_LISTA_ZASOBOW&filtr_id={$idTable}&filtr_ids=%2B&filtr_ob=%2B",
'class' => "btn btn-md btn-link",
'title' => "Struktura aktualnie przeglądanej tabeli"
], "Zasoby"),
UI::h('a', [
'href' => "index.php?FUNCTION_INIT=PROCES_MENU&HEADER_NOT_INIT=YES&_task=PROCES_FOR_TABLE&tblId={$idTable}",
'class' => "btn btn-md btn-link",
'title' => "Procesy dla aktualnie przeglądanej tabeli"
], "Procesy"),
UI::h('a', [
'href' => Router::getRoute('Storage_AclUsage')->getLink('', [ 'namespace' => "default_db/{$tblName}" ]),
'class' => "btn btn-md btn-link",
'title' => "Uprawnienia - analiza użycia komórek w procesach"
], "Uprawnienia (analiza użycia)"),
]),
'cols' => array_keys($emptyItem),
'rows' => $tableList
]);
echo UI::h('script', [], "
jQuery(document).on('p5UIBtnAjax:Storage:addCellToZasoby:click', function(e, n, payload) {
console.log('event p5UIBtnAjax:Storage:addCellToZasoby:click', n, payload);
});
jQuery(document).on('p5UIBtnAjax:Storage:addCellToZasoby:ajaxLoaded', function(e, n, payload) {
console.log('event p5UIBtnAjax:Storage:addCellToZasoby:ajaxLoaded', n, payload);
if ('success' == payload.type && payload.body && payload.body.id > 0) {
var cellUwagiJQNode = jQuery(n).parents('td').next('td');
cellUwagiJQNode.text(cellUwagiJQNode.text().replace('!Zasob', ''))
jQuery(n).parents('td').text(payload.body.id);
jQuery(n).remove();
}
jQuery.notify(payload.msg, payload.type);
});
");
$ajaxAddZasobLink = Router::getRoute('Storage')->getLink('addGeomEtykietaCells', [ 'idStorage' => $idStorage, 'tblName' => $tblName]);
$onClick = "return p5UI__ButtonAjax(this, 'p5UIBtnAjax:Storage:addGeomEtykietaCells', { href: '{$ajaxAddZasobLink}' })";
UI::tag('a', ['onclick'=>$onClick, 'class'=>"btn btn-xs btn-default", 'href'=>"#"], "Dodaj komórki etykiet", true);
echo "(`etykieta_x`, `etykieta_y`, `etykieta_obrot`)";
echo UI::h('script', [], "
jQuery(document).on('p5UIBtnAjax:Storage:addGeomEtykietaCells:ajaxLoaded', function(e, n, payload) {
console.log('event p5UIBtnAjax:Storage:addGeomEtykietaCells:ajaxLoaded', n, payload);
if ('success' == payload.type && payload.body && payload.body.id > 0) {
var cellUwagiJQNode = jQuery(n).parents('td').next('td');
cellUwagiJQNode.text(cellUwagiJQNode.text().replace('!Zasob', ''))
jQuery(n).parents('td').text(payload.body.id);
jQuery(n).remove();
}
jQuery.notify(payload.msg, payload.type);
});
");
$tableActions = array_filter($cellZasobList, function ($row) {
return ('URL_ACTION' == $row['ZASOB_TYPE']);
});
UI::table([
'caption' => "tableActions",
// 'cols' => array_keys($emptyItem),
'rows' => array_map(function ($item) {
$sqlIdAction = DB::getPDO()->quote($item['ID'], PDO::PARAM_INT);
$args = DB::getPDO()->fetchAll("
select z.`DESC`
, a.ID as ALIAS_ID, a.`DESC` as ALIAS_DESC, a.OPIS as ALIAS_OPIS
from CRM_LISTA_ZASOBOW z
left join CRM_LISTA_ZASOBOW a on(a.ID = z.ALIAS_ID)
where z.PARENT_ID = {$sqlIdAction}
and z.`TYPE` = 'PARAM_IN'
");
$definitionArgs = DB::getPDO()->fetchAll("
select p.ID, p.`DESC`
from CRM_LISTA_ZASOBOW z
join CRM_LISTA_ZASOBOW d on(d.ID = z.ALIAS_ID)
left join CRM_LISTA_ZASOBOW p on(p.PARENT_ID = d.ID)
where z.ID = {$sqlIdAction}
and p.`TYPE` = 'PARAM_IN'
");
$flatDefinitionArgs = implode(";", array_map(function ($arg) {
return "{$arg['ID']}={$arg['DESC']}";
}, $definitionArgs));
return [
'label' => DB::getPDO()->fetchValue(" select z.OPIS from CRM_LISTA_ZASOBOW z where z.ID = {$sqlIdAction} ") . " " .
UI::h('i', [
'class' => "glyphicon glyphicon-pencil",
'style' => "cursor:pointer",
'onClick' => "return Storage__tableStruct__editActionLabel(this, {$sqlIdAction})"], ''),
'args' => implode("
&", array_map(function ($item) {
return (NULL === $item['ALIAS_ID'])
? $item['DESC']
: "{$item['DESC']}=" . '{$row["' . $item['ALIAS_DESC'] . '"]}';// TODO: add rmParam btn
}, $args)) . " " .
UI::h('i', [
'class' => "glyphicon glyphicon-plus-sign",
'style' => "cursor:pointer",
'title' => "Dodaj PARAM_IN",
'onClick' => "return Storage__tableStruct__addParamAction(this, {$sqlIdAction}, '{$flatDefinitionArgs}')"], ''),
// 'args_info' => '
' . var_export($args, true) . '', 'ID' => $item['ID'], 'DESC' => $item['DESC'], 'A_STATUS' => $item['A_STATUS'], 'definition args' => implode("", array_map(function ($item) { return '