19require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
29 public $module =
'variants';
34 public $element =
'productattributevalue';
39 public $table_element =
'product_attribute_value';
45 public $ismultientitymanaged = 1;
50 public $isextrafieldmanaged = 0;
81 'rowid' => array(
'type'=>
'integer',
'label'=>
'TechnicalID',
'enabled'=>
'1',
'position'=>1,
'notnull'=>1,
'visible'=>0,
'noteditable'=>
'1',
'index'=>1,
'css'=>
'left',
'comment'=>
"Id"),
82 'fk_product_attribute' => array(
'type'=>
'integer:ProductAttribute:variants/class/ProductAttribute.class.php',
'label'=>
'ProductAttribute',
'enabled'=>1,
'visible'=>0,
'position'=>10,
'notnull'=>1,
'index'=>1,),
83 'ref' => array(
'type'=>
'varchar(255)',
'label'=>
'Ref',
'visible'=>1,
'enabled'=>1,
'position'=>20,
'notnull'=>1,
'index'=>1,
'searchall'=>1,
'comment'=>
"Reference of object",
'css'=>
''),
84 'value' => array(
'type'=>
'varchar(255)',
'label'=>
'Value',
'enabled'=>
'1',
'position'=>30,
'notnull'=>1,
'visible'=>1,
'searchall'=>1,
'css'=>
'minwidth300',
'help'=>
"",
'showoncombobox'=>
'1',),
85 'position' => array(
'type'=>
'integer',
'label'=>
'Rank',
'enabled'=>1,
'visible'=>0,
'default'=>0,
'position'=>200,
'notnull'=>1,),
88 public $fk_product_attribute;
100 global $conf, $langs;
103 $this->entity = $conf->entity;
106 $this->fields[
'rowid'][
'visible'] = 0;
108 if (!isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
109 $this->fields[
'entity'][
'enabled'] = 0;
113 foreach ($this->fields as $key => $val) {
114 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
115 unset($this->fields[$key]);
120 if (is_object($langs)) {
121 foreach ($this->fields as $key => $val) {
122 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
123 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
124 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
144 $this->fk_product_attribute = $this->fk_product_attribute > 0 ? $this->fk_product_attribute : 0;
146 $this->value = trim($this->value);
149 if (empty($this->fk_product_attribute)) {
150 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductAttribute"));
153 if (empty($this->
ref)) {
154 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Ref"));
157 if (empty($this->value)) {
158 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Value"));
168 $sql =
"INSERT INTO " . MAIN_DB_PREFIX . $this->table_element .
" (";
169 $sql .=
" fk_product_attribute, ref, value, entity, position";
172 $sql .=
" " . ((int) $this->fk_product_attribute);
173 $sql .=
", '" . $this->db->escape($this->
ref) .
"'";
174 $sql .=
", '" . $this->db->escape($this->value) .
"'";
175 $sql .=
", " . ((int) $this->entity);
176 $sql .=
", " . ((int) $this->
position);
180 $resql = $this->db->query($sql);
182 $this->errors[] =
"Error " . $this->db->lasterror();
187 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX . $this->table_element);
190 if (!$error && !$notrigger) {
192 $result = $this->
call_trigger(
'PRODUCT_ATTRIBUTE_VALUE_CREATE', $user);
200 $this->db->rollback();
220 $id = $id > 0 ? $id : 0;
224 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"TechnicalID"));
232 $sql =
"SELECT rowid, fk_product_attribute, ref, value";
233 $sql .=
" FROM " . MAIN_DB_PREFIX . $this->table_element;
234 $sql .=
" WHERE rowid = " . ((int) $id);
235 $sql .=
" AND entity IN (" .
getEntity(
'product') .
")";
238 $resql = $this->db->query($sql);
240 $this->errors[] =
"Error " . $this->db->lasterror();
245 $numrows = $this->db->num_rows($resql);
247 $obj = $this->db->fetch_object($resql);
249 $this->
id = $obj->rowid;
250 $this->fk_product_attribute = $obj->fk_product_attribute;
251 $this->
ref = $obj->ref;
252 $this->value = $obj->value;
254 $this->db->free($resql);
277 $sql .=
"v.fk_product_attribute, v.rowid, v.ref, v.value FROM " . MAIN_DB_PREFIX .
"product_attribute_value v ";
280 $sql .=
"LEFT JOIN " . MAIN_DB_PREFIX .
"product_attribute_combination2val c2v ON c2v.fk_prod_attr_val = v.rowid ";
281 $sql .=
"LEFT JOIN " . MAIN_DB_PREFIX .
"product_attribute_combination c ON c.rowid = c2v.fk_prod_combination ";
282 $sql .=
"LEFT JOIN " . MAIN_DB_PREFIX .
"product p ON p.rowid = c.fk_product_child ";
285 $sql .=
"WHERE v.fk_product_attribute = " . ((int) $prodattr_id);
288 $sql .=
" AND c2v.rowid IS NOT NULL AND p.tosell = 1";
291 $sql .=
" ORDER BY v.position ASC";
293 $query = $this->db->query($sql);
295 while ($result = $this->db->fetch_object($query)) {
296 if (empty($returnonlydata)) {
302 $tmp->fk_product_attribute = $result->fk_product_attribute;
303 $tmp->id = $result->rowid;
304 $tmp->ref = $result->ref;
305 $tmp->value = $result->value;
326 $this->fk_product_attribute = $this->fk_product_attribute > 0 ? $this->fk_product_attribute : 0;
328 $this->value = trim($this->value);
331 if (empty($this->fk_product_attribute)) {
332 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductAttribute"));
335 if (empty($this->
ref)) {
336 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Ref"));
339 if (empty($this->value)) {
340 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Value"));
350 $sql =
"UPDATE " . MAIN_DB_PREFIX . $this->table_element .
" SET";
352 $sql .=
" fk_product_attribute = " . ((int) $this->fk_product_attribute);
353 $sql .=
", ref = '" . $this->db->escape($this->
ref) .
"'";
354 $sql .=
", value = '" . $this->db->escape($this->value) .
"'";
355 $sql .=
", position = " . ((int) $this->
position);
357 $sql .=
" WHERE rowid = " . ((int) $this->
id);
360 $resql = $this->db->query($sql);
362 $this->errors[] =
"Error " . $this->db->lasterror();
366 if (!$error && !$notrigger) {
368 $result = $this->
call_trigger(
'PRODUCT_ATTRIBUTE_VALUE_MODIFY', $user);
379 $this->db->rollback();
391 public function delete(
User $user, $notrigger = 0)
397 $this->
id = $this->
id > 0 ? $this->id : 0;
400 if (empty($this->
id)) {
401 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"TechnicalID"));
409 $result = $this->
isUsed();
412 } elseif ($result > 0) {
413 $this->errors[] = $langs->trans(
'ErrorAttributeValueIsUsedIntoProduct');
419 if (!$error && !$notrigger) {
421 $result = $this->
call_trigger(
'PRODUCT_ATTRIBUTE_VALUE_DELETE', $user);
429 $sql =
"DELETE FROM " . MAIN_DB_PREFIX . $this->table_element .
" WHERE rowid = " . ((int) $this->
id);
432 $resql = $this->db->query($sql);
434 $this->errors[] =
"Error " . $this->db->lasterror();
443 $this->db->rollback();
459 $this->
id = $this->
id > 0 ? $this->id : 0;
462 if (empty($this->
id)) {
463 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"TechnicalID"));
471 $sql =
"SELECT COUNT(*) AS nb FROM " . MAIN_DB_PREFIX .
"product_attribute_combination2val WHERE fk_prod_attr_val = " . ((int) $this->
id);
474 $resql = $this->db->query($sql);
476 $this->errors[] =
"Error " . $this->db->lasterror();
481 if ($obj = $this->db->fetch_object($resql)) {
485 return $used ? 1 : 0;
errorsToString()
Method to output saved errors.
call_trigger($triggerName, $user)
Call trigger based on this instance.
Parent class for class inheritance lines of business objects This class is useless for the moment so ...
Class to manage Dolibarr database access.
Class ProductAttributeValue Used to represent a product attribute value.
create(User $user, $notrigger=0)
Creates a value for a product attribute.
fetch($id)
Gets a product attribute value.
update(User $user, $notrigger=0)
Updates a product attribute value.
isUsed()
Test if used by a product.
__construct(DoliDB $db)
Constructor.
fetchAllByProductAttribute($prodattr_id, $only_used=false, $returnonlydata=0)
Returns all product attribute values of a product attribute.
Class to manage Dolibarr users.
dol_string_nospecial($str, $newstr='_', $badcharstoreplace='', $badcharstoremove='', $keepspaces=0)
Clean a string from all punctuation characters to use it as a ref or login.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.