Bonjour.
en attendant une éventuelle solution "plus propre" et en HTML pour
modifier le contenu de l'export de listes d'émargement en PDF depuis
l'interface de Galette, voici donc une solution provisoire que j'ai pu
mettre en œuvre grâce aux conseils de Johan et André. Il me semblerait
inconcevable de ne pas la partager ici.
Concrètement, il s'agit de remplacer le fichier attendance_sheet.php à
la racine de galette par celui-ci joint.
J'y ai apporté plusieurs modifications:
- ajout d'une colonne comportant la personne morale à laquelle
appartient chaque membre.
- diminution de la taille de la police pour faire tenir le tout dans la
largeur de page
- diminution de la hauteur des lignes afin d'utiliser moins de papier
Attention toutefois, n'ayant pas l'utilité de l'impression avec photo,
je n'ai pas adapté pleinement la feuille à l'utilisation avec photo.
Le résultat est dans ce cas au mieux décevant. Cependant pour qui voudra
s'y pencher je pense qu'il ne reste pas beaucoup de boulot pour que ce
soit pleinement fonctionnel.
Cette solution reste cependant provisoire pour répondre à mon besoin
immédiat et ne remplacera une solution plus durable.
Si vous utiliser cependant mon fichier modifié (ce qui me fera grand
plaisir de vous avoir été utile), pensez surtout à conserver une copie
de l'ancien et du nouveau fichier (surtout si vous apportez vos propres
modifications), car il sera probablement écrasé la prochaine fois que
vous mettrez à jour votre version de Galette.
Cordialement,
Simjen
.
*
* @category Print
* @package Galette
*
* @author Johan Cwiklinski
* @copyright 2011-2013 The Galette Team
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
* @version SVN: $Id$
* @link http://galette.tuxfamily.org
*/
use Galette\IO\Pdf;
use Galette\Repository\Members;
use Galette\Filters\MembersList;
use Analog\Analog as Analog;
/** @ignore */
require_once 'includes/galette.inc.php';
if ( !$login->isLogged() ) {
header("location: index.php");
die();
}
if ( !$login->isAdmin() && !$login->isStaff() && !$login->isGroupManager() ) {
header("location: voir_adherent.php");
die();
}
if ( isset($session['filters']['members']) ) {
$filters = unserialize($session['filters']['members']);
} else {
$filters = new MembersList();
}
if ( count($filters->selected) == 0 ) {
Analog::log('No member selected to generate attendance sheet', Analog::INFO);
header('location:gestion_adherents.php');
die();
}
$m = new Members();
$members = $m->getArrayList(
$filters->selected,
array('nom_adh', 'prenom_adh'),
true
);
if ( !is_array($members) || count($members) < 1 ) {
die();
}
//with or without images?
$_wimages = false;
if ( isset($_POST['sheet_photos']) && $_POST['sheet_photos'] === '1') {
$_wimages = true;
}
define('SHEET_FONT', Pdf::FONT_SIZE-2);
/**
* PDF attendence sheet list
*
* @name SheetPdf
* @category Classes
* @package Galette
*
* @author Johan Cwiklinski
* @copyright 2011-2013 The Galette Team
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL License 3.0 or (at your option) any later version
* @link http://galette.tuxfamily.org
*/
class SheetPdf extends Pdf
{
public $doc_title = null;
public $sheet_title = null;
public $sheet_sub_title = null;
public $sheet_date = null;
/**
* Page header
*
* @return void
*/
public function Header()
{
$this->SetFont(Pdf::FONT, '', SHEET_FONT - 2);
$head_title = $this->doc_title;
if ( $this->sheet_title !== null ) {
$head_title .= ' - ' . $this->sheet_title;
}
if ( $this->sheet_sub_title !== null ) {
$head_title .= ' - ' . $this->sheet_sub_title;
}
if ( $this->sheet_date !== null ) {
$head_title .= ' - ' . $this->sheet_date->format(_T("Y-m-d"));
}
$this->Cell(0, 10, $head_title, 0, false, 'C', 0, '', 0, false, 'M', 'M');
}
}
$doc_title = _T("Attendance sheet");
if ( isset($_POST['sheet_type']) && trim($_POST['sheet_type']) != '' ) {
$doc_title = $_POST['sheet_type'];
}
$pdf=new SheetPdf();
$pdf->doc_title = $doc_title;
if ( isset($_POST['sheet_title']) && trim($_POST['sheet_title']) != '' ) {
$pdf->sheet_title = $_POST['sheet_title'];
}
if ( isset($_POST['sheet_sub_title']) && trim($_POST['sheet_sub_title']) != '' ) {
$pdf->sheet_sub_title = $_POST['sheet_sub_title'];
}
if ( isset($_POST['sheet_date']) && trim($_POST['sheet_date']) != '' ) {
$dformat = _T("Y-m-d");
$date = DateTime::createFromFormat(
$dformat,
$_POST['sheet_date']
);
$pdf->sheet_date = $date;
}
// Set document information
$pdf->SetTitle($doc_title);
$pdf->showPagination();
$pdf->setMargins(10, 20);
$pdf->setHeaderMargin(10);
$pdf->SetAutoPageBreak(true, 20);
$pdf->Open();
$pdf->SetFont(Pdf::FONT, '', SHEET_FONT);
$pdf->SetTextColor(0, 0, 0);
$pdf->AddPage();
$pdf->PageHeader($doc_title);
if ( $pdf->sheet_title !== null ) {
$pdf->Cell(190, 7, $_POST['sheet_title'], 0, 1, 'C');
}
if ( $pdf->sheet_sub_title ) {
$pdf->Cell(190, 7, $_POST['sheet_sub_title'], 0, 1, 'C');
}
if ( $pdf->sheet_date ) {
$date_fmt = null;
if ( PHP_OS === 'Linux' ) {
$format = _T("%A, %B %#d%O %Y");
$format = str_replace(
'%O',
date('S', $pdf->sheet_date->getTimestamp()),
$format
);
$date_fmt = strftime($format, $pdf->sheet_date->getTimestamp());
} else {
$format = _T("Y-m-d");
$date_fmt = $pdf->sheet_date->format($format);
}
$pdf->Cell(190, 7, $date_fmt, 0, 1, 'C');
}
// Header
$pdf->SetFont('', 'B');
$pdf->SetFillColor(255, 255, 255);
$pdf->Cell(60, 7, _T("Name"), 1, 0, 'C', 1);
$pdf->Cell(85, 7, _T("Legal entity"), 1, 0, 'C', 1);
$pdf->Cell(45, 7, _T("Signature"), 1, 1, 'C', 1);
// Data
$pdf->SetFont('', '', 9);
$mcount = 0;
foreach ( $members as $m ) {
$mcount++;
$pdf->Cell(10, 10, $mcount, 'LTB', 0, 'R');
if ( $m->hasPicture() && $_wimages ) {
$p = $m->picture->getPath();
// Set logo size to max width 30 mm or max height 25 mm
$ratio = $m->picture->getWidth()/$m->picture->getHeight();
if ( $ratio < 1 ) {
if ( $m->picture->getHeight() > 9 ) {
$hlogo = 9;
} else {
$hlogo = $m->picture->getHeight();
}
$wlogo = round($hlogo*$ratio);
} else {
if ( $m->picture->getWidth() > 9 ) {
$wlogo = 9;
} else {
$wlogo = $m->picture->getWidth();
}
$hlogo = round($wlogo/$ratio);
}
$y = $pdf->getY() + 1;
$x = $pdf->getX() + 1;
$pdf->Cell($wlogo+2, 10, '', 'LTB', 0);
$pdf->Image($p, $x, $y, $wlogo, $hlogo);
} else {
$x = $pdf->getX() + 1;
$pdf->Cell(1, 10, '', 'LTB', 0);
}
$xs = $pdf->getX() - $x + 1;
$pdf->Cell(50 - $xs, 10, $m->sname, 'RTB', 0, 'L');
$pdf->Cell(86 - $xs, 10, $m->company_name, 'RTB', 0, 'L');
$pdf->Cell(45, 10, '', 1, 1, 'L');
}
$pdf->Cell(190, 0, '', 'T');
$pdf->Output(_T("attendance_sheet") . '.pdf', 'D');