diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index ded8183ec70..d306fc7f67c 100755 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -38,9 +38,11 @@ class ExtraFields var $attribute_label; // Tableau contenant le nom des champs en clef et la taille de ces champs en value var $attribute_size; - // Tableau contenant le statut unique ou non + // Array to store if attribute is unique or not var $attribute_unique; - + // Array to store if attribute is required or not + var $attribute_required; + var $error; var $errno; @@ -67,6 +69,7 @@ class ExtraFields $this->attribute_size = array(); $this->attribute_elementtype = array(); $this->attribute_unique = array(); + $this->attribute_required = array(); } /** @@ -79,20 +82,21 @@ class ExtraFields * @param int $size Size/length of attribute * @param string $elementtype Element type ('member', 'product', 'company', ...) * @param int $unique Is field unique or not + * @param int $required Is field required or not * @return int <=0 if KO, >0 if OK */ - function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique=0) + function addExtraField($attrname, $label, $type, $pos, $size, $elementtype, $unique=0, $required=0) { if (empty($attrname)) return -1; if (empty($label)) return -1; // Create field into database - $result=$this->create($attrname,$type,$size,$elementtype); + $result=$this->create($attrname,$type,$size,$elementtype, $unique); $err1=$this->errno; if ($result > 0 || $err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS') { // Add declaration of field into table - $result2=$this->create_label($attrname,$label,$type,$pos,$size,$elementtype, $unique); + $result2=$this->create_label($attrname,$label,$type,$pos,$size,$elementtype, $unique, $required); $err2=$this->errno; if ($result2 > 0 || ($err1 == 'DB_ERROR_COLUMN_ALREADY_EXISTS' && $err2 == 'DB_ERROR_RECORD_ALREADY_EXISTS')) { @@ -117,9 +121,10 @@ class ExtraFields * @param int $length Size/length of attribute * @param string $elementtype Element type ('member', 'product', 'company', ...) * @param int $unique Is field unique or not + * @param int $required Is field required or not * @return int <=0 if KO, >0 if OK */ - private function create($attrname, $type='varchar', $length=255, $elementtype='member', $unique=0) + private function create($attrname, $type='varchar', $length=255, $elementtype='member', $unique=0, $required=0) { $table=''; if ($elementtype == 'member') $table='adherent_extrafields'; @@ -134,7 +139,7 @@ class ExtraFields if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname)) { - $field_desc = array('type'=>$type, 'value'=>$length); + $field_desc = array('type'=>$type, 'value'=>$length, 'null'=>($required?'NOT NULL':'NULL')); $result=$this->db->DDLAddField(MAIN_DB_PREFIX.$table, $attrname, $field_desc); if ($result > 0) { @@ -168,9 +173,10 @@ class ExtraFields * @param int $size Size/length of attribute * @param string $elementtype Element type ('member', 'product', 'company', ...) * @param int $unique Is field unique or not + * @param int $required Is field required or not * @return int <=0 if KO, >0 if OK */ - private function create_label($attrname, $label='', $type='', $pos=0, $size=0, $elementtype='member', $unique=0) + private function create_label($attrname, $label='', $type='', $pos=0, $size=0, $elementtype='member', $unique=0, $required=0) { global $conf; @@ -180,7 +186,7 @@ class ExtraFields if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname)) { - $sql = "INSERT INTO ".MAIN_DB_PREFIX."extrafields(name, label, type, pos, size, entity, elementtype, fieldunique)"; + $sql = "INSERT INTO ".MAIN_DB_PREFIX."extrafields(name, label, type, pos, size, entity, elementtype, fieldunique, fieldrequired)"; $sql.= " VALUES('".$attrname."',"; $sql.= " '".$this->db->escape($label)."',"; $sql.= " '".$type."',"; @@ -189,6 +195,7 @@ class ExtraFields $sql.= " ".$conf->entity.","; $sql.= " '".$elementtype."',"; $sql.= " '".$unique."'"; + $sql.= " '".$required."'"; $sql.=')'; dol_syslog(get_class($this)."::create_label sql=".$sql); @@ -291,9 +298,10 @@ class ExtraFields * @param int $length Length of attribute * @param string $elementtype Element type ('member', 'product', 'company', ...) * @param int $unique Is field unique or not + * @param int $required Is field required or not * @return int >0 if OK, <=0 if KO */ - function update($attrname,$label,$type,$length,$elementtype,$unique=0) + function update($attrname,$label,$type,$length,$elementtype,$unique=0,$required=0) { $table=''; if ($elementtype == 'member') $table='adherent_extrafields'; @@ -308,13 +316,13 @@ class ExtraFields if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname)) { - $field_desc = array('type'=>$type, 'value'=>$length); + $field_desc = array('type'=>$type, 'value'=>$length, 'null'=>($required?'NOT NULL':'NULL')); $result=$this->db->DDLUpdateField(MAIN_DB_PREFIX.$table, $attrname, $field_desc); if ($result > 0) { if ($label) { - $result=$this->update_label($attrname,$label,$type,$length,$elementtype,$unique); + $result=$this->update_label($attrname,$label,$type,$length,$elementtype,$unique,$required); } if ($result > 0) { @@ -359,9 +367,10 @@ class ExtraFields * @param int $size Length of attribute * @param string $elementtype Element type ('member', 'product', 'company', ...) * @param int $unique Is field unique or not + * @param int $required Is field required or not * @return int <=0 if KO, >0 if OK */ - private function update_label($attrname,$label,$type,$size,$elementtype,$unique=0) + private function update_label($attrname,$label,$type,$size,$elementtype,$unique=0,$required=0) { global $conf; dol_syslog(get_class($this)."::update_label $attrname,$label,$type,$size"); @@ -384,7 +393,8 @@ class ExtraFields $sql.= " type,"; $sql.= " size,"; $sql.= " elementtype,"; - $sql.= " fieldunique"; + $sql.= " fieldunique,"; + $sql.= " fieldrequired"; $sql.= ") VALUES ("; $sql.= "'".$attrname."',"; $sql.= " ".$conf->entity.","; @@ -393,6 +403,7 @@ class ExtraFields $sql.= " '".$size."',"; $sql.= " '".$elementtype."',"; $sql.= " '".$unique."'"; + $sql.= " '".$required."'"; $sql.= ")"; dol_syslog(get_class($this)."::update_label sql=".$sql); $resql2=$this->db->query($sql); @@ -440,7 +451,7 @@ class ExtraFields $array_name_label=array(); - $sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique"; + $sql = "SELECT rowid,name,label,type,size,elementtype,fieldunique,fieldrequired"; $sql.= " FROM ".MAIN_DB_PREFIX."extrafields"; $sql.= " WHERE entity = ".$conf->entity; if ($elementtype) $sql.= " AND elementtype = '".$elementtype."'"; @@ -461,6 +472,7 @@ class ExtraFields $this->attribute_size[$tab->name]=$tab->size; $this->attribute_elementtype[$tab->name]=$tab->elementtype; $this->attribute_unique[$tab->name]=$tab->fieldunique; + $this->attribute_required[$tab->name]=$tab->fieldrequired; } } return $array_name_label; @@ -489,6 +501,7 @@ class ExtraFields $size =$this->attribute_size[$key]; $elementtype=$this->attribute_elementtype[$key]; $unique=$this->attribute_unique[$key]; + $required=$this->attribute_required[$key]; if ($type == 'date') { $showsize=10; @@ -550,6 +563,7 @@ class ExtraFields $size=$this->attribute_size[$key]; $elementtype=$this->attribute_elementtype[$key]; $unique=$this->attribute_unique[$key]; + $required=$this->attribute_required[$key]; if ($type == 'date') { $showsize=10; diff --git a/htdocs/core/modules/modAdherent.class.php b/htdocs/core/modules/modAdherent.class.php index cb5b51c2318..4243576bb51 100644 --- a/htdocs/core/modules/modAdherent.class.php +++ b/htdocs/core/modules/modAdherent.class.php @@ -208,7 +208,7 @@ class modAdherent extends DolibarrModules $this->import_tables_creator_array[$r]=array('a'=>'fk_user_author'); // Fields to store import user id $this->import_fields_array[$r]=array('a.civilite'=>"UserTitle",'a.nom'=>"Lastname*",'a.prenom'=>"Firstname",'a.login'=>"Login*","a.pass"=>"Password","a.fk_adherent_type"=>"MemberType*",'a.morphy'=>'Nature*','a.societe'=>'Company','a.adresse'=>"Address",'a.cp'=>"Zip",'a.ville'=>"Town",'a.pays'=>"Country",'a.phone'=>"PhonePro",'a.phone_perso'=>"PhonePerso",'a.phone_mobile'=>"PhoneMobile",'a.email'=>"Email",'a.naiss'=>"Birthday",'a.statut'=>"Status*",'a.photo'=>"Photo",'a.note'=>"Note",'a.datec'=>'DateCreation','a.datefin'=>'DateEndSubscription'); // Add extra fields - $sql="SELECT name, label FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'member'"; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'member'"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { @@ -216,7 +216,7 @@ class modAdherent extends DolibarrModules { $fieldname='extra.'.$obj->name; $fieldlabel=ucfirst($obj->label); - $this->import_fields_array[$r][$fieldname]=$fieldlabel; + $this->import_fields_array[$r][$fieldname]=$fieldlabel.($obj->fieldrequired?'*':''); } } // End add extra fields diff --git a/htdocs/core/modules/modProduct.class.php b/htdocs/core/modules/modProduct.class.php index e05b65a4f3d..ae8ad9a85db 100644 --- a/htdocs/core/modules/modProduct.class.php +++ b/htdocs/core/modules/modProduct.class.php @@ -175,7 +175,7 @@ class modProduct extends DolibarrModules $this->import_tables_creator_array[$r]=array('p'=>'fk_user_author'); // Fields to store import user id $this->import_fields_array[$r]=array('p.ref'=>"Ref*",'p.label'=>"Label*",'p.description'=>"Description",'p.accountancy_code_sell'=>"ProductAccountancySellCode",'p.accountancy_code_buy'=>"ProductAccountancyBuyCode",'p.note'=>"Note",'p.length'=>"Length",'p.surface'=>"Surface",'p.volume'=>"Volume",'p.weight'=>"Weight",'p.duration'=>"Duration",'p.customcode'=>'CustomCode','p.price'=>"SellingPriceHT",'p.price_ttc'=>"SellingPriceTTC",'p.tva_tx'=>'VAT','p.tosell'=>"OnSell*",'p.tobuy'=>"OnBuy*",'p.fk_product_type'=>"Type*",'p.finished'=>'Nature','p.datec'=>'DateCreation*'); // Add extra fields - $sql="SELECT name, label FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'product'"; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'product'"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { @@ -183,7 +183,7 @@ class modProduct extends DolibarrModules { $fieldname='extra.'.$obj->name; $fieldlabel=ucfirst($obj->label); - $this->import_fields_array[$r][$fieldname]=$fieldlabel; + $this->import_fields_array[$r][$fieldname]=$fieldlabel.($obj->fieldrequired?'*':''); } } // End add extra fields diff --git a/htdocs/core/modules/modService.class.php b/htdocs/core/modules/modService.class.php index 7fdc365c040..b8570a0b1d0 100644 --- a/htdocs/core/modules/modService.class.php +++ b/htdocs/core/modules/modService.class.php @@ -158,7 +158,7 @@ class modService extends DolibarrModules $this->import_tables_creator_array[$r]=array('p'=>'fk_user_author'); // Fields to store import user id $this->import_fields_array[$r]=array('p.ref'=>"Ref*",'p.label'=>"Label*",'p.description'=>"Description",'p.accountancy_code_sell'=>"ProductAccountancySellCode",'p.accountancy_code_buy'=>"ProductAccountancyBuyCode",'p.note'=>"Note",'p.length'=>"Length",'p.surface'=>"Surface",'p.volume'=>"Volume",'p.weight'=>"Weight",'p.duration'=>"Duration",'p.customcode'=>'CustomCode','p.price'=>"SellingPriceHT",'p.price_ttc'=>"SellingPriceTTC",'p.tva_tx'=>'VAT','p.tosell'=>"OnSell*",'p.tobuy'=>"OnBuy*",'p.fk_product_type'=>"Type*",'p.finished'=>'Nature','p.datec'=>'DateCreation*'); // Add extra fields - $sql="SELECT name, label FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'product'"; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'product'"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { @@ -166,7 +166,7 @@ class modService extends DolibarrModules { $fieldname='extra.'.$obj->name; $fieldlabel=ucfirst($obj->label); - $this->import_fields_array[$r][$fieldname]=$fieldlabel; + $this->import_fields_array[$r][$fieldname]=$fieldlabel.($obj->fieldrequired?'*':''); } } // End add extra fields diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index 27657765ed8..0c1ff2199f4 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -321,7 +321,7 @@ class modSociete extends DolibarrModules $this->import_tables_array[$r]=array('s'=>MAIN_DB_PREFIX.'societe','extra'=>MAIN_DB_PREFIX.'societe_extrafields'); // List of tables to insert into (insert done in same order) $this->import_fields_array[$r]=array('s.nom'=>"Name*",'s.status'=>"Status",'s.client'=>"Customer*",'s.fournisseur'=>"Supplier*",'s.code_client'=>"CustomerCode",'s.code_fournisseur'=>"SupplierCode",'s.code_compta'=>"CustomerAccountancyCode",'s.code_compta_fournisseur'=>"SupplierAccountancyCode",'s.address'=>"Address",'s.cp'=>"Zip",'s.ville'=>"Town",'s.fk_pays'=>"CountryCode",'s.tel'=>"Phone",'s.fax'=>"Fax",'s.url'=>"Url",'s.email'=>"Email",'s.siret'=>"ProfId1",'s.siren'=>"ProfId2",'s.ape'=>"ProfId3",'s.idprof4'=>"ProfId4",'s.tva_intra'=>"VATIntraShort",'s.capital'=>"Capital",'s.note'=>"Note",'s.fk_typent'=>"ThirdPartyType",'s.fk_effectif'=>"Staff","s.fk_forme_juridique"=>"JuridicalStatus",'s.fk_prospectlevel'=>'ProspectLevel','s.fk_stcomm'=>'ProspectStatus','s.default_lang'=>'DefaultLanguage','s.barcode'=>'BarCode','s.datec'=>"DateCreation"); // Add extra fields - $sql="SELECT name, label FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'company'"; + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'company'"; $resql=$this->db->query($sql); if ($resql) // This can fail when class is used on old database (during migration for example) { @@ -329,7 +329,7 @@ class modSociete extends DolibarrModules { $fieldname='extra.'.$obj->name; $fieldlabel=ucfirst($obj->label); - $this->import_fields_array[$r][$fieldname]=$fieldlabel; + $this->import_fields_array[$r][$fieldname]=$fieldlabel.($obj->fieldrequired?'*':''); } } // End add extra fields @@ -355,6 +355,19 @@ class modSociete extends DolibarrModules $this->import_entities_array[$r]=array('s.fk_soc'=>'company'); // We define here only fields that use another icon that the one defined into import_icon $this->import_tables_array[$r]=array('s'=>MAIN_DB_PREFIX.'socpeople'); // List of tables to insert into (insert done in same order) $this->import_fields_array[$r]=array('s.fk_soc'=>'ThirdPartyName*','s.civilite'=>'UserTitle','s.name'=>"Name*",'s.firstname'=>"Firstname",'s.address'=>"Address",'s.cp'=>"Zip",'s.ville'=>"Town",'s.fk_pays'=>"CountryCode",'s.birthday'=>"BirthdayDate",'s.poste'=>"Role",'s.phone'=>"Phone",'s.phone_perso'=>"PhonePerso",'s.phone_mobile'=>"PhoneMobile",'s.fax'=>"Fax",'s.email'=>"Email",'s.note'=>"Note",'s.datec'=>"DateCreation"); + // Add extra fields + $sql="SELECT name, label, fieldrequired FROM ".MAIN_DB_PREFIX."extrafields WHERE elementtype = 'contact'"; + $resql=$this->db->query($sql); + if ($resql) // This can fail when class is used on old database (during migration for example) + { + while ($obj=$this->db->fetch_object($resql)) + { + $fieldname='extra.'.$obj->name; + $fieldlabel=ucfirst($obj->label); + $this->import_fields_array[$r][$fieldname]=$fieldlabel.($obj->fieldrequired?'*':''); + } + } + // End add extra fields $this->import_fieldshidden_array[$r]=array('s.fk_user_creat'=>'user->id'); // aliastable.field => ('user->id' or 'lastrowid-'.tableparent) $this->import_convertvalue_array[$r]=array( 's.fk_soc'=>array('rule'=>'fetchidfromref','file'=>'/societe/class/societe.class.php','class'=>'Societe','method'=>'fetch','element'=>'ThirdParty'), diff --git a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql index 0600ddfe9a7..113b8881483 100755 --- a/htdocs/install/mysql/migration/3.2.0-3.3.0.sql +++ b/htdocs/install/mysql/migration/3.2.0-3.3.0.sql @@ -235,6 +235,7 @@ ALTER TABLE llx_propaldet MODIFY COLUMN localtax2_type varchar(1); ALTER TABLE llx_menu MODIFY COLUMN enabled varchar(255) NULL DEFAULT '1'; ALTER TABLE llx_extrafields ADD COLUMN fieldunique INTEGER DEFAULT 0; +ALTER TABLE llx_extrafields ADD COLUMN fieldrequired INTEGER DEFAULT 0; create table llx_socpeople_extrafields ( diff --git a/htdocs/install/mysql/tables/llx_extrafields.sql b/htdocs/install/mysql/tables/llx_extrafields.sql index 79eaffc8347..15fc9bce007 100755 --- a/htdocs/install/mysql/tables/llx_extrafields.sql +++ b/htdocs/install/mysql/tables/llx_extrafields.sql @@ -1,8 +1,6 @@ -- =================================================================== --- Copyright (C) 2002-2003 Rodolphe Quiedeville --- Copyright (C) 2002-2003 Jean-Louis Bergamo --- Copyright (C) 2009 Regis Houssin --- Copyright (C) 2011 Laurent Destailleur +-- Copyright (C) 2011-2012 Regis Houssin +-- Copyright (C) 2011-2012 Laurent Destailleur -- -- 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 @@ -30,5 +28,6 @@ create table llx_extrafields type varchar(8), size varchar(8) DEFAULT NULL, fieldunique integer DEFAULT 0, + fieldrequired integer DEFAULT 0, pos integer DEFAULT 0 )ENGINE=innodb; diff --git a/htdocs/langs/fr_FR/other.lang b/htdocs/langs/fr_FR/other.lang index d7c2b04cd6c..abbd3d61307 100644 --- a/htdocs/langs/fr_FR/other.lang +++ b/htdocs/langs/fr_FR/other.lang @@ -115,7 +115,7 @@ VolumeUnitinch3=pouce3 VolumeUnitounce=once VolumeUnitlitre=litre VolumeUnitgallon=gallon -Size=taille +Size=Taille SizeUnitm=m SizeUnitdm=dm SizeUnitcm=cm