Fix: Better error management. Use functions of drivers to edit tables.

This commit is contained in:
Laurent Destailleur 2011-03-08 10:48:53 +00:00
parent 01c102f66a
commit 4f13506668
5 changed files with 45 additions and 71 deletions

View File

@ -77,51 +77,41 @@ class AdherentOptions
} }
/** /**
* \brief Add a new attribute * Add a new optionnal attribute
* \param attrname nom de l'atribut * @param attrname code of attribute
* \param type type de l'attribut * @param type Type of attribute ('int', 'text', 'varchar', 'date', 'datehour')
* \param length longuer de l'attribut * @param length Size/length of attribute
* \remarks Ceci correspond a un alter de la table et pas a un insert
*/ */
function create($attrname,$type='varchar',$length=255) { function create($attrname,$type='varchar',$length=255) {
if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname)) if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname))
{ {
$sql = "ALTER TABLE ".MAIN_DB_PREFIX."adherent_options "; $field_desc = array('type'=>$type, 'value'=>$length);
switch ($type){ $result=$this->db->DDLAddField(MAIN_DB_PREFIX.'adherent_options', $attrname, $field_desc);
case 'varchar' : if ($result > 0)
case 'interger' :
$sql .= " ADD $attrname $type($length)";
break;
case 'text' :
case 'date' :
case 'datetime' :
$sql .= " ADD $attrname $type";
break;
default:
$sql .= " ADD $attrname $type";
break;
}
dol_syslog("AdherentOptions::create sql=".$sql, LOG_DEBUG);
if ($this->db->query($sql))
{ {
return 1; return 1;
} }
else else
{ {
dol_print_error($this->db); $this->error=$this->db->lasterror();
return 0; return -1;
} }
}else{ }
else
{
return 0; return 0;
} }
} }
/** /**
* \brief Fonction qui cree un label * Add description of a new optionnal attribute
* \param attrname nom de l'atribut * @param attrname code of attribute
* \param label nom du label * @param label label of attribute
* @param type Type of attribute ('int', 'text', 'varchar', 'date', 'datehour')
* @param pos Position of attribute
* @param size Size/length of attribute
* @return int <=0 if KO, >0 if OK
*/ */
function create_label($attrname,$label='',$type='',$pos=0,$size=0) function create_label($attrname,$label='',$type='',$pos=0,$size=0)
{ {
@ -156,9 +146,9 @@ class AdherentOptions
} }
/** /**
* Fonction qui supprime un attribut * Delete an optionnal attribute
* @param $attrname nom de l'atribut * @param attrname Code of attribute to delete
* TODO pouvoir gerer les entités * TODO This does not work with multicompany module
*/ */
function delete($attrname) function delete($attrname)
{ {
@ -183,8 +173,8 @@ class AdherentOptions
} }
/** /**
* \brief Fonction qui supprime un label * Delete description of an optionnal attribute
* \param attrname nom du label * @param attrname Code of attribute to delete
*/ */
function delete_label($attrname) function delete_label($attrname)
{ {
@ -215,43 +205,27 @@ class AdherentOptions
} }
/** /**
* \brief Fonction qui modifie le type d'un attribut optionnel * Modify type of a personalized attribute
* \param attrname nom de l'atribut * @param attrname name of attribute
* \param type type de l'attribut * @param type type of attribute
* \param length longuer de l'attribut * @param length length of attribute
* \return int >0 if OK, <=0 if error * @return int >0 if OK, <=0 if KO
* \TODO pouvoir gerer les entités * TODO This does not works with mutlicompany module
*/ */
function update($attrname,$type='varchar',$length=255) function update($attrname,$type='varchar',$length=255)
{ {
if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname)) if (isset($attrname) && $attrname != '' && preg_match("/^\w[a-zA-Z0-9-_]*$/",$attrname))
{ {
$sql = "ALTER TABLE ".MAIN_DB_PREFIX."adherent_options"; $field_desc = array('type'=>$type, 'value'=>$length);
switch ($type){ $result=$this->db->DDLUpdateField(MAIN_DB_PREFIX.'adherent_options', $attrname, $field_desc);
case 'varchar' : if ($result > 0)
case 'interger' :
$sql .= " MODIFY COLUMN $attrname $type($length)";
break;
case 'text' :
case 'date' :
case 'datetime' :
$sql .= " MODIFY COLUMN $attrname $type";
break;
default:
$sql .= " MODIFY COLUMN $attrname $type";
break;
}
//$sql .= "MODIFY COLUMN $attrname $type($length)";
dol_syslog("AdherentOptions::update sql=".$sql);
if ( $this->db->query($sql) )
{ {
return 1; return 1;
} }
else else
{ {
print dol_print_error($this->db); $this->error=$this->db->lasterror();
return 0; return -1;
} }
} }
else else
@ -262,11 +236,11 @@ class AdherentOptions
} }
/** /**
* \brief Modify an optionnal attribute * Modify description of an optionnal attribute
* \param attrname nom de l'atribut * @param attrname nom de l'atribut
* \param label nom du label * @param label nom du label
* \param type type * @param type type
* \param size size * @param size size
*/ */
function update_label($attrname,$label,$type,$size) function update_label($attrname,$label,$type,$size)
{ {
@ -284,7 +258,7 @@ class AdherentOptions
$resql1=$this->db->query($sql_del); $resql1=$this->db->query($sql_del);
$sql = "INSERT INTO ".MAIN_DB_PREFIX."adherent_options_label("; $sql = "INSERT INTO ".MAIN_DB_PREFIX."adherent_options_label(";
$sql.= " name,"; $sql.= " name,"; // This is code
$sql.= " entity,"; $sql.= " entity,";
$sql.= " label,"; $sql.= " label,";
$sql.= " type,"; $sql.= " type,";

View File

@ -920,7 +920,7 @@ class DoliDb
*/ */
function DDLUpdateField($table,$field_name,$field_desc) function DDLUpdateField($table,$field_name,$field_desc)
{ {
$sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table; $sql = "ALTER TABLE ".$table;
$sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type']; $sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type'];
if ($field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') $sql.="(".$field_desc['value'].")"; if ($field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') $sql.="(".$field_desc['value'].")";

View File

@ -983,7 +983,7 @@ class DoliDb
*/ */
function DDLUpdateField($table,$field_name,$field_desc) function DDLUpdateField($table,$field_name,$field_desc)
{ {
$sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table; $sql = "ALTER TABLE ".$table;
$sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type']; $sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type'];
if ($field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') $sql.="(".$field_desc['value'].")"; if ($field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') $sql.="(".$field_desc['value'].")";

View File

@ -995,7 +995,7 @@ class DoliDb
*/ */
function DDLUpdateField($table,$field_name,$field_desc) function DDLUpdateField($table,$field_name,$field_desc)
{ {
$sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table; $sql = "ALTER TABLE ".$table;
$sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type']; $sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type'];
if ($field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') $sql.="(".$field_desc['value'].")"; if ($field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') $sql.="(".$field_desc['value'].")";

View File

@ -1125,7 +1125,7 @@ class DoliDb
*/ */
function DDLUpdateField($table,$field_name,$field_desc) function DDLUpdateField($table,$field_name,$field_desc)
{ {
$sql = "ALTER TABLE ".MAIN_DB_PREFIX.$table; $sql = "ALTER TABLE ".$table;
$sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type']; $sql .= " MODIFY COLUMN ".$field_name." ".$field_desc['type'];
if ($field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') $sql.="(".$field_desc['value'].")"; if ($field_desc['type'] == 'int' || $field_desc['type'] == 'varchar') $sql.="(".$field_desc['value'].")";