mirror of
https://github.com/YunoHost-Apps/noalyss_ynh.git
synced 2024-09-03 19:46:20 +02:00
288 lines
8 KiB
PHP
288 lines
8 KiB
PHP
|
<?php
|
||
|
//This file is part of NOALYSS and is under GPL
|
||
|
//see licence.txt
|
||
|
/**
|
||
|
*@brief Manage the table attr_def
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
require_once NOALYSS_INCLUDE.'/lib/database.class.php';
|
||
|
require_once NOALYSS_INCLUDE.'/lib/ac_common.php';
|
||
|
|
||
|
class Fiche_Attr
|
||
|
{
|
||
|
/* example private $variable=array("easy_name"=>column_name,"email"=>"column_name_email","val3"=>0); */
|
||
|
|
||
|
protected $variable=array("id"=>"ad_id","desc"=>"ad_text","type"=>"ad_type","size"=>"ad_size","extra"=>"ad_extra");
|
||
|
function __construct ($p_cn,$p_id=0)
|
||
|
{
|
||
|
$this->cn=$p_cn;
|
||
|
if ( $p_id == 0 )
|
||
|
{
|
||
|
/* Initialize an empty object */
|
||
|
foreach ($this->variable as $key=>$value) $this->$value='';
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* load it */
|
||
|
$this->ad_id=$p_id;
|
||
|
$this->load();
|
||
|
}
|
||
|
}
|
||
|
public function get_parameter($p_string)
|
||
|
{
|
||
|
if ( array_key_exists($p_string,$this->variable) )
|
||
|
{
|
||
|
$idx=$this->variable[$p_string];
|
||
|
return $this->$idx;
|
||
|
}
|
||
|
else
|
||
|
throw new Exception (__FILE__.":".__LINE__.$p_string.'Erreur attribut inexistant');
|
||
|
}
|
||
|
public function set_parameter($p_string,$p_value)
|
||
|
{
|
||
|
if ( array_key_exists($p_string,$this->variable) )
|
||
|
{
|
||
|
$idx=$this->variable[$p_string];
|
||
|
$this->$idx=$p_value;
|
||
|
}
|
||
|
else
|
||
|
throw new Exception (__FILE__.":".__LINE__.$p_string.'Erreur attribut inexistant');
|
||
|
}
|
||
|
public function get_info()
|
||
|
{
|
||
|
return var_export($this,true);
|
||
|
}
|
||
|
public function verify()
|
||
|
{
|
||
|
// Verify that the elt we want to add is correct
|
||
|
/* verify only the datatype */
|
||
|
if ( strlen(trim($this->ad_text))==0)
|
||
|
throw new Exception('La description ne peut pas être vide',1);
|
||
|
if ( strlen(trim($this->ad_type))==0)
|
||
|
throw new Exception('Le type ne peut pas être vide',1);
|
||
|
$this->ad_type=strtolower($this->ad_type);
|
||
|
if ( in_array($this->ad_type,array('date','text','numeric','zone','poste','card','select'))==false)
|
||
|
throw new Exception('Le type doit être text, numeric,poste, card, select ou date',1);
|
||
|
if ( trim($this->ad_size)=='' || isNumber($this->ad_size)==0||$this->ad_size>22)
|
||
|
{
|
||
|
switch ($this->ad_type)
|
||
|
{
|
||
|
case 'text':
|
||
|
$this->ad_size=22;
|
||
|
break;
|
||
|
case 'numeric':
|
||
|
$this->ad_size=9;
|
||
|
break;
|
||
|
case 'date':
|
||
|
$this->ad_size=8;
|
||
|
break;
|
||
|
case 'zone':
|
||
|
$this->ad_size=22;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
$this->ad_size=22;
|
||
|
}
|
||
|
}
|
||
|
if ( $this->ad_type == 'numeric' ) {
|
||
|
$this->ad_extra=(trim($this->ad_extra)=='')?'2':$this->ad_extra;
|
||
|
if (isNumber($this->ad_extra) == 0) throw new Exception ("La précision doit être un chiffre");
|
||
|
|
||
|
}
|
||
|
if ( $this->ad_type == 'select')
|
||
|
{
|
||
|
if (trim($this->ad_extra)=="") throw new Exception ("La requête SQL est vide ");
|
||
|
if ( preg_match('/^\h*select/i',$this->ad_extra) == 0) throw new Exception ("La requête SQL doit commencer par SELECT ");
|
||
|
try{
|
||
|
|
||
|
$this->cn->exec_sql($this->ad_extra);
|
||
|
}catch (Exception $e)
|
||
|
{
|
||
|
record_log($e->getTraceAsString());
|
||
|
throw new Exception ("La requête SQL ".h($this->ad_extra)." est invalide ");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
public function save()
|
||
|
{
|
||
|
|
||
|
/* please adapt */
|
||
|
if ( $this->ad_id == 0 )
|
||
|
$this->insert();
|
||
|
else
|
||
|
$this->update();
|
||
|
}
|
||
|
/**
|
||
|
*@brief retrieve array of object thanks a condition
|
||
|
*@param $cond condition (where clause)
|
||
|
*@param $p_array array for the SQL stmt
|
||
|
*@see Database::get_array
|
||
|
*@return an empty array if nothing is found
|
||
|
*/
|
||
|
public function seek($cond='',$p_array=null)
|
||
|
{
|
||
|
if ( $cond != '')
|
||
|
$sql="select * from attr_def where $cond order by ad_text";
|
||
|
else
|
||
|
$sql="select * from attr_def order by ad_text";
|
||
|
|
||
|
$aobj=array();
|
||
|
$array= $this->cn->get_array($sql,$p_array);
|
||
|
// map each row in a object
|
||
|
$size=$this->cn->count();
|
||
|
if ( $size == 0 ) return $aobj;
|
||
|
for ($i=0;$i<$size;$i++)
|
||
|
{
|
||
|
$oobj=new Fiche_Attr ($this->cn);
|
||
|
foreach ($array[$i] as $idx=>$value)
|
||
|
{
|
||
|
$oobj->$idx=$value;
|
||
|
}
|
||
|
$aobj[]=clone $oobj;
|
||
|
}
|
||
|
return $aobj;
|
||
|
}
|
||
|
public function insert()
|
||
|
{
|
||
|
try{
|
||
|
$this->verify();
|
||
|
/* please adapt */
|
||
|
$sql="insert into attr_def(ad_text
|
||
|
,ad_type,ad_size,ad_extra
|
||
|
) values ($1
|
||
|
,$2,$3,$4
|
||
|
) returning ad_id";
|
||
|
|
||
|
$this->ad_id=$this->cn->get_value(
|
||
|
$sql,
|
||
|
array( $this->ad_text,$this->ad_type,$this->ad_size,$this->ad_extra
|
||
|
)
|
||
|
);
|
||
|
} catch (Exception $e)
|
||
|
{
|
||
|
record_log($e->getTraceAsString());
|
||
|
throw $e;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
public function update()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$this->verify();
|
||
|
if ( $this->ad_id < 9000) return;
|
||
|
/* please adapt */
|
||
|
$sql=" update attr_def set ad_text = $1
|
||
|
,ad_type = $2,ad_size=$4,ad_extra=$5
|
||
|
where ad_id= $3";
|
||
|
$res=$this->cn->exec_sql(
|
||
|
$sql,
|
||
|
array($this->ad_text
|
||
|
,$this->ad_type
|
||
|
,$this->ad_id,$this->ad_size,$this->ad_extra)
|
||
|
);
|
||
|
}catch (Exception $e)
|
||
|
{
|
||
|
record_log($e->getTraceAsString());
|
||
|
throw $e;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
/**
|
||
|
*@brief load a object
|
||
|
*@return 0 on success -1 the object is not found
|
||
|
*/
|
||
|
public function load()
|
||
|
{
|
||
|
|
||
|
$sql="select ad_text
|
||
|
,ad_type,ad_size,ad_extra
|
||
|
from attr_def where ad_id=$1";
|
||
|
/* please adapt */
|
||
|
$res=$this->cn->get_array(
|
||
|
$sql,
|
||
|
array($this->ad_id)
|
||
|
);
|
||
|
|
||
|
if ( count($res) == 0 )
|
||
|
{
|
||
|
/* Initialize an empty object */
|
||
|
foreach ($this->variable as $key=>$value) $this->$key='';
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
foreach ($res[0] as $idx=>$value)
|
||
|
{
|
||
|
$this->$idx=$value;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
public function delete()
|
||
|
{
|
||
|
if ($this->ad_id < 9000) return;
|
||
|
$sql=$this->cn->exec_sql("delete from fiche_detail where ad_id=$1 ",
|
||
|
array($this->ad_id));
|
||
|
|
||
|
$sql="delete from jnt_fic_attr where ad_id=$1";
|
||
|
$res=$this->cn->exec_sql($sql,array($this->ad_id));
|
||
|
|
||
|
$sql="delete from attr_def where ad_id=$1";
|
||
|
$res=$this->cn->exec_sql($sql,array($this->ad_id));
|
||
|
|
||
|
}
|
||
|
/**
|
||
|
* Unit test for the class
|
||
|
*/
|
||
|
static function test_me()
|
||
|
{
|
||
|
$cn=new Database(25);
|
||
|
$cn->start();
|
||
|
echo h2info('Test object vide');
|
||
|
$obj=new Fiche_Attr($cn);
|
||
|
var_dump($obj);
|
||
|
|
||
|
echo h2info('Test object NON vide');
|
||
|
$obj->set_parameter('j_id',3);
|
||
|
$obj->load();
|
||
|
var_dump($obj);
|
||
|
|
||
|
echo h2info('Update');
|
||
|
$obj->set_parameter('j_qcode','NOUVEAU CODE');
|
||
|
$obj->save();
|
||
|
$obj->load();
|
||
|
var_dump($obj);
|
||
|
|
||
|
echo h2info('Insert');
|
||
|
$obj->set_parameter('j_id',0);
|
||
|
$obj->save();
|
||
|
$obj->load();
|
||
|
var_dump($obj);
|
||
|
|
||
|
echo h2info('Delete');
|
||
|
$obj->delete();
|
||
|
echo (($obj->load()==0)?'Trouve':'non trouve');
|
||
|
var_dump($obj);
|
||
|
$cn->rollback();
|
||
|
|
||
|
}
|
||
|
/*!
|
||
|
*@brief used with a usort function, to sort an array of Attribut on the attribut_id (ad_id)
|
||
|
*/
|
||
|
static function sort_by_id($o1,$o2)
|
||
|
{
|
||
|
if ( $o1->ad_id > $o2->ad_id ) return 1;
|
||
|
if ( $o1->ad_id == $o2->ad_id ) return 0;
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
//Fiche_Attr::test_me();
|
||
|
|
||
|
|
||
|
|