Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
dolibarr
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Software_Artifact_Infrastructure_Repository
dolibarr
Commits
cd11ccbe
Commit
cd11ccbe
authored
8 years ago
by
Xebax
Browse files
Options
Downloads
Patches
Plain Diff
Add Members to the REST API.
parent
02a978bc
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
htdocs/adherents/class/api_members.class.php
+369
-0
369 additions, 0 deletions
htdocs/adherents/class/api_members.class.php
htdocs/api/index.php
+7
-4
7 additions, 4 deletions
htdocs/api/index.php
with
376 additions
and
4 deletions
htdocs/adherents/class/api_members.class.php
0 → 100644
+
369
−
0
View file @
cd11ccbe
<?php
/* Copyright (C) 2016 Xebax Christy <xebax@wanadoo.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
use
Luracast\Restler\RestException
;
require_once
DOL_DOCUMENT_ROOT
.
'/adherents/class/adherent.class.php'
;
require_once
DOL_DOCUMENT_ROOT
.
'/adherents/class/cotisation.class.php'
;
/**
* API class for members
*
* @access protected
* @class DolibarrApiAccess {@requires user,external}
*/
class
Members
extends
DolibarrApi
{
/**
* @var array $FIELDS Mandatory fields, checked when create and update object
*/
static
$FIELDS
=
array
(
'morphy'
,
'typeid'
);
/**
* Constructor
*/
function
__construct
()
{
global
$db
,
$conf
;
$this
->
db
=
$db
;
}
/**
* Get properties of a member object
*
* Return an array with member informations
*
* @param int $id ID of member
* @return array|mixed data without useless information
*
* @throws RestException
*/
function
get
(
$id
)
{
if
(
!
DolibarrApiAccess
::
$user
->
rights
->
adherent
->
lire
)
{
throw
new
RestException
(
401
);
}
$member
=
new
Adherent
(
$this
->
db
);
$result
=
$member
->
fetch
(
$id
);
if
(
!
$result
)
{
throw
new
RestException
(
404
,
'member not found'
);
}
if
(
!
DolibarrApi
::
_checkAccessToResource
(
'adherent'
,
$member
->
id
))
{
throw
new
RestException
(
401
,
'Access not allowed for login '
.
DolibarrApiAccess
::
$user
->
login
);
}
return
$this
->
_cleanObjectDatas
(
$member
);
}
/**
* List members
*
* Get a list of members
*
* @param string $typeid ID of the type of member
* @param string $login To filter the members by login
* @param string $name To filter the members by name (firstname, lastname or company name matching the filter)
* @param string $sortfield Sort field
* @param string $sortorder Sort order
* @param int $limit Limit for list
* @param int $page Page number
* @return array Array of member objects
*
* @throws RestException
*/
function
index
(
$typeid
=
''
,
$login
=
''
,
$name
=
''
,
$sortfield
=
"a.rowid"
,
$sortorder
=
'ASC'
,
$limit
=
0
,
$page
=
0
)
{
global
$db
,
$conf
;
$obj_ret
=
array
();
if
(
!
DolibarrApiAccess
::
$user
->
rights
->
adherent
->
lire
)
{
throw
new
RestException
(
401
);
}
$sql
=
"SELECT a.rowid"
;
$sql
.
=
" FROM "
.
MAIN_DB_PREFIX
.
"adherent as a"
;
$sql
.
=
' WHERE a.entity IN ('
.
getEntity
(
'adherent'
,
1
)
.
')'
;
if
(
!
empty
(
$typeid
))
{
$sql
.
=
' AND a.fk_adherent_type='
.
$typeid
;
}
if
(
!
empty
(
$login
))
{
$sql
.
=
" AND a.login LIKE '%"
.
$login
.
"%'"
;
}
if
(
!
empty
(
$name
))
{
$sql
.
=
" AND (a.firstname LIKE '%"
.
$name
.
"%' OR a.lastname LIKE '%"
.
$name
.
"%' OR a.societe LIKE '%"
.
$name
.
"%')"
;
}
$nbtotalofrecords
=
0
;
if
(
empty
(
$conf
->
global
->
MAIN_DISABLE_FULL_SCANLIST
))
{
$result
=
$db
->
query
(
$sql
);
$nbtotalofrecords
=
$db
->
num_rows
(
$result
);
}
$sql
.
=
$db
->
order
(
$sortfield
,
$sortorder
);
if
(
$limit
)
{
if
(
$page
<
0
)
{
$page
=
0
;
}
$offset
=
$limit
*
$page
;
$sql
.
=
$db
->
plimit
(
$limit
+
1
,
$offset
);
}
$result
=
$db
->
query
(
$sql
);
if
(
$result
)
{
$i
=
0
;
$num
=
$db
->
num_rows
(
$result
);
while
(
$i
<
$num
)
{
$obj
=
$db
->
fetch_object
(
$result
);
$member
=
new
Adherent
(
$this
->
db
);
if
(
$member
->
fetch
(
$obj
->
rowid
))
{
$obj_ret
[]
=
$this
->
_cleanObjectDatas
(
$member
);
}
$i
++
;
}
}
else
{
throw
new
RestException
(
503
,
'Error when retrieve member list : '
.
$member
->
error
);
}
if
(
!
count
(
$obj_ret
))
{
throw
new
RestException
(
404
,
'No member found'
);
}
return
$obj_ret
;
}
/**
* Create member object
*
* @param array $request_data Request data
* @return int ID of member
*/
function
post
(
$request_data
=
null
)
{
if
(
!
DolibarrApiAccess
::
$user
->
rights
->
adherent
->
creer
)
{
throw
new
RestException
(
401
);
}
// Check mandatory fields
$result
=
$this
->
_validate
(
$request_data
);
$member
=
new
Adherent
(
$this
->
db
);
foreach
(
$request_data
as
$field
=>
$value
)
{
$member
->
$field
=
$value
;
}
if
(
$member
->
create
(
DolibarrApiAccess
::
$user
)
<
0
)
{
throw
new
RestException
(
503
,
'Error when create member : '
.
$member
->
error
);
}
return
$member
->
id
;
}
/**
* Update member
*
* @param int $id ID of member to update
* @param array $request_data Datas
* @return int
*/
function
patch
(
$id
,
$request_data
=
null
)
{
if
(
!
DolibarrApiAccess
::
$user
->
rights
->
adherent
->
creer
)
{
throw
new
RestException
(
401
);
}
$member
=
new
Adherent
(
$this
->
db
);
$result
=
$member
->
fetch
(
$id
);
if
(
!
$result
)
{
throw
new
RestException
(
404
,
'member not found'
);
}
if
(
!
DolibarrApi
::
_checkAccessToResource
(
'member'
,
$member
->
id
))
{
throw
new
RestException
(
401
,
'Access not allowed for login '
.
DolibarrApiAccess
::
$user
->
login
);
}
foreach
(
$request_data
as
$field
=>
$value
)
{
// Process the status separately because it must be updated using
// the validate() and resiliate() methods of the class Adherent.
if
(
$field
==
'statut'
)
{
if
(
$value
==
'0'
)
{
$result
=
$member
->
resiliate
(
DolibarrApiAccess
::
$user
);
if
(
$result
<
0
)
{
throw
new
RestException
(
500
,
'Error when resiliating member: '
.
$member
->
error
);
}
}
else
if
(
$value
==
'1'
)
{
$result
=
$member
->
validate
(
DolibarrApiAccess
::
$user
);
if
(
$result
<
0
)
{
throw
new
RestException
(
500
,
'Error when validating member: '
.
$member
->
error
);
}
}
}
else
{
$member
->
$field
=
$value
;
}
}
// If there is no error, update() returns the number of affected rows
// so if the update is a no op, the return value is zero.
if
(
$member
->
update
(
DolibarrApiAccess
::
$user
)
>=
0
)
return
$this
->
get
(
$id
);
return
false
;
}
/**
* Delete member
*
* @param int $id member ID
* @return array
*/
function
delete
(
$id
)
{
if
(
!
DolibarrApiAccess
::
$user
->
rights
->
adherent
->
supprimer
)
{
throw
new
RestException
(
401
);
}
$member
=
new
Adherent
(
$this
->
db
);
$result
=
$member
->
fetch
(
$id
);
if
(
!
$result
)
{
throw
new
RestException
(
404
,
'member not found'
);
}
if
(
!
DolibarrApi
::
_checkAccessToResource
(
'member'
,
$member
->
id
))
{
throw
new
RestException
(
401
,
'Access not allowed for login '
.
DolibarrApiAccess
::
$user
->
login
);
}
// The Adherent::delete() method uses the global variable $user.
global
$user
;
$user
=
DolibarrApiAccess
::
$user
;
if
(
!
$member
->
delete
(
$member
->
id
))
{
throw
new
RestException
(
401
,
'error when deleting member'
);
}
return
array
(
'success'
=>
array
(
'code'
=>
200
,
'message'
=>
'member deleted'
)
);
}
/**
* Validate fields before creating an object
*
* @param array $data Data to validate
* @return array
*
* @throws RestException
*/
function
_validate
(
$data
)
{
$member
=
array
();
foreach
(
Members
::
$FIELDS
as
$field
)
{
if
(
!
isset
(
$data
[
$field
]))
throw
new
RestException
(
400
,
"
$field
field missing"
);
$member
[
$field
]
=
$data
[
$field
];
}
return
$member
;
}
/**
* Clean sensible object datas
*
* @param object $object Object to clean
* @return array Array of cleaned object properties
*
* @todo use an array for properties to clean
*
*/
function
_cleanObjectDatas
(
$object
)
{
$object
=
parent
::
_cleanObjectDatas
(
$object
);
// Remove the subscriptions because they are handled as a subresource.
unset
(
$object
->
subscriptions
);
return
$object
;
}
/**
* List subscriptions of a member
*
* Get a list of subscriptions
*
* @param int $id ID of member
* @return array Array of subscription objects
*
* @throws RestException
*
* @url GET {id}/subscriptions
*/
function
getSubscriptions
(
$id
)
{
$obj_ret
=
array
();
if
(
!
DolibarrApiAccess
::
$user
->
rights
->
adherent
->
cotisation
->
lire
)
{
throw
new
RestException
(
401
);
}
$member
=
new
Adherent
(
$this
->
db
);
$result
=
$member
->
fetch
(
$id
);
if
(
!
$result
)
{
throw
new
RestException
(
404
,
'member not found'
);
}
$obj_ret
=
array
();
foreach
(
$member
->
subscriptions
as
$subscription
)
{
$obj_ret
[]
=
$this
->
_cleanObjectDatas
(
$subscription
);
}
return
$obj_ret
;
}
/**
* Add a subscription for a member
*
* @param int $id ID of member
* @param int $start_date Start date {@from body} {@type timestamp}
* @param int $end_date End date {@from body} {@type timestamp}
* @param float $amount Amount (may be 0) {@from body}
* @param string $label Label {@from body}
* @return int ID of subscription
*
* @url POST {id}/subscriptions
*/
function
createSubscription
(
$id
,
$start_date
,
$end_date
,
$amount
,
$label
=
''
)
{
if
(
!
DolibarrApiAccess
::
$user
->
rights
->
adherent
->
cotisation
->
creer
)
{
throw
new
RestException
(
401
);
}
$member
=
new
Adherent
(
$this
->
db
);
$result
=
$member
->
fetch
(
$id
);
if
(
!
$result
)
{
throw
new
RestException
(
404
,
'member not found'
);
}
return
$member
->
cotisation
(
$start_date
,
$amount
,
0
,
''
,
$label
,
''
,
''
,
''
,
$end_date
);
}
}
This diff is collapsed.
Click to expand it.
htdocs/api/index.php
+
7
−
4
View file @
cd11ccbe
...
...
@@ -89,16 +89,19 @@ foreach ($modulesdir as $dir)
if
(
$module
==
'propale'
)
{
$moduledirforclass
=
'comm/propal'
;
$moduleforperm
=
'propal'
;
}
}
elseif
(
$module
==
'agenda'
)
{
$moduledirforclass
=
'comm/action'
;
}
}
elseif
(
$module
==
'adherent'
)
{
$moduledirforclass
=
'adherents'
;
}
elseif
(
$module
==
'categorie'
)
{
$moduledirforclass
=
'categories'
;
}
}
elseif
(
$module
==
'facture'
)
{
$moduledirforclass
=
'compta/facture'
;
}
}
// Defined if module is enabled
$enabled
=
true
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment