Skip to content
Snippets Groups Projects
Commit 84d0ab47 authored by Cédric Salvador's avatar Cédric Salvador Committed by Raphaël Doursenaud
Browse files

Link class with CRUD methods

parent d47bb95b
No related branches found
No related tags found
No related merge requests found
<?php
/* Copyright (C) 2013 Cédric Salvador <csalvador@gpcsolutions.fr>
*
* 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 <http://www.gnu.org/licenses/>.
*/
/**
* \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;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment