diff --git a/dev/skeletons/.cvsignore b/dev/skeletons/.cvsignore index 777c19f0da5..2dda6229d24 100644 --- a/dev/skeletons/.cvsignore +++ b/dev/skeletons/.cvsignore @@ -1 +1,2 @@ -out.* +out.* +socpeople* diff --git a/dev/skeletons/build_class_from_table.php b/dev/skeletons/build_class_from_table.php index 46d6615445f..32339739c65 100644 --- a/dev/skeletons/build_class_from_table.php +++ b/dev/skeletons/build_class_from_table.php @@ -121,6 +121,13 @@ else //var_dump($property); +// Define working variables +$table=strtolower($table); +$tablenollx=eregi_replace('llx_','',$table); +$class=ucfirst($tablenollx); +$classmin=strtolower($class); + + // Read skeleton_class.class.php file $skeletonfile='skeleton_class.class.php'; $sourcecontent=file_get_contents($skeletonfile); @@ -132,16 +139,10 @@ if (! $sourcecontent) exit; } - -// Define content -$table=strtolower($table); -$tablenollx=eregi_replace('llx_','',$table); -$class=ucfirst($tablenollx); -$classmin=strtolower($class); +// Define output variables $outfile='out.'.$classmin.'.class.php'; $targetcontent=$sourcecontent; - // Substitute class name $targetcontent=preg_replace('/skeleton_class\.class\.php/', $classmin.'.class.php', $targetcontent); $targetcontent=preg_replace('/\$element=\'skeleton\'/', '\$element=\''.$classmin.'\'', $targetcontent); @@ -342,14 +343,52 @@ if ($fp) fclose($fp); print "\n"; print "File '".$outfile."' has been built in current directory.\n"; - return 1; } -else +else $error++; + + + +// Read skeleton_class.class.php file +$skeletonfile='skeleton_script.php'; +$sourcecontent=file_get_contents($skeletonfile); +if (! $sourcecontent) { - return -1; + print "\n"; + print "Error: Failed to read skeleton sample '".$skeletonfile."'\n"; + print "Try to run script from skeletons directory.\n"; + exit; } +// Define output variables +$outfile='out.'.$classmin.'_script.php'; +$targetcontent=$sourcecontent; + +// Substitute class name +$targetcontent=preg_replace('/skeleton_script\.php/', $classmin.'_script.php', $targetcontent); +$targetcontent=preg_replace('/\$element=\'skeleton\'/', '\$element=\''.$classmin.'\'', $targetcontent); +$targetcontent=preg_replace('/\$table_element=\'skeleton\'/', '\$table_element=\''.$classmin.'\'', $targetcontent); +$targetcontent=preg_replace('/Skeleton_class/', $class, $targetcontent); + +// Substitute comments +$targetcontent=preg_replace('/This file is an example to create a new class file/', 'Put here description of this class', $targetcontent); +$targetcontent=preg_replace('/\s*\/\/\.\.\./', '', $targetcontent); +$targetcontent=preg_replace('/Put here some comments/','Initialy built by build_class_from_table on '.strftime('%Y-%m-%d %H:%M',mktime()), $targetcontent); + +// Substitute table name +$targetcontent=preg_replace('/MAIN_DB_PREFIX."mytable/', 'MAIN_DB_PREFIX."'.$tablenollx, $targetcontent); + +// Build file +$fp=fopen($outfile,"w"); +if ($fp) +{ + fputs($fp, $targetcontent); + fclose($fp); + print "File '".$outfile."' has been built in current directory.\n"; +} +else $error++; + // -------------------- END OF BUILD_CLASS_FROM_TABLE SCRIPT -------------------- +print "You must rename files by removing the 'out.' prefix in their name.\n"; return $error; ?> diff --git a/dev/skeletons/skeleton_class.class.php b/dev/skeletons/skeleton_class.class.php index 9443b52ff54..cd2a71fa571 100644 --- a/dev/skeletons/skeleton_class.class.php +++ b/dev/skeletons/skeleton_class.class.php @@ -20,7 +20,7 @@ /** \file dev/skeletons/skeleton_class.class.php \ingroup mymodule othermodule1 othermodule2 - \brief This file is an example for a class file + \brief This file is an example for a CRUD class file (Create/Read/Update/Delete) \version $Id$ \author Put author name here \remarks Put here some comments @@ -64,12 +64,14 @@ class Skeleton_class // extends CommonObject /** * \brief Create in database - * \param user User that create - * \return int <0 si ko, >0 si ok + * \param user User that create + * \param notrigger 0=launch triggers after, 1=disable triggers + * \return int <0 if KO, Id of created object if OK */ - function create($user) + function create($user, $notrigger=0) { global $conf, $langs; + $error=0; // Clean parameters $this->prop1=trim($this->prop1); @@ -90,38 +92,58 @@ class Skeleton_class // extends CommonObject //... $sql.= ")"; - dolibarr_syslog("Skeleton_class::create sql=".$sql, LOG_DEBUG); + $this->db->begin(); + + dolibarr_syslog(get_class($this)."::create sql=".$sql, LOG_DEBUG); $resql=$this->db->query($sql); - if ($resql) + if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } + + if (! $error) { $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."mytable"); - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + if (! $notrigger) + { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action call a trigger. + + //// Call triggers + //include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + //$interface=new Interfaces($this->db); + //$result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf); + //if ($result < 0) { $error++; $this->errors=$interface->errors; } + //// End call triggers + } + } + // Commit or rollback + if ($error) + { + foreach($this->errors as $errmsg) + { + dolibarr_syslog(get_class($this)."::create ".$errmsg, LOG_ERR); + $this->error.=($this->error?', '.$errmsg:$errmsg); + } + $this->db->rollback(); + return -1*$error; + } + else + { + $this->db->commit(); return $this->id; - } - else - { - $this->error="Error ".$this->db->lasterror(); - dolibarr_syslog("Skeleton_class::create ".$this->error, LOG_ERR); - return -1; - } + } } - /* + /** * \brief Update database * \param user User that modify - * \param notrigger 0=no, 1=yes (no update trigger) + * \param notrigger 0=launch triggers after, 1=disable triggers * \return int <0 if KO, >0 if OK */ function update($user=0, $notrigger=0) { global $conf, $langs; + $error=0; // Clean parameters $this->prop1=trim($this->prop1); @@ -138,36 +160,53 @@ class Skeleton_class // extends CommonObject //... $sql.= " WHERE rowid=".$this->id; - dolibarr_syslog("Skeleton_class::update sql=".$sql, LOG_DEBUG); + $this->db->begin(); + + dolibarr_syslog(get_class($this)."::update sql=".$sql, LOG_DEBUG); $resql = $this->db->query($sql); - if (! $resql) - { - $this->error="Error ".$this->db->lasterror(); - dolibarr_syslog("Skeleton_class::update ".$this->error, LOG_ERR); - return -1; - } - - if (! $notrigger) + if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } + + if (! $error) { - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - } - - return 1; + if (! $notrigger) + { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action call a trigger. + + //// Call triggers + //include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + //$interface=new Interfaces($this->db); + //$result=$interface->run_triggers('MYOBJECT_MODIFY',$this,$user,$langs,$conf); + //if ($result < 0) { $error++; $this->errors=$interface->errors; } + //// End call triggers + } + } + + // Commit or rollback + if ($error) + { + foreach($this->errors as $errmsg) + { + dolibarr_syslog(get_class($this)."::update ".$errmsg, LOG_ERR); + $this->error.=($this->error?', '.$errmsg:$errmsg); + } + $this->db->rollback(); + return -1*$error; + } + else + { + $this->db->commit(); + return 1; + } } - /* + /** * \brief Load object in memory from database * \param id id object - * \param user User that load * \return int <0 if KO, >0 if OK */ - function fetch($id, $user=0) + function fetch($id) { global $langs; $sql = "SELECT"; @@ -178,7 +217,7 @@ class Skeleton_class // extends CommonObject $sql.= " FROM ".MAIN_DB_PREFIX."mytable as t"; $sql.= " WHERE t.rowid = ".$id; - dolibarr_syslog("Skeleton_class::fetch sql=".$sql, LOG_DEBUG); + dolibarr_syslog(get_class($this)."::fetch sql=".$sql, LOG_DEBUG); $resql=$this->db->query($sql); if ($resql) { @@ -198,41 +237,64 @@ class Skeleton_class // extends CommonObject else { $this->error="Error ".$this->db->lasterror(); - dolibarr_syslog("Skeleton_class::fetch ".$this->error, LOG_ERR); + dolibarr_syslog(get_class($this)."::fetch ".$this->error, LOG_ERR); return -1; } } - /* + /** * \brief Delete object in database - * \param user User that delete - * \return int <0 if KO, >0 if OK + * \param user User that delete + * \param notrigger 0=launch triggers after, 1=disable triggers + * \return int <0 if KO, >0 if OK */ - function delete($user) + function delete($user, $notrigger=0) { global $conf, $langs; - + $error=0; + $sql = "DELETE FROM ".MAIN_DB_PREFIX."mytable"; $sql.= " WHERE rowid=".$this->id; - dolibarr_syslog("Skeleton_class::delete sql=".$sql); + $this->db->begin(); + + dolibarr_syslog(get_class($this)."::delete sql=".$sql); $resql = $this->db->query($sql); - if (! $resql) + if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } + + if (! $error) { - $this->error="Error ".$this->db->lasterror(); - dolibarr_syslog("Skeleton_class::delete ".$this->error, LOG_ERR); - return -1; + if (! $notrigger) + { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action call a trigger. + + //// Call triggers + //include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + //$interface=new Interfaces($this->db); + //$result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf); + //if ($result < 0) { $error++; $this->errors=$interface->errors; } + //// End call triggers + } + } + + // Commit or rollback + if ($error) + { + foreach($this->errors as $errmsg) + { + dolibarr_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR); + $this->error.=($this->error?', '.$errmsg:$errmsg); + } + $this->db->rollback(); + return -1*$error; + } + else + { + $this->db->commit(); + return 1; } - - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MYOBJECT_DELETE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers - - return 1; } diff --git a/dev/skeletons/skeleton_script.php b/dev/skeletons/skeleton_script.php index 38c9fd9245a..a2198dcc90d 100644 --- a/dev/skeletons/skeleton_script.php +++ b/dev/skeletons/skeleton_script.php @@ -1,5 +1,5 @@ +/* Copyright (C) 2007-2008 Laurent Destailleur * Copyright (C) ---Put here your own copyright and developer email--- * * This program is free software; you can redistribute it and/or modify @@ -33,62 +33,63 @@ if (eregi('([^\\\/]+)$',$script_file,$reg)) $script_file=$reg[1]; $path=eregi_replace($script_file,'',$_SERVER["PHP_SELF"]); if (substr($sapi_type, 0, 3) == 'cgi') { - echo "Erreur: Vous utilisez l'interpreteur PHP pour le mode CGI. Pour executer $script_file en ligne de commande, vous devez utiliser l'interpreteur PHP pour le mode CLI.\n"; + echo "Error: You ar usingr PH for CGI. To execute ".$script_file." from command line, you must use PHP for CLI mode.\n"; exit; } // Include Dolibarr environment require_once($path."../../htdocs/master.inc.php"); -// After this $db is a defined handler to database. - -// Main -$version='$Revision$'; -@set_time_limit(0); -$error=0; +// After this $db is an opened handler to database. We close it at end of file. +// Load main language strings $langs->load("main"); - -print "***** $script_file ($version) *****\n"; +// Global variables +$version='$Revision$'; +$error=0; // -------------------- START OF YOUR CODE HERE -------------------- +print "***** ".$script_file." (".$version.") *****\n"; + // Check parameters if (! isset($argv[1])) { - print "Usage: $script_file param1 param2 ...\n"; + print "Usage: ".$script_file." param1 param2 ...\n"; exit; } +@set_time_limit(0); // Show parameters // print 'Arg1='.$argv[1]."\n"; // print 'Arg2='.$argv[2]."\n"; -// An example of loading an object +// Example for inserting creating object in database /* require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php"); -dolibarr_syslog("***** $script_file FETCH"); +dolibarr_syslog($script_file." DELETE", LOG_DEBUG); $myobject=new Skeleton_class($db); -$result=$myobject->fetch(1,$user); +$id=$myobject->create($user); +if ($id < 0) dolibarr_print_error($db,$myobject->error); +*/ + + +// Example for reading object from database +/* +require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php"); +dolibarr_syslog($script_file." FETCH", LOG_DEBUG); +$myobject=new Skeleton_class($db); +$id=1; +$result=$myobject->fetch($id); if ($result < 0) dolibarr_print_error($db,$myobject->error); */ -// An example of inserting an object in database +// Example for updating object in database /* require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php"); -dolibarr_syslog("***** $script_file DELETE"); -$myobject=new Skeleton_class($db); -$result=$myobject->delete($user); -if ($result < 0) dolibarr_print_error($db,$myobject->error); -*/ - - -// An example of updating an object in database -/* -require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php"); -dolibarr_syslog("***** $script_file UPDATE"); +dolibarr_syslog($script_file." UPDATE", LOG_DEBUG); $myobject=new Skeleton_class($db); $myobject->prop1='newvalue_prop1'; $myobject->prop2='newvalue_prop2'; @@ -97,24 +98,24 @@ if ($result < 0) dolibarr_print_error($db,$myobject->error); */ -// An example of deleting an object in database +// Example for deleting object in database /* require_once(DOL_DOCUMENT_ROOT."/../dev/skeletons/skeleton_class.class.php"); -dolibarr_syslog("***** $script_file DELETE"); +dolibarr_syslog($script_file." DELETE", LOG_DEBUG); $myobject=new Skeleton_class($db); $result=$myobject->delete($user); if ($result < 0) dolibarr_print_error($db,$myobject->error); */ -// An example of a direct SQL read +// An example of a direct SQL read without using the fetch method /* $sql = "SELECT field1, field2"; $sql.= " FROM ".MAIN_DB_PREFIX."c_pays"; $sql.= " WHERE field3 = 'xxx'"; $sql.= " ORDER BY field1 ASC"; -dolibarr_syslog("***** $script_file sql=".$sql); +dolibarr_syslog($script_file." sql=".$sql, LOG_DEBUG); $resql=$db->query($sql); if ($resql) { @@ -145,6 +146,7 @@ else // -------------------- END OF YOUR CODE -------------------- +$db->close(); return $error; ?>