_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(); ?>
_filterInit; $forceFilterInit = $this->_forceFilterInit; $pageSizes = $this->_pageSizes; $rowFunctions = $this->_showRowFunctionsJson(); $exportFields = $this->_showExportFieldsJson(); ?> 0) { $this->sendAjaxEdit($id, $_REQUEST); } else { echo '404'; } break; } case 'EDIT_SAVE': { $id = V::get('ID', 0, $_REQUEST, 'int'); if ($id > 0) { $this->sendAjaxEditSave($id, $_REQUEST); } else { echo '404'; } break; } case 'EDIT_INLINE': { $id = V::get('ID', 0, $_REQUEST, 'int'); $col = V::get('col', '', $_REQUEST); if ($id > 0 && !empty($col)) { $this->sendAjaxEditInline($id, $col, $_REQUEST); } else { echo '404'; } break; } case 'EDIT_INLINE_SAVE': { $id = V::get('ID', 0, $_REQUEST, 'int'); $col = V::get('col', '', $_REQUEST); if ($id > 0 && !empty($col)) { $this->sendAjaxEditInlineSave($id, $col, $_REQUEST); } else { echo '404'; } break; } case 'COPY': { $this->sendAjaxResponseJson('ajaxCopy', $_REQUEST); break; } case 'CREATE': { $this->sendAjaxCreate($_REQUEST); break; } case 'CREATE_SAVE': { $this->sendAjaxResponseJson('ajaxCreateSave', $_REQUEST); break; } case 'HIST': { $id = V::get('ID', 0, $_REQUEST, 'int'); if ($id > 0) { $this->sendAjaxHistory($id, $_REQUEST); } else { echo '404'; } break; } case 'FILES': { $id = V::get('ID', 0, $_REQUEST, 'int'); if ($id > 0) { $this->sendAjaxFiles($id, $_REQUEST); } else { echo '404'; } break; } case 'FILES_UPLOAD': { $id = V::get('ID', 0, $_REQUEST, 'int'); if ($id > 0) { $this->sendAjaxFilesUpload($id, $_REQUEST); } else { echo '404'; } break; } case 'FILES_LIST': { $id = V::get('ID', 0, $_REQUEST, 'int'); if ($id > 0) { $this->sendAjaxFilesList($id, $_REQUEST); } else { echo '404'; } break; } case 'FILE_REMOVE': { $id = V::get('ID', 0, $_REQUEST, 'int'); if ($id > 0) { $this->sendAjaxFileRemove($id, $_REQUEST); } else { echo '404'; } break; } case 'filePermsRefresh': { $this->sendAjaxResponseJson('ajaxFilePermsRefresh', $_REQUEST); break; } case 'FILES_CONN_TBL_LIST': { $id = V::get('ID', 0, $_REQUEST, 'int'); if ($id > 0) { $this->sendAjaxFilesConnTblList($id, $_REQUEST); } else { echo '404'; } break; } case 'TYPESPECIAL': { $fldID = V::get('fldID', 0, $_REQUEST, 'int'); if ($fldID > 0) { $this->sendTypeSpecial($fldID, $_REQUEST); } else { echo '404'; } break; } case 'TYPESPECIALL_CELL': { $id = V::get('ID', 0, $_REQUEST, 'int'); $col = V::get('col', '', $_REQUEST); if ($id > 0 && !empty($col)) { $this->sendTypeSpecialCell($id, $col, $_REQUEST); } else { echo '404'; } break; } case 'HIDDEN_COLS_SAVE': { $this->sendAjaxResponseJson('ajaxHiddenColsSave', $_POST); break; } case 'THE_GEOM_SAVE': { $this->sendAjaxResponseJson('ajaxTheGeomSave', $_REQUEST); break; } case 'THE_GEOM_REMOVE': { $this->sendAjaxResponseJson('ajaxTheGeomRemove', $_REQUEST); break; } default: $this->sendAjaxResponseJson('ajaxData', $_REQUEST); } } /** * ajax url: &_task=EDIT_INLINE * @param $rowID - $_GET['ID'] * @param $fieldName - $_GET['col'] */ private function sendAjaxEditInline($rowID, $fieldName, $args) { $DBG = ('1' == V::get('DBG', '', $_REQUEST)); header("Content-type: text/plain"); $fieldID = $this->_acl->getFieldIdByName($fieldName); if (!$fieldID) { echo "404: No field by name ({$fieldName})"; exit; } if ($DBG) echo "fieldID: {$fieldID}\n"; $row = $this->_dataSource->getItem($rowID); if (!$row) { echo "404: No item ID({$rowID})"; exit; } if (!$this->_acl->isAllowed($fieldID, 'R', $row)) { if ($DBG) echo " R not allowed\n"; } else { if ($DBG) echo " R allowed\n"; } if (!$this->_acl->isAllowed($fieldID, 'W', $row)) { if ($DBG) echo " W not allowed\n"; } else { if ($DBG) echo " W allowed\n"; } $fieldVal = ''; if ($this->_acl->isAllowed($fieldID, 'R', $row)) { $fieldVal = V::get($fieldName, $fieldVal, $row); } else { $fieldVal = '*****'; } $fieldVal = V::get("f{$fieldID}", $fieldVal, $_POST); $vCol = $this->_acl->getField($fieldID); $vCol['label'] = (!empty($vCol['label']))? $vCol['label'] : $vCol['name']; $tsValues = array(); Lib::loadClass('Typespecial'); $typeSpecial = Typespecial::getInstance($fieldID, $vCol['name']); if ($typeSpecial) { if($DBG){echo'
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('
', $specialValues); } } Lib::loadClass('SE_Layout'); ?> 'inside-modal', 'maxGrid'=>6); if (!empty($tsValues[$row->ID])) { $fieldParams['typespecialValue'] = $tsValues[$row->ID]; } $vDefault = $this->_dataSource->getColDefault($fieldName); if (!empty($vDefault)) { $fieldParams['default'] = $vDefault; } echo $this->_acl->showFormItem('W', $fieldID, "f{$fieldID}", $fieldVal, $fieldParams, $row); if ($typeSpecial) { echo '

'; } exit; } private function sendAjaxEditInlineSave($recordId, $fieldName, $args) { $DBG = ('1' == V::get('DBG', '', $_REQUEST)); sleep(1);// TODO: RMME DBG loading if($DBG){echo'
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 '
'; echo "Rekord zapisany pomyślnie";//"Record saved successfully"; echo '
'; } else if ($ret == 0) { echo '
'; echo "Nie wprowadzono żadnych zmian"; if ($db->has_errors()) { //echo'
db errors: (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($db->get_errors());echo'
'; } echo '
'; } else { echo '
'; echo '

' . "Wystąpiły błędy!" . '

'; if ($db->has_errors()) { $errors = $db->get_errors(); echo implode('
', $errors); } echo '
'; } exit; } private function sendAjaxEdit($id, $args) { header("Content-type: text/plain"); $DBG = ('1' == V::get('DBG', '', $_REQUEST)); $cols = array(); $record = $this->_dataSource->getItem($id); if (!$this->_acl->canWriteRecord($record) && !$this->_acl->hasPermSuperWrite()) { echo '
'; echo "Brak dostępu do rekordu";// TODO: more info - reason echo '
'; return; } $fieldsList = $this->_acl->getFields(); foreach ($fieldsList as $kID => $vCol) { if ($vCol['name'] == 'ID') { unset($fieldsList[$kID]); continue; } $cols[$kID] = ''; if ($this->_acl->isAllowed($kID, 'R', $record)) { $cols[$kID] = V::get($vCol['name'], '', $record); } else { $cols[$kID] = '*****'; } $cols[$kID] = V::get("f{$kID}", $cols[$kID], $_POST); $fieldsList[$kID]['label'] = (!empty($vCol['label']))? $vCol['label'] : str_replace('_', ' ', $vCol['name']); } $tsValues = array(); if($DBG){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('
', $specialValues); } } } } if($DBG){echo'
tsValues (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($tsValues);echo'
';} $rowFunctionsOut = $this->_showRowFunctions($record->ID, array('edit', 'cp'), true); Lib::loadClass('SE_Layout'); ?>
Edycja rekordu Nr ID; ?> $vCol) : ?> _acl->isAllowed($kID, 'W', $record)) : ?>
true, 'tabindex'=>(++$tabindex), 'maxGrid'=>8); if (!empty($tsValues[$kID])) { $fieldParams['typespecialValue'] = $tsValues[$kID]; } echo $this->_acl->showFormItem('W', $kID, "f{$kID}", $cols[$kID], $fieldParams, $record); ?>
_acl->isAllowed($kID, 'R', $record)) : ?>

_acl->showFormItem('R', $kID, "f{$kID}", $cols[$kID], array('appendBack'=>true), $record); if (!empty($tsValues[$kID])) { echo $tsValues[$kID]; } else if (!empty($record->{$vCol['name']})) { echo $record->{$vCol['name']}; } ?>

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(); $record = $db->get_by_id($tblName, $id); if (!$this->_acl->canWriteRecord($record) && !$this->_acl->hasPermSuperWrite()) { echo '
'; echo "Brak dostępu do rekordu";// TODO: more info - reason 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, '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 '
'; echo "Rekord zapisany pomyślnie";//"Record saved successfully"; echo '
'; } else if ($ret == 0) { echo '
'; echo "Nie wprowadzono żadnych zmian"; echo '
'; } else { header('HTTP/1.0 404 Not Found'); echo '
'; echo '

' . "Wystąpiły błędy!" . '

'; if ($db->has_errors()) { $errors = $db->get_errors(); echo implode('
', $errors); } echo '
'; } exit; } private function sendAjaxCreate($args) { header("Content-type: text/plain"); $DBG = ('1' == V::get('DBG', '', $_REQUEST)); $cols = array(); $forceFilterInit = array(); $defaultAclGroup = User::getDefaultAclGroup(); if ($defaultAclGroup) { $forceFilterInit['A_ADM_COMPANY'] = $defaultAclGroup; $forceFilterInit['A_CLASSIFIED'] = $defaultAclGroup; } foreach ($_GET as $k => $v) { if (strlen($k) > 4 && substr($k, 0, 3) == 'ff_' && !empty($v)) {// force filter prefix $fldName = substr($k, 3); $forceFilterInit[$fldName] = $v; } } $fieldsList = $this->_acl->getFields(); foreach ($fieldsList as $kID => $vCol) { $defaultValue = ''; if ($vCol['name'] == 'ID') { unset($fieldsList[$kID]); continue; } if (!empty($forceFilterInit[$vCol['name']])) { $defaultValue = $forceFilterInit[$vCol['name']]; } // TODO: read from session cache $cols[$kID] = V::get("f{$kID}", $defaultValue, $_POST); $fieldsList[$kID]['label'] = (!empty($vCol['label']))? $vCol['label'] : $vCol['name']; } Lib::loadClass('SE_Layout'); ?>
Dodaj nowy rekord $vCol) : ?> _acl->isAllowed($kID, 'C')) : ?>
true, 'tabindex'=>(++$tabindex), 'maxGrid'=>8); echo $this->_acl->showFormItem('C', $kID, "f{$kID}", $cols[$kID], $fieldParams); ?>
TODO: save ID(' . $id . ') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($args);echo'';} if($DBG){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; } } ?>
Historia rekordu Nr

