From aa9f0965c0d8b9cf8814faf095dd4c50c97ec480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Wed, 3 Jun 2015 17:31:42 +0200 Subject: [PATCH] Qual: PHP5 OOP, commented and typehinted class template --- dev/skeletons/skeleton_class.class.php | 647 ++++++++++++++----------- 1 file changed, 352 insertions(+), 295 deletions(-) diff --git a/dev/skeletons/skeleton_class.class.php b/dev/skeletons/skeleton_class.class.php index 1f5b56e661b..21c1beda9a1 100644 --- a/dev/skeletons/skeleton_class.class.php +++ b/dev/skeletons/skeleton_class.class.php @@ -1,7 +1,8 @@ - * Copyright (C) 2014 Juanjo Menent - * Copyright (C) 2015 Florian Henry +/* Copyright (C) 2007-2012 Laurent Destailleur + * Copyright (C) 2014 Juanjo Menent + * Copyright (C) 2015 Florian Henry + * Copyright (C) 2015 Raphaƫl Doursenaud * Copyright (C) ---Put here your own copyright and developer email--- * * This program is free software; you can redistribute it and/or modify @@ -19,407 +20,463 @@ */ /** - * \file dev/skeletons/skeleton_class.class.php - * \ingroup mymodule othermodule1 othermodule2 - * \brief This file is an example for a CRUD class file (Create/Read/Update/Delete) - * Put here some comments + * \file dev/skeletons/skeleton_class.class.php + * \ingroup mymodule othermodule1 othermodule2 + * \brief This file is an example for a CRUD class file (Create/Read/Update/Delete) + * Put some comments here */ // Put here all includes required by your class file -require_once(DOL_DOCUMENT_ROOT."/core/class/commonobject.class.php"); -//require_once(DOL_DOCUMENT_ROOT."/societe/class/societe.class.php"); -//require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php"); - +require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php'; +//require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php'; +//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php'; /** - * Put here description of your class + * Class Skeleton_Class + * + * Put here description of your class */ class Skeleton_Class extends CommonObject { - var $db; //!< To store db handler - var $error; //!< To return error code (or message) - var $errors=array(); //!< To return several error codes (or messages) - var $element='skeleton'; //!< Id that identify managed objects - var $table_element='skeleton'; //!< Name of table without prefix where object is stored + /** + * @var DoliDb Database handler + */ + protected $db; - var $lines=array(); + /** + * @var string Error code (or message) + * @deprecated + * @see Skeleton_Class::errors + */ + public $error; + /** + * @var string[] Error codes (or messages) + */ + public $errors = array(); + /** + * @var string Id to identify managed objects + */ + public $element = 'skeleton'; + /** + * @var string Name of table without prefix where object is stored + */ + public $table_element = 'skeleton'; - var $id; - var $prop1; - var $prop2; + /** + * @var Skeleton_ClassLine[] Lines + */ + public $lines = array(); + + /** + * @var int ID + */ + public $id; + /** + * @var mixed Sample property 1 + */ + public $prop1; + /** + * @var mixed Sample property 2 + */ + public $prop2; //... + /** + * Constructor + * + * @param DoliDb $db Database handler + */ + public function __construct( DoliDB $db ) + { + $this->db = $db; - /** - * Constructor - * - * @param DoliDb $db Database handler - */ - function __construct($db) - { - $this->db = $db; - return 1; - } + return 1; + } + /** + * Create object into database + * + * @param User $user User that creates + * @param bool $notrigger false=launch triggers after, true=disable triggers + * + * @return int <0 if KO, Id of created object if OK + */ + public function create( User $user, $notrigger = false ) + { + dol_syslog( __METHOD__, LOG_DEBUG ); - /** - * Create object into database - * - * @param User $user User that creates - * @param int $notrigger 0=launch triggers after, 1=disable triggers - * @return int <0 if KO, Id of created object if OK - */ - function create($user, $notrigger=0) - { - global $conf, $langs; - $error=0; + $error = 0; // Clean parameters - if (isset($this->prop1)) $this->prop1=trim($this->prop1); - if (isset($this->prop2)) $this->prop2=trim($this->prop2); + if (isset( $this->prop1 )) { + $this->prop1 = trim( $this->prop1 ); + } + if (isset( $this->prop2 )) { + $this->prop2 = trim( $this->prop2 ); + } //... // Check parameters // Put here code to add control on parameters values - // Insert request - $sql = "INSERT INTO ".MAIN_DB_PREFIX.$this->table_element."("; - $sql.= " field1,"; - $sql.= " field2"; + // Insert request + $sql = 'INSERT INTO ' . MAIN_DB_PREFIX . $this->table_element . '('; + $sql .= ' field1,'; + $sql .= ' field2'; //... - $sql.= ") VALUES ("; - $sql.= " '".$this->prop1."',"; - $sql.= " '".$this->prop2."'"; + $sql .= ') VALUES ('; + $sql .= ' \'' . $this->prop1 . '\','; + $sql .= ' \'' . $this->prop2 . '\''; //... - $sql.= ")"; + $sql .= ')'; $this->db->begin(); - dol_syslog(__METHOD__, LOG_DEBUG); - $resql=$this->db->query($sql); - if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } + $resql = $this->db->query( $sql ); + if (!$resql) { + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog( __METHOD__ . ' ' . join( ',', $this->errors ), LOG_ERR ); + } - if (! $error) - { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX.$this->table_element); + if (!$error) { + $this->id = $this->db->last_insert_id( MAIN_DB_PREFIX . $this->table_element ); - if (! $notrigger) - { - // Uncomment this and change MYOBJECT to your own tag if you - // want this action to call a trigger. + if (!$notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action to call a trigger. - //// Call triggers - //$result=$this->call_trigger('MYOBJECT_CREATE',$user); - //if ($result < 0) $error++; - //// End call triggers + //// Call triggers + //$result=$this->call_trigger('MYOBJECT_CREATE',$user); + //if ($result < 0) $error++; + //// End call triggers } - } + } - // Commit or rollback - if ($error) - { + // Commit or rollback + if ($error) { $this->db->rollback(); - return -1*$error; - } - else - { + + return - 1 * $error; + } else { $this->db->commit(); - return $this->id; + + return $this->id; } - } + } + /** + * Load object in memory from the database + * + * @param int $id Id object + * @param string $ref Ref + * + * @return int <0 if KO, 0 if not found, >0 if OK + */ + public function fetch( $id, $ref = null ) + { + dol_syslog( __METHOD__, LOG_DEBUG ); - /** - * Load object in memory from the database - * - * @param int $id Id object - * @param string $ref Ref - * @return int <0 if KO, 0 if not found, >0 if OK - */ - function fetch($id,$ref='') - { - global $langs; - $sql = "SELECT"; - $sql.= " t.rowid,"; - $sql.= " t.field1,"; - $sql.= " t.field2"; + $sql = 'SELECT'; + $sql .= ' t.rowid,'; + $sql .= ' t.field1,'; + $sql .= ' t.field2'; //... - $sql.= " FROM ".MAIN_DB_PREFIX.$this->table_element." as t"; - if ($ref) $sql.= " WHERE t.ref = '".$ref."'"; - else $sql.= " WHERE t.rowid = ".$id; + $sql .= ' FROM ' . MAIN_DB_PREFIX . $this->table_element . ' as t'; + if (null !== $ref) { + $sql .= ' WHERE t.ref = ' . '\'' . $ref . '\''; + } else { + $sql .= ' WHERE t.rowid = ' . $id; + } - dol_syslog(get_class($this)."::fetch"); - $resql=$this->db->query($sql); - if ($resql) - { - $numrows = $this->db->num_rows($resql); - if ($numrows) - { - $obj = $this->db->fetch_object($resql); + $resql = $this->db->query( $sql ); + if ($resql) { + $numrows = $this->db->num_rows( $resql ); + if ($numrows) { + $obj = $this->db->fetch_object( $resql ); - $this->id = $obj->rowid; - $this->prop1 = $obj->field1; - $this->prop2 = $obj->field2; + $this->id = $obj->rowid; + $this->prop1 = $obj->field1; + $this->prop2 = $obj->field2; //... - } - $this->db->free($resql); + } + $this->db->free( $resql ); - return ($numrows?1:0); - } - else - { - $this->error="Error ".$this->db->lasterror(); - return -1; - } - } + if ($numrows) { + return 1; + } else { + return 0; + } + } else { + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog( __METHOD__ . ' ' . join( ',', $this->errors ), LOG_ERR ); - /** - * Load object in memory from the database - * - * @param string $sortorder Sort Order + return - 1; + } + } + + /** + * Load object in memory from the database + * + * @param string $sortorder Sort Order * @param string $sortfield Sort field - * @param int $limit offset limit - * @param int $offset offset limit - * @param array $filter filter array + * @param int $limit offset limit + * @param int $offset offset limit + * @param array $filter filter array + * * @return int <0 if KO, >0 if OK - */ - function fetchAll($sortorder, $sortfield, $limit, $offset, $filter = array()) - { - global $langs; - $sql = "SELECT"; - $sql.= " t.rowid,"; - $sql.= " t.field1,"; - $sql.= " t.field2"; - //... - $sql.= " FROM ".MAIN_DB_PREFIX."mytable as t"; + */ + public function fetchAll( $sortorder, $sortfield, $limit, $offset, array $filter = array() ) + { + dol_syslog( __METHOD__, LOG_DEBUG ); - // Manage filter - $sqlwhere=array(); - if (count($filter)>0) { - foreach ( $filter as $key => $value ) { - //$sqlwhere []= ' AND '. $key . ' LIKE \'%' . $this->db->escape($value) . '%\''; - } - } - if (count($sqlwhere)>0) { - $sql.= ' WHERE '.implode(' AND ', $sqlwhere); - } - $sql .= " ORDER BY " . $sortfield . " " . $sortorder . " " . $this->db->plimit($limit + 1, $offset); + $sql = 'SELECT'; + $sql .= ' t.rowid,'; + $sql .= ' t.field1,'; + $sql .= ' t.field2'; + //... + $sql .= ' FROM ' . MAIN_DB_PREFIX . 'mytable as t'; - $this->lines = array (); + // Manage filter + $sqlwhere = array(); + if (count( $filter ) > 0) { + foreach ($filter as $key => $value) { + $sqlwhere [] = ' AND ' . $key . ' LIKE \'%' . $this->db->escape( $value ) . '%\''; + } + } + if (count( $sqlwhere ) > 0) { + $sql .= ' WHERE ' . implode( ' AND ', $sqlwhere ); + } + $sql .= ' ORDER BY ' . $sortfield . ' ' . $sortorder . ' ' . $this->db->plimit( $limit + 1, $offset ); - dol_syslog(get_class($this)."::fetchAll", LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - $num = $this->db->num_rows($resql); + $this->lines = array(); - while ($obj = $this->db->fetch_object($resql)) - { - $line=new Skeleton_ClassLine(); + $resql = $this->db->query( $sql ); + if ($resql) { + $num = $this->db->num_rows( $resql ); - $line->id = $obj->rowid; - $line->prop1 = $obj->field1; - $line->prop2 = $obj->field2; + while ($obj = $this->db->fetch_object( $resql )) { + $line = new Skeleton_ClassLine(); - $this->lines[]=$line; - //... - } - $this->db->free($resql); + $line->id = $obj->rowid; + $line->prop1 = $obj->field1; + $line->prop2 = $obj->field2; - return $num; - } - else - { - $this->error="Error ".$this->db->lasterror(); - dol_syslog(get_class($this)."::fetchAll ".$this->error, LOG_ERR); - return -1; - } - } + $this->lines[] = $line; + //... + } + $this->db->free( $resql ); + return $num; + } else { + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog( __METHOD__ . ' ' . join( ',', $this->errors ), LOG_ERR ); - /** - * Update object into database - * - * @param User $user User that modifies - * @param int $notrigger 0=launch triggers after, 1=disable triggers - * @return int <0 if KO, >0 if OK - */ - function update($user, $notrigger=0) - { - global $conf, $langs; - $error=0; + return - 1; + } + } + + /** + * Update object into database + * + * @param User $user User that modifies + * @param bool $notrigger false=launch triggers after, true=disable triggers + * + * @return int <0 if KO, >0 if OK + */ + public function update( User $user, $notrigger = false ) + { + $error = 0; + + dol_syslog( __METHOD__, LOG_DEBUG ); // Clean parameters - if (isset($this->prop1)) $this->prop1=trim($this->prop1); - if (isset($this->prop2)) $this->prop2=trim($this->prop2); + if (isset( $this->prop1 )) { + $this->prop1 = trim( $this->prop1 ); + } + if (isset( $this->prop2 )) { + $this->prop2 = trim( $this->prop2 ); + } //... // Check parameters // Put here code to add a control on parameters values - // Update request - $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element." SET"; - $sql.= " field1=".(isset($this->field1)?"'".$this->db->escape($this->field1)."'":"null").","; - $sql.= " field2=".(isset($this->field2)?"'".$this->db->escape($this->field2)."'":"null").""; + // Update request + $sql = 'UPDATE ' . MAIN_DB_PREFIX . $this->table_element . ' SET'; + if (isset( $this->field1 )) { + $sql .= ' field1=\'' . $this->db->escape( $this->field1 ) . '\','; + } else { + $sql .= ' field1=null' . ','; + } + if (isset( $this->field2 )) { + $sql .= ' field2=\'' . $this->db->escape( $this->field2 ) . '\''; + } else { + $sql .= ' field2=null'; + } //... - $sql.= " WHERE rowid=".$this->id; + $sql .= ' WHERE rowid=' . $this->id; $this->db->begin(); - dol_syslog(__METHOD__); - $resql = $this->db->query($sql); - if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - - if (! $error && ! $notrigger) - { - // Uncomment this and change MYOBJECT to your own tag if you - // want this action calls a trigger. - - //// Call triggers - //$result=$this->call_trigger('MYOBJECT_MODIFY',$user); - //if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail} - //// End call triggers + $resql = $this->db->query( $sql ); + if (!$resql) { + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog( __METHOD__ . ' ' . join( ',', $this->errors ), LOG_ERR ); } - // Commit or rollback - if ($error) - { + if (!$error && !$notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + //// Call triggers + //$result=$this->call_trigger('MYOBJECT_MODIFY',$user); + //if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail} + //// End call triggers + } + + // Commit or rollback + if ($error) { $this->db->rollback(); - return -1*$error; - } - else - { + + return - 1 * $error; + } else { $this->db->commit(); - return 1; - } - } - - /** - * Delete object in database - * - * @param User $user User that deletes - * @param int $notrigger 0=launch triggers after, 1=disable triggers - * @return int <0 if KO, >0 if OK - */ - function delete($user, $notrigger=0) - { - global $conf, $langs; - $error=0; - - $this->db->begin(); - - if (! $error) - { - if (! $notrigger) - { - // Uncomment this and change MYOBJECT to your own tag if you - // want this action calls a trigger. - - //// Call triggers - //$result=$this->call_trigger('MYOBJECT_DELETE',$user); - //if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail} - //// End call triggers - } - } - - if (! $error) - { - $sql = "DELETE FROM ".MAIN_DB_PREFIX.$this->table_element; - $sql.= " WHERE rowid=".$this->id; - - dol_syslog(__METHOD__); - $resql = $this->db->query($sql); - if (! $resql) { $error++; $this->errors[]="Error ".$this->db->lasterror(); } - } - - // Commit or rollback - if ($error) - { - $this->db->rollback(); - return -1*$error; - } - else - { - $this->db->commit(); return 1; } } + /** + * Delete object in database + * + * @param User $user User that deletes + * @param bool $notrigger false=launch triggers after, true=disable triggers + * + * @return int <0 if KO, >0 if OK + */ + public function delete( User $user, $notrigger = false ) + { + dol_syslog( __METHOD__, LOG_DEBUG ); + $error = 0; + + $this->db->begin(); + + if (!$error) { + if (!$notrigger) { + // Uncomment this and change MYOBJECT to your own tag if you + // want this action calls a trigger. + + //// Call triggers + //$result=$this->call_trigger('MYOBJECT_DELETE',$user); + //if ($result < 0) { $error++; //Do also what you must do to rollback action if trigger fail} + //// End call triggers + } + } + + if (!$error) { + $sql = 'DELETE FROM ' . MAIN_DB_PREFIX . $this->table_element; + $sql .= ' WHERE rowid=' . $this->id; + + $resql = $this->db->query( $sql ); + if (!$resql) { + $error ++; + $this->errors[] = 'Error ' . $this->db->lasterror(); + dol_syslog( __METHOD__ . ' ' . join( ',', $this->errors ), LOG_ERR ); + } + } + + // Commit or rollback + if ($error) { + $this->db->rollback(); + + return - 1 * $error; + } else { + $this->db->commit(); + + return 1; + } + } /** - * Load an object from its id and create a new one in database + * Load an object from its id and create a new one in database * - * @param int $fromid Id of object to clone - * @return int New id of clone + * @param int $fromid Id of object to clone + * + * @return int New id of clone */ - function createFromClone($fromid) + public function createFromClone( $fromid ) { - global $user,$langs; + dol_syslog( __METHOD__, LOG_DEBUG ); - $error=0; - - $object=new Skeleton_Class($this->db); + global $user; + $error = 0; + $object = new Skeleton_Class( $this->db ); $this->db->begin(); // Load source object - $object->fetch($fromid); - $object->id=0; - $object->statut=0; + $object->fetch( $fromid ); + // Reset object + $object->id = 0; // Clear fields // ... // Create clone - $result=$object->create($user); + $result = $object->create( $user ); // Other options - if ($result < 0) - { - $this->error=$object->error; - $error++; - } - - if (! $error) - { - - + if ($result < 0) { + $error ++; + $this->errors = $object->errors; + dol_syslog( __METHOD__ . ' ' . join( ',', $this->errors ), LOG_ERR ); } // End - if (! $error) - { + if (!$error) { $this->db->commit(); + return $object->id; - } - else - { + } else { $this->db->rollback(); - return -1; + + return - 1; } } - /** - * Initialise object with example values - * Id must be 0 if object instance is a specimen + * Initialise object with example values + * Id must be 0 if object instance is a specimen * - * @return void + * @return void */ - function initAsSpecimen() + public function initAsSpecimen() { - $this->id=0; - $this->prop1='prop1'; - $this->prop2='prop2'; + $this->id = 0; + $this->prop1 = 'prop1'; + $this->prop2 = 'prop2'; } } +/** + * Class Skeleton_ClassLine + */ class Skeleton_ClassLine { - var $id; - var $prop1; - var $prop2; + /** + * @var int ID + */ + public $id; + /** + * @var mixed Sample line property 1 + */ + public $prop1; + /** + * @var mixed Sample line property 2 + */ + public $prop2; }