Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop

This commit is contained in:
Laurent Destailleur 2019-11-16 12:18:13 +01:00
commit 6cf368189f
10 changed files with 407 additions and 81 deletions

View File

@ -489,7 +489,7 @@ class AdherentType extends CommonObject
{
global $langs, $conf;
$sql = "SELECT d.rowid, d.libelle as label, d.morphy, d.statut, d.duration, d.subscription, d.mail_valid, d.note, d.vote";
$sql = "SELECT d.rowid, d.libelle as label, d.morphy, d.statut as status, d.duration, d.subscription, d.mail_valid, d.note, d.vote";
$sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as d";
$sql .= " WHERE d.rowid = ".(int) $rowid;
@ -506,7 +506,8 @@ class AdherentType extends CommonObject
$this->ref = $obj->rowid;
$this->label = $obj->label;
$this->morphy = $obj->morphy;
$this->statut = $obj->statut;
$this->statut = $obj->status; // deprecated
$this->status = $obj->status;
$this->duration = $obj->duration;
$this->duration_value = substr($obj->duration, 0, dol_strlen($obj->duration)-1);
$this->duration_unit = substr($obj->duration, -1);
@ -668,14 +669,43 @@ class AdherentType extends CommonObject
return $result;
}
/**
* getLibStatut
*
* @return string Return status of a type of member
*/
public function getLibStatut()
{
return '';
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Return label of status (activity, closed)
*
* @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
* @return string Label of status
*/
public function getLibStatut($mode = 0)
{
return $this->LibStatut($this->status, $mode);
}
/**
* Return the label of a given status
*
* @param int $status Status id
* @param int $mode 0=Long label, 1=Short label, 2=Picto + Short label, 3=Picto, 4=Picto + Long label, 5=Short label + Picto, 6=Long label + Picto
* @return string Status label
*/
public function LibStatut($status, $mode = 0)
{
// phpcs:enable
global $langs;
$langs->load('companies');
$statusType = 'status4';
if ($status == 0) $statusType = 'status5';
if (empty($this->labelStatus) || empty($this->labelStatusShort))
{
$this->labelStatus[0] = $langs->trans("ActivityCeased");
$this->labelStatus[1] = $langs->trans("InActivity");
$this->labelStatusShort[0] = $langs->trans("ActivityCeased");
$this->labelStatusShort[1] = $langs->trans("InActivity");
}
return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode);
}
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps

View File

