2019-03-17 16:55:26 +01:00
< ? php
/* Copyright ( C ) 2003 - 2007 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2004 - 2010 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2005 - 2009 Regis Houssin < regis . houssin @ inodbox . com >
2024-03-28 20:34:33 +01:00
* Copyright ( C ) 2015 - 2024 Frédéric France < frederic . france @ free . fr >
2024-03-23 01:12:25 +01:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2019-03-17 16:55:26 +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
* 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2019-03-17 16:55:26 +01:00
*/
/**
* \file htdocs / core / boxes / box_birthdays . php
* \ingroup user
* \brief Box for user birthdays
*/
include_once DOL_DOCUMENT_ROOT . '/core/boxes/modules_boxes.php' ;
/**
* Class to manage the box to show user birthdays
*/
class box_birthdays extends ModeleBoxes
{
2020-10-31 14:32:18 +01:00
public $boxcode = " birthdays " ;
public $boximg = " object_user " ;
public $boxlabel = " BoxTitleUserBirthdaysOfMonth " ;
public $depends = array ( " user " );
2019-03-17 16:55:26 +01:00
2020-10-31 14:32:18 +01:00
public $enabled = 1 ;
2019-03-17 16:55:26 +01:00
/**
* Constructor
*
* @ param DoliDB $db Database handler
2020-10-31 14:32:18 +01:00
* @ param string $param More parameters
2019-03-17 16:55:26 +01:00
*/
public function __construct ( $db , $param = '' )
{
2019-08-31 01:54:21 +02:00
global $user ;
2019-03-17 16:55:26 +01:00
$this -> db = $db ;
2022-09-06 15:37:00 +02:00
$this -> hidden = ! ( $user -> hasRight ( 'user' , 'user' , 'read' ) && empty ( $user -> socid ));
2019-03-17 16:55:26 +01:00
}
/**
2020-10-31 14:32:18 +01:00
* Load data for box to show them later
*
* @ param int $max Maximum number of records to load
* @ return void
2019-03-17 16:55:26 +01:00
*/
public function loadBox ( $max = 20 )
{
2023-05-05 13:16:29 +02:00
global $conf , $user , $langs ;
include_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php' ;
2023-05-05 14:22:32 +02:00
include_once DOL_DOCUMENT_ROOT . '/user/class/user.class.php' ;
$userstatic = new User ( $this -> db );
2023-05-05 13:16:29 +02:00
2019-03-17 16:55:26 +01:00
$langs -> load ( " boxes " );
2020-04-10 10:59:32 +02:00
$this -> max = $max ;
2019-03-17 16:55:26 +01:00
2020-10-31 14:32:18 +01:00
$this -> info_box_head = array ( 'text' => $langs -> trans ( " BoxTitleUserBirthdaysOfMonth " ));
2019-03-17 16:55:26 +01:00
2023-05-05 13:16:29 +02:00
if ( $user -> hasRight ( 'user' , 'user' , 'lire' )) {
$data = array ();
2023-05-05 14:22:32 +02:00
$tmparray = dol_getdate ( dol_now (), true );
$sql = " SELECT u.rowid, u.firstname, u.lastname, u.birth as datea, date_format(u.birth, '%d') as daya, 'birth' as typea, u.email, u.statut as status " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " user as u " ;
$sql .= " WHERE u.entity IN ( " . getEntity ( 'user' ) . " ) " ;
$sql .= " AND u.statut = " . User :: STATUS_ENABLED ;
$sql .= dolSqlDateFilter ( 'u.birth' , 0 , $tmparray [ 'mon' ], 0 );
2023-08-02 10:13:21 +02:00
$sql .= " AND u.birth < ' " . $this -> db -> idate ( dol_get_first_day ( $tmparray [ 'year' ])) . " ' " ;
2023-05-05 14:22:32 +02:00
$sql .= ' UNION ' ;
$sql .= " SELECT u.rowid, u.firstname, u.lastname, u.dateemployment as datea, date_format(u.dateemployment, '%d') as daya, 'employment' as typea, u.email, u.statut as status " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " user as u " ;
$sql .= " WHERE u.entity IN ( " . getEntity ( 'user' ) . " ) " ;
$sql .= " AND u.statut = " . User :: STATUS_ENABLED ;
$sql .= dolSqlDateFilter ( 'u.dateemployment' , 0 , $tmparray [ 'mon' ], 0 );
2023-08-02 10:13:21 +02:00
$sql .= " AND u.dateemployment < ' " . $this -> db -> idate ( dol_get_first_day ( $tmparray [ 'year' ])) . " ' " ;
2023-05-05 14:22:32 +02:00
$sql .= " ORDER BY daya ASC " ; // We want to have date of the month sorted by the day without taking into consideration the year
$sql .= $this -> db -> plimit ( $max , 0 );
dol_syslog ( get_class ( $this ) . " ::loadBox " , LOG_DEBUG );
$resql = $this -> db -> query ( $sql );
if ( $resql ) {
$num = $this -> db -> num_rows ( $resql );
$line = 0 ;
while ( $line < $num ) {
$data [ $line ] = $this -> db -> fetch_object ( $resql );
$line ++ ;
2023-05-05 13:16:29 +02:00
}
2023-05-05 14:22:32 +02:00
$this -> db -> free ( $resql );
2023-05-05 13:16:29 +02:00
}
if ( ! empty ( $data )) {
$j = 0 ;
while ( $j < count ( $data )) {
$userstatic -> id = $data [ $j ] -> rowid ;
$userstatic -> firstname = $data [ $j ] -> firstname ;
$userstatic -> lastname = $data [ $j ] -> lastname ;
$userstatic -> email = $data [ $j ] -> email ;
2024-03-28 20:34:33 +01:00
$userstatic -> status = $data [ $j ] -> status ;
2023-05-05 13:16:29 +02:00
$dateb = $this -> db -> jdate ( $data [ $j ] -> datea );
2024-03-23 01:12:25 +01:00
$age = idate ( 'Y' , dol_now ()) - idate ( 'Y' , $dateb );
2020-10-31 14:32:18 +01:00
2022-08-01 10:42:30 +02:00
$picb = '<i class="fas fa-birthday-cake inline-block"></i>' ;
$pice = '<i class="fas fa-briefcase inline-block"></i>' ;
2023-05-05 13:16:29 +02:00
$typea = ( $data [ $j ] -> typea == 'birth' ) ? $picb : $pice ;
2022-08-01 10:42:30 +02:00
2023-05-05 13:16:29 +02:00
$this -> info_box_contents [ $j ][ 0 ] = array (
2020-10-31 14:32:18 +01:00
'td' => '' ,
'text' => $userstatic -> getNomUrl ( 1 ),
'asis' => 1 ,
);
2023-05-05 13:16:29 +02:00
$this -> info_box_contents [ $j ][ 1 ] = array (
2021-05-25 00:29:32 +02:00
'td' => 'class="center nowraponall"' ,
2022-08-01 10:42:30 +02:00
'text' => dol_print_date ( $dateb , " day " , 'tzserver' )
);
2023-05-05 13:16:29 +02:00
$this -> info_box_contents [ $j ][ 2 ] = array (
2022-08-01 10:42:30 +02:00
'td' => 'class="right nowraponall"' ,
'text' => $age . ' ' . $langs -> trans ( 'DurationYears' )
);
2023-05-05 13:16:29 +02:00
$this -> info_box_contents [ $j ][ 3 ] = array (
'td' => 'class="right nowraponall"' ,
2022-08-01 10:42:30 +02:00
'text' => $typea ,
'asis' => 1
2020-10-31 14:32:18 +01:00
);
2023-05-05 13:16:29 +02:00
$j ++ ;
2021-02-23 22:03:23 +01:00
}
2023-05-05 13:16:29 +02:00
}
if ( is_array ( $data ) && count ( $data ) == 0 ) {
2019-03-17 16:55:26 +01:00
$this -> info_box_contents [ 0 ][ 0 ] = array (
2023-05-05 13:16:29 +02:00
'td' => 'class="center"' ,
'text' => '<span class="opacitymedium">' . $langs -> trans ( " None " ) . '</span>' ,
2020-10-31 14:32:18 +01:00
);
2019-03-17 16:55:26 +01:00
}
2020-05-21 15:05:19 +02:00
} else {
2019-03-17 16:55:26 +01:00
$this -> info_box_contents [ 0 ][ 0 ] = array (
2022-04-06 11:21:46 +02:00
'td' => 'class="nohover left"' ,
'text' => '<span class="opacitymedium">' . $langs -> trans ( " ReadPermissionNotAllowed " ) . '</span>'
2019-03-17 16:55:26 +01:00
);
}
}
2024-09-28 12:09:35 +02:00
2019-03-17 16:55:26 +01:00
/**
2024-09-28 12:09:35 +02:00
* Method to show box . Called when the box needs to be displayed .
2019-03-17 16:55:26 +01:00
*
2024-09-28 12:09:35 +02:00
* @ param ? array < array { text ? : string , sublink ? : string , subtext ? : string , subpicto ? : ? string , picto ? : string , nbcol ? : int , limit ? : int , subclass ? : string , graph ? : int < 0 , 1 > , target ? : string } > $head Array with properties of box title
* @ param ? array < array { tr ? : string , td ? : string , target ? : string , text ? : string , text2 ? : string , textnoformat ? : string , tooltip ? : string , logo ? : string , url ? : string , maxlength ? : int , asis ? : int < 0 , 1 > } > $contents Array with properties of box lines
2024-08-18 18:16:08 +02:00
* @ param int < 0 , 1 > $nooutput No print , only return string
2019-03-17 16:55:26 +01:00
* @ return string
*/
2020-10-31 14:32:18 +01:00
public function showBox ( $head = null , $contents = null , $nooutput = 0 )
{
2019-03-17 16:55:26 +01:00
return parent :: showBox ( $this -> info_box_head , $this -> info_box_contents , $nooutput );
}
}