From 8fb2b8fa1255f34e6fa090d111e03e1302cc5368 Mon Sep 17 00:00:00 2001 From: Florian Henry Date: Fri, 14 Jun 2013 22:33:01 +0200 Subject: [PATCH] Start normalize project module : create html.formprojet.class.php with selec_project --- htdocs/comm/action/fiche.php | 18 ++- htdocs/comm/action/index.php | 8 +- htdocs/comm/action/listactions.php | 1 - htdocs/comm/propal.php | 7 +- htdocs/commande/fiche.php | 6 +- htdocs/commande/orderstoinvoice.php | 8 +- htdocs/compta/deplacement/fiche.php | 1 - htdocs/compta/dons/fiche.php | 13 +- htdocs/compta/facture.php | 10 +- htdocs/compta/facture/list.php | 1 - htdocs/contrat/fiche.php | 6 +- htdocs/core/class/html.form.class.php | 5 +- htdocs/core/class/html.formprojet.class.php | 160 +++++++++++++++++++ htdocs/core/lib/agenda.lib.php | 5 +- htdocs/core/lib/project.lib.php | 163 -------------------- htdocs/fichinter/fiche.php | 6 +- htdocs/fourn/facture/fiche.php | 10 +- htdocs/projet/class/project.class.php | 57 +++++++ htdocs/projet/tasks.php | 4 +- 19 files changed, 294 insertions(+), 195 deletions(-) create mode 100644 htdocs/core/class/html.formprojet.class.php diff --git a/htdocs/comm/action/fiche.php b/htdocs/comm/action/fiche.php index a813a34135a..89a1c497388 100644 --- a/htdocs/comm/action/fiche.php +++ b/htdocs/comm/action/fiche.php @@ -4,6 +4,7 @@ * Copyright (C) 2005 Simon TOSSER * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2010 Juanjo Menent + * Copyright (C) 2013 Florian Henry * * 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 @@ -27,14 +28,16 @@ require '../../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/action/class/cactioncomm.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'; -require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; +if (! empty($conf->projet->enabled)) { + require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; $langs->load("companies"); @@ -574,11 +577,15 @@ if ($action == 'create') // Project if (! empty($conf->projet->enabled)) { + + $formproject=new FormProjets($db); + // Projet associe $langs->load("project"); print ''.$langs->trans("Project").''; - $numproject=select_projects((! empty($societe->id)?$societe->id:0),GETPOST("projectid")?GETPOST("projectid"):'','projectid'); + + $numproject=$formproject->select_projects((! empty($societe->id)?$societe->id:0),GETPOST("projectid")?GETPOST("projectid"):'','projectid'); if ($numproject==0) { print '   '.$langs->trans("AddProject").''; @@ -801,11 +808,14 @@ if ($id > 0) // Project if (! empty($conf->projet->enabled)) { + + $formproject=new FormProjets($db); + // Projet associe $langs->load("project"); print ''.$langs->trans("Project").''; - $numprojet=select_projects($act->societe->id,$act->fk_project,'projectid'); + $numprojet=$formproject->select_projects($act->societe->id,$act->fk_project,'projectid'); if ($numprojet==0) { print '   '.$langs->trans("AddProject").''; diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php index f95842884bb..7e59a9e2748 100644 --- a/htdocs/comm/action/index.php +++ b/htdocs/comm/action/index.php @@ -19,6 +19,10 @@ * along with this program. If not, see . */ +error_reporting(E_ALL); +ini_set('display_errors', true); +ini_set('html_errors', false); + /** * \file htdocs/comm/action/index.php * \ingroup agenda @@ -31,7 +35,9 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php'; -if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +if (! empty($conf->projet->enabled)) { + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} if (! isset($conf->global->AGENDA_MAX_EVENTS_DAY_VIEW)) $conf->global->AGENDA_MAX_EVENTS_DAY_VIEW=3; diff --git a/htdocs/comm/action/listactions.php b/htdocs/comm/action/listactions.php index 0dab9196756..2fdf9315712 100644 --- a/htdocs/comm/action/listactions.php +++ b/htdocs/comm/action/listactions.php @@ -29,7 +29,6 @@ require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php'; require_once DOL_DOCUMENT_ROOT.'/comm/action/class/actioncomm.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/agenda.lib.php'; -if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; $langs->load("companies"); $langs->load("agenda"); diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 33588045ee9..c93e7d6d966 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -43,7 +43,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; if (! empty($conf->projet->enabled)) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; - require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } $langs->load('companies'); @@ -1369,13 +1369,16 @@ if ($action == 'create') // Project if (! empty($conf->projet->enabled) && $socid>0) { + + $formproject=new FormProjets($db); + $projectid = 0; if ($origin == 'project') $projectid = ($originid?$originid:0); print ''; print ''.$langs->trans("Project").''; - $numprojet=select_projects($soc->id,$projectid); + $numprojet=$formproject->select_projects($soc->id,$projectid); if ($numprojet==0) { $langs->load("projects"); diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index b1520e40681..686d148d953 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -43,7 +43,7 @@ if (! empty($conf->propal->enabled)) require DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; if (! empty($conf->projet->enabled)) { require DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; - require DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; @@ -1626,8 +1626,10 @@ if ($action == 'create' && $user->rights->commande->creer) // Project if (! empty($conf->projet->enabled) && $socid>0) { + $formproject=new FormProjets($db); + print ''.$langs->trans('Project').''; - $numprojet=select_projects($soc->id,$projectid); + $numprojet=$formproject->select_projects($soc->id,$projectid); if ($numprojet==0) { print '   '.$langs->trans("AddProject").''; diff --git a/htdocs/commande/orderstoinvoice.php b/htdocs/commande/orderstoinvoice.php index 9631ced232b..f24a9a32b84 100755 --- a/htdocs/commande/orderstoinvoice.php +++ b/htdocs/commande/orderstoinvoice.php @@ -34,7 +34,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/report.lib.php'; -if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +if (! empty($conf->projet->enabled)) { + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} $langs->load('orders'); $langs->load('deliveries'); @@ -425,9 +427,11 @@ if ($action == 'create' && empty($mesgs)) // Project if (! empty($conf->projet->enabled)) { + $formproject=new FormProjets($db); + $langs->load('projects'); print ''.$langs->trans('Project').''; - select_projects($soc->id, $projectid, 'projectid'); + $formproject->select_projects($soc->id, $projectid, 'projectid'); print ''; } diff --git a/htdocs/compta/deplacement/fiche.php b/htdocs/compta/deplacement/fiche.php index b09754c2405..bc2795e554f 100644 --- a/htdocs/compta/deplacement/fiche.php +++ b/htdocs/compta/deplacement/fiche.php @@ -30,7 +30,6 @@ require_once DOL_DOCUMENT_ROOT.'/compta/deplacement/class/deplacement.class.php' require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; if (! empty($conf->projet->enabled)) { - require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; } diff --git a/htdocs/compta/dons/fiche.php b/htdocs/compta/dons/fiche.php index e04c6699848..1e13c9f9874 100644 --- a/htdocs/compta/dons/fiche.php +++ b/htdocs/compta/dons/fiche.php @@ -30,7 +30,9 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/dons/class/don.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; -if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; +if (! empty($conf->projet->enabled)) { + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} $langs->load("companies"); $langs->load("donations"); @@ -317,9 +319,12 @@ if ($action == 'create') if (! empty($conf->projet->enabled)) { + + $formproject=new FormProjets($db); + // Si module projet actif print "".$langs->trans("Project").""; - select_projects('',$_POST["projectid"],"projectid"); + $formproject->select_projects('',$_POST["projectid"],"projectid"); print "\n"; } @@ -414,9 +419,11 @@ if (! empty($id) && $action == 'edit') // Project if (! empty($conf->projet->enabled)) { + $formproject=new FormProjets($db); + $langs->load('projects'); print ''.$langs->trans('Project').''; - select_projects(-1, (isset($_POST["projectid"])?$_POST["projectid"]:$don->fk_project), 'projectid'); + $formproject->select_projects(-1, (isset($_POST["projectid"])?$_POST["projectid"]:$don->fk_project), 'projectid'); print ''; } diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index ae3a8b08a72..97b3c4b8564 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -42,8 +42,10 @@ require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT . '/core/class/extrafields.class.php'; if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT . '/commande/class/commande.class.php'; -if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; -if (! empty($conf->projet->enabled)) require_once DOL_DOCUMENT_ROOT . '/core/lib/project.lib.php'; +if (! empty($conf->projet->enabled)) { + require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; $langs->load('bills'); @@ -2266,9 +2268,11 @@ if ($action == 'create') // Project if (! empty($conf->projet->enabled) && $socid>0) { + $formproject=new FormProjets($db); + $langs->load('projects'); print ''.$langs->trans('Project').''; - select_projects($soc->id, $projectid, 'projectid'); + $formproject->select_projects($soc->id, $projectid, 'projectid'); print ''; } diff --git a/htdocs/compta/facture/list.php b/htdocs/compta/facture/list.php index 9369a6341b0..6f41995971e 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -43,7 +43,6 @@ if (! empty($conf->commande->enabled)) require_once DOL_DOCUMENT_ROOT.'/commande if (! empty($conf->projet->enabled)) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; - require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; } $langs->load('bills'); diff --git a/htdocs/contrat/fiche.php b/htdocs/contrat/fiche.php index 77553e67d13..7b3432aa07e 100644 --- a/htdocs/contrat/fiche.php +++ b/htdocs/contrat/fiche.php @@ -38,7 +38,7 @@ if (! empty($conf->produit->enabled) || ! empty($conf->service->enabled)) requi if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; if (! empty($conf->projet->enabled)) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; - require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } $langs->load("contracts"); @@ -864,8 +864,10 @@ if ($action == 'create') if (! empty($conf->projet->enabled)) { + $formproject=new FormProjets($db); + print ''.$langs->trans("Project").''; - select_projects($soc->id,$projectid,"projectid"); + $formproject->select_projects($soc->id,$projectid,"projectid"); print ""; } diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 1ac3ebebcf6..ef9a416d1df 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2695,6 +2695,9 @@ class Form global $langs; require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; + + $formproject=new FormProjets($this->db); $langs->load("project"); if ($htmlname != "none") @@ -2705,7 +2708,7 @@ class Form print ''; print ''; print ''; print '
'; //print "$socid,$selected,$htmlname"; - select_projects($socid,$selected,$htmlname); + $formproject->select_projects($socid,$selected,$htmlname); print '
'; diff --git a/htdocs/core/class/html.formprojet.class.php b/htdocs/core/class/html.formprojet.class.php new file mode 100644 index 00000000000..7e47e467386 --- /dev/null +++ b/htdocs/core/class/html.formprojet.class.php @@ -0,0 +1,160 @@ + + * +* 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/core/class/html.formprojet.class.php + * \ingroup core + * \brief Class file for html component project + */ + + +/** + * Class to manage building of HTML components + */ +class FormProjets +{ + var $db; + var $error; + + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db; + return 1; + } + + /** + * Show a combo list with projects qualified for a third party + * + * @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id) + * @param int $selected Id project preselected + * @param string $htmlname Nom de la zone html + * @param int $maxlength Maximum length of label + * @return int Nbre of project if OK, <0 if KO + */ + function select_projects($socid=-1, $selected='', $htmlname='projectid', $maxlength=16, $option_only=0, $show_empty=1) + { + global $user,$conf,$langs; + + require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + + $out=''; + + $hideunselectables = false; + if (! empty($conf->global->PROJECT_HIDE_UNSELECTABLES)) $hideunselectables = true; + + $projectsListId = false; + if (empty($user->rights->projet->all->lire)) + { + $projectstatic=new Project($this->db); + $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1); + } + + // Search all projects + $sql = 'SELECT p.rowid, p.ref, p.title, p.fk_soc, p.fk_statut, p.public'; + $sql.= ' FROM '.MAIN_DB_PREFIX .'projet as p'; + $sql.= " WHERE p.entity = ".$conf->entity; + if ($projectsListId !== false) $sql.= " AND p.rowid IN (".$projectsListId.")"; + if ($socid == 0) $sql.= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)"; + $sql.= " ORDER BY p.title ASC"; + + dol_syslog(get_class($this)."::select_projects sql=".$sql,LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + if (empty($option_only)) { + $out.= ''; + } + print $out; + + $this->db->free($resql); + return $num; + } + else + { + dol_print_error($this->db); + return -1; + } + } + +} \ No newline at end of file diff --git a/htdocs/core/lib/agenda.lib.php b/htdocs/core/lib/agenda.lib.php index dda971668de..62f8b49d65e 100644 --- a/htdocs/core/lib/agenda.lib.php +++ b/htdocs/core/lib/agenda.lib.php @@ -102,11 +102,14 @@ function print_actions_filter($form,$canedit,$status,$year,$month,$day,$showbirt if (! empty($conf->projet->enabled) && $user->rights->projet->lire) { + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; + $formproject=new FormProjets($db); + print ''; print ''; print $langs->trans("Project").'   '; print ''; - select_projects($socid?$socid:-1, $pid, 'projectid', 64); + $formproject->select_projects($socid?$socid:-1, $pid, 'projectid', 64); print ''; } diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 5dfd111e288..32010ceb0de 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -190,111 +190,6 @@ function project_admin_prepare_head() } - -/** - * Show a combo list with projects qualified for a third party - * - * @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id) - * @param int $selected Id project preselected - * @param string $htmlname Nom de la zone html - * @param int $maxlength Maximum length of label - * @return int Nbre of project if OK, <0 if KO - */ -function select_projects($socid=-1, $selected='', $htmlname='projectid', $maxlength=16) -{ - global $db,$user,$conf,$langs; - - $hideunselectables = false; - if (! empty($conf->global->PROJECT_HIDE_UNSELECTABLES)) $hideunselectables = true; - - $projectsListId = false; - if (empty($user->rights->projet->all->lire)) - { - $projectstatic=new Project($db); - $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1); - } - - // Search all projects - $sql = 'SELECT p.rowid, p.ref, p.title, p.fk_soc, p.fk_statut, p.public'; - $sql.= ' FROM '.MAIN_DB_PREFIX .'projet as p'; - $sql.= " WHERE p.entity = ".$conf->entity; - if ($projectsListId !== false) $sql.= " AND p.rowid IN (".$projectsListId.")"; - if ($socid == 0) $sql.= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)"; - $sql.= " ORDER BY p.title ASC"; - - dol_syslog("project.lib::select_projects sql=".$sql); - $resql=$db->query($sql); - if ($resql) - { - print ''; - $db->free($resql); - return $num; - } - else - { - dol_print_error($db); - return -1; - } -} - - /** * Show task lines with a particular parent * @@ -653,64 +548,6 @@ function searchTaskInChild(&$inc, $parent, &$lines, &$taskrole) return $inc; } - -/** - * Clean task not linked to a parent - * - * @param DoliDB $db Database handler - * @return int Nb of records deleted - */ -function clean_orphelins($db) -{ - $nb=0; - - // There is orphelins. We clean that - $listofid=array(); - - // Get list of id in array listofid - $sql='SELECT rowid FROM '.MAIN_DB_PREFIX.'projet_task'; - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; - while ($i < $num && $i < 100) - { - $obj = $db->fetch_object($resql); - $listofid[]=$obj->rowid; - $i++; - } - } - else - { - dol_print_error($db); - } - - if (count($listofid)) - { - // Removed orphelins records - print 'Some orphelins were found and restored to be parents so records are visible again: '; - print join(',',$listofid); - - $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task"; - $sql.= " SET fk_task_parent = 0"; - $sql.= " WHERE fk_task_parent NOT IN (".join(',',$listofid).")"; - - $resql = $db->query($sql); - if ($resql) - { - $nb=$db->affected_rows($sql); - - return $nb; - } - else - { - return -1; - } - } -} - - /** * Return HTML table with list of projects and number of opened tasks * diff --git a/htdocs/fichinter/fiche.php b/htdocs/fichinter/fiche.php index fd02726b76e..e4a86b146ba 100644 --- a/htdocs/fichinter/fiche.php +++ b/htdocs/fichinter/fiche.php @@ -34,8 +34,8 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; if (! empty($conf->projet->enabled)) { - require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; } if ($conf->contrat->enabled) @@ -1006,6 +1006,8 @@ if ($action == 'create') // Project if (! empty($conf->projet->enabled)) { + $formproject=new FormProjets($db); + $langs->load("project"); print ''.$langs->trans("Project").''; @@ -1015,7 +1017,7 @@ if ($action == 'create') else $numprojet=select_projects($societe->id,$_POST["projectid"],'projectid'); */ - $numprojet=select_projects($soc->id,GETPOST('projectid','int'),'projectid'); + $numprojet=$formproject->select_projects($soc->id,GETPOST('projectid','int'),'projectid'); if ($numprojet==0) { print '   '.$langs->trans("AddProject").''; diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php index c2dc17f798f..09eee38e075 100644 --- a/htdocs/fourn/facture/fiche.php +++ b/htdocs/fourn/facture/fiche.php @@ -39,10 +39,10 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; if (!empty($conf->produit->enabled)) require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; -if (!empty($conf->projet->enabled)) +if (!empty($conf->projet->enabled)) { require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; -if (! empty($conf->projet->enabled)) - require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php'; + require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php'; +} $langs->load('bills'); @@ -1172,9 +1172,11 @@ if ($action == 'create') // Project if (! empty($conf->projet->enabled)) { + $formproject=new FormProjets($db); + $langs->load('projects'); print ''.$langs->trans('Project').''; - select_projects(-1, $projectid, 'projectid'); + $formproject->select_projects(-1, $projectid, 'projectid'); print ''; } diff --git a/htdocs/projet/class/project.class.php b/htdocs/projet/class/project.class.php index dc438d2b929..e6bf40a8bd5 100644 --- a/htdocs/projet/class/project.class.php +++ b/htdocs/projet/class/project.class.php @@ -1278,6 +1278,63 @@ class Project extends CommonObject return $result; } + /** + * Clean task not linked to a parent + * + * @param DoliDB $db Database handler + * @return int Nb of records deleted + */ + function clean_orphelins() + { + $nb=0; + + // There is orphelins. We clean that + $listofid=array(); + + // Get list of id in array listofid + $sql='SELECT rowid FROM '.MAIN_DB_PREFIX.'projet_task'; + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + while ($i < $num && $i < 100) + { + $obj = $this->db->fetch_object($resql); + $listofid[]=$obj->rowid; + $i++; + } + } + else + { + dol_print_error($this->db); + } + + if (count($listofid)) + { + // Removed orphelins records + print 'Some orphelins were found and restored to be parents so records are visible again: '; + print join(',',$listofid); + + $sql = "UPDATE ".MAIN_DB_PREFIX."projet_task"; + $sql.= " SET fk_task_parent = 0"; + $sql.= " WHERE fk_task_parent NOT IN (".join(',',$listofid).")"; + + $resql = $this->db->query($sql); + if ($resql) + { + $nb=$this->db->affected_rows($sql); + + return $nb; + } + else + { + return -1; + } + } + } + + /** * Build Select List of element associable to a project * diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index 36ada461608..152c604048e 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -420,11 +420,11 @@ else //print 'mode='.$_REQUEST["mode"].' $nboftaskshown='.$nboftaskshown.' count($tasksarray)='.count($tasksarray).' count($tasksrole)='.count($tasksrole).'
'; if ($mode=='mine') { - if ($nboftaskshown < count($tasksrole)) clean_orphelins($db); + if ($nboftaskshown < count($tasksrole)) $object->clean_orphelins(); } else { - if ($nboftaskshown < count($tasksarray)) clean_orphelins($db); + if ($nboftaskshown < count($tasksarray)) $object->clean_orphelins(); } }