2006-11-19 05:56:10 +01:00
< ? php
2015-05-23 18:52:31 +02:00
/* Copyright ( C ) 2006 - 2010 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2010 - 2017 Regis Houssin < regis . houssin @ inodbox . com >
2021-03-17 22:19:40 +01:00
* Copyright ( C ) 2015 - 2021 Frederic France < frederic . france @ netlogic . fr >
2015-05-23 18:52:31 +02:00
* Copyright ( C ) 2015 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
2024-09-23 00:37:30 +02:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2006-11-19 05:56:10 +01:00
*
* 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
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2006-11-19 05:56:10 +01:00
* ( 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
* or see https :// www . gnu . org /
2006-11-19 05:56:10 +01:00
*/
/**
2011-10-24 12:59:44 +02:00
* \file htdocs / core / lib / contact . lib . php
2024-01-13 19:48:20 +01:00
* \brief Ensemble de functions de base pour les contacts
2008-08-06 16:50:06 +02:00
*/
2006-11-19 05:56:10 +01:00
2008-08-06 16:50:06 +02:00
/**
2012-02-04 10:48:47 +01:00
* Prepare array with list of tabs
2008-08-06 16:50:06 +02:00
*
2015-02-10 13:32:00 +01:00
* @ param Contact $object Object related to tabs
2024-09-23 00:37:30 +02:00
* @ return array < array { 0 : string , 1 : string , 2 : string } > Array of tabs to show
2008-08-06 16:50:06 +02:00
*/
2015-02-10 13:32:00 +01:00
function contact_prepare_head ( Contact $object )
2006-11-19 05:56:10 +01:00
{
2016-01-23 17:19:34 +01:00
global $db , $langs , $conf , $user ;
2010-07-28 00:38:28 +02:00
2015-03-30 18:15:29 +02:00
$tab = 0 ;
2006-11-19 05:56:10 +01:00
$head = array ();
2010-07-28 00:38:28 +02:00
2015-03-30 18:15:29 +02:00
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/card.php?id=' . $object -> id ;
2020-05-17 13:34:16 +02:00
$head [ $tab ][ 1 ] = $langs -> trans ( " Contact " );
2015-03-30 18:15:29 +02:00
$head [ $tab ][ 2 ] = 'card' ;
$tab ++ ;
2010-07-28 00:38:28 +02:00
2024-11-15 23:00:56 +01:00
if (( isModEnabled ( 'ldap' ) && getDolGlobalString ( 'LDAP_CONTACT_ACTIVE' ))
2023-11-27 11:39:32 +01:00
&& ( ! getDolGlobalString ( 'MAIN_DISABLE_LDAP_TAB' ) || ! empty ( $user -> admin ))) {
2006-11-19 06:05:11 +01:00
$langs -> load ( " ldap " );
2010-07-28 00:38:28 +02:00
2015-03-31 08:45:36 +02:00
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/ldap.php?id=' . $object -> id ;
2015-03-30 18:15:29 +02:00
$head [ $tab ][ 1 ] = $langs -> trans ( " LDAPCard " );
$head [ $tab ][ 2 ] = 'ldap' ;
$tab ++ ;
2006-11-19 06:05:11 +01:00
}
2010-07-28 00:38:28 +02:00
2015-03-30 18:15:29 +02:00
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/perso.php?id=' . $object -> id ;
$head [ $tab ][ 1 ] = $langs -> trans ( " PersonalInformations " );
$head [ $tab ][ 2 ] = 'perso' ;
$tab ++ ;
2010-07-28 00:38:28 +02:00
2022-08-31 22:11:06 +02:00
if ( isModEnabled ( 'project' ) && $user -> hasRight ( 'project' , 'lire' )) {
2022-01-04 10:35:44 +01:00
$nbProject = 0 ;
// Enable caching of thirdrparty count projects
require_once DOL_DOCUMENT_ROOT . '/core/lib/memory.lib.php' ;
$cachekey = 'count_projects_contact_' . $object -> id ;
$dataretrieved = dol_getcache ( $cachekey );
if ( ! is_null ( $dataretrieved )) {
$nbProject = $dataretrieved ;
} else {
2022-01-04 10:42:24 +01:00
$sql = 'SELECT COUNT(n.rowid) as nb' ;
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'projet as n' ;
$sql .= ' INNER JOIN ' . MAIN_DB_PREFIX . 'element_contact as cc ON (n.rowid = cc.element_id)' ;
2022-11-22 21:54:21 +01:00
$sql .= " WHERE cc.fk_socpeople = " . (( int ) $object -> id );
$sql .= " AND cc.fk_c_type_contact IN (SELECT rowid FROM " . MAIN_DB_PREFIX . " c_type_contact WHERE element='project' AND source='external') " ;
$sql .= " AND n.entity IN ( " . getEntity ( 'project' ) . " ) " ;
2022-11-22 23:55:45 +01:00
2022-01-04 10:35:44 +01:00
$resql = $db -> query ( $sql );
if ( $resql ) {
$obj = $db -> fetch_object ( $resql );
$nbProject = $obj -> nb ;
} else {
dol_print_error ( $db );
}
dol_setcache ( $cachekey , $nbProject , 120 ); // If setting cache fails, this is not a problem, so we do not test result.
}
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/project.php?id=' . $object -> id ;
$head [ $tab ][ 1 ] = $langs -> trans ( " Projects " );
if ( $nbProject > 0 ) {
$head [ $tab ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbProject . '</span>' ;
}
$head [ $tab ][ 2 ] = 'project' ;
$tab ++ ;
}
2019-02-01 10:44:13 +01:00
// Related items
2024-02-27 15:30:37 +01:00
if ( isModEnabled ( 'order' ) || isModEnabled ( " propal " ) || isModEnabled ( 'invoice' ) || isModEnabled ( 'intervention' ) || isModEnabled ( " supplier_proposal " ) || isModEnabled ( " supplier_order " ) || isModEnabled ( " supplier_invoice " )) {
2020-10-31 14:32:18 +01:00
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/consumption.php?id=' . $object -> id ;
$head [ $tab ][ 1 ] = $langs -> trans ( " Referers " );
$head [ $tab ][ 2 ] = 'consumption' ;
$tab ++ ;
}
2019-02-01 10:44:13 +01:00
2020-10-31 14:32:18 +01:00
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname); to remove a tab
2022-09-22 14:06:50 +02:00
complete_head_from_modules ( $conf , $langs , $object , $head , $tab , 'contact' , 'add' , 'core' );
2011-01-25 00:35:21 +01:00
2020-10-31 14:32:18 +01:00
// Notes
2023-11-27 11:39:32 +01:00
if ( ! getDolGlobalString ( 'MAIN_DISABLE_NOTES_TAB' )) {
2020-10-31 14:32:18 +01:00
$nbNote = ( empty ( $object -> note_private ) ? 0 : 1 ) + ( empty ( $object -> note_public ) ? 0 : 1 );
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/note.php?id=' . $object -> id ;
$head [ $tab ][ 1 ] = $langs -> trans ( " Note " );
2021-02-23 22:03:23 +01:00
if ( $nbNote > 0 ) {
$head [ $tab ][ 1 ] .= '<span class="badge marginleftonlyshort">' . $nbNote . '</span>' ;
}
2020-10-31 14:32:18 +01:00
$head [ $tab ][ 2 ] = 'note' ;
$tab ++ ;
}
2015-03-30 18:15:29 +02:00
2020-10-31 14:32:18 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/link.class.php' ;
$upload_dir = $conf -> societe -> dir_output . " /contact/ " . dol_sanitizeFileName ( $object -> ref );
$nbFiles = count ( dol_dir_list ( $upload_dir , 'files' , 0 , '' , '(\.meta|_preview.*\.png)$' ));
$nbLinks = Link :: count ( $db , $object -> element , $object -> id );
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/document.php?id=' . $object -> id ;
$head [ $tab ][ 1 ] = $langs -> trans ( " Documents " );
2021-02-23 22:03:23 +01:00
if (( $nbFiles + $nbLinks ) > 0 ) {
$head [ $tab ][ 1 ] .= '<span class="badge marginleftonlyshort">' . ( $nbFiles + $nbLinks ) . '</span>' ;
}
2020-10-31 14:32:18 +01:00
$head [ $tab ][ 2 ] = 'documents' ;
$tab ++ ;
2015-03-30 18:15:29 +02:00
2020-10-31 14:32:18 +01:00
// Agenda / Events
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/agenda.php?id=' . $object -> id ;
2021-03-17 22:19:40 +01:00
$head [ $tab ][ 1 ] = $langs -> trans ( " Events " );
2023-06-12 20:10:42 +02:00
if ( isModEnabled ( 'agenda' ) && ( $user -> hasRight ( 'agenda' , 'myactions' , 'read' ) || $user -> hasRight ( 'agenda' , 'allactions' , 'read' ))) {
2020-10-31 14:32:18 +01:00
$head [ $tab ][ 1 ] .= '/' ;
$head [ $tab ][ 1 ] .= $langs -> trans ( " Agenda " );
}
$head [ $tab ][ 2 ] = 'agenda' ;
$tab ++ ;
2017-10-04 09:13:41 +02:00
2020-10-31 14:32:18 +01:00
// Log
/*
2021-02-23 22:03:23 +01:00
$head [ $tab ][ 0 ] = DOL_URL_ROOT . '/contact/info.php?id=' . $object -> id ;
2015-03-30 18:15:29 +02:00
$head [ $tab ][ 1 ] = $langs -> trans ( " Info " );
$head [ $tab ][ 2 ] = 'info' ;
2016-12-19 16:22:41 +01:00
$tab ++ ; */
2011-01-25 00:35:21 +01:00
2022-09-22 14:06:50 +02:00
complete_head_from_modules ( $conf , $langs , $object , $head , $tab , 'contact' , 'add' , 'external' );
2019-01-27 11:55:16 +01:00
complete_head_from_modules ( $conf , $langs , $object , $head , $tab , 'contact' , 'remove' );
2006-11-19 05:56:10 +01:00
return $head ;
}
2022-01-04 10:35:44 +01:00
/**
* Show html area for list of projects
*
* @ param Conf $conf Object conf
* @ param Translate $langs Object langs
* @ param DoliDB $db Database handler
* @ param Object $object Third party object
* @ param string $backtopage Url to go once contact is created
* @ param int $nocreatelink 1 = Hide create project link
* @ param string $morehtmlright More html on right of title
* @ return int
*/
function show_contacts_projects ( $conf , $langs , $db , $object , $backtopage = '' , $nocreatelink = 0 , $morehtmlright = '' )
{
global $user ;
$i = - 1 ;
2023-10-15 15:32:35 +02:00
if ( isModEnabled ( 'project' ) && $user -> hasRight ( 'projet' , 'lire' )) {
2022-01-04 10:35:44 +01:00
$langs -> load ( " projects " );
$newcardbutton = '' ;
2023-10-15 15:32:35 +02:00
if ( isModEnabled ( 'project' ) && $user -> hasRight ( 'projet' , 'creer' ) && empty ( $nocreatelink )) {
2025-01-09 13:54:25 +01:00
$newcardbutton .= dolGetButtonTitle ( $langs -> trans ( 'AddProject' ), '' , 'fa fa-plus-circle' , DOL_URL_ROOT . '/projet/card.php?socid=' . $object -> id . '&action=create&backtopage=' . urlencode ( $backtopage ));
2022-01-04 10:35:44 +01:00
}
print " \n " ;
print load_fiche_titre ( $langs -> trans ( " ProjectsHavingThisContact " ), $newcardbutton . $morehtmlright , '' );
print '<div class="div-table-responsive">' ;
print " \n " . '<table class="noborder" width=100%>' ;
2024-02-15 14:08:08 +01:00
$sql = 'SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_modification, p.budget_amount' ;
2023-08-06 01:14:36 +02:00
$sql .= ', cls.code as opp_status_code, ctc.libelle as type_label' ;
2022-01-04 10:42:24 +01:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'projet as p' ;
$sql .= ' LEFT JOIN ' . MAIN_DB_PREFIX . 'c_lead_status as cls on p.fk_opp_status = cls.rowid' ;
$sql .= ' INNER JOIN ' . MAIN_DB_PREFIX . 'element_contact as cc ON (p.rowid = cc.element_id)' ;
2022-01-07 10:18:57 +01:00
$sql .= ' INNER JOIN ' . MAIN_DB_PREFIX . 'c_type_contact as ctc ON (ctc.rowid = cc.fk_c_type_contact)' ;
2022-11-22 21:54:21 +01:00
$sql .= " WHERE cc.fk_socpeople = " . (( int ) $object -> id );
$sql .= " AND ctc.element='project' AND ctc.source='external' " ;
$sql .= " AND p.entity IN ( " . getEntity ( 'project' ) . " ) " ;
$sql .= " ORDER BY p.dateo DESC " ;
2022-01-04 10:35:44 +01:00
$result = $db -> query ( $sql );
if ( $result ) {
$num = $db -> num_rows ( $result );
print '<tr class="liste_titre">' ;
print '<td>' . $langs -> trans ( " Ref " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Name " ) . '</td>' ;
2022-01-07 10:19:44 +01:00
print '<td>' . $langs -> trans ( " ContactType " ) . '</td>' ;
2022-01-04 10:35:44 +01:00
print '<td class="center">' . $langs -> trans ( " DateStart " ) . '</td>' ;
print '<td class="center">' . $langs -> trans ( " DateEnd " ) . '</td>' ;
print '<td class="right">' . $langs -> trans ( " OpportunityAmountShort " ) . '</td>' ;
print '<td class="center">' . $langs -> trans ( " OpportunityStatusShort " ) . '</td>' ;
print '<td class="right">' . $langs -> trans ( " OpportunityProbabilityShort " ) . '</td>' ;
print '<td class="right">' . $langs -> trans ( " Status " ) . '</td>' ;
print '</tr>' ;
if ( $num > 0 ) {
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
$projecttmp = new Project ( $db );
$i = 0 ;
while ( $i < $num ) {
$obj = $db -> fetch_object ( $result );
$projecttmp -> fetch ( $obj -> id );
// To verify role of users
$userAccess = $projecttmp -> restrictedProjectArea ( $user );
2023-10-15 15:32:35 +02:00
if ( $user -> hasRight ( 'projet' , 'lire' ) && $userAccess > 0 ) {
2022-01-04 10:35:44 +01:00
print '<tr class="oddeven">' ;
// Ref
print '<td>' ;
print $projecttmp -> getNomUrl ( 1 );
print '</td>' ;
// Label
2023-08-06 01:14:36 +02:00
print '<td>' . dol_escape_htmltag ( $obj -> title ) . '</td>' ;
print '<td>' . dol_escape_htmltag ( $obj -> type_label ) . '</td>' ;
2022-01-04 10:35:44 +01:00
// Date start
print '<td class="center">' . dol_print_date ( $db -> jdate ( $obj -> do ), " day " ) . '</td>' ;
// Date end
print '<td class="center">' . dol_print_date ( $db -> jdate ( $obj -> de ), " day " ) . '</td>' ;
// Opp amount
print '<td class="right">' ;
if ( $obj -> opp_status_code ) {
print price ( $obj -> opp_amount , 1 , '' , 1 , - 1 , - 1 , '' );
}
print '</td>' ;
// Opp status
print '<td class="center">' ;
if ( $obj -> opp_status_code ) {
print $langs -> trans ( " OppStatus " . $obj -> opp_status_code );
}
print '</td>' ;
// Opp percent
print '<td class="right">' ;
if ( $obj -> opp_percent ) {
print price ( $obj -> opp_percent , 1 , '' , 1 , 0 ) . '%' ;
}
print '</td>' ;
// Status
print '<td class="right">' . $projecttmp -> getLibStatut ( 5 ) . '</td>' ;
print '</tr>' ;
}
$i ++ ;
}
} else {
print '<tr class="oddeven"><td colspan="8"><span class="opacitymedium">' . $langs -> trans ( " None " ) . '</span></td></tr>' ;
}
$db -> free ( $result );
} else {
dol_print_error ( $db );
}
print " </table> " ;
print '</div>' ;
print " <br> \n " ;
}
return $i ;
2022-01-04 10:42:24 +01:00
}