19 use Luracast\Restler\RestException;
 
   37   public static $FIELDS = array(
 
   54     require_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
 
   55     require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
 
   72   public function get($id, $includecount = 0, $includeroles = 0)
 
   74     if (!DolibarrApiAccess::$user->rights->societe->contact->lire) {
 
   75       throw new RestException(401, 
'No permission to read contacts');
 
   79       $result = $this->contact->initAsSpecimen();
 
   81       $result = $this->contact->fetch($id);
 
   85       throw new RestException(404, 
'Contact not found');
 
   89       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
   93       $this->contact->load_ref_elements();
 
   97       $this->contact->fetchRoles();
 
  101       $this->contact->getNoEmail();
 
  120   public function getByEmail($email, $includecount = 0, $includeroles = 0)
 
  122     if (!DolibarrApiAccess::$user->rights->societe->contact->lire) {
 
  123       throw new RestException(401, 
'No permission to read contacts');
 
  127       $result = $this->contact->initAsSpecimen();
 
  129       $result = $this->contact->fetch(
'', 
'', 
'', $email);
 
  133       throw new RestException(404, 
'Contact not found');
 
  137       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
  141       $this->contact->load_ref_elements();
 
  145       $this->contact->fetchRoles();
 
  149       $this->contact->getNoEmail();
 
  173   public function index($sortfield = 
"t.rowid", $sortorder = 
'ASC', $limit = 100, $page = 0, $thirdparty_ids = 
'', $category = 0, $sqlfilters = 
'', $includecount = 0, $includeroles = 0)
 
  179     if (!DolibarrApiAccess::$user->rights->societe->contact->lire) {
 
  180       throw new RestException(401, 
'No permission to read contacts');
 
  184     $socids = DolibarrApiAccess::$user->socid ? DolibarrApiAccess::$user->socid : $thirdparty_ids;
 
  188     if (!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) {
 
  189       $search_sale = DolibarrApiAccess::$user->id;
 
  192     $sql = 
"SELECT t.rowid";
 
  193     $sql .= 
" FROM ".MAIN_DB_PREFIX.
"socpeople as t";
 
  195       $sql .= 
", ".MAIN_DB_PREFIX.
"categorie_contact as c";
 
  197     $sql .= 
" LEFT JOIN ".MAIN_DB_PREFIX.
"socpeople_extrafields as te ON te.fk_object = t.rowid";
 
  198     if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) {
 
  200       $sql .= 
", ".MAIN_DB_PREFIX.
"societe_commerciaux as sc";
 
  202     $sql .= 
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe as s ON t.fk_soc = s.rowid";
 
  203     $sql .= 
' WHERE t.entity IN ('.getEntity(
'contact').
')';
 
  205       $sql .= 
" AND t.fk_soc IN (".$this->db->sanitize($socids).
")";
 
  208     if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) {
 
  209       $sql .= 
" AND t.fk_soc = sc.fk_soc";
 
  211     if ($search_sale > 0) {
 
  212       $sql .= 
" AND s.rowid = sc.fk_soc"; 
 
  215     if ($search_sale > 0) {
 
  216       $sql .= 
" AND sc.fk_user = ".((int) $search_sale);
 
  221       $sql .= 
" AND c.fk_categorie = ".((int) $category);
 
  222       $sql .= 
" AND c.fk_socpeople = t.rowid ";
 
  229         throw new RestException(503, 
'Error when validating parameter sqlfilters -> '.$errormessage);
 
  231       $regexstring = 
'\(([^:\'\(\)]+:[^:\'\(\)]+:[^\(\)]+)\)';
 
  232       $sql .= 
" AND (".preg_replace_callback(
'/'.$regexstring.
'/', 
'DolibarrApi::_forge_criteria_callback', $sqlfilters).
")";
 
  235     $sql .= $this->
db->order($sortfield, $sortorder);
 
  241       $offset = $limit * $page;
 
  243       $sql .= $this->
db->plimit($limit + 1, $offset);
 
  245     $result = $this->
db->query($sql);
 
  247       $num = $this->
db->num_rows($result);
 
  248       $min = min($num, ($limit <= 0 ? $num : $limit));
 
  251         $obj = $this->
db->fetch_object($result);
 
  252         $contact_static = 
new Contact($this->
db);
 
  253         if ($contact_static->fetch($obj->rowid)) {
 
  254           $contact_static->fetchRoles();
 
  256             $contact_static->load_ref_elements();
 
  259             $contact_static->fetchRoles();
 
  262             $contact_static->getNoEmail();
 
  271       throw new RestException(503, 
'Error when retrieve contacts : '.$sql);
 
  273     if (!count($obj_ret)) {
 
  274       throw new RestException(404, 
'Contacts not found');
 
  285   public function post($request_data = 
null)
 
  287     if (!DolibarrApiAccess::$user->rights->societe->contact->creer) {
 
  288       throw new RestException(401, 
'No permission to create/update contacts');
 
  291     $result = $this->
_validate($request_data);
 
  293     foreach ($request_data as $field => $value) {
 
  294       $this->contact->$field = $value;
 
  296     if ($this->contact->create(DolibarrApiAccess::$user) < 0) {
 
  297       throw new RestException(500, 
"Error creating contact", array_merge(array($this->contact->error), $this->contact->errors));
 
  299     if (
isModEnabled(
'mailing') && !empty($this->contact->email) && isset($this->contact->no_email)) {
 
  300       $this->contact->setNoEmail($this->contact->no_email);
 
  302     return $this->contact->id;
 
  312   public function put($id, $request_data = 
null)
 
  314     if (!DolibarrApiAccess::$user->rights->societe->contact->creer) {
 
  315       throw new RestException(401, 
'No permission to create/update contacts');
 
  318     $result = $this->contact->fetch($id);
 
  320       throw new RestException(404, 
'Contact not found');
 
  324       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
  327     foreach ($request_data as $field => $value) {
 
  328       if ($field == 
'id') {
 
  331       $this->contact->$field = $value;
 
  334     if (
isModEnabled(
'mailing') && !empty($this->contact->email) && isset($this->contact->no_email)) {
 
  335       $this->contact->setNoEmail($this->contact->no_email);
 
  338     if ($this->contact->update($id, DolibarrApiAccess::$user, 1, 
'update')) {
 
  339       return $this->
get($id);
 
  351   public function delete($id)
 
  353     if (!DolibarrApiAccess::$user->rights->societe->contact->supprimer) {
 
  354       throw new RestException(401, 
'No permission to delete contacts');
 
  356     $result = $this->contact->fetch($id);
 
  358       throw new RestException(404, 
'Contact not found');
 
  362       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
  364     $this->contact->oldcopy = clone $this->contact;
 
  365     return $this->contact->delete();
 
  383     if (!isset($request_data[
"login"])) {
 
  384       throw new RestException(400, 
"login field missing");
 
  386     if (!isset($request_data[
"password"])) {
 
  387       throw new RestException(400, 
"password field missing");
 
  390     if (!DolibarrApiAccess::$user->rights->societe->contact->lire) {
 
  391       throw new RestException(401, 
'No permission to read contacts');
 
  393     if (!DolibarrApiAccess::$user->rights->user->user->creer) {
 
  394       throw new RestException(401, 
'No permission to create user');
 
  398     $contact->fetch($id);
 
  399     if ($contact->id <= 0) {
 
  400       throw new RestException(404, 
'Contact not found');
 
  404       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
  408     $login = $request_data[
"login"];
 
  409     $password = $request_data[
"password"];
 
  410     $useraccount = 
new User($this->
db);
 
  411     $result = $useraccount->create_from_contact($contact, $login, $password);
 
  413       throw new RestException(500, 
"User not created");
 
  416     $useraccount->setPassword($useraccount, $password);
 
  434   public function getCategories($id, $sortfield = 
"s.rowid", $sortorder = 
'ASC', $limit = 0, $page = 0)
 
  436     if (!DolibarrApiAccess::$user->rights->categorie->lire) {
 
  437       throw new RestException(401);
 
  442     $result = $categories->getListForItem($id, 
'contact', $sortfield, $sortorder, $limit, $page);
 
  444     if (empty($result)) {
 
  445       throw new RestException(404, 
'No category found');
 
  449       throw new RestException(503, 
'Error when retrieve category list : '.$categories->error);
 
  470     if (!DolibarrApiAccess::$user->rights->societe->contact->creer) {
 
  471       throw new RestException(401, 
'Insufficient rights');
 
  474     $result = $this->contact->fetch($id);
 
  476       throw new RestException(404, 
'Contact not found');
 
  479     $result = $category->fetch($category_id);
 
  481       throw new RestException(404, 
'category not found');
 
  485       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
  488       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
  491     $category->add_type($this->contact, 
'contact');
 
  510     if (!DolibarrApiAccess::$user->rights->societe->contact->creer) {
 
  511       throw new RestException(401, 
'Insufficient rights');
 
  514     $result = $this->contact->fetch($id);
 
  516       throw new RestException(404, 
'Contact not found');
 
  519     $result = $category->fetch($category_id);
 
  521       throw new RestException(404, 
'category not found');
 
  525       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
  528       throw new RestException(401, 
'Access not allowed for login '.DolibarrApiAccess::$user->login);
 
  531     $category->del_type($this->contact, 
'contact');
 
  546     $object = parent::_cleanObjectDatas($object);
 
  548     unset($object->total_ht);
 
  549     unset($object->total_tva);
 
  550     unset($object->total_localtax1);
 
  551     unset($object->total_localtax2);
 
  552     unset($object->total_ttc);
 
  554     unset($object->note);
 
  555     unset($object->lines);
 
  556     unset($object->thirdparty);
 
  571     foreach (Contacts::$FIELDS as $field) {
 
  572       if (!isset($data[$field])) {
 
  573         throw new RestException(400, 
"$field field missing");
 
  575       $contact[$field] = $data[$field];
 
Class to manage categories.
static _checkAccessToResource($resource, $resource_id=0, $dbtablename='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid')
Check access by user to a given resource.
_checkFilters($sqlfilters, &$error='')
Return if a $sqlfilters parameter is valid.
Class to manage Dolibarr users.
isModEnabled($module)
Is Dolibarr module enabled.
$conf db
API class for accounts.