3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.6 |
5 +--------------------------------------------------------------------+
6 | This file is a part of CiviCRM. |
8 | CiviCRM is free software; you can copy, modify, and distribute it |
9 | under the terms of the GNU Affero General Public License |
10 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
12 | CiviCRM is distributed in the hope that it will be useful, but |
13 | WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
15 | See the GNU Affero General Public License for more details. |
17 | You should have received a copy of the GNU Affero General Public |
18 | License and the CiviCRM Licensing Exception along |
19 | with this program; if not, contact CiviCRM LLC |
20 | at info[AT]civicrm[DOT]org. If you have questions about the |
21 | GNU Affero General Public License or the licensing of CiviCRM, |
22 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
23 +--------------------------------------------------------------------+
27 * Copyright (C) 2010 Tech To The People
28 * Licensed to CiviCRM under the Academic Free License version 3.0.
35 * @copyright CiviCRM LLC (c) 2004-2014
41 * This class print the name badges for the participants
42 * It isn't supposed to be called directly, but is the parent class of the classes in CRM/Event/Badges/XXX.php
45 class CRM_Event_Badge
{
49 public function __construct() {
50 $this->style
= array('width' => 0.1, 'cap' => 'round', 'join' => 'round', 'dash' => '2,2', 'color' => array(0, 0, 200));
51 $this->format
= '5160';
52 $this->imgExtension
= 'png';
55 $this->setDebug(FALSE);
61 public function setDebug($debug = TRUE) {
68 $this->border
= "LTRB";
73 * Create the labels (pdf)
74 * It assumes the participants are from the same event
76 * @param array $participants
80 public function run(&$participants) {
81 // fetch the 1st participant, and take her event to retrieve its attributes
82 $participant = reset($participants);
83 $eventID = $participant['event_id'];
84 $this->event
= self
::retrieveEvent($eventID);
85 //call function to create labels
86 self
::createLabels($participants);
87 CRM_Utils_System
::civiExit(1);
93 * @return CRM_Event_BAO_Event|null
95 protected function retrieveEvent($eventID) {
96 $bao = new CRM_Event_BAO_Event();
97 if ($bao->get('id', $eventID)) {
104 * @param int $eventID
109 public function getImageFileName($eventID, $img = FALSE) {
110 global $civicrm_root;
111 $path = "CRM/Event/Badge";
116 $img = get_class($this) . "." . $this->imgExtension
;
119 // CRM-13235 - leverage the Smarty path to get all templates directories
120 $template = CRM_Core_Smarty
::singleton();
121 if (isset($template->template_dir
) && $template->template_dir
) {
122 $dirs = is_array( $template->template_dir
) ?
$template->template_dir
: array($template->template_dir
);
123 foreach ($dirs as $dir) {
124 foreach (array( "$dir/$path/$eventID/$img", "$dir/$path/$img") as $imgFile) {
125 if (file_exists($imgFile)) {
131 $imgFile = 'No template directories defined anywhere??';
134 // not sure it exists, but at least will display a meaniful fatal error in debug mode
141 public function printBackground($img = FALSE) {
142 $x = $this->pdf
->GetAbsX();
143 $y = $this->pdf
->GetY();
145 $this->pdf
->Rect($x, $y, $this->pdf
->width
, $this->pdf
->height
, 'D', array('all' => array('width' => 1, 'cap' => 'round', 'join' => 'round', 'dash' => '2,10', 'color' => array(255, 0, 0))));
147 $img = $this->getImageFileName($this->event
->id
, $img);
149 $imgsize = getimagesize($img);
151 $f = $this->imgRes
/ 25.4;
152 $w = $imgsize[0] / $f;
153 $h = $imgsize[1] / $f;
154 $this->pdf
->Image($img, $this->pdf
->GetAbsX(), $this->pdf
->GetY(), $w, $h, strtoupper($this->imgExtension
), '', '', FALSE, 72, '', FALSE, FALSE, $this->debug
, FALSE, FALSE, FALSE);
156 $this->pdf
->SetXY($x, $y);
160 * This is supposed to be overrided
162 public function generateLabel($participant) {
163 $txt = "{$this->event['title']}
164 {$participant['display_name']}
165 {$participant['current_employer']}";
167 $this->pdf
->MultiCell($this->pdf
->width
, $this->pdf
->lineHeight
, $txt);
170 public function pdfExtraFormat() {}
173 * Create labels (pdf)
175 * @param array $participants
179 public function createLabels(&$participants) {
181 $this->pdf
= new CRM_Utils_PDF_Label($this->format
, 'mm');
182 $this->pdfExtraFormat();
184 $this->pdf
->setPrintHeader(FALSE);
185 $this->pdf
->setPrintFooter(FALSE);
186 $this->pdf
->AddPage();
187 $this->pdf
->AddFont('DejaVu Sans', '', 'DejaVuSans.php');
188 $this->pdf
->SetFont('DejaVu Sans');
189 $this->pdf
->SetGenerator($this, "generateLabel");
191 foreach ($participants as $participant) {
192 $this->pdf
->AddPdfLabel($participant);
194 $this->pdf
->Output($this->event
->title
. '.pdf', 'D');