Brak danych

Data User Zmiany
_created; ?> _author; ?> $colName) : ?> $colName == 'N/S;') continue; ?>

: _acl->isAllowed($fldId, 'R', $record)) : ?> $colName; ?> *****

$colName) : ?> $colName) : ?>
$colName == 'N/S;') : ?> N/S; _acl->isAllowed($fldId, 'R', $record)) : ?> $colName; ?> *****
_acl->getDB(); $db = DB::getDB($dbID); if (!$db) { header('HTTP/1.0 406 Not Acceptable'); echo '{"type":"ERROR", "string": "No DB (' . $dbID . ')"}'; exit; } $record = $this->_dataSource->getItem($id); if (!$record) { header('HTTP/1.0 404 Not Found'); echo '{"type":"ERROR", "string": "No item ID(' . $rowID . ')"}'; 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); $errMsg = ''; if (!$uploader->setConfig($folderConf, $errMsg)) { header('HTTP/1.0 404 Not Found'); echo '{"type":"ERROR", "string": "Błąd danych konfiguracyjnych(' . $tblName . ')
' . $errMsg . '"}'; exit; } $uploader->findFolder(); $errorMsg = ''; if (!empty($_POST['SCANS_COLUMN_ADD'])) { $uploaded = $uploader->tryMoveFromScanAjax($errorMsg); } else { $uploaded = $uploader->tryUploadAjax($errorMsg); } if ($uploaded) { $uploadedFileName = ''; $uploadedFile = $uploader->getLastUploadedFile(); if ($uploadedFile) { $uploadedFileName = explode('/', $uploadedFile); $uploadedFileName = end($uploadedFileName); } echo '{"type":"SUCCESS", "string": "Plik został poprawnie wgrany do odpowiedniego katalogu '.$uploadedFileName.'"}'; if (!empty($uploadedFileName)) { $sqlObj = new stdClass(); $sqlObj->ID = $record->ID; $sqlObj->M_DIST_FILES = "Wgrano plik {$uploadedFileName}"; $db->UPDATE_OBJ($this->_tbl, $sqlObj); } } else { echo '{"type":"ERROR", "string": "' . $errorMsg . '"}'; } exit; } private function sendAjaxFileRemove($id, $args) { header("Content-type: application/json"); $DBG = ('1' == V::get('DBG', '', $_REQUEST)); if (empty($_POST['filename'])) { echo '{"type":"ERROR", "string": "Nie wybrano pliku do usunięcia"}'; exit; } $dbID = $this->_acl->getDB(); $db = DB::getDB($dbID); if (!$db) { header('HTTP/1.0 406 Not Acceptable'); echo '{"type":"ERROR", "string": "No DB (' . $dbID . ')"}'; exit; } $record = $this->_dataSource->getItem($id); if (!$record) { header('HTTP/1.0 404 Not Found'); echo '{"type":"ERROR", "string": "No item ID(' . $rowID . ')"}'; 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(); $errorMsg = ''; $removed = $uploader->tryRemoveFromAjax($_POST['filename'], $errorMsg); if (!$removed) { echo '{"type":"ERROR", "string": "{' . $errorMsg . '}"}'; } else { echo '{"type":"SUCCESS","string":"Plik został poprawnie usunięty"}'; } exit; } private function sendAjaxFilesList($id, $args) { header("Content-type: application/json"); $dbID = $this->_acl->getDB(); $db = DB::getDB($dbID); if (!$db) { header('HTTP/1.0 406 Not Acceptable'); echo '{"type":"ERROR", "string": "No DB (' . $dbID . ')"}'; exit; } $record = $this->_dataSource->getItem($id); if (!$record) { header('HTTP/1.0 404 Not Found'); echo '{"type":"ERROR", "string": "No item ID(' . $rowID . ')"}'; 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; } private function ajaxFilePermsRefresh($args) { header("Content-type: application/json"); $id = V::get('ID', 0, $args, 'int'); if ($id <= 0) throw new HttpException("Wrong param ID", 404); $dbID = $this->_acl->getDB(); $db = DB::getDB($dbID); if (!$db) throw new HttpException("No DB", 406); $record = $this->_dataSource->getItem($id); if (!$record) throw new Exception("No item ID({$rowID})", 404); $tblName = $this->_acl->getName(); // TODO: SyncPermsCustomTables->getRecordTask($tbl, $id); $sql_L_APPOITMENT_USER = V::get('L_APPOITMENT_USER', '', $record); $sql_A_ADM_COMPANY = V::get('A_ADM_COMPANY', '', $record); $sql_A_CLASSIFIED = V::get('A_CLASSIFIED', '', $record); $mainDB = DB::getDB(); if ('IN7_MK_BAZA_DYSTRYBUCJI' == $tblName) { $sql = "insert into `_SYNC_FILE_PERMS` ( `ID_PROJECT`, `A_SYNCHRONIZED` ) values ( '{$record->ID}' , 0 ) ON DUPLICATE KEY UPDATE `A_SYNCHRONIZED`=0 "; } else if ('IN7_DZIENNIK_KORESP' == $tblName) { $sql = "insert into `_SYNC_FILE_PERMS` ( `ID_PROJECT`, `A_SYNCHRONIZED` ) values ( '{$record->ID_PROJECT}' , 0 ) ON DUPLICATE KEY UPDATE `A_SYNCHRONIZED`=0 "; } else { $sql = "insert into `_SYNC_TABLE_FILE_PERMS` ( `TBL_NAME`, `TBL_ID`, `L_APPOITMENT_USER`, `A_ADM_COMPANY`, `A_CLASSIFIED`, `A_SYNCHRONIZED` ) values ( '{$tblName}' , '{$id}' , '{$sql_L_APPOITMENT_USER}' , '{$sql_A_ADM_COMPANY}' , '{$sql_A_CLASSIFIED}' , 0 ) ON DUPLICATE KEY UPDATE `A_SYNCHRONIZED`=0 "; } $res = $mainDB->query($sql); if ($mainDB->has_errors()) { //echo'
 (' . __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 '
'; echo "Brak dostępu do rekordu";// TODO: more info - reason echo '
'; return; } $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 "Brak danych konfiguracyjnych"; exit; } $folderConf = FoldersConfig::getAll($confTblName); //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 '
' . "\n" . $errMsg; exit; } $uploader->findFolder(); if($DBG){ 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); ?>

Pliki w katalogu

Brak folderu!

Folder dla tego rekordu nie został utworzony.

Brak plików



1024 * 1024) { $vFileSizeOut = round(($vFileSize / (1024 * 1024)), 2) . "M"; } else if ($vFileSize > 1024) { $vFileSizeOut = round(($vFileSize / 1024), 0) . "K"; } ?>

Ustal nazwę pliku zgodną z obiegiem dokumentów ?>

ID TYP Opis Data Wersji Numer Wersji
ID; ?>



wybrany plik do folderu:

getDestPathShare(true); ?>
(Jeśli folder nie istnieje to zostanie utworzony automatycznie)

_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('
', $vValues); if($DBG){echo'
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 = '
{0}
'; } else if (in_array($col, array('Status'))) { // Ahmes problems Status colors $columnConfig->format = '
{0}
'; } else if ($this->_dataSource->isGeomField($col)) { $columnConfig->type = 'geom'; } if ('' !== ($label = $this->_acl->getFieldLabel($fieldID))) { $columnConfig->friendly = $label; } $colType = $this->_acl->getFieldType($col); if ($colType) {// @see MarkTableAjaxFilterColType if ($colType['type'] == 'date') { //$columnConfig->type = 'date';// TODO: require datetimepicker } } else {// typespecial - no type $columnConfig->type = 'special'; } $typeSpecial = Typespecial::getInstance($fieldID, $col); if ($typeSpecial) { if($DBG){echo'
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; } }