_tbl = $tblAcl->getName(); $this->_acl = $tblAcl; $this->_zasobID = $tblAcl->getID(); $this->_dataSource = $tblAcl->getDataSource(); $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(); } $this->_geomFields = $this->_dataSource->getGeomFields(); } 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->getPermsProcesId(); } private function _fetchConnectedProcesInitList() { $pInitList = array();// [proces_init_id] => label (DESC) if (!$this->_showProcesInit) { return $pInitList; } $userAcl = User::getAcl(); $pInitListRaw = $userAcl->getProcesInitList($this->_zasobID); if (empty($pInitListRaw)) { return $pInitList; } $db = DB::getDB(); $sql = "select p.`ID`, p.`DESC` from `CRM_PROCES` as p where p.`ID` in(" . implode(",", array_values($pInitListRaw)) . ") and p.`TYPE`='PROCES_INIT' "; $res = $db->query($sql); while ($r = $db->fetch($res)) { $pInitList[$r->ID] = $r->DESC; } return $pInitList; } 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->_dataSource->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) { Lib::loadClass('TableAjaxMap'); $tblAjaxMap = new TableAjaxMap($this->_acl, 512, 300); } ob_start(); ?> printCSS(); ?> printJS(); ?>
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('TODO: save ID(' . $id . ') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($args);echo'';}
if($DBG){echo'acl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_acl);echo'';}
$dbID = $this->_acl->getDB();
$db = DB::getDB($dbID);
if (!$db) {
header('HTTP/1.0 406 Not Acceptable');
exit;
}
$tblName = $this->_acl->getName();
$fieldID = $this->_acl->getFieldIdByName($fieldName);
if (!$fieldID) {
header('HTTP/1.0 404 Not Found');
echo "404: No field by name ({$fieldName})";
exit;
}
$record = $this->_dataSource->getItem($recordId);
if (!$record) {
header('HTTP/1.0 404 Not Found');
echo "404: No item ID({$recordId})";
exit;
}
if (!$this->_acl->isAllowed($fieldID, 'W', $record)) {
header('HTTP/1.0 403 Forbidden');
echo "403: field not allowed to Write ({$fieldName})";
exit;
} else {
if ($DBG) echo " Write allowed\n";
}
$sqlObj = new stdClass();
if (array_key_exists("f{$fieldID}", $args)) {
if (!$this->_acl->isAllowed($fieldID, 'R', $record) && '*****' == $args["f{$fieldID}"]) {
// default value for perms 'W' without 'R' is '*****'
}
else {
$sqlObj->{$fieldName} = $args["f{$fieldID}"];
if (empty($args["f{$fieldID}"]) && strlen($args["f{$fieldID}"]) == 0) {// fix bug in input type date and value="0000-00-00"
$sqlObj->{$fieldName} = $this->_acl->fixEmptyValueFromUser($fieldID);
}
}
}
else {
if ($DBG) echo " TODO: field value not set\n";
}
$sqlObj->ID = $recordId;
if($DBG){echo'E('.$tblName.') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo'';}
$ret = $db->UPDATE_OBJ($tblName, $sqlObj);
if ($ret > 0) {
echo 'db errors: (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($db->get_errors());echo'';
}
echo 'fieldsList (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fieldsList);echo'';} if (!empty($fieldsList)) { Lib::loadClass('Typespecial'); 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);
Lib::loadClass('SE_Layout');
?>
acl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_acl);echo'';}
$dbID = $this->_acl->getDB();
$db = DB::getDB($dbID);
if (!$db) {
header('HTTP/1.0 406 Not Acceptable');
exit;
}
$tblName = $this->_acl->getName();
$record = $db->get_by_id($tblName, $id);
if (!$this->_acl->canWriteRecord($record) && !$this->_acl->hasPermSuperWrite()) {
echo 'fields (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fields);echo'';}
foreach ($fields as $kID => $vField) {
if (!$this->_acl->isAllowed($kID, 'W', $record)) {
continue;
}
if (array_key_exists("f{$kID}", $args)) {
if (!$this->_acl->isAllowed($kID, 'R', $record) && '*****' == $args["f{$kID}"]) {
// default value for perms 'W' without 'R' is '*****'
}
else {
$value = $args["f{$kID}"];
if (empty($args["f{$kID}"]) && strlen($args["f{$kID}"]) == 0) {// fix bug in input type date and value="0000-00-00"
$value = $this->_acl->fixEmptyValueFromUser($kID);
}
if ($record->{$vField['name']} != $value) {
$sqlObj->{$vField['name']} = $value;
}
}
}
}
$sqlObj->ID = $id;
if($DBG){echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo'';}
$ret = $db->UPDATE_OBJ($tblName, $sqlObj);
if ($ret > 0) {
echo 'acl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_acl);echo'';}
$sqlObj = new stdClass();
$fields = $this->_acl->getFields();
if($DBG){echo'fields (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fields);echo'';}
foreach ($fields as $kID => $vField) {
if (!$this->_acl->isAllowed($kID, 'C')) {
continue;
}
if (array_key_exists("f{$kID}", $args)) {
$sqlObj->{$vField['name']} = $args["f{$kID}"];
if (empty($args["f{$kID}"]) && strlen($args["f{$kID}"]) == 0) {// fix bug in input type date and value="0000-00-00"
$sqlObj->{$vField['name']} = $this->_acl->fixEmptyValueFromUser($kID);
}
}
}
if($DBG){echo' (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo'';}
{// add DefaultAclGroup if no create perms ('C')
$defaultAclGroup = User::getDefaultAclGroup();
if ($defaultAclGroup) {
foreach ($fields as $kID => $vField) {
if (!$this->_acl->isAllowed($kID, 'C')) {
if ($vField['name'] == 'A_ADM_COMPANY') {
$sqlObj->{$vField['name']} = $defaultAclGroup;
}
else if ($vField['name'] == 'A_CLASSIFIED') {
$sqlObj->{$vField['name']} = $defaultAclGroup;
}
}
}
}
}
$retID = $this->_dataSource->addItem($sqlObj);
$response = new stdClass();
$response->type = '';
$response->msg = '';
if ($retID > 0) {
$response->type = 'success';
$response->msg = "Utworzono pomyślnie rekord nr {$retID}";
$response->id = $retID;
$response->record = $this->_dataSource->getItem($retID);
} else {
$response->type = 'error';
$response->msg = "Wystąpiły błędy!";
$response->errors = $this->_dataSource->getDbErrors();
}
return $response;
}
private function ajaxCopy($args) {
$id = V::get('ID', 0, $_REQUEST, 'int');
if ($id <= 0) {
throw new HttpException("Wrong param ID!", 404);
}
$row = $this->_dataSource->getItem($id);
if (!$row) {
throw new HttpException("Item '{$id}' not exists!", 404);
}
$types = $this->_acl->getTypes();
$uniqKeys = $this->_acl->getUniqueKeys();
$sqlObj = new stdClass();
foreach ($types as $kName => $vType) {
if ($kName == 'ID') {
continue;
} else if (in_array($kName, array('A_RECORD_UPDATE_AUTHOR','A_RECORD_UPDATE_DATE'))) {
continue;
}
$value = V::get($kName, '', $row);
if (in_array($kName, $uniqKeys)) {
$value .= '?';
}
if ($this->_dataSource->isGeomField($kName)) {
$value = "GeomFromText('{$value}')";
}
$sqlObj->{$kName} = $value;
}
$retID = $this->_dataSource->addItem($sqlObj);
$response = new stdClass();
$response->type = '';
$response->msg = '';
if ($retID > 0) {
$response->type = 'success';
$response->msg = "Rekord skopiowany pomyślnie - utworzono rekord nr {$retID}";
$response->id = $retID;
$response->record = $this->_dataSource->getItem($retID);
} else {
$response->type = 'error';
$response->msg = "Wystąpiły błędy!";
$response->errors = $this->_dataSource->getDbErrors();
}
return $response;
}
private function sendAjaxHistory($id, $args) {
header("Content-type: text/plain");
$record = $this->_dataSource->getItem($id);
if (!$record) {
header('HTTP/1.0 404 Not Found');
echo "404: No item ID({$rowID})";
exit;
}
$visibleCols = $this->_acl->getRealFieldList();
$rowsHist = $this->_dataSource->getHistItems($id);
$rowFunctionsOut = $this->_showRowFunctions($record->ID, array('hist', 'cp'), true);
$visibleColsWithIds = array();
$visibleColsLabels = array();
foreach ($visibleCols as $vColName) {
$fldId = $this->_acl->getFieldIdByName($vColName);
if ($fldId) {
$visibleColsWithIds[$fldId] = $vColName;
$label = $this->_acl->getFieldLabel($fldId);
$label = (!$label)? $vColName : '' . $label . '';
$visibleColsLabels[$fldId] = $label;
}
}
?>
| 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";
Lib::loadClass('FoldersConfig');
$folderConfAll = FoldersConfig::getRawData();
if (!FoldersConfig::hasConfig($confTblName)) {
throw new Exception("Brak danych konfiguracyjnych ({$tblName})", 404);
}
$folderConf = FoldersConfig::getAll($confTblName);
Lib::loadClass('FileUploader');
$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->_dataSource->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";
Lib::loadClass('FoldersConfig');
$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);
Lib::loadClass('FileUploader');
$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)) {
Lib::loadClass('Typespecial');
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)) {
Lib::loadClass('Typespecial');
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->_dataSource->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'';
Lib::loadClass('FileUploader');
$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();
Lib::loadClass('Typespecial');
$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->_dataSource->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;
}
Lib::loadClass('Typespecial');
$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);
if($DBG){echo'_dataSource (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_dataSource);echo'';}
$vCols = $this->_acl->getVirtualFieldList();
if (!empty($vCols)) {
if($DBG){echo'vCols (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($vCols);echo'';}
}
Lib::loadClass('Typespecial');
$total = $this->_dataSource->getTotal($params);
if($DBG){echo'get_total (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($total);echo'';} $items = $this->_dataSource->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;
}
//echo'this->_dataSource (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_dataSource);echo''; //echo'
jsonData (F.' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($jsonData);echo''; 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; } Lib::loadClass('UserProfile'); 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) { $id = V::get('ID', 0, $args, 'int'); $polygon = V::get('polygon', 0, $args); $geomFieldName = 'the_geom'; if ($id <= 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->_dataSource->getItem($id); 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 = new stdClass(); $itemPatch->{$geomFieldName} = "GeomFromText('{$polygon}')"; $itemPatch->ID = $id; $affected = $this->_dataSource->updateItem($itemPatch); $response = new stdClass(); 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"; } else { $response->type = 'error'; $response->msg = "Wystąpiły błędy!"; $response->errors = $this->_dataSource->getDbErrors(); } $response->record = $this->_dataSource->getItem($id); 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' $id = V::get('ID', 0, $args, 'int'); $geomFieldName = 'the_geom'; $response = new stdClass(); if ($id <= 0) { throw new HttpException("Wrong param ID", 404); } $tblName = $this->_acl->getName(); $record = $this->_dataSource->getItem($id); if (!$record) { throw new HttpException("Nie odnaleziono rekordu nr {$id}", 404); } if (!$this->_acl->canWriteRecord($record) && !$this->_acl->hasPermSuperWrite()) { throw new HttpException("Brak dostępu do rekordu nr {$id}", 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 = new stdClass(); $itemPatch->{$geomFieldName} = "NULL"; $itemPatch->ID = $id; $affected = $this->_dataSource->updateItem($itemPatch); $response = new stdClass(); 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"; } else { $response->type = 'error'; $response->msg = "Wystąpiły błędy!"; $response->errors = $this->_dataSource->getDbErrors(); } $response->record = $this->_dataSource->getItem($id); return $response; } }