Fix permission on external user
This commit is contained in:
parent
667481acd5
commit
60711f415d
@ -634,9 +634,10 @@ class ProductFournisseur extends Product
|
|||||||
* @param string $sortorder Sort order
|
* @param string $sortorder Sort order
|
||||||
* @param int $limit Limit
|
* @param int $limit Limit
|
||||||
* @param int $offset Offset
|
* @param int $offset Offset
|
||||||
|
* @param int $socid Filter on a third party id
|
||||||
* @return array Array of Products with new properties to define supplier price
|
* @return array Array of Products with new properties to define supplier price
|
||||||
*/
|
*/
|
||||||
public function list_product_fournisseur_price($prodid, $sortfield = '', $sortorder = '', $limit = 0, $offset = 0)
|
public function list_product_fournisseur_price($prodid, $sortfield = '', $sortorder = '', $limit = 0, $offset = 0, $socid = 0)
|
||||||
{
|
{
|
||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
global $conf;
|
global $conf;
|
||||||
@ -652,7 +653,8 @@ class ProductFournisseur extends Product
|
|||||||
$sql .= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."societe as s";
|
$sql .= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp, ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."societe as s";
|
||||||
$sql .= " WHERE pfp.entity IN (".getEntity('productsupplierprice').")";
|
$sql .= " WHERE pfp.entity IN (".getEntity('productsupplierprice').")";
|
||||||
$sql .= " AND pfp.fk_soc = s.rowid AND pfp.fk_product = p.rowid";
|
$sql .= " AND pfp.fk_soc = s.rowid AND pfp.fk_product = p.rowid";
|
||||||
$sql .= " AND s.status=1"; // only enabled company selected
|
$sql .= ($socid > 0 ? ' AND pfp.fk_soc = '.((int) $socid) : '');
|
||||||
|
$sql .= " AND s.status = 1"; // only enabled company selected
|
||||||
$sql .= " AND pfp.fk_product = ".((int) $prodid);
|
$sql .= " AND pfp.fk_product = ".((int) $prodid);
|
||||||
if (empty($sortfield)) {
|
if (empty($sortfield)) {
|
||||||
$sql .= " ORDER BY s.nom, pfp.quantity, pfp.price";
|
$sql .= " ORDER BY s.nom, pfp.quantity, pfp.price";
|
||||||
|
|||||||
@ -574,8 +574,8 @@ class Products extends DolibarrApi
|
|||||||
/**
|
/**
|
||||||
* Get prices per customer for a product
|
* Get prices per customer for a product
|
||||||
*
|
*
|
||||||
* @param int $id ID of product
|
* @param int $id ID of product
|
||||||
* @param string $thirdparty_id Thirdparty id to filter orders of (example '1') {@pattern /^[0-9,]*$/i}
|
* @param string $thirdparty_id Thirdparty id to filter orders of (example '1') {@pattern /^[0-9,]*$/i}
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*
|
*
|
||||||
@ -593,6 +593,11 @@ class Products extends DolibarrApi
|
|||||||
throw new RestException(400, 'API not available: this mode of pricing is not enabled by setup');
|
throw new RestException(400, 'API not available: this mode of pricing is not enabled by setup');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : '';
|
||||||
|
if ($socid > 0 && $socid != $thirdparty_id) {
|
||||||
|
throw new RestException(401, 'Getting prices for all customers or for the customer ID '.$thirdparty_id.' is not allowed for login '.DolibarrApiAccess::$user->login);
|
||||||
|
}
|
||||||
|
|
||||||
$result = $this->product->fetch($id);
|
$result = $this->product->fetch($id);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
throw new RestException(404, 'Product not found');
|
throw new RestException(404, 'Product not found');
|
||||||
@ -700,6 +705,11 @@ class Products extends DolibarrApi
|
|||||||
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : '';
|
||||||
|
if ($socid > 0 && $socid != $fourn_id) {
|
||||||
|
throw new RestException(401, 'Adding purchase price for the supplier ID '.$fourn_id.' is not allowed for login '.DolibarrApiAccess::$user->login);
|
||||||
|
}
|
||||||
|
|
||||||
$result = $this->productsupplier->add_fournisseur(DolibarrApiAccess::$user, $fourn_id, $ref_fourn, $qty);
|
$result = $this->productsupplier->add_fournisseur(DolibarrApiAccess::$user, $fourn_id, $ref_fourn, $qty);
|
||||||
if ($result < 0) {
|
if ($result < 0) {
|
||||||
throw new RestException(500, "Error adding supplier to product : ".$this->db->lasterror());
|
throw new RestException(500, "Error adding supplier to product : ".$this->db->lasterror());
|
||||||
@ -774,9 +784,19 @@ class Products extends DolibarrApi
|
|||||||
{
|
{
|
||||||
global $db, $conf;
|
global $db, $conf;
|
||||||
|
|
||||||
|
if (!DolibarrApiAccess::$user->rights->produit->lire) {
|
||||||
|
throw new RestException(401);
|
||||||
|
}
|
||||||
|
|
||||||
$obj_ret = array();
|
$obj_ret = array();
|
||||||
|
|
||||||
|
// Force id of company for external users
|
||||||
$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : '';
|
$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : '';
|
||||||
|
if ($socid > 0) {
|
||||||
|
if ($supplier != $socid || empty($supplier)) {
|
||||||
|
throw new RestException(401, 'As an external user, you can request only for your supplier id = '.$socid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$sql = "SELECT t.rowid, t.ref, t.ref_ext";
|
$sql = "SELECT t.rowid, t.ref, t.ref_ext";
|
||||||
$sql .= " FROM ".MAIN_DB_PREFIX."product as t";
|
$sql .= " FROM ".MAIN_DB_PREFIX."product as t";
|
||||||
@ -788,12 +808,15 @@ class Products extends DolibarrApi
|
|||||||
$sql .= ' WHERE t.entity IN ('.getEntity('product').')';
|
$sql .= ' WHERE t.entity IN ('.getEntity('product').')';
|
||||||
|
|
||||||
if ($supplier > 0) {
|
if ($supplier > 0) {
|
||||||
$sql .= " AND s.fk_soc = ".$this->db->escape($supplier);
|
$sql .= " AND s.fk_soc = "((int) $supplier);
|
||||||
|
}
|
||||||
|
if ($socid > 0) { // if external user
|
||||||
|
$sql .= " AND s.fk_soc = ".((int) $socid);
|
||||||
}
|
}
|
||||||
$sql .= " AND s.fk_product = t.rowid";
|
$sql .= " AND s.fk_product = t.rowid";
|
||||||
// Select products of given category
|
// Select products of given category
|
||||||
if ($category > 0) {
|
if ($category > 0) {
|
||||||
$sql .= " AND c.fk_categorie = ".$this->db->escape($category);
|
$sql .= " AND c.fk_categorie = ".((int) $category);
|
||||||
$sql .= " AND c.fk_product = t.rowid";
|
$sql .= " AND c.fk_product = t.rowid";
|
||||||
}
|
}
|
||||||
if ($mode == 1) {
|
if ($mode == 1) {
|
||||||
@ -878,6 +901,8 @@ class Products extends DolibarrApi
|
|||||||
throw new RestException(403);
|
throw new RestException(403);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$socid = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : '';
|
||||||
|
|
||||||
$result = $this->product->fetch($id, $ref, $ref_ext, $barcode);
|
$result = $this->product->fetch($id, $ref, $ref_ext, $barcode);
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
throw new RestException(404, 'Product not found');
|
throw new RestException(404, 'Product not found');
|
||||||
@ -891,7 +916,7 @@ class Products extends DolibarrApi
|
|||||||
|
|
||||||
if ($result) {
|
if ($result) {
|
||||||
$product_fourn = new ProductFournisseur($this->db);
|
$product_fourn = new ProductFournisseur($this->db);
|
||||||
$product_fourn_list = $product_fourn->list_product_fournisseur_price($this->product->id, '', '', 0, 0);
|
$product_fourn_list = $product_fourn->list_product_fournisseur_price($this->product->id, '', '', 0, 0, ($socid > 0 ? $socid : 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($product_fourn_list as $tmpobj) {
|
foreach ($product_fourn_list as $tmpobj) {
|
||||||
@ -911,7 +936,9 @@ class Products extends DolibarrApi
|
|||||||
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:color)"
|
* @param string $sqlfilters Other criteria to filter answers separated by a comma. Syntax example "(t.ref:like:color)"
|
||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
* @throws RestException
|
* @throws RestException 401
|
||||||
|
* @throws RestException 404
|
||||||
|
* @throws RestException 503
|
||||||
*
|
*
|
||||||
* @url GET attributes
|
* @url GET attributes
|
||||||
*/
|
*/
|
||||||
@ -976,7 +1003,6 @@ class Products extends DolibarrApi
|
|||||||
* @param int $id ID of Attribute
|
* @param int $id ID of Attribute
|
||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
* @throws RestException
|
|
||||||
* @throws RestException 401
|
* @throws RestException 401
|
||||||
* @throws RestException 404
|
* @throws RestException 404
|
||||||
*
|
*
|
||||||
@ -1020,8 +1046,8 @@ class Products extends DolibarrApi
|
|||||||
* @param string $ref Reference of Attribute
|
* @param string $ref Reference of Attribute
|
||||||
* @return array
|
* @return array
|
||||||
*
|
*
|
||||||
* @throws RestException 500
|
|
||||||
* @throws RestException 401
|
* @throws RestException 401
|
||||||
|
* @throws RestException 404
|
||||||
*
|
*
|
||||||
* @url GET attributes/ref/{ref}
|
* @url GET attributes/ref/{ref}
|
||||||
*/
|
*/
|
||||||
@ -1272,7 +1298,10 @@ class Products extends DolibarrApi
|
|||||||
throw new RestException(401);
|
throw new RestException(401);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT rowid, fk_product_attribute, ref, value FROM ".MAIN_DB_PREFIX."product_attribute_value WHERE ref LIKE '".trim($ref)."' AND fk_product_attribute = ".(int) $id." AND entity IN (".getEntity('product').")";
|
$ref = trim($ref);
|
||||||
|
|
||||||
|
$sql = "SELECT rowid, fk_product_attribute, ref, value FROM ".MAIN_DB_PREFIX."product_attribute_value";
|
||||||
|
$sql .= " WHERE ref LIKE '".$this->db->escape($ref)."' AND fk_product_attribute = ".((int) $id)." AND entity IN (".getEntity('product').")";
|
||||||
|
|
||||||
$query = $this->db->query($sql);
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
@ -1312,7 +1341,10 @@ class Products extends DolibarrApi
|
|||||||
throw new RestException(401);
|
throw new RestException(401);
|
||||||
}
|
}
|
||||||
|
|
||||||
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."product_attribute_value WHERE ref LIKE '".trim($ref)."' AND fk_product_attribute = ".(int) $id." AND entity IN (".getEntity('product').")";
|
$ref = trim($ref);
|
||||||
|
|
||||||
|
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."product_attribute_value";
|
||||||
|
$sql .= " WHERE ref LIKE '".$this->db->escape($ref)."' AND fk_product_attribute = ".((int) $id)." AND entity IN (".getEntity('product').")";
|
||||||
$query = $this->db->query($sql);
|
$query = $this->db->query($sql);
|
||||||
|
|
||||||
if (!$query) {
|
if (!$query) {
|
||||||
@ -1383,11 +1415,13 @@ class Products extends DolibarrApi
|
|||||||
throw new RestException(401);
|
throw new RestException(401);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$ref = trim($ref);
|
||||||
|
|
||||||
$return = array();
|
$return = array();
|
||||||
|
|
||||||
$sql = 'SELECT ';
|
$sql = 'SELECT ';
|
||||||
$sql .= 'v.fk_product_attribute, v.rowid, v.ref, v.value FROM '.MAIN_DB_PREFIX.'product_attribute_value as v';
|
$sql .= 'v.fk_product_attribute, v.rowid, v.ref, v.value FROM '.MAIN_DB_PREFIX.'product_attribute_value as v';
|
||||||
$sql .= " WHERE v.fk_product_attribute IN (SELECT rowid FROM ".MAIN_DB_PREFIX."product_attribute WHERE ref LIKE '".$this->db->escape(trim($ref))."')";
|
$sql .= " WHERE v.fk_product_attribute IN (SELECT rowid FROM ".MAIN_DB_PREFIX."product_attribute WHERE ref LIKE '".$this->db->escape($ref)."')";
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
$resql = $this->db->query($sql);
|
||||||
|
|
||||||
@ -1428,7 +1462,7 @@ class Products extends DolibarrApi
|
|||||||
}
|
}
|
||||||
|
|
||||||
$objectval = new ProductAttributeValue($this->db);
|
$objectval = new ProductAttributeValue($this->db);
|
||||||
$objectval->fk_product_attribute = $id;
|
$objectval->fk_product_attribute = ((int) $id);
|
||||||
$objectval->ref = $ref;
|
$objectval->ref = $ref;
|
||||||
$objectval->value = $value;
|
$objectval->value = $value;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user