REST API: replace the /product/ API by /products/.

Added some FIXME:
 - the put() method does its job but the API returns an error 500
 - delete() does not work.
This commit is contained in:
Xebax 2016-06-14 21:29:38 +02:00
parent 8cf0bceadd
commit f03d6e1bed

View File

@ -21,14 +21,12 @@
require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
/** /**
* API class for product object * API class for products
* *
* @smart-auto-routing false
* @access protected * @access protected
* @class DolibarrApiAccess {@requires user,external} * @class DolibarrApiAccess {@requires user,external}
*
*/ */
class ProductApi extends DolibarrApi class Products extends DolibarrApi
{ {
/** /**
* @var array $FIELDS Mandatory fields, checked when create and update object * @var array $FIELDS Mandatory fields, checked when create and update object
@ -45,9 +43,6 @@ class ProductApi extends DolibarrApi
/** /**
* Constructor * Constructor
*
* @url product/
*
*/ */
function __construct() function __construct()
{ {
@ -62,20 +57,18 @@ class ProductApi extends DolibarrApi
* Return an array with product informations * Return an array with product informations
* *
* @param int $id ID of product * @param int $id ID of product
* @param string $ref Product ref
* @param string $ref_ext Product ref ext
* @return array|mixed data without useless information * @return array|mixed data without useless information
* *
* @url GET product/{id}
* @throws RestException * @throws RestException
* TODO implement getting a product by ref or by $ref_ext
*/ */
function get($id='', $ref='', $ref_ext='') function get($id)
{ {
if(! DolibarrApiAccess::$user->rights->produit->lire) { if(! DolibarrApiAccess::$user->rights->produit->lire) {
throw new RestException(401); throw new RestException(401);
} }
$result = $this->product->fetch($id,$ref,$ref_ext); $result = $this->product->fetch($id);
if( ! $result ) { if( ! $result ) {
throw new RestException(404, 'Product not found'); throw new RestException(404, 'Product not found');
} }
@ -86,7 +79,7 @@ class ProductApi extends DolibarrApi
$this->product->load_stock(); $this->product->load_stock();
return $this->_cleanObjectDatas($this->product); return $this->_cleanObjectDatas($this->product);
} }
/** /**
@ -96,17 +89,15 @@ class ProductApi extends DolibarrApi
* *
* @param int $mode Use this param to filter list (0 for all, 1 for only product, 2 for only service) * @param int $mode Use this param to filter list (0 for all, 1 for only product, 2 for only service)
* @param mixed $to_sell Filter products to sell (1) or not to sell (0) * @param mixed $to_sell Filter products to sell (1) or not to sell (0)
* @param mixed $to_buy Filter products to nuy (1) or not to buy (0) * @param mixed $to_buy Filter products to buy (1) or not to buy (0)
* @param string $sortfield Sort field * @param string $sortfield Sort field
* @param string $sortorder Sort order * @param string $sortorder Sort order
* @param int $limit Limit for list * @param int $limit Limit for list
* @param int $page Page number * @param int $page Page number
* *
* @return array Array of product objects * @return array Array of product objects
*
* @url GET /product/list
*/ */
function getList($mode=0, $to_sell='', $to_buy='', $sortfield = "p.ref", $sortorder = 'ASC', $limit = 0, $page = 0) { function index($mode=0, $to_sell='', $to_buy='', $sortfield = "p.ref", $sortorder = 'ASC', $limit = 0, $page = 0) {
global $db, $conf; global $db, $conf;
$obj_ret = array(); $obj_ret = array();
@ -169,6 +160,7 @@ class ProductApi extends DolibarrApi
/** /**
* TODO implement this as a filter in /products/
* List products in a category * List products in a category
* *
* Get a list of products * Get a list of products
@ -257,8 +249,6 @@ class ProductApi extends DolibarrApi
* *
* @param array $request_data Request data * @param array $request_data Request data
* @return int ID of product * @return int ID of product
*
* @url POST product/
*/ */
function post($request_data = NULL) function post($request_data = NULL)
{ {
@ -277,7 +267,6 @@ class ProductApi extends DolibarrApi
} }
return $this->product->id; return $this->product->id;
} }
/** /**
@ -286,8 +275,7 @@ class ProductApi extends DolibarrApi
* @param int $id Id of product to update * @param int $id Id of product to update
* @param array $request_data Datas * @param array $request_data Datas
* @return int * @return int
* * FIXME The product is correctluy updated but the API returns an error 500.
* @url PUT product/{id}
*/ */
function put($id, $request_data = NULL) function put($id, $request_data = NULL)
{ {
@ -308,7 +296,7 @@ class ProductApi extends DolibarrApi
$this->product->$field = $value; $this->product->$field = $value;
} }
if($this->product->update($id, DolibarrApiAccess::$user,1,'','','update')) if($this->product->update($id, DolibarrApiAccess::$user,1,'update'))
return $this->get ($id); return $this->get ($id);
return false; return false;
@ -319,12 +307,11 @@ class ProductApi extends DolibarrApi
* *
* @param int $id Product ID * @param int $id Product ID
* @return array * @return array
* * FIXME Deleting a product/service does not work because the Product::delete() method uses a global $user but it is not set.
* @url DELETE product/{id}
*/ */
function delete($id) function delete($id)
{ {
if(! DolibarrApiAccess::$user->rights->product->supprimer) { if(! DolibarrApiAccess::$user->rights->produit->supprimer) {
throw new RestException(401); throw new RestException(401);
} }
$result = $this->product->fetch($id); $result = $this->product->fetch($id);
@ -349,7 +336,7 @@ class ProductApi extends DolibarrApi
function _validate($data) function _validate($data)
{ {
$product = array(); $product = array();
foreach (ProductApi::$FIELDS as $field) { foreach (Products::$FIELDS as $field) {
if (!isset($data[$field])) if (!isset($data[$field]))
throw new RestException(400, "$field field missing"); throw new RestException(400, "$field field missing");
$product[$field] = $data[$field]; $product[$field] = $data[$field];