瀏覽代碼

Merge branch 'master' of biuro.biall-net.pl:plabudda/se

Mariusz Muszyński 9 年之前
父節點
當前提交
acf198831d

+ 1 - 1
SE/schema/gui/company/biuro_biall_net_pl/default_db.in7_mk_baza_dystrybucji.php

@@ -1,5 +1,5 @@
 <?php
 
-class Schema__biuro_biall_net_pl__default_db__in7_mk_baza_dystrybucji extends Schema_TableBase {
+class Schema__biuro_biall_net_pl__default_db__in7_mk_baza_dystrybucji extends Schema__Core__default_db__in7_mk_baza_dystrybucji {
 
 }

+ 0 - 5
SE/schema/gui/company/biuro_pro_netmedia_pl/default_db.in7_mk_baza_dystrybucji.php

@@ -1,5 +0,0 @@
-<?php
-
-class Schema__biuro_pro_netmedia_pl__default_db__in7_mk_baza_dystrybucji extends Schema_TableBase {
-
-}

+ 32 - 0
SE/schema/gui/core/default_db.in7_mk_baza_dystrybucji.php

@@ -2,4 +2,36 @@
 
 class Schema__Core__default_db__in7_mk_baza_dystrybucji extends Schema_TableBase {
 
+  public function initTypes() {
+    parent::initTypes();
+    $this->_types['LINK_PROBLEMS'] = 'p5:typeSpecialSimpleLink';
+    $this->_params['LINK_PROBLEMS'] = [
+      'format' => '<a href="index.php?_route=ViewTableAjax&namespace=default_db/PROBLEMS&ff_ID_PROJECT={ID}">Zadania: {TASKS_INFO_trigger}</a><br><a href="index.php?_route=ViewTableAjax&namespace=default_db/IN7_DZIENNIK_KORESP&ff_ID_PROJECT={ID}">Pisma: {IN7_DZIENNIK_KORESP_INFO_trigger}</a>',
+      'aliasMap' => [
+        'IN7_DZIENNIK_KORESP_INFO_trigger' => 'IN7_DZIENNIK_KORESP_INFO_trigger',
+        'TASKS_INFO_trigger' => 'TASKS_INFO_trigger',
+        'ID' => 'ID'
+      ]
+    ];
+    // field 'LINK_PROBLEMS' depends on fields: TASKS_INFO_trigger, IN7_DZIENNIK_KORESP_INFO_trigger -- user need access to this fields
+
+    // TODO: move generate value for field with xsd type `p5:typeSpecialSimpleLink` function from frontend to backend
+    // field LINK_PROBLEMS was evaluated on front end by definied Typespecial
+  }
+
+  public function getPrimaryKeyField() {
+		return 'ID';
+	}
+
+  public function fixFieldValue($fieldName, /* array */ $item) {// TODO: generate value for special fields on backend (need outputFormat? xml, html, etc.)
+    switch ($fieldName) {
+      case 'LINK_PROBLEMS': {
+        // <a href="index.php?_route=ViewTableAjax&namespace=default_db/PROBLEMS&ff_ID_PROJECT={ID}">Zadania: {TASKS_INFO_trigger}</a>
+        // <br><a href="index.php?_route=ViewTableAjax&namespace=default_db/IN7_DZIENNIK_KORESP&ff_ID_PROJECT={ID}">Pisma: {IN7_DZIENNIK_KORESP_INFO_trigger}</a>
+        return $value;
+      } break;
+      default: return $value;
+    }
+  }
+
 }

+ 1 - 1
SE/se-lib/Api/WfsGeomTypeConverter.php

@@ -84,7 +84,7 @@ class Api_WfsGeomTypeConverter {
 		 *
 		 * Point:
 			<gml:Point xmlns:gml="http://www.opengis.net/gml" srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
-				<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs=" " ts=",">100,200</gml:coordinates>
+				<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs=" " ts=",">100 200</gml:coordinates>
 			</gml:Point>
 		 *
 		 */

+ 5 - 3
SE/se-lib/Api/WfsLogger.php

@@ -1,5 +1,7 @@
 <?php
 
+Lib::loadClass('Request');
+
 class Api_WfsLogger {
 
 	protected $_reqId;
@@ -17,9 +19,9 @@ class Api_WfsLogger {
 	}
 
 	public function reqDBG($request) {
-		$reqLog = "{$_SERVER['REQUEST_METHOD']} {$_SERVER['REQUEST_URI']}";
-		if ($_SERVER['REQUEST_METHOD'] == 'POST') $reqLog .= "\n------------ POST:\n" . Request::getRequestBody();
-		if (!empty($request)) $reqLog .= "\n------------ request: " . json_encode($request);
+		$reqLog = "{$_SERVER['REQUEST_METHOD']} " . Request::getHostUri() . "{$_SERVER['REQUEST_URI']}";
+		if ($_SERVER['REQUEST_METHOD'] == 'POST') $reqLog .= "\n------------ POST:\n" . substr(Request::getRequestBody(), 0, 1000);
+		// if (!empty($request)) $reqLog .= "\n------------ request: " . substr(json_encode($request), 0, 1000);
 		$this->DBG($reqLog);
 	}
 

+ 1 - 1
SE/se-lib/Api/WfsNs.php

@@ -23,7 +23,7 @@ class Api_WfsNs {
     if (!$nsUri) {
       if ('p5_default_db' == $nsPrefix) return V::get('default_db', null, $nsMap);
       if ('default_objects' == $nsPrefix) return V::get('p5_objects', null, $nsMap);
-      if ('default_db__x3A__' == substr($nsPrefix, 0, 17)) return $nsMap['p5_default_db'] . "/" . substr($nsPrefix, 17);
+      if ('default_db__x3A__' == substr($nsPrefix, 0, 17)) return $nsMap['default_db'] . "/" . substr($nsPrefix, 17);
     }
     return $nsUri;
   }

+ 27 - 14
SE/se-lib/Api/WfsServerBase.php

@@ -32,14 +32,10 @@ class Api_WfsServerBase {
 	*/
 	public function getAclFromTypeName($typeName) {
 		$typeEx = explode(':', $typeName);
-		$sourceName = null;
-		if (2 != count($typeEx)) throw new Api_WfsException("Could not get acl for '{$typeName}' - syntax error");
-		if ('p5_' == substr($typeEx[0], 0, 3)) $sourceName = substr($typeEx[0], 3);
-		else if ('default_db__x3A__' == substr($typeEx[0], 0, 17)) $sourceName = 'default_db';
-		else if ('default_objects' == $typeEx[0]) $sourceName = 'default_objects';
-		else if ('default_db' == $typeEx[0]) $sourceName = 'default_db';
-		if (!$sourceName) throw new Api_WfsException("Type not found '{$typeName}'", 404);
+		$sourceName = $typeEx[0];
 		$objName = $typeEx[1];
+		if (2 != count($typeEx)) throw new Api_WfsException("Could not get acl for '{$typeName}' - syntax error");
+		if ('p5_' == substr($sourceName, 0, 3)) $sourceName = substr($sourceName, 3);// remove prefix 'p5_'
 		$acl = $this->_usrAcl->getObjectAcl($sourceName, $objName);
 		if (!$acl) throw new Api_WfsException("Could not get acl for '{$typeName}'");
 		$forceTblAclInit = 0;//('1' == V::get('_force', '', $_GET));
@@ -112,12 +108,22 @@ class Api_WfsServerBase {
 		$args['bbox'] = V::get('bbox', '', $lowerArgs);
 		if (!empty($args['bbox'])) {
 			// BBOX may have EPSG at then end - example: ",EPSG:4326"
-			if (!preg_match("/^\d+(.\d+)?,\d+(.\d+)?,\d+(.\d+)?,\d+(.\d+)?(\,EPSG:\d+)?$/", $args['bbox'], $matches)) throw new Exception("Wrong param BBOX");
-			if (preg_match("/\,EPSG:\d+$/", $args['bbox'], $matches)) {
-				$args['bbox'] = substr($args['bbox'], 0, strlen($args['bbox']) - strlen($matches[0]));
-			}
-			if (!preg_match("/^\d+(.\d+)?,\d+(.\d+)?,\d+(.\d+)?,\d+(.\d+)?$/", $args['bbox'], $matches)) throw new Exception("Illegal BBOX format");
-			$searchParams['f_the_geom'] = "BBOX:{$args['bbox']}";
+			$num = "\d+.?\d*?";// "\d+(.\d+)?"
+			if (!preg_match("/^({$num}),({$num}),({$num}),({$num})(\,EPSG:\d+)?$/", $args['bbox'], $matches)) throw new Exception("Illegal BBOX format");
+			// QGIS may send BBOX in wrong order: 54.23580872176457,18.46844302390853,54.25220902538883,18.492990600812696
+			// first number should be smaller then second
+			// example $matches:
+			//     [0] => 18.492990600812696,54.23580872176457,18.46844302390853,54.25220902538883
+			//     [1] => 18.492990600812696
+			//     [2] => 54.23580872176457
+			//     [3] => 18.46844302390853
+			//     [4] => 54.25220902538883
+			// (optional) EPGS
+			$bboxPoints = ($matches[1] > $matches[2])
+				? [ $matches[2], $matches[3], $matches[4], $matches[1] ]
+				: [ $matches[1], $matches[2], $matches[3], $matches[4] ];
+
+			$searchParams['f_the_geom'] = "BBOX:" . implode(",", $bboxPoints);
 		}
 
 		$args['wfs:featureID'] = V::get('featureid', null, $lowerArgs);// TODO: allow multiply feature id (csv)
@@ -772,6 +778,12 @@ class Api_WfsServerBase {
 			}
 		}
 
+		if ('1' == V::get('DBG_DONT_CHANGE_DB', '', $_REQUEST)) {
+			echo "----------------- action xml tags: ---------------" . "\n";
+			print_r($actionXmlTags);
+			die(".EOF\n");
+		}
+
 		{// execute
 			$returnIds = array();
 			$changesList = array();
@@ -1347,7 +1359,7 @@ if($DBG){echo 'L.' . __LINE__ . ' $validateConvertedTransactionXsdString:';print
 			$tblName = $tblAcl->getName();
 			$typeNames[] = array("p5_{$dataSourceName}", $tblName);
 		}
-		$typeNames[] = array("p5_objects", 'File');
+		// $typeNames[] = array("p5_objects", 'File');// @see $this->_printFeatureTypeListXml - all types
 		return $this->_getDescribeFeatureTypes($typeNames, $simple);
 	}
 
@@ -1392,6 +1404,7 @@ if($DBG){echo 'L.' . __LINE__ . ' $validateConvertedTransactionXsdString:';print
 			$rootNode->setAttribute('targetNamespace', Api_WfsNs::getNsUri($acl->getSourceName()));
 			$typeName = $type . 'Type';
 			$fldList = $this->_getFieldListFromAcl($acl);
+			DBG::_('DBG_XSD', '>1', "field list", $fldList, __CLASS__, __FUNCTION__, __LINE__);
 
 			$cTypeNode = $dom->createElementNS('http://www.w3.org/2001/XMLSchema', 'xsd:complexType');
 			$rootNode->appendChild($cTypeNode);

+ 128 - 0
SE/se-lib/Core/AclSimpleSchemaBase.php

@@ -0,0 +1,128 @@
+<?php
+
+Lib::loadClass('Api_WfsNs');
+Lib::loadClass('Api_WfsException');
+Lib::loadClass('User');
+Lib::loadClass('Core_AclHelper');
+
+class Core_AclSimpleSchemaBase extends Core_AclBase {
+
+  public $_simpleSchema = array();
+  public $_xsdTypes = null;
+
+  public function getSimpleSchema() { return $this->_simpleSchema; }
+
+  public function getNamespace() { return 'default_objects/' . $this->getName(); }
+  public function getSourceName() { return 'default_objects'; }
+  public function init($force = false) {}
+  public function isInitialized() { return true; }
+  public function getFieldListByIdZasob() { return $this->getRealFieldListByIdZasob(); }
+  public function getVisibleFieldListByIdZasob() { return $this->getRealFieldListByIdZasob(); }
+  public function getVirtualFieldListByIdZasob() { return array(); }
+  public function getRealFieldListByIdZasob($force = false) {
+    $cols = array();
+    foreach ($this->getFields() as $idField => $field) {
+      $cols[$idField] = $field['name'];
+    }
+    return $cols;
+  }
+  public function getXsdTypes() {
+    if (null !== $this->_xsdTypes) return $this->_xsdTypes;
+    $this->_xsdTypes = array();
+    $generatedIdZasob = 10000;
+    foreach ($this->_simpleSchema as $key => $value) {
+      if ('@' == substr($key, 0, 1)) continue;// skip attributes
+      if (is_array($value)) {
+        $fieldName = $key;
+        $field = [ 'name' => $fieldName, 'perms' => 'R', 'idZasob' => $generatedIdZasob ];
+        if (!empty($value['@baseTypeName'])) $field['xsdType'] = "alias_ref:{$value['@baseTypeName']}";
+        else if (!empty($value['@ref'])) $field['xsdType'] = "alias_ref:{$value['@ref']}";
+        else throw new Exception("StorageAcl - field type not defined '{$key}'");
+        if (!empty($value['@maxOccurs'])) $field['maxOccurs'] = $value['@maxOccurs'];
+        $this->_xsdTypes[$fieldName] = $field;
+      } else if (is_scalar($value)) {
+        $fieldName = $key;
+        $field = [ 'name' => $fieldName, 'perms' => 'R', 'idZasob' => $generatedIdZasob ];
+        $field['xsdType'] = $value;
+        $this->_xsdTypes[$fieldName] = $field;
+      } else {
+        throw new Exception("StorageAcl - TODO: Unimplemented value type in simpleSchema: " . json_encode($value));
+      }
+      $generatedIdZasob++;
+    }
+    return $this->_xsdTypes;
+  }
+  public function getFields() {// @returns array - $this->_fields
+    $fieldsById = array();
+    foreach ($this->getXsdTypes() as $fieldName => $field) {
+      $field['name'] = $fieldName;
+      $fieldsById[ $field['idZasob'] ] = $field;
+    }
+    return $fieldsById;
+  }
+  public function getFieldType($fieldName) {
+    foreach ($this->getFields() as $field) {
+      if ($fieldName == $field['name']) return $field;
+    }
+    return null;
+	}
+
+  // TODO: replace legacy functions: isAllowed, hasFieldPerm, getFieldIdByName
+  public function canCreateField($fieldName) {
+    return false;// TODO: perms from Procesy
+  }
+  public function canReadField($fieldName) {
+    return true;// TODO: perms from Procesy
+  }
+  public function canReadObjectField($fieldName, $record) {
+    return true;// TODO: perms from Procesy
+  }
+  public function canWriteField($fieldName) {
+    return false;// TODO: perms from Procesy
+  }
+  public function canWriteObjectField($fieldName, $record) {
+    return false;// TODO: perms from Procesy
+  }
+
+  public function getTotal($params = array()) {// TODO: use ParseOgcQuery
+    throw new Exception("Unimplemented - TODO: F." . __FUNCTION__);
+  }
+  public function getItem($primaryKey) {
+    throw new Exception("Unimplemented - TODO: F." . __FUNCTION__);
+  }
+  public function getItems($params = array()) {// TODO: use ParseOgcQuery
+    throw new Exception("Unimplemented - TODO: F." . __FUNCTION__);
+  }
+  public function fetchItemRef(&$items) {
+    throw new Exception("Unimplemented - TODO: F." . __FUNCTION__);
+  }
+  public function addItem($itemTodo) {
+    throw new Exception("Unimplemented - TODO: F." . __FUNCTION__);
+    // return $this->parentAcl->addItem($itemTodo);
+  }
+  public function updateItem($itemPatch) {
+    throw new Exception("Unimplemented - TODO: F." . __FUNCTION__);
+    // return $this->parentAcl->updateItem($itemPatch);
+  }
+
+  public function getGeomFieldType($fieldName) { return null; }
+  public function getPrimaryKeyField() { return 'ID'; }
+  public function getID() { return 0; }
+  public function getAttributesFromZasoby() { return array(); }
+  public function isEnumerationField($fieldName) { return false; }
+  public function getEnumerations($fieldName) { return null; }
+  public function getXsdFieldType($fieldName) {
+    $xsdTypes = $this->getXsdTypes();
+    if (empty($xsdTypes[$fieldName])) throw new Exception("Field '{$fieldName}' not exists");
+    return $xsdTypes[$fieldName]['xsdType'];
+  }
+  public function isGeomField($fldName) {
+    if ('File' == $fieldName) return false;
+    if ('AccessGroupRead' == $fieldName) return false;
+    if ('AccessGroupWrite' == $fieldName) return false;
+    if ('AccessOwner' == $fieldName) return false;
+    // if ('NestedObjectTest' == $fieldName) return false;
+    // return $this->parentAcl->isGeomField($fldName);
+  }
+
+}

+ 220 - 0
SE/se-lib/Route/UrlAction/UserProNetMediaZaliczka.php

@@ -0,0 +1,220 @@
+<?php
+
+Lib::loadClass('RouteBase');
+Lib::loadClass('Typespecial');
+Lib::loadClass('TypespecialVariable');
+Lib::loadClass('Request');
+Lib::loadClass('Response');
+Lib::loadClass('ProcesHelper');
+Lib::loadClass('Route_UrlAction');
+Lib::loadClass('UI');
+
+class Route_UrlAction_UserProNetMediaZaliczka extends RouteBase {// TODO: UrlActionBase @see Route_UrlAction
+
+	public function handleAuth() {
+		if (!User::logged()) {
+			User::authByRequest();
+		}
+	}
+
+	public function defaultAction() {
+		UI::gora();
+		UI::emptyTag('link', ['href'=>'static/zaliczka/main.css', 'rel'=>'stylesheet']);
+		if (1 != V::get('_print', '', $_GET)) UI::menu();
+		try {
+			$data = array();
+			$data['id_user'] = V::get('ID_PROJECT', User::getID(), $_REQUEST, 'int');
+
+			$this->zaliczkaFormView($data);
+		} catch (Exception $e) {
+			UI::alert('danger', "Error #" . $e->getCode() .  "|" . $e->getLine() .  ": " . $e->getMessage());
+		}
+		if (1 != V::get('_print', '', $_GET)) UI::dol();
+	}
+
+	public function zaliczkaFormView($data) {
+		$idUser = V::get('id_user', User::getID(), $data);
+
+		UI::tag('div', ['id'=>"zaliczka-app", 'data-dbg'=>V::get('DBG', '', $_GET), 'data-sync-js-function'=>"syncZaliczkaState", 'data-fetch-data-js-function'=>"zaliczkaFetchData"]);
+		UI::emptyTag('br');
+
+		$acl = Core_AclHelper::getAclByNamespace("default_objects/zaliczka");//User::getAcl()->getObjectAcl();
+		$schema = $this->getSchema();//$acl->getSimpleSchema();
+		$zaliczkaData = $this->fetchDataBySchema($schema, $idUser);
+
+		?>
+<script>
+function zaliczkaFetchData(query, fieldType, resultCallback) {
+  console.warn('TODO: zaliczkaFetchData(query, fieldType, resultCallback)  query('+query+') fieldType:', fieldType);
+
+  // fieldType: Object {"@baseTypeName": "default_db:IN7_DZIENNIK_KORESP", id: "xsd:integer", title: "xsd:string", kategoriaKosztu: "xsd:string"}
+  if ('object' === typeof fieldType) {
+    if (!fieldType['@baseTypeName']) {
+      // TODO: log error
+      console.error("BUG: Missing typeName in fieldType");
+      return;
+    }
+    switch (fieldType['@baseTypeName']) {
+      case 'default_db:IN7_DZIENNIK_KORESP': {
+        console.warn("TODO: fetch by ajax default_db:IN7_DZIENNIK_KORESP");
+        var options = [
+          { id: 65432, title: 'testowa koresp 1', kategoriaKosztu: 'KOSZT1' },
+          { id: 10008, title: 'testowa koresp 8', kategoriaKosztu: 'KOSZT8' },
+          { id: 10009, title: 'testowa koresp 9', kategoriaKosztu: 'KOSZT9' },
+        ]
+        resultCallback(options);
+      } break;
+      case 'default_db:IN7_MK_BAZA_DYSTRYBUCJI': {
+        console.warn("TODO: fetch by ajax default_db:IN7_MK_BAZA_DYSTRYBUCJI");
+        var options = [
+          { id: 100, nrBudowy: 'Budowa 100/2016' },
+          { id: 101, nrBudowy: 'Budowa 101/2016' },
+          { id: 102, nrBudowy: 'Budowa 102/2016' },
+        ]
+        resultCallback(options);
+      } break;
+      default: {
+        console.log("BUG: Unsupported type namespace '" + fieldType['@baseTypeName'] + "'");
+      }
+    }
+  } else {
+    console.log("BUG: Unsupported type '" + fieldType + "'");
+    return;
+  }
+}
+
+function syncZaliczkaState(state, updates, stateSyncSyccessCallback, stateSyncErrorCallback) {
+  // TODO: if ajax success then stateSyncSyccessCallback(Response.data)
+  // TODO: if ajax fail then stateSyncErrorCallback(Response.data)
+  console.log('====== TODO: syncZaliczkaState updates:', updates, 'state:', state);
+  if (null === updates) {
+    var data = {
+      nierozliczonaKwota: 300,
+      schema: {
+        zaliczka: <?= json_encode($schema); ?>
+      },
+      zaliczka: <?= json_encode($zaliczkaData); ?>
+    }
+    setTimeout(function() {
+      stateSyncSyccessCallback({data: data});// TODO: app state + updates from api Response
+    }, 1000);
+  } else {
+    setTimeout(function() {
+      stateSyncSyccessCallback({data: state});// TODO: app state + updates from api Response
+    }, 1000);
+  }
+}
+
+</script>
+<?php
+		UI::tag('script', ['src'=>'static/zaliczka/main.js' . (V::get('DBG', '', $_GET) ? '?_ts=' . time() : ''), 'type'=>'text/javascript']);
+	}
+
+	public function fetchDataBySchema($schema, $idUser, $primaryKey = null) {// if $primaryKey is null then search for last row
+		return [// TODO: fetch data from DB
+			'id' => 123,
+			'created' => '2016-11-22', // data wydania zaliczki - data utworzenia rekordu
+			'worker' => [
+				'id' => 666,
+				'name' => 'Kowalski', // 'TODO' => get name from admin_users - imię i nazwisko pracownika pobierającego zaliczkę
+				'login' => 'kowalski'
+			],
+			'kwota' => 555.55, // kwota wypłaconej zaliczki
+			'pozycja' => [
+				[ 'id' => 1,
+					'kwota' => 100.22,
+					'korespondencja' => [ 'id' => 65432, 'title' => 'testowa koresp 1', 'kategoriaKosztu' => 'KOSZT1' ],
+					'projekt' => [ 'nrBudowy' => 'Budowa/1' ]
+				],
+				[ 'id' => 2,
+					'kwota' => 200.55,
+					'korespondencja' => [ 'id' => 76543, 'title' => 'testowa koresp 2', 'kategoriaKosztu' => 'KOSZT2' ],
+					'projekt' => [ 'nrBudowy' => 'Budowa/2' ]
+				]
+			]
+		];
+	}
+
+	public function getSchema() {
+		return [// var zaliczkaFlatSchema
+			'__baseTypeName' => 'default_db:ZALICZKA',
+			'id' => 'xsd:integer',
+			'created' => 'xsd:date',
+			'worker' => [// 'ref:worker',
+				'__baseTypeName' => 'default_db:ADMIN_USERS',
+				'name' => 'xsd:string',
+				'login' => 'xsd:string'
+			],
+			'kwota' => 'xsd:decimal',
+			'pozycja' => [// 'ref:pozycja'
+				'__baseTypeName' => 'default_db:ZALICZKA_POZYCJA',
+				'id' => 'xsd:integer',
+				'kwota' => 'xsd:decimal',
+				'korespondencja' => [// 'ref:korespondencja'
+					'__baseTypeName' => 'default_db:IN7_DZIENNIK_KORESP',
+					'id' => 'xsd:integer',
+					'title' => 'xsd:string',
+					'kategoriaKosztu' => 'xsd:string'
+				],
+				'projekt' => [// 'ref:projekt'
+					'__baseTypeName' => 'default_db:IN7_MK_BAZA_DYSTRYBUCJI',
+					'id' => 'xsd:integer',
+					'nrBudowy' => 'xsd:string'
+			  ]
+		  ]
+		];
+	}
+
+}
+
+/*    Akcje
+
+# dodanie pierwszej zaliczki - 500 zł
+$data = [ worker => [ login => 'Kowalski' ], kwota => 500.00 ]
+insert into `ZALICZKA` (`L_APPOITMENT_USER`, `KWOTA`) values('{$data['worker']['login']}', '{$data['kwota']}');
+-- return id = 123
+
+# rozliczenie częściowe pierwszej zaliczki np. 500 zł
+$data = [ id => 123, pozycja => [ [ kwota => 200.00, korespondencja => [ ... ], projekt => [ ... ] ] ] ]
+update `ZALICZKA__#REF__POZYCJA` set `A_STATUS` = 'DELETED' where `PRIMARY_KEY` = 123;
+
+
+*/
+/* -- Struktura
+
+CREATE TABLE IF NOT EXISTS `ZALICZKA__#REF__POZYCJA` ( `PRIMARY_KEY` int(11), `REMOTE_PRIMARY_KEY` int(11),  );
+
+CREATE TABLE IF NOT EXISTS `ZALICZKA` (
+	`ID` int(11) NOT NULL AUTO_INCREMENT,
+	`A_RECORD_CREATE_DATE` datetime  DEFAULT NULL,
+	`A_RECORD_CREATE_AUTHOR` varchar(20)  DEFAULT NULL,
+	`A_RECORD_UPDATE_DATE` datetime  DEFAULT NULL,
+	`A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT '',
+	`A_STATUS` enum('WAITING','NORMAL','MONITOR','WARNING','OFF_SOFT','OFF_HARD','DELETED') DEFAULT NULL,
+	`A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT '',
+	`A_CLASSIFIED` varchar(100) NOT NULL DEFAULT '',
+	`L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT '',
+	`KWOTA` decimal(16,2) NOT NULL DEFAULT 0,
+	`NIEROZLICZONA_KWOTA` decimal(16,2) NOT NULL DEFAULT 0,
+	PRIMARY KEY (`ID`)
+	KEY `ID_PROJECT` (`ID_PROJECT`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin2;
+
+CREATE TABLE IF NOT EXISTS `ZALICZKA_HIST` (
+	`ID` int(11) NOT NULL AUTO_INCREMENT,
+	`ID_USERS2` int(11) NOT NULL,
+	`A_RECORD_CREATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;',
+	`A_RECORD_CREATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;',
+	`A_RECORD_UPDATE_DATE` varchar(20) NOT NULL DEFAULT 'N/S;',
+	`A_RECORD_UPDATE_AUTHOR` varchar(20) NOT NULL DEFAULT 'N/S;',
+	`A_STATUS` varchar(20) NOT NULL DEFAULT 'N/S;',
+	`A_ADM_COMPANY` varchar(100) NOT NULL DEFAULT 'N/S;',
+	`A_CLASSIFIED` varchar(100) NOT NULL DEFAULT 'N/S;',
+	`L_APPOITMENT_USER` varchar(100) NOT NULL DEFAULT 'N/S;',
+	`KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;',
+	`NIEROZLICZONA_KWOTA` varchar(16) NOT NULL DEFAULT 'N/S;',
+	PRIMARY KEY (`ID`),
+  KEY `ID_USERS2` (`ID_USERS2`)
+) ENGINE=MyISAM  DEFAULT CHARSET=latin2;
+
+*/

+ 24 - 0
SE/se-lib/Schema/TableBase.php

@@ -5,6 +5,9 @@ class Schema_TableBase {
 
 	public $idDatabase;
 	public $tblName;
+	public $_types;
+	public $_restrictions;
+	public $_params;
 
 	public function __construct($idDatabase, $tblName) {
 		$this->idDatabase = $idDatabase;
@@ -21,6 +24,10 @@ class Schema_TableBase {
 		// TODO:? $this->_types['WWW'] = new Type_Link($params = ['maxLength' => 255, ...]);
 	}
 
+	public function getType($fieldName) {
+		return V::get($fieldName, '', $this->_types);
+	}
+
 	public function fixTypes($types) {
 		if (empty($this->_types)) return $types;
 		foreach ($types as $fldName => $type) {
@@ -176,4 +183,21 @@ class Schema_TableBase {
 		return $field;
 	}
 
+	public function getPrimaryKeyField() {// TODO: use this method in TableAcl, Data_Source, etc.
+		return 'ID';
+	}
+
+	public function fixItemFieldValue($fieldName, /* array */ $item) {
+		return $value;
+	}
+
+	public function getFieldParam($fieldName, $paramKey) {
+		return (empty($this->_params[$fieldName]))
+			? null
+			: (empty($this->_params[$fieldName][$paramKey]))
+				? null
+				: $this->_params[$fieldName][$paramKey]
+		;
+	}
+
 }

+ 31 - 159
SE/se-lib/Schema/ZaliczkaStorageAcl.php

@@ -1,168 +1,40 @@
 <?php
 
-Lib::loadClass('Core_AclBase');
+Lib::loadClass('Core_AclSimpleSchemaBase');// extends Core_AclBase
 Lib::loadClass('Core_AclHelper');
 Lib::loadClass('FileStorage');
 
-class Schema_ZaliczkaStorageAcl extends Core_AclBase {
+class Schema_ZaliczkaStorageAcl extends Core_AclSimpleSchemaBase {
 
-  public function __construct() {
-    $this->parentAcl = User::getAcl()->getObjectAcl('default_db', 'USER_ZALICZKA');
-    // DBG::_(true, true, "parentAcl", $this->parentAcl, __CLASS__, __FUNCTION__, __LINE__);
-  }
-  public function getNamespace() { return 'default_objects/' . $this->getName(); }
-  public function getSourceName() { return 'default_objects'; }
-  public function init($force = false) {}
-  public function isInitialized() { return true; }
-  public function getName() { return 'Zaliczka'; }
-  public function getRootTableName() { return 'USER_ZALICZKA'; }
-  public function getFieldListByIdZasob() { return $this->getRealFieldListByIdZasob(); }
-  public function getVisibleFieldListByIdZasob() { return $this->getRealFieldListByIdZasob(); }
-  public function getVirtualFieldListByIdZasob() { return array(); }
-  public function getRealFieldListByIdZasob($force = false) {
-    $cols = $this->parentAcl->getRealFieldListByIdZasob();
-    $cols[100001] = 'Pracownik';
-    $cols[100002] = 'Pozycja';
-    return $cols;
-  }
-  public function getFields() {// @returns array - $this->_fields
-    $fields = $this->parentAcl->getFields();
-    $fields[100001] = ['name'=>'Pracownik', 'perms'=>'RWXC', 'opis'=>'Pracownik pobierający zaliczkę', 'sort_prio'=>1000, 'label'=>'Pracownik'];
-    $fields[100002] = ['name'=>'Pozycja', 'perms'=>'RWXC', 'opis'=>'Pozycje zaliczki', 'sort_prio'=>1001, 'label'=>'Pozycje'];
-    return $fields;
-  }
-  public function getFieldType($fieldName) {
-    foreach ($this->getFields() as $field) {
-      if ($fieldName == $field['name']) return $field;
-    }
-    return null;
-	}
-
-  // TODO: replace legacy functions: isAllowed, hasFieldPerm, getFieldIdByName
-  public function canCreateField($fieldName) {
-    if ('Pracownik' == $fieldName) return true;
-    if ('Pozycja' == $fieldName) return true;
-    return $this->parentAcl->canCreateField($fieldName);
-  }
-  public function canReadField($fieldName) {
-    if ('File' == $fieldName) return true;
-    if ('AccessGroupRead' == $fieldName) return true;
-    if ('AccessGroupWrite' == $fieldName) return true;
-    if ('AccessOwner' == $fieldName) return true;
-    return $this->parentAcl->canReadField($fieldName);
-  }
-  public function canReadObjectField($fieldName, $record) {
-    if ('File' == $fieldName) return true;
-    if ('AccessGroupRead' == $fieldName) return true;
-    if ('AccessGroupWrite' == $fieldName) return true;
-    if ('AccessOwner' == $fieldName) return true;
-    return $this->parentAcl->canReadObjectField($fieldName, $record);
-  }
-  public function canWriteField($fieldName) {
-    if ('File' == $fieldName) return true;
-    if ('AccessGroupRead' == $fieldName) return true;
-    if ('AccessGroupWrite' == $fieldName) return true;
-    if ('AccessOwner' == $fieldName) return true;
-    return $this->parentAcl->canWriteField($fieldName);
-  }
-  public function canWriteObjectField($fieldName, $record) {
-    if ('File' == $fieldName) return true;
-    if ('AccessGroupRead' == $fieldName) return true;
-    if ('AccessGroupWrite' == $fieldName) return true;
-    if ('AccessOwner' == $fieldName) return true;
-    return $this->parentAcl->canWriteObjectField($fieldName, $record);
-  }
+  public $_simpleSchema = [
+    '@typeName' => 'default_objects:Zaliczka',
+    '@baseTypeName' => 'default_db:ZALICZKA',
+    'id' => 'xsd:integer',
+    'created' => 'xsd:date',
+    'worker' => [
+      '@ref' => 'default_objects:AccessOwner',// local_ref:default_objects:AccessOwner
+    ],
+    'kwota' => 'xsd:decimal',
+    'pozycja' => [
+      '@ref' => 'default_objects:ZaliczkaPozycja',
+      '@maxOccurs' => 'unbounded',
+      // 'id' => 'xsd:integer',
+      // 'kwota' => 'xsd:decimal',
+      // 'korespondencja' => [// 'ref:korespondencja'
+      // 	'@baseTypeName' => 'default_db:IN7_DZIENNIK_KORESP',
+      // 	'id' => 'xsd:integer',
+      // 	'title' => 'xsd:string',
+      // 	'kategoriaKosztu' => 'xsd:string'
+      // ],
+      // 'projekt' => [// 'ref:projekt'
+      // 	'@baseTypeName' => 'default_db:IN7_MK_BAZA_DYSTRYBUCJI',
+      // 	'id' => 'xsd:integer',
+      // 	'nrBudowy' => 'xsd:string'
+      // ]
+    ]
+  ];
 
-  public function getTotal($params = array()) {// TODO: use ParseOgcQuery
-    $DBG = V::get('DBG_DS', 0, $_GET, 'int');
-    if($DBG>2){echo 'C.'.get_class($this).' L.' . __LINE__ . " getTotal \$params:";print_r($params);echo "\n";}
-    return $this->parentAcl->getTotal($params);
-  }
-  public function getItem($primaryKey) {
-    $items = $this->getItems(['primaryKey'=>$primaryKey]);
-    return (!empty($items[$primaryKey])) ? $items[$primaryKey] : null;
-  }
-  public function getItems($params = array()) {// TODO: use ParseOgcQuery
-    $DBG = V::get('DBG_DS', 0, $_GET, 'int');
-    if($DBG>2){echo 'C.'.get_class($this).' L.' . __LINE__ . " getItems \$params:";print_r($params);echo "\n";}
-    $items = array();
-    $rawItems = $this->parentAcl->getItems($params);
-    foreach ($rawItems as $pk => $item) $items[$pk] = (array)$item;
-    if($DBG>2){echo 'C.'.get_class($this).' L.' . __LINE__ . " getItems \$items:";print_r($items);echo "\n";}
-    if (empty($items)) return $items;
-    $this->fetchItemRef($items);// TODO: only fields from request
-    if($DBG>2){echo 'C.'.get_class($this).' L.' . __LINE__ . " getItems after fetchItemRef \$items:";print_r($items);echo "\n";}
-    return $items;
-  }
-  public function fetchItemRef(&$items) {
-    $DBG = V::get('DBG_DS', 0, $_GET, 'int');
-    $refs = array();// fieldName => xsdType
-    foreach ($this->getRealFieldListByIdZasob() as $id => $fieldName) {
-      $fieldType = $this->getXsdFieldType($fieldName);
-      if ('ref:' == substr($fieldType, 0, 4)) $refs[$fieldName] = substr($fieldType, 4);
-      else if ('alias_ref:' == substr($fieldType, 0, 10)) {
-        $refs[$fieldName] = substr($fieldType, 10);
-      }
-    }
-    if (empty($refs)) return $items;
-    $pkList = array_keys($items);
-    $sqlPk = array(); foreach ($pkList as $pk) { $sqlPk[] = DB::getPDO()->quote($pk, PDO::PARAM_STR); } $sqlPk = implode(", ", $sqlPk);
-    $refRows = array();// $fieldName => [ pk, ... ]
-    foreach ($refs as $fieldName => $type) {
-      $acl = Core_AclHelper::getAclByTypeName($type);
-      // TODO: Core_AclBase->fetchRefs($fieldName, $pkList = array());// $refPk[$fieldName] = $this->fetchRefs($fieldName, $pkList);
-      $refTableName = $this->createRefTable($fieldName);
-      if($DBG>2){echo 'C.'.get_class($this).' L.' . __LINE__ . " getItems loop(\$fieldName:{$fieldName}) \$refTableName:({$refTableName})";echo"\n";}
-      $refRows[$fieldName] = DB::getPDO()->fetchAllByKey("
-        select r.*
-        from `{$refTableName}` r
-        where r.PRIMARY_KEY in({$sqlPk})
-          and r.A_STATUS != 'DELETED'
-      ", $key = 'PRIMARY_KEY');
-      if($DBG>2){echo 'C.'.get_class($this).' L.' . __LINE__ . " getItems loop(\$fieldName:{$fieldName}) \$refTableName:({$refTableName}), \$refRows[$fieldName]";print_r($refRows[$fieldName]);echo"\n";}
-    }
-    foreach ($refRows as $fieldName => $refList) {
-      foreach ($refList as $pk => $ref) {
-        $items[ $pk ][ $fieldName ][] = array('xlink' => "{$refs[$fieldName]}.{$ref['REMOTE_PRIMARY_KEY']}");
-      }
-    }
-  }
-  public function addItem($itemTodo) {
-    return $this->parentAcl->addItem($itemTodo);
-  }
-  public function updateItem($itemPatch) {
-    return $this->parentAcl->updateItem($itemPatch);
-  }
-
-  public function getGeomFieldType($fieldName) { return null; }
-  public function getPrimaryKeyField() { return 'ID'; }
-  public function getID() { return 0; }
-  public function getAttributesFromZasoby() { return array(); }
-  public function isEnumerationField($fieldName) {
-    if ('A_STATUS' == $fieldName) return true;
-    return false;
-  }
-  public function getEnumerations($fieldName) {
-    if ('A_STATUS' == $fieldName) return $this->parentAcl->getEnumerations($fieldName);
-    return null;
-  }
-  public function getXsdFieldType($fieldName) {
-    if ('File' == $fieldName) return 'ref:p5_objects:File';
-    // if ('File1' == $fieldName) return 'alias_ref:p5_objects:File';
-    // if ('File2' == $fieldName) return 'alias_ref:p5_objects:File';
-    // if ('NestedObjectTest' == $fieldName) return 'local_ref:p5_objects:NestedObjectTest';
-    if ('AccessGroupRead' == $fieldName) return 'ref:default_objects:AccessGroupRead';
-    if ('AccessGroupWrite' == $fieldName) return 'ref:default_objects:AccessGroupWrite';
-    if ('AccessOwner' == $fieldName) return 'ref:default_objects:AccessOwner';
-    return $this->parentAcl->getXsdFieldType($fieldName);
-  }
-  public function isGeomField($fldName) {
-    if ('File' == $fieldName) return false;
-    if ('AccessGroupRead' == $fieldName) return false;
-    if ('AccessGroupWrite' == $fieldName) return false;
-    if ('AccessOwner' == $fieldName) return false;
-    // if ('NestedObjectTest' == $fieldName) return false;
-    return $this->parentAcl->isGeomField($fldName);
-  }
+  public function getName() { return 'Zaliczka'; }
+  public function getRootTableName() { return 'ZALICZKA'; }
 
 }

+ 33 - 21
SE/se-lib/TableAcl.php

@@ -2,6 +2,10 @@
 
 Lib::loadClass('Core_AclBase');
 Lib::loadClass('SchemaException');
+Lib::loadClass('Typespecial');
+Lib::loadClass('ProcesHelper');
+Lib::loadClass('Schema_TableFactory');
+Lib::loadClass('DataSourceFactory');
 
 /**
  * $_SESSION['TableAcl_cache'][$tableID] = array(
@@ -572,7 +576,6 @@ class TableAcl extends Core_AclBase {
 			}
 		}
 
-		Lib::loadClass('Typespecial');
 		$typeSpecial = Typespecial::getInstance($fieldID, $colName);
 		if ($typeSpecial) {
 			throw new Exception("TODO: TypeSpecial");
@@ -615,7 +618,6 @@ class TableAcl extends Core_AclBase {
 			return $out;
 		}
 
-		Lib::loadClass('Typespecial');
 		$typeSpecial = Typespecial::getInstance($fieldID, $colName);
 
 		$html = new stdClass();
@@ -903,7 +905,6 @@ class TableAcl extends Core_AclBase {
 		if (empty($tableConfig)) {
 			throw new Exception("Brak danych konfiguracyjnych do tabeli nr {$idTable} #TACL" . __LINE__);
 
-			Lib::loadClass('ProcesHelper');
 			$zasobObj = ProcesHelper::getZasobTableInfo($idTable);
 			if (!$zasobObj) {
 				return null;// TODO: throw new Exception("Zasob TABELA ID={$idTable} nie istnieje");
@@ -940,7 +941,6 @@ class TableAcl extends Core_AclBase {
 	public function loadSchema() {
 		if ($this->_schemaLoaded) return;
 		$srvName = $_SERVER['SERVER_NAME'];
-		Lib::loadClass('Schema_TableFactory');
 		$this->_schemaClass = Schema_TableFactory::build($this->_name, $this->_db, $srvName);
 		$this->_schemaLoaded = true;
 	}
@@ -1005,11 +1005,12 @@ class TableAcl extends Core_AclBase {
 			}
 		}
 
-		$fieldIds = array_keys($this->_fields);
-		Lib::loadClass('Typespecial');
-		$vColsIdList = Typespecial::initFields($fieldIds);
-		if (!empty($vColsIdList)) {
-			$this->_virtualFieldsIdList = $vColsIdList;
+		{// TODO: replace this by $this->_schemaClass (from DataSourceFactory::build(...))
+			$fieldIds = array_keys($this->_fields);
+			$vColsIdList = Typespecial::initFields($fieldIds);
+			if (!empty($vColsIdList)) {
+				$this->_virtualFieldsIdList = $vColsIdList;
+			}
 		}
 	}
 
@@ -1584,7 +1585,6 @@ class TableAcl extends Core_AclBase {
 	}
 
 	private function _getDataSource($cols) {
-		Lib::loadClass('DataSourceFactory');
 		$dsConfig = array();
 		$dsConfig['source_id'] = $this->getDB();
 		$dsConfig['object_name'] = $this->getName();
@@ -1596,6 +1596,7 @@ class TableAcl extends Core_AclBase {
 	}
 
 	public function getPrimaryKeyField() {
+		// TODO: if ($this->_schemaClass) return $this->_schemaClass->getPrimaryKeyField();
 		$ds = $this->getDataSource();
 		return $ds->getPrimaryKeyField();
 	}
@@ -1756,25 +1757,36 @@ class TableAcl extends Core_AclBase {
 		return $attributes;
 	}
 
-	public function getXsdFieldType($fldName) {// @returns string - xsd type, TODO: throw Exception when field not found
+	public function getXsdFieldType($fieldName) {// @returns string - xsd type, TODO: throw Exception when field not found
+		if ($this->_schemaClass) {
+			$schemaType = $this->_schemaClass->getType($fieldName);
+			if ($schemaType) return $schemaType;
+		}
 		$fldType = 'xsd:string';
-		if ('A_RECORD_UPDATE_DATE' == $fldName) return 'xsd:string';
-		if ('A_RECORD_CREATE_DATE' == $fldName) return 'xsd:string';
-		if ($this->isIntegerField($fldName)) return 'xsd:integer';
-		else if ($this->isDecimalField($fldName)) return 'xsd:decimal';
-		else if ($this->isDateField($fldName)) return 'xsd:date';
-		else if ($this->isDateTimeField($fldName)) return 'xsd:dateTime';
-		else if ($this->isGeomField($fldName)) {
+		if ('A_RECORD_UPDATE_DATE' == $fieldName) return 'xsd:string';
+		if ('A_RECORD_CREATE_DATE' == $fieldName) return 'xsd:string';
+		if ($this->isIntegerField($fieldName)) return 'xsd:integer';
+		else if ($this->isDecimalField($fieldName)) return 'xsd:decimal';
+		else if ($this->isDateField($fieldName)) return 'xsd:date';
+		else if ($this->isDateTimeField($fieldName)) return 'xsd:dateTime';
+		else if ($this->isGeomField($fieldName)) {
 			//$fldType = 'gml:GeometryPropertyType';
-			$geomType = $this->getGeomFieldType($fldName);
+			$geomType = $this->getGeomFieldType($fieldName);
 			if ('polygon' == $geomType) return 'gml:PolygonPropertyType';
 			else if ('point' == $geomType) return 'gml:PointPropertyType';
 			else if ('linestring' == $geomType) return 'gml:LineStringPropertyType';
 			else return 'gml:GeometryPropertyType';
 		}
-		else if ($this->isEnumerationField($fldName)) return 'xsd:string';
-		else if ($this->isBinaryField($fldName)) return 'xsd:base64Binary';
+		else if ($this->isEnumerationField($fieldName)) return 'xsd:string';
+		else if ($this->isBinaryField($fieldName)) return 'xsd:base64Binary';
 		return $fldType;
 	}
 
+	public function getXsdFieldParam($fieldName, $paramKey) {
+		return ($this->_schemaClass)
+			? $this->_schemaClass->getFieldParam($fieldName, $paramKey)
+			: null
+		;
+	}
+
 }

+ 14 - 2
SE/se-lib/TableAjax.php

@@ -5723,7 +5723,7 @@ jQuery(document).ready(function(){
 		exit;
 	}
 
-	public function ajaxData($args) {
+	public function ajaxData($args) {// executed from url: "{$this->syncUrl"&_hash={$this->_htmlID}&_task=loadDataAjax"
 		$DBG = ('1' == V::get('DBG', '', $_REQUEST));
 		$acl = $this->_acl;
 
@@ -5812,7 +5812,7 @@ jQuery(document).ready(function(){
 					case 'xsd':
 						switch ($ex[1]) {
 							case 'string': $columnConfig->type = 'string'; break;
-							case 'ind': $columnConfig->type = 'number'; break;
+							case 'ind': $columnConfig->type = 'number'; break;// TODO: bug 'ind'?
 						}
 						break;
 				}
@@ -5856,6 +5856,18 @@ jQuery(document).ready(function(){
 				}
 			}
 
+			if ($columnConfig->xsdType) {// fix fields type p5:typeSpecialSimpleLink (previously defined by Typespecial)
+				switch ($columnConfig->xsdType) {
+					case 'p5:typeSpecialSimpleLink': {
+						$columnConfig->type = 'simpleLink';
+						$columnConfig->_tsRetId = 0;
+						$columnConfig->_tsSimpleLink = new stdClass();
+						$columnConfig->_tsSimpleLink->format = $acl->getXsdFieldParam($col, 'format');
+						$columnConfig->_tsSimpleLink->aliasMap = $acl->getXsdFieldParam($col, 'aliasMap');
+					} break;
+				}
+			}
+
 			// @see ajaxHiddenColsSave
 			if (UserProfile::isHiddenColumn($acl->getID(), $fieldID)) {
 				$columnConfig->hidden = true;

+ 1 - 0
SE/static/zaliczka/main.css

@@ -0,0 +1 @@
+.App{text-align:center}.App-logo{-webkit-animation:App-logo-spin infinite 20s linear;animation:App-logo-spin infinite 20s linear;height:80px}.App-header{background-color:#222;height:150px;padding:20px;color:#fff}.App-intro{font-size:large}@-webkit-keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}body{margin:0;padding:0;font-family:sans-serif}

File diff suppressed because it is too large
+ 0 - 0
SE/static/zaliczka/main.js


二進制
SE/stuff/jre-8u112-macosx-x64.tar.gz


+ 35 - 0
SE/superedit-DB_PROCEDURES_CREATE.php

@@ -1022,6 +1022,41 @@ LEFT JOIN IN7_MK_BAZA_DYSTRYBUCJI AS t2 ON t1.ID = t2.ID;";
 
 
 
+//! POPC_UPDATE eventy stats
+
+$sql['POPC_UPDATE_event_drop']="DROP EVENT if exists POPC_UPDATE";
+
+
+$sql['POPC_UPDATE_event']="CREATE EVENT `POPC_UPDATE` ON SCHEDULE EVERY 1 DAY STARTS '2015-05-12 00:04:30' ON COMPLETION NOT PRESERVE ENABLE DO
+BEGIN
+create temporary table ST_POPC_AKT as
+select  t1.ID, count(t2.ID) as cache_count_POPC , 
+sum(if(t2.Rodzaj_obiektu like '%Plac%owa',t2.Liczba_placowek_publicznych,0)) as cache_count_POPC_plac ,
+sum(if(t2.Rodzaj_obiektu like '%Plac%owa%A',t2.Liczba_placowek_publicznych,0)) as cache_count_POPC_plac_os_A ,
+sum(t2.Liczba_lokali) as cache_count_POPC_lokali 
+from MK_Rewiry as t1 
+join MK_BIALE_PLAMY as t2 on ST_Contains(t1.the_geom, t2.the_geom)
+-- where t2.NAZWA_OBSZARU like 'GDA%KI I TR%KI' 
+group by t1.ID ;
+update MK_Rewiry as t1, ST_POPC_AKT as t2 set t1.cache_count_POPC=t2.cache_count_POPC ,
+t1.cache_count_POPC_plac=t2.cache_count_POPC_plac , 
+t1.cache_count_POPC_plac_os_A=t2.cache_count_POPC_plac_os_A , 
+t1.cache_count_POPC_lokali=t2.cache_count_POPC_lokali
+where t1.ID=t2.ID;
+END
+";
+
+// EOF POPC_UPDATE eventy stats
+
+
+//! ST__MK_Rewiry_to_BUILDINGS
+$sql['ST__MK_Rewiry_to_BUILDINGS_event_drop']="DROP EVENT if exists ST__MK_Rewiry_to_BUILDINGS";
+$sql['ST__MK_Rewiry_to_BUILDINGS_event']="CREATE EVENT `ST__MK_Rewiry_to_BUILDINGS` ON SCHEDULE EVERY 1 DAY STARTS '2015-05-12 00:04:30' ON COMPLETION NOT PRESERVE ENABLE DO
+update BUILDINGS as t1, MK_Rewiry as t2 , USERS2_MARKETING t3 set t1.M_REWIR=t2.NAZWA_REWI , t3.M_REWIR=t2.NAZWA_REWI
+where  ST_Contains(t2.the_geom, t1.the_geom) and t3.T_TELBOX_BUILDING_IN=t1.S_ADDRESS_STREET
+";
+// EOF ST__MK_Rewiry_to_BUILDINGS
+
 
 //! bzyka funkcje @2015-07 do tree zasobow aliasow
 $sql['drop_function_ALIAS_CHILDS_FROM_CRM_LISTA_ZASOBOW']="drop function if exists ALIAS_CHILDS_FROM_CRM_LISTA_ZASOBOW";

+ 8 - 0
SE/superedit-INSTALL_SES_PROCESY_A.php

@@ -577,6 +577,14 @@ function INSTALL_GETCOMMANDS_XSL_ENGINES($ADMIN_USERNAME,$SERVER_ADDRESS_IP,$ADM
  ./xrepo create /opt/local/share/expath/repo
 
  ';
+  $cmd[]['scp']=array($INSTALL_ROOT,'stuff/jre-8u112-macosx-x64.tar.gz','/Library/Server/Web/Data/Sites/Default/SE/stuff/jre-8u112-macosx-x64.tar.gz');
+  $cmd[]['rsh']='cd /Library/Server/Web/Data/Sites/Default/SE/stuff/ && tar -xzf `ls -1 jre-8u*-macosx-x64.tar.gz | sort -rn -t u -k 2 | head -1`';
+  $cmd[]['rsh']='cd /Library/Server/Web/Data/Sites/Default/SE/stuff/ && cd `ls -1d jre1.8.*.jre/ | sort -rn -t _  -k 1.8 -k 2 | head -1` && defaults write `pwd`/Contents/Info.plist JavaVM -dict-add \'JVMCapabilities\' \'<array><string>JNI</string><string>BundledApp</string><string>CommandLine</string></array>\' ';
+  $cmd[]['rsh']='cd /Library/Server/Web/Data/Sites/Default/SE/stuff/ && cd `ls -1d jre1.8.*.jre/ | sort -rn -t _  -k 1.8 -k 2 | head -1` && chmod 0664 Contents/Info.plist ';
+  $cmd[]['rsh']='cd /Library/Server/Web/Data/Sites/Default/SE/stuff/ && cd `ls -1d jre1.8.*.jre/ | sort -rn -t _  -k 1.8 -k 2 | head -1` && plutil -convert xml1 Contents/Info.plist '; 
+  $cmd[]['rsh']='cd /Library/Server/Web/Data/Sites/Default/SE/stuff/ && cd `ls -1d jre1.8.*.jre/ | sort -rn -t _  -k 1.8 -k 2 | head -1` && mv `pwd` /Library/Java/JavaVirtualMachines/ '; 
+  $cmd[]['rsh']='cd /Library/Server/Web/Data/Sites/Default/SE/stuff/ && cd `ls -1d jre1.8.*.jre/ | sort -rn -t _  -k 1.8 -k 2 | head -1` && mkdir -p Contents/Home/bundle/Libraries'; 
+  $cmd[]['rsh']='cd /Library/Server/Web/Data/Sites/Default/SE/stuff/ && cd `ls -1d jre1.8.*.jre/ | sort -rn -t _  -k 1.8 -k 2 | head -1` && cd Contents/Home/bundle/Libraries && ln -s ../../lib/server/libjvm.dylib libserver.dylib'; 
  return $cmd;
 }
 

File diff suppressed because it is too large
+ 0 - 0
SE/superedit-SQIX_STRUCTURE_DB_SYNC.php


+ 49 - 10
SE/superedit-STATYSTYKA_TABELE.php

@@ -133,11 +133,50 @@ function STATYSTYKA_TABELE() {
 		 $sqlList[]="update BUILDINGS t1, Rozdzielcza_Kabel_Swiatlowodowy_wsg84 t2 set t1.__Rozdzielcza_Kabel_Swiatlowodowy_wsg84=t2.ID where t1.ID=t2.ID_BUILDINGS ; ";
 		 $sqlList[]="update BUILDINGS t1, MK_Rewiry t2 set t1.`__MK_Rewiry__STATUS`=t2.A_STATUS where t1.M_REWIR=t2.NAZWA_REWI ; ";
 
-		 		
-		
 
- 			}
+		 $sqlList[]=" update USERS2_MARKETING set T_OPER='NIEWIADOMO' where T_OPER=''";
+		 $sqlList[]=" update USERS2_MARKETING set TV_OPER='NIEWIADOMO' where TV_OPER=''";
+		 $sqlList[]=" update USERS2_MARKETING set I_OPER='NIEWIADOMO' where I_OPER=''";
+		 	
+		 	
+		 			
 
+ 			}
+ 			
+
+ 			{ //posprzatanie filtrow operatorow - todo tabela konkurencji
+	 		$oper_fix['%ORAN%']='ORANGE';
+		 	$oper_fix['%T%MOBLILE%']='T-MOBLILE';
+		 	$oper_fix['%TP%LIVE%BOX%']='ORANGE';
+		 	$oper_fix['%TP%ORANE%']='ORANGE';
+		 	$oper_fix['%BRAK%']='BRAK';
+		 	$oper_fix['CANAL%']='CANAL-PLUS';
+		 	$oper_fix['%CYFRA%']='CYFRA-PLUS';
+		 	$oper_fix['KABL%WKA']='INNY';
+		 	$oper_fix['NAZ%EMNA']='DVBC';
+		 	$oper_fix['NC%']='NC-PLUS';
+		 	$oper_fix['POLSAT%']='POLSAT';
+		 	$oper_fix['POLAT']='POLSAT';
+		 	$oper_fix['SATELITA%']='DVB-S';
+		 	$oper_fix['POLAT']='POLSAT';
+		 	$oper_fix['S__UZBOWY']='INNY';
+		 	$oper_fix['POLAT']='POLSAT';
+		 	$oper_fix['NA_KART%']='INNY';
+		 	$oper_fix['%BRAK%DANYCH%']='NIEWIADOMO';
+		 	$oper_fix['%CYFROWA%NAZIEMNA%']='DVBC';
+		 	$oper_fix['KABL__WKA']='INNY';
+		 	$oper_fix['%YOUTUBE%']='YOUTUBE';
+		 	$oper_fix['_']='NIEWIADOMO';
+
+		 	
+
+	 		  foreach($oper_fix as $filtr=>$set) {
+		 		  $sqlList[]="update USERS2_MARKETING set I_OPER='".$set."' where I_OPER like '".$filtr."'" ;
+		 		  $sqlList[]="update USERS2_MARKETING set TV_OPER='".$set."' where TV_OPER like '".$filtr."'" ;
+		 		  $sqlList[]="update USERS2_MARKETING set T_OPER='".$set."' where T_OPER like '".$filtr."'" ;
+	 		  }
+	 			
+ 			}
 
 
  			{ //stworzenie widoku bledow w USERS2_MARKETING dot budynkow
@@ -358,16 +397,16 @@ function STATYSTYKA_TABELE() {
 			 $res_OPERS=$db->query($sql_OPERS);
 			 while($row_OPERS=$db->fetch($res_OPERS)) {
 				if(strlen($row_OPERS->OPERS)>0) 
-					if(!in_array(strtolower(preg_replace('/[^a-zA-Z0-9\-_]/','_',$row_OPERS->OPERS), $COLSFORSTATS_OPERS)))
-						 if(!in_array(strtoupper(preg_replace('/[^a-zA-Z0-9\-_]/','_',$row_OPERS->OPERS), $COLSFORSTATS_OPERS)))
-						 	if(!in_array(preg_replace('/[^a-zA-Z0-9\-_]/','_',$row_OPERS->OPERS, $COLSFORSTATS_OPERS))) {
+					if(!in_array(strtolower(preg_replace('/[^a-zA-Z0-9_\-]/','_',$row_OPERS->OPERS), $COLSFORSTATS_OPERS)))
+						 if(!in_array(strtoupper(preg_replace('/[^a-zA-Z0-9_\-]/','_',$row_OPERS->OPERS), $COLSFORSTATS_OPERS)))
+						 	if(!in_array(preg_replace('/[^a-zA-Z0-9_\-]/','_',$row_OPERS->OPERS, $COLSFORSTATS_OPERS))) {
 							 	//echo "dodaje ".strtoupper(preg_replace('/[^a-zA-Z0-9\-_]/','_',$row_OPERS->OPERS));
-						 		$COLSFORSTATS_OPERS[]=strtoupper(preg_replace('/[^a-zA-Z0-9\-_]/','_',$row_OPERS->OPERS));
+						 		$COLSFORSTATS_OPERS[]=strtoupper(preg_replace('/[^a-zA-Z0-9_]/','_',$row_OPERS->OPERS));
 						 	}
-				if($row_OPERS->OPERS!=preg_replace('/[^a-zA-Z0-9\-_]/','_',$row_OPERS->OPERS)) {
+				if($row_OPERS->OPERS!=preg_replace('/[^a-zA-Z0-9_\-]/','_',$row_OPERS->OPERS)) {
 					//aktualizacja w bazie nazwy operatora aby byla bez dziwnych znakow
 					foreach($COLSFORSTATS as $FFS) {
-						$sql_upd="update USERS2_MARKETING set `{$FFS}_OPER`='".strtoupper(preg_replace('/[^a-zA-Z0-9\-_]/','_',$row_OPERS->OPERS))."' where `{$FFS}_OPER`='".$row_OPERS->OPERS."'";
+						$sql_upd="update USERS2_MARKETING set `{$FFS}_OPER`='".strtoupper(preg_replace('/[^a-zA-Z0-9_\-]/','_',$row_OPERS->OPERS))."' where `{$FFS}_OPER`='".$row_OPERS->OPERS."'";
 						$res = $db->query($sql_upd);
 						if ($db->has_errors()) {
 							$errors = true;
@@ -466,7 +505,7 @@ function STATYSTYKA_TABELE() {
 				where
 					USERS2_MARKETING.A_STATUS!='DELETED'
 					and BUILDINGS.A_STATUS!='DELETED'
-				group by USERS2_MARKETING.T_TELBOX_BUILDING_IN
+				group by USERS2_MARKETING.T_TELBOX_BUILDING_IN and 1=1
 				order by USERS2_MARKETING.M_REWIR DESC, USERS2_MARKETING.T_TELBOX_BUILDING_IN
 			";
 			$sqlList[] = " create table `USERS2_MARKETING_OVERWIEV` \n {$sql} \n limit 1";

Some files were not shown because too many files changed in this diff