Sfoglia il codice sorgente

#1 TableAjax use TablaAcl to create item

Piotr Labudda 11 anni fa
parent
commit
fe59ad1e52
2 ha cambiato i file con 59 aggiunte e 29 eliminazioni
  1. 44 0
      SE/se-lib/TableAcl.php
  2. 15 29
      SE/se-lib/TableAjax.php

+ 44 - 0
SE/se-lib/TableAcl.php

@@ -932,6 +932,50 @@ class TableAcl {
 		return $arr;
 	}
 
+	public function convertObjectFromUserInput($args, $type = 'array_by_id', $prefix = 'f') {
+		$obj = new stdClass();
+		$fields = $this->getFields();
+		foreach ($fields as $kID => $vField) {
+			if (!$this->isAllowed($kID, 'C')) {
+				continue;
+			}
+			if (array_key_exists("f{$kID}", $args)) {
+				$obj->{$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"
+					$obj->{$vField['name']} = $this->fixEmptyValueFromUser($kID);
+				}
+			}
+		}
+
+		{// add DefaultAclGroup if no create perms ('C')
+			$defaultAclGroup = User::getDefaultAclGroup();
+			if ($defaultAclGroup) {
+				foreach ($fields as $kID => $vField) {
+					if (!$this->isAllowed($kID, 'C')) {
+						if ($vField['name'] == 'A_ADM_COMPANY') {
+							$obj->{$vField['name']} = $defaultAclGroup;
+						}
+						else if ($vField['name'] == 'A_CLASSIFIED') {
+							$obj->{$vField['name']} = $defaultAclGroup;
+						}
+					}
+				}
+			}
+		}
+		return $obj;
+	}
+
+	public function getItem($id) {
+		$ds = $this->getDataSource();
+		return $ds->getItem($id);
+	}
+
+	public function addItem($item) {
+		$ds = $this->getDataSource();
+		return $ds->addItem($item);
+	}
+
 	public function getExportDataSource($cols = array()) {
 		$exportFieldList = $this->getExportFieldList();
 		if (!empty($cols)) {

+ 15 - 29
SE/se-lib/TableAjax.php

@@ -3632,37 +3632,23 @@ jQuery(document).ready(function(){
 		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">TODO: save ID(' . $id . ') (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($args);echo'</pre>';}
 		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">acl (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($this->_acl);echo'</pre>';}
 
-		$sqlObj = new stdClass();
-		$fields = $this->_acl->getFields();
-		if($DBG){echo'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;">fields (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($fields);echo'</pre>';}
-		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}"];
+		try {
+			$item = $this->_acl->convertObjectFromUserInput($args, $type = 'array_by_id', $prefix = 'f');
 
-				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'<pre style="max-height:200px;overflow:auto;border:1px solid red;text-align:left;"> (' . __CLASS__ . '::' . __FUNCTION__ . ':' . __LINE__ . '): ';print_r($sqlObj);echo'</pre>';}
+			// TODO: if empty $obj - return error - no data sent from user
+			$createdId = $this->_acl->addItem($item);
 
-		{// 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;
-						}
-					}
-				}
-			}
+			$response->type = 'success';
+			$response->msg = "Utworzono pomyślnie rekord nr {$retID}";
+			$response->id = $createdId;
+			$response->record = $this->_acl->getItem($createdId);
+			return $response;
+
+		} catch (Exception $e) {
+			$response = new stdClass();
+			$response->type = 'error';
+			$response->msg = $e->getMessage();
+			return $response;
 		}
 
 		$retID = $this->_dataSource->addItem($sqlObj);