소스 검색

add new field (is_event) to basic services table and checkPermission fixes

szollosil 1 년 전
부모
커밋
276c96256d

+ 64 - 2
custom/bbus/class/api_bbus.class.php

@@ -602,13 +602,17 @@ class BBus extends DolibarrApi
 				$basicServices[] = $row->basic_service;
 			}
 		}
-		$sqlBasicServicesTable = "SELECT basic_service_id, ref FROM llx_bbus_basicServices ORDER BY basic_service_id ASC";
+		$sqlBasicServicesTable = "SELECT basic_service_id, ref, is_event FROM llx_bbus_basicServices ORDER BY basic_service_id ASC";
 		$resultBasicServicesObj = $db->query($sqlBasicServicesTable);
 		if ($db->num_rows($resultBasicServicesObj) > 0) {
 			while ($bsrow = $db->fetch_object($resultBasicServicesObj)) {
 				foreach ($basicServices as $item) {
 					if ($bsrow->basic_service_id == $item && $item != 2) {
-						$permissionArray[$item] = $bsrow->ref;
+						if ($bsrow->is_event == '1' && $this->isAvailablePlaces($item)) {
+							$permissionArray[$item] = $bsrow->ref;
+						} elseif ($bsrow->is_event != '1') {
+							$permissionArray[$item] = $bsrow->ref;
+						}
 					}
 				}
 			}
@@ -618,6 +622,64 @@ class BBus extends DolibarrApi
 		return $permissionArray;
 	}
 
+	private function isAvailablePlaces($item)
+	{
+		global $conf;
+		$available = false;
+		$server_host = $this->getServerHost($item);
+		$sqlProducts = "SELECT fk_object, basic_service FROM llx_product_extrafields WHERE basic_service = '{$item}'";
+		$resultProducts = $this->db->query($sqlProducts);
+		if ($this->db->num_rows($resultProducts) > 0) {
+			while ($prodductsRow = $this->db->fetch_object($resultProducts)) {
+				$productsArray[$prodductsRow->fk_object] = $prodductsRow->basic_service;
+			}
+			if (!empty($productsArray)) {
+				foreach ($productsArray as $key => $value) {
+					if ($server_host == $conf->global->LOCAL_SERVER_HOST) {
+						$availableResult = $this->localCheckAvailablePlacesForCheckPermission($key);
+					} elseif ($server_host == $conf->global->CURL_SERVER_HOST) {
+						$postFields = '{"product_id":"' . $key . '"}';
+						$availableResult = $this->curlRunner('bbus/localCheckAvailablePlacesForCheckPermission', $postFields, 'POST', false);
+					}
+					if ($availableResult == 1) {
+						$available = true;
+					}
+				}
+			}
+		};
+		return $available;
+	}
+
+	/**
+	 * localCheckAvailablePlacesForCheckPermission
+	 *
+	 * @param  int $product_id			Product rowid
+	 *
+	 * @return array|mixed Data without useless information
+	 *
+	 * @url POST localCheckAvailablePlacesForCheckPermission
+	 *
+	 * @throws RestException 401
+	 * @throws RestException 403
+	 * @throws RestException 404
+	 */
+	public function localCheckAvailablePlacesForCheckPermission($product_id)
+	{
+		$sql = "SELECT 
+			ac.id
+			FROM llx_actioncomm as ac 
+			LEFT JOIN llx_actioncomm_extrafields as ace ON ace.fk_object = ac.id
+			INNER JOIN llx_eventwizard_eventdetails as ed ON ac.fk_element = ed.rowid
+			INNER JOIN llx_eventwizard_eventproduct as ep ON ep.fk_eventdetails = ac.fk_element
+			WHERE ac.code = 'AC_EVENT'
+			AND ep.fk_product = {$product_id}
+			AND ac.datep > NOW() 
+			ORDER BY ac.datep ASC";
+			$result = $this->db->query($sql);
+		return $this->db->num_rows($result) > 0 ? 1 : 0;
+		
+	}
+
 	/**
 	 * Create naplo for userlogout
 	 *

+ 2 - 0
custom/bbus/class/basicservices.class.php

@@ -118,12 +118,14 @@ class BasicServices extends CommonObject
 		'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'alwayseditable'=>'1', 'searchall'=>1, 'css'=>'minwidth300', 'cssview'=>'wordbreak', 'help'=>"Help text", 'showoncombobox'=>'2', 'validate'=>'1',),
 		'basic_service_id' => array('type'=>'integer', 'label'=>'BasicServiceId', 'enabled'=>'1', 'position'=>2, 'notnull'=>1, 'visible'=>1,),
 		'server_host' => array('type'=>'varchar(255)', 'label'=>'ServerHost', 'enabled'=>'1', 'position'=>31, 'notnull'=>0, 'visible'=>1, 'arrayofkeyval'=>array('bbus'=>'bbus', 'excelia'=>'excelia'),),
+		'is_event' => array('type'=>'varchar(255)', 'label'=>'isEvent', 'enabled'=>'1', 'position'=>32, 'notnull'=>0, 'visible'=>1, 'arrayofkeyval'=>array('0'=>'No', '1'=>'Yes'),),
 	);
 	public $rowid;
 	public $ref;
 	public $label;
 	public $basic_service_id;
 	public $server_host;
+	public $is_event;
 	// END MODULEBUILDER PROPERTIES
 
 

+ 1 - 1
custom/bbus/class/basicservices.class.php.back

@@ -117,7 +117,7 @@ class BasicServices extends CommonObject
 		'ref' => array('type'=>'varchar(128)', 'label'=>'Ref', 'enabled'=>'1', 'position'=>20, 'notnull'=>1, 'visible'=>1, 'index'=>1, 'searchall'=>1, 'showoncombobox'=>'1', 'validate'=>'1', 'comment'=>"Reference of object"),
 		'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>0, 'visible'=>1, 'alwayseditable'=>'1', 'searchall'=>1, 'css'=>'minwidth300', 'cssview'=>'wordbreak', 'help'=>"Help text", 'showoncombobox'=>'2', 'validate'=>'1',),
 		'basic_service_id' => array('type'=>'integer', 'label'=>'BasicServiceId', 'enabled'=>'1', 'position'=>2, 'notnull'=>1, 'visible'=>1,),
-		'server_host' => array('type'=>'varchar(255)', 'label'=>'ServerHost', 'enabled'=>'1', 'position'=>31, 'notnull'=>0, 'visible'=>1,),
+		'server_host' => array('type'=>'varchar(255)', 'label'=>'ServerHost', 'enabled'=>'1', 'position'=>31, 'notnull'=>0, 'visible'=>1, 'arrayofkeyval'=>array('bbus'=>'bbus', 'excelia'=>'excelia'),),
 	);
 	public $rowid;
 	public $ref;

+ 2 - 1
custom/bbus/sql/llx_bbus_basicservices.sql

@@ -20,6 +20,7 @@ CREATE TABLE llx_bbus_basicservices(
 	ref varchar(128) NOT NULL, 
 	label varchar(255), 
 	basic_service_id integer NOT NULL, 
-	server_host varchar(255)
+	server_host varchar(255), 
+	is_event varchar(255)
 	-- END MODULEBUILDER FIELDS
 ) ENGINE=innodb;