@ -226,7 +226,7 @@ if (!$rowid && $action != 'create' && $action != 'edit')
{
//dol_fiche_head('');
$sql = "SELECT d.rowid, d.libelle as label, d.subscription, d.vote, d.statut, d.morphy";
$sql = "SELECT d.rowid, d.libelle as label, d.subscription, d.vote, d.statut as status, d.morphy";
$sql .= " FROM ".MAIN_DB_PREFIX."adherent_type as d";
$sql .= " WHERE d.entity IN (".getEntity('member_type').")";
@ -280,6 +280,7 @@ if (!$rowid && $action != 'create' && $action != 'edit')
$membertype->id = $objp->rowid;
$membertype->ref = $objp->rowid;
$membertype->label = $objp->rowid;
$membertype->status = $objp->status;
print '<tr class="oddeven">';
print '<td>';
@ -294,13 +295,7 @@ if (!$rowid && $action != 'create' && $action != 'edit')
print '</td>';
print '<td class="center">'.yn($objp->subscription).'</td>';
print '<td class="center">'.yn($objp->vote).'</td>';
print '<td class="center">';
if (!empty($objp->statut)) {
print img_picto($langs->trans("InActivity"), 'statut4');
} else {
print img_picto($langs->trans("ActivityCeased"), 'statut5');
}
print '</td>';
print '<td class="center">'.$membertype->getLibStatut(5).'</td>';
if ($user->rights->adherent->configurer)
print '<td class="right"><a href="'.$_SERVER["PHP_SELF"].'?action=edit&rowid='.$objp->rowid.'">'.img_edit().'</a></td>';
else
@ -432,15 +427,7 @@ if ($rowid > 0)
print '<table class="border centpercent">';
print '<tr><td class="titlefield">'.$langs->trans("Status").'</td><td>';
if (!empty($object->statut)) {
print img_picto($langs->trans('TypeStatusActive'), 'statut4').' '.$langs->trans("InActivity");
} else {
print img_picto($langs->trans('TypeStatusInactive'), 'statut5').' '.$langs->trans("ActivityCeased");
}
print '</tr>';
// Morphy
// Morphy
print '<tr><td>'.$langs->trans("MemberNature").'</td><td class="valeur" >'.$object->getmorphylib($object->morphy).'</td>';
print '</tr>';

View File

@ -71,11 +71,12 @@ class Categories extends DolibarrApi
* Return an array with category informations
*
* @param int $id ID of category
* @param bool $include_childs Include child categories list (true or false)
* @return array|mixed data without useless information
*
* @throws RestException
*/
public function get($id)
public function get($id, $include_childs = false)
{
if (! DolibarrApiAccess::$user->rights->categorie->lire) {
throw new RestException(401);
@ -90,6 +91,17 @@ class Categories extends DolibarrApi
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
}
if ($include_childs) {
$cats = $this->category->get_filles();
if (!is_array($cats)) {
throw new RestException(500, 'Error when fetching child categories', array_merge(array($this->category->error), $this->category->errors));
}
$this->category->childs = [];
foreach ($cats as $cat) {
$this->category->childs[] = $this->_cleanObjectDatas($cat);
}
}
return $this->_cleanObjectDatas($this->category);
}
@ -265,6 +277,58 @@ class Categories extends DolibarrApi
);
}
/**
* List categories of an object
*
* Get the list of categories linked to an object
*
* @param int $id Object ID
* @param string $type Type of category ('member', 'customer', 'supplier', 'product', 'contact')
* @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 category objects
*
* @throws RestException
*
* @url GET /object/{type}/{id}
*/
public function getListForObject($id, $type, $sortfield = "s.rowid", $sortorder = 'ASC', $limit = 0, $page = 0)
{
if (!in_array($type, [
Categorie::TYPE_PRODUCT,
Categorie::TYPE_CONTACT,
Categorie::TYPE_CUSTOMER,
Categorie::TYPE_SUPPLIER,
Categorie::TYPE_MEMBER
])) {
throw new RestException(401);
}
if($type == Categorie::TYPE_PRODUCT && ! (DolibarrApiAccess::$user->rights->produit->lire || DolibarrApiAccess::$user->rights->service->lire)) {
throw new RestException(401);
} elseif ($type == Categorie::TYPE_CONTACT && ! DolibarrApiAccess::$user->rights->contact->lire) {
throw new RestException(401);
} elseif ($type == Categorie::TYPE_CUSTOMER && ! DolibarrApiAccess::$user->rights->societe->lire) {
throw new RestException(401);
} elseif ($type == Categorie::TYPE_SUPPLIER && ! DolibarrApiAccess::$user->rights->fournisseur->lire) {
throw new RestException(401);
} elseif ($type == Categorie::TYPE_MEMBER && ! DolibarrApiAccess::$user->rights->adherent->lire) {
throw new RestException(401);
}
$categories = $this->category->getListForItem($id, $type, $sortfield, $sortorder, $limit, $page);
if( ! is_array($categories)) {
if ($categories == 0) {
throw new RestException(404, 'No category found for this object');
}
throw new RestException(500, 'Error when fetching object categories', array_merge(array($this->category->error), $this->category->errors));
}
return $categories;
}
/**
* Link an object to a category by id
*
@ -292,12 +356,31 @@ class Categories extends DolibarrApi
throw new RestException(404, 'category not found');
}
// TODO Add all types
if ($type === "product") {
if ($type === Categorie::TYPE_PRODUCT) {
if(! (DolibarrApiAccess::$user->rights->produit->creer || DolibarrApiAccess::$user->rights->service->creer)) {
throw new RestException(401);
}
$object = new Product($this->db);
} elseif ($type === Categorie::TYPE_CUSTOMER) {
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
}
$object = new Societe($this->db);
} elseif ($type === Categorie::TYPE_SUPPLIER) {
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
}
$object = new Societe($this->db);
} elseif ($type === Categorie::TYPE_CONTACT) {
if(! DolibarrApiAccess::$user->rights->societe->contact->creer) {
throw new RestException(401);
}
$object = new Contact($this->db);
} elseif ($type === Categorie::TYPE_MEMBER) {
if(! DolibarrApiAccess::$user->rights->adherent->creer) {
throw new RestException(401);
}
$object = new Adherent($this->db);
} else {
throw new RestException(401, "this type is not recognized yet.");
}
@ -353,12 +436,31 @@ class Categories extends DolibarrApi
throw new RestException(404, 'category not found');
}
// TODO Add all types
if ($type === "product") {
if ($type === Categorie::TYPE_PRODUCT) {
if(! (DolibarrApiAccess::$user->rights->produit->creer || DolibarrApiAccess::$user->rights->service->creer)) {
throw new RestException(401);
}
$object = new Product($this->db);
} elseif ($type === Categorie::TYPE_CUSTOMER) {
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
}
$object = new Societe($this->db);
} elseif ($type === Categorie::TYPE_SUPPLIER) {
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
}
$object = new Societe($this->db);
} elseif ($type === Categorie::TYPE_CONTACT) {
if(! DolibarrApiAccess::$user->rights->societe->contact->creer) {
throw new RestException(401);
}
$object = new Contact($this->db);
} elseif ($type === Categorie::TYPE_MEMBER) {
if(! DolibarrApiAccess::$user->rights->adherent->creer) {
throw new RestException(401);
}
$object = new Adherent($this->db);
} else {
throw new RestException(401, "this type is not recognized yet.");
}
@ -414,12 +516,31 @@ class Categories extends DolibarrApi
throw new RestException(404, 'category not found');
}
// TODO Add all types
if ($type === "product") {
if ($type === Categorie::TYPE_PRODUCT) {
if(! (DolibarrApiAccess::$user->rights->produit->creer || DolibarrApiAccess::$user->rights->service->creer)) {
throw new RestException(401);
}
$object = new Product($this->db);
} elseif ($type === Categorie::TYPE_CUSTOMER) {
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
}
$object = new Societe($this->db);
} elseif ($type === Categorie::TYPE_SUPPLIER) {
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
}
$object = new Societe($this->db);
} elseif ($type === Categorie::TYPE_CONTACT) {
if(! DolibarrApiAccess::$user->rights->societe->contact->creer) {
throw new RestException(401);
}
$object = new Contact($this->db);
} elseif ($type === Categorie::TYPE_MEMBER) {
if(! DolibarrApiAccess::$user->rights->adherent->creer) {
throw new RestException(401);
}
$object = new Adherent($this->db);
} else {
throw new RestException(401, "this type is not recognized yet.");
}
@ -473,12 +594,31 @@ class Categories extends DolibarrApi
throw new RestException(404, 'category not found');
}
// TODO Add all types
if ($type === "product") {
if ($type === Categorie::TYPE_PRODUCT) {
if(! (DolibarrApiAccess::$user->rights->produit->creer || DolibarrApiAccess::$user->rights->service->creer)) {
throw new RestException(401);
}
$object = new Product($this->db);
} elseif ($type === Categorie::TYPE_CUSTOMER) {
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
}
$object = new Societe($this->db);
} elseif ($type === Categorie::TYPE_SUPPLIER) {
if(! DolibarrApiAccess::$user->rights->societe->creer) {
throw new RestException(401);
}
$object = new Societe($this->db);
} elseif ($type === Categorie::TYPE_CONTACT) {
if(! DolibarrApiAccess::$user->rights->societe->contact->creer) {
throw new RestException(401);
}
$object = new Contact($this->db);
} elseif ($type === Categorie::TYPE_MEMBER) {
if(! DolibarrApiAccess::$user->rights->adherent->creer) {
throw new RestException(401);
}
$object = new Adherent($this->db);
} else {
throw new RestException(401, "this type is not recognized yet.");
}

View File

@ -240,25 +240,30 @@ class Categorie extends CommonObject
/**
* Load category into memory from database
*
* @param int $id Id of category
* @param string $label Label of category
* @param string $type Type of category ('product', '...') or (0, 1, ...)
* @param int $id Id of category
* @param string $label Label of category
* @param string $type Type of category ('product', '...') or (0, 1, ...)
* @param string $ref_ext External reference of object
* @return int <0 if KO, >0 if OK
*/
public function fetch($id, $label = '', $type = null)
public function fetch($id, $label = '', $type = null, $ref_ext = '')
{
global $conf;
// Check parameters
if (empty($id) && empty($label)) return -1;
if (empty($id) && empty($label) && empty($ref_ext)) return -1;
if (!is_numeric($type)) $type = $this->MAP_ID[$type];
$sql = "SELECT rowid, fk_parent, entity, label, description, color, fk_soc, visible, type";
$sql = "SELECT rowid, fk_parent, entity, label, description, color, fk_soc, visible, type, ref_ext";
$sql .= " FROM ".MAIN_DB_PREFIX."categorie";
if ($id > 0)
{
$sql .= " WHERE rowid = ".$id;
}
elseif (!empty($ref_ext))
{
$sql .= " WHERE ref_ext LIKE '".$this->db->escape($ref_ext)."'";
}
else
{
$sql .= " WHERE label = '".$this->db->escape($label)."' AND entity IN (".getEntity('category').")";
@ -282,6 +287,7 @@ class Categorie extends CommonObject
$this->socid = $res['fk_soc'];
$this->visible = $res['visible'];
$this->type = $res['type'];
$this->ref_ext = $res['ref_ext'];
$this->entity = $res['entity'];
// Retreive all extrafield
@ -334,6 +340,7 @@ class Categorie extends CommonObject
$this->description = trim($this->description);
$this->color = trim($this->color);
$this->import_key = trim($this->import_key);
$this->ref_ext = trim($this->ref_ext);
if (empty($this->visible)) $this->visible = 0;
$this->fk_parent = ($this->fk_parent != "" ? intval($this->fk_parent) : 0);
@ -359,6 +366,7 @@ class Categorie extends CommonObject
$sql .= " visible,";
$sql .= " type,";
$sql .= " import_key,";
$sql .= " ref_ext,";
$sql .= " entity";
$sql .= ") VALUES (";
$sql .= $this->db->escape($this->fk_parent).",";
@ -372,6 +380,7 @@ class Categorie extends CommonObject
$sql .= "'".$this->db->escape($this->visible)."',";
$sql .= $this->db->escape($type).",";
$sql .= (!empty($this->import_key) ? "'".$this->db->escape($this->import_key)."'" : 'null').",";
$sql .= (!empty($this->ref_ext) ? "'".$this->db->escape($this->ref_ext)."'" : 'null').",";
$sql .= $this->db->escape($conf->entity);
$sql .= ")";
@ -446,6 +455,7 @@ class Categorie extends CommonObject
// Clean parameters
$this->label = trim($this->label);
$this->description = trim($this->description);
$this->ref_ext = trim($this->ref_ext);
$this->fk_parent = ($this->fk_parent != "" ? intval($this->fk_parent) : 0);
$this->visible = ($this->visible != "" ? intval($this->visible) : 0);
@ -461,6 +471,7 @@ class Categorie extends CommonObject
$sql = "UPDATE ".MAIN_DB_PREFIX."categorie";
$sql .= " SET label = '".$this->db->escape($this->label)."',";
$sql .= " description = '".$this->db->escape($this->description)."',";
$sql .= " ref_ext = '".$this->db->escape($this->ref_ext)."',";
$sql .= " color = '".$this->db->escape($this->color)."'";
if (!empty($conf->global->CATEGORY_ASSIGNED_TO_A_CUSTOMER))
{
@ -918,6 +929,7 @@ class Categorie extends CommonObject
$categories[$i]['description'] = $category_static->description;
$categories[$i]['color'] = $category_static->color;
$categories[$i]['socid'] = $category_static->socid;
$categories[$i]['ref_ext'] = $category_static->ref_ext;
$categories[$i]['visible'] = $category_static->visible;
$categories[$i]['type'] = $category_static->type;
$categories[$i]['entity'] = $category_static->entity;
@ -1082,6 +1094,7 @@ class Categorie extends CommonObject
$this->cats[$obj->rowid]['description'] = !empty($obj->description_trans) ? $obj->description_trans : $obj->description;
$this->cats[$obj->rowid]['color'] = $obj->color;
$this->cats[$obj->rowid]['visible'] = $obj->visible;
$this->cats[$obj->rowid]['ref_ext'] = $obj->ref_ext;
$i++;
}
}

View File

@ -1,7 +1,7 @@
<?php
/* Copyright (C) 2007-2009 Laurent Destailleur <eldy@users.sourceforge.net>
* Copyright (C) 2009-2012 Regis Houssin <regis.houssin@inodbox.com>
* Copyright (C) 2018 Frédéric France <frederic.france@netlogic.fr>
* Copyright (C) 2018-2019 Frédéric France <frederic.france@netlogic.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
@ -45,17 +45,32 @@ class Menubase
public $errors = array();
/**
* @var int ID
*/
public $id;
* @var int ID
*/
public $id;
/**
* @var string Menu handler
*/
public $menu_handler;
/**
* @var string Module name if record is added by a module
*/
public $module;
/**
* @var string Menu top or left
*/
public $type;
/**
* @var string Name family/module for top menu (home, companies, ...)
*/
public $mainmenu;
/**
* @var int ID
* @var int 0 or Id of mother menu line, or -1 if we use fk_mainmenu and fk_leftmenu
*/
public $fk_menu;
@ -70,23 +85,71 @@ class Menubase
public $fk_leftmenu;
/**
* @var int position
* @var int Sort order of entry
*/
public $position;
/**
* @var string Relative (or absolute) url to go
*/
public $url;
/**
* @var string Target of Url link
*/
public $target;
/**
* @var string Key for menu translation
* @deprecated
* @see title
*/
public $titre;
/**
* @var string Key for menu translation
*/
public $title;
/**
* @var string Lang file to load for translation
*/
public $langs;
/**
* @var string Not used
* @deprecated
*/
public $level;
public $leftmenu; //<! Not used
/**
* @var string Name family/module for left menu (setup, info, ...)
*/
public $leftmenu;
/**
* @var string Condition to show enabled or disabled
*/
public $perms;
/**
* @var string Condition to show or hide
*/
public $enabled;
/**
* @var int 0 if menu for all users, 1 for external only, 2 for internal only
*/
public $user;
/**
* @var int timestamp
*/
public $tms;
/**
* Constructor
* Constructor
*
* @param DoliDB $db Database handler
* @param string $menu_handler Menu handler
@ -100,10 +163,10 @@ class Menubase
/**
* Create menu entry into database
* Create menu entry into database
*
* @param User $user User that create
* @return int <0 if KO, Id of record if OK
* @param User $user User that create
* @return int <0 if KO, Id of record if OK
*/
public function create($user = null)
{
@ -125,7 +188,7 @@ class Menubase
$this->langs=trim($this->langs);
$this->perms=trim($this->perms);
$this->enabled=trim($this->enabled);
$this->user=trim($this->user);
$this->user = (int) $this->user;
if (empty($this->position)) $this->position=0;
if (! $this->level) $this->level=0;
@ -246,7 +309,7 @@ class Menubase
*/
public function update($user = null, $notrigger = 0)
{
global $conf, $langs;
//global $conf, $langs;
// Clean parameters
$this->rowid=trim($this->rowid);
@ -265,7 +328,7 @@ class Menubase
$this->langs=trim($this->langs);
$this->perms=trim($this->perms);
$this->enabled=trim($this->enabled);
$this->user=trim($this->user);
$this->user = (int) $this->user;
// Check parameters
// Put here code to add control on parameters values
@ -311,7 +374,7 @@ class Menubase
*/
public function fetch($id, $user = null)
{
global $langs;
//global $langs;
$sql = "SELECT";
$sql.= " t.rowid,";
@ -385,7 +448,7 @@ class Menubase
*/
public function delete($user)
{
global $conf, $langs;
//global $conf, $langs;
$sql = "DELETE FROM ".MAIN_DB_PREFIX."menu";
$sql.= " WHERE rowid=".$this->id;

View File

@ -88,6 +88,15 @@ class Project extends CommonObject
public $thirdparty_name; // To store name of thirdparty (defined only in some cases)
public $user_author_id; //!< Id of project creator. Not defined if shared project.
/**
* @var int user close id
*/
public $fk_user_close;
/**
* @var int user close id
*/
public $user_close_id;
public $public; //!< Tell if this is a public or private project
public $budget_amount;

View File

@ -112,7 +112,7 @@ class Thirdparties extends DolibarrApi
*/
public function index($sortfield = "t.rowid", $sortorder = 'ASC', $limit = 100, $page = 0, $mode = 0, $sqlfilters = '')
{
global $db, $conf;
global $db;
$obj_ret = array();
@ -137,7 +137,7 @@ class Thirdparties extends DolibarrApi
$sql .= ' AND t.entity IN ('.getEntity('societe').')';
if ((!DolibarrApiAccess::$user->rights->societe->client->voir && !$socids) || $search_sale > 0) $sql .= " AND t.rowid = sc.fk_soc";
//if ($email != NULL) $sql.= " AND s.email = \"".$email."\"";
if ($socid) $sql .= " AND t.rowid IN (".$socids.")";
if ($socids) $sql .= " AND t.rowid IN (".$socids.")";
if ($search_sale > 0) $sql .= " AND t.rowid = sc.fk_soc"; // Join for the needed table to filter by sale
// Insert sale filter
if ($search_sale > 0)
@ -172,6 +172,7 @@ class Thirdparties extends DolibarrApi
{
$num = $db->num_rows($result);
$min = min($num, ($limit <= 0 ? $num : $limit));
$i = 0;
while ($i < $min)
{
$obj = $db->fetch_object($result);
@ -1722,7 +1723,7 @@ class Thirdparties extends DolibarrApi
*
* Return an array with thirdparty informations
*
* @param int $rowid Id of third party to load
* @param int $rowid Id of third party to load
* @param string $ref Reference of third party, name (Warning, this can return several records)
* @param string $ref_ext External reference of third party (Warning, this information is a free field not provided by Dolibarr)
* @param string $ref_int Internal reference of third party (not used by dolibarr)
@ -1740,6 +1741,7 @@ class Thirdparties extends DolibarrApi
*/
private function _fetch($rowid, $ref = '', $ref_ext = '', $ref_int = '', $idprof1 = '', $idprof2 = '', $idprof3 = '', $idprof4 = '', $idprof5 = '', $idprof6 = '', $email = '', $ref_alias = '')
{
global $conf;
if(! DolibarrApiAccess::$user->rights->societe->lire) {
throw new RestException(401);
}

View File

@ -2005,15 +2005,6 @@ else
}
}
if ($caneditgroup)
{
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">'."\n";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'" />';
print '<input type="hidden" name="action" value="addgroup" />';
}
print '<table class="noborder centpercent">'."\n";
// Other form for add user to group
$parameters = array('caneditgroup' => $caneditgroup, 'groupslist' => $groupslist, 'exclude' => $exclude);
$reshook = $hookmanager->executeHooks('formAddUserToGroup', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
@ -2021,6 +2012,14 @@ else
if (empty($reshook))
{
if ($caneditgroup)
{
print '<form action="'.$_SERVER['PHP_SELF'].'?id='.$id.'" method="POST">'."\n";
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'" />';
print '<input type="hidden" name="action" value="addgroup" />';
}
print '<table class="noborder centpercent">'."\n";
print '<tr class="liste_titre"><th class="liste_titre">'.$langs->trans("Groups").'</th>'."\n";
print '<th class="liste_titre right">';
if ($caneditgroup)
@ -2068,15 +2067,15 @@ else
{
print '<tr class="oddeven"><td colspan="3" class="opacitymedium">'.$langs->trans("None").'</td></tr>';
}
}
print "</table>";
print "</table>";
if ($caneditgroup)
{
print '</form>';
if ($caneditgroup)
{
print '</form>';
}
print "<br>";
}
print "<br>";
}
}
}

View File

@ -108,6 +108,7 @@ class Users extends DolibarrApi
if ($result)
{
$i = 0;
$num = $db->num_rows($result);
$min = min($num, ($limit <= 0 ? $num : $limit));
while ($i < $min)
@ -159,6 +160,41 @@ class Users extends DolibarrApi
return $this->_cleanObjectDatas($this->useraccount);
}
/**
* Get properties of user connected
*
* @url GET /info
*
* @return array|mixed Data without useless information
*
* @throws 401 RestException Insufficient rights
* @throws 404 RestException User not found
* @throws 404 RestException User group not found
*/
public function getInfo()
{
$apiUser = DolibarrApiAccess::$user;
$result = $this->useraccount->fetch($apiUser->id);
if (!$result) {
throw new RestException(404, 'User not found');
}
if (!DolibarrApi::_checkAccessToResource('user', $this->useraccount->id, 'user')) {
throw new RestException(401, 'Access not allowed for login ' . DolibarrApiAccess::$user->login);
}
$usergroup = new UserGroup($this->db);
$userGroupList = $usergroup->listGroupsForUser($apiUser->id, false);
if (!is_array($userGroupList)) {
throw new RestException(404, 'User group not found');
}
$this->useraccount = $this->_cleanObjectDatas($this->useraccount);
$this->useraccount->user_group_list = $this->_cleanUserGroupListDatas($userGroupList);
return $this->useraccount;
}
/**
* Create user account
@ -414,6 +450,53 @@ class Users extends DolibarrApi
return $object;
}
/**
* Clean sensible user group list datas
*
* @param array $objectList Array of object to clean
* @return array Array of cleaned object properties
*/
private function _cleanUserGroupListDatas($objectList)
{
$cleanObjectList = array();
foreach ($objectList as $object) {
$cleanObject = parent::_cleanObjectDatas($object);
unset($cleanObject->default_values);
unset($cleanObject->lastsearch_values);
unset($cleanObject->lastsearch_values_tmp);
unset($cleanObject->total_ht);
unset($cleanObject->total_tva);
unset($cleanObject->total_localtax1);
unset($cleanObject->total_localtax2);
unset($cleanObject->total_ttc);
unset($cleanObject->libelle_incoterms);
unset($cleanObject->location_incoterms);
unset($cleanObject->fk_delivery_address);
unset($cleanObject->fk_incoterms);
unset($cleanObject->all_permissions_are_loaded);
unset($cleanObject->shipping_method_id);
unset($cleanObject->nb_rights);
unset($cleanObject->search_sid);
unset($cleanObject->ldap_sid);
unset($cleanObject->clicktodial_loaded);
unset($cleanObject->datec);
unset($cleanObject->datem);
unset($cleanObject->members);
unset($cleanObject->note);
unset($cleanObject->note_private);
$cleanObjectList[] = $cleanObject;
}
return $cleanObjectList;
}
/**
* Validate fields before create or update object
*

View File

@ -2083,9 +2083,9 @@ class User extends CommonObject
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Read clicktodial information for user
* Read clicktodial information for user
*
* @return <0 if KO, >0 if OK
* @return int <0 if KO, >0 if OK
*/
public function fetch_clicktodial()
{
@ -2123,7 +2123,7 @@ class User extends CommonObject
/**
* Update clicktodial info
*
* @return integer
* @return int <0 if KO, >0 if OK
*/
public function update_clicktodial()
{
@ -2886,7 +2886,7 @@ class User extends CommonObject
/**
* Return and array with all instanciated first level children users of current user
*
* @return void
* @return User[]|int
* @see getAllChildIds()
*/
public function get_children()
@ -2895,7 +2895,7 @@ class User extends CommonObject
$sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."user";
$sql .= " WHERE fk_user = ".$this->id;
dol_syslog(get_class($this)."::get_children result=".$result, LOG_DEBUG);
dol_syslog(get_class($this)."::get_children sql=".$sql, LOG_DEBUG);
$res = $this->db->query($sql);
if ($res)
{