_tbl = $tblAcl->getName(); $this->_acl = $tblAcl; $this->_zasobID = $tblAcl->getID(); $this->_pageSizes = array(10, 20, 50, 100);// default page sizes $this->_filterInit = new stdClass(); $hash = V::get('_hash', '', $_GET); if ($hash) { $this->_htmlID = $hash; $this->_readState(); } else { $this->_htmlID = $this->generateHtmlID(); $this->_readState(); } } public function showProcesInit($bool = true) { $this->_showProcesInit = $bool; } private function _hasStateFilterInit() { return array_key_exists($this->_htmlID, $_SESSION['TableAjax_Cache']) && array_key_exists('_filterInit', $_SESSION['TableAjax_Cache'][$this->_htmlID]); } // TODO: read state from cache by key $this->_htmlID // TODO: load filters and state: table, edit, add, etc. // TODO: save this data in Workspace 1, 2, 3, etc. // TODO: default filters in VIEWTABLE_AJAX // $tbl->setLabel($zasobObj->OPIS); // $tbl->setFilterInit($filterInit); // $tbl->addRowFunction('edit'); // $tbl->addRowFunction('hist'); // $tbl->addRowFunction('files'); // $tbl->addRowFunction('cp'); private function _readState() { if (!array_key_exists('TableAjax_Cache', $_SESSION)) { $_SESSION['TableAjax_Cache'] = array(); } //trigger_error("F." . __FUNCTION__ . " (" . (array_key_exists($this->_htmlID, $_SESSION['TableAjax_Cache'])) . ")", E_USER_NOTICE); //trigger_error("F." . __FUNCTION__ . " (".basename($_SERVER['SCRIPT_FILENAME'])."::_filterInit: " . json_encode($_SESSION['TableAjax_Cache'][$this->_htmlID]['_filterInit']) . ")", E_USER_NOTICE); if (array_key_exists($this->_htmlID, $_SESSION['TableAjax_Cache'])) { foreach ($_SESSION['TableAjax_Cache'][$this->_htmlID] as $k => $v) { //trigger_error("F." . __FUNCTION__ . " key: ({$k})", E_USER_NOTICE); switch ($k) { case '_label': $this->_label = $v; break; case '_filterInit': $this->_filterInit = $v; break; case '_rowFunctions': $this->_rowFunctions = $v; break; default: } } } } protected function _saveState($key = null) { if (!array_key_exists('TableAjax_Cache', $_SESSION)) { $_SESSION['TableAjax_Cache'] = array(); } if (!array_key_exists($this->_htmlID, $_SESSION['TableAjax_Cache'])) { $_SESSION['TableAjax_Cache'][$this->_htmlID] = array(); } if (!$key) { $_SESSION['TableAjax_Cache'][$this->_htmlID]['_label'] = $this->_label; $_SESSION['TableAjax_Cache'][$this->_htmlID]['_filterInit'] = $this->_filterInit; $_SESSION['TableAjax_Cache'][$this->_htmlID]['_rowFunctions'] = $this->_rowFunctions; } else if ($key == '_label') { $_SESSION['TableAjax_Cache'][$this->_htmlID]['_label'] = $this->_label; } else if ($key == '_filterInit') { $_SESSION['TableAjax_Cache'][$this->_htmlID]['_filterInit'] = $this->_filterInit; } else if ($key == '_rowFunctions') { $_SESSION['TableAjax_Cache'][$this->_htmlID]['_rowFunctions'] = $this->_rowFunctions; } } public function setPageSizes($pageSizes) { $this->_pageSizes = $pageSizes; } public function setFilterInit($filterInit) { if ($this->_hasStateFilterInit()) { return; } $this->_filterInit = (object)$filterInit; $this->_saveState(); } /** * @param array $forceFilterInit */ public function setForceFilterInit($forceFilterInit) { $this->_forceFilterInit = (object)$forceFilterInit; } private function setFilters($filterInit) { $this->_filterInit = (object)$filterInit; $this->_saveState(); } public function addRowFunction($funName, $funParams = array()) { $defaultRowFunction = array(); //$defaultRowFunction['edit'] = ''; //$defaultRowFunction['hist'] = ''; //$defaultRowFunction['files'] = ''; //$defaultRowFunction['cp'] = ''; $defaultRowFunction['edit'] = array('href'=>'#EDIT/{0}', 'ico'=>'glyphicon glyphicon-pencil', 'title'=>'Edytuj rekord'); $defaultRowFunction['hist'] = array('href'=>'#HIST/{0}', 'ico'=>'glyphicon glyphicon-book', 'title'=>'Historia'); $defaultRowFunction['files'] = array('href'=>'#FILES/{0}', 'ico'=>'glyphicon glyphicon-folder-open', 'title'=>'Pliki'); $defaultRowFunction['cp'] = array('href'=>'#', 'ico'=>'glyphicon glyphicon-plus-sign', 'title'=>'Kopiuj rekord', 'onclick'=>'return tableAjaxCopy({0});'); if (array_key_exists($funName, $defaultRowFunction)) { $this->_rowFunctions[$funName] = $defaultRowFunction[$funName]; } else { $this->_rowFunctions[$funName] = $funParams; } $this->_saveState('_rowFunctions'); } private function _parseRowFunctions($recordID = null, $pomin = array(), $showLabel = false) { $rowFunctions = array(); foreach ($this->_rowFunctions as $kFunName => $vParams) { if (in_array($kFunName, $pomin)) continue; //$rowFunctionsOut .= str_replace('{0}', $recordID, $vUrl); $attrs = array(); // $defaultRowFunction['cp'] = (object)array('href'=>'#', 'ico'=>'glyphicon glyphicon-plus-sign', 'title'=>'Kopiuj rekord', 'onclick'=>'return tableAjaxCopy({0});'); $label = ''; $ico = ''; foreach ($vParams as $kParamName => $v) { if ($kParamName == 'ico') { $ico = ''; continue; } $attr = $v; if ($recordID > 0) { $attr = str_replace('{0}', $recordID, $attr); } if ($showLabel && $kParamName == 'title') { $label = $attr; } $attr = $kParamName . '="' . $attr . '"'; $attrs[] = $attr; } $rowFunctions[$kFunName] = '' . "{$ico} {$label} " . ''; } return $rowFunctions; } private function _showRowFunctions($recordID = null, $pomin = array(), $showLabel = false) { $rowFunctionsOut = $this->_parseRowFunctions($recordID, $pomin, $showLabel); $rowFunctionsOut = implode('', $rowFunctionsOut); return $rowFunctionsOut; } private function _showRowFunctionsJson($recordID = null, $pomin = array(), $showLabel = false) { $rowFunctions = $this->_parseRowFunctions($recordID, $pomin, $showLabel); $rowFunctions = (object)$rowFunctions; return $rowFunctions; } private function _showExportFieldsJson() { $exportFields = $this->_acl->getExportFieldList(); return $exportFields; } private function getProcesInitSelected() { $userAcl = User::getAcl(); return $userAcl->getPermsFiltrProcesId(); } private function _fetchConnectedProcesInitList() { $pInitList = array();// [proces_init_id] => label (DESC) if (!$this->_showProcesInit) { return $pInitList; } $userAcl = User::getAcl(); return $userAcl->getTableProcesInitList($this->_zasobID); } public function allowTreeView() { if ($this->_tbl == 'CRM_LISTA_ZASOBOW') return true; if ($this->_tbl == 'CRM_PROCES') return true; return false; } public function hasGeomFields() { $hasGeomFields = false; $fieldsList = $this->_acl->getFields(); foreach ($fieldsList as $kID => $vCol) { if ($this->_acl->isGeomField($vCol['name'])) { if ($this->_acl->hasFieldPerm($kID, 'R')) { $hasGeomFields = true; break; } } } return $hasGeomFields; } public function render() { $pInitList = $this->_fetchConnectedProcesInitList(); $pInitListSelected = $this->getProcesInitSelected(); $hasGeomFlds = $this->hasGeomFields(); $tblAjaxMap = null; if ($hasGeomFlds) { $tblAjaxMap = new TableAjaxMap($this->_acl, 512, 400); } ob_start(); ?>
Typespecial('.$fieldID.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($typeSpecial);echo'';}
$specialValues = $typeSpecial->getEditSelectedValuesByIds($this->_zasobID, $row->ID, $fieldName, V::get($fieldName, $fieldVal, $row));
if($DBG){echo'Typespecial('.$fieldID.') specialValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($specialValues);echo'';}
if (!empty($specialValues)) {
$tsValues[$row->ID] = implode('fieldsList (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fieldsList);echo'';} if (!empty($fieldsList)) { foreach ($fieldsList as $vColID => $vCol) { $typeSpecial = Typespecial::getInstance($vColID, $vCol['name']); if ($typeSpecial) { if($DBG){echo'
Typespecial('.$vColID.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($typeSpecial);echo'';}
$colValue = V::get($vCol['name'], '', $record);
if($DBG){echo'V::get('.$vCol['name'].', "", $record) (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($colValue);echo'';}
$specialValues = $typeSpecial->getEditSelectedValuesByIds($this->_zasobID, $record->ID, $vCol['name'], $colValue);
if($DBG){echo'Typespecial('.$vColID.') specialValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($specialValues);echo'';}
if (!empty($specialValues)) {
$tsValues[$vColID] = implode('tsValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($tsValues);echo'';}
$rowFunctionsOut = $this->_showRowFunctions($record->ID, array('edit', 'cp'), true);
?>
| Data | User | Zmiany |
|---|---|---|
| _created; ?> | _author; ?> |
$colName) : ?>
$colName == 'N/S;') continue; ?>
: _acl->isAllowed($fldId, 'R', $record)) : ?> $colName; ?> ***** |
| $colName == 'N/S;') : ?> N/S; _acl->isAllowed($fldId, 'R', $record)) : ?> $colName; ?> ***** |
(' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sql);echo'';
//echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($mainDB->get_errors());echo'';
throw new Exception("Nie udało się dodać zadania");
}
// TODO: this blocks browser ajax query
//$limit = 3;
//while ($limit--) {
// sleep(10);
// TODO: check if task is done
//}
$confTblName = "{$tblName}_COLUMN";
$folderConfAll = FoldersConfig::getRawData();
if (!FoldersConfig::hasConfig($confTblName)) {
throw new Exception("Brak danych konfiguracyjnych ({$tblName})", 404);
}
$folderConf = FoldersConfig::getAll($confTblName);
$uploader = new FileUploader($confTblName, $record);
if (!$uploader->setConfig($folderConf)) {
throw new Exception("Błąd danych konfiguracyjnych ({$tblName})", 404);
}
$uploader->findFolder();
$mainFolder = $uploader->getDestFolder();
$files = $uploader->getFilesFromFolder($mainFolder, false, true);
$localPath = $uploader->getLocalPath();
$folderWeb = $uploader->getFolderWeb();
$jsonData = new stdClass();
$jsonData->msg = 'Zadanie dodane';
$jsonData->type = 'success';
$jsonData->files = $this->convertFileListToJson($files, $folderWeb, $localPath, $mainFolder);
return $jsonData;
}
private function sendAjaxFilesConnTblList($id, $args) {
header("Content-type: application/json");
$DBG = ('1' == V::get('DBG', '', $_REQUEST));
$dbID = $this->_acl->getDB();
$db = DB::getDB($dbID);
if (!$db) {
header('HTTP/1.0 406 Not Acceptable');
echo 'No DB (' . $dbID . ')';
exit;
}
$record = $this->_acl->getItem($id);
if (!$record) {
header('HTTP/1.0 404 Not Found');
echo 'No item ID(' . $rowID . ')';
exit;
}
$connTblName = '';
$connTblID = V::get('connTblID', 0, $_REQUEST, 'int');
if ($connTblID <= 0) {
header('HTTP/1.0 406 Not Acceptable');
echo 'No conn Table ID';
exit;
}
$connTblTypespecials = $this->getConnectedTblTypespecials($connTblID);
if (empty($connTblTypespecials)) {
header('HTTP/1.0 406 Not Acceptable');
echo "No conn Table (ID={$connTblID})";
exit;
}
if($DBG){echo'connTblTypespecials (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($connTblTypespecials);echo'';}
if(1) {
header('HTTP/1.0 404 Not Found');
echo 'TODO: ...';
exit;
}
$tblName = $this->_acl->getName();
$confTblName = "{$tblName}_COLUMN";
$folderConfAll = FoldersConfig::getRawData();
if (!FoldersConfig::hasConfig($confTblName)) {
header('HTTP/1.0 404 Not Found');
echo '{"type":"ERROR", "string": "Brak danych konfiguracyjnych (' . $tblName . ')"}';
exit;
}
$folderConf = FoldersConfig::getAll($confTblName);
$uploader = new FileUploader($confTblName, $record);
if (!$uploader->setConfig($folderConf)) {
header('HTTP/1.0 404 Not Found');
echo '{"type":"ERROR", "string": "Błąd danych konfiguracyjnych (' . $tblName . ')"}';
exit;
}
$uploader->findFolder();
$mainFolder = $uploader->getDestFolder();
$files = $uploader->getFilesFromFolder($mainFolder, false, true);
$localPath = $uploader->getLocalPath();
$folderWeb = $uploader->getFolderWeb();
$jsonFiles = $this->convertFileListToJson($files, $folderWeb, $localPath, $mainFolder);
echo json_encode($jsonFiles);
exit;
}
public function convertFileListToJson($files, $folderWeb, $localPath, $mainFolder) {
$jsonFiles = array();
if (!is_array($files) || empty($files)) {
return $jsonFiles;
}
sort($files);
foreach ($files as $vFilePath) {
$file = new stdClass();
$file->name = str_replace("{$localPath}/{$mainFolder}/", '', $vFilePath);
//$file->name = explode('/', $vFilePath);
//$file->name = end($file->name);
$file->size = filesize($vFilePath);
$file->sizeStr = round($file->size, 2) . "B";
if ($file->size > 1024 * 1024) {
$file->sizeStr = round(($file->size / (1024 * 1024)), 2) . "M";
} else if ($file->size > 1024) {
$file->sizeStr = round(($file->size / 1024), 2) . "K";
}
$file->type = '';
$file->created = date("Y-m-d H:i:s", filectime($vFilePath));
$file->web = str_replace($localPath, $folderWeb, $vFilePath);
$jsonFiles[] = $file;
}
return $jsonFiles;
}
private function getConnectedTables() {
$connTbls = array();
return $connTbls;// TODO: OFF - hardlinki tworzone w bash_sync_perms.php
$fields = $this->_acl->getVisibleFieldList();
if (!empty($fields)) {
foreach ($fields as $vColID => $vCol) {
$typeSpecial = Typespecial::getInstance($vColID);
if ($typeSpecial) {
$tsConnTbls = $typeSpecial->getTblAliasList();
if (!empty($tsConnTbls)) {
foreach ($tsConnTbls as $kID => $vName) {
$connTbls[$kID] = $vName;
}
}
}
}
}
return $connTbls;
}
private function getConnectedTblTypespecials($connTblID) {
$connTblTypespecials = array();
$fields = $this->_acl->getVisibleFieldList();
if (!empty($fields)) {
foreach ($fields as $vColID => $vCol) {
$typeSpecial = Typespecial::getInstance($vColID);
if ($typeSpecial) {
$tsConnTbls = $typeSpecial->getTblAliasList();
if (array_key_exists($connTblID, $tsConnTbls)) {
$connTblTypespecials[] = $typeSpecial;
}
}
}
}
return $connTblTypespecials;
}
private function sendAjaxFiles($id, $args) {
header("Content-type: text/plain");
$DBG = ('1' == V::get('DBG', '', $_REQUEST));
$dbID = $this->_acl->getDB();
$db = DB::getDB($dbID);
if (!$db) {
header('HTTP/1.0 406 Not Acceptable');
exit;
}
$record = $this->_acl->getItem($id);
if (!$record) {
header('HTTP/1.0 404 Not Found');
echo "404: No item ID({$rowID})";
exit;
}
if (!$this->_acl->canWriteRecord($record) && !$this->_acl->hasPermSuperWrite()) {
echo '$folderConf (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($folderConf);echo'';
$uploader = new FileUploader($confTblName, $record);
$errMsg = '';
if (!$uploader->setConfig($folderConf, $errMsg)) {
header('HTTP/1.0 404 Not Found');
echo "Błąd danych konfiguracyjnych ({$tblName})";
echo 'uploader (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($uploader);echo''; } $mainFolder = $uploader->getDestFolder(); if($DBG){ echo'
mainFolder (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($mainFolder);echo''; } $files = $uploader->getFilesFromFolder($mainFolder, false, true); if($DBG){ echo'
files (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($files);echo''; }
$sharePoint = V::get('share_point', null, $folderConf);
if ($sharePoint) {
$sharePoint = FoldersConfig::getNfsOsPath() . "{$sharePoint}/{$mainFolder}";
}
$localPath = $uploader->getLocalPath();
$folderWeb = $uploader->getFolderWeb();
$jsonFiles = $this->convertFileListToJson($files, $folderWeb, $localPath, $mainFolder);
if($DBG){ echo'jsonFiles (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($jsonFiles);echo''; }
$folderSkanyConf = FoldersConfig::getAll('SCANS_COLUMN');
$skanyLocalPath = V::get('mount_point', null, $folderSkanyConf);
$skanySharePoint = V::get('share_point', null, $folderSkanyConf);
$skanyFolderWeb = V::get('www_share_point', null, $folderSkanyConf);
$skanyFiles = $uploader->getFilesFromSkany($folderSkanyConf, false);
sort($skanyFiles);
$fileTypes = FoldersConfig::getAll('m_dist_files_types');
$rowFunctionsOut = $this->_showRowFunctions($record->ID, array('files', 'cp'), true);
?>
_acl->getField($fldID);
if($DBG){echo'fld('.$fldID.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fld);echo'';}
if (!$fld) {
// 404
} else {
$fldName = $fld['name'];
}
$jsonData = array();
$typeSpecial = Typespecial::getInstance($fldID, $fldName);
if ($typeSpecial) {
$query = V::get('q', '', $_REQUEST);
$rawRows = null;
$rows = $typeSpecial->getValuesWithExports($query);
if($DBG){echo'rows('.$query.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($rows);echo'';}
foreach ($rows as $kID => $vItem) {
$itemJson = new stdClass();
$itemJson->id = $vItem->id;
$itemJson->name = $vItem->param_out;
if (!empty($vItem->exports)) {
$itemJson->exports = $vItem->exports;
}
$jsonData[] = $itemJson;
}
}
/*
MENU_INIT:VIEWTABLE_AJAX
ZASOB_ID:1188
_task:TYPESPECIAL
fldID:3866
Form Dataview sourceview URL encoded
q:te
*/
echo json_encode($jsonData);
exit;
}
private function sendTypeSpecialCell($id, $fldName, $args) {
$DBG = ('1' == V::get('DBG', '', $_REQUEST));
header("Content-type: application/json");
$jsonData = new stdClass();
$fldID = $this->_acl->getFieldIdByName($fldName);
if($DBG){echo'fld('.$fldName.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fldID);echo'';}
$item = $this->_acl->getItem($id);
if (!$this->_acl->isAllowed($fldID, 'R', $item)) {
$jsonData->msg = 'Brak dostępu';
echo json_encode($jsonData);
exit;
}
if (!$fldID) {
$jsonData->msg = 'Wrong field';
echo json_encode($jsonData);
exit;
}
$typeSpecial = Typespecial::getInstance($fldID, $fldName);
if ($typeSpecial) {
$jsonData->data = $typeSpecial->getReturnData($this->_zasobID, $id, $fldName, '');
if($DBG){echo'specialValuesByIds('.$id.'/'.$fldName.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($specialValuesByIds);echo'';}
}
echo json_encode($jsonData);
exit;
}
private function ajaxData($args) {
$DBG = ('1' == V::get('DBG', '', $_REQUEST));
$pageSize = V::get('pageSize', 10, $args, 'int');
$page = V::get('page', 0, $args, 'int');
$currSortCol = V::get('currSortCol', '', $args);
$currSortFlip = V::get('currSortFlip', '', $args);
if ($page > 0) {
$page -= 1;
}
else {
}
$params = array();
$params['limit'] = $pageSize;
$params['limitstart'] = $page * $params['limit'];
$params['order_by'] = ($currSortCol)? $currSortCol : '';
$params['order_dir'] = $currSortFlip;
$filters = new stdClass();
$filters->currSortCol = $currSortCol;
$filters->currSortFlip = $currSortFlip;
foreach ($args as $k => $v) {
if (strlen($k) > 3 && substr($k, 0, 2) == 'f_' && strlen($v) > 0) {// filter prefix
$params[$k] = $v;
$filters->{$k} = $v;
}
else if (strlen($k) > 4 && substr($k, 0, 3) == 'sf_' && strlen($v) > 0) {// special filter prefix
$params[$k] = $v;
$filters->{$k} = $v;
}
}
$this->setFilters($filters);
$vCols = $this->_acl->getVirtualFieldList();
if (!empty($vCols)) {
if($DBG){echo'vCols (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($vCols);echo'';}
}
$total = $this->_acl->getTotal($params);
if($DBG){echo'get_total (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($total);echo'';} $items = $this->_acl->getItems($params); 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 = $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'
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;
}
}
}
}
}
$visibleCols = $this->_acl->getVisibleFieldList();
if($DBG){echo'visibleCols (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($visibleCols);echo'';} $jsonData = new stdClass(); $jsonData->total = $total; $jsonData->cols = new stdClass(); $ind = 0; foreach ($visibleCols as $fieldID => $col) { $ind++; $columnConfig = (object)array('index'=>$ind); if ($col == 'ID') { $columnConfig->unique = true; } else if (in_array($col, array('A_STATUS','A_STATUS_CURRENT','A_SERVICES_STATUS_CURRENT'))) { $columnConfig->format = '
typeSpecial (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($typeSpecial);echo'';} $columnConfig->_tsRetId = $typeSpecial->getReturnId(); } // @see ajaxHiddenColsSave // $_SESSION['USER_PROFILE'][$this->_zasobID][fld_id] => boolean if (isset($_SESSION['USER_PROFILE'][$this->_zasobID])) { if (isset($_SESSION['USER_PROFILE'][$this->_zasobID][$fieldID])) { if ($_SESSION['USER_PROFILE'][$this->_zasobID][$fieldID] != 1) { $columnConfig->hidden = true; } } } $columnConfig->description = $this->_acl->getFieldOpis($fieldID); $jsonData->cols->{$col} = $columnConfig; } $jsonData->rows = array(); foreach ($items as $vItem) { // TODO: hide items without 'R' foreach ($visibleCols as $kID => $vCol) { // TODO: ID default 'R' if (!$this->_acl->isAllowed($kID, 'R', $vItem)) { $vItem->{$vCol} = '*****'; } // null => empty string if (!isset($vItem->{$vCol}) || (!$vItem->{$vCol} && $vItem->{$vCol} !== '0')) { if($DBG){echo'
isEmptyString['.$vCol.'] (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($vItem->{$vCol});echo'';}
$vItem->{$vCol} = '';
}
}
$jsonData->rows[] = $vItem;
}
return $jsonData;
}
private function fixEmptyValueFromUser($fieldID) {// TODO: moved to TableAcl->fixEmptyValueFromUser
$value = '';
$type = $this->_acl->getFieldTypeById($fieldID);
if ($type) {
if ($type['type'] == 'date') {
$value = $type['default'];
}
// fix bug when field is unique and is null allowed: change empty string to null
if ($type['null']) {
$value = 'NULL';
}
// fix bug when field is enum and is set to '0': for php '0' is empty
if (substr($type['type'], 0, 4) == 'enum') {// && $args["f{$fieldID}"] === '0') {
if (false !== strpos($type['type'], "''")) {
// enum('', '1','2')
$value = '';
} else if (false !== strpos($type['type'], "'0'")) {
// enum('0', '1','2')
$value = '0';
} else {
$value = $type['default'];
}
}
}
return $value;
}
/**
* set hidden cols in $_SESSION['USER_PROFILE'][$this->_zasobID];
* $_SESSION['USER_PROFILE'][$this->_zasobID][fld_id] => boolean
*/
private function ajaxHiddenColsSave($args) {
$response = new stdClass();
if (empty($args)) {
$response->type = 'info';
return $response;
}
UserProfile::load();
// clean up old, wrong values
if (array_key_exists("{$this->_tbl}_COLUMN", $_SESSION['USER_PROFILE'])) {
unset($_SESSION['USER_PROFILE']["{$this->_tbl}_COLUMN"]);
}
$colVis = array();
if (array_key_exists($this->_zasobID, $_SESSION['USER_PROFILE'])) {
$colVis = $_SESSION['USER_PROFILE'][$this->_zasobID];
}
$fields = $this->_acl->getFields();
foreach ($fields as $kFldId => $vFld) {
$vFldName = $vFld['name'];
if (isset($args[$vFldName])) {
if ($args[$vFldName] == 'SHOW') {
$colVis[$kFldId] = 1;
} else if ($args[$vFldName] == 'HIDE') {
$colVis[$kFldId] = 0;
}
}
}
$_SESSION['USER_PROFILE'][$this->_zasobID] = $colVis;
UserProfile::save();
$response->type = 'success';
return $response;
}
private function ajaxTheGeomSave($args) {
$primaryKeyField = $this->_acl->getPrimaryKeyField();
$primaryKey = V::get($primaryKeyField, 0, $args, 'int');
$polygon = V::get('polygon', 0, $args);
$geomFieldName = 'the_geom';
if ($primaryKey <= 0) {
throw new HttpException("Wrong param ID", 404);
}
// TODO: validate polygon - ex.: POLYGON((2072030.2315435 7234115.910678,2072029.4815435 7234093.660678,2072115.2315435 7234091.160678,2072115.4815435 7234113.660678,2072115.2315435 7234113.660678,2072094.2315435 7234113.910678,2072030.2315435 7234115.910678)))
$record = $this->_acl->getItem($primaryKey);
if (!$this->_acl->canWriteRecord($record) && !$this->_acl->hasPermSuperWrite()) {
throw new HttpException("Brak dostępu do rekordu", 403);
}
$theGeomFieldId = $this->_acl->getFieldIdByName($geomFieldName);
if (!$this->_acl->isAllowed($theGeomFieldId, 'W', $record)) {
throw new HttpException("Brak dostępu do zapisu dla pola {$geomFieldName}", 403);
}
$itemPatch = array();
$itemPatch[$geomFieldName] = "GeomFromText('{$polygon}')";
$itemPatch[$primaryKeyField] = $primaryKey;
$response = new stdClass();
try {
$affected = $this->_acl->updateItem($itemPatch);
if ($affected > 0) {
$response->type = 'success';
$response->msg = "Rekord zapisany pomyślnie";//"Record saved successfully";
} else if ($affected == 0) {
$response->type = 'info';
$response->msg = "Nie wprowadzono żadnych zmian";
}
$response->record = $this->_acl->getItem($primaryKey);
}
catch (Exception $e) {
$response->type = 'error';
$response->msg = $e->getMessage();
}
return $response;
}
private function sendAjaxResponseJson($method, $args) {
try {
$response = $this->{$method}($args);
}
catch (HttpException $e) {
$response = new stdClass();
$response->type = 'error';
$response->msg = $e->getMessage();
$response->errorCode = $e->getCode();
Http::sendHeaderByCode($e->getCode());
}
catch (Exception $e) {
$response = new stdClass();
$response->type = 'error';
$response->msg = $e->getMessage();
$response->errorCode = $e->getCode();
}
header('Content-type: application/json');
if (!$response) $response = new stdClass();
echo json_encode($response);
exit;
}
private function ajaxTheGeomRemove($args) {// ajax task 'THE_GEOM_REMOVE'
$primaryKeyField = $this->_acl->getPrimaryKeyField();
$primaryKey = V::get($primaryKeyField, 0, $args, 'int');
$geomFieldName = 'the_geom';
$response = new stdClass();
if ($primaryKey <= 0) {
throw new HttpException("Wrong param ID", 404);
}
$record = $this->_acl->getItem($primaryKey);
if (!$record) {
throw new HttpException("Nie odnaleziono rekordu nr {$primaryKey}", 404);
}
if (!$this->_acl->canWriteRecord($record) && !$this->_acl->hasPermSuperWrite()) {
throw new HttpException("Brak dostępu do rekordu nr {$primaryKey}", 403);
}
$theGeomFieldId = $this->_acl->getFieldIdByName($geomFieldName);
if (!$this->_acl->isAllowed($theGeomFieldId, 'W', $record)) {
throw new HttpException("Brak dostępu do zapisu dla pola {$geomFieldName}", 403);
}
if (empty($record->{$geomFieldName})) {
$response->type = 'info';
$response->msg = "Rekord nie jest powiązany z żadnym obiektem na mapie";
$response->record = $record;
return $response;
}
$itemPatch = array();
$itemPatch[$geomFieldName] = "NULL";
$itemPatch[$primaryKeyField] = $primaryKey;
$response = new stdClass();
try {
$affected = $this->_acl->updateItem($itemPatch);
if ($affected > 0) {
$response->type = 'success';
$response->msg = "Rekord zapisany pomyślnie";//"Record saved successfully";
} else if ($affected == 0) {
$response->type = 'info';
$response->msg = "Nie wprowadzono żadnych zmian";
}
$response->record = $this->_acl->getItem($primaryKey);
}
catch (Exception $e) {
$response->type = 'error';
$response->msg = $e->getMessage();
}
return $response;
}
}