Works on module hook integration

This commit is contained in:
Regis Houssin 2010-09-07 15:14:18 +00:00
parent 925af37018
commit 2b2e2225aa
2 changed files with 10 additions and 718 deletions

View File

@ -1256,7 +1256,8 @@ class CommonObject
}
$classname = ucfirst($module);
$this->objModules[] = new $classname($this->db);
$obj_module = new $classname($this->db);
$this->objModules[$obj_module->module_number] = $obj_module;
}
}
}
@ -1353,7 +1354,14 @@ class CommonObject
{
$var=!$var;
$this->printLine($line,$var,$num,$i,$dateSelector);
if ($line->product_type == 9 && ! empty($line->special_code))
{
$this->objModules[$line->special_code]->printObjectLine($this,$num,$i);
}
else
{
$this->printLine($line,$var,$num,$i,$dateSelector);
}
$i++;
}

View File

@ -1,716 +0,0 @@
<?php
/* Copyright (C) 2010 Regis Houssin <regis@dolibarr.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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/**
* \file htdocs/milestone/class/milestone.class.php
* \ingroup milestone
* \brief Fichier de la classe des jalons
* \version $Id$
*/
/**
* \class Milestone
* \brief Classe permettant la gestion des jalons
*/
class Milestone extends CommonObject
{
var $db;
var $error;
var $element='milestone';
var $table_element='milestone';
var $table_element_line='milestonedet';
var $fk_element='fk_milestone';
// Id of module
var $module_number=1790;
var $id;
var $label;
var $description;
var $priority;
var $object;
var $elementid;
var $elementtype;
var $rang;
var $rangtouse;
var $datec;
var $dateo;
var $datee;
var $lines=array(); // Tableau en memoire des jalons
/**
* Constructor
* @param DB acces base de donnees
* @param id milestone id
*/
function Milestone($DB)
{
$this->db = $DB;
}
/**
* Charge le jalon
* @param id id du jalon a charger
*/
function fetch($id)
{
$sql = "SELECT rowid, label, description, fk_element, elementtype";
$sql.= ", datec, tms, dateo, datee, priority, fk_user_creat, rang";
$sql.= " FROM ".MAIN_DB_PREFIX."milestone";
$sql.= " WHERE rowid = ".$id;
dol_syslog("Milestone::fetch sql=".$sql);
$resql = $this->db->query ($sql);
if ($resql)
{
$res = $this->db->fetch_array($resql);
$this->id = $res['rowid'];
$this->label = $res['label'];
$this->description = $res['description'];
$this->elementid = $res['fk_element'];
$this->elementtype = $res['elementtype'];
$this->db->free($resql);
}
else
{
dol_print_error ($this->db);
return -1;
}
}
/**
* Ajoute le jalon dans la base de donnees
* @return int -1 : erreur SQL
* -2 : nouvel ID inconnu
* -3 : jalon invalide
*/
function create($user)
{
global $conf,$langs;
$langs->load('milestone');
// Clean parameters
$this->label=trim($this->label);
$this->description=trim($this->description);
$this->db->begin();
$result = $this->object->addline(
$this->object->id,
$this->description,
0,
0,
0,
0,
0,
0,
0,
0,
0,
'HT',
0,
$this->dateo,
$this->datee,
$this->product_type,
$this->rang,
$this->special_code
);
/*
$result=$this->object->addline(
$this->object->id,
$this->description,
0,
0,
0,
0,
0,
0,
0,
'HT',
0,
0,
$this->product_type,
$this->rang,
$this->special_code
);
*/
if ($result > 0)
{
$sql = "INSERT INTO ".MAIN_DB_PREFIX."milestone (";
$sql.= "label";
$sql.= ", fk_element";
$sql.= ", elementtype";
$sql.= ", dateo";
$sql.= ", datee";
$sql.= ") VALUES (";
$sql.= "'".addslashes($this->label)."'";
$sql.= ", ".$this->object->line->rowid;
$sql.= ", '".addslashes($this->object->element)."'";
$sql.= ", ".($this->dateo!=''?$this->db->idate($this->dateo):'null');
$sql.= ", ".($this->datee!=''?$this->db->idate($this->datee):'null');
$sql.= ")";
$res = $this->db->query ($sql);
if ($res)
{
$this->id = $this->db->last_insert_id (MAIN_DB_PREFIX."milestone");
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('MILESTONE_CREATE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
$this->db->commit();
return 1;
}
else
{
$this->error=$this->db->error();
dol_syslog("Error sql=$sql, error=".$this->error,LOG_ERR);
$this->db->rollback();
return -1;
}
}
else
{
$this->error=$this->db->error();
dol_syslog("Error sql=$sql, error=".$this->error,LOG_ERR);
$this->db->rollback();
return -2;
}
}
}
/**
* Update milestone
* @return int 1 : OK
* -1 : SQL error
* -2 : invalid milestone
*/
function update($user)
{
global $conf;
// Clean parameters
$this->label=trim($this->label);
$this->description=trim($this->description);
$this->db->begin();
$sql = "UPDATE ".MAIN_DB_PREFIX."milestone SET";
$sql.= " label = '".addslashes($this->label)."'";
$sql.= ", description = '".addslashes($this->description)."'";
$sql.= " WHERE rowid = ".$this->id;
dol_syslog("Milestone::update sql=".$sql);
if ($this->db->query($sql))
{
$this->db->commit();
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('MILESTONE_MODIFY',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
return 1;
}
else
{
$this->db->rollback();
dol_print_error($this->db);
return -1;
}
}
/**
* Delete milestone
*/
function remove()
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."milestonedet";
$sql.= " WHERE fk_milestone = ".$this->id;
if (!$this->db->query($sql))
{
dol_print_error($this->db);
return -1;
}
$sql = "DELETE FROM ".MAIN_DB_PREFIX."milestone";
$sql.= " WHERE rowid = ".$this->id;
if (!$this->db->query($sql))
{
dol_print_error($this->db);
return -1;
}
else
{
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php");
$interface=new Interfaces($this->db);
$result=$interface->run_triggers('MILESTONE_DELETE',$this,$user,$langs,$conf);
if ($result < 0) { $error++; $this->errors=$interface->errors; }
// Fin appel triggers
return 1;
}
}
/**
* \brief Return an array of object milestones
* \param object
*/
function getObjectList($object)
{
$sql = "SELECT rowid, label, description, fk_element, elementtype";
$sql.= ", datec, tms, dateo, datee, priority, fk_user_creat, rang";
$sql.= " FROM ".MAIN_DB_PREFIX."milestone";
$sql.= " WHERE fk_element = ".$object->id;
$sql.= " AND elementtype = '".$object->element."'";
$sql.= " ORDER BY rang ASC, rowid";
$resql = $this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
$i = 0;
while ($i < $num)
{
$obj = $this->db->fetch_object($resql);
$this->lines[$i]->id = $obj->rowid;
$this->lines[$i]->label = $obj->label;
$this->lines[$i]->description = $obj->description;
$this->lines[$i]->elementid = $obj->fk_element;
$this->lines[$i]->elementtype = $obj->elementtype;
$this->lines[$i]->datec = $this->db->jdate($obj->datec);
$this->lines[$i]->datem = $this->db->jdate($obj->datem);
$this->lines[$i]->dateo = $this->db->jdate($obj->dateo);
$this->lines[$i]->datee = $this->db->jdate($obj->datee);
$this->lines[$i]->priority = $obj->priority;
$this->lines[$i]->fk_user_creat = $obj->fk_user_creat;
$this->lines[$i]->rang = $obj->rang;
$i++;
}
$this->db->free($resql);
return 1;
}
else
{
$this->error=$this->db->error().' sql='.$sql;
dol_syslog("Milestone::getObjectMilestones ".$this->error, LOG_ERR);
return -1;
}
}
/**
* \brief Link an element to the milestone
* \param element Element to link to milestone
* \return int 1 : OK, -1 : erreur SQL, -2 : id non renseign, -3 : Already linked
*/
function link_element($element)
{
if ($this->id == -1)
{
return -2;
}
$sql = "INSERT INTO ".MAIN_DB_PREFIX."milestonedet (fk_milestone, fk_element_line)";
$sql.= " VALUES (".$this->id.", ".$element->id.")";
if ($this->db->query($sql))
{
return 1;
}
else
{
if ($this->db->lasterrno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
$this->error=$this->db->lasterrno();
return -3;
}
else
{
$this->error=$this->db->error().' sql='.$sql;
}
return -1;
}
}
/**
* \brief Unlink an element to the milestone
* \param element Element to unlink to milestone
* \return int 1 : OK, -1 : KO
*/
function unlink_element($element)
{
$sql = "DELETE FROM ".MAIN_DB_PREFIX."milestonedet";
$sql.= " WHERE fk_milestone = ".$this->id;
$sql.= " AND fk_element_line = ".$element->id;
if ($this->db->query($sql))
{
return 1;
}
else
{
$this->error=$this->db->error().' sql='.$sql;
return -1;
}
}
/**
* \brief Return list of contents of a milestone
*/
function get_elements()
{
$objs = array();
$sql = "SELECT fk_element_line";
$sql.= " FROM ".MAIN_DB_PREFIX."milestonedet";
$sql.= " WHERE fk_milestone = ".$this->id;
dol_syslog("Milestone::get_element sql=".$sql);
$resql = $this->db->query($sql);
if ($resql)
{
$num = $this->db->num_rows($resql);
$i = 0;
while ($i < $num)
{
$obj = $this->db->fetch_object($resql);
$objs[$i] = $obj->fk_element_line;
$i++;
}
return $objs;
}
else
{
$this->error=$this->db->error().' sql='.$sql;
dol_syslog("Milestone::get_element ".$this->error, LOG_ERR);
return -1;
}
}
/**
* \brief Return name and link of category (with picto)
* \param withpicto 0=Pas de picto, 1=Inclut le picto dans le lien, 2=Picto seul
* \param option Sur quoi pointe le lien ('', 'xyz')
* \param maxlength Max length of text
* \return string Chaine avec URL
*/
function getNomUrl($withpicto=0,$option='',$maxlength=0)
{
global $langs;
$result='';
$lien = '<a href="'.DOL_URL_ROOT.'/categories/viewcat.php?id='.$this->id.'&type='.$this->type.'">';
$label=$langs->trans("ShowCategory").': '.$this->label;
$lienfin='</a>';
$picto='category';
if ($withpicto) $result.=($lien.img_object($label,$picto).$lienfin);
if ($withpicto && $withpicto != 2) $result.=' ';
if ($withpicto != 2) $result.=$lien.dol_trunc($this->ref,$maxlength).$lienfin;
return $result;
}
/**
* Return HTML form for add a milestone
*/
function formAddObject($object)
{
global $conf,$langs;
global $bc,$var;
$langs->load('@milestone');
include(DOL_DOCUMENT_ROOT.'/milestone/tpl/addmilestoneform.tpl.php');
}
/**
* Return HTML with milestone lines list
* @param object Parent object
* @param lines Parent object lines
* @param sublines Linked parent object lines
*/
function printObjectList($object,$lines,$sublines,$dateSelector=0)
{
$nbObjectLine = count($lines);
$nbMilestone = count($this->lines);
$nbTotal = $nbObjectLine + $nbMilestone;
$var = true;
$i = 0;
$j = 1;
for ($j; $j <= $nbTotal; $j++)
{
if (! empty($lines))
{
foreach ($lines as $line)
{
if ($line->rang == $j)
{
$var=!$var;
$object->printLine($line,$var,$nbTotal,$i,$dateSelector);
array_shift($lines);
$i++;
}
}
}
if (! empty($this->lines))
{
foreach ($this->lines as $milestone)
{
if ($milestone->rang == $j)
{
$this->fetch($milestone->id);
$this->printObjectLine($object, $nbTotal, $i);
$elements = $this->get_elements();
$num = count($elements);
$var = true;
$ii = 0;
// Milestone content
foreach ($elements as $id)
{
foreach ($sublines as $line)
{
if ($line->id == $id)
{
$var=!$var;
$object->printLine($line,$var,$num,$ii,$dateSelector);
$ii++;
}
}
}
array_shift($this->lines);
$i++;
}
}
}
}
}
/**
* Return HTML with selected milestone
* @param object Parent object
* TODO mettre le html dans un template
*/
function printObjectLine($object,$num=0,$i=0)
{
global $conf,$langs,$user;
global $html,$bc;
$element = $object->element;
// TODO uniformiser
if ($element == 'propal') $element = 'propale';
// Ligne en mode visu
if ($_GET['action'] != 'edit_milestone' || $_GET['msid'] != $this->id)
{
print '<tr '.$bc[$var].'>';
print '<td colspan="6">';
$text = img_object($langs->trans('Milestone'),'milestone@milestone');
$text.= ' '.$this->label.'<br>';
$description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($this->description));
print $html->textwithtooltip($text,$description,3,'','',$i);
// Show range
//print_date_range($line->date_start,$line->date_end);
// Add description in form
if ($conf->global->PRODUIT_DESC_IN_FORM)
{
print ($this->description?'<br>'.dol_htmlentitiesbr($this->description):'');
}
print "</td>\n";
// Icone d'edition et suppression
if ($object->statut == 0 && $user->rights->$element->creer)
{
print '<td align="center">';
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=edit_milestone&amp;msid='.$this->id.'#ms_'.$this->id.'">';
print img_edit();
print '</a>';
print '</td>';
print '<td align="center">';
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=ask_delete_milestone&amp;msid='.$this->id.'">';
print img_delete();
print '</a></td>';
if ($num > 1)
{
print '<td align="center">';
if ($i > 0)
{
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=milestone_up&amp;msid='.$this->id.'">';
print img_up();
print '</a>';
}
if ($i < $num-1)
{
print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=milestone_down&amp;msid='.$this->id.'">';
print img_down();
print '</a>';
}
print '</td>';
}
}
else
{
print '<td colspan="3">&nbsp;</td>';
}
print '</tr>';
}
// Ligne en mode update
if ($object->statut == 0 && $_GET["action"] == 'edit_milestone' && $user->rights->$element->creer && $_GET["msid"] == $this->id)
{
print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'#ms_'.$this->id.'" method="POST">';
print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
print '<input type="hidden" name="action" value="updatemilestone">';
print '<input type="hidden" name="id" value="'.$object->id.'">';
print '<input type="hidden" name="milestoneid" value="'.$_GET["milestoneid"].'">';
print '<tr '.$bc[$var].'>';
print '<td>';
print '<a name="ms_'.$this->id.'"></a>'; // ancre pour retourner sur la ligne
// Label
print '<tr '.$bc[$var].'>';
print '<td colspan="5">';
print '<input size="30" type="text" id="milestone_label" name="milestone_label" value="'.$this->label.'">';
print '</td>';
print '<td align="center" colspan="5" rowspan="2" valign="center"><input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';
print '<br><input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'"></td>';
print '</tr>';
// Description
print '<tr '.$bc[$var].'>';
print '<td colspan="5">';
// Editor wysiwyg
if ($conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS)
{
require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php");
$doleditor=new DolEditor('milestone_desc',$this->description,100,'dolibarr_details');
$doleditor->Create();
}
else
{
$nbrows=ROWS_2;
if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT;
print '<textarea cols="70" id="milestone_desc" name="milestone_desc" rows="'.$nbrows.'" class="flat">';
print $this->description;
print '</textarea>';
}
print '</td>';
print '</tr>' . "\n";
print "</form>\n";
}
}
/**
* Return action of hook
* @param object Linked object
*/
function doActions($object)
{
global $user,$langs;
$element = $object->element;
// TODO uniformiser
if ($element == 'propal') $element = 'propale';
// Add milestone action
if ($_POST['action'] == 'addmilestone' && $user->rights->milestone->creer && $user->rights->$element->creer)
{
if ($_POST['milestone_label'] == $langs->trans('Label') || $_POST['milestone_desc'] == $langs->trans('Description'))
{
$this->error = '<div class="error">'.$langs->trans("MilestoneFieldsIsRequired").'</div>';
}
else
{
$object->fetch($_GET["id"]);
$linemax = $object->line_max();
$this->rangtouse = $linemax+1;
$this->object = $object;
$this->label = $_POST['milestone_label'];
$this->description = $_POST['milestone_desc'];
$this->product_type = $_POST['product_type'];
$this->special_code = $_POST['special_code'];
$this->rang = $this->rangtouse;
$ret = $this->create($user);
if ($ret < 0)
{
$this->error = '<div class="error">'.$this->error.'</div>';
}
else
{
Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$object->id);
exit;
}
}
}
}
}
?>