From 84d0ab47f8e9cf6cdf8038ef36588c234acc3a8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Salvador?= Date: Mon, 29 Jul 2013 16:44:21 +0200 Subject: [PATCH] Link class with CRUD methods --- htdocs/link/class/link.class.php | 339 +++++++++++++++++++++++++++++++ 1 file changed, 339 insertions(+) create mode 100644 htdocs/link/class/link.class.php diff --git a/htdocs/link/class/link.class.php b/htdocs/link/class/link.class.php new file mode 100644 index 00000000000..5d7ce2dcf91 --- /dev/null +++ b/htdocs/link/class/link.class.php @@ -0,0 +1,339 @@ + + * + * 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 + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/link/class/link.class.php + * \ingroup link + * \brief File for link class + */ +require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php'; + + +/** + * Class to manage links + */ +class Link extends CommonObject +{ + public $element = 'link'; + public $table_element = 'links'; + + public $id; + public $entity; + public $datea; + public $url; + public $label; + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function __construct($db) + { + global $conf; + + $this->db = $db; + + return 1; + } + + + /** + * Create link in database + * + * @param User $user Object of user that ask creation + * @return int >= 0 if OK, < 0 if KO + */ + public function create($user='') + { + global $langs,$conf; + + $error=0; + $langs->load("errors"); + // Clean parameters + if (empty($this->label)) { + $this->label = trim(basename($this->url)); + } + if (empty($this->datea)) { + $this->datea = dol_now(); + } + $this->url = trim($this->url); + + dol_syslog(get_class($this)."::create ".$this->url); + + // Check parameters + if (empty($this->url)) { + $this->error = $langs->trans("NoUrl"); + return -1; + } + + $this->db->begin(); + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."links (entity, datea, url, label)"; + $sql .= " VALUES ('".$conf->entity."', '".$this->db->idate($this->datea)."'"; + $sql .= ", '" . $this->db->escape($this->url) . "'"; + $sql .= ", '" . $this->db->escape($this->label) . "')"; + + dol_syslog(get_class($this)."::create sql=".$sql); + $result = $this->db->query($sql); + if ($result) { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX . "links"); + + if ($this->id > 0) { + // Appel des triggers + include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('LINK_CREATE', $this, $user, $langs, $conf); + if ($result < 0) { + $error++; + $this->errors = $interface->errors; + } + // Fin appel triggers + } else { + $error++; + } + + if (! $error) + { + dol_syslog(get_class($this)."::Create success id=" . $this->id); + $this->db->commit(); + return $this->id; + } + else + { + dol_syslog(get_class($this)."::Create echec update " . $this->error, LOG_ERR); + $this->db->rollback(); + return -3; + } + } + else + { + if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') + { + + $this->error=$langs->trans("ErrorCompanyNameAlreadyExists",$this->name); + $result=-1; + } + else + { + $this->error=$this->db->lasterror(); + dol_syslog(get_class($this)."::Create fails insert sql=".$sql, LOG_ERR); + $result=-2; + } + $this->db->rollback(); + return $result; + } + } + + /** + * Update parameters of third party + * + * @param User $user User executing update + * @param int $call_trigger 0=no, 1=yes + * @return int <0 if KO, >=0 if OK + */ + public function update($user='', $call_trigger=1) + { + global $langs,$conf; + require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; + $langs->load("errors"); + $error=0; + + dol_syslog(get_class($this)."::Update id = " . $this->id . " call_trigger = " . $call_trigger); + + // Check parameters + if (empty($this->url)) { + $this->error = $langs->trans("NoURL"); + return -1; + } + + // Clean parameters + $this->url = clean_url($this->url,0); + if(empty($this->label)) { + $this->label = basename($this->url); + } + $this->label = trim($this->label); + + + $this->db->begin(); + + $sql = "UPDATE " . MAIN_DB_PREFIX . "links SET "; + $sql .= "entity = '" . $conf->entity ."'"; + $sql .= ", datea = '" . $this->db->idate(dol_now()) . "'"; + $sql .= ", url = '" . $this->db->escape($this->url) ."'"; + $sql .= ", label = '" . $this->db->escape($this->label) ."'"; + $sql .= " WHERE rowid = '" . $this->id ."'"; + + + dol_syslog(get_class($this)."::Update sql = " .$sql); + $resql = $this->db->query($sql); + if ($resql) + { + if ($call_trigger) { + // Appel des triggers + include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + $interface = new Interfaces($this->db); + $result = $interface->run_triggers('LINK_MODIFY', $this, $user, $langs, $conf); + if ($result < 0) { + $error++; + $this->errors = $interface->errors; + } + // Fin appel triggers + } + + if (! $error) { + dol_syslog(get_class($this) . "::Update success"); + $this->db->commit(); + return 1; + } else { + $this->db->rollback(); + return -1; + } + } else { + if ($this->db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS') { + // Doublon + $this->error = $langs->trans("ErrorDuplicateField"); + $result = -1; + } else { + $this->error = $langs->trans("Error sql = " . $sql); + dol_syslog(get_class($this) . "::Update fails update sql = " . $sql, LOG_ERR); + $result = -2; + } + $this->db->rollback(); + return $result; + } + } + + /** + * Loads all links from database + * @return array of Link objects + * + * */ + public function fetchAll() + { + $sql = "SELECT rowid, entity, datea, url, label FROM " . MAIN_DB_PREFIX . "links"; + $resql = $this->db->query($sql); + dol_syslog(get_class($this)."::fetchAll " . $sql, LOG_DEBUG); + if ($resql) { + $num = $this->db->num_rows($resql); + dol_syslog(get_class($this)."::fetchAll " . $num . "records", LOG_DEBUG); + if ($num > 0) { + $links = array(); + while ($obj = $this->db->fetch_object($resql)) { + $link = new Link($db); + $link->id = $obj->rowid; + $link->entity = $obj->entity; + $link->datea = $this->db->jdate($obj->datea); + $link->url = $obj->url; + $link->label = $obj->label; + $links[] = $link; + } + return $links; + } else { + return 0; + } + } else { + dol_syslog(get_class($this) . "::FetchAll fails sql=" . $sql, LOG_ERR); + return -1; + } + } + + /* + * Loads a link from database + * @param rowid id of link to load + * @return int 1 if ok, 0 if no record found, -1 if error + * + * */ + public function fetch($rowid=null) + { + if (empty($rowid)) { + $rowid = $this->id; + } + $sql = "SELECT rowid, entity, datea, url, label FROM " . MAIN_DB_PREFIX . "links"; + $sql .= " WHERE rowid = " . $rowid; + $resql = $this->db->query($sql); + dol_syslog(get_class($this)."::fetch " . $sql, LOG_DEBUG); + if ($resql) { + if($this->db->num_rows($resql) > 0) { + $obj = $this->db->fetch_object($resql); + $this->entity = $obj->entity; + $this->datea = $this->db->jdate($obj->datea); + $this->url = $obj->url; + $this->label = $obj->label; + return 1; + } else { + $this->error = 'Fetch no link found for id = ' . $rowid; + dol_syslog($this->error, LOG_ERR); + return 0; + } + } else { + dol_syslog($this->db->error(), LOG_ERR); + $this->error=$this->db->error(); + return -1; + } + } + + /** + * Delete a link from database + * + * @return int <0 if KO, 0 if nothing done, >0 if OK + */ + public function delete() + { + global $user, $langs, $conf; + + dol_syslog(get_class($this)."::delete", LOG_DEBUG); + $error = 0; + + $this->db->begin(); + + // Remove link + + $sql = "DELETE FROM " . MAIN_DB_PREFIX . "links"; + $sql.= " WHERE rowid = " . $this->id; + dol_syslog(get_class($this)."::delete sql=" . $sql, LOG_DEBUG); + if (! $this->db->query($sql)) { + $error++; + $this->error = $this->db->lasterror(); + dol_syslog(get_class($this)."::delete error -4 " . $this->error, LOG_ERR); + } + + + if (! $error) { + // Appel des triggers + include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; + $interface=new Interfaces($this->db); + $result = $interface->run_triggers('LINK_DELETE', $this, $user, $langs, $conf); + if ($result < 0) { + $error++; + $this->errors = $interface->errors; + } + // Fin appel triggers + } + + if (! $error) { + $this->db->commit(); + + return 1; + } else { + $this->db->rollback(); + return -1; + } + + } + +}