From a45ffeecca5eba9e050b2c36207fc1c923897a26 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Mar 2016 18:21:57 +0100 Subject: [PATCH 01/50] Missing changelog --- ChangeLog | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2144fe54620..dbc858dc1d0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,18 @@ English Dolibarr ChangeLog -------------------------------------------------------------- + +***** ChangeLog for 3.5.8 compared to 3.5.7 ***** +FIX: #4291 Correctly filter external calendar GETPOSTs +FIX: bad calculation for stock value +FIX: bad stock valo +FIX: change order date on clone (as everywhere else) +FIX: CVE CVE-2015-8685 +FIX: The hours of date filter aren't correct +FIX: #3442 Remove useless syslog +FIX: #3448 Pass expected date format +FIX: #3471 3.5 Rounding issue when dispatching non-integer + ***** ChangeLog for 3.5.7 compared to 3.5.6 ***** Fix: Paypal link were broken due to SSL v3 closed. Fix: [ bug #1769 ] Error when installing to a PostgreSQL DB that contains numbers From 32d0f9a8d771685d962e405b9f0c76d9a586df19 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Mar 2016 18:27:04 +0100 Subject: [PATCH 02/50] Prepare 3.6.7 --- htdocs/filefunc.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index d1784fb4863..3c1d1fdea0e 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -29,7 +29,7 @@ * \brief File that include conf.php file and commons lib like functions.lib.php */ -if (! defined('DOL_VERSION')) define('DOL_VERSION','3.6.6'); +if (! defined('DOL_VERSION')) define('DOL_VERSION','3.6.7'); if (! defined('EURO')) define('EURO',chr(128)); // Define syslog constants From e669dac3980f7da1e11d20a4b16d7ab0484497f3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 11 Mar 2016 18:28:39 +0100 Subject: [PATCH 03/50] Prepare 3.6.7 --- ChangeLog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index fe638ab3902..9a0da671af3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,9 @@ English Dolibarr ChangeLog -------------------------------------------------------------- +***** ChangeLog for 3.6.7 compared to 3.6.6 ***** +FIX: #4291 Correctly filter external calendar GETPOSTs +FIX: CVE CVE-2015-8685 ***** ChangeLog for 3.6.6 compared to 3.6.5 ***** FIX: #3734 Do not show empty links of deleted source objects in stock movement list From 25dcca301f38c986feef2beebc4b3800913da1a8 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Tue, 12 Apr 2016 09:47:35 +0200 Subject: [PATCH 04/50] Fix VAT amount on credit note was > 0 when manually entered --- htdocs/compta/facture/class/facture.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index ae368b3870b..333f71806c6 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -2392,7 +2392,7 @@ class Facture extends CommonInvoice $this->line->date_start = $date_start; $this->line->date_end = $date_end; $this->line->total_ht = (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ht):$total_ht); // For credit note and if qty is negative, total is negative - $this->line->total_tva = $total_tva; + $this->line->total_tva = (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_tva):$total_tva); $this->line->total_localtax1 = $total_localtax1; $this->line->total_localtax2 = $total_localtax2; $this->line->total_ttc = (($this->type==self::TYPE_CREDIT_NOTE||$qty<0)?-abs($total_ttc):$total_ttc); From 2d3b2c08b57e3c156599ec90f1f7413a2cfcf1f2 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 15 Apr 2016 10:56:03 +0200 Subject: [PATCH 05/50] FIX #3815 Call to undefined function local_by_date(). branch 3.7 --- htdocs/compta/localtax/quadri_detail.php | 36 +-- htdocs/core/lib/tax.lib.php | 366 ++++++++++++++++++++++- 2 files changed, 370 insertions(+), 32 deletions(-) diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index 7396c625165..73cfdff0659 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -3,7 +3,7 @@ * Copyright (C) 2004 Eric Seigne * Copyright (C) 2004-2013 Laurent Destailleur * Copyright (C) 2006-2007 Yannick Warnier - * Copyright (C) 2014 Rosana Romero + * Copyright (C) 2014-2016 Juanjo Menent * * 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 @@ -116,16 +116,11 @@ $product_static=new Product($db); $payment_static=new Paiement($db); $paymentfourn_static=new PaiementFourn($db); -//print_fiche_titre($langs->trans("VAT"),""); - -//$fsearch.='
'; $fsearch.=' '; $fsearch.=' '; -//$fsearch.=' '.$langs->trans("SalesTurnoverMinimum").': '; -//$fsearch.=' '; $calc=$conf->global->MAIN_INFO_LOCALTAX_CALC.$local; -// Affiche en-tete du rapport + if ($conf->global->$calc==0 || $conf->global->$calc==1) // Calculate on invoice for goods and services { $nom=$langs->trans($local==1?"LT1ReportByQuartersInDueDebtMode":"LT2ReportByQuartersInDueDebtMode"); @@ -138,14 +133,11 @@ if ($conf->global->$calc==0 || $conf->global->$calc==1) // Calculate on invoice $nextyear=$year_start; $nextquarter=$q; if ($nextquarter < 4) $nextquarter++; else { $nextquarter=1; $nextyear++; } - //$periodlink=($prevyear?"".img_previous()." ".img_next()."":""); - //if ($conf->global->MAIN_MODULE_COMPTABILITE || $conf->global->MAIN_MODULE_ACCOUNTING) $description.='
'.img_warning().' '.$langs->trans('OptionVatInfoModuleComptabilite'); - //if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) $description.='
'.$langs->trans("WarningDepositsNotIncluded"); + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.='
'.$langs->trans("DepositsAreNotIncluded"); else $description.='
'.$langs->trans("DepositsAreIncluded"); $description.=$fsearch; $builddate=time(); - //$exportlink=$langs->trans("NotYetAvailable"); $elementcust=$langs->trans("CustomersInvoices"); $productcust=$langs->trans("ProductOrService"); @@ -170,14 +162,10 @@ if ($conf->global->$calc==2) // Invoice for goods, payment for services $nextyear=$year_start; $nextquarter=$q; if ($nextquarter < 4) $nextquarter++; else { $nextquarter=1; $nextyear++; } - //$periodlink=($prevyear?"".img_previous()." ".img_next()."":""); if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.=' '.$langs->trans("DepositsAreNotIncluded"); else $description.=' '.$langs->trans("DepositsAreIncluded"); - //if ($conf->global->MAIN_MODULE_COMPTABILITE || $conf->global->MAIN_MODULE_ACCOUNTING) $description.='
'.img_warning().' '.$langs->trans('OptionVatInfoModuleComptabilite'); - //if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) $description.='
'.$langs->trans("WarningDepositsNotIncluded"); $description.=$fsearch; $builddate=time(); - //$exportlink=$langs->trans("NotYetAvailable"); $elementcust=$langs->trans("CustomersInvoices"); $productcust=$langs->trans("ProductOrService"); @@ -203,15 +191,12 @@ if($local==1){ // VAT Received and paid - - $y = $year_current; $total = 0; $i=0; // Load arrays of datas $x_coll= local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell', $local); -//$x_coll = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell'); $x_paye = local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy', $local); @@ -230,10 +215,10 @@ if (! is_array($x_coll) || ! is_array($x_paye)) else { $x_both = array(); + //now, from these two arrays, get another array with one rate per line foreach(array_keys($x_coll) as $my_coll_rate) { - //foreach($x_coll[$my_coll_rate][localtax1_list]){ $x_both[$my_coll_rate]['coll']['totalht'] = $x_coll[$my_coll_rate]['totalht']; $x_both[$my_coll_rate]['coll']['vat'] = $x_coll[$my_coll_rate]['vat']; $x_both[$my_coll_rate]['paye']['totalht'] = 0; @@ -303,9 +288,6 @@ else } //now we have an array (x_both) indexed by rates for coll and paye - - //print table headers for this quadri - incomes first - $x_coll_sum = 0; $x_coll_ht = 0; $x_paye_sum = 0; @@ -313,9 +295,7 @@ else $span=3; if ($modetax == 0) $span+=2; - - //print ''..')'; - + if($conf->global->$calc ==0 || $conf->global->$calc == 2){ // Customers invoices print ''; @@ -345,8 +325,6 @@ else if($rate!=0){ print ""; - //print ''.$langs->trans("Rate").': '.vatrate($rate).'%'; - /**/ print ''.$langs->trans("Rate").': '.vatrate($rate).'%'; print ''."\n"; } @@ -400,9 +378,7 @@ else print price($fields['totalht']); if (price2num($fields['ftotal_ttc'])) { - //print $fields['dtotal_ttc']."/".$fields['ftotal_ttc']." - "; $ratiolineinvoice=($fields['dtotal_ttc']/$fields['ftotal_ttc']); - //print ' ('.round($ratiolineinvoice*100,2).'%)'; } print ''; } @@ -413,7 +389,6 @@ else { if (isset($fields['payment_amount']) && $fields['ftotal_ttc']) $ratiopaymentinvoice=($fields['payment_amount']/$fields['ftotal_ttc']); print ''; - //print $fields['totalht']."-".$fields['payment_amount']."-".$fields['ftotal_ttc']; if ($fields['payment_amount'] && $fields['ftotal_ttc']) { $payment_static->id=$fields['payment_id']; @@ -491,7 +466,6 @@ else if($conf->global->$calc ==0 || $conf->global->$calc == 1){ echo ''; //print table headers for this quadri - expenses now - //imprime les en-tete de tables pour ce quadri - maintenant les d�penses print ''; print ''; print ''; diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index de705111b9d..ae217004bbf 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -2,7 +2,7 @@ /* Copyright (C) 2004-2009 Laurent Destailleur * Copyright (C) 2006-2007 Yannick Warnier * Copyright (C) 2011 Regis Houssin - * Copyright (C) 2012 Juanjo Menent + * Copyright (C) 2012-2016 Juanjo Menent * Copyright (C) 2015 Marcos García * * This program is free software; you can redistribute it and/or modify @@ -205,6 +205,370 @@ function vat_by_thirdparty($db, $y, $date_start, $date_end, $modetax, $direction } } +/** + * Gets LocalTaxes to collect for the given year (and given quarter or month) + * The function gets the LocalTaxes in split results, as the LocalTaxes declaration asks + * to report the amounts for different LocalTaxes rates as different lines. + * + * @param DoliDB $db Database handler object + * @param int $y Year + * @param int $q Quarter + * @param string $date_start Start date + * @param string $date_end End date + * @param int $modetax 0 or 1 (option on debit) + * @param int $direction 'sell' (customer invoice) or 'buy' (supplier invoices) + * @param int $local 1 for LocalTax1, 2 for LocalTax2 + * @param int $m Month + * @return array List of quarters with LocalTaxes + */ +function local_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $local, $m=0) +{ + global $conf; + + $list=array(); + + if ($direction == 'sell') + { + $invoicetable='facture'; + $invoicedettable='facturedet'; + $fk_facture='fk_facture'; + $fk_facture2='fk_facture'; + $fk_payment='fk_paiement'; + $total_tva='total_tva'; + $total_localtax1='total_localtax1'; + $total_localtax2='total_localtax2'; + $paymenttable='paiement'; + $paymentfacturetable='paiement_facture'; + $invoicefieldref='facnumber'; + $localtax_tx=$local==1?'localtax1_tx':'localtax2_tx'; + } + if ($direction == 'buy') + { + $invoicetable='facture_fourn'; + $invoicedettable='facture_fourn_det'; + $fk_facture='fk_facture_fourn'; + $fk_facture2='fk_facturefourn'; + $fk_payment='fk_paiementfourn'; + $total_tva='tva'; + $total_localtax1='total_localtax1'; + $total_localtax2='total_localtax2'; + $paymenttable='paiementfourn'; + $paymentfacturetable='paiementfourn_facturefourn'; + $invoicefieldref='ref'; + $localtax_tx=$local==1?'localtax1_tx':'localtax2_tx'; + } + + // BIENS + + // Define sql request + $sql=''; + if ($modetax == 1) // Option on delivery for goods (payment) and debit invoice for services + { + if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) + { + $sql='TODO'; + } + if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) + { + // Count on delivery date (use invoice date as delivery is unknown) + $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx,"; + $sql.= " d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; + $sql.= " d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; + $sql.= " d.date_start as date_start, d.date_end as date_end,"; + $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; + $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; + $sql.= " 0 as payment_id, 0 as payment_amount"; + $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; + $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; + $sql.= " WHERE f.entity = " . $conf->entity; + $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)"; + else $sql.= " AND f.type IN (0,1,2,3)"; + $sql.= " AND f.rowid = d.".$fk_facture; + if ($y && $m) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; + } + else if ($y) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; + } + if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; + if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; + $sql.= " AND (d.product_type = 0"; // Limit to products + $sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service + $sql.= " ORDER BY d.rowid, d.".$fk_facture; + } + } + else // Option vat on delivery for goods (payments) and payments for services + { + if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) + { + $sql='TODO'; + } + if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) + { + // Count on delivery date (use invoice date as delivery is unknown) + $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; + $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; + $sql.= " d.date_start as date_start, d.date_end as date_end,"; + $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; + $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; + $sql.= " 0 as payment_id, 0 as payment_amount"; + $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; + $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; + $sql.= " WHERE f.entity = " . $conf->entity; + $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)"; + else $sql.= " AND f.type IN (0,1,2,3)"; + $sql.= " AND f.rowid = d.".$fk_facture; + if ($y && $m) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; + } + else if ($y) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; + } + if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; + if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; + $sql.= " AND (d.product_type = 0"; // Limit to products + $sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service + $sql.= " ORDER BY d.rowid, d.".$fk_facture; + } + } + + if (! $sql) return -1; + if ($sql == 'TODO') return -2; + if ($sql != 'TODO') + { + dol_syslog("Tax.lib.php::vat_by_date sql=".$sql); + + $resql = $db->query($sql); + if ($resql) + { + $lt=-1; + $oldrowid=''; + while($assoc = $db->fetch_array($resql)) + { + if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0; + if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0; + if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0; + if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0; + + if ($assoc['rowid'] != $oldrowid) + { + $oldrowid=$assoc['rowid']; + $list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht']; + $list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat']; + $list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1']; + $list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2']; + } + + $list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx']; + $list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx']; + + $list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc']; + $list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype']; + $list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']); + $list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']); + + $list[$assoc['localtax_tx']]['facid'][] = $assoc['facid']; + $list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum']; + $list[$assoc['localtax_tx']]['type'][] = $assoc['type']; + $list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc']; + $list[$assoc['localtax_tx']]['descr'][] = $assoc['descr']; + + $list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht']; + $list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat']; + $list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1']; + $list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2']; + + $list[$assoc['localtax_tx']]['pid'][] = $assoc['pid']; + $list[$assoc['localtax_tx']]['pref'][] = $assoc['pref']; + $list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype']; + + $list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id']; + $list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount']; + + $lt = $assoc['localtax_tx']; + } + } + else + { + dol_print_error($db); + return -3; + } + } + + + //SERVICES + + // Define sql request + $sql=''; + if ($modetax == 1) // Option on delivery for goods (payment) and debit invoice for services + { + if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) + { + $sql='TODO'; + } + if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) + { + // Count on invoice date + $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; + $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; + $sql.= " d.date_start as date_start, d.date_end as date_end,"; + $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; + $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; + $sql.= " 0 as payment_id, 0 as payment_amount"; + $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; + $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; + $sql.= " WHERE f.entity = " . $conf->entity; + $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)"; + else $sql.= " AND f.type IN (0,1,2,3)"; + $sql.= " AND f.rowid = d.".$fk_facture; + if ($y && $m) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; + } + else if ($y) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; + } + if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; + if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; + $sql.= " AND (d.product_type = 1"; // Limit to services + $sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service + $sql.= " ORDER BY d.rowid, d.".$fk_facture; + } + } + else // Option on delivery for goods (payments) and payments for services + { + if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) + { + + $sql='TODO'; + } + if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) + { + // Count on payments date + $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; + $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; + $sql.= " d.date_start as date_start, d.date_end as date_end,"; + $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; + $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; + $sql.= " pf.".$fk_payment." as payment_id, pf.amount as payment_amount"; + $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; + $sql.= " ".MAIN_DB_PREFIX.$paymentfacturetable." as pf,"; + $sql.= " ".MAIN_DB_PREFIX.$paymenttable." as pa,"; + $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; + $sql.= " WHERE f.entity = " . $conf->entity; + $sql.= " AND f.fk_statut in (1,2)"; // Paid (partially or completely) + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)"; + else $sql.= " AND f.type IN (0,1,2,3)"; + $sql.= " AND f.rowid = d.".$fk_facture;; + $sql.= " AND pf.".$fk_facture2." = f.rowid"; + $sql.= " AND pa.rowid = pf.".$fk_payment; + if ($y && $m) + { + $sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; + $sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; + } + else if ($y) + { + $sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,1,false))."'"; + $sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,12,false))."'"; + } + if ($q) $sql.= " AND (date_format(pa.datep,'%m') > ".(($q-1)*3)." AND date_format(pa.datep,'%m') <= ".($q*3).")"; + if ($date_start && $date_end) $sql.= " AND pa.datep >= ".$db->idate($date_start)." AND pa.datep <= ".$db->idate($date_end); + $sql.= " AND (d.product_type = 1"; // Limit to services + $sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service + $sql.= " ORDER BY d.rowid, d.".$fk_facture.", pf.rowid"; + } + } + + if (! $sql) + { + dol_syslog("Tax.lib.php::vat_by_date no accountancy module enabled".$sql,LOG_ERR); + return -1; // -1 = Not accountancy module enabled + } + if ($sql == 'TODO') return -2; // -2 = Feature not yet available + if ($sql != 'TODO') + { + dol_syslog("Tax.lib.php::vat_by_date sql=".$sql); + $resql = $db->query($sql); + if ($resql) + { + $lt = -1; + $oldrowid=''; + while($assoc = $db->fetch_array($resql)) + { + if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0; + if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0; + if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0; + if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0; + + if ($assoc['rowid'] != $oldrowid) + { + $oldrowid=$assoc['rowid']; + $list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht']; + $list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat']; + $list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1']; + $list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2']; + } + + $list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx']; + $list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx']; + + $list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc']; + $list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype']; + $list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']); + $list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']); + + $list[$assoc['localtax_tx']]['facid'][] = $assoc['facid']; + $list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum']; + $list[$assoc['localtax_tx']]['type'][] = $assoc['type']; + $list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc']; + $list[$assoc['localtax_tx']]['descr'][] = $assoc['descr']; + + $list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht']; + $list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat']; + $list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1']; + $list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2']; + + $list[$assoc['localtax_tx']]['pid'][] = $assoc['pid']; + $list[$assoc['localtax_tx']]['pref'][] = $assoc['pref']; + $list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype']; + + $list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id']; + $list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount']; + + $lt = $assoc['localtax_tx']; + } + } + else + { + dol_print_error($db); + return -3; + } + } + + return $list; + + +} + /** * Gets VAT to collect for the given year (and given quarter or month) From c3d4cd85f17f4c223112573979763bef78fdb05d Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Fri, 15 Apr 2016 12:28:35 +0200 Subject: [PATCH 06/50] NEW hidden feature: SUPPLIERORDER_WITH_NOPRICEDEFINED allow supplier order even if no supplier price defined --- htdocs/core/class/html.form.class.php | 13 +++++++++++-- htdocs/core/tpl/objectline_create.tpl.php | 2 +- htdocs/fourn/class/fournisseur.commande.class.php | 2 +- htdocs/fourn/commande/card.php | 9 +++++++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 393560b4640..702b44c468e 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1968,14 +1968,23 @@ class Form if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) { - // mode=2 means suppliers products + if (!empty($conf->global->SUPPLIERORDER_WITH_NOPRICEDEFINED)) + { + print ''; + } + // mode=2 means suppliers products $urloption=($socid > 0?'socid='.$socid.'&':'').'htmlname='.$htmlname.'&outjson=1&price_level='.$price_level.'&type='.$filtertype.'&mode=2&status='.$status.'&finished='.$finished; print ajax_autocompleter('', $htmlname, DOL_URL_ROOT.'/product/ajax/products.php', $urloption, $conf->global->PRODUIT_USE_SEARCH_TO_SELECT, 0, $ajaxoptions); print ($hidelabel?'':$langs->trans("RefOrLabel").' : ').''; } else { - print $this->select_produits_fournisseurs_list($socid,$selected,$htmlname,$filtertype,$filtre,'',-1,0); + if (!empty($conf->global->SUPPLIERORDER_WITH_NOPRICEDEFINED)) + { + print ''; + print ''; + } + print $this->select_produits_fournisseurs_list($socid,$selected,$htmlname,$filtertype,$filtre,'',-1,0); } } diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index c757efa23b4..3cab39b0d0b 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -176,7 +176,7 @@ else { else { $ajaxoptions=array( - 'update' => array('qty'=>'qty','remise_percent' => 'discount'), // html id tags that will be edited with which ajax json response key + 'update' => array('qty'=>'qty','remise_percent' => 'discount','idprod' => 'idprod'), // html id tags that will be edited with which ajax json response key 'option_disabled' => 'addPredefinedProductButton', // html id to disable once select is done 'warning' => $langs->trans("NoPriceDefinedForThisSupplier") // translation of an error saved into var 'error' ); diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index e988893dbb4..39858256ced 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1268,7 +1268,7 @@ class CommandeFournisseur extends CommonOrder { $this->db->begin(); - if ($fk_product > 0) + if ($fk_prod_fourn_price > 0) { $prod = new Product($this->db, $fk_product); if ($prod->fetch($fk_product) > 0) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 904cd5b3133..d114e9c06fc 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -306,10 +306,15 @@ if (empty($reshook)) // Ecrase $txtva par celui du produit if ((GETPOST('prod_entry_mode') != 'free') && empty($error)) // With combolist mode idprodfournprice is > 0 or -1. With autocomplete, idprodfournprice is > 0 or '' { - $idprod=0; $productsupplier = new ProductFournisseur($db); - if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...) + if (empty($conf->global->SUPPLIERORDER_WITH_NOPRICEDEFINED)) + { + $idprod=0; + if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...) + } + + if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...) if (GETPOST('idprodfournprice') > 0) { From ec5e0e5290b250a92643e72a41a3ad21d753bebd Mon Sep 17 00:00:00 2001 From: Christophe Battarel Date: Fri, 15 Apr 2016 12:32:36 +0200 Subject: [PATCH 07/50] forgot one line --- htdocs/fourn/commande/card.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index d114e9c06fc..91f6aa9041b 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -314,8 +314,6 @@ if (empty($reshook)) if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...) } - if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...) - if (GETPOST('idprodfournprice') > 0) { $idprod=$productsupplier->get_buyprice(GETPOST('idprodfournprice'), $qty); // Just to see if a price exists for the quantity. Not used to found vat. From 4446e6a36cf5df2de1e660944cae2bc8d710ea2b Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 15 Apr 2016 12:47:21 +0200 Subject: [PATCH 08/50] FIX #3815 Call to undefined function local_by_date(). branch 3.8 --- htdocs/compta/localtax/quadri_detail.php | 42 +-- htdocs/core/lib/tax.lib.php | 335 +++++++++++++++++++++++ 2 files changed, 343 insertions(+), 34 deletions(-) diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index 7396c625165..a4eaccba35b 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -3,7 +3,7 @@ * Copyright (C) 2004 Eric Seigne * Copyright (C) 2004-2013 Laurent Destailleur * Copyright (C) 2006-2007 Yannick Warnier - * Copyright (C) 2014 Rosana Romero + * Copyright (C) 2014-2016 Juanjo Menent * * 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 @@ -116,16 +116,11 @@ $product_static=new Product($db); $payment_static=new Paiement($db); $paymentfourn_static=new PaiementFourn($db); -//print_fiche_titre($langs->trans("VAT"),""); - -//$fsearch.='
'; $fsearch.=' '; $fsearch.=' '; -//$fsearch.=' '.$langs->trans("SalesTurnoverMinimum").': '; -//$fsearch.=' '; $calc=$conf->global->MAIN_INFO_LOCALTAX_CALC.$local; -// Affiche en-tete du rapport + if ($conf->global->$calc==0 || $conf->global->$calc==1) // Calculate on invoice for goods and services { $nom=$langs->trans($local==1?"LT1ReportByQuartersInDueDebtMode":"LT2ReportByQuartersInDueDebtMode"); @@ -138,14 +133,11 @@ if ($conf->global->$calc==0 || $conf->global->$calc==1) // Calculate on invoice $nextyear=$year_start; $nextquarter=$q; if ($nextquarter < 4) $nextquarter++; else { $nextquarter=1; $nextyear++; } - //$periodlink=($prevyear?"".img_previous()." ".img_next()."":""); - //if ($conf->global->MAIN_MODULE_COMPTABILITE || $conf->global->MAIN_MODULE_ACCOUNTING) $description.='
'.img_warning().' '.$langs->trans('OptionVatInfoModuleComptabilite'); - //if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) $description.='
'.$langs->trans("WarningDepositsNotIncluded"); - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.='
'.$langs->trans("DepositsAreNotIncluded"); + + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.='
'.$langs->trans("DepositsAreNotIncluded"); else $description.='
'.$langs->trans("DepositsAreIncluded"); $description.=$fsearch; $builddate=time(); - //$exportlink=$langs->trans("NotYetAvailable"); $elementcust=$langs->trans("CustomersInvoices"); $productcust=$langs->trans("ProductOrService"); @@ -170,14 +162,10 @@ if ($conf->global->$calc==2) // Invoice for goods, payment for services $nextyear=$year_start; $nextquarter=$q; if ($nextquarter < 4) $nextquarter++; else { $nextquarter=1; $nextyear++; } - //$periodlink=($prevyear?"".img_previous()." ".img_next()."":""); - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.=' '.$langs->trans("DepositsAreNotIncluded"); + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $description.=' '.$langs->trans("DepositsAreNotIncluded"); else $description.=' '.$langs->trans("DepositsAreIncluded"); - //if ($conf->global->MAIN_MODULE_COMPTABILITE || $conf->global->MAIN_MODULE_ACCOUNTING) $description.='
'.img_warning().' '.$langs->trans('OptionVatInfoModuleComptabilite'); - //if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) $description.='
'.$langs->trans("WarningDepositsNotIncluded"); $description.=$fsearch; $builddate=time(); - //$exportlink=$langs->trans("NotYetAvailable"); $elementcust=$langs->trans("CustomersInvoices"); $productcust=$langs->trans("ProductOrService"); @@ -203,15 +191,12 @@ if($local==1){ // VAT Received and paid - - $y = $year_current; $total = 0; $i=0; // Load arrays of datas $x_coll= local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell', $local); -//$x_coll = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell'); $x_paye = local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy', $local); @@ -230,10 +215,10 @@ if (! is_array($x_coll) || ! is_array($x_paye)) else { $x_both = array(); + //now, from these two arrays, get another array with one rate per line foreach(array_keys($x_coll) as $my_coll_rate) { - //foreach($x_coll[$my_coll_rate][localtax1_list]){ $x_both[$my_coll_rate]['coll']['totalht'] = $x_coll[$my_coll_rate]['totalht']; $x_both[$my_coll_rate]['coll']['vat'] = $x_coll[$my_coll_rate]['vat']; $x_both[$my_coll_rate]['paye']['totalht'] = 0; @@ -303,9 +288,6 @@ else } //now we have an array (x_both) indexed by rates for coll and paye - - //print table headers for this quadri - incomes first - $x_coll_sum = 0; $x_coll_ht = 0; $x_paye_sum = 0; @@ -314,8 +296,6 @@ else $span=3; if ($modetax == 0) $span+=2; - //print '
'; - if($conf->global->$calc ==0 || $conf->global->$calc == 2){ // Customers invoices print ''; @@ -345,8 +325,6 @@ else if($rate!=0){ print ""; - //print ''; - /**/ print ''; print ''."\n"; } @@ -400,9 +378,7 @@ else print price($fields['totalht']); if (price2num($fields['ftotal_ttc'])) { - //print $fields['dtotal_ttc']."/".$fields['ftotal_ttc']." - "; $ratiolineinvoice=($fields['dtotal_ttc']/$fields['ftotal_ttc']); - //print ' ('.round($ratiolineinvoice*100,2).'%)'; } print ''; } @@ -413,7 +389,6 @@ else { if (isset($fields['payment_amount']) && $fields['ftotal_ttc']) $ratiopaymentinvoice=($fields['payment_amount']/$fields['ftotal_ttc']); print ''; @@ -491,7 +466,6 @@ else if($conf->global->$calc ==0 || $conf->global->$calc == 1){ echo '
'.$elementsup.''.$productsup.'
'..')
'.$langs->trans("Rate").': '.vatrate($rate).'%'.$langs->trans("Rate").': '.vatrate($rate).'%
'; - //print $fields['totalht']."-".$fields['payment_amount']."-".$fields['ftotal_ttc']; if ($fields['payment_amount'] && $fields['ftotal_ttc']) { $payment_static->id=$fields['payment_id']; @@ -424,7 +399,7 @@ else print $langs->trans("NotUsedForGoods"); } else { - print $fields['payment_amount']; + print price($fields['payment_amount']); if (isset($fields['payment_amount'])) print ' ('.round($ratiopaymentinvoice*100,2).'%)'; } print '
'; //print table headers for this quadri - expenses now - //imprime les en-tete de tables pour ce quadri - maintenant les d�penses print ''; print ''; print ''; @@ -585,7 +559,7 @@ else } else { - print $fields['payment_amount']; + print price($fields['payment_amount']); if (isset($fields['payment_amount'])) print ' ('.round($ratiopaymentinvoice*100,2).'%)'; } print ''; diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index 0a3c4942857..6054a32c692 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -178,6 +178,341 @@ function vat_by_thirdparty($db, $y, $date_start, $date_end, $modetax, $direction } } +/** + * Gets LocalTaxes to collect for the given year (and given quarter or month) + * The function gets the LocalTaxes in split results, as the LocalTaxes declaration asks + * to report the amounts for different LocalTaxes rates as different lines. + * + * @param DoliDB $db Database handler object + * @param int $y Year + * @param int $q Quarter + * @param string $date_start Start date + * @param string $date_end End date + * @param int $modetax 0 or 1 (option on debit) + * @param int $direction 'sell' (customer invoice) or 'buy' (supplier invoices) + * @param int $local 1 for LocalTax1, 2 for LocalTax2 + * @param int $m Month + * @return array List of quarters with LocalTaxes + */ +function local_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $local, $m=0) +{ + global $conf; + + $list=array(); + + if ($direction == 'sell') + { + $invoicetable='facture'; + $invoicedettable='facturedet'; + $fk_facture='fk_facture'; + $fk_facture2='fk_facture'; + $fk_payment='fk_paiement'; + $total_tva='total_tva'; + $total_localtax1='total_localtax1'; + $total_localtax2='total_localtax2'; + $paymenttable='paiement'; + $paymentfacturetable='paiement_facture'; + $invoicefieldref='facnumber'; + $localtax_tx=$local==1?'localtax1_tx':'localtax2_tx'; + } + if ($direction == 'buy') + { + $invoicetable='facture_fourn'; + $invoicedettable='facture_fourn_det'; + $fk_facture='fk_facture_fourn'; + $fk_facture2='fk_facturefourn'; + $fk_payment='fk_paiementfourn'; + $total_tva='tva'; + $total_localtax1='total_localtax1'; + $total_localtax2='total_localtax2'; + $paymenttable='paiementfourn'; + $paymentfacturetable='paiementfourn_facturefourn'; + $invoicefieldref='ref'; + $localtax_tx=$local==1?'localtax1_tx':'localtax2_tx'; + } + + // BIENS + + // Define sql request + $sql=''; + if ($modetax == 1) // Option on delivery for goods (payment) and debit invoice for services + { + + // Count on delivery date (use invoice date as delivery is unknown) + $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx,"; + $sql.= " d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; + $sql.= " d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; + $sql.= " d.date_start as date_start, d.date_end as date_end,"; + $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; + $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; + $sql.= " 0 as payment_id, 0 as payment_amount"; + $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; + $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; + $sql.= " WHERE f.entity = " . $conf->entity; + $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; + else $sql.= " AND f.type IN (0,1,2,3,5)"; + $sql.= " AND f.rowid = d.".$fk_facture; + if ($y && $m) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; + } + else if ($y) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; + } + if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; + if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; + $sql.= " AND (d.product_type = 0"; // Limit to products + $sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service + $sql.= " ORDER BY d.rowid, d.".$fk_facture; + + } + else // Option on delivery for goods (payments) and payments for services + { + // Count on delivery date (use invoice date as delivery is unknown) + $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; + $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; + $sql.= " d.date_start as date_start, d.date_end as date_end,"; + $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; + $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; + $sql.= " 0 as payment_id, 0 as payment_amount"; + $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; + $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; + $sql.= " WHERE f.entity = " . $conf->entity; + $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; + else $sql.= " AND f.type IN (0,1,2,3,5)"; + $sql.= " AND f.rowid = d.".$fk_facture; + if ($y && $m) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; + } + else if ($y) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; + } + if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; + if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; + $sql.= " AND (d.product_type = 0"; // Limit to products + $sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service + $sql.= " ORDER BY d.rowid, d.".$fk_facture; + + } + + if (! $sql) return -1; + + dol_syslog("Tax.lib.php::vat_by_date sql=".$sql); + + $resql = $db->query($sql); + if ($resql) + { + $lt=-1; + $oldrowid=''; + while($assoc = $db->fetch_array($resql)) + { + if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0; + if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0; + if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0; + if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0; + + if ($assoc['rowid'] != $oldrowid) // Si rupture sur d.rowid + { + $oldrowid=$assoc['rowid']; + $list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht']; + $list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat']; + $list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1']; + $list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2']; + } + + $list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx']; + $list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx']; + + $list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc']; + $list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype']; + $list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']); + $list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']); + + $list[$assoc['localtax_tx']]['facid'][] = $assoc['facid']; + $list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum']; + $list[$assoc['localtax_tx']]['type'][] = $assoc['type']; + $list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc']; + $list[$assoc['localtax_tx']]['descr'][] = $assoc['descr']; + + $list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht']; + $list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat']; + $list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1']; + $list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2']; + + $list[$assoc['localtax_tx']]['pid'][] = $assoc['pid']; + $list[$assoc['localtax_tx']]['pref'][] = $assoc['pref']; + $list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype']; + + $list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id']; + $list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount']; + + $lt = $assoc['localtax_tx']; + } + } + else + { + dol_print_error($db); + return -3; + } + + // CAS DES SERVICES + + // Define sql request + $sql=''; + if ($modetax == 1) // Option vat on delivery for goods (payment) and debit invoice for services + { + + // Count on invoice date + $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; + $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; + $sql.= " d.date_start as date_start, d.date_end as date_end,"; + $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; + $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; + $sql.= " 0 as payment_id, 0 as payment_amount"; + $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; + $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; + $sql.= " WHERE f.entity = " . $conf->entity; + $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; + else $sql.= " AND f.type IN (0,1,2,3,5)"; + $sql.= " AND f.rowid = d.".$fk_facture; + if ($y && $m) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; + } + else if ($y) + { + $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; + $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; + } + if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; + if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; + $sql.= " AND (d.product_type = 1"; // Limit to services + $sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service + $sql.= " ORDER BY d.rowid, d.".$fk_facture; + + } + else // Option vat on delivery for goods (payments) and payments for services + { + + // Count on payments date + $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; + $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; + $sql.= " d.date_start as date_start, d.date_end as date_end,"; + $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; + $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; + $sql.= " pf.".$fk_payment." as payment_id, pf.amount as payment_amount"; + $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; + $sql.= " ".MAIN_DB_PREFIX.$paymentfacturetable." as pf,"; + $sql.= " ".MAIN_DB_PREFIX.$paymenttable." as pa,"; + $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; + $sql.= " WHERE f.entity = " . $conf->entity; + $sql.= " AND f.fk_statut in (1,2)"; // Paid (partially or completely) + if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; + else $sql.= " AND f.type IN (0,1,2,3,5)"; + $sql.= " AND f.rowid = d.".$fk_facture;; + $sql.= " AND pf.".$fk_facture2." = f.rowid"; + $sql.= " AND pa.rowid = pf.".$fk_payment; + if ($y && $m) + { + $sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; + $sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; + } + else if ($y) + { + $sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,1,false))."'"; + $sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,12,false))."'"; + } + if ($q) $sql.= " AND (date_format(pa.datep,'%m') > ".(($q-1)*3)." AND date_format(pa.datep,'%m') <= ".($q*3).")"; + if ($date_start && $date_end) $sql.= " AND pa.datep >= ".$db->idate($date_start)." AND pa.datep <= ".$db->idate($date_end); + $sql.= " AND (d.product_type = 1"; // Limit to services + $sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service + $sql.= " ORDER BY d.rowid, d.".$fk_facture.", pf.rowid"; + + } + + if (! $sql) + { + dol_syslog("Tax.lib.php::local_by_date no accountancy module enabled".$sql,LOG_ERR); + return -1; + } + + dol_syslog("Tax.lib.php::local_by_date sql=".$sql); + $resql = $db->query($sql); + if ($resql) + { + $lt = -1; + $oldrowid=''; + while($assoc = $db->fetch_array($resql)) + { + if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0; + if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0; + if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0; + if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0; + + if ($assoc['rowid'] != $oldrowid) + { + $oldrowid=$assoc['rowid']; + $list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht']; + $list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat']; + $list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1']; + $list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2']; + } + + $list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx']; + $list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx']; + + $list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc']; + $list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype']; + $list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']); + $list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']); + + $list[$assoc['localtax_tx']]['facid'][] = $assoc['facid']; + $list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum']; + $list[$assoc['localtax_tx']]['type'][] = $assoc['type']; + $list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc']; + $list[$assoc['localtax_tx']]['descr'][] = $assoc['descr']; + + $list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht']; + $list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat']; + $list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1']; + $list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2']; + + $list[$assoc['localtax_tx']]['pid'][] = $assoc['pid']; + $list[$assoc['localtax_tx']]['pref'][] = $assoc['pref']; + $list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype']; + + $list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id']; + $list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount']; + + $lt = $assoc['localtax_tx']; + } + } + else + { + dol_print_error($db); + return -3; + } + + return $list; + + +} + /** * Gets VAT to collect for the given year (and given quarter or month) From c5ecc46a220b227b5fe46efba9fc76fda55773e1 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 15 Apr 2016 15:42:58 +0200 Subject: [PATCH 09/50] FIX #3815 With higher quality --- htdocs/compta/localtax/quadri_detail.php | 11 +- htdocs/core/lib/tax.lib.php | 338 +---------------------- 2 files changed, 6 insertions(+), 343 deletions(-) diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index a4eaccba35b..175ff6cf98f 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -196,8 +196,8 @@ $total = 0; $i=0; // Load arrays of datas -$x_coll= local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell', $local); -$x_paye = local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy', $local); +$x_coll = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell'); +$x_paye = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy'); echo '
'.$elementsup.''.$productsup.'
'; @@ -220,9 +220,9 @@ else foreach(array_keys($x_coll) as $my_coll_rate) { $x_both[$my_coll_rate]['coll']['totalht'] = $x_coll[$my_coll_rate]['totalht']; - $x_both[$my_coll_rate]['coll']['vat'] = $x_coll[$my_coll_rate]['vat']; + $x_both[$my_coll_rate]['coll']['localtax'.$local] = $x_coll[$my_coll_rate]['localtax'.$local]; $x_both[$my_coll_rate]['paye']['totalht'] = 0; - $x_both[$my_coll_rate]['paye']['vat'] = 0; + $x_both[$my_coll_rate]['paye']['localtax'.$local] = 0; $x_both[$my_coll_rate]['coll']['links'] = ''; $x_both[$my_coll_rate]['coll']['detail'] = array(); foreach($x_coll[$my_coll_rate]['facid'] as $id=>$dummy) @@ -637,6 +637,5 @@ else $i++; } -$db->close(); - llxFooter(); +$db->close(); diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index 6054a32c692..93b4b480dde 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -2,7 +2,7 @@ /* Copyright (C) 2004-2009 Laurent Destailleur * Copyright (C) 2006-2007 Yannick Warnier * Copyright (C) 2011 Regis Houssin - * Copyright (C) 2012 Juanjo Menent + * Copyright (C) 2012-2016 Juanjo Menent * Copyright (C) 2012 Cédric Salvador * Copyright (C) 2012-2014 Raphaël Doursenaud * Copyright (C) 2015 Marcos García @@ -178,342 +178,6 @@ function vat_by_thirdparty($db, $y, $date_start, $date_end, $modetax, $direction } } -/** - * Gets LocalTaxes to collect for the given year (and given quarter or month) - * The function gets the LocalTaxes in split results, as the LocalTaxes declaration asks - * to report the amounts for different LocalTaxes rates as different lines. - * - * @param DoliDB $db Database handler object - * @param int $y Year - * @param int $q Quarter - * @param string $date_start Start date - * @param string $date_end End date - * @param int $modetax 0 or 1 (option on debit) - * @param int $direction 'sell' (customer invoice) or 'buy' (supplier invoices) - * @param int $local 1 for LocalTax1, 2 for LocalTax2 - * @param int $m Month - * @return array List of quarters with LocalTaxes - */ -function local_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $local, $m=0) -{ - global $conf; - - $list=array(); - - if ($direction == 'sell') - { - $invoicetable='facture'; - $invoicedettable='facturedet'; - $fk_facture='fk_facture'; - $fk_facture2='fk_facture'; - $fk_payment='fk_paiement'; - $total_tva='total_tva'; - $total_localtax1='total_localtax1'; - $total_localtax2='total_localtax2'; - $paymenttable='paiement'; - $paymentfacturetable='paiement_facture'; - $invoicefieldref='facnumber'; - $localtax_tx=$local==1?'localtax1_tx':'localtax2_tx'; - } - if ($direction == 'buy') - { - $invoicetable='facture_fourn'; - $invoicedettable='facture_fourn_det'; - $fk_facture='fk_facture_fourn'; - $fk_facture2='fk_facturefourn'; - $fk_payment='fk_paiementfourn'; - $total_tva='tva'; - $total_localtax1='total_localtax1'; - $total_localtax2='total_localtax2'; - $paymenttable='paiementfourn'; - $paymentfacturetable='paiementfourn_facturefourn'; - $invoicefieldref='ref'; - $localtax_tx=$local==1?'localtax1_tx':'localtax2_tx'; - } - - // BIENS - - // Define sql request - $sql=''; - if ($modetax == 1) // Option on delivery for goods (payment) and debit invoice for services - { - - // Count on delivery date (use invoice date as delivery is unknown) - $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx,"; - $sql.= " d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; - $sql.= " d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; - $sql.= " d.date_start as date_start, d.date_end as date_end,"; - $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; - $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; - $sql.= " 0 as payment_id, 0 as payment_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; - $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; - $sql.= " WHERE f.entity = " . $conf->entity; - $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; - else $sql.= " AND f.type IN (0,1,2,3,5)"; - $sql.= " AND f.rowid = d.".$fk_facture; - if ($y && $m) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; - } - else if ($y) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; - } - if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; - if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; - $sql.= " AND (d.product_type = 0"; // Limit to products - $sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service - $sql.= " ORDER BY d.rowid, d.".$fk_facture; - - } - else // Option on delivery for goods (payments) and payments for services - { - // Count on delivery date (use invoice date as delivery is unknown) - $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; - $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; - $sql.= " d.date_start as date_start, d.date_end as date_end,"; - $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; - $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; - $sql.= " 0 as payment_id, 0 as payment_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; - $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; - $sql.= " WHERE f.entity = " . $conf->entity; - $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; - else $sql.= " AND f.type IN (0,1,2,3,5)"; - $sql.= " AND f.rowid = d.".$fk_facture; - if ($y && $m) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; - } - else if ($y) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; - } - if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; - if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; - $sql.= " AND (d.product_type = 0"; // Limit to products - $sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service - $sql.= " ORDER BY d.rowid, d.".$fk_facture; - - } - - if (! $sql) return -1; - - dol_syslog("Tax.lib.php::vat_by_date sql=".$sql); - - $resql = $db->query($sql); - if ($resql) - { - $lt=-1; - $oldrowid=''; - while($assoc = $db->fetch_array($resql)) - { - if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0; - if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0; - if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0; - if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0; - - if ($assoc['rowid'] != $oldrowid) // Si rupture sur d.rowid - { - $oldrowid=$assoc['rowid']; - $list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht']; - $list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat']; - $list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1']; - $list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2']; - } - - $list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx']; - $list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx']; - - $list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc']; - $list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype']; - $list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']); - $list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']); - - $list[$assoc['localtax_tx']]['facid'][] = $assoc['facid']; - $list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum']; - $list[$assoc['localtax_tx']]['type'][] = $assoc['type']; - $list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc']; - $list[$assoc['localtax_tx']]['descr'][] = $assoc['descr']; - - $list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht']; - $list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat']; - $list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1']; - $list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2']; - - $list[$assoc['localtax_tx']]['pid'][] = $assoc['pid']; - $list[$assoc['localtax_tx']]['pref'][] = $assoc['pref']; - $list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype']; - - $list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id']; - $list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount']; - - $lt = $assoc['localtax_tx']; - } - } - else - { - dol_print_error($db); - return -3; - } - - // CAS DES SERVICES - - // Define sql request - $sql=''; - if ($modetax == 1) // Option vat on delivery for goods (payment) and debit invoice for services - { - - // Count on invoice date - $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; - $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; - $sql.= " d.date_start as date_start, d.date_end as date_end,"; - $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; - $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; - $sql.= " 0 as payment_id, 0 as payment_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; - $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; - $sql.= " WHERE f.entity = " . $conf->entity; - $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; - else $sql.= " AND f.type IN (0,1,2,3,5)"; - $sql.= " AND f.rowid = d.".$fk_facture; - if ($y && $m) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; - } - else if ($y) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; - } - if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; - if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; - $sql.= " AND (d.product_type = 1"; // Limit to services - $sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service - $sql.= " ORDER BY d.rowid, d.".$fk_facture; - - } - else // Option vat on delivery for goods (payments) and payments for services - { - - // Count on payments date - $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; - $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; - $sql.= " d.date_start as date_start, d.date_end as date_end,"; - $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; - $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; - $sql.= " pf.".$fk_payment." as payment_id, pf.amount as payment_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; - $sql.= " ".MAIN_DB_PREFIX.$paymentfacturetable." as pf,"; - $sql.= " ".MAIN_DB_PREFIX.$paymenttable." as pa,"; - $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; - $sql.= " WHERE f.entity = " . $conf->entity; - $sql.= " AND f.fk_statut in (1,2)"; // Paid (partially or completely) - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2,5)"; - else $sql.= " AND f.type IN (0,1,2,3,5)"; - $sql.= " AND f.rowid = d.".$fk_facture;; - $sql.= " AND pf.".$fk_facture2." = f.rowid"; - $sql.= " AND pa.rowid = pf.".$fk_payment; - if ($y && $m) - { - $sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; - $sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; - } - else if ($y) - { - $sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,1,false))."'"; - $sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,12,false))."'"; - } - if ($q) $sql.= " AND (date_format(pa.datep,'%m') > ".(($q-1)*3)." AND date_format(pa.datep,'%m') <= ".($q*3).")"; - if ($date_start && $date_end) $sql.= " AND pa.datep >= ".$db->idate($date_start)." AND pa.datep <= ".$db->idate($date_end); - $sql.= " AND (d.product_type = 1"; // Limit to services - $sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service - $sql.= " ORDER BY d.rowid, d.".$fk_facture.", pf.rowid"; - - } - - if (! $sql) - { - dol_syslog("Tax.lib.php::local_by_date no accountancy module enabled".$sql,LOG_ERR); - return -1; - } - - dol_syslog("Tax.lib.php::local_by_date sql=".$sql); - $resql = $db->query($sql); - if ($resql) - { - $lt = -1; - $oldrowid=''; - while($assoc = $db->fetch_array($resql)) - { - if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0; - if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0; - if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0; - if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0; - - if ($assoc['rowid'] != $oldrowid) - { - $oldrowid=$assoc['rowid']; - $list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht']; - $list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat']; - $list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1']; - $list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2']; - } - - $list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx']; - $list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx']; - - $list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc']; - $list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype']; - $list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']); - $list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']); - - $list[$assoc['localtax_tx']]['facid'][] = $assoc['facid']; - $list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum']; - $list[$assoc['localtax_tx']]['type'][] = $assoc['type']; - $list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc']; - $list[$assoc['localtax_tx']]['descr'][] = $assoc['descr']; - - $list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht']; - $list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat']; - $list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1']; - $list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2']; - - $list[$assoc['localtax_tx']]['pid'][] = $assoc['pid']; - $list[$assoc['localtax_tx']]['pref'][] = $assoc['pref']; - $list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype']; - - $list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id']; - $list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount']; - - $lt = $assoc['localtax_tx']; - } - } - else - { - dol_print_error($db); - return -3; - } - - return $list; - - -} - - /** * Gets VAT to collect for the given year (and given quarter or month) * The function gets the VAT in split results, as the VAT declaration asks From 9f4ccfab95760b425951c194241aeba71c9c27a1 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 15 Apr 2016 15:54:51 +0200 Subject: [PATCH 10/50] FIX #3815 With higher quality --- htdocs/compta/localtax/quadri_detail.php | 15 +- htdocs/core/lib/tax.lib.php | 365 ----------------------- 2 files changed, 7 insertions(+), 373 deletions(-) diff --git a/htdocs/compta/localtax/quadri_detail.php b/htdocs/compta/localtax/quadri_detail.php index 73cfdff0659..b0a103ac514 100644 --- a/htdocs/compta/localtax/quadri_detail.php +++ b/htdocs/compta/localtax/quadri_detail.php @@ -196,8 +196,8 @@ $total = 0; $i=0; // Load arrays of datas -$x_coll= local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell', $local); -$x_paye = local_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy', $local); +$x_coll = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'sell'); +$x_paye = vat_by_date($db, 0, 0, $date_start, $date_end, $modetax, 'buy'); echo '
'; @@ -220,9 +220,9 @@ else foreach(array_keys($x_coll) as $my_coll_rate) { $x_both[$my_coll_rate]['coll']['totalht'] = $x_coll[$my_coll_rate]['totalht']; - $x_both[$my_coll_rate]['coll']['vat'] = $x_coll[$my_coll_rate]['vat']; + $x_both[$my_coll_rate]['coll']['localtax'.$local] = $x_coll[$my_coll_rate]['localtax'.$local]; $x_both[$my_coll_rate]['paye']['totalht'] = 0; - $x_both[$my_coll_rate]['paye']['vat'] = 0; + $x_both[$my_coll_rate]['paye']['localtax'.$local] = 0; $x_both[$my_coll_rate]['coll']['links'] = ''; $x_both[$my_coll_rate]['coll']['detail'] = array(); foreach($x_coll[$my_coll_rate]['facid'] as $id=>$dummy) @@ -399,7 +399,7 @@ else print $langs->trans("NotUsedForGoods"); } else { - print $fields['payment_amount']; + print price($fields['payment_amount']); if (isset($fields['payment_amount'])) print ' ('.round($ratiopaymentinvoice*100,2).'%)'; } print ''; @@ -559,7 +559,7 @@ else } else { - print $fields['payment_amount']; + print price($fields['payment_amount']); if (isset($fields['payment_amount'])) print ' ('.round($ratiopaymentinvoice*100,2).'%)'; } print ''; @@ -637,6 +637,5 @@ else $i++; } -$db->close(); - llxFooter(); +$db->close(); diff --git a/htdocs/core/lib/tax.lib.php b/htdocs/core/lib/tax.lib.php index ae217004bbf..b4ae09c6d7d 100644 --- a/htdocs/core/lib/tax.lib.php +++ b/htdocs/core/lib/tax.lib.php @@ -205,371 +205,6 @@ function vat_by_thirdparty($db, $y, $date_start, $date_end, $modetax, $direction } } -/** - * Gets LocalTaxes to collect for the given year (and given quarter or month) - * The function gets the LocalTaxes in split results, as the LocalTaxes declaration asks - * to report the amounts for different LocalTaxes rates as different lines. - * - * @param DoliDB $db Database handler object - * @param int $y Year - * @param int $q Quarter - * @param string $date_start Start date - * @param string $date_end End date - * @param int $modetax 0 or 1 (option on debit) - * @param int $direction 'sell' (customer invoice) or 'buy' (supplier invoices) - * @param int $local 1 for LocalTax1, 2 for LocalTax2 - * @param int $m Month - * @return array List of quarters with LocalTaxes - */ -function local_by_date($db, $y, $q, $date_start, $date_end, $modetax, $direction, $local, $m=0) -{ - global $conf; - - $list=array(); - - if ($direction == 'sell') - { - $invoicetable='facture'; - $invoicedettable='facturedet'; - $fk_facture='fk_facture'; - $fk_facture2='fk_facture'; - $fk_payment='fk_paiement'; - $total_tva='total_tva'; - $total_localtax1='total_localtax1'; - $total_localtax2='total_localtax2'; - $paymenttable='paiement'; - $paymentfacturetable='paiement_facture'; - $invoicefieldref='facnumber'; - $localtax_tx=$local==1?'localtax1_tx':'localtax2_tx'; - } - if ($direction == 'buy') - { - $invoicetable='facture_fourn'; - $invoicedettable='facture_fourn_det'; - $fk_facture='fk_facture_fourn'; - $fk_facture2='fk_facturefourn'; - $fk_payment='fk_paiementfourn'; - $total_tva='tva'; - $total_localtax1='total_localtax1'; - $total_localtax2='total_localtax2'; - $paymenttable='paiementfourn'; - $paymentfacturetable='paiementfourn_facturefourn'; - $invoicefieldref='ref'; - $localtax_tx=$local==1?'localtax1_tx':'localtax2_tx'; - } - - // BIENS - - // Define sql request - $sql=''; - if ($modetax == 1) // Option on delivery for goods (payment) and debit invoice for services - { - if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) - { - $sql='TODO'; - } - if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) - { - // Count on delivery date (use invoice date as delivery is unknown) - $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx,"; - $sql.= " d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; - $sql.= " d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; - $sql.= " d.date_start as date_start, d.date_end as date_end,"; - $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; - $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; - $sql.= " 0 as payment_id, 0 as payment_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; - $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; - $sql.= " WHERE f.entity = " . $conf->entity; - $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)"; - else $sql.= " AND f.type IN (0,1,2,3)"; - $sql.= " AND f.rowid = d.".$fk_facture; - if ($y && $m) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; - } - else if ($y) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; - } - if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; - if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; - $sql.= " AND (d.product_type = 0"; // Limit to products - $sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service - $sql.= " ORDER BY d.rowid, d.".$fk_facture; - } - } - else // Option vat on delivery for goods (payments) and payments for services - { - if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) - { - $sql='TODO'; - } - if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) - { - // Count on delivery date (use invoice date as delivery is unknown) - $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; - $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; - $sql.= " d.date_start as date_start, d.date_end as date_end,"; - $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; - $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; - $sql.= " 0 as payment_id, 0 as payment_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; - $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; - $sql.= " WHERE f.entity = " . $conf->entity; - $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)"; - else $sql.= " AND f.type IN (0,1,2,3)"; - $sql.= " AND f.rowid = d.".$fk_facture; - if ($y && $m) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; - } - else if ($y) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; - } - if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; - if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; - $sql.= " AND (d.product_type = 0"; // Limit to products - $sql.= " AND d.date_start is null AND d.date_end IS NULL)"; // enhance detection of service - $sql.= " ORDER BY d.rowid, d.".$fk_facture; - } - } - - if (! $sql) return -1; - if ($sql == 'TODO') return -2; - if ($sql != 'TODO') - { - dol_syslog("Tax.lib.php::vat_by_date sql=".$sql); - - $resql = $db->query($sql); - if ($resql) - { - $lt=-1; - $oldrowid=''; - while($assoc = $db->fetch_array($resql)) - { - if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0; - if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0; - if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0; - if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0; - - if ($assoc['rowid'] != $oldrowid) - { - $oldrowid=$assoc['rowid']; - $list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht']; - $list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat']; - $list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1']; - $list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2']; - } - - $list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx']; - $list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx']; - - $list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc']; - $list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype']; - $list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']); - $list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']); - - $list[$assoc['localtax_tx']]['facid'][] = $assoc['facid']; - $list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum']; - $list[$assoc['localtax_tx']]['type'][] = $assoc['type']; - $list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc']; - $list[$assoc['localtax_tx']]['descr'][] = $assoc['descr']; - - $list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht']; - $list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat']; - $list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1']; - $list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2']; - - $list[$assoc['localtax_tx']]['pid'][] = $assoc['pid']; - $list[$assoc['localtax_tx']]['pref'][] = $assoc['pref']; - $list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype']; - - $list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id']; - $list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount']; - - $lt = $assoc['localtax_tx']; - } - } - else - { - dol_print_error($db); - return -3; - } - } - - - //SERVICES - - // Define sql request - $sql=''; - if ($modetax == 1) // Option on delivery for goods (payment) and debit invoice for services - { - if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) - { - $sql='TODO'; - } - if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) - { - // Count on invoice date - $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; - $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; - $sql.= " d.date_start as date_start, d.date_end as date_end,"; - $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; - $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; - $sql.= " 0 as payment_id, 0 as payment_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; - $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d" ; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; - $sql.= " WHERE f.entity = " . $conf->entity; - $sql.= " AND f.fk_statut in (1,2)"; // Validated or paid (partially or completely) - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)"; - else $sql.= " AND f.type IN (0,1,2,3)"; - $sql.= " AND f.rowid = d.".$fk_facture; - if ($y && $m) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; - } - else if ($y) - { - $sql.= " AND f.datef >= '".$db->idate(dol_get_first_day($y,1,false))."'"; - $sql.= " AND f.datef <= '".$db->idate(dol_get_last_day($y,12,false))."'"; - } - if ($q) $sql.= " AND (date_format(f.datef,'%m') > ".(($q-1)*3)." AND date_format(f.datef,'%m') <= ".($q*3).")"; - if ($date_start && $date_end) $sql.= " AND f.datef >= '".$db->idate($date_start)."' AND f.datef <= '".$db->idate($date_end)."'"; - $sql.= " AND (d.product_type = 1"; // Limit to services - $sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service - $sql.= " ORDER BY d.rowid, d.".$fk_facture; - } - } - else // Option on delivery for goods (payments) and payments for services - { - if (! empty($conf->global->MAIN_MODULE_ACCOUNTING)) - { - - $sql='TODO'; - } - if (! empty($conf->global->MAIN_MODULE_COMPTABILITE)) - { - // Count on payments date - $sql = "SELECT d.rowid, d.product_type as dtype, d.".$fk_facture." as facid, d.tva_tx as rate, d.".$localtax_tx." as localtax_tx, d.total_ht as total_ht, d.total_ttc as total_ttc, d.".$total_tva." as total_vat, d.description as descr,"; - $sql .=" d.".$total_localtax1." as total_localtax1, d.".$total_localtax2." as total_localtax2, "; - $sql.= " d.date_start as date_start, d.date_end as date_end,"; - $sql.= " f.".$invoicefieldref." as facnum, f.type, f.total_ttc as ftotal_ttc,"; - $sql.= " p.rowid as pid, p.ref as pref, p.fk_product_type as ptype,"; - $sql.= " pf.".$fk_payment." as payment_id, pf.amount as payment_amount"; - $sql.= " FROM ".MAIN_DB_PREFIX.$invoicetable." as f,"; - $sql.= " ".MAIN_DB_PREFIX.$paymentfacturetable." as pf,"; - $sql.= " ".MAIN_DB_PREFIX.$paymenttable." as pa,"; - $sql.= " ".MAIN_DB_PREFIX.$invoicedettable." as d"; - $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p on d.fk_product = p.rowid"; - $sql.= " WHERE f.entity = " . $conf->entity; - $sql.= " AND f.fk_statut in (1,2)"; // Paid (partially or completely) - if (! empty($conf->global->FACTURE_DEPOSITS_ARE_JUST_PAYMENTS)) $sql.= " AND f.type IN (0,1,2)"; - else $sql.= " AND f.type IN (0,1,2,3)"; - $sql.= " AND f.rowid = d.".$fk_facture;; - $sql.= " AND pf.".$fk_facture2." = f.rowid"; - $sql.= " AND pa.rowid = pf.".$fk_payment; - if ($y && $m) - { - $sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,$m,false))."'"; - $sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,$m,false))."'"; - } - else if ($y) - { - $sql.= " AND pa.datep >= '".$db->idate(dol_get_first_day($y,1,false))."'"; - $sql.= " AND pa.datep <= '".$db->idate(dol_get_last_day($y,12,false))."'"; - } - if ($q) $sql.= " AND (date_format(pa.datep,'%m') > ".(($q-1)*3)." AND date_format(pa.datep,'%m') <= ".($q*3).")"; - if ($date_start && $date_end) $sql.= " AND pa.datep >= ".$db->idate($date_start)." AND pa.datep <= ".$db->idate($date_end); - $sql.= " AND (d.product_type = 1"; // Limit to services - $sql.= " OR d.date_start is NOT null OR d.date_end IS NOT NULL)"; // enhance detection of service - $sql.= " ORDER BY d.rowid, d.".$fk_facture.", pf.rowid"; - } - } - - if (! $sql) - { - dol_syslog("Tax.lib.php::vat_by_date no accountancy module enabled".$sql,LOG_ERR); - return -1; // -1 = Not accountancy module enabled - } - if ($sql == 'TODO') return -2; // -2 = Feature not yet available - if ($sql != 'TODO') - { - dol_syslog("Tax.lib.php::vat_by_date sql=".$sql); - $resql = $db->query($sql); - if ($resql) - { - $lt = -1; - $oldrowid=''; - while($assoc = $db->fetch_array($resql)) - { - if (! isset($list[$assoc['localtax_tx']]['totalht'])) $list[$assoc['localtax_tx']]['totalht']=0; - if (! isset($list[$assoc['localtax_tx']]['vat'])) $list[$assoc['localtax_tx']]['vat']=0; - if (! isset($list[$assoc['localtax_tx']]['localtax1'])) $list[$assoc['localtax_tx']]['localtax1']=0; - if (! isset($list[$assoc['localtax_tx']]['localtax2'])) $list[$assoc['localtax_tx']]['localtax2']=0; - - if ($assoc['rowid'] != $oldrowid) - { - $oldrowid=$assoc['rowid']; - $list[$assoc['localtax_tx']]['totalht'] += $assoc['total_ht']; - $list[$assoc['localtax_tx']]['vat'] += $assoc['total_vat']; - $list[$assoc['localtax_tx']]['localtax1'] += $assoc['total_localtax1']; - $list[$assoc['localtax_tx']]['localtax2'] += $assoc['total_localtax2']; - } - - $list[$assoc['localtax_tx']]['localtax1_tx'] = $assoc['localtax1_tx']; - $list[$assoc['localtax_tx']]['localtax2_tx'] = $assoc['localtax2_tx']; - - $list[$assoc['localtax_tx']]['dtotal_ttc'][] = $assoc['total_ttc']; - $list[$assoc['localtax_tx']]['dtype'][] = $assoc['dtype']; - $list[$assoc['localtax_tx']]['ddate_start'][] = $db->jdate($assoc['date_start']); - $list[$assoc['localtax_tx']]['ddate_end'][] = $db->jdate($assoc['date_end']); - - $list[$assoc['localtax_tx']]['facid'][] = $assoc['facid']; - $list[$assoc['localtax_tx']]['facnum'][] = $assoc['facnum']; - $list[$assoc['localtax_tx']]['type'][] = $assoc['type']; - $list[$assoc['localtax_tx']]['ftotal_ttc'][] = $assoc['ftotal_ttc']; - $list[$assoc['localtax_tx']]['descr'][] = $assoc['descr']; - - $list[$assoc['localtax_tx']]['totalht_list'][] = $assoc['total_ht']; - $list[$assoc['localtax_tx']]['vat_list'][] = $assoc['total_vat']; - $list[$assoc['localtax_tx']]['localtax1_list'][] = $assoc['total_localtax1']; - $list[$assoc['localtax_tx']]['localtax2_list'][] = $assoc['total_localtax2']; - - $list[$assoc['localtax_tx']]['pid'][] = $assoc['pid']; - $list[$assoc['localtax_tx']]['pref'][] = $assoc['pref']; - $list[$assoc['localtax_tx']]['ptype'][] = $assoc['ptype']; - - $list[$assoc['localtax_tx']]['payment_id'][] = $assoc['payment_id']; - $list[$assoc['localtax_tx']]['payment_amount'][] = $assoc['payment_amount']; - - $lt = $assoc['localtax_tx']; - } - } - else - { - dol_print_error($db); - return -3; - } - } - - return $list; - - -} - - /** * Gets VAT to collect for the given year (and given quarter or month) * The function gets the VAT in split results, as the VAT declaration asks From ecbf5996c1b315cd1f0b63f11972e2094f2317b1 Mon Sep 17 00:00:00 2001 From: Juanjo Menent Date: Fri, 15 Apr 2016 17:20:37 +0200 Subject: [PATCH 11/50] FIX #4961 --- htdocs/compta/prelevement/card.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/prelevement/card.php b/htdocs/compta/prelevement/card.php index 9dd841e0add..58e7840a7ec 100644 --- a/htdocs/compta/prelevement/card.php +++ b/htdocs/compta/prelevement/card.php @@ -1,7 +1,7 @@ * Copyright (C) 2005-2010 Laurent Destailleur - * Copyright (C) 2010-2012 Juanjo Menent + * Copyright (C) 2010-2016 Juanjo Menent * * 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 @@ -298,7 +298,7 @@ if ($id > 0) $num = $db->num_rows($result); $i = 0; - $urladd = "&id=".$prev_id; + $urladd = "&id=".$id; print_barre_liste("", $page, $_SERVER["PHP_SELF"], $urladd, $sortfield, $sortorder, '', $num); print"\n\n"; From 567dc1734e2d9374da66fd911c2e811d50ae2225 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Sat, 16 Apr 2016 18:15:03 +0200 Subject: [PATCH 12/50] Add Swift Mailer to send mails --- COPYRIGHT | 3 + htdocs/admin/mails.php | 31 +- htdocs/core/class/CMailFile.class.php | 155 ++- htdocs/core/class/smtps.class.php | 5 +- .../swiftmailer/lib/classes/Swift.php | 80 ++ .../lib/classes/Swift/Attachment.php | 71 ++ .../AbstractFilterableInputStream.php | 181 +++ .../Swift/ByteStream/ArrayByteStream.php | 182 +++ .../Swift/ByteStream/FileByteStream.php | 229 ++++ .../ByteStream/TemporaryFileByteStream.php | 42 + .../lib/classes/Swift/CharacterReader.php | 67 ++ .../GenericFixedWidthReader.php | 97 ++ .../Swift/CharacterReader/UsAsciiReader.php | 84 ++ .../Swift/CharacterReader/Utf8Reader.php | 176 +++ .../classes/Swift/CharacterReaderFactory.php | 26 + .../SimpleCharacterReaderFactory.php | 124 ++ .../lib/classes/Swift/CharacterStream.php | 89 ++ .../CharacterStream/ArrayCharacterStream.php | 293 +++++ .../CharacterStream/NgCharacterStream.php | 267 +++++ .../lib/classes/Swift/ConfigurableSpool.php | 63 ++ .../lib/classes/Swift/DependencyContainer.php | 373 ++++++ .../lib/classes/Swift/DependencyException.php | 27 + .../lib/classes/Swift/EmbeddedFile.php | 69 ++ .../swiftmailer/lib/classes/Swift/Encoder.php | 28 + .../classes/Swift/Encoder/Base64Encoder.php | 58 + .../lib/classes/Swift/Encoder/QpEncoder.php | 300 +++++ .../classes/Swift/Encoder/Rfc2231Encoder.php | 92 ++ .../lib/classes/Swift/Encoding.php | 64 ++ .../lib/classes/Swift/Events/CommandEvent.php | 65 ++ .../classes/Swift/Events/CommandListener.php | 24 + .../lib/classes/Swift/Events/Event.php | 38 + .../classes/Swift/Events/EventDispatcher.php | 83 ++ .../classes/Swift/Events/EventListener.php | 18 + .../lib/classes/Swift/Events/EventObject.php | 63 ++ .../classes/Swift/Events/ResponseEvent.php | 65 ++ .../classes/Swift/Events/ResponseListener.php | 24 + .../lib/classes/Swift/Events/SendEvent.php | 129 +++ .../lib/classes/Swift/Events/SendListener.php | 31 + .../Swift/Events/SimpleEventDispatcher.php | 156 +++ .../Swift/Events/TransportChangeEvent.php | 27 + .../Swift/Events/TransportChangeListener.php | 45 + .../Swift/Events/TransportExceptionEvent.php | 46 + .../Events/TransportExceptionListener.php | 24 + .../lib/classes/Swift/FailoverTransport.php | 45 + .../lib/classes/Swift/FileSpool.php | 208 ++++ .../lib/classes/Swift/FileStream.php | 24 + .../lib/classes/Swift/Filterable.php | 32 + .../swiftmailer/lib/classes/Swift/Image.php | 61 + .../lib/classes/Swift/InputByteStream.php | 75 ++ .../lib/classes/Swift/IoException.php | 29 + .../lib/classes/Swift/KeyCache.php | 105 ++ .../classes/Swift/KeyCache/ArrayKeyCache.php | 206 ++++ .../classes/Swift/KeyCache/DiskKeyCache.php | 321 ++++++ .../Swift/KeyCache/KeyCacheInputStream.php | 51 + .../classes/Swift/KeyCache/NullKeyCache.php | 115 ++ .../KeyCache/SimpleKeyCacheInputStream.php | 127 +++ .../classes/Swift/LoadBalancedTransport.php | 45 + .../lib/classes/Swift/MailTransport.php | 45 + .../swiftmailer/lib/classes/Swift/Mailer.php | 114 ++ .../Swift/Mailer/ArrayRecipientIterator.php | 55 + .../Swift/Mailer/RecipientIterator.php | 32 + .../lib/classes/Swift/MemorySpool.php | 84 ++ .../swiftmailer/lib/classes/Swift/Message.php | 291 +++++ .../lib/classes/Swift/Mime/Attachment.php | 149 +++ .../classes/Swift/Mime/CharsetObserver.php | 24 + .../lib/classes/Swift/Mime/ContentEncoder.php | 34 + .../ContentEncoder/Base64ContentEncoder.php | 104 ++ .../ContentEncoder/NativeQpContentEncoder.php | 123 ++ .../ContentEncoder/PlainContentEncoder.php | 162 +++ .../Mime/ContentEncoder/QpContentEncoder.php | 134 +++ .../ContentEncoder/QpContentEncoderProxy.php | 98 ++ .../Mime/ContentEncoder/RawContentEncoder.php | 64 ++ .../lib/classes/Swift/Mime/EmbeddedFile.php | 45 + .../classes/Swift/Mime/EncodingObserver.php | 24 + .../lib/classes/Swift/Mime/Grammar.php | 176 +++ .../lib/classes/Swift/Mime/Header.php | 93 ++ .../lib/classes/Swift/Mime/HeaderEncoder.php | 24 + .../HeaderEncoder/Base64HeaderEncoder.php | 55 + .../Mime/HeaderEncoder/QpHeaderEncoder.php | 65 ++ .../lib/classes/Swift/Mime/HeaderFactory.php | 78 ++ .../lib/classes/Swift/Mime/HeaderSet.php | 169 +++ .../Swift/Mime/Headers/AbstractHeader.php | 503 ++++++++ .../classes/Swift/Mime/Headers/DateHeader.php | 125 ++ .../Mime/Headers/IdentificationHeader.php | 180 +++ .../Swift/Mime/Headers/MailboxHeader.php | 354 ++++++ .../Swift/Mime/Headers/OpenDKIMHeader.php | 137 +++ .../Mime/Headers/ParameterizedHeader.php | 258 +++++ .../classes/Swift/Mime/Headers/PathHeader.php | 143 +++ .../Swift/Mime/Headers/UnstructuredHeader.php | 112 ++ .../lib/classes/Swift/Mime/Message.php | 223 ++++ .../lib/classes/Swift/Mime/MimeEntity.php | 117 ++ .../lib/classes/Swift/Mime/MimePart.php | 212 ++++ .../Swift/Mime/ParameterizedHeader.php | 34 + .../Swift/Mime/SimpleHeaderFactory.php | 193 ++++ .../classes/Swift/Mime/SimpleHeaderSet.php | 397 +++++++ .../lib/classes/Swift/Mime/SimpleMessage.php | 649 +++++++++++ .../classes/Swift/Mime/SimpleMimeEntity.php | 843 ++++++++++++++ .../lib/classes/Swift/MimePart.php | 59 + .../lib/classes/Swift/NullTransport.php | 39 + .../lib/classes/Swift/OutputByteStream.php | 46 + .../classes/Swift/Plugins/AntiFloodPlugin.php | 141 +++ .../Swift/Plugins/BandwidthMonitorPlugin.php | 164 +++ .../Swift/Plugins/Decorator/Replacements.php | 31 + .../classes/Swift/Plugins/DecoratorPlugin.php | 204 ++++ .../Swift/Plugins/ImpersonatePlugin.php | 69 ++ .../lib/classes/Swift/Plugins/Logger.php | 36 + .../classes/Swift/Plugins/LoggerPlugin.php | 142 +++ .../Swift/Plugins/Loggers/ArrayLogger.php | 72 ++ .../Swift/Plugins/Loggers/EchoLogger.php | 58 + .../classes/Swift/Plugins/MessageLogger.php | 74 ++ .../Swift/Plugins/Pop/Pop3Connection.php | 31 + .../Swift/Plugins/Pop/Pop3Exception.php | 27 + .../Swift/Plugins/PopBeforeSmtpPlugin.php | 273 +++++ .../Swift/Plugins/RedirectingPlugin.php | 213 ++++ .../lib/classes/Swift/Plugins/Reporter.php | 32 + .../classes/Swift/Plugins/ReporterPlugin.php | 61 + .../Swift/Plugins/Reporters/HitReporter.php | 59 + .../Swift/Plugins/Reporters/HtmlReporter.php | 39 + .../lib/classes/Swift/Plugins/Sleeper.php | 24 + .../classes/Swift/Plugins/ThrottlerPlugin.php | 200 ++++ .../lib/classes/Swift/Plugins/Timer.php | 24 + .../lib/classes/Swift/Preferences.php | 103 ++ .../Swift/ReplacementFilterFactory.php | 27 + .../classes/Swift/RfcComplianceException.php | 27 + .../lib/classes/Swift/SendmailTransport.php | 45 + .../lib/classes/Swift/SignedMessage.php | 23 + .../swiftmailer/lib/classes/Swift/Signer.php | 20 + .../lib/classes/Swift/Signers/BodySigner.php | 33 + .../lib/classes/Swift/Signers/DKIMSigner.php | 698 ++++++++++++ .../classes/Swift/Signers/DomainKeySigner.php | 525 +++++++++ .../classes/Swift/Signers/HeaderSigner.php | 65 ++ .../classes/Swift/Signers/OpenDKIMSigner.php | 190 ++++ .../lib/classes/Swift/Signers/SMimeSigner.php | 436 +++++++ .../lib/classes/Swift/SmtpTransport.php | 58 + .../swiftmailer/lib/classes/Swift/Spool.php | 53 + .../lib/classes/Swift/SpoolTransport.php | 47 + .../lib/classes/Swift/StreamFilter.php | 35 + .../ByteArrayReplacementFilter.php | 169 +++ .../StreamFilters/StringReplacementFilter.php | 66 ++ .../StringReplacementFilterFactory.php | 45 + .../lib/classes/Swift/SwiftException.php | 29 + .../lib/classes/Swift/Transport.php | 54 + .../Swift/Transport/AbstractSmtpTransport.php | 490 ++++++++ .../Esmtp/Auth/CramMd5Authenticator.php | 81 ++ .../Esmtp/Auth/LoginAuthenticator.php | 51 + .../Esmtp/Auth/NTLMAuthenticator.php | 726 ++++++++++++ .../Esmtp/Auth/PlainAuthenticator.php | 50 + .../Esmtp/Auth/XOAuth2Authenticator.php | 70 ++ .../Swift/Transport/Esmtp/AuthHandler.php | 263 +++++ .../Swift/Transport/Esmtp/Authenticator.php | 35 + .../classes/Swift/Transport/EsmtpHandler.php | 86 ++ .../Swift/Transport/EsmtpTransport.php | 412 +++++++ .../Swift/Transport/FailoverTransport.php | 82 ++ .../lib/classes/Swift/Transport/IoBuffer.php | 67 ++ .../Swift/Transport/LoadBalancedTransport.php | 178 +++ .../classes/Swift/Transport/MailInvoker.php | 32 + .../classes/Swift/Transport/MailTransport.php | 239 ++++ .../classes/Swift/Transport/NullTransport.php | 93 ++ .../Swift/Transport/SendmailTransport.php | 160 +++ .../Swift/Transport/SimpleMailInvoker.php | 39 + .../lib/classes/Swift/Transport/SmtpAgent.php | 36 + .../Swift/Transport/SpoolTransport.php | 117 ++ .../classes/Swift/Transport/StreamBuffer.php | 325 ++++++ .../lib/classes/Swift/TransportException.php | 29 + .../lib/classes/Swift/Validate.php | 43 + .../lib/dependency_maps/cache_deps.php | 23 + .../lib/dependency_maps/message_deps.php | 9 + .../lib/dependency_maps/mime_deps.php | 123 ++ .../lib/dependency_maps/transport_deps.php | 76 ++ .../includes/swiftmailer/lib/mime_types.php | 1007 +++++++++++++++++ .../includes/swiftmailer/lib/preferences.php | 25 + .../includes/swiftmailer/lib/swift_init.php | 28 + .../swiftmailer/lib/swift_required.php | 30 + .../swiftmailer/lib/swift_required_pear.php | 30 + .../lib/swiftmailer_generate_mimes_config.php | 193 ++++ 175 files changed, 22383 insertions(+), 11 deletions(-) create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Attachment.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/ConfigurableSpool.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/DependencyException.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/EmbeddedFile.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Encoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Encoding.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/Event.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventListener.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/EventObject.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendEvent.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/FailoverTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/FileStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Filterable.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Image.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/IoException.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/MailTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Message.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Grammar.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Message.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimePart.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/OutputByteStream.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Logger.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Timer.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Preferences.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/RfcComplianceException.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/SendmailTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/SignedMessage.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Spool.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilter.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/MailTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SpoolTransport.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php create mode 100644 htdocs/includes/swiftmailer/lib/classes/Swift/Validate.php create mode 100644 htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php create mode 100644 htdocs/includes/swiftmailer/lib/dependency_maps/message_deps.php create mode 100644 htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php create mode 100644 htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php create mode 100644 htdocs/includes/swiftmailer/lib/mime_types.php create mode 100644 htdocs/includes/swiftmailer/lib/preferences.php create mode 100644 htdocs/includes/swiftmailer/lib/swift_init.php create mode 100644 htdocs/includes/swiftmailer/lib/swift_required.php create mode 100644 htdocs/includes/swiftmailer/lib/swift_required_pear.php create mode 100755 htdocs/includes/swiftmailer/lib/swiftmailer_generate_mimes_config.php diff --git a/COPYRIGHT b/COPYRIGHT index 406b936becc..99d5a189f99 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -30,6 +30,7 @@ PHPPrintIPP 1.3 GPL-2+ Yes Restler 3.0 LGPL-3+ Yes Library to develop REST Web services TCPDF 6.2.12 LGPL-3+ Yes PDF generation TCPDI 1.0.0 LGPL-3+ / Apache 2.0 Yes FPDI replacement +Swift Mailer 5.4.2-DEV MIT license Yes Comprehensive mailing tools for PHP JS libraries: jQuery 1.11.3 MIT License Yes JS library @@ -61,6 +62,8 @@ http://www.gnu.org/licenses/licenses.en.html Copyright --------- +Copyright (C) 2016 + Copyright (C) 2015 - Laurent Destailleur - Marcos García diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index 52324dc1678..deaff88f50f 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -259,6 +259,7 @@ $listofmethods=array(); $listofmethods['mail']='PHP mail function'; //$listofmethods['simplemail']='Simplemail class'; $listofmethods['smtps']='SMTP/SMTPS socket library'; +$listofmethods['swiftmailer']='Swift Mailer socket library'; if ($action == 'edit') @@ -313,6 +314,20 @@ if ($action == 'edit') jQuery("#smtp_server_mess").hide(); jQuery("#smtp_port_mess").hide(); } + if (jQuery("#MAIN_MAIL_SENDMODE").val()==\'swiftmailer\') + { + jQuery(".drag").show(); + jQuery("#MAIN_MAIL_EMAIL_TLS").val('.$conf->global->MAIN_MAIL_EMAIL_TLS.'); + jQuery("#MAIN_MAIL_EMAIL_TLS").removeAttr("disabled"); + jQuery("#MAIN_MAIL_EMAIL_STARTTLS").val('.$conf->global->MAIN_MAIL_EMAIL_STARTTLS.'); + jQuery("#MAIN_MAIL_EMAIL_STARTTLS").removeAttr("disabled"); + jQuery("#MAIN_MAIL_SMTP_SERVER").removeAttr("disabled"); + jQuery("#MAIN_MAIL_SMTP_PORT").removeAttr("disabled"); + jQuery("#MAIN_MAIL_SMTP_SERVER").show(); + jQuery("#MAIN_MAIL_SMTP_PORT").show(); + jQuery("#smtp_server_mess").hide(); + jQuery("#smtp_port_mess").hide(); + } } initfields(); jQuery("#MAIN_MAIL_SENDMODE").change(function() { @@ -436,7 +451,7 @@ if ($action == 'edit') print ''; // ID - if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'smtps')) + if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smmtps', 'swiftmailer')))) { $var=!$var; $mainstmpid=(! empty($conf->global->MAIN_MAIL_SMTPS_ID)?$conf->global->MAIN_MAIL_SMTPS_ID:''); @@ -456,7 +471,7 @@ if ($action == 'edit') } // PW - if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'smtps')) + if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { $var=!$var; $mainsmtppw=(! empty($conf->global->MAIN_MAIL_SMTPS_PW)?$conf->global->MAIN_MAIL_SMTPS_PW:''); @@ -478,7 +493,7 @@ if ($action == 'edit') // TLS $var=!$var; print ''; } // SMTPS PW $var=!$var; - if (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'smtps') + if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) { print ''; } @@ -596,7 +611,7 @@ else // TLS $var=!$var; print ''; // ID - if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smmtps', 'swiftmailer')))) + if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { $var=!$var; $mainstmpid=(! empty($conf->global->MAIN_MAIL_SMTPS_ID)?$conf->global->MAIN_MAIL_SMTPS_ID:''); From 79f408feebde0f24599c9a9e9ff24acae73f199d Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Wed, 20 Apr 2016 17:17:03 +0200 Subject: [PATCH 21/50] FIX : When cloning an order the order result from clone must be now --- htdocs/commande/class/commande.class.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/htdocs/commande/class/commande.class.php b/htdocs/commande/class/commande.class.php index f184e6f6358..af73be2330d 100644 --- a/htdocs/commande/class/commande.class.php +++ b/htdocs/commande/class/commande.class.php @@ -985,6 +985,7 @@ class Commande extends CommonOrder $this->user_author_id = $user->id; $this->user_valid = ''; $this->date = dol_now(); + $this->date_commande = dol_now(); $this->date_creation = ''; $this->date_validation = ''; $this->ref_client = ''; @@ -1253,7 +1254,7 @@ class Commande extends CommonOrder $localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty,$mysoc); $txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate. - + $tabprice = calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $product_type, $mysoc, $localtaxes_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; @@ -1386,7 +1387,7 @@ class Commande extends CommonOrder if (empty($tva_tx)) $tva_npr=0; $localtax1_tx=get_localtax($tva_tx,1,$this->client,$mysoc,$tva_npr); $localtax2_tx=get_localtax($tva_tx,2,$this->client,$mysoc,$tva_npr); - + // multiprix if($conf->global->PRODUIT_MULTIPRICES && $this->client->price_level) $price = $prod->multiprices[$this->client->price_level]; @@ -2481,7 +2482,7 @@ class Commande extends CommonOrder $localtaxes_type=getLocalTaxesFromRate($txtva,0,$this->thirdparty, $mysoc); $txtva = preg_replace('/\s*\(.*\)/','',$txtva); // Remove code into vatrate. - + $tabprice=calcul_price_total($qty, $pu, $remise_percent, $txtva, $txlocaltax1, $txlocaltax2, 0, $price_base_type, $info_bits, $type, $mysoc, $localtaxes_type); $total_ht = $tabprice[0]; $total_tva = $tabprice[1]; @@ -2918,7 +2919,7 @@ class Commande extends CommonOrder function LibStatut($statut,$billed,$mode,$donotshowbilled=0) { global $langs, $conf; - + $billedtext = ''; if (empty($donotshowbilled)) $billedtext .= ($billed?' - '.$langs->trans("Billed"):''); From e1d55d280eab94778ffe3092f2c57a829a01d42a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Wed, 20 Apr 2016 22:29:27 +0200 Subject: [PATCH 22/50] Update printgcp.modules.php --- .../modules/printing/printgcp.modules.php | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/htdocs/core/modules/printing/printgcp.modules.php b/htdocs/core/modules/printing/printgcp.modules.php index 5177e108f40..610df641deb 100644 --- a/htdocs/core/modules/printing/printgcp.modules.php +++ b/htdocs/core/modules/printing/printgcp.modules.php @@ -65,52 +65,52 @@ class printing_printgcp extends PrintingDriver $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current - $this->db = $db; - $this->google_id = $conf->global->OAUTH_GOOGLE_ID; - $this->google_secret = $conf->global->OAUTH_GOOGLE_SECRET; - // Token storage - $storage = new DoliStorage($this->db, $this->conf); - //$storage->clearToken('Google'); - // Setup the credentials for the requests - $credentials = new Credentials( - $this->google_id, - $this->google_secret, - $urlwithroot.'/core/modules/oauth/google_oauthcallback.php' - ); - $access = ($storage->hasAccessToken('Google')?'HasAccessToken':'NoAccessToken'); - $serviceFactory = new \OAuth\ServiceFactory(); - $apiService = $serviceFactory->createService('Google', $credentials, $storage, array()); - $token_ok=true; - try { - $token = $storage->retrieveAccessToken('Google'); - } catch (Exception $e) { - $this->errors[] = $e->getMessage(); - $token_ok = false; - } - //var_dump($this->errors);exit; - - $expire = false; - // Is token expired or will token expire in the next 30 seconds - if ($token_ok) { - $expire = ($token->getEndOfLife() !== -9002 && $token->getEndOfLife() !== -9001 && time() > ($token->getEndOfLife() - 30)); - } - - // Token expired so we refresh it - if ($token_ok && $expire) { - try { - // il faut sauvegarder le refresh token car google ne le donne qu'une seule fois - $refreshtoken = $token->getRefreshToken(); - $token = $apiService->refreshAccessToken($token); - $token->setRefreshToken($refreshtoken); - $storage->storeAccessToken('Google', $token); - } catch (Exception $e) { - $this->errors[] = $e->getMessage(); - } - } if (!$conf->oauth->enabled) { $this->conf[] = array('varname'=>'PRINTGCP_INFO', 'info'=>'ModuleAuthNotActive', 'type'=>'info'); } else { + $this->db = $db; + $this->google_id = $conf->global->OAUTH_GOOGLE_ID; + $this->google_secret = $conf->global->OAUTH_GOOGLE_SECRET; + // Token storage + $storage = new DoliStorage($this->db, $this->conf); + //$storage->clearToken('Google'); + // Setup the credentials for the requests + $credentials = new Credentials( + $this->google_id, + $this->google_secret, + $urlwithroot.'/core/modules/oauth/google_oauthcallback.php' + ); + $access = ($storage->hasAccessToken('Google')?'HasAccessToken':'NoAccessToken'); + $serviceFactory = new \OAuth\ServiceFactory(); + $apiService = $serviceFactory->createService('Google', $credentials, $storage, array()); + $token_ok=true; + try { + $token = $storage->retrieveAccessToken('Google'); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + $token_ok = false; + } + //var_dump($this->errors);exit; + + $expire = false; + // Is token expired or will token expire in the next 30 seconds + if ($token_ok) { + $expire = ($token->getEndOfLife() !== -9002 && $token->getEndOfLife() !== -9001 && time() > ($token->getEndOfLife() - 30)); + } + + // Token expired so we refresh it + if ($token_ok && $expire) { + try { + // il faut sauvegarder le refresh token car google ne le donne qu'une seule fois + $refreshtoken = $token->getRefreshToken(); + $token = $apiService->refreshAccessToken($token); + $token->setRefreshToken($refreshtoken); + $storage->storeAccessToken('Google', $token); + } catch (Exception $e) { + $this->errors[] = $e->getMessage(); + } + } if ($this->google_id != '' && $this->google_secret != '') { $this->conf[] = array('varname'=>'PRINTGCP_INFO', 'info'=>'GoogleAuthConfigured', 'type'=>'info'); $this->conf[] = array('varname'=>'PRINTGCP_TOKEN_ACCESS', 'info'=>$access, 'type'=>'info', 'renew'=>$urlwithroot.'/core/modules/oauth/google_oauthcallback.php?state=userinfo_email,userinfo_profile,cloud_print&backtourl='.urlencode(DOL_URL_ROOT.'/printing/admin/printing.php?mode=setup&driver=printgcp'), 'delete'=>($storage->hasAccessToken('Google')?$urlwithroot.'/core/modules/oauth/google_oauthcallback.php?action=delete&backtourl='.urlencode(DOL_URL_ROOT.'/printing/admin/printing.php?mode=setup&driver=printgcp'):'')); From e3e2b8750624063ca92a8ae288e3548df93a5cdc Mon Sep 17 00:00:00 2001 From: Philippe-OpenDSI Date: Wed, 20 Apr 2016 13:59:13 +0200 Subject: [PATCH 23/50] Product supplier list display only one product Last parameter of select_produits_fournisseurs_list is $limit, not $socidif --- htdocs/product/ajax/products.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/ajax/products.php b/htdocs/product/ajax/products.php index c17fdb65aea..05efcc24a0e 100644 --- a/htdocs/product/ajax/products.php +++ b/htdocs/product/ajax/products.php @@ -183,7 +183,7 @@ if (! empty($action) && $action == 'fetch' && ! empty($id)) if (empty($mode) || $mode == 1) { $arrayresult = $form->select_produits_list("", $htmlname, $type, "", $price_level, $searchkey, $status, $finished, $outjson, $socid); } elseif ($mode == 2) { - $arrayresult = $form->select_produits_fournisseurs_list($socid, "", $htmlname, $type, "", $searchkey, $status, $outjson, $socid); + $arrayresult = $form->select_produits_fournisseurs_list($socid, "", $htmlname, $type, "", $searchkey, $status, $outjson); } $db->close(); From d043c9ce80be068239eb010877d5d4f3568f8d15 Mon Sep 17 00:00:00 2001 From: placid0w Date: Wed, 20 Apr 2016 15:43:14 -0300 Subject: [PATCH 24/50] Fix #5054 --- htdocs/webservices/server_productorservice.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/webservices/server_productorservice.php b/htdocs/webservices/server_productorservice.php index 2e3314fff12..43facbb24fa 100644 --- a/htdocs/webservices/server_productorservice.php +++ b/htdocs/webservices/server_productorservice.php @@ -374,7 +374,7 @@ function getProductOrService($authentication,$id='',$ref='',$ref_ext='',$lang='' $product->load_stock(); $dir = (!empty($conf->product->dir_output)?$conf->product->dir_output:$conf->service->dir_output); - $pdir = get_exdir($product->id,2,0,0,$product,'product') . $product->id ."/photos/"; + $pdir = get_exdir($product->id,2,0,0,$product,'product') . $product->ref . "/"; $dir = $dir . '/'. $pdir; if (! empty($product->multilangs[$langs->defaultlang]["label"])) $product->label = $product->multilangs[$langs->defaultlang]["label"]; From fd9fb505b97230bd3514c16e33c4d7d75cc2e9c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 21 Apr 2016 07:53:22 +0200 Subject: [PATCH 25/50] Update printgcp.modules.php --- htdocs/core/modules/printing/printgcp.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/printing/printgcp.modules.php b/htdocs/core/modules/printing/printgcp.modules.php index 610df641deb..3911c4d6be2 100644 --- a/htdocs/core/modules/printing/printgcp.modules.php +++ b/htdocs/core/modules/printing/printgcp.modules.php @@ -64,12 +64,12 @@ class printing_printgcp extends PrintingDriver $urlwithouturlroot=preg_replace('/'.preg_quote(DOL_URL_ROOT,'/').'$/i','',trim($dolibarr_main_url_root)); $urlwithroot=$urlwithouturlroot.DOL_URL_ROOT; // This is to use external domain name found into config file //$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current + $this->db = $db; if (!$conf->oauth->enabled) { $this->conf[] = array('varname'=>'PRINTGCP_INFO', 'info'=>'ModuleAuthNotActive', 'type'=>'info'); } else { - $this->db = $db; $this->google_id = $conf->global->OAUTH_GOOGLE_ID; $this->google_secret = $conf->global->OAUTH_GOOGLE_SECRET; // Token storage From 2fc876f60773cc8d49f51f2768bc6634a962d7ca Mon Sep 17 00:00:00 2001 From: Philippe-OpenDSI Date: Thu, 21 Apr 2016 08:41:45 +0200 Subject: [PATCH 26/50] FIX #5048 Product supplier list display only one produc Last parameter of select_produits_fournisseurs_list is $limit, not $socid --- htdocs/product/ajax/products.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/product/ajax/products.php b/htdocs/product/ajax/products.php index c17fdb65aea..05efcc24a0e 100644 --- a/htdocs/product/ajax/products.php +++ b/htdocs/product/ajax/products.php @@ -183,7 +183,7 @@ if (! empty($action) && $action == 'fetch' && ! empty($id)) if (empty($mode) || $mode == 1) { $arrayresult = $form->select_produits_list("", $htmlname, $type, "", $price_level, $searchkey, $status, $finished, $outjson, $socid); } elseif ($mode == 2) { - $arrayresult = $form->select_produits_fournisseurs_list($socid, "", $htmlname, $type, "", $searchkey, $status, $outjson, $socid); + $arrayresult = $form->select_produits_fournisseurs_list($socid, "", $htmlname, $type, "", $searchkey, $status, $outjson); } $db->close(); From adde434708ffb35a237ea753402306f5266d25fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Thu, 21 Apr 2016 08:52:10 +0200 Subject: [PATCH 27/50] Update 3.9.0-4.0.0.sql --- htdocs/install/mysql/migration/3.9.0-4.0.0.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/install/mysql/migration/3.9.0-4.0.0.sql b/htdocs/install/mysql/migration/3.9.0-4.0.0.sql index 7ce46730aa9..094084d6849 100644 --- a/htdocs/install/mysql/migration/3.9.0-4.0.0.sql +++ b/htdocs/install/mysql/migration/3.9.0-4.0.0.sql @@ -385,5 +385,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value ALTER TABLE llx_product_fournisseur_price ADD supplier_reputation varchar(10) NULL; +ALTER TABLE llx_product ADD COLUMN default_vat_code varchar(10) after cost_price; + -- Delete old deprecated field ALTER TABLE llx_product_stock DROP COLUMN pmp; From 4406cfcbb8313df94928c93415ec6d22e6b6c75d Mon Sep 17 00:00:00 2001 From: abb Date: Thu, 21 Apr 2016 14:20:58 +0100 Subject: [PATCH 28/50] fix:missing quote in query in updatefield function --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index a4dca05ce82..59871c85d52 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4295,7 +4295,7 @@ abstract class CommonObject } $this->db->begin(); - $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET $key=".$this->array_options["options_$key"]; + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET $key='".$this->array_options["options_$key"]."'"; $sql .= " WHERE fk_object = ".$this->id; $resql = $this->db->query($sql); if (! $resql) From a0f57e6a91f316c29905fe4048279e101968bdee Mon Sep 17 00:00:00 2001 From: abb Date: Thu, 21 Apr 2016 14:49:46 +0100 Subject: [PATCH 29/50] fix:add escape function to query in updatefield function --- htdocs/core/class/commonobject.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 59871c85d52..d42add2a36c 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4295,7 +4295,7 @@ abstract class CommonObject } $this->db->begin(); - $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET $key='".$this->array_options["options_$key"]."'"; + $sql = "UPDATE ".MAIN_DB_PREFIX.$this->table_element."_extrafields SET $key='".$this->db->escape($this->array_options["options_$key"])."'"; $sql .= " WHERE fk_object = ".$this->id; $resql = $this->db->query($sql); if (! $resql) From bea8b49d8ce5e8acc25dfdc3e9818e2217e7c64a Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 22 Apr 2016 09:02:40 +0200 Subject: [PATCH 30/50] Fix log function was removed in 1b6fa8ec34b80a4231a19626bdb0443daf1decf2 --- htdocs/fourn/class/fournisseur.commande.class.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 7de088785de..154d16de539 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -1155,9 +1155,6 @@ class CommandeFournisseur extends CommonOrder dol_syslog(get_class($this)."::create", LOG_DEBUG); if ($this->db->query($sql)) { - // Add entry into log - $this->log($user, 0, $now); - // Add link with price request and supplier order if ($this->id) { From 4bd239060c1421ff507bda8f12835e6a4d71d497 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 22 Apr 2016 09:18:09 +0200 Subject: [PATCH 31/50] Fix order creation bug because of ->client --- htdocs/commande/card.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index db80893f426..d6fa064df39 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1380,7 +1380,7 @@ if ($action == 'create' && $user->rights->commande->creer) $projectid = (! empty($objectsrc->fk_project) ? $objectsrc->fk_project : ''); $ref_client = (! empty($objectsrc->ref_client) ? $objectsrc->ref_client : ''); - $soc = $objectsrc->client; + $soc = $objectsrc->thirdparty; $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1)); $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0)); $fk_account = (! empty($objectsrc->fk_account)?$objectsrc->fk_account:(! empty($soc->fk_account)?$soc->fk_account:0)); From 0c7d7245a8263edaa00f282305a7abfeb6a2884f Mon Sep 17 00:00:00 2001 From: philippe grand Date: Fri, 22 Apr 2016 09:37:35 +0200 Subject: [PATCH 32/50] missing translation --- htdocs/langs/en_US/errors.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index a3376a336bb..56e136f5e52 100755 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -6,6 +6,7 @@ NoErrorCommitIsDone=No error, we commit ErrorButCommitIsDone=Errors found but we validate despite this ErrorBadEMail=EMail %s is wrong ErrorBadUrl=Url %s is wrong +ErrorBadValueForParamNotAString=Bad value for your parameter. It appends generally when translation is missing. ErrorLoginAlreadyExists=Login %s already exists. ErrorGroupAlreadyExists=Group %s already exists. ErrorRecordNotFound=Record not found. From e8817019687c06d937f1fdbe5f3240939a999d00 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 22 Apr 2016 09:46:47 +0200 Subject: [PATCH 33/50] Fix pdf generation with thirdparty --- htdocs/compta/facture.php | 4 ++-- htdocs/core/actions_builddoc.inc.php | 2 +- htdocs/core/lib/sendings.lib.php | 2 +- .../modules/commande/doc/pdf_einstein.modules.php | 6 +++--- .../modules/expedition/doc/pdf_merou.modules.php | 10 +++++----- .../modules/expedition/doc/pdf_rouget.modules.php | 10 +++++----- .../core/modules/facture/doc/pdf_crabe.modules.php | 6 +++--- .../modules/fichinter/doc/pdf_soleil.modules.php | 10 +++++----- .../modules/livraison/doc/pdf_typhon.modules.php | 8 ++++---- .../propale/doc/doc_generic_proposal_odt.modules.php | 4 ++-- htdocs/core/modules/propale/doc/pdf_azur.modules.php | 10 +++++----- .../supplier_proposal/doc/pdf_aurore.modules.php | 12 ++++++------ 12 files changed, 42 insertions(+), 42 deletions(-) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 491c4ca041a..51625370ed4 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -1127,8 +1127,8 @@ if (empty($reshook)) } // View third's localtaxes for now - $localtax1_tx = get_localtax($lines[$i]->tva_tx, 1, $object->client); - $localtax2_tx = get_localtax($lines[$i]->tva_tx, 2, $object->client); + $localtax1_tx = get_localtax($lines[$i]->tva_tx, 1, $object->thirdparty); + $localtax2_tx = get_localtax($lines[$i]->tva_tx, 2, $object->thirdparty); $result = $object->addline($desc, $lines[$i]->subprice, $lines[$i]->qty, $lines[$i]->tva_tx, $localtax1_tx, $localtax2_tx, $lines[$i]->fk_product, $lines[$i]->remise_percent, $date_start, $date_end, 0, $lines[$i]->info_bits, $lines[$i]->fk_remise_except, 'HT', 0, $product_type, $lines[$i]->rang, $lines[$i]->special_code, $object->origin, $lines[$i]->rowid, $fk_parent_line, $lines[$i]->fk_fournprice, $lines[$i]->pa_ht, $label, $array_options, $lines[$i]->situation_percent, $lines[$i]->fk_prev_id, $lines[$i]->fk_unit); diff --git a/htdocs/core/actions_builddoc.inc.php b/htdocs/core/actions_builddoc.inc.php index 29ae4eb3365..9502d723013 100644 --- a/htdocs/core/actions_builddoc.inc.php +++ b/htdocs/core/actions_builddoc.inc.php @@ -64,7 +64,7 @@ if ($action == 'builddoc' && $permissioncreate) $outputlangs = $langs; $newlang=''; if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && isset($object->client->default_lang)) $newlang=$object->client->default_lang; // for proposal, order, invoice, ... + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && isset($object->thirdparty->default_lang)) $newlang=$object->thirdparty->default_lang; // for proposal, order, invoice, ... if ($conf->global->MAIN_MULTILANGS && empty($newlang) && isset($object->default_lang)) $newlang=$object->default_lang; // for thirdparty if (! empty($newlang)) { diff --git a/htdocs/core/lib/sendings.lib.php b/htdocs/core/lib/sendings.lib.php index 8cfd5f202d5..52e0b9b9e96 100644 --- a/htdocs/core/lib/sendings.lib.php +++ b/htdocs/core/lib/sendings.lib.php @@ -233,7 +233,7 @@ function show_list_sending_receive($origin,$origin_id,$filter='') $outputlangs = $langs; $newlang=''; if (empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if (empty($newlang)) $newlang=$object->client->default_lang; + if (empty($newlang)) $newlang=$object->thirdparty->default_lang; if (! empty($newlang)) { $outputlangs = new Translate("",$conf); diff --git a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php index 3fc65a8b6a5..6cdb80edaa3 100644 --- a/htdocs/core/modules/commande/doc/pdf_einstein.modules.php +++ b/htdocs/core/modules/commande/doc/pdf_einstein.modules.php @@ -1261,7 +1261,7 @@ class pdf_einstein extends ModelePDFCommandes if ($showaddress) { // Sender properties - $carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->client); + $carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); // Show sender $posy=42; @@ -1306,12 +1306,12 @@ class pdf_einstein extends ModelePDFCommandes if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { - $thirdparty = $object->client; + $thirdparty = $object->thirdparty; } $carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs); - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,($usecontact?$object->contact:''),$usecontact,'target', $object); + $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target', $object); // Show recipient $widthrecbox=100; diff --git a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php index 769b503d8ac..ac3233533c8 100644 --- a/htdocs/core/modules/expedition/doc/pdf_merou.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_merou.modules.php @@ -542,20 +542,20 @@ class pdf_merou extends ModelePdfExpedition $pdf->SetTextColor(0,0,0); // Sender properties - $carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->client); + $carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); $pdf->SetFont('','', $default_font_size - 3); $pdf->SetXY($blSocX,$blSocY+4); $pdf->MultiCell(80, 2, $carac_emetteur, 0, 'L'); - if ($object->client->code_client) + if ($object->thirdparty->code_client) { $Yoff+=3; $posy=$Yoff; $pdf->SetXY(100,$posy); $pdf->SetTextColor(0,0,0); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->client->code_client), '', 'R'); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); } // Date Expedition @@ -628,12 +628,12 @@ class pdf_merou extends ModelePdfExpedition if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { - $thirdparty = $object->client; + $thirdparty = $object->thirdparty; } $carac_client_name=pdfBuildThirdpartyName($thirdparty, $outputlangs); - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,((!empty($object->contact))?$object->contact:null),$usecontact,'targetwithdetails',$object); + $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,((!empty($object->contact))?$object->contact:null),$usecontact,'targetwithdetails',$object); $blDestX=$blExpX+55; $blW=54; diff --git a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php index 58da00607b8..e493f1ae2f7 100644 --- a/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php +++ b/htdocs/core/modules/expedition/doc/pdf_rouget.modules.php @@ -827,12 +827,12 @@ class pdf_rouget extends ModelePdfExpedition $pdf->MultiCell($w, 4, $outputlangs->transnoentities("DateDeliveryPlanned")." : ".dol_print_date($object->date_delivery,"day",false,$outputlangs,true), '', 'R'); } - if (! empty($object->client->code_client)) + if (! empty($object->thirdparty->code_client)) { $posy+=4; $pdf->SetXY($posx,$posy); $pdf->SetTextColor(0,0,60); - $pdf->MultiCell($w, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->client->code_client), '', 'R'); + $pdf->MultiCell($w, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); } @@ -881,7 +881,7 @@ class pdf_rouget extends ModelePdfExpedition $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs->transnoentities("Name").": ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs))."\n"; } - $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->client); + $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); // Show sender $posy=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 40 : 42; @@ -927,12 +927,12 @@ class pdf_rouget extends ModelePdfExpedition if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { - $thirdparty = $object->client; + $thirdparty = $object->thirdparty; } $carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs); - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,(!empty($object->contact)?$object->contact:null),$usecontact,'targetwithdetails',$object); + $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,(!empty($object->contact)?$object->contact:null),$usecontact,'targetwithdetails',$object); // Show recipient $widthrecbox=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 100; diff --git a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php index 05fc649453a..e96b9bdc5be 100644 --- a/htdocs/core/modules/facture/doc/pdf_crabe.modules.php +++ b/htdocs/core/modules/facture/doc/pdf_crabe.modules.php @@ -1554,7 +1554,7 @@ class pdf_crabe extends ModelePDFFactures if ($showaddress) { // Sender properties - $carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->client); + $carac_emetteur = pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); // Show sender $posy=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 40 : 42; @@ -1602,12 +1602,12 @@ class pdf_crabe extends ModelePDFFactures if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { - $thirdparty = $object->client; + $thirdparty = $object->thirdparty; } $carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs); - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,($usecontact?$object->contact:''),$usecontact,'target',$object); + $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target',$object); // Show recipient $widthrecbox=!empty($conf->global->MAIN_PDF_USE_ISO_LOCATION) ? 92 : 100; diff --git a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php index 08c08474981..60a2b0a0842 100644 --- a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php +++ b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php @@ -552,12 +552,12 @@ class pdf_soleil extends ModelePDFFicheinter $pdf->SetTextColor(0,0,60); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("Date")." : " . dol_print_date($object->datec,"day",false,$outputlangs,true), '', 'R'); - if ($object->client->code_client) + if ($object->thirdparty->code_client) { $posy+=4; $pdf->SetXY($posx,$posy); $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->client->code_client), '', 'R'); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); } if ($showaddress) @@ -572,7 +572,7 @@ class pdf_soleil extends ModelePDFFicheinter $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs->transnoentities("Name").": ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs))."\n"; } - $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->client); + $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); // Show sender $posy=42; @@ -615,12 +615,12 @@ class pdf_soleil extends ModelePDFFicheinter if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { - $thirdparty = $object->client; + $thirdparty = $object->thirdparty; } $carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs); - $carac_client=pdf_build_address($outputlangs, $this->emetteur, $object->client, (isset($object->contact)?$object->contact:''), $usecontact, 'target',$object); + $carac_client=pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty, (isset($object->contact)?$object->contact:''), $usecontact, 'target',$object); // Show recipient $widthrecbox=100; diff --git a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php index 4bb0260ecc8..33ac2cb58c9 100644 --- a/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php +++ b/htdocs/core/modules/livraison/doc/pdf_typhon.modules.php @@ -742,12 +742,12 @@ class pdf_typhon extends ModelePDFDeliveryOrder $pdf->SetTextColor(0,0,60); } - if ($object->client->code_client) + if ($object->thirdparty->code_client) { $posy+=5; $pdf->SetXY($posx,$posy); $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->client->code_client), '', 'R'); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); } $pdf->SetTextColor(0,0,60); @@ -849,12 +849,12 @@ class pdf_typhon extends ModelePDFDeliveryOrder if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { - $thirdparty = $object->client; + $thirdparty = $object->thirdparty; } $carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs); - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,($usecontact?$object->contact:''),$usecontact,'target',$object); + $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target',$object); // Show recipient $widthrecbox=100; diff --git a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php index 8f8a2edce9b..81439058b38 100644 --- a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php +++ b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php @@ -321,14 +321,14 @@ class doc_generic_proposal_odt extends ModelePDFPropales // On peut utiliser le nom de la societe du contact if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socobject = $object->contact; else { - $socobject = $object->client; + $socobject = $object->thirdparty; // if we have a CUSTOMER contact and we dont use it as recipient we store the contact object for later use $contactobject = $object->contact; } } else { - $socobject=$object->client; + $socobject=$object->thirdparty; } // Make substitution $substitutionarray=array( diff --git a/htdocs/core/modules/propale/doc/pdf_azur.modules.php b/htdocs/core/modules/propale/doc/pdf_azur.modules.php index 3b3bc707ac7..2981eb3bedc 100644 --- a/htdocs/core/modules/propale/doc/pdf_azur.modules.php +++ b/htdocs/core/modules/propale/doc/pdf_azur.modules.php @@ -1442,12 +1442,12 @@ class pdf_azur extends ModelePDFPropales $pdf->SetTextColor(0,0,60); $pdf->MultiCell(100, 3, $outputlangs->transnoentities("DateEndPropal")." : " . dol_print_date($object->fin_validite,"day",false,$outputlangs,true), '', 'R'); - if ($object->client->code_client) + if ($object->thirdparty->code_client) { $posy+=4; $pdf->SetXY($posx,$posy); $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->client->code_client), '', 'R'); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); } $posy+=2; @@ -1467,7 +1467,7 @@ class pdf_azur extends ModelePDFPropales $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs->transnoentities("Name").": ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs))."\n"; } - $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->client); + $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); // Show sender $posy=42; @@ -1511,12 +1511,12 @@ class pdf_azur extends ModelePDFPropales if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { - $thirdparty = $object->client; + $thirdparty = $object->thirdparty; } $carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs); - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,($usecontact?$object->contact:''),$usecontact,'target',$object); + $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target',$object); // Show recipient $widthrecbox=100; diff --git a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php index 68181831581..62882eecc53 100644 --- a/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php +++ b/htdocs/core/modules/supplier_proposal/doc/pdf_aurore.modules.php @@ -1271,12 +1271,12 @@ class pdf_aurore extends ModelePDFSupplierProposal $pdf->MultiCell(100, 3, $outputlangs->transnoentities("SupplierProposalDate")." : " . dol_print_date($object->date_livraison,"day",false,$outputlangs,true), '', 'R'); */ - if ($object->client->code_client) + if ($object->thirdparty->code_client) { $posy+=4; $pdf->SetXY($posx,$posy); $pdf->SetTextColor(0,0,60); - $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->client->code_client), '', 'R'); + $pdf->MultiCell(100, 3, $outputlangs->transnoentities("CustomerCode")." : " . $outputlangs->transnoentities($object->thirdparty->code_client), '', 'R'); } $posy+=2; @@ -1296,7 +1296,7 @@ class pdf_aurore extends ModelePDFSupplierProposal $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs->transnoentities("Name").": ".$outputlangs->convToOutputCharset($object->user->getFullName($outputlangs))."\n"; } - $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->client); + $carac_emetteur .= pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty); // Show sender $posy=42; @@ -1340,15 +1340,15 @@ class pdf_aurore extends ModelePDFSupplierProposal { // On peut utiliser le nom de la societe du contact if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socname = $object->contact->socname; - else $socname = $object->client->name; + else $socname = $object->thirdparty->name; $carac_client_name=$outputlangs->convToOutputCharset($socname); } else { - $carac_client_name=$outputlangs->convToOutputCharset($object->client->name); + $carac_client_name=$outputlangs->convToOutputCharset($object->thirdparty->name); } - $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->client,($usecontact?$object->contact:''),$usecontact,'target',$object); + $carac_client=pdf_build_address($outputlangs,$this->emetteur,$object->thirdparty,($usecontact?$object->contact:''),$usecontact,'target',$object); // Show recipient $widthrecbox=100; From 7dd8eba29e8b65e2f951aa6b41bbd5e0db9fa331 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 22 Apr 2016 10:30:13 +0200 Subject: [PATCH 34/50] New contact gender according to civility --- htdocs/contact/class/contact.class.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/htdocs/contact/class/contact.class.php b/htdocs/contact/class/contact.class.php index 5c0dede1bbc..88cd24af359 100644 --- a/htdocs/contact/class/contact.class.php +++ b/htdocs/contact/class/contact.class.php @@ -593,8 +593,15 @@ class Contact extends CommonObject $this->canvas = $obj->canvas; $this->import_key = $obj->import_key; + + // Define gender according to civility + if(in_array($this->civility_id, array('MR'))) { + $this->gender = 'man'; + } else if(in_array($this->civility_id, array('MME','MLE'))) { + $this->gender = 'woman'; + } - // Recherche le user Dolibarr lie a ce contact + // Search Dolibarr user linked to this contact $sql = "SELECT u.rowid "; $sql .= " FROM ".MAIN_DB_PREFIX."user as u"; $sql .= " WHERE u.fk_socpeople = ". $this->id; From fc7056650ee39c64a9eab655893b8ec61474273d Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 22 Apr 2016 10:42:06 +0200 Subject: [PATCH 35/50] Fix payment display on customer invoice and replicate on supplier invoice --- htdocs/compta/facture.php | 10 +++++----- htdocs/fourn/facture/card.php | 23 ++++++++++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 491c4ca041a..3bae221e6dd 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -3108,13 +3108,13 @@ else if ($id > 0 || ! empty($ref)) if ($object->type == Facture::TYPE_CREDIT_NOTE) $sign = - 1; - $nbrows = 9; - $nbcols = 2; + $nbrows = 8; + $nbcols = 3; if (! empty($conf->projet->enabled)) $nbrows ++; - if (! empty($conf->banque->enabled)) - $nbcols ++; - // if (! empty($soc->outstandingbill)) $nbrows++; + if (! empty($conf->banque->enabled)) { + $nbrows ++; $nbcols++; + } if ($mysoc->localtax1_assuj == "1" || $object->total_localtax1 != 0) $nbrows ++; if ($mysoc->localtax2_assuj == "1" || $object->total_localtax2 != 0) diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php index b7e22e9e42f..c1346c357d5 100644 --- a/htdocs/fourn/facture/card.php +++ b/htdocs/fourn/facture/card.php @@ -1271,6 +1271,7 @@ if (empty($reshook)) $form = new Form($db); $formfile = new FormFile($db); $bankaccountstatic=new Account($db); +$paymentstatic=new PaiementFourn($db); llxHeader('',$langs->trans('SupplierInvoice'),''); @@ -1871,7 +1872,7 @@ else /* * List of payments */ - $nbrows=9; $nbcols=2; + $nbrows=9; $nbcols=3; if (! empty($conf->projet->enabled)) $nbrows++; if (! empty($conf->banque->enabled)) { $nbrows++; $nbcols++; } if (! empty($conf->incoterm->enabled)) $nbrows++; @@ -1882,10 +1883,10 @@ else print ' - - - - - - - - - - - - -
'.$langs->trans("MAIN_MAIL_EMAIL_TLS").''; - if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'smtps')) + if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { if (function_exists('openssl_open')) { @@ -492,7 +507,7 @@ if ($action == 'edit') // STARTTLS $var=!$var; print '
'.$langs->trans("MAIN_MAIL_EMAIL_STARTTLS").''; - if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'smtps')) + if (! empty($conf->use_javascript_ajax) || (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer')))) { if (function_exists('openssl_open')) { @@ -581,14 +596,14 @@ else // SMTPS ID $var=!$var; - if (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'smtps') + if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) { print '
'.$langs->trans("MAIN_MAIL_SMTPS_ID").''.$conf->global->MAIN_MAIL_SMTPS_ID.'
'.$langs->trans("MAIN_MAIL_SMTPS_PW").''.preg_replace('/./','*',$conf->global->MAIN_MAIL_SMTPS_PW).'
'.$langs->trans("MAIN_MAIL_EMAIL_TLS").''; - if (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'smtps') + if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) { if (function_exists('openssl_open')) { @@ -610,7 +625,7 @@ else // STARTTLS $var=!$var; print '
'.$langs->trans("MAIN_MAIL_EMAIL_STARTTLS").''; - if (isset($conf->global->MAIN_MAIL_SENDMODE) && $conf->global->MAIN_MAIL_SENDMODE == 'smtps') + if (isset($conf->global->MAIN_MAIL_SENDMODE) && in_array($conf->global->MAIN_MAIL_SENDMODE, array('smtps', 'swiftmailer'))) { if (function_exists('openssl_open')) { diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php index 5fb15ef1ec1..44e61b3f219 100644 --- a/htdocs/core/class/CMailFile.class.php +++ b/htdocs/core/class/CMailFile.class.php @@ -352,6 +352,80 @@ class CMailFile $this->phpmailer->setErrorsTo($errors_to); $this->phpmailer->setDeliveryReceipt($deliveryreceipt); } + else if ($conf->global->MAIN_MAIL_SENDMODE == 'swiftmailer') + { + // Use Swift Mailer library + // ------------------------------------------ + + require_once DOL_DOCUMENT_ROOT.'/includes/swiftmailer/lib/swift_required.php'; + // Create the message + $this->message = Swift_Message::newInstance(); + + // Give the message a subject + $this->message->setSubject($this->encodetorfc2822($subject)); + + // Set the From address with an associative array + //$this->message->setFrom(array('john@doe.com' => 'John Doe')); + $this->message->setFrom($this->getArrayAddress($from)); + + // Set the To addresses with an associative array + $this->message->setTo($this->getArrayAddress($to)); + + $this->message->SetReplyTo($this->getArrayAddress($from)); + + $this->message->setCharSet($conf->file->character_set_client); + + // TODO Add trackid into smtp header + + if (! empty($this->html)) + { + if (!empty($css)) + { + $this->css = $css; + $this->buildCSS(); + } + $msg = $this->html; + $msg = $this->checkIfHTML($msg); + } + + if ($this->msgishtml) { + $this->message->setBody($msg,'text/html'); + // And optionally an alternative body + //$this->message->addPart('Here is the message itself', 'text/plain'); + } else { + $this->message->setBody($msg,'text/plain'); + // And optionally an alternative body + //$this->message->addPart('Here is the message itself', 'text/html'); + } + + if ($this->atleastoneimage) + { + foreach ($this->images_encoded as $img) + { + //$img['fullpath'],$img['image_encoded'],$img['name'],$img['content_type'],$img['cid'] + // TODO this part is not tested + //$attachment = Swift_Attachment::fromPath($img['fullpath'], 'image/jpeg'); + //$attachment->setFilename($img['name']); + //$attachment->setDisposition('inline'); + //$message->attach($attachment); + } + } + + if ($this->atleastonefile) + { + foreach ($filename_list as $i => $val) + { + //$this->message->attach(Swift_Attachment::fromPath($filename_list[$i],$mimetype_list[$i])); + $attachment = Swift_Attachment::fromPath($filename_list[$i],$mimetype_list[$i]); + $this->message->attach($attachment); + } + } + + if (! empty($addr_cc)) $this->message->setCc($this->getArrayAddress($addr_cc)); + if (! empty($addr_bcc)) $this->message->setBcc($this->getArrayAddress($addr_bcc)); + //if (! empty($errors_to)) $this->message->setErrorsTo($this->getArrayAddress($errors_to); + if (isset($this->deliveryreceipt) && $this->deliveryreceipt == 1) $this->message->setReadReceiptTo($this->getArrayAddress($from)); + } else { // Send mail method not correctly defined @@ -392,7 +466,7 @@ class CMailFile return $reshook; } - + // Action according to choosed sending method if ($conf->global->MAIN_MAIL_SENDMODE == 'mail') { @@ -427,7 +501,7 @@ class CMailFile if (! empty($conf->global->MAIN_MAIL_ALLOW_SENDMAIL_F)) { // le "Return-Path" (retour des messages bounced) dans les header ne fonctionne pas avec tous les MTA - // Le forcage de la valeure grace à l'option -f de sendmail est donc possible si la constante MAIN_MAIL_ALLOW_SENDMAIL_F est definie. + // Le forcage de la valeur grace à l'option -f de sendmail est donc possible si la constante MAIN_MAIL_ALLOW_SENDMAIL_F est definie. // La variable definie pose des pb avec certains sendmail securisee (option -f refusee car dangereuse) $bounce .= ($bounce?' ':'').(! empty($conf->global->MAIN_MAIL_ERRORS_TO) ? '-f' . $this->getValidAddress($conf->global->MAIN_MAIL_ERRORS_TO,2) : ($this->addr_from != '' ? '-f' . $this->getValidAddress($this->addr_from,2) : '') ); } @@ -527,6 +601,49 @@ class CMailFile } } } + else if ($conf->global->MAIN_MAIL_SENDMODE == 'swiftmailer') + { + + // Use Swift Mailer library + // ------------------------------------------ + require_once DOL_DOCUMENT_ROOT.'/includes/swiftmailer/lib/swift_required.php'; + + // Forcage parametres + if (empty($conf->global->MAIN_MAIL_SMTP_SERVER)) $conf->global->MAIN_MAIL_SMTP_SERVER=ini_get('SMTP'); + if (empty($conf->global->MAIN_MAIL_SMTP_PORT)) $conf->global->MAIN_MAIL_SMTP_PORT=ini_get('smtp_port'); + + // If we use SSL/TLS + $server=$conf->global->MAIN_MAIL_SMTP_SERVER; + $secure=''; + //var_dump(stream_get_transports()); + if (! empty($conf->global->MAIN_MAIL_EMAIL_TLS) && function_exists('openssl_open')) $secure='ssl'; + if (! empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS) && function_exists('openssl_open')) $secure='tls'; + + $this->transport = Swift_SmtpTransport::newInstance($server, $conf->global->MAIN_MAIL_SMTP_PORT, $secure); + + if (! empty($conf->global->MAIN_MAIL_SMTPS_ID)) $this->transport->setUsername($conf->global->MAIN_MAIL_SMTPS_ID); + if (! empty($conf->global->MAIN_MAIL_SMTPS_PW)) $this->transport->setPassword($conf->global->MAIN_MAIL_SMTPS_PW); + //$smtps->_msgReplyTo = 'reply@web.com'; + + // Create the Mailer using your created Transport + $this->mailer = Swift_Mailer::newInstance($this->transport); + + //if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->mailer->setDebug(true); + try { + $result = $this->mailer->send($this->message); + } catch (Exception $e) { + $this->error = $e->getMessage(); + } + //if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail(); + + $res = true; + if (! empty($this->error) && ! $result) { + dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR); + $res=false; + } else { + $this->error = sprintf ("Sent %d messages\n", $result); + } + } else { @@ -1127,5 +1244,39 @@ class CMailFile return $ret; } + + /** + * Return a formatted array of address string for SMTP protocol + * + * @param string $address Example: 'John Doe , Alan Smith ' or 'john@doe.com, alan@smith.com' + * @return array array of email => name + */ + function getArrayAddress($address) + { + global $conf; + + $ret=array(); + + $arrayaddress=explode(',',$address); + + // Boucle sur chaque composant de l'adresse + foreach($arrayaddress as $val) + { + if (preg_match('/^(.*)<(.*)>$/i',trim($val),$regs)) + { + $name = trim($regs[1]); + $email = trim($regs[2]); + } + else + { + $name = null; + $email = trim($val); + } + + $ret[$email]=empty($conf->global->MAIN_MAIL_NO_FULL_EMAIL)?$name:null; + } + + return $ret; + } } diff --git a/htdocs/core/class/smtps.class.php b/htdocs/core/class/smtps.class.php index b784577bce3..83e30a05413 100644 --- a/htdocs/core/class/smtps.class.php +++ b/htdocs/core/class/smtps.class.php @@ -1607,14 +1607,17 @@ class SMTPs $_retVal = true; $server_response = ''; + // avoid infinite loop + $limit=0; - while ( substr($server_response,3,1) != ' ' ) + while ( substr($server_response,3,1) != ' ' && $limit<100) { if( !( $server_response = fgets($socket, 256) ) ) { $this->_setErr(121, "Couldn't get mail server response codes"); $_retVal = false; } + $limit++; } if( !( substr($server_response, 0, 3) == $response ) ) diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift.php b/htdocs/includes/swiftmailer/lib/classes/Swift.php new file mode 100644 index 00000000000..72419b334b7 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift.php @@ -0,0 +1,80 @@ +createDependenciesFor('mime.attachment') + ); + + $this->setBody($data); + $this->setFilename($filename); + if ($contentType) { + $this->setContentType($contentType); + } + } + + /** + * Create a new Attachment. + * + * @param string|Swift_OutputByteStream $data + * @param string $filename + * @param string $contentType + * + * @return Swift_Mime_Attachment + */ + public static function newInstance($data = null, $filename = null, $contentType = null) + { + return new self($data, $filename, $contentType); + } + + /** + * Create a new Attachment from a filesystem path. + * + * @param string $path + * @param string $contentType optional + * + * @return Swift_Mime_Attachment + */ + public static function fromPath($path, $contentType = null) + { + return self::newInstance()->setFile( + new Swift_ByteStream_FileByteStream($path), + $contentType + ); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php new file mode 100644 index 00000000000..a7b0e3a6207 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php @@ -0,0 +1,181 @@ +_filters[$key] = $filter; + } + + /** + * Remove an already present StreamFilter based on its $key. + * + * @param string $key + */ + public function removeFilter($key) + { + unset($this->_filters[$key]); + } + + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + * + * @throws Swift_IoException + * + * @return int + */ + public function write($bytes) + { + $this->_writeBuffer .= $bytes; + foreach ($this->_filters as $filter) { + if ($filter->shouldBuffer($this->_writeBuffer)) { + return; + } + } + $this->_doWrite($this->_writeBuffer); + + return ++$this->_sequence; + } + + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + */ + public function commit() + { + $this->_doWrite($this->_writeBuffer); + } + + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(Swift_InputByteStream $is) + { + $this->_mirrors[] = $is; + } + + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->_mirrors as $k => $stream) { + if ($is === $stream) { + if ($this->_writeBuffer !== '') { + $stream->write($this->_writeBuffer); + } + unset($this->_mirrors[$k]); + } + } + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + */ + public function flushBuffers() + { + if ($this->_writeBuffer !== '') { + $this->_doWrite($this->_writeBuffer); + } + $this->_flush(); + + foreach ($this->_mirrors as $stream) { + $stream->flushBuffers(); + } + } + + /** Run $bytes through all filters */ + private function _filter($bytes) + { + foreach ($this->_filters as $filter) { + $bytes = $filter->filter($bytes); + } + + return $bytes; + } + + /** Just write the bytes to the stream */ + private function _doWrite($bytes) + { + $this->_commit($this->_filter($bytes)); + + foreach ($this->_mirrors as $stream) { + $stream->write($bytes); + } + + $this->_writeBuffer = ''; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php new file mode 100644 index 00000000000..ef05a6d5e6e --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php @@ -0,0 +1,182 @@ +_array = $stack; + $this->_arraySize = count($stack); + } elseif (is_string($stack)) { + $this->write($stack); + } else { + $this->_array = array(); + } + } + + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->_offset == $this->_arraySize) { + return false; + } + + // Don't use array slice + $end = $length + $this->_offset; + $end = $this->_arraySize < $end ? $this->_arraySize : $end; + $ret = ''; + for (; $this->_offset < $end; ++$this->_offset) { + $ret .= $this->_array[$this->_offset]; + } + + return $ret; + } + + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + */ + public function write($bytes) + { + $to_add = str_split($bytes); + foreach ($to_add as $value) { + $this->_array[] = $value; + } + $this->_arraySize = count($this->_array); + + foreach ($this->_mirrors as $stream) { + $stream->write($bytes); + } + } + + /** + * Not used. + */ + public function commit() + { + } + + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(Swift_InputByteStream $is) + { + $this->_mirrors[] = $is; + } + + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->_mirrors as $k => $stream) { + if ($is === $stream) { + unset($this->_mirrors[$k]); + } + } + } + + /** + * Move the internal read pointer to $byteOffset in the stream. + * + * @param int $byteOffset + * + * @return bool + */ + public function setReadPointer($byteOffset) + { + if ($byteOffset > $this->_arraySize) { + $byteOffset = $this->_arraySize; + } elseif ($byteOffset < 0) { + $byteOffset = 0; + } + + $this->_offset = $byteOffset; + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + */ + public function flushBuffers() + { + $this->_offset = 0; + $this->_array = array(); + $this->_arraySize = 0; + + foreach ($this->_mirrors as $stream) { + $stream->flushBuffers(); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php new file mode 100644 index 00000000000..406104371e8 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php @@ -0,0 +1,229 @@ +_path = $path; + $this->_mode = $writable ? 'w+b' : 'rb'; + + if (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime() == 1) { + $this->_quotes = true; + } + } + + /** + * Get the complete path to the file. + * + * @return string + */ + public function getPath() + { + return $this->_path; + } + + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * + * @param int $length + * + * @throws Swift_IoException + * + * @return string|bool + */ + public function read($length) + { + $fp = $this->_getReadHandle(); + if (!feof($fp)) { + if ($this->_quotes) { + ini_set('magic_quotes_runtime', 0); + } + $bytes = fread($fp, $length); + if ($this->_quotes) { + ini_set('magic_quotes_runtime', 1); + } + $this->_offset = ftell($fp); + + // If we read one byte after reaching the end of the file + // feof() will return false and an empty string is returned + if ($bytes === '' && feof($fp)) { + $this->_resetReadHandle(); + + return false; + } + + return $bytes; + } + + $this->_resetReadHandle(); + + return false; + } + + /** + * Move the internal read pointer to $byteOffset in the stream. + * + * @param int $byteOffset + * + * @return bool + */ + public function setReadPointer($byteOffset) + { + if (isset($this->_reader)) { + $this->_seekReadStreamToPosition($byteOffset); + } + $this->_offset = $byteOffset; + } + + /** Just write the bytes to the file */ + protected function _commit($bytes) + { + fwrite($this->_getWriteHandle(), $bytes); + $this->_resetReadHandle(); + } + + /** Not used */ + protected function _flush() + { + } + + /** Get the resource for reading */ + private function _getReadHandle() + { + if (!isset($this->_reader)) { + if (!$this->_reader = fopen($this->_path, 'rb')) { + throw new Swift_IoException( + 'Unable to open file for reading ['.$this->_path.']' + ); + } + if ($this->_offset != 0) { + $this->_getReadStreamSeekableStatus(); + $this->_seekReadStreamToPosition($this->_offset); + } + } + + return $this->_reader; + } + + /** Get the resource for writing */ + private function _getWriteHandle() + { + if (!isset($this->_writer)) { + if (!$this->_writer = fopen($this->_path, $this->_mode)) { + throw new Swift_IoException( + 'Unable to open file for writing ['.$this->_path.']' + ); + } + } + + return $this->_writer; + } + + /** Force a reload of the resource for reading */ + private function _resetReadHandle() + { + if (isset($this->_reader)) { + fclose($this->_reader); + $this->_reader = null; + } + } + + /** Check if ReadOnly Stream is seekable */ + private function _getReadStreamSeekableStatus() + { + $metas = stream_get_meta_data($this->_reader); + $this->_seekable = $metas['seekable']; + } + + /** Streams in a readOnly stream ensuring copy if needed */ + private function _seekReadStreamToPosition($offset) + { + if ($this->_seekable === null) { + $this->_getReadStreamSeekableStatus(); + } + if ($this->_seekable === false) { + $currentPos = ftell($this->_reader); + if ($currentPos < $offset) { + $toDiscard = $offset - $currentPos; + fread($this->_reader, $toDiscard); + + return; + } + $this->_copyReadStream(); + } + fseek($this->_reader, $offset, SEEK_SET); + } + + /** Copy a readOnly Stream to ensure seekability */ + private function _copyReadStream() + { + if ($tmpFile = fopen('php://temp/maxmemory:4096', 'w+b')) { + /* We have opened a php:// Stream Should work without problem */ + } elseif (function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir()) && ($tmpFile = tmpfile())) { + /* We have opened a tmpfile */ + } else { + throw new Swift_IoException('Unable to copy the file to make it seekable, sys_temp_dir is not writable, php://memory not available'); + } + $currentPos = ftell($this->_reader); + fclose($this->_reader); + $source = fopen($this->_path, 'rb'); + if (!$source) { + throw new Swift_IoException('Unable to open file for copying ['.$this->_path.']'); + } + fseek($tmpFile, 0, SEEK_SET); + while (!feof($source)) { + fwrite($tmpFile, fread($source, 4096)); + } + fseek($tmpFile, $currentPos, SEEK_SET); + fclose($source); + $this->_reader = $tmpFile; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php new file mode 100644 index 00000000000..1c9a80c0376 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php @@ -0,0 +1,42 @@ +getPath())) === false) { + throw new Swift_IoException('Failed to get temporary file content.'); + } + + return $content; + } + + public function __destruct() + { + if (file_exists($this->getPath())) { + @unlink($this->getPath()); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader.php new file mode 100644 index 00000000000..3d5e854a884 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader.php @@ -0,0 +1,67 @@ + + */ +interface Swift_CharacterReader +{ + const MAP_TYPE_INVALID = 0x01; + const MAP_TYPE_FIXED_LEN = 0x02; + const MAP_TYPE_POSITIONS = 0x03; + + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars); + + /** + * Returns the mapType, see constants. + * + * @return int + */ + public function getMapType(); + + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param integer[] $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size); + + /** + * Returns the number of bytes which should be read to start each character. + * + * For fixed width character sets this should be the number of octets-per-character. + * For multibyte character sets this will probably be 1. + * + * @return int + */ + public function getInitialByteSize(); +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php new file mode 100644 index 00000000000..ab8ebfda708 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php @@ -0,0 +1,97 @@ + + */ +class Swift_CharacterReader_GenericFixedWidthReader implements Swift_CharacterReader +{ + /** + * The number of bytes in a single character. + * + * @var int + */ + private $_width; + + /** + * Creates a new GenericFixedWidthReader using $width bytes per character. + * + * @param int $width + */ + public function __construct($width) + { + $this->_width = $width; + } + + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + $strlen = strlen($string); + // % and / are CPU intensive, so, maybe find a better way + $ignored = $strlen % $this->_width; + $ignoredChars = substr($string, -$ignored); + $currentMap = $this->_width; + + return ($strlen - $ignored) / $this->_width; + } + + /** + * Returns the mapType. + * + * @return int + */ + public function getMapType() + { + return self::MAP_TYPE_FIXED_LEN; + } + + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + $needed = $this->_width - $size; + + return $needed > -1 ? $needed : -1; + } + + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return $this->_width; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php new file mode 100644 index 00000000000..67da48f6cb0 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php @@ -0,0 +1,84 @@ + "\x07F") { + // Invalid char + $currentMap[$i + $startOffset] = $string[$i]; + } + } + + return $strlen; + } + + /** + * Returns mapType. + * + * @return int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_INVALID; + } + + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + $byte = reset($bytes); + if (1 == count($bytes) && $byte >= 0x00 && $byte <= 0x7F) { + return 0; + } + + return -1; + } + + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return 1; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php new file mode 100644 index 00000000000..7379bda258f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php @@ -0,0 +1,176 @@ + + */ +class Swift_CharacterReader_Utf8Reader implements Swift_CharacterReader +{ + /** Pre-computed for optimization */ + private static $length_map = array( + // N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x0N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x1N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x2N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x3N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x4N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x5N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x6N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 0x7N + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x8N + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0x9N + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xAN + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 0xBN + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 0xCN + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, // 0xDN + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, // 0xEN + 4,4,4,4,4,4,4,4,5,5,5,5,6,6,0,0, // 0xFN + ); + + private static $s_length_map = array( + "\x00" => 1, "\x01" => 1, "\x02" => 1, "\x03" => 1, "\x04" => 1, "\x05" => 1, "\x06" => 1, "\x07" => 1, + "\x08" => 1, "\x09" => 1, "\x0a" => 1, "\x0b" => 1, "\x0c" => 1, "\x0d" => 1, "\x0e" => 1, "\x0f" => 1, + "\x10" => 1, "\x11" => 1, "\x12" => 1, "\x13" => 1, "\x14" => 1, "\x15" => 1, "\x16" => 1, "\x17" => 1, + "\x18" => 1, "\x19" => 1, "\x1a" => 1, "\x1b" => 1, "\x1c" => 1, "\x1d" => 1, "\x1e" => 1, "\x1f" => 1, + "\x20" => 1, "\x21" => 1, "\x22" => 1, "\x23" => 1, "\x24" => 1, "\x25" => 1, "\x26" => 1, "\x27" => 1, + "\x28" => 1, "\x29" => 1, "\x2a" => 1, "\x2b" => 1, "\x2c" => 1, "\x2d" => 1, "\x2e" => 1, "\x2f" => 1, + "\x30" => 1, "\x31" => 1, "\x32" => 1, "\x33" => 1, "\x34" => 1, "\x35" => 1, "\x36" => 1, "\x37" => 1, + "\x38" => 1, "\x39" => 1, "\x3a" => 1, "\x3b" => 1, "\x3c" => 1, "\x3d" => 1, "\x3e" => 1, "\x3f" => 1, + "\x40" => 1, "\x41" => 1, "\x42" => 1, "\x43" => 1, "\x44" => 1, "\x45" => 1, "\x46" => 1, "\x47" => 1, + "\x48" => 1, "\x49" => 1, "\x4a" => 1, "\x4b" => 1, "\x4c" => 1, "\x4d" => 1, "\x4e" => 1, "\x4f" => 1, + "\x50" => 1, "\x51" => 1, "\x52" => 1, "\x53" => 1, "\x54" => 1, "\x55" => 1, "\x56" => 1, "\x57" => 1, + "\x58" => 1, "\x59" => 1, "\x5a" => 1, "\x5b" => 1, "\x5c" => 1, "\x5d" => 1, "\x5e" => 1, "\x5f" => 1, + "\x60" => 1, "\x61" => 1, "\x62" => 1, "\x63" => 1, "\x64" => 1, "\x65" => 1, "\x66" => 1, "\x67" => 1, + "\x68" => 1, "\x69" => 1, "\x6a" => 1, "\x6b" => 1, "\x6c" => 1, "\x6d" => 1, "\x6e" => 1, "\x6f" => 1, + "\x70" => 1, "\x71" => 1, "\x72" => 1, "\x73" => 1, "\x74" => 1, "\x75" => 1, "\x76" => 1, "\x77" => 1, + "\x78" => 1, "\x79" => 1, "\x7a" => 1, "\x7b" => 1, "\x7c" => 1, "\x7d" => 1, "\x7e" => 1, "\x7f" => 1, + "\x80" => 0, "\x81" => 0, "\x82" => 0, "\x83" => 0, "\x84" => 0, "\x85" => 0, "\x86" => 0, "\x87" => 0, + "\x88" => 0, "\x89" => 0, "\x8a" => 0, "\x8b" => 0, "\x8c" => 0, "\x8d" => 0, "\x8e" => 0, "\x8f" => 0, + "\x90" => 0, "\x91" => 0, "\x92" => 0, "\x93" => 0, "\x94" => 0, "\x95" => 0, "\x96" => 0, "\x97" => 0, + "\x98" => 0, "\x99" => 0, "\x9a" => 0, "\x9b" => 0, "\x9c" => 0, "\x9d" => 0, "\x9e" => 0, "\x9f" => 0, + "\xa0" => 0, "\xa1" => 0, "\xa2" => 0, "\xa3" => 0, "\xa4" => 0, "\xa5" => 0, "\xa6" => 0, "\xa7" => 0, + "\xa8" => 0, "\xa9" => 0, "\xaa" => 0, "\xab" => 0, "\xac" => 0, "\xad" => 0, "\xae" => 0, "\xaf" => 0, + "\xb0" => 0, "\xb1" => 0, "\xb2" => 0, "\xb3" => 0, "\xb4" => 0, "\xb5" => 0, "\xb6" => 0, "\xb7" => 0, + "\xb8" => 0, "\xb9" => 0, "\xba" => 0, "\xbb" => 0, "\xbc" => 0, "\xbd" => 0, "\xbe" => 0, "\xbf" => 0, + "\xc0" => 2, "\xc1" => 2, "\xc2" => 2, "\xc3" => 2, "\xc4" => 2, "\xc5" => 2, "\xc6" => 2, "\xc7" => 2, + "\xc8" => 2, "\xc9" => 2, "\xca" => 2, "\xcb" => 2, "\xcc" => 2, "\xcd" => 2, "\xce" => 2, "\xcf" => 2, + "\xd0" => 2, "\xd1" => 2, "\xd2" => 2, "\xd3" => 2, "\xd4" => 2, "\xd5" => 2, "\xd6" => 2, "\xd7" => 2, + "\xd8" => 2, "\xd9" => 2, "\xda" => 2, "\xdb" => 2, "\xdc" => 2, "\xdd" => 2, "\xde" => 2, "\xdf" => 2, + "\xe0" => 3, "\xe1" => 3, "\xe2" => 3, "\xe3" => 3, "\xe4" => 3, "\xe5" => 3, "\xe6" => 3, "\xe7" => 3, + "\xe8" => 3, "\xe9" => 3, "\xea" => 3, "\xeb" => 3, "\xec" => 3, "\xed" => 3, "\xee" => 3, "\xef" => 3, + "\xf0" => 4, "\xf1" => 4, "\xf2" => 4, "\xf3" => 4, "\xf4" => 4, "\xf5" => 4, "\xf6" => 4, "\xf7" => 4, + "\xf8" => 5, "\xf9" => 5, "\xfa" => 5, "\xfb" => 5, "\xfc" => 6, "\xfd" => 6, "\xfe" => 0, "\xff" => 0, + ); + + /** + * Returns the complete character map. + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + if (!isset($currentMap['i']) || !isset($currentMap['p'])) { + $currentMap['p'] = $currentMap['i'] = array(); + } + + $strlen = strlen($string); + $charPos = count($currentMap['p']); + $foundChars = 0; + $invalid = false; + for ($i = 0; $i < $strlen; ++$i) { + $char = $string[$i]; + $size = self::$s_length_map[$char]; + if ($size == 0) { + /* char is invalid, we must wait for a resync */ + $invalid = true; + continue; + } else { + if ($invalid == true) { + /* We mark the chars as invalid and start a new char */ + $currentMap['p'][$charPos + $foundChars] = $startOffset + $i; + $currentMap['i'][$charPos + $foundChars] = true; + ++$foundChars; + $invalid = false; + } + if (($i + $size) > $strlen) { + $ignoredChars = substr($string, $i); + break; + } + for ($j = 1; $j < $size; ++$j) { + $char = $string[$i + $j]; + if ($char > "\x7F" && $char < "\xC0") { + // Valid - continue parsing + } else { + /* char is invalid, we must wait for a resync */ + $invalid = true; + continue 2; + } + } + /* Ok we got a complete char here */ + $currentMap['p'][$charPos + $foundChars] = $startOffset + $i + $size; + $i += $j - 1; + ++$foundChars; + } + } + + return $foundChars; + } + + /** + * Returns mapType. + * + * @return int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_POSITIONS; + } + + /** + * Returns an integer which specifies how many more bytes to read. + * + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * + * @param string $bytes + * @param int $size + * + * @return int + */ + public function validateByteSequence($bytes, $size) + { + if ($size < 1) { + return -1; + } + $needed = self::$length_map[$bytes[0]] - $size; + + return $needed > -1 ? $needed : -1; + } + + /** + * Returns the number of bytes which should be read to start each character. + * + * @return int + */ + public function getInitialByteSize() + { + return 1; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php new file mode 100644 index 00000000000..15b6c6920f4 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php @@ -0,0 +1,26 @@ +init(); + } + + public function __wakeup() + { + $this->init(); + } + + public function init() + { + if (count(self::$_map) > 0) { + return; + } + + $prefix = 'Swift_CharacterReader_'; + + $singleByte = array( + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => array(1), + ); + + $doubleByte = array( + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => array(2), + ); + + $fourBytes = array( + 'class' => $prefix.'GenericFixedWidthReader', + 'constructor' => array(4), + ); + + // Utf-8 + self::$_map['utf-?8'] = array( + 'class' => $prefix.'Utf8Reader', + 'constructor' => array(), + ); + + //7-8 bit charsets + self::$_map['(us-)?ascii'] = $singleByte; + self::$_map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; + self::$_map['windows-?125[0-9]'] = $singleByte; + self::$_map['cp-?[0-9]+'] = $singleByte; + self::$_map['ansi'] = $singleByte; + self::$_map['macintosh'] = $singleByte; + self::$_map['koi-?7'] = $singleByte; + self::$_map['koi-?8-?.+'] = $singleByte; + self::$_map['mik'] = $singleByte; + self::$_map['(cork|t1)'] = $singleByte; + self::$_map['v?iscii'] = $singleByte; + + //16 bits + self::$_map['(ucs-?2|utf-?16)'] = $doubleByte; + + //32 bits + self::$_map['(ucs-?4|utf-?32)'] = $fourBytes; + + // Fallback + self::$_map['.*'] = $singleByte; + } + + /** + * Returns a CharacterReader suitable for the charset applied. + * + * @param string $charset + * + * @return Swift_CharacterReader + */ + public function getReaderFor($charset) + { + $charset = trim(strtolower($charset)); + foreach (self::$_map as $pattern => $spec) { + $re = '/^'.$pattern.'$/D'; + if (preg_match($re, $charset)) { + if (!array_key_exists($pattern, self::$_loaded)) { + $reflector = new ReflectionClass($spec['class']); + if ($reflector->getConstructor()) { + $reader = $reflector->newInstanceArgs($spec['constructor']); + } else { + $reader = $reflector->newInstance(); + } + self::$_loaded[$pattern] = $reader; + } + + return self::$_loaded[$pattern]; + } + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php new file mode 100644 index 00000000000..717924f5d63 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream.php @@ -0,0 +1,89 @@ +setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } + + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->_charset = $charset; + $this->_charReader = null; + } + + /** + * Set the CharacterReaderFactory for multi charset support. + * + * @param Swift_CharacterReaderFactory $factory + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) + { + $this->_charReaderFactory = $factory; + } + + /** + * Overwrite this character stream using the byte sequence in the byte stream. + * + * @param Swift_OutputByteStream $os output stream to read from + */ + public function importByteStream(Swift_OutputByteStream $os) + { + if (!isset($this->_charReader)) { + $this->_charReader = $this->_charReaderFactory + ->getReaderFor($this->_charset); + } + + $startLength = $this->_charReader->getInitialByteSize(); + while (false !== $bytes = $os->read($startLength)) { + $c = array(); + for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { + $c[] = self::$_byteMap[$bytes[$i]]; + } + $size = count($c); + $need = $this->_charReader + ->validateByteSequence($c, $size); + if ($need > 0 && + false !== $bytes = $os->read($need)) { + for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { + $c[] = self::$_byteMap[$bytes[$i]]; + } + } + $this->_array[] = $c; + ++$this->_array_size; + } + } + + /** + * Import a string a bytes into this CharacterStream, overwriting any existing + * data in the stream. + * + * @param string $string + */ + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } + + /** + * Read $length characters from the stream and move the internal pointer + * $length further into the stream. + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->_offset == $this->_array_size) { + return false; + } + + // Don't use array slice + $arrays = array(); + $end = $length + $this->_offset; + for ($i = $this->_offset; $i < $end; ++$i) { + if (!isset($this->_array[$i])) { + break; + } + $arrays[] = $this->_array[$i]; + } + $this->_offset += $i - $this->_offset; // Limit function calls + $chars = false; + foreach ($arrays as $array) { + $chars .= implode('', array_map('chr', $array)); + } + + return $chars; + } + + /** + * Read $length characters from the stream and return a 1-dimensional array + * containing there octet values. + * + * @param int $length + * + * @return integer[] + */ + public function readBytes($length) + { + if ($this->_offset == $this->_array_size) { + return false; + } + $arrays = array(); + $end = $length + $this->_offset; + for ($i = $this->_offset; $i < $end; ++$i) { + if (!isset($this->_array[$i])) { + break; + } + $arrays[] = $this->_array[$i]; + } + $this->_offset += ($i - $this->_offset); // Limit function calls + + return call_user_func_array('array_merge', $arrays); + } + + /** + * Write $chars to the end of the stream. + * + * @param string $chars + */ + public function write($chars) + { + if (!isset($this->_charReader)) { + $this->_charReader = $this->_charReaderFactory->getReaderFor( + $this->_charset); + } + + $startLength = $this->_charReader->getInitialByteSize(); + + $fp = fopen('php://memory', 'w+b'); + fwrite($fp, $chars); + unset($chars); + fseek($fp, 0, SEEK_SET); + + $buffer = array(0); + $buf_pos = 1; + $buf_len = 1; + $has_datas = true; + do { + $bytes = array(); + // Buffer Filing + if ($buf_len - $buf_pos < $startLength) { + $buf = array_splice($buffer, $buf_pos); + $new = $this->_reloadBuffer($fp, 100); + if ($new) { + $buffer = array_merge($buf, $new); + $buf_len = count($buffer); + $buf_pos = 0; + } else { + $has_datas = false; + } + } + if ($buf_len - $buf_pos > 0) { + $size = 0; + for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) { + ++$size; + $bytes[] = $buffer[$buf_pos++]; + } + $need = $this->_charReader->validateByteSequence( + $bytes, $size); + if ($need > 0) { + if ($buf_len - $buf_pos < $need) { + $new = $this->_reloadBuffer($fp, $need); + + if ($new) { + $buffer = array_merge($buffer, $new); + $buf_len = count($buffer); + } + } + for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) { + $bytes[] = $buffer[$buf_pos++]; + } + } + $this->_array[] = $bytes; + ++$this->_array_size; + } + } while ($has_datas); + + fclose($fp); + } + + /** + * Move the internal pointer to $charOffset in the stream. + * + * @param int $charOffset + */ + public function setPointer($charOffset) + { + if ($charOffset > $this->_array_size) { + $charOffset = $this->_array_size; + } elseif ($charOffset < 0) { + $charOffset = 0; + } + $this->_offset = $charOffset; + } + + /** + * Empty the stream and reset the internal pointer. + */ + public function flushContents() + { + $this->_offset = 0; + $this->_array = array(); + $this->_array_size = 0; + } + + private function _reloadBuffer($fp, $len) + { + if (!feof($fp) && ($bytes = fread($fp, $len)) !== false) { + $buf = array(); + for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { + $buf[] = self::$_byteMap[$bytes[$i]]; + } + + return $buf; + } + + return false; + } + + private static function _initializeMaps() + { + if (!isset(self::$_charMap)) { + self::$_charMap = array(); + for ($byte = 0; $byte < 256; ++$byte) { + self::$_charMap[$byte] = chr($byte); + } + self::$_byteMap = array_flip(self::$_charMap); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php new file mode 100644 index 00000000000..1e8e2899672 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php @@ -0,0 +1,267 @@ + + */ +class Swift_CharacterStream_NgCharacterStream implements Swift_CharacterStream +{ + /** + * The char reader (lazy-loaded) for the current charset. + * + * @var Swift_CharacterReader + */ + private $_charReader; + + /** + * A factory for creating CharacterReader instances. + * + * @var Swift_CharacterReaderFactory + */ + private $_charReaderFactory; + + /** + * The character set this stream is using. + * + * @var string + */ + private $_charset; + + /** + * The data's stored as-is. + * + * @var string + */ + private $_datas = ''; + + /** + * Number of bytes in the stream. + * + * @var int + */ + private $_datasSize = 0; + + /** + * Map. + * + * @var mixed + */ + private $_map; + + /** + * Map Type. + * + * @var int + */ + private $_mapType = 0; + + /** + * Number of characters in the stream. + * + * @var int + */ + private $_charCount = 0; + + /** + * Position in the stream. + * + * @var int + */ + private $_currentPos = 0; + + /** + * Constructor. + * + * @param Swift_CharacterReaderFactory $factory + * @param string $charset + */ + public function __construct(Swift_CharacterReaderFactory $factory, $charset) + { + $this->setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } + + /* -- Changing parameters of the stream -- */ + + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->_charset = $charset; + $this->_charReader = null; + $this->_mapType = 0; + } + + /** + * Set the CharacterReaderFactory for multi charset support. + * + * @param Swift_CharacterReaderFactory $factory + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) + { + $this->_charReaderFactory = $factory; + } + + /** + * @see Swift_CharacterStream::flushContents() + */ + public function flushContents() + { + $this->_datas = null; + $this->_map = null; + $this->_charCount = 0; + $this->_currentPos = 0; + $this->_datasSize = 0; + } + + /** + * @see Swift_CharacterStream::importByteStream() + * + * @param Swift_OutputByteStream $os + */ + public function importByteStream(Swift_OutputByteStream $os) + { + $this->flushContents(); + $blocks = 512; + $os->setReadPointer(0); + while (false !== ($read = $os->read($blocks))) { + $this->write($read); + } + } + + /** + * @see Swift_CharacterStream::importString() + * + * @param string $string + */ + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } + + /** + * @see Swift_CharacterStream::read() + * + * @param int $length + * + * @return string + */ + public function read($length) + { + if ($this->_currentPos >= $this->_charCount) { + return false; + } + $ret = false; + $length = $this->_currentPos + $length > $this->_charCount ? $this->_charCount - $this->_currentPos : $length; + switch ($this->_mapType) { + case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: + $len = $length * $this->_map; + $ret = substr($this->_datas, + $this->_currentPos * $this->_map, + $len); + $this->_currentPos += $length; + break; + + case Swift_CharacterReader::MAP_TYPE_INVALID: + $ret = ''; + for (; $this->_currentPos < $length; ++$this->_currentPos) { + if (isset($this->_map[$this->_currentPos])) { + $ret .= '?'; + } else { + $ret .= $this->_datas[$this->_currentPos]; + } + } + break; + + case Swift_CharacterReader::MAP_TYPE_POSITIONS: + $end = $this->_currentPos + $length; + $end = $end > $this->_charCount ? $this->_charCount : $end; + $ret = ''; + $start = 0; + if ($this->_currentPos > 0) { + $start = $this->_map['p'][$this->_currentPos - 1]; + } + $to = $start; + for (; $this->_currentPos < $end; ++$this->_currentPos) { + if (isset($this->_map['i'][$this->_currentPos])) { + $ret .= substr($this->_datas, $start, $to - $start).'?'; + $start = $this->_map['p'][$this->_currentPos]; + } else { + $to = $this->_map['p'][$this->_currentPos]; + } + } + $ret .= substr($this->_datas, $start, $to - $start); + break; + } + + return $ret; + } + + /** + * @see Swift_CharacterStream::readBytes() + * + * @param int $length + * + * @return integer[] + */ + public function readBytes($length) + { + $read = $this->read($length); + if ($read !== false) { + $ret = array_map('ord', str_split($read, 1)); + + return $ret; + } + + return false; + } + + /** + * @see Swift_CharacterStream::setPointer() + * + * @param int $charOffset + */ + public function setPointer($charOffset) + { + if ($this->_charCount < $charOffset) { + $charOffset = $this->_charCount; + } + $this->_currentPos = $charOffset; + } + + /** + * @see Swift_CharacterStream::write() + * + * @param string $chars + */ + public function write($chars) + { + if (!isset($this->_charReader)) { + $this->_charReader = $this->_charReaderFactory->getReaderFor( + $this->_charset); + $this->_map = array(); + $this->_mapType = $this->_charReader->getMapType(); + } + $ignored = ''; + $this->_datas .= $chars; + $this->_charCount += $this->_charReader->getCharPositions(substr($this->_datas, $this->_datasSize), $this->_datasSize, $this->_map, $ignored); + if ($ignored !== false) { + $this->_datasSize = strlen($this->_datas) - strlen($ignored); + } else { + $this->_datasSize = strlen($this->_datas); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ConfigurableSpool.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ConfigurableSpool.php new file mode 100644 index 00000000000..4ae5bacfc40 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ConfigurableSpool.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Base class for Spools (implements time and message limits). + * + * @author Fabien Potencier + */ +abstract class Swift_ConfigurableSpool implements Swift_Spool +{ + /** The maximum number of messages to send per flush */ + private $_message_limit; + + /** The time limit per flush */ + private $_time_limit; + + /** + * Sets the maximum number of messages to send per flush. + * + * @param int $limit + */ + public function setMessageLimit($limit) + { + $this->_message_limit = (int) $limit; + } + + /** + * Gets the maximum number of messages to send per flush. + * + * @return int The limit + */ + public function getMessageLimit() + { + return $this->_message_limit; + } + + /** + * Sets the time limit (in seconds) per flush. + * + * @param int $limit The limit + */ + public function setTimeLimit($limit) + { + $this->_time_limit = (int) $limit; + } + + /** + * Gets the time limit (in seconds) per flush. + * + * @return int The limit + */ + public function getTimeLimit() + { + return $this->_time_limit; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php new file mode 100644 index 00000000000..8c1074a3a37 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyContainer.php @@ -0,0 +1,373 @@ +_store); + } + + /** + * Test if an item is registered in this container with the given name. + * + * @see register() + * + * @param string $itemName + * + * @return bool + */ + public function has($itemName) + { + return array_key_exists($itemName, $this->_store) + && isset($this->_store[$itemName]['lookupType']); + } + + /** + * Lookup the item with the given $itemName. + * + * @see register() + * + * @param string $itemName + * + * @throws Swift_DependencyException If the dependency is not found + * + * @return mixed + */ + public function lookup($itemName) + { + if (!$this->has($itemName)) { + throw new Swift_DependencyException( + 'Cannot lookup dependency "'.$itemName.'" since it is not registered.' + ); + } + + switch ($this->_store[$itemName]['lookupType']) { + case self::TYPE_ALIAS: + return $this->_createAlias($itemName); + case self::TYPE_VALUE: + return $this->_getValue($itemName); + case self::TYPE_INSTANCE: + return $this->_createNewInstance($itemName); + case self::TYPE_SHARED: + return $this->_createSharedInstance($itemName); + } + } + + /** + * Create an array of arguments passed to the constructor of $itemName. + * + * @param string $itemName + * + * @return array + */ + public function createDependenciesFor($itemName) + { + $args = array(); + if (isset($this->_store[$itemName]['args'])) { + $args = $this->_resolveArgs($this->_store[$itemName]['args']); + } + + return $args; + } + + /** + * Register a new dependency with $itemName. + * + * This method returns the current DependencyContainer instance because it + * requires the use of the fluid interface to set the specific details for the + * dependency. + * + * @see asNewInstanceOf(), asSharedInstanceOf(), asValue() + * + * @param string $itemName + * + * @return Swift_DependencyContainer + */ + public function register($itemName) + { + $this->_store[$itemName] = array(); + $this->_endPoint = &$this->_store[$itemName]; + + return $this; + } + + /** + * Specify the previously registered item as a literal value. + * + * {@link register()} must be called before this will work. + * + * @param mixed $value + * + * @return Swift_DependencyContainer + */ + public function asValue($value) + { + $endPoint = &$this->_getEndPoint(); + $endPoint['lookupType'] = self::TYPE_VALUE; + $endPoint['value'] = $value; + + return $this; + } + + /** + * Specify the previously registered item as an alias of another item. + * + * @param string $lookup + * + * @return Swift_DependencyContainer + */ + public function asAliasOf($lookup) + { + $endPoint = &$this->_getEndPoint(); + $endPoint['lookupType'] = self::TYPE_ALIAS; + $endPoint['ref'] = $lookup; + + return $this; + } + + /** + * Specify the previously registered item as a new instance of $className. + * + * {@link register()} must be called before this will work. + * Any arguments can be set with {@link withDependencies()}, + * {@link addConstructorValue()} or {@link addConstructorLookup()}. + * + * @see withDependencies(), addConstructorValue(), addConstructorLookup() + * + * @param string $className + * + * @return Swift_DependencyContainer + */ + public function asNewInstanceOf($className) + { + $endPoint = &$this->_getEndPoint(); + $endPoint['lookupType'] = self::TYPE_INSTANCE; + $endPoint['className'] = $className; + + return $this; + } + + /** + * Specify the previously registered item as a shared instance of $className. + * + * {@link register()} must be called before this will work. + * + * @param string $className + * + * @return Swift_DependencyContainer + */ + public function asSharedInstanceOf($className) + { + $endPoint = &$this->_getEndPoint(); + $endPoint['lookupType'] = self::TYPE_SHARED; + $endPoint['className'] = $className; + + return $this; + } + + /** + * Specify a list of injected dependencies for the previously registered item. + * + * This method takes an array of lookup names. + * + * @see addConstructorValue(), addConstructorLookup() + * + * @param array $lookups + * + * @return Swift_DependencyContainer + */ + public function withDependencies(array $lookups) + { + $endPoint = &$this->_getEndPoint(); + $endPoint['args'] = array(); + foreach ($lookups as $lookup) { + $this->addConstructorLookup($lookup); + } + + return $this; + } + + /** + * Specify a literal (non looked up) value for the constructor of the + * previously registered item. + * + * @see withDependencies(), addConstructorLookup() + * + * @param mixed $value + * + * @return Swift_DependencyContainer + */ + public function addConstructorValue($value) + { + $endPoint = &$this->_getEndPoint(); + if (!isset($endPoint['args'])) { + $endPoint['args'] = array(); + } + $endPoint['args'][] = array('type' => 'value', 'item' => $value); + + return $this; + } + + /** + * Specify a dependency lookup for the constructor of the previously + * registered item. + * + * @see withDependencies(), addConstructorValue() + * + * @param string $lookup + * + * @return Swift_DependencyContainer + */ + public function addConstructorLookup($lookup) + { + $endPoint = &$this->_getEndPoint(); + if (!isset($this->_endPoint['args'])) { + $endPoint['args'] = array(); + } + $endPoint['args'][] = array('type' => 'lookup', 'item' => $lookup); + + return $this; + } + + /** Get the literal value with $itemName */ + private function _getValue($itemName) + { + return $this->_store[$itemName]['value']; + } + + /** Resolve an alias to another item */ + private function _createAlias($itemName) + { + return $this->lookup($this->_store[$itemName]['ref']); + } + + /** Create a fresh instance of $itemName */ + private function _createNewInstance($itemName) + { + $reflector = new ReflectionClass($this->_store[$itemName]['className']); + if ($reflector->getConstructor()) { + return $reflector->newInstanceArgs( + $this->createDependenciesFor($itemName) + ); + } + + return $reflector->newInstance(); + } + + /** Create and register a shared instance of $itemName */ + private function _createSharedInstance($itemName) + { + if (!isset($this->_store[$itemName]['instance'])) { + $this->_store[$itemName]['instance'] = $this->_createNewInstance($itemName); + } + + return $this->_store[$itemName]['instance']; + } + + /** Get the current endpoint in the store */ + private function &_getEndPoint() + { + if (!isset($this->_endPoint)) { + throw new BadMethodCallException( + 'Component must first be registered by calling register()' + ); + } + + return $this->_endPoint; + } + + /** Get an argument list with dependencies resolved */ + private function _resolveArgs(array $args) + { + $resolved = array(); + foreach ($args as $argDefinition) { + switch ($argDefinition['type']) { + case 'lookup': + $resolved[] = $this->_lookupRecursive($argDefinition['item']); + break; + case 'value': + $resolved[] = $argDefinition['item']; + break; + } + } + + return $resolved; + } + + /** Resolve a single dependency with an collections */ + private function _lookupRecursive($item) + { + if (is_array($item)) { + $collection = array(); + foreach ($item as $k => $v) { + $collection[$k] = $this->_lookupRecursive($v); + } + + return $collection; + } + + return $this->lookup($item); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyException.php new file mode 100644 index 00000000000..799d38d8334 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/DependencyException.php @@ -0,0 +1,27 @@ +createDependenciesFor('mime.embeddedfile') + ); + + $this->setBody($data); + $this->setFilename($filename); + if ($contentType) { + $this->setContentType($contentType); + } + } + + /** + * Create a new EmbeddedFile. + * + * @param string|Swift_OutputByteStream $data + * @param string $filename + * @param string $contentType + * + * @return Swift_Mime_EmbeddedFile + */ + public static function newInstance($data = null, $filename = null, $contentType = null) + { + return new self($data, $filename, $contentType); + } + + /** + * Create a new EmbeddedFile from a filesystem path. + * + * @param string $path + * + * @return Swift_Mime_EmbeddedFile + */ + public static function fromPath($path) + { + return self::newInstance()->setFile( + new Swift_ByteStream_FileByteStream($path) + ); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder.php new file mode 100644 index 00000000000..2073abca1b1 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder.php @@ -0,0 +1,28 @@ += $maxLineLength || 76 < $maxLineLength) { + $maxLineLength = 76; + } + + $encodedString = base64_encode($string); + $firstLine = ''; + + if (0 != $firstLineOffset) { + $firstLine = substr( + $encodedString, 0, $maxLineLength - $firstLineOffset + )."\r\n"; + $encodedString = substr( + $encodedString, $maxLineLength - $firstLineOffset + ); + } + + return $firstLine.trim(chunk_split($encodedString, $maxLineLength, "\r\n")); + } + + /** + * Does nothing. + */ + public function charsetChanged($charset) + { + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php new file mode 100644 index 00000000000..8a81fe39709 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php @@ -0,0 +1,300 @@ + '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', + 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', + 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', + 15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13', + 20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18', + 25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D', + 30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22', + 35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27', + 40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C', + 45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31', + 50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36', + 55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B', + 60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40', + 65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45', + 70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A', + 75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F', + 80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54', + 85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59', + 90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E', + 95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63', + 100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68', + 105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D', + 110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72', + 115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77', + 120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C', + 125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81', + 130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86', + 135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B', + 140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90', + 145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95', + 150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A', + 155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F', + 160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4', + 165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9', + 170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE', + 175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3', + 180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8', + 185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD', + 190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2', + 195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7', + 200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC', + 205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1', + 210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6', + 215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB', + 220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0', + 225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5', + 230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA', + 235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF', + 240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4', + 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', + 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', + 255 => '=FF', + ); + + protected static $_safeMapShare = array(); + + /** + * A map of non-encoded ascii characters. + * + * @var string[] + */ + protected $_safeMap = array(); + + /** + * Creates a new QpEncoder for the given CharacterStream. + * + * @param Swift_CharacterStream $charStream to use for reading characters + * @param Swift_StreamFilter $filter if input should be canonicalized + */ + public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null) + { + $this->_charStream = $charStream; + if (!isset(self::$_safeMapShare[$this->getSafeMapShareId()])) { + $this->initSafeMap(); + self::$_safeMapShare[$this->getSafeMapShareId()] = $this->_safeMap; + } else { + $this->_safeMap = self::$_safeMapShare[$this->getSafeMapShareId()]; + } + $this->_filter = $filter; + } + + public function __sleep() + { + return array('_charStream', '_filter'); + } + + public function __wakeup() + { + if (!isset(self::$_safeMapShare[$this->getSafeMapShareId()])) { + $this->initSafeMap(); + self::$_safeMapShare[$this->getSafeMapShareId()] = $this->_safeMap; + } else { + $this->_safeMap = self::$_safeMapShare[$this->getSafeMapShareId()]; + } + } + + protected function getSafeMapShareId() + { + return get_class($this); + } + + protected function initSafeMap() + { + foreach (array_merge( + array(0x09, 0x20), range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) { + $this->_safeMap[$byte] = chr($byte); + } + } + + /** + * Takes an unencoded string and produces a QP encoded string from it. + * + * QP encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * + * @param string $string to encode + * @param int $firstLineOffset, optional + * @param int $maxLineLength, optional 0 indicates the default of 76 chars + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($maxLineLength > 76 || $maxLineLength <= 0) { + $maxLineLength = 76; + } + + $thisLineLength = $maxLineLength - $firstLineOffset; + + $lines = array(); + $lNo = 0; + $lines[$lNo] = ''; + $currentLine = &$lines[$lNo++]; + $size = $lineLen = 0; + + $this->_charStream->flushContents(); + $this->_charStream->importString($string); + + // Fetching more than 4 chars at one is slower, as is fetching fewer bytes + // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 + // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes + while (false !== $bytes = $this->_nextSequence()) { + // If we're filtering the input + if (isset($this->_filter)) { + // If we can't filter because we need more bytes + while ($this->_filter->shouldBuffer($bytes)) { + // Then collect bytes into the buffer + if (false === $moreBytes = $this->_nextSequence(1)) { + break; + } + + foreach ($moreBytes as $b) { + $bytes[] = $b; + } + } + // And filter them + $bytes = $this->_filter->filter($bytes); + } + + $enc = $this->_encodeByteSequence($bytes, $size); + + $i = strpos($enc, '=0D=0A'); + $newLineLength = $lineLen + ($i === false ? $size : $i); + + if ($currentLine && $newLineLength >= $thisLineLength) { + $lines[$lNo] = ''; + $currentLine = &$lines[$lNo++]; + $thisLineLength = $maxLineLength; + $lineLen = 0; + } + + $currentLine .= $enc; + + if ($i === false) { + $lineLen += $size; + } else { + // 6 is the length of '=0D=0A'. + $lineLen = $size - strrpos($enc, '=0D=0A') - 6; + } + } + + return $this->_standardize(implode("=\r\n", $lines)); + } + + /** + * Updates the charset used. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->_charStream->setCharacterSet($charset); + } + + /** + * Encode the given byte array into a verbatim QP form. + * + * @param integer[] $bytes + * @param int $size + * + * @return string + */ + protected function _encodeByteSequence(array $bytes, &$size) + { + $ret = ''; + $size = 0; + foreach ($bytes as $b) { + if (isset($this->_safeMap[$b])) { + $ret .= $this->_safeMap[$b]; + ++$size; + } else { + $ret .= self::$_qpMap[$b]; + $size += 3; + } + } + + return $ret; + } + + /** + * Get the next sequence of bytes to read from the char stream. + * + * @param int $size number of bytes to read + * + * @return integer[] + */ + protected function _nextSequence($size = 4) + { + return $this->_charStream->readBytes($size); + } + + /** + * Make sure CRLF is correct and HT/SPACE are in valid places. + * + * @param string $string + * + * @return string + */ + protected function _standardize($string) + { + $string = str_replace(array("\t=0D=0A", ' =0D=0A', '=0D=0A'), + array("=09\r\n", "=20\r\n", "\r\n"), $string + ); + switch ($end = ord(substr($string, -1))) { + case 0x09: + case 0x20: + $string = substr_replace($string, self::$_qpMap[$end], -1); + } + + return $string; + } + + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->_charStream = clone $this->_charStream; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php new file mode 100644 index 00000000000..b0215e88380 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php @@ -0,0 +1,92 @@ +_charStream = $charStream; + } + + /** + * Takes an unencoded string and produces a string encoded according to + * RFC 2231 from it. + * + * @param string $string + * @param int $firstLineOffset + * @param int $maxLineLength optional, 0 indicates the default of 75 bytes + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + $lines = array(); + $lineCount = 0; + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; + + if (0 >= $maxLineLength) { + $maxLineLength = 75; + } + + $this->_charStream->flushContents(); + $this->_charStream->importString($string); + + $thisLineLength = $maxLineLength - $firstLineOffset; + + while (false !== $char = $this->_charStream->read(4)) { + $encodedChar = rawurlencode($char); + if (0 != strlen($currentLine) + && strlen($currentLine.$encodedChar) > $thisLineLength) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; + $thisLineLength = $maxLineLength; + } + $currentLine .= $encodedChar; + } + + return implode("\r\n", $lines); + } + + /** + * Updates the charset used. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->_charStream->setCharacterSet($charset); + } + + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->_charStream = clone $this->_charStream; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Encoding.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoding.php new file mode 100644 index 00000000000..253977b608e --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Encoding.php @@ -0,0 +1,64 @@ +lookup($key); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php new file mode 100644 index 00000000000..7dc381d9844 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandEvent.php @@ -0,0 +1,65 @@ +_command = $command; + $this->_successCodes = $successCodes; + } + + /** + * Get the command which was sent to the server. + * + * @return string + */ + public function getCommand() + { + return $this->_command; + } + + /** + * Get the numeric response codes which indicate success for this command. + * + * @return integer[] + */ + public function getSuccessCodes() + { + return $this->_successCodes; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php new file mode 100644 index 00000000000..7545404e765 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/CommandListener.php @@ -0,0 +1,24 @@ +_source = $source; + } + + /** + * Get the source object of this event. + * + * @return object + */ + public function getSource() + { + return $this->_source; + } + + /** + * Prevent this Event from bubbling any further up the stack. + * + * @param bool $cancel, optional + */ + public function cancelBubble($cancel = true) + { + $this->_bubbleCancelled = $cancel; + } + + /** + * Returns true if this Event will not bubble any further up the stack. + * + * @return bool + */ + public function bubbleCancelled() + { + return $this->_bubbleCancelled; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php new file mode 100644 index 00000000000..2e92ba9404f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php @@ -0,0 +1,65 @@ +_response = $response; + $this->_valid = $valid; + } + + /** + * Get the response which was received from the server. + * + * @return string + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Get the success status of this Event. + * + * @return bool + */ + public function isValid() + { + return $this->_valid; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php new file mode 100644 index 00000000000..c40919d210f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/ResponseListener.php @@ -0,0 +1,24 @@ +_message = $message; + $this->_result = self::RESULT_PENDING; + } + + /** + * Get the Transport used to send the Message. + * + * @return Swift_Transport + */ + public function getTransport() + { + return $this->getSource(); + } + + /** + * Get the Message being sent. + * + * @return Swift_Mime_Message + */ + public function getMessage() + { + return $this->_message; + } + + /** + * Set the array of addresses that failed in sending. + * + * @param array $recipients + */ + public function setFailedRecipients($recipients) + { + $this->_failedRecipients = $recipients; + } + + /** + * Get an recipient addresses which were not accepted for delivery. + * + * @return string[] + */ + public function getFailedRecipients() + { + return $this->_failedRecipients; + } + + /** + * Set the result of sending. + * + * @param int $result + */ + public function setResult($result) + { + $this->_result = $result; + } + + /** + * Get the result of this Event. + * + * The return value is a bitmask from + * {@see RESULT_PENDING, RESULT_SUCCESS, RESULT_TENTATIVE, RESULT_FAILED} + * + * @return int + */ + public function getResult() + { + return $this->_result; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php new file mode 100644 index 00000000000..d922e1bfa96 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/SendListener.php @@ -0,0 +1,31 @@ +_eventMap = array( + 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', + 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', + 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', + 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', + 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener', + ); + } + + /** + * Create a new SendEvent for $source and $message. + * + * @param Swift_Transport $source + * @param Swift_Mime_Message + * + * @return Swift_Events_SendEvent + */ + public function createSendEvent(Swift_Transport $source, Swift_Mime_Message $message) + { + return new Swift_Events_SendEvent($source, $message); + } + + /** + * Create a new CommandEvent for $source and $command. + * + * @param Swift_Transport $source + * @param string $command That will be executed + * @param array $successCodes That are needed + * + * @return Swift_Events_CommandEvent + */ + public function createCommandEvent(Swift_Transport $source, $command, $successCodes = array()) + { + return new Swift_Events_CommandEvent($source, $command, $successCodes); + } + + /** + * Create a new ResponseEvent for $source and $response. + * + * @param Swift_Transport $source + * @param string $response + * @param bool $valid If the response is valid + * + * @return Swift_Events_ResponseEvent + */ + public function createResponseEvent(Swift_Transport $source, $response, $valid) + { + return new Swift_Events_ResponseEvent($source, $response, $valid); + } + + /** + * Create a new TransportChangeEvent for $source. + * + * @param Swift_Transport $source + * + * @return Swift_Events_TransportChangeEvent + */ + public function createTransportChangeEvent(Swift_Transport $source) + { + return new Swift_Events_TransportChangeEvent($source); + } + + /** + * Create a new TransportExceptionEvent for $source. + * + * @param Swift_Transport $source + * @param Swift_TransportException $ex + * + * @return Swift_Events_TransportExceptionEvent + */ + public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex) + { + return new Swift_Events_TransportExceptionEvent($source, $ex); + } + + /** + * Bind an event listener to this dispatcher. + * + * @param Swift_Events_EventListener $listener + */ + public function bindEventListener(Swift_Events_EventListener $listener) + { + foreach ($this->_listeners as $l) { + // Already loaded + if ($l === $listener) { + return; + } + } + $this->_listeners[] = $listener; + } + + /** + * Dispatch the given Event to all suitable listeners. + * + * @param Swift_Events_EventObject $evt + * @param string $target method + */ + public function dispatchEvent(Swift_Events_EventObject $evt, $target) + { + $this->_prepareBubbleQueue($evt); + $this->_bubble($evt, $target); + } + + /** Queue listeners on a stack ready for $evt to be bubbled up it */ + private function _prepareBubbleQueue(Swift_Events_EventObject $evt) + { + $this->_bubbleQueue = array(); + $evtClass = get_class($evt); + foreach ($this->_listeners as $listener) { + if (array_key_exists($evtClass, $this->_eventMap) + && ($listener instanceof $this->_eventMap[$evtClass])) { + $this->_bubbleQueue[] = $listener; + } + } + } + + /** Bubble $evt up the stack calling $target() on each listener */ + private function _bubble(Swift_Events_EventObject $evt, $target) + { + if (!$evt->bubbleCancelled() && $listener = array_shift($this->_bubbleQueue)) { + $listener->$target($evt); + $this->_bubble($evt, $target); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php new file mode 100644 index 00000000000..a8972fda9a4 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php @@ -0,0 +1,27 @@ +getSource(); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php new file mode 100644 index 00000000000..253165de89f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php @@ -0,0 +1,45 @@ +_exception = $ex; + } + + /** + * Get the TransportException thrown. + * + * @return Swift_TransportException + */ + public function getException() + { + return $this->_exception; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php new file mode 100644 index 00000000000..cc3c0993793 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php @@ -0,0 +1,24 @@ +createDependenciesFor('transport.failover') + ); + + $this->setTransports($transports); + } + + /** + * Create a new FailoverTransport instance. + * + * @param Swift_Transport[] $transports + * + * @return Swift_FailoverTransport + */ + public static function newInstance($transports = array()) + { + return new self($transports); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php b/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php new file mode 100644 index 00000000000..220853989d3 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/FileSpool.php @@ -0,0 +1,208 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Stores Messages on the filesystem. + * + * @author Fabien Potencier + * @author Xavier De Cock + */ +class Swift_FileSpool extends Swift_ConfigurableSpool +{ + /** The spool directory */ + private $_path; + + /** + * File WriteRetry Limit. + * + * @var int + */ + private $_retryLimit = 10; + + /** + * Create a new FileSpool. + * + * @param string $path + * + * @throws Swift_IoException + */ + public function __construct($path) + { + $this->_path = $path; + + if (!file_exists($this->_path)) { + if (!mkdir($this->_path, 0777, true)) { + throw new Swift_IoException('Unable to create Path ['.$this->_path.']'); + } + } + } + + /** + * Tests if this Spool mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } + + /** + * Starts this Spool mechanism. + */ + public function start() + { + } + + /** + * Stops this Spool mechanism. + */ + public function stop() + { + } + + /** + * Allow to manage the enqueuing retry limit. + * + * Default, is ten and allows over 64^20 different fileNames + * + * @param int $limit + */ + public function setRetryLimit($limit) + { + $this->_retryLimit = $limit; + } + + /** + * Queues a message. + * + * @param Swift_Mime_Message $message The message to store + * + * @throws Swift_IoException + * + * @return bool + */ + public function queueMessage(Swift_Mime_Message $message) + { + $ser = serialize($message); + $fileName = $this->_path.'/'.$this->getRandomString(10); + for ($i = 0; $i < $this->_retryLimit; ++$i) { + /* We try an exclusive creation of the file. This is an atomic operation, it avoid locking mechanism */ + $fp = @fopen($fileName.'.message', 'x'); + if (false !== $fp) { + if (false === fwrite($fp, $ser)) { + return false; + } + + return fclose($fp); + } else { + /* The file already exists, we try a longer fileName */ + $fileName .= $this->getRandomString(1); + } + } + + throw new Swift_IoException('Unable to create a file for enqueuing Message'); + } + + /** + * Execute a recovery if for any reason a process is sending for too long. + * + * @param int $timeout in second Defaults is for very slow smtp responses + */ + public function recover($timeout = 900) + { + foreach (new DirectoryIterator($this->_path) as $file) { + $file = $file->getRealPath(); + + if (substr($file, -16) == '.message.sending') { + $lockedtime = filectime($file); + if ((time() - $lockedtime) > $timeout) { + rename($file, substr($file, 0, -8)); + } + } + } + } + + /** + * Sends messages using the given transport instance. + * + * @param Swift_Transport $transport A transport instance + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent e-mail's + */ + public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) + { + $directoryIterator = new DirectoryIterator($this->_path); + + /* Start the transport only if there are queued files to send */ + if (!$transport->isStarted()) { + foreach ($directoryIterator as $file) { + if (substr($file->getRealPath(), -8) == '.message') { + $transport->start(); + break; + } + } + } + + $failedRecipients = (array) $failedRecipients; + $count = 0; + $time = time(); + foreach ($directoryIterator as $file) { + $file = $file->getRealPath(); + + if (substr($file, -8) != '.message') { + continue; + } + + /* We try a rename, it's an atomic operation, and avoid locking the file */ + if (rename($file, $file.'.sending')) { + $message = unserialize(file_get_contents($file.'.sending')); + + $count += $transport->send($message, $failedRecipients); + + unlink($file.'.sending'); + } else { + /* This message has just been catched by another process */ + continue; + } + + if ($this->getMessageLimit() && $count >= $this->getMessageLimit()) { + break; + } + + if ($this->getTimeLimit() && (time() - $time) >= $this->getTimeLimit()) { + break; + } + } + + return $count; + } + + /** + * Returns a random string needed to generate a fileName for the queue. + * + * @param int $count + * + * @return string + */ + protected function getRandomString($count) + { + // This string MUST stay FS safe, avoid special chars + $base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'; + $ret = ''; + $strlen = strlen($base); + for ($i = 0; $i < $count; ++$i) { + $ret .= $base[((int) rand(0, $strlen - 1))]; + } + + return $ret; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/FileStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/FileStream.php new file mode 100644 index 00000000000..0b24db1ce41 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/FileStream.php @@ -0,0 +1,24 @@ +setFile( + new Swift_ByteStream_FileByteStream($path) + ); + + return $image; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php new file mode 100644 index 00000000000..56efc7593ac --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/InputByteStream.php @@ -0,0 +1,75 @@ +_stream = $stream; + } + + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + $this->_prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $this->_contents[$nsKey][$itemKey] = $string; + break; + case self::MODE_APPEND: + if (!$this->hasKey($nsKey, $itemKey)) { + $this->_contents[$nsKey][$itemKey] = ''; + } + $this->_contents[$nsKey][$itemKey] .= $string; + break; + default: + throw new Swift_SwiftException( + 'Invalid mode ['.$mode.'] used to set nsKey='. + $nsKey.', itemKey='.$itemKey + ); + } + } + + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_OutputByteStream $os + * @param int $mode + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) + { + $this->_prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $this->clearKey($nsKey, $itemKey); + case self::MODE_APPEND: + if (!$this->hasKey($nsKey, $itemKey)) { + $this->_contents[$nsKey][$itemKey] = ''; + } + while (false !== $bytes = $os->read(8192)) { + $this->_contents[$nsKey][$itemKey] .= $bytes; + } + break; + default: + throw new Swift_SwiftException( + 'Invalid mode ['.$mode.'] used to set nsKey='. + $nsKey.', itemKey='.$itemKey + ); + } + } + + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $writeThrough + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) + { + $is = clone $this->_stream; + $is->setKeyCache($this); + $is->setNsKey($nsKey); + $is->setItemKey($itemKey); + if (isset($writeThrough)) { + $is->setWriteThroughStream($writeThrough); + } + + return $is; + } + + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @return string + */ + public function getString($nsKey, $itemKey) + { + $this->_prepareCache($nsKey); + if ($this->hasKey($nsKey, $itemKey)) { + return $this->_contents[$nsKey][$itemKey]; + } + } + + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + $this->_prepareCache($nsKey); + $is->write($this->getString($nsKey, $itemKey)); + } + + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey) + { + $this->_prepareCache($nsKey); + + return array_key_exists($itemKey, $this->_contents[$nsKey]); + } + + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + unset($this->_contents[$nsKey][$itemKey]); + } + + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey) + { + unset($this->_contents[$nsKey]); + } + + /** + * Initialize the namespace of $nsKey if needed. + * + * @param string $nsKey + */ + private function _prepareCache($nsKey) + { + if (!array_key_exists($nsKey, $this->_contents)) { + $this->_contents[$nsKey] = array(); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php new file mode 100644 index 00000000000..453f50a15db --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php @@ -0,0 +1,321 @@ +_stream = $stream; + $this->_path = $path; + + if (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime() == 1) { + $this->_quotes = true; + } + } + + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + * + * @throws Swift_IoException + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + $this->_prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + break; + case self::MODE_APPEND: + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); + break; + default: + throw new Swift_SwiftException( + 'Invalid mode ['.$mode.'] used to set nsKey='. + $nsKey.', itemKey='.$itemKey + ); + break; + } + fwrite($fp, $string); + $this->_freeHandle($nsKey, $itemKey); + } + + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * + * @see MODE_WRITE, MODE_APPEND + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_OutputByteStream $os + * @param int $mode + * + * @throws Swift_IoException + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) + { + $this->_prepareCache($nsKey); + switch ($mode) { + case self::MODE_WRITE: + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + break; + case self::MODE_APPEND: + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); + break; + default: + throw new Swift_SwiftException( + 'Invalid mode ['.$mode.'] used to set nsKey='. + $nsKey.', itemKey='.$itemKey + ); + break; + } + while (false !== $bytes = $os->read(8192)) { + fwrite($fp, $bytes); + } + $this->_freeHandle($nsKey, $itemKey); + } + + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * + * NOTE: The stream will always write in append mode. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $writeThrough + * + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) + { + $is = clone $this->_stream; + $is->setKeyCache($this); + $is->setNsKey($nsKey); + $is->setItemKey($itemKey); + if (isset($writeThrough)) { + $is->setWriteThroughStream($writeThrough); + } + + return $is; + } + + /** + * Get data back out of the cache as a string. + * + * @param string $nsKey + * @param string $itemKey + * + * @throws Swift_IoException + * + * @return string + */ + public function getString($nsKey, $itemKey) + { + $this->_prepareCache($nsKey); + if ($this->hasKey($nsKey, $itemKey)) { + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + if ($this->_quotes) { + ini_set('magic_quotes_runtime', 0); + } + $str = ''; + while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { + $str .= $bytes; + } + if ($this->_quotes) { + ini_set('magic_quotes_runtime', 1); + } + $this->_freeHandle($nsKey, $itemKey); + + return $str; + } + } + + /** + * Get data back out of the cache as a ByteStream. + * + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + if ($this->hasKey($nsKey, $itemKey)) { + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + if ($this->_quotes) { + ini_set('magic_quotes_runtime', 0); + } + while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { + $is->write($bytes); + } + if ($this->_quotes) { + ini_set('magic_quotes_runtime', 1); + } + $this->_freeHandle($nsKey, $itemKey); + } + } + + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * + * @param string $nsKey + * @param string $itemKey + * + * @return bool + */ + public function hasKey($nsKey, $itemKey) + { + return is_file($this->_path.'/'.$nsKey.'/'.$itemKey); + } + + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + if ($this->hasKey($nsKey, $itemKey)) { + $this->_freeHandle($nsKey, $itemKey); + unlink($this->_path.'/'.$nsKey.'/'.$itemKey); + } + } + + /** + * Clear all data in the namespace $nsKey if it exists. + * + * @param string $nsKey + */ + public function clearAll($nsKey) + { + if (array_key_exists($nsKey, $this->_keys)) { + foreach ($this->_keys[$nsKey] as $itemKey => $null) { + $this->clearKey($nsKey, $itemKey); + } + if (is_dir($this->_path.'/'.$nsKey)) { + rmdir($this->_path.'/'.$nsKey); + } + unset($this->_keys[$nsKey]); + } + } + + /** + * Initialize the namespace of $nsKey if needed. + * + * @param string $nsKey + */ + private function _prepareCache($nsKey) + { + $cacheDir = $this->_path.'/'.$nsKey; + if (!is_dir($cacheDir)) { + if (!mkdir($cacheDir)) { + throw new Swift_IoException('Failed to create cache directory '.$cacheDir); + } + $this->_keys[$nsKey] = array(); + } + } + + /** + * Get a file handle on the cache item. + * + * @param string $nsKey + * @param string $itemKey + * @param int $position + * + * @return resource + */ + private function _getHandle($nsKey, $itemKey, $position) + { + if (!isset($this->_keys[$nsKey][$itemKey])) { + $openMode = $this->hasKey($nsKey, $itemKey) ? 'r+b' : 'w+b'; + $fp = fopen($this->_path.'/'.$nsKey.'/'.$itemKey, $openMode); + $this->_keys[$nsKey][$itemKey] = $fp; + } + if (self::POSITION_START == $position) { + fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_SET); + } elseif (self::POSITION_END == $position) { + fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_END); + } + + return $this->_keys[$nsKey][$itemKey]; + } + + private function _freeHandle($nsKey, $itemKey) + { + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_CURRENT); + fclose($fp); + $this->_keys[$nsKey][$itemKey] = null; + } + + /** + * Destructor. + */ + public function __destruct() + { + foreach ($this->_keys as $nsKey => $null) { + $this->clearAll($nsKey); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php new file mode 100644 index 00000000000..af80bdca6bf --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php @@ -0,0 +1,51 @@ +_keyCache = $keyCache; + } + + /** + * Specify a stream to write through for each write(). + * + * @param Swift_InputByteStream $is + */ + public function setWriteThroughStream(Swift_InputByteStream $is) + { + $this->_writeThrough = $is; + } + + /** + * Writes $bytes to the end of the stream. + * + * @param string $bytes + * @param Swift_InputByteStream $is optional + */ + public function write($bytes, Swift_InputByteStream $is = null) + { + $this->_keyCache->setString( + $this->_nsKey, $this->_itemKey, $bytes, Swift_KeyCache::MODE_APPEND + ); + if (isset($is)) { + $is->write($bytes); + } + if (isset($this->_writeThrough)) { + $this->_writeThrough->write($bytes); + } + } + + /** + * Not used. + */ + public function commit() + { + } + + /** + * Not used. + */ + public function bind(Swift_InputByteStream $is) + { + } + + /** + * Not used. + */ + public function unbind(Swift_InputByteStream $is) + { + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + */ + public function flushBuffers() + { + $this->_keyCache->clearKey($this->_nsKey, $this->_itemKey); + } + + /** + * Set the nsKey which will be written to. + * + * @param string $nsKey + */ + public function setNsKey($nsKey) + { + $this->_nsKey = $nsKey; + } + + /** + * Set the itemKey which will be written to. + * + * @param string $itemKey + */ + public function setItemKey($itemKey) + { + $this->_itemKey = $itemKey; + } + + /** + * Any implementation should be cloneable, allowing the clone to access a + * separate $nsKey and $itemKey. + */ + public function __clone() + { + $this->_writeThrough = null; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php new file mode 100644 index 00000000000..fdba9df50dc --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php @@ -0,0 +1,45 @@ +createDependenciesFor('transport.loadbalanced') + ); + + $this->setTransports($transports); + } + + /** + * Create a new LoadBalancedTransport instance. + * + * @param array $transports + * + * @return Swift_LoadBalancedTransport + */ + public static function newInstance($transports = array()) + { + return new self($transports); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/MailTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/MailTransport.php new file mode 100644 index 00000000000..858ca814792 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/MailTransport.php @@ -0,0 +1,45 @@ +createDependenciesFor('transport.mail') + ); + + $this->setExtraParams($extraParams); + } + + /** + * Create a new MailTransport instance. + * + * @param string $extraParams To be passed to mail() + * + * @return Swift_MailTransport + */ + public static function newInstance($extraParams = '-f%s') + { + return new self($extraParams); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php new file mode 100644 index 00000000000..34a78d47b54 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer.php @@ -0,0 +1,114 @@ +_transport = $transport; + } + + /** + * Create a new Mailer instance. + * + * @param Swift_Transport $transport + * + * @return Swift_Mailer + */ + public static function newInstance(Swift_Transport $transport) + { + return new self($transport); + } + + /** + * Create a new class instance of one of the message services. + * + * For example 'mimepart' would create a 'message.mimepart' instance + * + * @param string $service + * + * @return object + */ + public function createMessage($service = 'message') + { + return Swift_DependencyContainer::getInstance() + ->lookup('message.'.$service); + } + + /** + * Send the given Message like it would be sent in a mail client. + * + * All recipients (with the exception of Bcc) will be able to see the other + * recipients this message was sent to. + * + * Recipient/sender data will be retrieved from the Message object. + * + * The return value is the number of recipients who were accepted for + * delivery. + * + * @param Swift_Mime_Message $message + * @param array $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; + + if (!$this->_transport->isStarted()) { + $this->_transport->start(); + } + + $sent = 0; + + try { + $sent = $this->_transport->send($message, $failedRecipients); + } catch (Swift_RfcComplianceException $e) { + foreach ($message->getTo() as $address => $name) { + $failedRecipients[] = $address; + } + } + + return $sent; + } + + /** + * Register a plugin using a known unique key (e.g. myPlugin). + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->_transport->registerPlugin($plugin); + } + + /** + * The Transport used to send messages. + * + * @return Swift_Transport + */ + public function getTransport() + { + return $this->_transport; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php new file mode 100644 index 00000000000..e3e6cad05bd --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php @@ -0,0 +1,55 @@ +_recipients = $recipients; + } + + /** + * Returns true only if there are more recipients to send to. + * + * @return bool + */ + public function hasNext() + { + return !empty($this->_recipients); + } + + /** + * Returns an array where the keys are the addresses of recipients and the + * values are the names. e.g. ('foo@bar' => 'Foo') or ('foo@bar' => NULL). + * + * @return array + */ + public function nextRecipient() + { + return array_splice($this->_recipients, 0, 1); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php new file mode 100644 index 00000000000..650f3ec3df4 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php @@ -0,0 +1,32 @@ + 'Foo') or ('foo@bar' => NULL). + * + * @return array + */ + public function nextRecipient(); +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php b/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php new file mode 100644 index 00000000000..5b239694d81 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/MemorySpool.php @@ -0,0 +1,84 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Stores Messages in memory. + * + * @author Fabien Potencier + */ +class Swift_MemorySpool implements Swift_Spool +{ + protected $messages = array(); + + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } + + /** + * Starts this Transport mechanism. + */ + public function start() + { + } + + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } + + /** + * Stores a message in the queue. + * + * @param Swift_Mime_Message $message The message to store + * + * @return bool Whether the operation has succeeded + */ + public function queueMessage(Swift_Mime_Message $message) + { + //clone the message to make sure it is not changed while in the queue + $this->messages[] = clone $message; + + return true; + } + + /** + * Sends messages using the given transport instance. + * + * @param Swift_Transport $transport A transport instance + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent emails + */ + public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) + { + if (!$this->messages) { + return 0; + } + + if (!$transport->isStarted()) { + $transport->start(); + } + + $count = 0; + while ($message = array_pop($this->messages)) { + $count += $transport->send($message, $failedRecipients); + } + + return $count; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php new file mode 100644 index 00000000000..11aa5a9a06a --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Message.php @@ -0,0 +1,291 @@ +createDependenciesFor('mime.message') + ); + + if (!isset($charset)) { + $charset = Swift_DependencyContainer::getInstance() + ->lookup('properties.charset'); + } + $this->setSubject($subject); + $this->setBody($body); + $this->setCharset($charset); + if ($contentType) { + $this->setContentType($contentType); + } + } + + /** + * Create a new Message. + * + * @param string $subject + * @param string $body + * @param string $contentType + * @param string $charset + * + * @return Swift_Message + */ + public static function newInstance($subject = null, $body = null, $contentType = null, $charset = null) + { + return new self($subject, $body, $contentType, $charset); + } + + /** + * Add a MimePart to this Message. + * + * @param string|Swift_OutputByteStream $body + * @param string $contentType + * @param string $charset + * + * @return Swift_Mime_SimpleMessage + */ + public function addPart($body, $contentType = null, $charset = null) + { + return $this->attach(Swift_MimePart::newInstance( + $body, $contentType, $charset + )); + } + + /** + * Attach a new signature handler to the message. + * + * @param Swift_Signer $signer + * + * @return Swift_Message + */ + public function attachSigner(Swift_Signer $signer) + { + if ($signer instanceof Swift_Signers_HeaderSigner) { + $this->headerSigners[] = $signer; + } elseif ($signer instanceof Swift_Signers_BodySigner) { + $this->bodySigners[] = $signer; + } + + return $this; + } + + /** + * Attach a new signature handler to the message. + * + * @param Swift_Signer $signer + * + * @return Swift_Message + */ + public function detachSigner(Swift_Signer $signer) + { + if ($signer instanceof Swift_Signers_HeaderSigner) { + foreach ($this->headerSigners as $k => $headerSigner) { + if ($headerSigner === $signer) { + unset($this->headerSigners[$k]); + + return $this; + } + } + } elseif ($signer instanceof Swift_Signers_BodySigner) { + foreach ($this->bodySigners as $k => $bodySigner) { + if ($bodySigner === $signer) { + unset($this->bodySigners[$k]); + + return $this; + } + } + } + + return $this; + } + + /** + * Get this message as a complete string. + * + * @return string + */ + public function toString() + { + if (empty($this->headerSigners) && empty($this->bodySigners)) { + return parent::toString(); + } + + $this->saveMessage(); + + $this->doSign(); + + $string = parent::toString(); + + $this->restoreMessage(); + + return $string; + } + + /** + * Write this message to a {@link Swift_InputByteStream}. + * + * @param Swift_InputByteStream $is + */ + public function toByteStream(Swift_InputByteStream $is) + { + if (empty($this->headerSigners) && empty($this->bodySigners)) { + parent::toByteStream($is); + + return; + } + + $this->saveMessage(); + + $this->doSign(); + + parent::toByteStream($is); + + $this->restoreMessage(); + } + + public function __wakeup() + { + Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message'); + } + + /** + * loops through signers and apply the signatures. + */ + protected function doSign() + { + foreach ($this->bodySigners as $signer) { + $altered = $signer->getAlteredHeaders(); + $this->saveHeaders($altered); + $signer->signMessage($this); + } + + foreach ($this->headerSigners as $signer) { + $altered = $signer->getAlteredHeaders(); + $this->saveHeaders($altered); + $signer->reset(); + + $signer->setHeaders($this->getHeaders()); + + $signer->startBody(); + $this->_bodyToByteStream($signer); + $signer->endBody(); + + $signer->addSignature($this->getHeaders()); + } + } + + /** + * save the message before any signature is applied. + */ + protected function saveMessage() + { + $this->savedMessage = array('headers' => array()); + $this->savedMessage['body'] = $this->getBody(); + $this->savedMessage['children'] = $this->getChildren(); + if (count($this->savedMessage['children']) > 0 && $this->getBody() != '') { + $this->setChildren(array_merge(array($this->_becomeMimePart()), $this->savedMessage['children'])); + $this->setBody(''); + } + } + + /** + * save the original headers. + * + * @param array $altered + */ + protected function saveHeaders(array $altered) + { + foreach ($altered as $head) { + $lc = strtolower($head); + + if (!isset($this->savedMessage['headers'][$lc])) { + $this->savedMessage['headers'][$lc] = $this->getHeaders()->getAll($head); + } + } + } + + /** + * Remove or restore altered headers. + */ + protected function restoreHeaders() + { + foreach ($this->savedMessage['headers'] as $name => $savedValue) { + $headers = $this->getHeaders()->getAll($name); + + foreach ($headers as $key => $value) { + if (!isset($savedValue[$key])) { + $this->getHeaders()->remove($name, $key); + } + } + } + } + + /** + * Restore message body. + */ + protected function restoreMessage() + { + $this->setBody($this->savedMessage['body']); + $this->setChildren($this->savedMessage['children']); + + $this->restoreHeaders(); + $this->savedMessage = array(); + } + + /** + * Clone Message Signers. + * + * @see Swift_Mime_SimpleMimeEntity::__clone() + */ + public function __clone() + { + parent::__clone(); + foreach ($this->bodySigners as $key => $bodySigner) { + $this->bodySigners[$key] = clone($bodySigner); + } + + foreach ($this->headerSigners as $key => $headerSigner) { + $this->headerSigners[$key] = clone($headerSigner); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php new file mode 100644 index 00000000000..46a5e8da946 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Attachment.php @@ -0,0 +1,149 @@ +setDisposition('attachment'); + $this->setContentType('application/octet-stream'); + $this->_mimeTypes = $mimeTypes; + } + + /** + * Get the nesting level used for this attachment. + * + * Always returns {@link LEVEL_MIXED}. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_MIXED; + } + + /** + * Get the Content-Disposition of this attachment. + * + * By default attachments have a disposition of "attachment". + * + * @return string + */ + public function getDisposition() + { + return $this->_getHeaderFieldModel('Content-Disposition'); + } + + /** + * Set the Content-Disposition of this attachment. + * + * @param string $disposition + * + * @return Swift_Mime_Attachment + */ + public function setDisposition($disposition) + { + if (!$this->_setHeaderFieldModel('Content-Disposition', $disposition)) { + $this->getHeaders()->addParameterizedHeader('Content-Disposition', $disposition); + } + + return $this; + } + + /** + * Get the filename of this attachment when downloaded. + * + * @return string + */ + public function getFilename() + { + return $this->_getHeaderParameter('Content-Disposition', 'filename'); + } + + /** + * Set the filename of this attachment. + * + * @param string $filename + * + * @return Swift_Mime_Attachment + */ + public function setFilename($filename) + { + $this->_setHeaderParameter('Content-Disposition', 'filename', $filename); + $this->_setHeaderParameter('Content-Type', 'name', $filename); + + return $this; + } + + /** + * Get the file size of this attachment. + * + * @return int + */ + public function getSize() + { + return $this->_getHeaderParameter('Content-Disposition', 'size'); + } + + /** + * Set the file size of this attachment. + * + * @param int $size + * + * @return Swift_Mime_Attachment + */ + public function setSize($size) + { + $this->_setHeaderParameter('Content-Disposition', 'size', $size); + + return $this; + } + + /** + * Set the file that this attachment is for. + * + * @param Swift_FileStream $file + * @param string $contentType optional + * + * @return Swift_Mime_Attachment + */ + public function setFile(Swift_FileStream $file, $contentType = null) + { + $this->setFilename(basename($file->getPath())); + $this->setBody($file, $contentType); + if (!isset($contentType)) { + $extension = strtolower(substr($file->getPath(), strrpos($file->getPath(), '.') + 1)); + + if (array_key_exists($extension, $this->_mimeTypes)) { + $this->setContentType($this->_mimeTypes[$extension]); + } + } + + return $this; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php new file mode 100644 index 00000000000..b49c3a873b1 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php @@ -0,0 +1,24 @@ += $maxLineLength || 76 < $maxLineLength) { + $maxLineLength = 76; + } + + $remainder = 0; + $base64ReadBufferRemainderBytes = null; + + // To reduce memory usage, the output buffer is streamed to the input buffer like so: + // Output Stream => base64encode => wrap line length => Input Stream + // HOWEVER it's important to note that base64_encode() should only be passed whole triplets of data (except for the final chunk of data) + // otherwise it will assume the input data has *ended* and it will incorrectly pad/terminate the base64 data mid-stream. + // We use $base64ReadBufferRemainderBytes to carry over 1-2 "remainder" bytes from the each chunk from OutputStream and pre-pend those onto the + // chunk of bytes read in the next iteration. + // When the OutputStream is empty, we must flush any remainder bytes. + while (true) { + $readBytes = $os->read(8192); + $atEOF = ($readBytes === false); + + if ($atEOF) { + $streamTheseBytes = $base64ReadBufferRemainderBytes; + } else { + $streamTheseBytes = $base64ReadBufferRemainderBytes.$readBytes; + } + $base64ReadBufferRemainderBytes = null; + $bytesLength = strlen($streamTheseBytes); + + if ($bytesLength === 0) { // no data left to encode + break; + } + + // if we're not on the last block of the ouput stream, make sure $streamTheseBytes ends with a complete triplet of data + // and carry over remainder 1-2 bytes to the next loop iteration + if (!$atEOF) { + $excessBytes = $bytesLength % 3; + if ($excessBytes !== 0) { + $base64ReadBufferRemainderBytes = substr($streamTheseBytes, -$excessBytes); + $streamTheseBytes = substr($streamTheseBytes, 0, $bytesLength - $excessBytes); + } + } + + $encoded = base64_encode($streamTheseBytes); + $encodedTransformed = ''; + $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset; + + while ($thisMaxLineLength < strlen($encoded)) { + $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength)."\r\n"; + $firstLineOffset = 0; + $encoded = substr($encoded, $thisMaxLineLength); + $thisMaxLineLength = $maxLineLength; + $remainder = 0; + } + + if (0 < $remainingLength = strlen($encoded)) { + $remainder += $remainingLength; + $encodedTransformed .= $encoded; + $encoded = null; + } + + $is->write($encodedTransformed); + + if ($atEOF) { + break; + } + } + } + + /** + * Get the name of this encoding scheme. + * Returns the string 'base64'. + * + * @return string + */ + public function getName() + { + return 'base64'; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php new file mode 100644 index 00000000000..710b5ac9edc --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php @@ -0,0 +1,123 @@ +charset = $charset ? $charset : 'utf-8'; + } + + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->charset = $charset; + } + + /** + * Encode $in to $out. + * + * @param Swift_OutputByteStream $os to read from + * @param Swift_InputByteStream $is to write to + * @param int $firstLineOffset + * @param int $maxLineLength 0 indicates the default length for this encoding + * + * @throws RuntimeException + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($this->charset !== 'utf-8') { + throw new RuntimeException( + sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); + } + + $string = ''; + + while (false !== $bytes = $os->read(8192)) { + $string .= $bytes; + } + + $is->write($this->encodeString($string)); + } + + /** + * Get the MIME name of this content encoding scheme. + * + * @return string + */ + public function getName() + { + return 'quoted-printable'; + } + + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset if first line needs to be shorter + * @param int $maxLineLength 0 indicates the default length for this encoding + * + * @throws RuntimeException + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($this->charset !== 'utf-8') { + throw new RuntimeException( + sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); + } + + return $this->_standardize(quoted_printable_encode($string)); + } + + /** + * Make sure CRLF is correct and HT/SPACE are in valid places. + * + * @param string $string + * + * @return string + */ + protected function _standardize($string) + { + // transform CR or LF to CRLF + $string = preg_replace('~=0D(?!=0A)|(?_name = $name; + $this->_canonical = $canonical; + } + + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength - 0 means no wrapping will occur + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($this->_canonical) { + $string = $this->_canonicalize($string); + } + + return $this->_safeWordWrap($string, $maxLineLength, "\r\n"); + } + + /** + * Encode stream $in to stream $out. + * + * @param Swift_OutputByteStream $os + * @param Swift_InputByteStream $is + * @param int $firstLineOffset ignored + * @param int $maxLineLength optional, 0 means no wrapping will occur + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + $leftOver = ''; + while (false !== $bytes = $os->read(8192)) { + $toencode = $leftOver.$bytes; + if ($this->_canonical) { + $toencode = $this->_canonicalize($toencode); + } + $wrapped = $this->_safeWordWrap($toencode, $maxLineLength, "\r\n"); + $lastLinePos = strrpos($wrapped, "\r\n"); + $leftOver = substr($wrapped, $lastLinePos); + $wrapped = substr($wrapped, 0, $lastLinePos); + + $is->write($wrapped); + } + if (strlen($leftOver)) { + $is->write($leftOver); + } + } + + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Not used. + */ + public function charsetChanged($charset) + { + } + + /** + * A safer (but weaker) wordwrap for unicode. + * + * @param string $string + * @param int $length + * @param string $le + * + * @return string + */ + private function _safeWordwrap($string, $length = 75, $le = "\r\n") + { + if (0 >= $length) { + return $string; + } + + $originalLines = explode($le, $string); + + $lines = array(); + $lineCount = 0; + + foreach ($originalLines as $originalLine) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; + + //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine); + $chunks = preg_split('/(?<=\s)/', $originalLine); + + foreach ($chunks as $chunk) { + if (0 != strlen($currentLine) + && strlen($currentLine.$chunk) > $length) { + $lines[] = ''; + $currentLine = &$lines[$lineCount++]; + } + $currentLine .= $chunk; + } + } + + return implode("\r\n", $lines); + } + + /** + * Canonicalize string input (fix CRLF). + * + * @param string $string + * + * @return string + */ + private function _canonicalize($string) + { + return str_replace( + array("\r\n", "\r", "\n"), + array("\n", "\n", "\r\n"), + $string + ); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php new file mode 100644 index 00000000000..5cc907b8e7e --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php @@ -0,0 +1,134 @@ +_dotEscape = $dotEscape; + parent::__construct($charStream, $filter); + } + + public function __sleep() + { + return array('_charStream', '_filter', '_dotEscape'); + } + + protected function getSafeMapShareId() + { + return get_class($this).($this->_dotEscape ? '.dotEscape' : ''); + } + + protected function initSafeMap() + { + parent::initSafeMap(); + if ($this->_dotEscape) { + /* Encode . as =2e for buggy remote servers */ + unset($this->_safeMap[0x2e]); + } + } + + /** + * Encode stream $in to stream $out. + * + * QP encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * + * @param Swift_OutputByteStream $os output stream + * @param Swift_InputByteStream $is input stream + * @param int $firstLineOffset + * @param int $maxLineLength + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + if ($maxLineLength > 76 || $maxLineLength <= 0) { + $maxLineLength = 76; + } + + $thisLineLength = $maxLineLength - $firstLineOffset; + + $this->_charStream->flushContents(); + $this->_charStream->importByteStream($os); + + $currentLine = ''; + $prepend = ''; + $size = $lineLen = 0; + + while (false !== $bytes = $this->_nextSequence()) { + // If we're filtering the input + if (isset($this->_filter)) { + // If we can't filter because we need more bytes + while ($this->_filter->shouldBuffer($bytes)) { + // Then collect bytes into the buffer + if (false === $moreBytes = $this->_nextSequence(1)) { + break; + } + + foreach ($moreBytes as $b) { + $bytes[] = $b; + } + } + // And filter them + $bytes = $this->_filter->filter($bytes); + } + + $enc = $this->_encodeByteSequence($bytes, $size); + + $i = strpos($enc, '=0D=0A'); + $newLineLength = $lineLen + ($i === false ? $size : $i); + + if ($currentLine && $newLineLength >= $thisLineLength) { + $is->write($prepend.$this->_standardize($currentLine)); + $currentLine = ''; + $prepend = "=\r\n"; + $thisLineLength = $maxLineLength; + $lineLen = 0; + } + + $currentLine .= $enc; + + if ($i === false) { + $lineLen += $size; + } else { + // 6 is the length of '=0D=0A'. + $lineLen = $size - strrpos($enc, '=0D=0A') - 6; + } + } + if (strlen($currentLine)) { + $is->write($prepend.$this->_standardize($currentLine)); + } + } + + /** + * Get the name of this encoding scheme. + * Returns the string 'quoted-printable'. + * + * @return string + */ + public function getName() + { + return 'quoted-printable'; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php new file mode 100644 index 00000000000..3214e1cf3fd --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php @@ -0,0 +1,98 @@ + + */ +class Swift_Mime_ContentEncoder_QpContentEncoderProxy implements Swift_Mime_ContentEncoder +{ + /** + * @var Swift_Mime_ContentEncoder_QpContentEncoder + */ + private $safeEncoder; + + /** + * @var Swift_Mime_ContentEncoder_NativeQpContentEncoder + */ + private $nativeEncoder; + + /** + * @var null|string + */ + private $charset; + + /** + * Constructor. + * + * @param Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder + * @param Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder + * @param string|null $charset + */ + public function __construct(Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder, Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder, $charset) + { + $this->safeEncoder = $safeEncoder; + $this->nativeEncoder = $nativeEncoder; + $this->charset = $charset; + } + + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->safeEncoder = clone $this->safeEncoder; + $this->nativeEncoder = clone $this->nativeEncoder; + } + + /** + * {@inheritdoc} + */ + public function charsetChanged($charset) + { + $this->charset = $charset; + $this->safeEncoder->charsetChanged($charset); + } + + /** + * {@inheritdoc} + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + $this->getEncoder()->encodeByteStream($os, $is, $firstLineOffset, $maxLineLength); + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'quoted-printable'; + } + + /** + * {@inheritdoc} + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $this->getEncoder()->encodeString($string, $firstLineOffset, $maxLineLength); + } + + /** + * @return Swift_Mime_ContentEncoder + */ + private function getEncoder() + { + return 'utf-8' === $this->charset ? $this->nativeEncoder : $this->safeEncoder; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php new file mode 100644 index 00000000000..0b8526e38c3 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php @@ -0,0 +1,64 @@ + + */ +class Swift_Mime_ContentEncoder_RawContentEncoder implements Swift_Mime_ContentEncoder +{ + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $string; + } + + /** + * Encode stream $in to stream $out. + * + * @param Swift_OutputByteStream $in + * @param Swift_InputByteStream $out + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + while (false !== ($bytes = $os->read(8192))) { + $is->write($bytes); + } + } + + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return 'raw'; + } + + /** + * Not used. + */ + public function charsetChanged($charset) + { + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php new file mode 100644 index 00000000000..6af757124d3 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php @@ -0,0 +1,45 @@ +setDisposition('inline'); + $this->setId($this->getId()); + } + + /** + * Get the nesting level of this EmbeddedFile. + * + * Returns {@see LEVEL_RELATED}. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_RELATED; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php new file mode 100644 index 00000000000..cc44a6efb97 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php @@ -0,0 +1,24 @@ +init(); + } + + public function __wakeup() + { + $this->init(); + } + + protected function init() + { + if (count(self::$_specials) > 0) { + return; + } + + self::$_specials = array( + '(', ')', '<', '>', '[', ']', + ':', ';', '@', ',', '.', '"', + ); + + /*** Refer to RFC 2822 for ABNF grammar ***/ + + // All basic building blocks + self::$_grammar['NO-WS-CTL'] = '[\x01-\x08\x0B\x0C\x0E-\x19\x7F]'; + self::$_grammar['WSP'] = '[ \t]'; + self::$_grammar['CRLF'] = '(?:\r\n)'; + self::$_grammar['FWS'] = '(?:(?:'.self::$_grammar['WSP'].'*'. + self::$_grammar['CRLF'].')?'.self::$_grammar['WSP'].')'; + self::$_grammar['text'] = '[\x00-\x08\x0B\x0C\x0E-\x7F]'; + self::$_grammar['quoted-pair'] = '(?:\\\\'.self::$_grammar['text'].')'; + self::$_grammar['ctext'] = '(?:'.self::$_grammar['NO-WS-CTL']. + '|[\x21-\x27\x2A-\x5B\x5D-\x7E])'; + // Uses recursive PCRE (?1) -- could be a weak point?? + self::$_grammar['ccontent'] = '(?:'.self::$_grammar['ctext'].'|'. + self::$_grammar['quoted-pair'].'|(?1))'; + self::$_grammar['comment'] = '(\((?:'.self::$_grammar['FWS'].'|'. + self::$_grammar['ccontent'].')*'.self::$_grammar['FWS'].'?\))'; + self::$_grammar['CFWS'] = '(?:(?:'.self::$_grammar['FWS'].'?'. + self::$_grammar['comment'].')*(?:(?:'.self::$_grammar['FWS'].'?'. + self::$_grammar['comment'].')|'.self::$_grammar['FWS'].'))'; + self::$_grammar['qtext'] = '(?:'.self::$_grammar['NO-WS-CTL']. + '|[\x21\x23-\x5B\x5D-\x7E])'; + self::$_grammar['qcontent'] = '(?:'.self::$_grammar['qtext'].'|'. + self::$_grammar['quoted-pair'].')'; + self::$_grammar['quoted-string'] = '(?:'.self::$_grammar['CFWS'].'?"'. + '('.self::$_grammar['FWS'].'?'.self::$_grammar['qcontent'].')*'. + self::$_grammar['FWS'].'?"'.self::$_grammar['CFWS'].'?)'; + self::$_grammar['atext'] = '[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]'; + self::$_grammar['atom'] = '(?:'.self::$_grammar['CFWS'].'?'. + self::$_grammar['atext'].'+'.self::$_grammar['CFWS'].'?)'; + self::$_grammar['dot-atom-text'] = '(?:'.self::$_grammar['atext'].'+'. + '(\.'.self::$_grammar['atext'].'+)*)'; + self::$_grammar['dot-atom'] = '(?:'.self::$_grammar['CFWS'].'?'. + self::$_grammar['dot-atom-text'].'+'.self::$_grammar['CFWS'].'?)'; + self::$_grammar['word'] = '(?:'.self::$_grammar['atom'].'|'. + self::$_grammar['quoted-string'].')'; + self::$_grammar['phrase'] = '(?:'.self::$_grammar['word'].'+?)'; + self::$_grammar['no-fold-quote'] = '(?:"(?:'.self::$_grammar['qtext']. + '|'.self::$_grammar['quoted-pair'].')*")'; + self::$_grammar['dtext'] = '(?:'.self::$_grammar['NO-WS-CTL']. + '|[\x21-\x5A\x5E-\x7E])'; + self::$_grammar['no-fold-literal'] = '(?:\[(?:'.self::$_grammar['dtext']. + '|'.self::$_grammar['quoted-pair'].')*\])'; + + // Message IDs + self::$_grammar['id-left'] = '(?:'.self::$_grammar['dot-atom-text'].'|'. + self::$_grammar['no-fold-quote'].')'; + self::$_grammar['id-right'] = '(?:'.self::$_grammar['dot-atom-text'].'|'. + self::$_grammar['no-fold-literal'].')'; + + // Addresses, mailboxes and paths + self::$_grammar['local-part'] = '(?:'.self::$_grammar['dot-atom'].'|'. + self::$_grammar['quoted-string'].')'; + self::$_grammar['dcontent'] = '(?:'.self::$_grammar['dtext'].'|'. + self::$_grammar['quoted-pair'].')'; + self::$_grammar['domain-literal'] = '(?:'.self::$_grammar['CFWS'].'?\[('. + self::$_grammar['FWS'].'?'.self::$_grammar['dcontent'].')*?'. + self::$_grammar['FWS'].'?\]'.self::$_grammar['CFWS'].'?)'; + self::$_grammar['domain'] = '(?:'.self::$_grammar['dot-atom'].'|'. + self::$_grammar['domain-literal'].')'; + self::$_grammar['addr-spec'] = '(?:'.self::$_grammar['local-part'].'@'. + self::$_grammar['domain'].')'; + } + + /** + * Get the grammar defined for $name token. + * + * @param string $name exactly as written in the RFC + * + * @return string + */ + public function getDefinition($name) + { + if (array_key_exists($name, self::$_grammar)) { + return self::$_grammar[$name]; + } + + throw new Swift_RfcComplianceException( + "No such grammar '".$name."' defined." + ); + } + + /** + * Returns the tokens defined in RFC 2822 (and some related RFCs). + * + * @return array + */ + public function getGrammarDefinitions() + { + return self::$_grammar; + } + + /** + * Returns the current special characters used in the syntax which need to be escaped. + * + * @return array + */ + public function getSpecials() + { + return self::$_specials; + } + + /** + * Escape special characters in a string (convert to quoted-pairs). + * + * @param string $token + * @param string[] $include additional chars to escape + * @param string[] $exclude chars from escaping + * + * @return string + */ + public function escapeSpecials($token, $include = array(), $exclude = array()) + { + foreach (array_merge(array('\\'), array_diff(self::$_specials, $exclude), $include) as $char) { + $token = str_replace($char, '\\'.$char, $token); + } + + return $token; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php new file mode 100644 index 00000000000..a8ddd272165 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Header.php @@ -0,0 +1,93 @@ +getName(), "\r\n"); + mb_internal_encoding($old); + + return $newstring; + } + + return parent::encodeString($string, $firstLineOffset, $maxLineLength); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php new file mode 100644 index 00000000000..510dd6637b3 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php @@ -0,0 +1,65 @@ +_safeMap[$byte] = chr($byte); + } + } + + /** + * Get the name of this encoding scheme. + * + * Returns the string 'Q'. + * + * @return string + */ + public function getName() + { + return 'Q'; + } + + /** + * Takes an unencoded string and produces a QP encoded string from it. + * + * @param string $string string to encode + * @param int $firstLineOffset optional + * @param int $maxLineLength optional, 0 indicates the default of 76 chars + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return str_replace(array(' ', '=20', "=\r\n"), array('_', '_', "\r\n"), + parent::encodeString($string, $firstLineOffset, $maxLineLength) + ); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php new file mode 100644 index 00000000000..c65f26d7213 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php @@ -0,0 +1,78 @@ +setGrammar($grammar); + } + + /** + * Set the character set used in this Header. + * + * @param string $charset + */ + public function setCharset($charset) + { + $this->clearCachedValueIf($charset != $this->_charset); + $this->_charset = $charset; + if (isset($this->_encoder)) { + $this->_encoder->charsetChanged($charset); + } + } + + /** + * Get the character set used in this Header. + * + * @return string + */ + public function getCharset() + { + return $this->_charset; + } + + /** + * Set the language used in this Header. + * + * For example, for US English, 'en-us'. + * This can be unspecified. + * + * @param string $lang + */ + public function setLanguage($lang) + { + $this->clearCachedValueIf($this->_lang != $lang); + $this->_lang = $lang; + } + + /** + * Get the language used in this Header. + * + * @return string + */ + public function getLanguage() + { + return $this->_lang; + } + + /** + * Set the encoder used for encoding the header. + * + * @param Swift_Mime_HeaderEncoder $encoder + */ + public function setEncoder(Swift_Mime_HeaderEncoder $encoder) + { + $this->_encoder = $encoder; + $this->setCachedValue(null); + } + + /** + * Get the encoder used for encoding this Header. + * + * @return Swift_Mime_HeaderEncoder + */ + public function getEncoder() + { + return $this->_encoder; + } + + /** + * Set the grammar used for the header. + * + * @param Swift_Mime_Grammar $grammar + */ + public function setGrammar(Swift_Mime_Grammar $grammar) + { + $this->_grammar = $grammar; + $this->setCachedValue(null); + } + + /** + * Get the grammar used for this Header. + * + * @return Swift_Mime_Grammar + */ + public function getGrammar() + { + return $this->_grammar; + } + + /** + * Get the name of this header (e.g. charset). + * + * @return string + */ + public function getFieldName() + { + return $this->_name; + } + + /** + * Set the maximum length of lines in the header (excluding EOL). + * + * @param int $lineLength + */ + public function setMaxLineLength($lineLength) + { + $this->clearCachedValueIf($this->_lineLength != $lineLength); + $this->_lineLength = $lineLength; + } + + /** + * Get the maximum permitted length of lines in this Header. + * + * @return int + */ + public function getMaxLineLength() + { + return $this->_lineLength; + } + + /** + * Get this Header rendered as a RFC 2822 compliant string. + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + public function toString() + { + return $this->_tokensToString($this->toTokens()); + } + + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } + + // -- Points of extension + + /** + * Set the name of this Header field. + * + * @param string $name + */ + protected function setFieldName($name) + { + $this->_name = $name; + } + + /** + * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. + * + * @param Swift_Mime_Header $header + * @param string $string as displayed + * @param string $charset of the text + * @param Swift_Mime_HeaderEncoder $encoder + * @param bool $shorten the first line to make remove for header name + * + * @return string + */ + protected function createPhrase(Swift_Mime_Header $header, $string, $charset, Swift_Mime_HeaderEncoder $encoder = null, $shorten = false) + { + // Treat token as exactly what was given + $phraseStr = $string; + // If it's not valid + if (!preg_match('/^'.$this->getGrammar()->getDefinition('phrase').'$/D', $phraseStr)) { + // .. but it is just ascii text, try escaping some characters + // and make it a quoted-string + if (preg_match('/^'.$this->getGrammar()->getDefinition('text').'*$/D', $phraseStr)) { + $phraseStr = $this->getGrammar()->escapeSpecials( + $phraseStr, array('"'), $this->getGrammar()->getSpecials() + ); + $phraseStr = '"'.$phraseStr.'"'; + } else { + // ... otherwise it needs encoding + // Determine space remaining on line if first line + if ($shorten) { + $usedLength = strlen($header->getFieldName().': '); + } else { + $usedLength = 0; + } + $phraseStr = $this->encodeWords($header, $string, $usedLength); + } + } + + return $phraseStr; + } + + /** + * Encode needed word tokens within a string of input. + * + * @param Swift_Mime_Header $header + * @param string $input + * @param string $usedLength optional + * + * @return string + */ + protected function encodeWords(Swift_Mime_Header $header, $input, $usedLength = -1) + { + $value = ''; + + $tokens = $this->getEncodableWordTokens($input); + + foreach ($tokens as $token) { + // See RFC 2822, Sect 2.2 (really 2.2 ??) + if ($this->tokenNeedsEncoding($token)) { + // Don't encode starting WSP + $firstChar = substr($token, 0, 1); + switch ($firstChar) { + case ' ': + case "\t": + $value .= $firstChar; + $token = substr($token, 1); + } + + if (-1 == $usedLength) { + $usedLength = strlen($header->getFieldName().': ') + strlen($value); + } + $value .= $this->getTokenAsEncodedWord($token, $usedLength); + + $header->setMaxLineLength(76); // Forcefully override + } else { + $value .= $token; + } + } + + return $value; + } + + /** + * Test if a token needs to be encoded or not. + * + * @param string $token + * + * @return bool + */ + protected function tokenNeedsEncoding($token) + { + return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token); + } + + /** + * Splits a string into tokens in blocks of words which can be encoded quickly. + * + * @param string $string + * + * @return string[] + */ + protected function getEncodableWordTokens($string) + { + $tokens = array(); + + $encodedToken = ''; + // Split at all whitespace boundaries + foreach (preg_split('~(?=[\t ])~', $string) as $token) { + if ($this->tokenNeedsEncoding($token)) { + $encodedToken .= $token; + } else { + if (strlen($encodedToken) > 0) { + $tokens[] = $encodedToken; + $encodedToken = ''; + } + $tokens[] = $token; + } + } + if (strlen($encodedToken)) { + $tokens[] = $encodedToken; + } + + return $tokens; + } + + /** + * Get a token as an encoded word for safe insertion into headers. + * + * @param string $token token to encode + * @param int $firstLineOffset optional + * + * @return string + */ + protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) + { + // Adjust $firstLineOffset to account for space needed for syntax + $charsetDecl = $this->_charset; + if (isset($this->_lang)) { + $charsetDecl .= '*'.$this->_lang; + } + $encodingWrapperLength = strlen( + '=?'.$charsetDecl.'?'.$this->_encoder->getName().'??=' + ); + + if ($firstLineOffset >= 75) { + //Does this logic need to be here? + $firstLineOffset = 0; + } + + $encodedTextLines = explode("\r\n", + $this->_encoder->encodeString( + $token, $firstLineOffset, 75 - $encodingWrapperLength, $this->_charset + ) + ); + + if (strtolower($this->_charset) !== 'iso-2022-jp') { + // special encoding for iso-2022-jp using mb_encode_mimeheader + foreach ($encodedTextLines as $lineNum => $line) { + $encodedTextLines[$lineNum] = '=?'.$charsetDecl. + '?'.$this->_encoder->getName(). + '?'.$line.'?='; + } + } + + return implode("\r\n ", $encodedTextLines); + } + + /** + * Generates tokens from the given string which include CRLF as individual tokens. + * + * @param string $token + * + * @return string[] + */ + protected function generateTokenLines($token) + { + return preg_split('~(\r\n)~', $token, -1, PREG_SPLIT_DELIM_CAPTURE); + } + + /** + * Set a value into the cache. + * + * @param string $value + */ + protected function setCachedValue($value) + { + $this->_cachedValue = $value; + } + + /** + * Get the value in the cache. + * + * @return string + */ + protected function getCachedValue() + { + return $this->_cachedValue; + } + + /** + * Clear the cached value if $condition is met. + * + * @param bool $condition + */ + protected function clearCachedValueIf($condition) + { + if ($condition) { + $this->setCachedValue(null); + } + } + + /** + * Generate a list of all tokens in the final header. + * + * @param string $string The string to tokenize + * + * @return array An array of tokens as strings + */ + protected function toTokens($string = null) + { + if (is_null($string)) { + $string = $this->getFieldBody(); + } + + $tokens = array(); + + // Generate atoms; split at all invisible boundaries followed by WSP + foreach (preg_split('~(?=[ \t])~', $string) as $token) { + $newTokens = $this->generateTokenLines($token); + foreach ($newTokens as $newToken) { + $tokens[] = $newToken; + } + } + + return $tokens; + } + + /** + * Takes an array of tokens which appear in the header and turns them into + * an RFC 2822 compliant string, adding FWSP where needed. + * + * @param string[] $tokens + * + * @return string + */ + private function _tokensToString(array $tokens) + { + $lineCount = 0; + $headerLines = array(); + $headerLines[] = $this->_name.': '; + $currentLine = &$headerLines[$lineCount++]; + + // Build all tokens back into compliant header + foreach ($tokens as $i => $token) { + // Line longer than specified maximum or token was just a new line + if (("\r\n" == $token) || + ($i > 0 && strlen($currentLine.$token) > $this->_lineLength) + && 0 < strlen($currentLine)) { + $headerLines[] = ''; + $currentLine = &$headerLines[$lineCount++]; + } + + // Append token to the line + if ("\r\n" != $token) { + $currentLine .= $token; + } + } + + // Implode with FWS (RFC 2822, 2.2.3) + return implode("\r\n", $headerLines)."\r\n"; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php new file mode 100644 index 00000000000..4fd6674296e --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php @@ -0,0 +1,125 @@ + + * + * + * + * @param string $name of Header + * @param Swift_Mime_Grammar $grammar + */ + public function __construct($name, Swift_Mime_Grammar $grammar) + { + $this->setFieldName($name); + parent::__construct($grammar); + } + + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_DATE; + } + + /** + * Set the model for the field body. + * + * This method takes a UNIX timestamp. + * + * @param int $model + */ + public function setFieldBodyModel($model) + { + $this->setTimestamp($model); + } + + /** + * Get the model for the field body. + * + * This method returns a UNIX timestamp. + * + * @return mixed + */ + public function getFieldBodyModel() + { + return $this->getTimestamp(); + } + + /** + * Get the UNIX timestamp of the Date in this Header. + * + * @return int + */ + public function getTimestamp() + { + return $this->_timestamp; + } + + /** + * Set the UNIX timestamp of the Date in this Header. + * + * @param int $timestamp + */ + public function setTimestamp($timestamp) + { + if (!is_null($timestamp)) { + $timestamp = (int) $timestamp; + } + $this->clearCachedValueIf($this->_timestamp != $timestamp); + $this->_timestamp = $timestamp; + } + + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + if (isset($this->_timestamp)) { + $this->setCachedValue(date('r', $this->_timestamp)); + } + } + + return $this->getCachedValue(); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php new file mode 100644 index 00000000000..b114506b4a4 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php @@ -0,0 +1,180 @@ +setFieldName($name); + parent::__construct($grammar); + } + + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_ID; + } + + /** + * Set the model for the field body. + * + * This method takes a string ID, or an array of IDs. + * + * @param mixed $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setId($model); + } + + /** + * Get the model for the field body. + * + * This method returns an array of IDs + * + * @return array + */ + public function getFieldBodyModel() + { + return $this->getIds(); + } + + /** + * Set the ID used in the value of this header. + * + * @param string|array $id + * + * @throws Swift_RfcComplianceException + */ + public function setId($id) + { + $this->setIds(is_array($id) ? $id : array($id)); + } + + /** + * Get the ID used in the value of this Header. + * + * If multiple IDs are set only the first is returned. + * + * @return string + */ + public function getId() + { + if (count($this->_ids) > 0) { + return $this->_ids[0]; + } + } + + /** + * Set a collection of IDs to use in the value of this Header. + * + * @param string[] $ids + * + * @throws Swift_RfcComplianceException + */ + public function setIds(array $ids) + { + $actualIds = array(); + + foreach ($ids as $id) { + $this->_assertValidId($id); + $actualIds[] = $id; + } + + $this->clearCachedValueIf($this->_ids != $actualIds); + $this->_ids = $actualIds; + } + + /** + * Get the list of IDs used in this Header. + * + * @return string[] + */ + public function getIds() + { + return $this->_ids; + } + + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@see toString()} for that). + * + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + $angleAddrs = array(); + + foreach ($this->_ids as $id) { + $angleAddrs[] = '<'.$id.'>'; + } + + $this->setCachedValue(implode(' ', $angleAddrs)); + } + + return $this->getCachedValue(); + } + + /** + * Throws an Exception if the id passed does not comply with RFC 2822. + * + * @param string $id + * + * @throws Swift_RfcComplianceException + */ + private function _assertValidId($id) + { + if (!preg_match( + '/^'.$this->getGrammar()->getDefinition('id-left').'@'. + $this->getGrammar()->getDefinition('id-right').'$/D', + $id + )) { + throw new Swift_RfcComplianceException( + 'Invalid ID given <'.$id.'>' + ); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php new file mode 100644 index 00000000000..798e7f42ace --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php @@ -0,0 +1,354 @@ +setFieldName($name); + $this->setEncoder($encoder); + parent::__construct($grammar); + } + + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_MAILBOX; + } + + /** + * Set the model for the field body. + * + * This method takes a string, or an array of addresses. + * + * @param mixed $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setNameAddresses($model); + } + + /** + * Get the model for the field body. + * + * This method returns an associative array like {@link getNameAddresses()} + * + * @throws Swift_RfcComplianceException + * + * @return array + */ + public function getFieldBodyModel() + { + return $this->getNameAddresses(); + } + + /** + * Set a list of mailboxes to be shown in this Header. + * + * The mailboxes can be a simple array of addresses, or an array of + * key=>value pairs where (email => personalName). + * Example: + * + * setNameAddresses(array( + * 'chris@swiftmailer.org' => 'Chris Corbyn', + * 'mark@swiftmailer.org' //No associated personal name + * )); + * ?> + * + * + * @see __construct() + * @see setAddresses() + * @see setValue() + * + * @param string|string[] $mailboxes + * + * @throws Swift_RfcComplianceException + */ + public function setNameAddresses($mailboxes) + { + $this->_mailboxes = $this->normalizeMailboxes((array) $mailboxes); + $this->setCachedValue(null); //Clear any cached value + } + + /** + * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. + * + * Example: + * + * 'Chris Corbyn', + * 'mark@swiftmailer.org' => 'Mark Corbyn') + * ); + * print_r($header->getNameAddressStrings()); + * // array ( + * // 0 => Chris Corbyn , + * // 1 => Mark Corbyn + * // ) + * ?> + * + * + * @see getNameAddresses() + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string[] + */ + public function getNameAddressStrings() + { + return $this->_createNameAddressStrings($this->getNameAddresses()); + } + + /** + * Get all mailboxes in this Header as key=>value pairs. + * + * The key is the address and the value is the name (or null if none set). + * Example: + * + * 'Chris Corbyn', + * 'mark@swiftmailer.org' => 'Mark Corbyn') + * ); + * print_r($header->getNameAddresses()); + * // array ( + * // chris@swiftmailer.org => Chris Corbyn, + * // mark@swiftmailer.org => Mark Corbyn + * // ) + * ?> + * + * + * @see getAddresses() + * @see getNameAddressStrings() + * + * @return string[] + */ + public function getNameAddresses() + { + return $this->_mailboxes; + } + + /** + * Makes this Header represent a list of plain email addresses with no names. + * + * Example: + * + * setAddresses( + * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') + * ); + * ?> + * + * + * @see setNameAddresses() + * @see setValue() + * + * @param string[] $addresses + * + * @throws Swift_RfcComplianceException + */ + public function setAddresses($addresses) + { + $this->setNameAddresses(array_values((array) $addresses)); + } + + /** + * Get all email addresses in this Header. + * + * @see getNameAddresses() + * + * @return string[] + */ + public function getAddresses() + { + return array_keys($this->_mailboxes); + } + + /** + * Remove one or more addresses from this Header. + * + * @param string|string[] $addresses + */ + public function removeAddresses($addresses) + { + $this->setCachedValue(null); + foreach ((array) $addresses as $address) { + unset($this->_mailboxes[$address]); + } + } + + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + public function getFieldBody() + { + // Compute the string value of the header only if needed + if (is_null($this->getCachedValue())) { + $this->setCachedValue($this->createMailboxListString($this->_mailboxes)); + } + + return $this->getCachedValue(); + } + + // -- Points of extension + + /** + * Normalizes a user-input list of mailboxes into consistent key=>value pairs. + * + * @param string[] $mailboxes + * + * @return string[] + */ + protected function normalizeMailboxes(array $mailboxes) + { + $actualMailboxes = array(); + + foreach ($mailboxes as $key => $value) { + if (is_string($key)) { + //key is email addr + $address = $key; + $name = $value; + } else { + $address = $value; + $name = null; + } + $this->_assertValidAddress($address); + $actualMailboxes[$address] = $name; + } + + return $actualMailboxes; + } + + /** + * Produces a compliant, formatted display-name based on the string given. + * + * @param string $displayName as displayed + * @param bool $shorten the first line to make remove for header name + * + * @return string + */ + protected function createDisplayNameString($displayName, $shorten = false) + { + return $this->createPhrase($this, $displayName, + $this->getCharset(), $this->getEncoder(), $shorten + ); + } + + /** + * Creates a string form of all the mailboxes in the passed array. + * + * @param string[] $mailboxes + * + * @throws Swift_RfcComplianceException + * + * @return string + */ + protected function createMailboxListString(array $mailboxes) + { + return implode(', ', $this->_createNameAddressStrings($mailboxes)); + } + + /** + * Redefine the encoding requirements for mailboxes. + * + * Commas and semicolons are used to separate + * multiple addresses, and should therefore be encoded + * + * @param string $token + * + * @return bool + */ + protected function tokenNeedsEncoding($token) + { + return preg_match('/[,;]/', $token) || parent::tokenNeedsEncoding($token); + } + + /** + * Return an array of strings conforming the the name-addr spec of RFC 2822. + * + * @param string[] $mailboxes + * + * @return string[] + */ + private function _createNameAddressStrings(array $mailboxes) + { + $strings = array(); + + foreach ($mailboxes as $email => $name) { + $mailboxStr = $email; + if (!is_null($name)) { + $nameStr = $this->createDisplayNameString($name, empty($strings)); + $mailboxStr = $nameStr.' <'.$mailboxStr.'>'; + } + $strings[] = $mailboxStr; + } + + return $strings; + } + + /** + * Throws an Exception if the address passed does not comply with RFC 2822. + * + * @param string $address + * + * @throws Swift_RfcComplianceException If invalid. + */ + private function _assertValidAddress($address) + { + if (!preg_match('/^'.$this->getGrammar()->getDefinition('addr-spec').'$/D', + $address)) { + throw new Swift_RfcComplianceException( + 'Address in mailbox given ['.$address. + '] does not comply with RFC 2822, 3.6.2.' + ); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php new file mode 100644 index 00000000000..b52b964b773 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php @@ -0,0 +1,137 @@ + + */ +class Swift_Mime_Headers_OpenDKIMHeader implements Swift_Mime_Header +{ + /** + * The value of this Header. + * + * @var string + */ + private $_value; + + /** + * The name of this Header. + * + * @var string + */ + private $_fieldName; + + /** + * Creates a new SimpleHeader with $name. + * + * @param string $name + * @param Swift_Mime_HeaderEncoder $encoder + * @param Swift_Mime_Grammar $grammar + */ + public function __construct($name) + { + $this->_fieldName = $name; + } + + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_TEXT; + } + + /** + * Set the model for the field body. + * + * This method takes a string for the field value. + * + * @param string $model + */ + public function setFieldBodyModel($model) + { + $this->setValue($model); + } + + /** + * Get the model for the field body. + * + * This method returns a string. + * + * @return string + */ + public function getFieldBodyModel() + { + return $this->getValue(); + } + + /** + * Get the (unencoded) value of this header. + * + * @return string + */ + public function getValue() + { + return $this->_value; + } + + /** + * Set the (unencoded) value of this header. + * + * @param string $value + */ + public function setValue($value) + { + $this->_value = $value; + } + + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() + { + return $this->_value; + } + + /** + * Get this Header rendered as a RFC 2822 compliant string. + * + * @return string + */ + public function toString() + { + return $this->_fieldName.': '.$this->_value; + } + + /** + * Set the Header FieldName. + * + * @see Swift_Mime_Header::getFieldName() + */ + public function getFieldName() + { + return $this->_fieldName; + } + + /** + * Ignored. + */ + public function setCharset($charset) + { + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php new file mode 100644 index 00000000000..c506daec146 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php @@ -0,0 +1,258 @@ +_paramEncoder = $paramEncoder; + } + + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_PARAMETERIZED; + } + + /** + * Set the character set used in this Header. + * + * @param string $charset + */ + public function setCharset($charset) + { + parent::setCharset($charset); + if (isset($this->_paramEncoder)) { + $this->_paramEncoder->charsetChanged($charset); + } + } + + /** + * Set the value of $parameter. + * + * @param string $parameter + * @param string $value + */ + public function setParameter($parameter, $value) + { + $this->setParameters(array_merge($this->getParameters(), array($parameter => $value))); + } + + /** + * Get the value of $parameter. + * + * @param string $parameter + * + * @return string + */ + public function getParameter($parameter) + { + $params = $this->getParameters(); + + return array_key_exists($parameter, $params) ? $params[$parameter] : null; + } + + /** + * Set an associative array of parameter names mapped to values. + * + * @param string[] $parameters + */ + public function setParameters(array $parameters) + { + $this->clearCachedValueIf($this->_params != $parameters); + $this->_params = $parameters; + } + + /** + * Returns an associative array of parameter names mapped to values. + * + * @return string[] + */ + public function getParameters() + { + return $this->_params; + } + + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() //TODO: Check caching here + { + $body = parent::getFieldBody(); + foreach ($this->_params as $name => $value) { + if (!is_null($value)) { + // Add the parameter + $body .= '; '.$this->_createParameter($name, $value); + } + } + + return $body; + } + + /** + * Generate a list of all tokens in the final header. + * + * This doesn't need to be overridden in theory, but it is for implementation + * reasons to prevent potential breakage of attributes. + * + * @param string $string The string to tokenize + * + * @return array An array of tokens as strings + */ + protected function toTokens($string = null) + { + $tokens = parent::toTokens(parent::getFieldBody()); + + // Try creating any parameters + foreach ($this->_params as $name => $value) { + if (!is_null($value)) { + // Add the semi-colon separator + $tokens[count($tokens) - 1] .= ';'; + $tokens = array_merge($tokens, $this->generateTokenLines( + ' '.$this->_createParameter($name, $value) + )); + } + } + + return $tokens; + } + + /** + * Render a RFC 2047 compliant header parameter from the $name and $value. + * + * @param string $name + * @param string $value + * + * @return string + */ + private function _createParameter($name, $value) + { + $origValue = $value; + + $encoded = false; + // Allow room for parameter name, indices, "=" and DQUOTEs + $maxValueLength = $this->getMaxLineLength() - strlen($name.'=*N"";') - 1; + $firstLineOffset = 0; + + // If it's not already a valid parameter value... + if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { + // TODO: text, or something else?? + // ... and it's not ascii + if (!preg_match('/^'.$this->getGrammar()->getDefinition('text').'*$/D', $value)) { + $encoded = true; + // Allow space for the indices, charset and language + $maxValueLength = $this->getMaxLineLength() - strlen($name.'*N*="";') - 1; + $firstLineOffset = strlen( + $this->getCharset()."'".$this->getLanguage()."'" + ); + } + } + + // Encode if we need to + if ($encoded || strlen($value) > $maxValueLength) { + if (isset($this->_paramEncoder)) { + $value = $this->_paramEncoder->encodeString( + $origValue, $firstLineOffset, $maxValueLength, $this->getCharset() + ); + } else { + // We have to go against RFC 2183/2231 in some areas for interoperability + $value = $this->getTokenAsEncodedWord($origValue); + $encoded = false; + } + } + + $valueLines = isset($this->_paramEncoder) ? explode("\r\n", $value) : array($value); + + // Need to add indices + if (count($valueLines) > 1) { + $paramLines = array(); + foreach ($valueLines as $i => $line) { + $paramLines[] = $name.'*'.$i. + $this->_getEndOfParameterValue($line, true, $i == 0); + } + + return implode(";\r\n ", $paramLines); + } else { + return $name.$this->_getEndOfParameterValue( + $valueLines[0], $encoded, true + ); + } + } + + /** + * Returns the parameter value from the "=" and beyond. + * + * @param string $value to append + * @param bool $encoded + * @param bool $firstLine + * + * @return string + */ + private function _getEndOfParameterValue($value, $encoded = false, $firstLine = false) + { + if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { + $value = '"'.$value.'"'; + } + $prepend = '='; + if ($encoded) { + $prepend = '*='; + if ($firstLine) { + $prepend = '*='.$this->getCharset()."'".$this->getLanguage(). + "'"; + } + } + + return $prepend.$value; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php new file mode 100644 index 00000000000..2fffc7b4aac --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php @@ -0,0 +1,143 @@ +setFieldName($name); + parent::__construct($grammar); + } + + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_PATH; + } + + /** + * Set the model for the field body. + * This method takes a string for an address. + * + * @param string $model + * + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setAddress($model); + } + + /** + * Get the model for the field body. + * This method returns a string email address. + * + * @return mixed + */ + public function getFieldBodyModel() + { + return $this->getAddress(); + } + + /** + * Set the Address which should appear in this Header. + * + * @param string $address + * + * @throws Swift_RfcComplianceException + */ + public function setAddress($address) + { + if (is_null($address)) { + $this->_address = null; + } elseif ('' == $address) { + $this->_address = ''; + } else { + $this->_assertValidAddress($address); + $this->_address = $address; + } + $this->setCachedValue(null); + } + + /** + * Get the address which is used in this Header (if any). + * + * Null is returned if no address is set. + * + * @return string + */ + public function getAddress() + { + return $this->_address; + } + + /** + * Get the string value of the body in this Header. + * + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * + * @see toString() + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + if (isset($this->_address)) { + $this->setCachedValue('<'.$this->_address.'>'); + } + } + + return $this->getCachedValue(); + } + + /** + * Throws an Exception if the address passed does not comply with RFC 2822. + * + * @param string $address + * + * @throws Swift_RfcComplianceException If address is invalid + */ + private function _assertValidAddress($address) + { + if (!preg_match('/^'.$this->getGrammar()->getDefinition('addr-spec').'$/D', + $address)) { + throw new Swift_RfcComplianceException( + 'Address set in PathHeader does not comply with addr-spec of RFC 2822.' + ); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php new file mode 100644 index 00000000000..86177f14a1f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php @@ -0,0 +1,112 @@ +setFieldName($name); + $this->setEncoder($encoder); + parent::__construct($grammar); + } + + /** + * Get the type of Header that this instance represents. + * + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + * + * @return int + */ + public function getFieldType() + { + return self::TYPE_TEXT; + } + + /** + * Set the model for the field body. + * + * This method takes a string for the field value. + * + * @param string $model + */ + public function setFieldBodyModel($model) + { + $this->setValue($model); + } + + /** + * Get the model for the field body. + * + * This method returns a string. + * + * @return string + */ + public function getFieldBodyModel() + { + return $this->getValue(); + } + + /** + * Get the (unencoded) value of this header. + * + * @return string + */ + public function getValue() + { + return $this->_value; + } + + /** + * Set the (unencoded) value of this header. + * + * @param string $value + */ + public function setValue($value) + { + $this->clearCachedValueIf($this->_value != $value); + $this->_value = $value; + } + + /** + * Get the value of this header prepared for rendering. + * + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) { + $this->setCachedValue( + $this->encodeWords($this, $this->_value) + ); + } + + return $this->getCachedValue(); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Message.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Message.php new file mode 100644 index 00000000000..9b36d216271 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/Message.php @@ -0,0 +1,223 @@ + 'Real Name'). + * + * If the second parameter is provided and the first is a string, then $name + * is associated with the address. + * + * @param mixed $address + * @param string $name optional + */ + public function setSender($address, $name = null); + + /** + * Get the sender address for this message. + * + * This has a higher significance than the From address. + * + * @return string + */ + public function getSender(); + + /** + * Set the From address of this message. + * + * It is permissible for multiple From addresses to be set using an array. + * + * If multiple From addresses are used, you SHOULD set the Sender address and + * according to RFC 2822, MUST set the sender address. + * + * An array can be used if display names are to be provided: i.e. + * array('email@address.com' => 'Real Name'). + * + * If the second parameter is provided and the first is a string, then $name + * is associated with the address. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setFrom($addresses, $name = null); + + /** + * Get the From address(es) of this message. + * + * This method always returns an associative array where the keys are the + * addresses. + * + * @return string[] + */ + public function getFrom(); + + /** + * Set the Reply-To address(es). + * + * Any replies from the receiver will be sent to this address. + * + * It is permissible for multiple reply-to addresses to be set using an array. + * + * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. + * + * If the second parameter is provided and the first is a string, then $name + * is associated with the address. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setReplyTo($addresses, $name = null); + + /** + * Get the Reply-To addresses for this message. + * + * This method always returns an associative array where the keys provide the + * email addresses. + * + * @return string[] + */ + public function getReplyTo(); + + /** + * Set the To address(es). + * + * Recipients set in this field will receive a copy of this message. + * + * This method has the same synopsis as {@link setFrom()} and {@link setCc()}. + * + * If the second parameter is provided and the first is a string, then $name + * is associated with the address. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setTo($addresses, $name = null); + + /** + * Get the To addresses for this message. + * + * This method always returns an associative array, whereby the keys provide + * the actual email addresses. + * + * @return string[] + */ + public function getTo(); + + /** + * Set the Cc address(es). + * + * Recipients set in this field will receive a 'carbon-copy' of this message. + * + * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setCc($addresses, $name = null); + + /** + * Get the Cc addresses for this message. + * + * This method always returns an associative array, whereby the keys provide + * the actual email addresses. + * + * @return string[] + */ + public function getCc(); + + /** + * Set the Bcc address(es). + * + * Recipients set in this field will receive a 'blind-carbon-copy' of this + * message. + * + * In other words, they will get the message, but any other recipients of the + * message will have no such knowledge of their receipt of it. + * + * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setBcc($addresses, $name = null); + + /** + * Get the Bcc addresses for this message. + * + * This method always returns an associative array, whereby the keys provide + * the actual email addresses. + * + * @return string[] + */ + public function getBcc(); +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php new file mode 100644 index 00000000000..30f460cdcdb --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php @@ -0,0 +1,117 @@ +setContentType('text/plain'); + if (!is_null($charset)) { + $this->setCharset($charset); + } + } + + /** + * Set the body of this entity, either as a string, or as an instance of + * {@link Swift_OutputByteStream}. + * + * @param mixed $body + * @param string $contentType optional + * @param string $charset optional + * + * @return Swift_Mime_MimePart + */ + public function setBody($body, $contentType = null, $charset = null) + { + if (isset($charset)) { + $this->setCharset($charset); + } + $body = $this->_convertString($body); + + parent::setBody($body, $contentType); + + return $this; + } + + /** + * Get the character set of this entity. + * + * @return string + */ + public function getCharset() + { + return $this->_getHeaderParameter('Content-Type', 'charset'); + } + + /** + * Set the character set of this entity. + * + * @param string $charset + * + * @return Swift_Mime_MimePart + */ + public function setCharset($charset) + { + $this->_setHeaderParameter('Content-Type', 'charset', $charset); + if ($charset !== $this->_userCharset) { + $this->_clearCache(); + } + $this->_userCharset = $charset; + parent::charsetChanged($charset); + + return $this; + } + + /** + * Get the format of this entity (i.e. flowed or fixed). + * + * @return string + */ + public function getFormat() + { + return $this->_getHeaderParameter('Content-Type', 'format'); + } + + /** + * Set the format of this entity (flowed or fixed). + * + * @param string $format + * + * @return Swift_Mime_MimePart + */ + public function setFormat($format) + { + $this->_setHeaderParameter('Content-Type', 'format', $format); + $this->_userFormat = $format; + + return $this; + } + + /** + * Test if delsp is being used for this entity. + * + * @return bool + */ + public function getDelSp() + { + return 'yes' == $this->_getHeaderParameter('Content-Type', 'delsp') ? true : false; + } + + /** + * Turn delsp on or off for this entity. + * + * @param bool $delsp + * + * @return Swift_Mime_MimePart + */ + public function setDelSp($delsp = true) + { + $this->_setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); + $this->_userDelSp = $delsp; + + return $this; + } + + /** + * Get the nesting level of this entity. + * + * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED + * + * @return int + */ + public function getNestingLevel() + { + return $this->_nestingLevel; + } + + /** + * Receive notification that the charset has changed on this document, or a + * parent document. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->setCharset($charset); + } + + /** Fix the content-type and encoding of this entity */ + protected function _fixHeaders() + { + parent::_fixHeaders(); + if (count($this->getChildren())) { + $this->_setHeaderParameter('Content-Type', 'charset', null); + $this->_setHeaderParameter('Content-Type', 'format', null); + $this->_setHeaderParameter('Content-Type', 'delsp', null); + } else { + $this->setCharset($this->_userCharset); + $this->setFormat($this->_userFormat); + $this->setDelSp($this->_userDelSp); + } + } + + /** Set the nesting level of this entity */ + protected function _setNestingLevel($level) + { + $this->_nestingLevel = $level; + } + + /** Encode charset when charset is not utf-8 */ + protected function _convertString($string) + { + $charset = strtolower($this->getCharset()); + if (!in_array($charset, array('utf-8', 'iso-8859-1', ''))) { + // mb_convert_encoding must be the first one to check, since iconv cannot convert some words. + if (function_exists('mb_convert_encoding')) { + $string = mb_convert_encoding($string, $charset, 'utf-8'); + } elseif (function_exists('iconv')) { + $string = iconv('utf-8//TRANSLIT//IGNORE', $charset, $string); + } else { + throw new Swift_SwiftException('No suitable convert encoding function (use UTF-8 as your charset or install the mbstring or iconv extension).'); + } + + return $string; + } + + return $string; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php new file mode 100644 index 00000000000..e15c6ef95b1 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php @@ -0,0 +1,34 @@ +_encoder = $encoder; + $this->_paramEncoder = $paramEncoder; + $this->_grammar = $grammar; + $this->_charset = $charset; + } + + /** + * Create a new Mailbox Header with a list of $addresses. + * + * @param string $name + * @param array|string|null $addresses + * + * @return Swift_Mime_Header + */ + public function createMailboxHeader($name, $addresses = null) + { + $header = new Swift_Mime_Headers_MailboxHeader($name, $this->_encoder, $this->_grammar); + if (isset($addresses)) { + $header->setFieldBodyModel($addresses); + } + $this->_setHeaderCharset($header); + + return $header; + } + + /** + * Create a new Date header using $timestamp (UNIX time). + * + * @param string $name + * @param int|null $timestamp + * + * @return Swift_Mime_Header + */ + public function createDateHeader($name, $timestamp = null) + { + $header = new Swift_Mime_Headers_DateHeader($name, $this->_grammar); + if (isset($timestamp)) { + $header->setFieldBodyModel($timestamp); + } + $this->_setHeaderCharset($header); + + return $header; + } + + /** + * Create a new basic text header with $name and $value. + * + * @param string $name + * @param string $value + * + * @return Swift_Mime_Header + */ + public function createTextHeader($name, $value = null) + { + $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->_encoder, $this->_grammar); + if (isset($value)) { + $header->setFieldBodyModel($value); + } + $this->_setHeaderCharset($header); + + return $header; + } + + /** + * Create a new ParameterizedHeader with $name, $value and $params. + * + * @param string $name + * @param string $value + * @param array $params + * + * @return Swift_Mime_ParameterizedHeader + */ + public function createParameterizedHeader($name, $value = null, + $params = array()) + { + $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->_encoder, strtolower($name) == 'content-disposition' ? $this->_paramEncoder : null, $this->_grammar); + if (isset($value)) { + $header->setFieldBodyModel($value); + } + foreach ($params as $k => $v) { + $header->setParameter($k, $v); + } + $this->_setHeaderCharset($header); + + return $header; + } + + /** + * Create a new ID header for Message-ID or Content-ID. + * + * @param string $name + * @param string|array $ids + * + * @return Swift_Mime_Header + */ + public function createIdHeader($name, $ids = null) + { + $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->_grammar); + if (isset($ids)) { + $header->setFieldBodyModel($ids); + } + $this->_setHeaderCharset($header); + + return $header; + } + + /** + * Create a new Path header with an address (path) in it. + * + * @param string $name + * @param string $path + * + * @return Swift_Mime_Header + */ + public function createPathHeader($name, $path = null) + { + $header = new Swift_Mime_Headers_PathHeader($name, $this->_grammar); + if (isset($path)) { + $header->setFieldBodyModel($path); + } + $this->_setHeaderCharset($header); + + return $header; + } + + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->_charset = $charset; + $this->_encoder->charsetChanged($charset); + $this->_paramEncoder->charsetChanged($charset); + } + + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->_encoder = clone $this->_encoder; + $this->_paramEncoder = clone $this->_paramEncoder; + } + + /** Apply the charset to the Header */ + private function _setHeaderCharset(Swift_Mime_Header $header) + { + if (isset($this->_charset)) { + $header->setCharset($this->_charset); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php new file mode 100644 index 00000000000..cf8bf14a750 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php @@ -0,0 +1,397 @@ +_factory = $factory; + if (isset($charset)) { + $this->setCharset($charset); + } + } + + /** + * Set the charset used by these headers. + * + * @param string $charset + */ + public function setCharset($charset) + { + $this->_charset = $charset; + $this->_factory->charsetChanged($charset); + $this->_notifyHeadersOfCharset($charset); + } + + /** + * Add a new Mailbox Header with a list of $addresses. + * + * @param string $name + * @param array|string $addresses + */ + public function addMailboxHeader($name, $addresses = null) + { + $this->_storeHeader($name, + $this->_factory->createMailboxHeader($name, $addresses)); + } + + /** + * Add a new Date header using $timestamp (UNIX time). + * + * @param string $name + * @param int $timestamp + */ + public function addDateHeader($name, $timestamp = null) + { + $this->_storeHeader($name, + $this->_factory->createDateHeader($name, $timestamp)); + } + + /** + * Add a new basic text header with $name and $value. + * + * @param string $name + * @param string $value + */ + public function addTextHeader($name, $value = null) + { + $this->_storeHeader($name, + $this->_factory->createTextHeader($name, $value)); + } + + /** + * Add a new ParameterizedHeader with $name, $value and $params. + * + * @param string $name + * @param string $value + * @param array $params + */ + public function addParameterizedHeader($name, $value = null, $params = array()) + { + $this->_storeHeader($name, $this->_factory->createParameterizedHeader($name, $value, $params)); + } + + /** + * Add a new ID header for Message-ID or Content-ID. + * + * @param string $name + * @param string|array $ids + */ + public function addIdHeader($name, $ids = null) + { + $this->_storeHeader($name, $this->_factory->createIdHeader($name, $ids)); + } + + /** + * Add a new Path header with an address (path) in it. + * + * @param string $name + * @param string $path + */ + public function addPathHeader($name, $path = null) + { + $this->_storeHeader($name, $this->_factory->createPathHeader($name, $path)); + } + + /** + * Returns true if at least one header with the given $name exists. + * + * If multiple headers match, the actual one may be specified by $index. + * + * @param string $name + * @param int $index + * + * @return bool + */ + public function has($name, $index = 0) + { + $lowerName = strtolower($name); + + return array_key_exists($lowerName, $this->_headers) && array_key_exists($index, $this->_headers[$lowerName]); + } + + /** + * Set a header in the HeaderSet. + * + * The header may be a previously fetched header via {@link get()} or it may + * be one that has been created separately. + * + * If $index is specified, the header will be inserted into the set at this + * offset. + * + * @param Swift_Mime_Header $header + * @param int $index + */ + public function set(Swift_Mime_Header $header, $index = 0) + { + $this->_storeHeader($header->getFieldName(), $header, $index); + } + + /** + * Get the header with the given $name. + * + * If multiple headers match, the actual one may be specified by $index. + * Returns NULL if none present. + * + * @param string $name + * @param int $index + * + * @return Swift_Mime_Header + */ + public function get($name, $index = 0) + { + if ($this->has($name, $index)) { + $lowerName = strtolower($name); + + return $this->_headers[$lowerName][$index]; + } + } + + /** + * Get all headers with the given $name. + * + * @param string $name + * + * @return array + */ + public function getAll($name = null) + { + if (!isset($name)) { + $headers = array(); + foreach ($this->_headers as $collection) { + $headers = array_merge($headers, $collection); + } + + return $headers; + } + + $lowerName = strtolower($name); + if (!array_key_exists($lowerName, $this->_headers)) { + return array(); + } + + return $this->_headers[$lowerName]; + } + + /** + * Return the name of all Headers. + * + * @return array + */ + public function listAll() + { + $headers = $this->_headers; + if ($this->_canSort()) { + uksort($headers, array($this, '_sortHeaders')); + } + + return array_keys($headers); + } + + /** + * Remove the header with the given $name if it's set. + * + * If multiple headers match, the actual one may be specified by $index. + * + * @param string $name + * @param int $index + */ + public function remove($name, $index = 0) + { + $lowerName = strtolower($name); + unset($this->_headers[$lowerName][$index]); + } + + /** + * Remove all headers with the given $name. + * + * @param string $name + */ + public function removeAll($name) + { + $lowerName = strtolower($name); + unset($this->_headers[$lowerName]); + } + + /** + * Create a new instance of this HeaderSet. + * + * @return Swift_Mime_HeaderSet + */ + public function newInstance() + { + return new self($this->_factory); + } + + /** + * Define a list of Header names as an array in the correct order. + * + * These Headers will be output in the given order where present. + * + * @param array $sequence + */ + public function defineOrdering(array $sequence) + { + $this->_order = array_flip(array_map('strtolower', $sequence)); + } + + /** + * Set a list of header names which must always be displayed when set. + * + * Usually headers without a field value won't be output unless set here. + * + * @param array $names + */ + public function setAlwaysDisplayed(array $names) + { + $this->_required = array_flip(array_map('strtolower', $names)); + } + + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->setCharset($charset); + } + + /** + * Returns a string with a representation of all headers. + * + * @return string + */ + public function toString() + { + $string = ''; + $headers = $this->_headers; + if ($this->_canSort()) { + uksort($headers, array($this, '_sortHeaders')); + } + foreach ($headers as $collection) { + foreach ($collection as $header) { + if ($this->_isDisplayed($header) || $header->getFieldBody() != '') { + $string .= $header->toString(); + } + } + } + + return $string; + } + + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } + + /** Save a Header to the internal collection */ + private function _storeHeader($name, Swift_Mime_Header $header, $offset = null) + { + if (!isset($this->_headers[strtolower($name)])) { + $this->_headers[strtolower($name)] = array(); + } + if (!isset($offset)) { + $this->_headers[strtolower($name)][] = $header; + } else { + $this->_headers[strtolower($name)][$offset] = $header; + } + } + + /** Test if the headers can be sorted */ + private function _canSort() + { + return count($this->_order) > 0; + } + + /** uksort() algorithm for Header ordering */ + private function _sortHeaders($a, $b) + { + $lowerA = strtolower($a); + $lowerB = strtolower($b); + $aPos = array_key_exists($lowerA, $this->_order) ? $this->_order[$lowerA] : -1; + $bPos = array_key_exists($lowerB, $this->_order) ? $this->_order[$lowerB] : -1; + + if (-1 === $aPos && -1 === $bPos) { + // just be sure to be determinist here + return $a > $b ? -1 : 1; + } + + if ($aPos == -1) { + return 1; + } elseif ($bPos == -1) { + return -1; + } + + return $aPos < $bPos ? -1 : 1; + } + + /** Test if the given Header is always displayed */ + private function _isDisplayed(Swift_Mime_Header $header) + { + return array_key_exists(strtolower($header->getFieldName()), $this->_required); + } + + /** Notify all Headers of the new charset */ + private function _notifyHeadersOfCharset($charset) + { + foreach ($this->_headers as $headerGroup) { + foreach ($headerGroup as $header) { + $header->setCharset($charset); + } + } + } + + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->_factory = clone $this->_factory; + foreach ($this->_headers as $groupKey => $headerGroup) { + foreach ($headerGroup as $key => $header) { + $this->_headers[$groupKey][$key] = clone $header; + } + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php new file mode 100644 index 00000000000..124644b5a93 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php @@ -0,0 +1,649 @@ +getHeaders()->defineOrdering(array( + 'Return-Path', + 'Received', + 'DKIM-Signature', + 'DomainKey-Signature', + 'Sender', + 'Message-ID', + 'Date', + 'Subject', + 'From', + 'Reply-To', + 'To', + 'Cc', + 'Bcc', + 'MIME-Version', + 'Content-Type', + 'Content-Transfer-Encoding', + )); + $this->getHeaders()->setAlwaysDisplayed(array('Date', 'Message-ID', 'From')); + $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); + $this->setDate(time()); + $this->setId($this->getId()); + $this->getHeaders()->addMailboxHeader('From'); + } + + /** + * Always returns {@link LEVEL_TOP} for a message instance. + * + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_TOP; + } + + /** + * Set the subject of this message. + * + * @param string $subject + * + * @return Swift_Mime_SimpleMessage + */ + public function setSubject($subject) + { + if (!$this->_setHeaderFieldModel('Subject', $subject)) { + $this->getHeaders()->addTextHeader('Subject', $subject); + } + + return $this; + } + + /** + * Get the subject of this message. + * + * @return string + */ + public function getSubject() + { + return $this->_getHeaderFieldModel('Subject'); + } + + /** + * Set the date at which this message was created. + * + * @param int $date + * + * @return Swift_Mime_SimpleMessage + */ + public function setDate($date) + { + if (!$this->_setHeaderFieldModel('Date', $date)) { + $this->getHeaders()->addDateHeader('Date', $date); + } + + return $this; + } + + /** + * Get the date at which this message was created. + * + * @return int + */ + public function getDate() + { + return $this->_getHeaderFieldModel('Date'); + } + + /** + * Set the return-path (the bounce address) of this message. + * + * @param string $address + * + * @return Swift_Mime_SimpleMessage + */ + public function setReturnPath($address) + { + if (!$this->_setHeaderFieldModel('Return-Path', $address)) { + $this->getHeaders()->addPathHeader('Return-Path', $address); + } + + return $this; + } + + /** + * Get the return-path (bounce address) of this message. + * + * @return string + */ + public function getReturnPath() + { + return $this->_getHeaderFieldModel('Return-Path'); + } + + /** + * Set the sender of this message. + * + * This does not override the From field, but it has a higher significance. + * + * @param string $address + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function setSender($address, $name = null) + { + if (!is_array($address) && isset($name)) { + $address = array($address => $name); + } + + if (!$this->_setHeaderFieldModel('Sender', (array) $address)) { + $this->getHeaders()->addMailboxHeader('Sender', (array) $address); + } + + return $this; + } + + /** + * Get the sender of this message. + * + * @return string + */ + public function getSender() + { + return $this->_getHeaderFieldModel('Sender'); + } + + /** + * Add a From: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function addFrom($address, $name = null) + { + $current = $this->getFrom(); + $current[$address] = $name; + + return $this->setFrom($current); + } + + /** + * Set the from address of this message. + * + * You may pass an array of addresses if this message is from multiple people. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param string|array $addresses + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function setFrom($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('From', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('From', (array) $addresses); + } + + return $this; + } + + /** + * Get the from address of this message. + * + * @return mixed + */ + public function getFrom() + { + return $this->_getHeaderFieldModel('From'); + } + + /** + * Add a Reply-To: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function addReplyTo($address, $name = null) + { + $current = $this->getReplyTo(); + $current[$address] = $name; + + return $this->setReplyTo($current); + } + + /** + * Set the reply-to address of this message. + * + * You may pass an array of addresses if replies will go to multiple people. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function setReplyTo($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('Reply-To', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); + } + + return $this; + } + + /** + * Get the reply-to address of this message. + * + * @return string + */ + public function getReplyTo() + { + return $this->_getHeaderFieldModel('Reply-To'); + } + + /** + * Add a To: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function addTo($address, $name = null) + { + $current = $this->getTo(); + $current[$address] = $name; + + return $this->setTo($current); + } + + /** + * Set the to addresses of this message. + * + * If multiple recipients will receive the message an array should be used. + * Example: array('receiver@domain.org', 'other@domain.org' => 'A name') + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function setTo($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('To', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('To', (array) $addresses); + } + + return $this; + } + + /** + * Get the To addresses of this message. + * + * @return array + */ + public function getTo() + { + return $this->_getHeaderFieldModel('To'); + } + + /** + * Add a Cc: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function addCc($address, $name = null) + { + $current = $this->getCc(); + $current[$address] = $name; + + return $this->setCc($current); + } + + /** + * Set the Cc addresses of this message. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function setCc($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('Cc', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); + } + + return $this; + } + + /** + * Get the Cc address of this message. + * + * @return array + */ + public function getCc() + { + return $this->_getHeaderFieldModel('Cc'); + } + + /** + * Add a Bcc: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function addBcc($address, $name = null) + { + $current = $this->getBcc(); + $current[$address] = $name; + + return $this->setBcc($current); + } + + /** + * Set the Bcc addresses of this message. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param mixed $addresses + * @param string $name optional + * + * @return Swift_Mime_SimpleMessage + */ + public function setBcc($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('Bcc', (array) $addresses)) { + $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); + } + + return $this; + } + + /** + * Get the Bcc addresses of this message. + * + * @return array + */ + public function getBcc() + { + return $this->_getHeaderFieldModel('Bcc'); + } + + /** + * Set the priority of this message. + * + * The value is an integer where 1 is the highest priority and 5 is the lowest. + * + * @param int $priority + * + * @return Swift_Mime_SimpleMessage + */ + public function setPriority($priority) + { + $priorityMap = array( + 1 => 'Highest', + 2 => 'High', + 3 => 'Normal', + 4 => 'Low', + 5 => 'Lowest', + ); + $pMapKeys = array_keys($priorityMap); + if ($priority > max($pMapKeys)) { + $priority = max($pMapKeys); + } elseif ($priority < min($pMapKeys)) { + $priority = min($pMapKeys); + } + if (!$this->_setHeaderFieldModel('X-Priority', + sprintf('%d (%s)', $priority, $priorityMap[$priority]))) { + $this->getHeaders()->addTextHeader('X-Priority', + sprintf('%d (%s)', $priority, $priorityMap[$priority])); + } + + return $this; + } + + /** + * Get the priority of this message. + * + * The returned value is an integer where 1 is the highest priority and 5 + * is the lowest. + * + * @return int + */ + public function getPriority() + { + list($priority) = sscanf($this->_getHeaderFieldModel('X-Priority'), + '%[1-5]' + ); + + return isset($priority) ? $priority : 3; + } + + /** + * Ask for a delivery receipt from the recipient to be sent to $addresses. + * + * @param array $addresses + * + * @return Swift_Mime_SimpleMessage + */ + public function setReadReceiptTo($addresses) + { + if (!$this->_setHeaderFieldModel('Disposition-Notification-To', $addresses)) { + $this->getHeaders() + ->addMailboxHeader('Disposition-Notification-To', $addresses); + } + + return $this; + } + + /** + * Get the addresses to which a read-receipt will be sent. + * + * @return string + */ + public function getReadReceiptTo() + { + return $this->_getHeaderFieldModel('Disposition-Notification-To'); + } + + /** + * Attach a {@link Swift_Mime_MimeEntity} such as an Attachment or MimePart. + * + * @param Swift_Mime_MimeEntity $entity + * + * @return Swift_Mime_SimpleMessage + */ + public function attach(Swift_Mime_MimeEntity $entity) + { + $this->setChildren(array_merge($this->getChildren(), array($entity))); + + return $this; + } + + /** + * Remove an already attached entity. + * + * @param Swift_Mime_MimeEntity $entity + * + * @return Swift_Mime_SimpleMessage + */ + public function detach(Swift_Mime_MimeEntity $entity) + { + $newChildren = array(); + foreach ($this->getChildren() as $child) { + if ($entity !== $child) { + $newChildren[] = $child; + } + } + $this->setChildren($newChildren); + + return $this; + } + + /** + * Attach a {@link Swift_Mime_MimeEntity} and return it's CID source. + * This method should be used when embedding images or other data in a message. + * + * @param Swift_Mime_MimeEntity $entity + * + * @return string + */ + public function embed(Swift_Mime_MimeEntity $entity) + { + $this->attach($entity); + + return 'cid:'.$entity->getId(); + } + + /** + * Get this message as a complete string. + * + * @return string + */ + public function toString() + { + if (count($children = $this->getChildren()) > 0 && $this->getBody() != '') { + $this->setChildren(array_merge(array($this->_becomeMimePart()), $children)); + $string = parent::toString(); + $this->setChildren($children); + } else { + $string = parent::toString(); + } + + return $string; + } + + /** + * Returns a string representation of this object. + * + * @see toString() + * + * @return string + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Write this message to a {@link Swift_InputByteStream}. + * + * @param Swift_InputByteStream $is + */ + public function toByteStream(Swift_InputByteStream $is) + { + if (count($children = $this->getChildren()) > 0 && $this->getBody() != '') { + $this->setChildren(array_merge(array($this->_becomeMimePart()), $children)); + parent::toByteStream($is); + $this->setChildren($children); + } else { + parent::toByteStream($is); + } + } + + /** @see Swift_Mime_SimpleMimeEntity::_getIdField() */ + protected function _getIdField() + { + return 'Message-ID'; + } + + /** Turn the body of this message into a child of itself if needed */ + protected function _becomeMimePart() + { + $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), + $this->_getCache(), $this->_getGrammar(), $this->_userCharset + ); + $part->setContentType($this->_userContentType); + $part->setBody($this->getBody()); + $part->setFormat($this->_userFormat); + $part->setDelSp($this->_userDelSp); + $part->_setNestingLevel($this->_getTopNestingLevel()); + + return $part; + } + + /** Get the highest nesting level nested inside this message */ + private function _getTopNestingLevel() + { + $highestLevel = $this->getNestingLevel(); + foreach ($this->getChildren() as $child) { + $childLevel = $child->getNestingLevel(); + if ($highestLevel < $childLevel) { + $highestLevel = $childLevel; + } + } + + return $highestLevel; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php new file mode 100644 index 00000000000..6b91718fb85 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php @@ -0,0 +1,843 @@ + array(self::LEVEL_TOP, self::LEVEL_MIXED), + 'multipart/alternative' => array(self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE), + 'multipart/related' => array(self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED), + ); + + /** A set of filter rules to define what level an entity should be nested at */ + private $_compoundLevelFilters = array(); + + /** The nesting level of this entity */ + private $_nestingLevel = self::LEVEL_ALTERNATIVE; + + /** A KeyCache instance used during encoding and streaming */ + private $_cache; + + /** Direct descendants of this entity */ + private $_immediateChildren = array(); + + /** All descendants of this entity */ + private $_children = array(); + + /** The maximum line length of the body of this entity */ + private $_maxLineLength = 78; + + /** The order in which alternative mime types should appear */ + private $_alternativePartOrder = array( + 'text/plain' => 1, + 'text/html' => 2, + 'multipart/related' => 3, + ); + + /** The CID of this entity */ + private $_id; + + /** The key used for accessing the cache */ + private $_cacheKey; + + protected $_userContentType; + + /** + * Create a new SimpleMimeEntity with $headers, $encoder and $cache. + * + * @param Swift_Mime_HeaderSet $headers + * @param Swift_Mime_ContentEncoder $encoder + * @param Swift_KeyCache $cache + * @param Swift_Mime_Grammar $grammar + */ + public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_Mime_Grammar $grammar) + { + $this->_cacheKey = md5(uniqid(getmypid().mt_rand(), true)); + $this->_cache = $cache; + $this->_headers = $headers; + $this->_grammar = $grammar; + $this->setEncoder($encoder); + $this->_headers->defineOrdering(array('Content-Type', 'Content-Transfer-Encoding')); + + // This array specifies that, when the entire MIME document contains + // $compoundLevel, then for each child within $level, if its Content-Type + // is $contentType then it should be treated as if it's level is + // $neededLevel instead. I tried to write that unambiguously! :-\ + // Data Structure: + // array ( + // $compoundLevel => array( + // $level => array( + // $contentType => $neededLevel + // ) + // ) + // ) + + $this->_compoundLevelFilters = array( + (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => array( + self::LEVEL_ALTERNATIVE => array( + 'text/plain' => self::LEVEL_ALTERNATIVE, + 'text/html' => self::LEVEL_RELATED, + ), + ), + ); + + $this->_id = $this->getRandomId(); + } + + /** + * Generate a new Content-ID or Message-ID for this MIME entity. + * + * @return string + */ + public function generateId() + { + $this->setId($this->getRandomId()); + + return $this->_id; + } + + /** + * Get the {@link Swift_Mime_HeaderSet} for this entity. + * + * @return Swift_Mime_HeaderSet + */ + public function getHeaders() + { + return $this->_headers; + } + + /** + * Get the nesting level of this entity. + * + * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE + * + * @return int + */ + public function getNestingLevel() + { + return $this->_nestingLevel; + } + + /** + * Get the Content-type of this entity. + * + * @return string + */ + public function getContentType() + { + return $this->_getHeaderFieldModel('Content-Type'); + } + + /** + * Set the Content-type of this entity. + * + * @param string $type + * + * @return Swift_Mime_SimpleMimeEntity + */ + public function setContentType($type) + { + $this->_setContentTypeInHeaders($type); + // Keep track of the value so that if the content-type changes automatically + // due to added child entities, it can be restored if they are later removed + $this->_userContentType = $type; + + return $this; + } + + /** + * Get the CID of this entity. + * + * The CID will only be present in headers if a Content-ID header is present. + * + * @return string + */ + public function getId() + { + $tmp = (array) $this->_getHeaderFieldModel($this->_getIdField()); + + return $this->_headers->has($this->_getIdField()) ? current($tmp) : $this->_id; + } + + /** + * Set the CID of this entity. + * + * @param string $id + * + * @return Swift_Mime_SimpleMimeEntity + */ + public function setId($id) + { + if (!$this->_setHeaderFieldModel($this->_getIdField(), $id)) { + $this->_headers->addIdHeader($this->_getIdField(), $id); + } + $this->_id = $id; + + return $this; + } + + /** + * Get the description of this entity. + * + * This value comes from the Content-Description header if set. + * + * @return string + */ + public function getDescription() + { + return $this->_getHeaderFieldModel('Content-Description'); + } + + /** + * Set the description of this entity. + * + * This method sets a value in the Content-ID header. + * + * @param string $description + * + * @return Swift_Mime_SimpleMimeEntity + */ + public function setDescription($description) + { + if (!$this->_setHeaderFieldModel('Content-Description', $description)) { + $this->_headers->addTextHeader('Content-Description', $description); + } + + return $this; + } + + /** + * Get the maximum line length of the body of this entity. + * + * @return int + */ + public function getMaxLineLength() + { + return $this->_maxLineLength; + } + + /** + * Set the maximum line length of lines in this body. + * + * Though not enforced by the library, lines should not exceed 1000 chars. + * + * @param int $length + * + * @return Swift_Mime_SimpleMimeEntity + */ + public function setMaxLineLength($length) + { + $this->_maxLineLength = $length; + + return $this; + } + + /** + * Get all children added to this entity. + * + * @return Swift_Mime_MimeEntity[] + */ + public function getChildren() + { + return $this->_children; + } + + /** + * Set all children of this entity. + * + * @param Swift_Mime_MimeEntity[] $children + * @param int $compoundLevel For internal use only + * + * @return Swift_Mime_SimpleMimeEntity + */ + public function setChildren(array $children, $compoundLevel = null) + { + // TODO: Try to refactor this logic + + $compoundLevel = isset($compoundLevel) ? $compoundLevel : $this->_getCompoundLevel($children); + $immediateChildren = array(); + $grandchildren = array(); + $newContentType = $this->_userContentType; + + foreach ($children as $child) { + $level = $this->_getNeededChildLevel($child, $compoundLevel); + if (empty($immediateChildren)) { + //first iteration + $immediateChildren = array($child); + } else { + $nextLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel); + if ($nextLevel == $level) { + $immediateChildren[] = $child; + } elseif ($level < $nextLevel) { + // Re-assign immediateChildren to grandchildren + $grandchildren = array_merge($grandchildren, $immediateChildren); + // Set new children + $immediateChildren = array($child); + } else { + $grandchildren[] = $child; + } + } + } + + if ($immediateChildren) { + $lowestLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel); + + // Determine which composite media type is needed to accommodate the + // immediate children + foreach ($this->_compositeRanges as $mediaType => $range) { + if ($lowestLevel > $range[0] && $lowestLevel <= $range[1]) { + $newContentType = $mediaType; + + break; + } + } + + // Put any grandchildren in a subpart + if (!empty($grandchildren)) { + $subentity = $this->_createChild(); + $subentity->_setNestingLevel($lowestLevel); + $subentity->setChildren($grandchildren, $compoundLevel); + array_unshift($immediateChildren, $subentity); + } + } + + $this->_immediateChildren = $immediateChildren; + $this->_children = $children; + $this->_setContentTypeInHeaders($newContentType); + $this->_fixHeaders(); + $this->_sortChildren(); + + return $this; + } + + /** + * Get the body of this entity as a string. + * + * @return string + */ + public function getBody() + { + return $this->_body instanceof Swift_OutputByteStream ? $this->_readStream($this->_body) : $this->_body; + } + + /** + * Set the body of this entity, either as a string, or as an instance of + * {@link Swift_OutputByteStream}. + * + * @param mixed $body + * @param string $contentType optional + * + * @return Swift_Mime_SimpleMimeEntity + */ + public function setBody($body, $contentType = null) + { + if ($body !== $this->_body) { + $this->_clearCache(); + } + + $this->_body = $body; + if (isset($contentType)) { + $this->setContentType($contentType); + } + + return $this; + } + + /** + * Get the encoder used for the body of this entity. + * + * @return Swift_Mime_ContentEncoder + */ + public function getEncoder() + { + return $this->_encoder; + } + + /** + * Set the encoder used for the body of this entity. + * + * @param Swift_Mime_ContentEncoder $encoder + * + * @return Swift_Mime_SimpleMimeEntity + */ + public function setEncoder(Swift_Mime_ContentEncoder $encoder) + { + if ($encoder !== $this->_encoder) { + $this->_clearCache(); + } + + $this->_encoder = $encoder; + $this->_setEncoding($encoder->getName()); + $this->_notifyEncoderChanged($encoder); + + return $this; + } + + /** + * Get the boundary used to separate children in this entity. + * + * @return string + */ + public function getBoundary() + { + if (!isset($this->_boundary)) { + $this->_boundary = '_=_swift_v4_'.time().'_'.md5(getmypid().mt_rand().uniqid('', true)).'_=_'; + } + + return $this->_boundary; + } + + /** + * Set the boundary used to separate children in this entity. + * + * @param string $boundary + * + * @throws Swift_RfcComplianceException + * + * @return Swift_Mime_SimpleMimeEntity + */ + public function setBoundary($boundary) + { + $this->_assertValidBoundary($boundary); + $this->_boundary = $boundary; + + return $this; + } + + /** + * Receive notification that the charset of this entity, or a parent entity + * has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->_notifyCharsetChanged($charset); + } + + /** + * Receive notification that the encoder of this entity or a parent entity + * has changed. + * + * @param Swift_Mime_ContentEncoder $encoder + */ + public function encoderChanged(Swift_Mime_ContentEncoder $encoder) + { + $this->_notifyEncoderChanged($encoder); + } + + /** + * Get this entire entity as a string. + * + * @return string + */ + public function toString() + { + $string = $this->_headers->toString(); + $string .= $this->_bodyToString(); + + return $string; + } + + /** + * Get this entire entity as a string. + * + * @return string + */ + protected function _bodyToString() + { + $string = ''; + + if (isset($this->_body) && empty($this->_immediateChildren)) { + if ($this->_cache->hasKey($this->_cacheKey, 'body')) { + $body = $this->_cache->getString($this->_cacheKey, 'body'); + } else { + $body = "\r\n".$this->_encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()); + $this->_cache->setString($this->_cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE); + } + $string .= $body; + } + + if (!empty($this->_immediateChildren)) { + foreach ($this->_immediateChildren as $child) { + $string .= "\r\n\r\n--".$this->getBoundary()."\r\n"; + $string .= $child->toString(); + } + $string .= "\r\n\r\n--".$this->getBoundary()."--\r\n"; + } + + return $string; + } + + /** + * Returns a string representation of this object. + * + * @see toString() + * + * @return string + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Write this entire entity to a {@see Swift_InputByteStream}. + * + * @param Swift_InputByteStream + */ + public function toByteStream(Swift_InputByteStream $is) + { + $is->write($this->_headers->toString()); + $is->commit(); + + $this->_bodyToByteStream($is); + } + + /** + * Write this entire entity to a {@link Swift_InputByteStream}. + * + * @param Swift_InputByteStream + */ + protected function _bodyToByteStream(Swift_InputByteStream $is) + { + if (empty($this->_immediateChildren)) { + if (isset($this->_body)) { + if ($this->_cache->hasKey($this->_cacheKey, 'body')) { + $this->_cache->exportToByteStream($this->_cacheKey, 'body', $is); + } else { + $cacheIs = $this->_cache->getInputByteStream($this->_cacheKey, 'body'); + if ($cacheIs) { + $is->bind($cacheIs); + } + + $is->write("\r\n"); + + if ($this->_body instanceof Swift_OutputByteStream) { + $this->_body->setReadPointer(0); + + $this->_encoder->encodeByteStream($this->_body, $is, 0, $this->getMaxLineLength()); + } else { + $is->write($this->_encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength())); + } + + if ($cacheIs) { + $is->unbind($cacheIs); + } + } + } + } + + if (!empty($this->_immediateChildren)) { + foreach ($this->_immediateChildren as $child) { + $is->write("\r\n\r\n--".$this->getBoundary()."\r\n"); + $child->toByteStream($is); + } + $is->write("\r\n\r\n--".$this->getBoundary()."--\r\n"); + } + } + + /** + * Get the name of the header that provides the ID of this entity. + */ + protected function _getIdField() + { + return 'Content-ID'; + } + + /** + * Get the model data (usually an array or a string) for $field. + */ + protected function _getHeaderFieldModel($field) + { + if ($this->_headers->has($field)) { + return $this->_headers->get($field)->getFieldBodyModel(); + } + } + + /** + * Set the model data for $field. + */ + protected function _setHeaderFieldModel($field, $model) + { + if ($this->_headers->has($field)) { + $this->_headers->get($field)->setFieldBodyModel($model); + + return true; + } + + return false; + } + + /** + * Get the parameter value of $parameter on $field header. + */ + protected function _getHeaderParameter($field, $parameter) + { + if ($this->_headers->has($field)) { + return $this->_headers->get($field)->getParameter($parameter); + } + } + + /** + * Set the parameter value of $parameter on $field header. + */ + protected function _setHeaderParameter($field, $parameter, $value) + { + if ($this->_headers->has($field)) { + $this->_headers->get($field)->setParameter($parameter, $value); + + return true; + } + + return false; + } + + /** + * Re-evaluate what content type and encoding should be used on this entity. + */ + protected function _fixHeaders() + { + if (count($this->_immediateChildren)) { + $this->_setHeaderParameter('Content-Type', 'boundary', + $this->getBoundary() + ); + $this->_headers->remove('Content-Transfer-Encoding'); + } else { + $this->_setHeaderParameter('Content-Type', 'boundary', null); + $this->_setEncoding($this->_encoder->getName()); + } + } + + /** + * Get the KeyCache used in this entity. + * + * @return Swift_KeyCache + */ + protected function _getCache() + { + return $this->_cache; + } + + /** + * Get the grammar used for validation. + * + * @return Swift_Mime_Grammar + */ + protected function _getGrammar() + { + return $this->_grammar; + } + + /** + * Empty the KeyCache for this entity. + */ + protected function _clearCache() + { + $this->_cache->clearKey($this->_cacheKey, 'body'); + } + + /** + * Returns a random Content-ID or Message-ID. + * + * @return string + */ + protected function getRandomId() + { + $idLeft = md5(getmypid().'.'.time().'.'.uniqid(mt_rand(), true)); + $idRight = !empty($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'swift.generated'; + $id = $idLeft.'@'.$idRight; + + try { + $this->_assertValidId($id); + } catch (Swift_RfcComplianceException $e) { + $id = $idLeft.'@swift.generated'; + } + + return $id; + } + + private function _readStream(Swift_OutputByteStream $os) + { + $string = ''; + while (false !== $bytes = $os->read(8192)) { + $string .= $bytes; + } + + $os->setReadPointer(0); + + return $string; + } + + private function _setEncoding($encoding) + { + if (!$this->_setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) { + $this->_headers->addTextHeader('Content-Transfer-Encoding', $encoding); + } + } + + private function _assertValidBoundary($boundary) + { + if (!preg_match('/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', $boundary)) { + throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); + } + } + + private function _setContentTypeInHeaders($type) + { + if (!$this->_setHeaderFieldModel('Content-Type', $type)) { + $this->_headers->addParameterizedHeader('Content-Type', $type); + } + } + + private function _setNestingLevel($level) + { + $this->_nestingLevel = $level; + } + + private function _getCompoundLevel($children) + { + $level = 0; + foreach ($children as $child) { + $level |= $child->getNestingLevel(); + } + + return $level; + } + + private function _getNeededChildLevel($child, $compoundLevel) + { + $filter = array(); + foreach ($this->_compoundLevelFilters as $bitmask => $rules) { + if (($compoundLevel & $bitmask) === $bitmask) { + $filter = $rules + $filter; + } + } + + $realLevel = $child->getNestingLevel(); + $lowercaseType = strtolower($child->getContentType()); + + if (isset($filter[$realLevel]) && isset($filter[$realLevel][$lowercaseType])) { + return $filter[$realLevel][$lowercaseType]; + } + + return $realLevel; + } + + private function _createChild() + { + return new self($this->_headers->newInstance(), $this->_encoder, $this->_cache, $this->_grammar); + } + + private function _notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) + { + foreach ($this->_immediateChildren as $child) { + $child->encoderChanged($encoder); + } + } + + private function _notifyCharsetChanged($charset) + { + $this->_encoder->charsetChanged($charset); + $this->_headers->charsetChanged($charset); + foreach ($this->_immediateChildren as $child) { + $child->charsetChanged($charset); + } + } + + private function _sortChildren() + { + $shouldSort = false; + foreach ($this->_immediateChildren as $child) { + // NOTE: This include alternative parts moved into a related part + if ($child->getNestingLevel() == self::LEVEL_ALTERNATIVE) { + $shouldSort = true; + break; + } + } + + // Sort in order of preference, if there is one + if ($shouldSort) { + usort($this->_immediateChildren, array($this, '_childSortAlgorithm')); + } + } + + private function _childSortAlgorithm($a, $b) + { + $typePrefs = array(); + $types = array(strtolower($a->getContentType()), strtolower($b->getContentType())); + + foreach ($types as $type) { + $typePrefs[] = array_key_exists($type, $this->_alternativePartOrder) ? $this->_alternativePartOrder[$type] : max($this->_alternativePartOrder) + 1; + } + + return $typePrefs[0] >= $typePrefs[1] ? 1 : -1; + } + + // -- Destructor + + /** + * Empties it's own contents from the cache. + */ + public function __destruct() + { + $this->_cache->clearAll($this->_cacheKey); + } + + /** + * Throws an Exception if the id passed does not comply with RFC 2822. + * + * @param string $id + * + * @throws Swift_RfcComplianceException + */ + private function _assertValidId($id) + { + if (!preg_match('/^'.$this->_grammar->getDefinition('id-left').'@'.$this->_grammar->getDefinition('id-right').'$/D', $id)) { + throw new Swift_RfcComplianceException('Invalid ID given <'.$id.'>'); + } + } + + /** + * Make a deep copy of object. + */ + public function __clone() + { + $this->_headers = clone $this->_headers; + $this->_encoder = clone $this->_encoder; + $this->_cacheKey = uniqid(); + $children = array(); + foreach ($this->_children as $pos => $child) { + $children[$pos] = clone $child; + } + $this->setChildren($children); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php b/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php new file mode 100644 index 00000000000..215f8db348a --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/MimePart.php @@ -0,0 +1,59 @@ +createDependenciesFor('mime.part') + ); + + if (!isset($charset)) { + $charset = Swift_DependencyContainer::getInstance() + ->lookup('properties.charset'); + } + $this->setBody($body); + $this->setCharset($charset); + if ($contentType) { + $this->setContentType($contentType); + } + } + + /** + * Create a new MimePart. + * + * @param string $body + * @param string $contentType + * @param string $charset + * + * @return Swift_Mime_MimePart + */ + public static function newInstance($body = null, $contentType = null, $charset = null) + { + return new self($body, $contentType, $charset); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php new file mode 100644 index 00000000000..b38e1cf7697 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/NullTransport.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Pretends messages have been sent, but just ignores them. + * + * @author Fabien Potencier + */ +class Swift_NullTransport extends Swift_Transport_NullTransport +{ + /** + * Create a new NullTransport. + */ + public function __construct() + { + call_user_func_array( + array($this, 'Swift_Transport_NullTransport::__construct'), + Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.null') + ); + } + + /** + * Create a new NullTransport instance. + * + * @return Swift_NullTransport + */ + public static function newInstance() + { + return new self(); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/OutputByteStream.php b/htdocs/includes/swiftmailer/lib/classes/Swift/OutputByteStream.php new file mode 100644 index 00000000000..1f26f9be529 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/OutputByteStream.php @@ -0,0 +1,46 @@ +setThreshold($threshold); + $this->setSleepTime($sleep); + $this->_sleeper = $sleeper; + } + + /** + * Set the number of emails to send before restarting. + * + * @param int $threshold + */ + public function setThreshold($threshold) + { + $this->_threshold = $threshold; + } + + /** + * Get the number of emails to send before restarting. + * + * @return int + */ + public function getThreshold() + { + return $this->_threshold; + } + + /** + * Set the number of seconds to sleep for during a restart. + * + * @param int $sleep time + */ + public function setSleepTime($sleep) + { + $this->_sleep = $sleep; + } + + /** + * Get the number of seconds to sleep for during a restart. + * + * @return int + */ + public function getSleepTime() + { + return $this->_sleep; + } + + /** + * Invoked immediately before the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } + + /** + * Invoked immediately after the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + ++$this->_counter; + if ($this->_counter >= $this->_threshold) { + $transport = $evt->getTransport(); + $transport->stop(); + if ($this->_sleep) { + $this->sleep($this->_sleep); + } + $transport->start(); + $this->_counter = 0; + } + } + + /** + * Sleep for $seconds. + * + * @param int $seconds + */ + public function sleep($seconds) + { + if (isset($this->_sleeper)) { + $this->_sleeper->sleep($seconds); + } else { + sleep($seconds); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php new file mode 100644 index 00000000000..f7e18d0ebea --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php @@ -0,0 +1,164 @@ +getMessage(); + $message->toByteStream($this); + } + + /** + * Invoked immediately following a command being sent. + * + * @param Swift_Events_CommandEvent $evt + */ + public function commandSent(Swift_Events_CommandEvent $evt) + { + $command = $evt->getCommand(); + $this->_out += strlen($command); + } + + /** + * Invoked immediately following a response coming back. + * + * @param Swift_Events_ResponseEvent $evt + */ + public function responseReceived(Swift_Events_ResponseEvent $evt) + { + $response = $evt->getResponse(); + $this->_in += strlen($response); + } + + /** + * Called when a message is sent so that the outgoing counter can be increased. + * + * @param string $bytes + */ + public function write($bytes) + { + $this->_out += strlen($bytes); + foreach ($this->_mirrors as $stream) { + $stream->write($bytes); + } + } + + /** + * Not used. + */ + public function commit() + { + } + + /** + * Attach $is to this stream. + * + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(Swift_InputByteStream $is) + { + $this->_mirrors[] = $is; + } + + /** + * Remove an already bound stream. + * + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->_mirrors as $k => $stream) { + if ($is === $stream) { + unset($this->_mirrors[$k]); + } + } + } + + /** + * Not used. + */ + public function flushBuffers() + { + foreach ($this->_mirrors as $stream) { + $stream->flushBuffers(); + } + } + + /** + * Get the total number of bytes sent to the server. + * + * @return int + */ + public function getBytesOut() + { + return $this->_out; + } + + /** + * Get the total number of bytes received from the server. + * + * @return int + */ + public function getBytesIn() + { + return $this->_in; + } + + /** + * Reset the internal counters to zero. + */ + public function reset() + { + $this->_out = 0; + $this->_in = 0; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php new file mode 100644 index 00000000000..9f9f08b5674 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php @@ -0,0 +1,31 @@ + + * $replacements = array( + * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"), + * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y") + * ) + * + * + * When using an instance of {@link Swift_Plugins_Decorator_Replacements}, + * the object should return just the array of replacements for the address + * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}. + * + * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements + */ + public function __construct($replacements) + { + $this->setReplacements($replacements); + } + + /** + * Sets replacements. + * + * @param mixed $replacements Array or Swift_Plugins_Decorator_Replacements + * + * @see __construct() + */ + public function setReplacements($replacements) + { + if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) { + $this->_replacements = (array) $replacements; + } else { + $this->_replacements = $replacements; + } + } + + /** + * Invoked immediately before the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $this->_restoreMessage($message); + $to = array_keys($message->getTo()); + $address = array_shift($to); + if ($replacements = $this->getReplacementsFor($address)) { + $body = $message->getBody(); + $search = array_keys($replacements); + $replace = array_values($replacements); + $bodyReplaced = str_replace( + $search, $replace, $body + ); + if ($body != $bodyReplaced) { + $this->_originalBody = $body; + $message->setBody($bodyReplaced); + } + + foreach ($message->getHeaders()->getAll() as $header) { + $body = $header->getFieldBodyModel(); + $count = 0; + if (is_array($body)) { + $bodyReplaced = array(); + foreach ($body as $key => $value) { + $count1 = 0; + $count2 = 0; + $key = is_string($key) ? str_replace($search, $replace, $key, $count1) : $key; + $value = is_string($value) ? str_replace($search, $replace, $value, $count2) : $value; + $bodyReplaced[$key] = $value; + + if (!$count && ($count1 || $count2)) { + $count = 1; + } + } + } else { + $bodyReplaced = str_replace($search, $replace, $body, $count); + } + + if ($count) { + $this->_originalHeaders[$header->getFieldName()] = $body; + $header->setFieldBodyModel($bodyReplaced); + } + } + + $children = (array) $message->getChildren(); + foreach ($children as $child) { + list($type) = sscanf($child->getContentType(), '%[^/]/%s'); + if ('text' == $type) { + $body = $child->getBody(); + $bodyReplaced = str_replace( + $search, $replace, $body + ); + if ($body != $bodyReplaced) { + $child->setBody($bodyReplaced); + $this->_originalChildBodies[$child->getId()] = $body; + } + } + } + $this->_lastMessage = $message; + } + } + + /** + * Find a map of replacements for the address. + * + * If this plugin was provided with a delegate instance of + * {@link Swift_Plugins_Decorator_Replacements} then the call will be + * delegated to it. Otherwise, it will attempt to find the replacements + * from the array provided in the constructor. + * + * If no replacements can be found, an empty value (NULL) is returned. + * + * @param string $address + * + * @return array + */ + public function getReplacementsFor($address) + { + if ($this->_replacements instanceof Swift_Plugins_Decorator_Replacements) { + return $this->_replacements->getReplacementsFor($address); + } + + return isset($this->_replacements[$address]) ? $this->_replacements[$address] : null; + } + + /** + * Invoked immediately after the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $this->_restoreMessage($evt->getMessage()); + } + + /** Restore a changed message back to its original state */ + private function _restoreMessage(Swift_Mime_Message $message) + { + if ($this->_lastMessage === $message) { + if (isset($this->_originalBody)) { + $message->setBody($this->_originalBody); + $this->_originalBody = null; + } + if (!empty($this->_originalHeaders)) { + foreach ($message->getHeaders()->getAll() as $header) { + if (array_key_exists($header->getFieldName(), $this->_originalHeaders)) { + $header->setFieldBodyModel($this->_originalHeaders[$header->getFieldName()]); + } + } + $this->_originalHeaders = array(); + } + if (!empty($this->_originalChildBodies)) { + $children = (array) $message->getChildren(); + foreach ($children as $child) { + $id = $child->getId(); + if (array_key_exists($id, $this->_originalChildBodies)) { + $child->setBody($this->_originalChildBodies[$id]); + } + } + $this->_originalChildBodies = array(); + } + $this->_lastMessage = null; + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php new file mode 100644 index 00000000000..7552b67a2f7 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php @@ -0,0 +1,69 @@ +_sender = $sender; + } + + /** + * Invoked immediately before the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $headers = $message->getHeaders(); + + // save current recipients + $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath()); + + // replace them with the one to send to + $message->setReturnPath($this->_sender); + } + + /** + * Invoked immediately after the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + + // restore original headers + $headers = $message->getHeaders(); + + if ($headers->has('X-Swift-Return-Path')) { + $message->setReturnPath($headers->get('X-Swift-Return-Path')->getAddress()); + $headers->removeAll('X-Swift-Return-Path'); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Logger.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Logger.php new file mode 100644 index 00000000000..d9bce8935d5 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Logger.php @@ -0,0 +1,36 @@ +_logger = $logger; + } + + /** + * Add a log entry. + * + * @param string $entry + */ + public function add($entry) + { + $this->_logger->add($entry); + } + + /** + * Clear the log contents. + */ + public function clear() + { + $this->_logger->clear(); + } + + /** + * Get this log as a string. + * + * @return string + */ + public function dump() + { + return $this->_logger->dump(); + } + + /** + * Invoked immediately following a command being sent. + * + * @param Swift_Events_CommandEvent $evt + */ + public function commandSent(Swift_Events_CommandEvent $evt) + { + $command = $evt->getCommand(); + $this->_logger->add(sprintf('>> %s', $command)); + } + + /** + * Invoked immediately following a response coming back. + * + * @param Swift_Events_ResponseEvent $evt + */ + public function responseReceived(Swift_Events_ResponseEvent $evt) + { + $response = $evt->getResponse(); + $this->_logger->add(sprintf('<< %s', $response)); + } + + /** + * Invoked just before a Transport is started. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) + { + $transportName = get_class($evt->getSource()); + $this->_logger->add(sprintf('++ Starting %s', $transportName)); + } + + /** + * Invoked immediately after the Transport is started. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt) + { + $transportName = get_class($evt->getSource()); + $this->_logger->add(sprintf('++ %s started', $transportName)); + } + + /** + * Invoked just before a Transport is stopped. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) + { + $transportName = get_class($evt->getSource()); + $this->_logger->add(sprintf('++ Stopping %s', $transportName)); + } + + /** + * Invoked immediately after the Transport is stopped. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt) + { + $transportName = get_class($evt->getSource()); + $this->_logger->add(sprintf('++ %s stopped', $transportName)); + } + + /** + * Invoked as a TransportException is thrown in the Transport system. + * + * @param Swift_Events_TransportExceptionEvent $evt + */ + public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) + { + $e = $evt->getException(); + $message = $e->getMessage(); + $code = $e->getCode(); + $this->_logger->add(sprintf('!! %s (code: %s)', $message, $code)); + $message .= PHP_EOL; + $message .= 'Log data:'.PHP_EOL; + $message .= $this->_logger->dump(); + $evt->cancelBubble(); + throw new Swift_TransportException($message, $code, $e->getPrevious()); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php new file mode 100644 index 00000000000..865bb0aa3b9 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php @@ -0,0 +1,72 @@ +_size = $size; + } + + /** + * Add a log entry. + * + * @param string $entry + */ + public function add($entry) + { + $this->_log[] = $entry; + while (count($this->_log) > $this->_size) { + array_shift($this->_log); + } + } + + /** + * Clear the log contents. + */ + public function clear() + { + $this->_log = array(); + } + + /** + * Get this log as a string. + * + * @return string + */ + public function dump() + { + return implode(PHP_EOL, $this->_log); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php new file mode 100644 index 00000000000..3583297ab10 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php @@ -0,0 +1,58 @@ +_isHtml = $isHtml; + } + + /** + * Add a log entry. + * + * @param string $entry + */ + public function add($entry) + { + if ($this->_isHtml) { + printf('%s%s%s', htmlspecialchars($entry, ENT_QUOTES), '
', PHP_EOL); + } else { + printf('%s%s', $entry, PHP_EOL); + } + } + + /** + * Not implemented. + */ + public function clear() + { + } + + /** + * Not implemented. + */ + public function dump() + { + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php new file mode 100644 index 00000000000..e622cb37d16 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php @@ -0,0 +1,74 @@ +messages = array(); + } + + /** + * Get the message list. + * + * @return array + */ + public function getMessages() + { + return $this->messages; + } + + /** + * Get the message count. + * + * @return int count + */ + public function countMessages() + { + return count($this->messages); + } + + /** + * Empty the message list. + */ + public function clear() + { + $this->messages = array(); + } + + /** + * Invoked immediately before the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $this->messages[] = clone $evt->getMessage(); + } + + /** + * Invoked immediately after the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php new file mode 100644 index 00000000000..fb99e4c942b --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php @@ -0,0 +1,31 @@ +_host = $host; + $this->_port = $port; + $this->_crypto = $crypto; + } + + /** + * Create a new PopBeforeSmtpPlugin for $host and $port. + * + * @param string $host + * @param int $port + * @param string $crypto as "tls" or "ssl" + * + * @return Swift_Plugins_PopBeforeSmtpPlugin + */ + public static function newInstance($host, $port = 110, $crypto = null) + { + return new self($host, $port, $crypto); + } + + /** + * Set a Pop3Connection to delegate to instead of connecting directly. + * + * @param Swift_Plugins_Pop_Pop3Connection $connection + * + * @return Swift_Plugins_PopBeforeSmtpPlugin + */ + public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) + { + $this->_connection = $connection; + + return $this; + } + + /** + * Bind this plugin to a specific SMTP transport instance. + * + * @param Swift_Transport + */ + public function bindSmtp(Swift_Transport $smtp) + { + $this->_transport = $smtp; + } + + /** + * Set the connection timeout in seconds (default 10). + * + * @param int $timeout + * + * @return Swift_Plugins_PopBeforeSmtpPlugin + */ + public function setTimeout($timeout) + { + $this->_timeout = (int) $timeout; + + return $this; + } + + /** + * Set the username to use when connecting (if needed). + * + * @param string $username + * + * @return Swift_Plugins_PopBeforeSmtpPlugin + */ + public function setUsername($username) + { + $this->_username = $username; + + return $this; + } + + /** + * Set the password to use when connecting (if needed). + * + * @param string $password + * + * @return Swift_Plugins_PopBeforeSmtpPlugin + */ + public function setPassword($password) + { + $this->_password = $password; + + return $this; + } + + /** + * Connect to the POP3 host and authenticate. + * + * @throws Swift_Plugins_Pop_Pop3Exception if connection fails + */ + public function connect() + { + if (isset($this->_connection)) { + $this->_connection->connect(); + } else { + if (!isset($this->_socket)) { + if (!$socket = fsockopen( + $this->_getHostString(), $this->_port, $errno, $errstr, $this->_timeout)) { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('Failed to connect to POP3 host [%s]: %s', $this->_host, $errstr) + ); + } + $this->_socket = $socket; + + if (false === $greeting = fgets($this->_socket)) { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('Failed to connect to POP3 host [%s]', trim($greeting)) + ); + } + + $this->_assertOk($greeting); + + if ($this->_username) { + $this->_command(sprintf("USER %s\r\n", $this->_username)); + $this->_command(sprintf("PASS %s\r\n", $this->_password)); + } + } + } + } + + /** + * Disconnect from the POP3 host. + */ + public function disconnect() + { + if (isset($this->_connection)) { + $this->_connection->disconnect(); + } else { + $this->_command("QUIT\r\n"); + if (!fclose($this->_socket)) { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('POP3 host [%s] connection could not be stopped', $this->_host) + ); + } + $this->_socket = null; + } + } + + /** + * Invoked just before a Transport is started. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) + { + if (isset($this->_transport)) { + if ($this->_transport !== $evt->getTransport()) { + return; + } + } + + $this->connect(); + $this->disconnect(); + } + + /** + * Not used. + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt) + { + } + + /** + * Not used. + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) + { + } + + /** + * Not used. + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt) + { + } + + private function _command($command) + { + if (!fwrite($this->_socket, $command)) { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('Failed to write command [%s] to POP3 host', trim($command)) + ); + } + + if (false === $response = fgets($this->_socket)) { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('Failed to read from POP3 host after command [%s]', trim($command)) + ); + } + + $this->_assertOk($response); + + return $response; + } + + private function _assertOk($response) + { + if (substr($response, 0, 3) != '+OK') { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('POP3 command failed [%s]', trim($response)) + ); + } + } + + private function _getHostString() + { + $host = $this->_host; + switch (strtolower($this->_crypto)) { + case 'ssl': + $host = 'ssl://'.$host; + break; + + case 'tls': + $host = 'tls://'.$host; + break; + } + + return $host; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php new file mode 100644 index 00000000000..c3a1f868544 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php @@ -0,0 +1,213 @@ +_recipient = $recipient; + $this->_whitelist = $whitelist; + } + + /** + * Set the recipient of all messages. + * + * @param mixed $recipient + */ + public function setRecipient($recipient) + { + $this->_recipient = $recipient; + } + + /** + * Get the recipient of all messages. + * + * @return mixed + */ + public function getRecipient() + { + return $this->_recipient; + } + + /** + * Set a list of regular expressions to whitelist certain recipients. + * + * @param array $whitelist + */ + public function setWhitelist(array $whitelist) + { + $this->_whitelist = $whitelist; + } + + /** + * Get the whitelist. + * + * @return array + */ + public function getWhitelist() + { + return $this->_whitelist; + } + + /** + * Invoked immediately before the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $headers = $message->getHeaders(); + + // conditionally save current recipients + + if ($headers->has('to')) { + $headers->addMailboxHeader('X-Swift-To', $message->getTo()); + } + + if ($headers->has('cc')) { + $headers->addMailboxHeader('X-Swift-Cc', $message->getCc()); + } + + if ($headers->has('bcc')) { + $headers->addMailboxHeader('X-Swift-Bcc', $message->getBcc()); + } + + // Filter remaining headers against whitelist + $this->_filterHeaderSet($headers, 'To'); + $this->_filterHeaderSet($headers, 'Cc'); + $this->_filterHeaderSet($headers, 'Bcc'); + + // Add each hard coded recipient + $to = $message->getTo(); + if (null === $to) { + $to = array(); + } + + foreach ((array) $this->_recipient as $recipient) { + if (!array_key_exists($recipient, $to)) { + $message->addTo($recipient); + } + } + } + + /** + * Filter header set against a whitelist of regular expressions. + * + * @param Swift_Mime_HeaderSet $headerSet + * @param string $type + */ + private function _filterHeaderSet(Swift_Mime_HeaderSet $headerSet, $type) + { + foreach ($headerSet->getAll($type) as $headers) { + $headers->setNameAddresses($this->_filterNameAddresses($headers->getNameAddresses())); + } + } + + /** + * Filtered list of addresses => name pairs. + * + * @param array $recipients + * + * @return array + */ + private function _filterNameAddresses(array $recipients) + { + $filtered = array(); + + foreach ($recipients as $address => $name) { + if ($this->_isWhitelisted($address)) { + $filtered[$address] = $name; + } + } + + return $filtered; + } + + /** + * Matches address against whitelist of regular expressions. + * + * @param $recipient + * + * @return bool + */ + protected function _isWhitelisted($recipient) + { + if (in_array($recipient, (array) $this->_recipient)) { + return true; + } + + foreach ($this->_whitelist as $pattern) { + if (preg_match($pattern, $recipient)) { + return true; + } + } + + return false; + } + + /** + * Invoked immediately after the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $this->_restoreMessage($evt->getMessage()); + } + + private function _restoreMessage(Swift_Mime_Message $message) + { + // restore original headers + $headers = $message->getHeaders(); + + if ($headers->has('X-Swift-To')) { + $message->setTo($headers->get('X-Swift-To')->getNameAddresses()); + $headers->removeAll('X-Swift-To'); + } else { + $message->setTo(null); + } + + if ($headers->has('X-Swift-Cc')) { + $message->setCc($headers->get('X-Swift-Cc')->getNameAddresses()); + $headers->removeAll('X-Swift-Cc'); + } + + if ($headers->has('X-Swift-Bcc')) { + $message->setBcc($headers->get('X-Swift-Bcc')->getNameAddresses()); + $headers->removeAll('X-Swift-Bcc'); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php new file mode 100644 index 00000000000..0f21b7d6052 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporter.php @@ -0,0 +1,32 @@ +_reporter = $reporter; + } + + /** + * Not used. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } + + /** + * Invoked immediately after the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $failures = array_flip($evt->getFailedRecipients()); + foreach ((array) $message->getTo() as $address => $null) { + $this->_reporter->notify($message, $address, array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS); + } + foreach ((array) $message->getCc() as $address => $null) { + $this->_reporter->notify($message, $address, array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS); + } + foreach ((array) $message->getBcc() as $address => $null) { + $this->_reporter->notify($message, $address, array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php new file mode 100644 index 00000000000..cad9d168ef2 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php @@ -0,0 +1,59 @@ +_failures_cache[$address])) { + $this->_failures[] = $address; + $this->_failures_cache[$address] = true; + } + } + + /** + * Get an array of addresses for which delivery failed. + * + * @return array + */ + public function getFailedRecipients() + { + return $this->_failures; + } + + /** + * Clear the buffer (empty the list). + */ + public function clear() + { + $this->_failures = $this->_failures_cache = array(); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php new file mode 100644 index 00000000000..c62593557e3 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php @@ -0,0 +1,39 @@ +'.PHP_EOL; + echo 'PASS '.$address.PHP_EOL; + echo ''.PHP_EOL; + flush(); + } else { + echo '
'.PHP_EOL; + echo 'FAIL '.$address.PHP_EOL; + echo '
'.PHP_EOL; + flush(); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php new file mode 100644 index 00000000000..595c0f603b0 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php @@ -0,0 +1,24 @@ +_rate = $rate; + $this->_mode = $mode; + $this->_sleeper = $sleeper; + $this->_timer = $timer; + } + + /** + * Invoked immediately before the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $time = $this->getTimestamp(); + if (!isset($this->_start)) { + $this->_start = $time; + } + $duration = $time - $this->_start; + + switch ($this->_mode) { + case self::BYTES_PER_MINUTE : + $sleep = $this->_throttleBytesPerMinute($duration); + break; + case self::MESSAGES_PER_SECOND : + $sleep = $this->_throttleMessagesPerSecond($duration); + break; + case self::MESSAGES_PER_MINUTE : + $sleep = $this->_throttleMessagesPerMinute($duration); + break; + default : + $sleep = 0; + break; + } + + if ($sleep > 0) { + $this->sleep($sleep); + } + } + + /** + * Invoked when a Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + parent::sendPerformed($evt); + ++$this->_messages; + } + + /** + * Sleep for $seconds. + * + * @param int $seconds + */ + public function sleep($seconds) + { + if (isset($this->_sleeper)) { + $this->_sleeper->sleep($seconds); + } else { + sleep($seconds); + } + } + + /** + * Get the current UNIX timestamp. + * + * @return int + */ + public function getTimestamp() + { + if (isset($this->_timer)) { + return $this->_timer->getTimestamp(); + } + + return time(); + } + + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function _throttleBytesPerMinute($timePassed) + { + $expectedDuration = $this->getBytesOut() / ($this->_rate / 60); + + return (int) ceil($expectedDuration - $timePassed); + } + + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function _throttleMessagesPerSecond($timePassed) + { + $expectedDuration = $this->_messages / ($this->_rate); + + return (int) ceil($expectedDuration - $timePassed); + } + + /** + * Get a number of seconds to sleep for. + * + * @param int $timePassed + * + * @return int + */ + private function _throttleMessagesPerMinute($timePassed) + { + $expectedDuration = $this->_messages / ($this->_rate / 60); + + return (int) ceil($expectedDuration - $timePassed); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Timer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Timer.php new file mode 100644 index 00000000000..9c8deb38ac4 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Plugins/Timer.php @@ -0,0 +1,24 @@ +register('properties.charset')->asValue($charset); + + return $this; + } + + /** + * Set the directory where temporary files can be saved. + * + * @param string $dir + * + * @return Swift_Preferences + */ + public function setTempDir($dir) + { + Swift_DependencyContainer::getInstance() + ->register('tempdir')->asValue($dir); + + return $this; + } + + /** + * Set the type of cache to use (i.e. "disk" or "array"). + * + * @param string $type + * + * @return Swift_Preferences + */ + public function setCacheType($type) + { + Swift_DependencyContainer::getInstance() + ->register('cache')->asAliasOf(sprintf('cache.%s', $type)); + + return $this; + } + + /** + * Set the QuotedPrintable dot escaper preference. + * + * @param bool $dotEscape + * + * @return Swift_Preferences + */ + public function setQPDotEscape($dotEscape) + { + $dotEscape = !empty($dotEscape); + Swift_DependencyContainer::getInstance() + ->register('mime.qpcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') + ->withDependencies(array('mime.charstream', 'mime.bytecanonicalizer')) + ->addConstructorValue($dotEscape); + + return $this; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php new file mode 100644 index 00000000000..2897474e7b3 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php @@ -0,0 +1,27 @@ +createDependenciesFor('transport.sendmail') + ); + + $this->setCommand($command); + } + + /** + * Create a new SendmailTransport instance. + * + * @param string $command + * + * @return Swift_SendmailTransport + */ + public static function newInstance($command = '/usr/sbin/sendmail -bs') + { + return new self($command); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SignedMessage.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SignedMessage.php new file mode 100644 index 00000000000..2e7a8726d21 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SignedMessage.php @@ -0,0 +1,23 @@ + + * + * @deprecated + */ +class Swift_SignedMessage extends Swift_Message +{ +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php new file mode 100644 index 00000000000..2d8176d905c --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signer.php @@ -0,0 +1,20 @@ + + */ +interface Swift_Signer +{ + public function reset(); +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php new file mode 100644 index 00000000000..9ffcef39c9f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/BodySigner.php @@ -0,0 +1,33 @@ + + */ +interface Swift_Signers_BodySigner extends Swift_Signer +{ + /** + * Change the Swift_Signed_Message to apply the singing. + * + * @param Swift_Message $message + * + * @return Swift_Signers_BodySigner + */ + public function signMessage(Swift_Message $message); + + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders(); +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php new file mode 100644 index 00000000000..6040b2856f2 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php @@ -0,0 +1,698 @@ + + */ +class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner +{ + /** + * PrivateKey. + * + * @var string + */ + protected $_privateKey; + + /** + * DomainName. + * + * @var string + */ + protected $_domainName; + + /** + * Selector. + * + * @var string + */ + protected $_selector; + + /** + * Hash algorithm used. + * + * @var string + */ + protected $_hashAlgorithm = 'rsa-sha1'; + + /** + * Body canon method. + * + * @var string + */ + protected $_bodyCanon = 'simple'; + + /** + * Header canon method. + * + * @var string + */ + protected $_headerCanon = 'simple'; + + /** + * Headers not being signed. + * + * @var array + */ + protected $_ignoredHeaders = array('return-path' => true); + + /** + * Signer identity. + * + * @var string + */ + protected $_signerIdentity; + + /** + * BodyLength. + * + * @var int + */ + protected $_bodyLen = 0; + + /** + * Maximum signedLen. + * + * @var int + */ + protected $_maxLen = PHP_INT_MAX; + + /** + * Embbed bodyLen in signature. + * + * @var bool + */ + protected $_showLen = false; + + /** + * When the signature has been applied (true means time()), false means not embedded. + * + * @var mixed + */ + protected $_signatureTimestamp = true; + + /** + * When will the signature expires false means not embedded, if sigTimestamp is auto + * Expiration is relative, otherwhise it's absolute. + * + * @var int + */ + protected $_signatureExpiration = false; + + /** + * Must we embed signed headers? + * + * @var bool + */ + protected $_debugHeaders = false; + + // work variables + /** + * Headers used to generate hash. + * + * @var array + */ + protected $_signedHeaders = array(); + + /** + * If debugHeaders is set store debugDatas here. + * + * @var string + */ + private $_debugHeadersData = ''; + + /** + * Stores the bodyHash. + * + * @var string + */ + private $_bodyHash = ''; + + /** + * Stores the signature header. + * + * @var Swift_Mime_Headers_ParameterizedHeader + */ + protected $_dkimHeader; + + private $_bodyHashHandler; + + private $_headerHash; + + private $_headerCanonData = ''; + + private $_bodyCanonEmptyCounter = 0; + + private $_bodyCanonIgnoreStart = 2; + + private $_bodyCanonSpace = false; + + private $_bodyCanonLastChar = null; + + private $_bodyCanonLine = ''; + + private $_bound = array(); + + /** + * Constructor. + * + * @param string $privateKey + * @param string $domainName + * @param string $selector + */ + public function __construct($privateKey, $domainName, $selector) + { + $this->_privateKey = $privateKey; + $this->_domainName = $domainName; + $this->_signerIdentity = '@'.$domainName; + $this->_selector = $selector; + } + + /** + * Instanciate DKIMSigner. + * + * @param string $privateKey + * @param string $domainName + * @param string $selector + * + * @return Swift_Signers_DKIMSigner + */ + public static function newInstance($privateKey, $domainName, $selector) + { + return new static($privateKey, $domainName, $selector); + } + + /** + * Reset the Signer. + * + * @see Swift_Signer::reset() + */ + public function reset() + { + $this->_headerHash = null; + $this->_signedHeaders = array(); + $this->_bodyHash = null; + $this->_bodyHashHandler = null; + $this->_bodyCanonIgnoreStart = 2; + $this->_bodyCanonEmptyCounter = 0; + $this->_bodyCanonLastChar = null; + $this->_bodyCanonSpace = false; + } + + /** + * Writes $bytes to the end of the stream. + * + * Writing may not happen immediately if the stream chooses to buffer. If + * you want to write these bytes with immediate effect, call {@link commit()} + * after calling write(). + * + * This method returns the sequence ID of the write (i.e. 1 for first, 2 for + * second, etc etc). + * + * @param string $bytes + * + * @throws Swift_IoException + * + * @return int + */ + public function write($bytes) + { + $this->_canonicalizeBody($bytes); + foreach ($this->_bound as $is) { + $is->write($bytes); + } + } + + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + */ + public function commit() + { + // Nothing to do + return; + } + + /** + * Attach $is to this stream. + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + $this->_bound[] = $is; + + return; + } + + /** + * Remove an already bound stream. + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + foreach ($this->_bound as $k => $stream) { + if ($stream === $is) { + unset($this->_bound[$k]); + + return; + } + } + + return; + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + */ + public function flushBuffers() + { + $this->reset(); + } + + /** + * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1 defaults to rsa-sha256. + * + * @param string $hash + * + * @return Swift_Signers_DKIMSigner + */ + public function setHashAlgorithm($hash) + { + // Unable to sign with rsa-sha256 + if ($hash == 'rsa-sha1') { + $this->_hashAlgorithm = 'rsa-sha1'; + } else { + $this->_hashAlgorithm = 'rsa-sha256'; + } + + return $this; + } + + /** + * Set the body canonicalization algorithm. + * + * @param string $canon + * + * @return Swift_Signers_DKIMSigner + */ + public function setBodyCanon($canon) + { + if ($canon == 'relaxed') { + $this->_bodyCanon = 'relaxed'; + } else { + $this->_bodyCanon = 'simple'; + } + + return $this; + } + + /** + * Set the header canonicalization algorithm. + * + * @param string $canon + * + * @return Swift_Signers_DKIMSigner + */ + public function setHeaderCanon($canon) + { + if ($canon == 'relaxed') { + $this->_headerCanon = 'relaxed'; + } else { + $this->_headerCanon = 'simple'; + } + + return $this; + } + + /** + * Set the signer identity. + * + * @param string $identity + * + * @return Swift_Signers_DKIMSigner + */ + public function setSignerIdentity($identity) + { + $this->_signerIdentity = $identity; + + return $this; + } + + /** + * Set the length of the body to sign. + * + * @param mixed $len (bool or int) + * + * @return Swift_Signers_DKIMSigner + */ + public function setBodySignedLen($len) + { + if ($len === true) { + $this->_showLen = true; + $this->_maxLen = PHP_INT_MAX; + } elseif ($len === false) { + $this->showLen = false; + $this->_maxLen = PHP_INT_MAX; + } else { + $this->_showLen = true; + $this->_maxLen = (int) $len; + } + + return $this; + } + + /** + * Set the signature timestamp. + * + * @param int $time A timestamp + * + * @return Swift_Signers_DKIMSigner + */ + public function setSignatureTimestamp($time) + { + $this->_signatureTimestamp = $time; + + return $this; + } + + /** + * Set the signature expiration timestamp. + * + * @param int $time A timestamp + * + * @return Swift_Signers_DKIMSigner + */ + public function setSignatureExpiration($time) + { + $this->_signatureExpiration = $time; + + return $this; + } + + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return Swift_Signers_DKIMSigner + */ + public function setDebugHeaders($debug) + { + $this->_debugHeaders = (bool) $debug; + + return $this; + } + + /** + * Start Body. + */ + public function startBody() + { + // Init + switch ($this->_hashAlgorithm) { + case 'rsa-sha256' : + $this->_bodyHashHandler = hash_init('sha256'); + break; + case 'rsa-sha1' : + $this->_bodyHashHandler = hash_init('sha1'); + break; + } + $this->_bodyCanonLine = ''; + } + + /** + * End Body. + */ + public function endBody() + { + $this->_endOfBody(); + } + + /** + * Returns the list of Headers Tampered by this plugin. + * + * @return array + */ + public function getAlteredHeaders() + { + if ($this->_debugHeaders) { + return array('DKIM-Signature', 'X-DebugHash'); + } else { + return array('DKIM-Signature'); + } + } + + /** + * Adds an ignored Header. + * + * @param string $header_name + * + * @return Swift_Signers_DKIMSigner + */ + public function ignoreHeader($header_name) + { + $this->_ignoredHeaders[strtolower($header_name)] = true; + + return $this; + } + + /** + * Set the headers to sign. + * + * @param Swift_Mime_HeaderSet $headers + * + * @return Swift_Signers_DKIMSigner + */ + public function setHeaders(Swift_Mime_HeaderSet $headers) + { + $this->_headerCanonData = ''; + // Loop through Headers + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->_ignoredHeaders[strtolower($hName)])) { + if ($headers->has($hName)) { + $tmp = $headers->getAll($hName); + foreach ($tmp as $header) { + if ($header->getFieldBody() != '') { + $this->_addHeader($header->toString()); + $this->_signedHeaders[] = $header->getFieldName(); + } + } + } + } + } + + return $this; + } + + /** + * Add the signature to the given Headers. + * + * @param Swift_Mime_HeaderSet $headers + * + * @return Swift_Signers_DKIMSigner + */ + public function addSignature(Swift_Mime_HeaderSet $headers) + { + // Prepare the DKIM-Signature + $params = array('v' => '1', 'a' => $this->_hashAlgorithm, 'bh' => base64_encode($this->_bodyHash), 'd' => $this->_domainName, 'h' => implode(': ', $this->_signedHeaders), 'i' => $this->_signerIdentity, 's' => $this->_selector); + if ($this->_bodyCanon != 'simple') { + $params['c'] = $this->_headerCanon.'/'.$this->_bodyCanon; + } elseif ($this->_headerCanon != 'simple') { + $params['c'] = $this->_headerCanon; + } + if ($this->_showLen) { + $params['l'] = $this->_bodyLen; + } + if ($this->_signatureTimestamp === true) { + $params['t'] = time(); + if ($this->_signatureExpiration !== false) { + $params['x'] = $params['t'] + $this->_signatureExpiration; + } + } else { + if ($this->_signatureTimestamp !== false) { + $params['t'] = $this->_signatureTimestamp; + } + if ($this->_signatureExpiration !== false) { + $params['x'] = $this->_signatureExpiration; + } + } + if ($this->_debugHeaders) { + $params['z'] = implode('|', $this->_debugHeadersData); + } + $string = ''; + foreach ($params as $k => $v) { + $string .= $k.'='.$v.'; '; + } + $string = trim($string); + $headers->addTextHeader('DKIM-Signature', $string); + // Add the last DKIM-Signature + $tmp = $headers->getAll('DKIM-Signature'); + $this->_dkimHeader = end($tmp); + $this->_addHeader(trim($this->_dkimHeader->toString())."\r\n b=", true); + $this->_endOfHeaders(); + if ($this->_debugHeaders) { + $headers->addTextHeader('X-DebugHash', base64_encode($this->_headerHash)); + } + $this->_dkimHeader->setValue($string.' b='.trim(chunk_split(base64_encode($this->_getEncryptedHash()), 73, ' '))); + + return $this; + } + + /* Private helpers */ + + protected function _addHeader($header, $is_sig = false) + { + switch ($this->_headerCanon) { + case 'relaxed' : + // Prepare Header and cascade + $exploded = explode(':', $header, 2); + $name = strtolower(trim($exploded[0])); + $value = str_replace("\r\n", '', $exploded[1]); + $value = preg_replace("/[ \t][ \t]+/", ' ', $value); + $header = $name.':'.trim($value).($is_sig ? '' : "\r\n"); + case 'simple' : + // Nothing to do + } + $this->_addToHeaderHash($header); + } + + /** + * @deprecated This method is currently useless in this class but it must be + * kept for BC reasons due to its "protected" scope. This method + * might be overriden by custom client code. + */ + protected function _endOfHeaders() + { + } + + protected function _canonicalizeBody($string) + { + $len = strlen($string); + $canon = ''; + $method = ($this->_bodyCanon == 'relaxed'); + for ($i = 0; $i < $len; ++$i) { + if ($this->_bodyCanonIgnoreStart > 0) { + --$this->_bodyCanonIgnoreStart; + continue; + } + switch ($string[$i]) { + case "\r" : + $this->_bodyCanonLastChar = "\r"; + break; + case "\n" : + if ($this->_bodyCanonLastChar == "\r") { + if ($method) { + $this->_bodyCanonSpace = false; + } + if ($this->_bodyCanonLine == '') { + ++$this->_bodyCanonEmptyCounter; + } else { + $this->_bodyCanonLine = ''; + $canon .= "\r\n"; + } + } else { + // Wooops Error + // todo handle it but should never happen + } + break; + case ' ' : + case "\t" : + if ($method) { + $this->_bodyCanonSpace = true; + break; + } + default : + if ($this->_bodyCanonEmptyCounter > 0) { + $canon .= str_repeat("\r\n", $this->_bodyCanonEmptyCounter); + $this->_bodyCanonEmptyCounter = 0; + } + if ($this->_bodyCanonSpace) { + $this->_bodyCanonLine .= ' '; + $canon .= ' '; + $this->_bodyCanonSpace = false; + } + $this->_bodyCanonLine .= $string[$i]; + $canon .= $string[$i]; + } + } + $this->_addToBodyHash($canon); + } + + protected function _endOfBody() + { + // Add trailing Line return if last line is non empty + if (strlen($this->_bodyCanonLine) > 0) { + $this->_addToBodyHash("\r\n"); + } + $this->_bodyHash = hash_final($this->_bodyHashHandler, true); + } + + private function _addToBodyHash($string) + { + $len = strlen($string); + if ($len > ($new_len = ($this->_maxLen - $this->_bodyLen))) { + $string = substr($string, 0, $new_len); + $len = $new_len; + } + hash_update($this->_bodyHashHandler, $string); + $this->_bodyLen += $len; + } + + private function _addToHeaderHash($header) + { + if ($this->_debugHeaders) { + $this->_debugHeadersData[] = trim($header); + } + $this->_headerCanonData .= $header; + } + + /** + * @throws Swift_SwiftException + * + * @return string + */ + private function _getEncryptedHash() + { + $signature = ''; + switch ($this->_hashAlgorithm) { + case 'rsa-sha1': + $algorithm = OPENSSL_ALGO_SHA1; + break; + case 'rsa-sha256': + $algorithm = OPENSSL_ALGO_SHA256; + break; + } + $pkeyId = openssl_get_privatekey($this->_privateKey); + if (!$pkeyId) { + throw new Swift_SwiftException('Unable to load DKIM Private Key ['.openssl_error_string().']'); + } + if (openssl_sign($this->_headerCanonData, $signature, $pkeyId, $algorithm)) { + return $signature; + } + throw new Swift_SwiftException('Unable to sign DKIM Hash ['.openssl_error_string().']'); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php new file mode 100644 index 00000000000..3f42d3f6e90 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php @@ -0,0 +1,525 @@ + + */ +class Swift_Signers_DomainKeySigner implements Swift_Signers_HeaderSigner +{ + /** + * PrivateKey. + * + * @var string + */ + protected $_privateKey; + + /** + * DomainName. + * + * @var string + */ + protected $_domainName; + + /** + * Selector. + * + * @var string + */ + protected $_selector; + + /** + * Hash algorithm used. + * + * @var string + */ + protected $_hashAlgorithm = 'rsa-sha1'; + + /** + * Canonisation method. + * + * @var string + */ + protected $_canon = 'simple'; + + /** + * Headers not being signed. + * + * @var array + */ + protected $_ignoredHeaders = array(); + + /** + * Signer identity. + * + * @var string + */ + protected $_signerIdentity; + + /** + * Must we embed signed headers? + * + * @var bool + */ + protected $_debugHeaders = false; + + // work variables + /** + * Headers used to generate hash. + * + * @var array + */ + private $_signedHeaders = array(); + + /** + * Stores the signature header. + * + * @var Swift_Mime_Headers_ParameterizedHeader + */ + protected $_domainKeyHeader; + + /** + * Hash Handler. + * + * @var resource|null + */ + private $_hashHandler; + + private $_hash; + + private $_canonData = ''; + + private $_bodyCanonEmptyCounter = 0; + + private $_bodyCanonIgnoreStart = 2; + + private $_bodyCanonSpace = false; + + private $_bodyCanonLastChar = null; + + private $_bodyCanonLine = ''; + + private $_bound = array(); + + /** + * Constructor. + * + * @param string $privateKey + * @param string $domainName + * @param string $selector + */ + public function __construct($privateKey, $domainName, $selector) + { + $this->_privateKey = $privateKey; + $this->_domainName = $domainName; + $this->_signerIdentity = '@'.$domainName; + $this->_selector = $selector; + } + + /** + * Instanciate DomainKeySigner. + * + * @param string $privateKey + * @param string $domainName + * @param string $selector + * + * @return Swift_Signers_DomainKeySigner + */ + public static function newInstance($privateKey, $domainName, $selector) + { + return new static($privateKey, $domainName, $selector); + } + + /** + * Resets internal states. + * + * @return Swift_Signers_DomainKeySigner + */ + public function reset() + { + $this->_hash = null; + $this->_hashHandler = null; + $this->_bodyCanonIgnoreStart = 2; + $this->_bodyCanonEmptyCounter = 0; + $this->_bodyCanonLastChar = null; + $this->_bodyCanonSpace = false; + + return $this; + } + + /** + * Writes $bytes to the end of the stream. + * + * Writing may not happen immediately if the stream chooses to buffer. If + * you want to write these bytes with immediate effect, call {@link commit()} + * after calling write(). + * + * This method returns the sequence ID of the write (i.e. 1 for first, 2 for + * second, etc etc). + * + * @param string $bytes + * + * @throws Swift_IoException + * + * @return int + * @return Swift_Signers_DomainKeySigner + */ + public function write($bytes) + { + $this->_canonicalizeBody($bytes); + foreach ($this->_bound as $is) { + $is->write($bytes); + } + + return $this; + } + + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + * + * @return Swift_Signers_DomainKeySigner + */ + public function commit() + { + // Nothing to do + return $this; + } + + /** + * Attach $is to this stream. + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + * + * @return Swift_Signers_DomainKeySigner + */ + public function bind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + $this->_bound[] = $is; + + return $this; + } + + /** + * Remove an already bound stream. + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + * + * @return Swift_Signers_DomainKeySigner + */ + public function unbind(Swift_InputByteStream $is) + { + // Don't have to mirror anything + foreach ($this->_bound as $k => $stream) { + if ($stream === $is) { + unset($this->_bound[$k]); + + return; + } + } + + return $this; + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * + * @throws Swift_IoException + * + * @return Swift_Signers_DomainKeySigner + */ + public function flushBuffers() + { + $this->reset(); + + return $this; + } + + /** + * Set hash_algorithm, must be one of rsa-sha256 | rsa-sha1 defaults to rsa-sha256. + * + * @param string $hash + * + * @return Swift_Signers_DomainKeySigner + */ + public function setHashAlgorithm($hash) + { + $this->_hashAlgorithm = 'rsa-sha1'; + + return $this; + } + + /** + * Set the canonicalization algorithm. + * + * @param string $canon simple | nofws defaults to simple + * + * @return Swift_Signers_DomainKeySigner + */ + public function setCanon($canon) + { + if ($canon == 'nofws') { + $this->_canon = 'nofws'; + } else { + $this->_canon = 'simple'; + } + + return $this; + } + + /** + * Set the signer identity. + * + * @param string $identity + * + * @return Swift_Signers_DomainKeySigner + */ + public function setSignerIdentity($identity) + { + $this->_signerIdentity = $identity; + + return $this; + } + + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return Swift_Signers_DomainKeySigner + */ + public function setDebugHeaders($debug) + { + $this->_debugHeaders = (bool) $debug; + + return $this; + } + + /** + * Start Body. + */ + public function startBody() + { + } + + /** + * End Body. + */ + public function endBody() + { + $this->_endOfBody(); + } + + /** + * Returns the list of Headers Tampered by this plugin. + * + * @return array + */ + public function getAlteredHeaders() + { + if ($this->_debugHeaders) { + return array('DomainKey-Signature', 'X-DebugHash'); + } + + return array('DomainKey-Signature'); + } + + /** + * Adds an ignored Header. + * + * @param string $header_name + * + * @return Swift_Signers_DomainKeySigner + */ + public function ignoreHeader($header_name) + { + $this->_ignoredHeaders[strtolower($header_name)] = true; + + return $this; + } + + /** + * Set the headers to sign. + * + * @param Swift_Mime_HeaderSet $headers + * + * @return Swift_Signers_DomainKeySigner + */ + public function setHeaders(Swift_Mime_HeaderSet $headers) + { + $this->_startHash(); + $this->_canonData = ''; + // Loop through Headers + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->_ignoredHeaders[strtolower($hName)])) { + if ($headers->has($hName)) { + $tmp = $headers->getAll($hName); + foreach ($tmp as $header) { + if ($header->getFieldBody() != '') { + $this->_addHeader($header->toString()); + $this->_signedHeaders[] = $header->getFieldName(); + } + } + } + } + } + $this->_endOfHeaders(); + + return $this; + } + + /** + * Add the signature to the given Headers. + * + * @param Swift_Mime_HeaderSet $headers + * + * @return Swift_Signers_DomainKeySigner + */ + public function addSignature(Swift_Mime_HeaderSet $headers) + { + // Prepare the DomainKey-Signature Header + $params = array('a' => $this->_hashAlgorithm, 'b' => chunk_split(base64_encode($this->_getEncryptedHash()), 73, ' '), 'c' => $this->_canon, 'd' => $this->_domainName, 'h' => implode(': ', $this->_signedHeaders), 'q' => 'dns', 's' => $this->_selector); + $string = ''; + foreach ($params as $k => $v) { + $string .= $k.'='.$v.'; '; + } + $string = trim($string); + $headers->addTextHeader('DomainKey-Signature', $string); + + return $this; + } + + /* Private helpers */ + + protected function _addHeader($header) + { + switch ($this->_canon) { + case 'nofws' : + // Prepare Header and cascade + $exploded = explode(':', $header, 2); + $name = strtolower(trim($exploded[0])); + $value = str_replace("\r\n", '', $exploded[1]); + $value = preg_replace("/[ \t][ \t]+/", ' ', $value); + $header = $name.':'.trim($value)."\r\n"; + case 'simple' : + // Nothing to do + } + $this->_addToHash($header); + } + + protected function _endOfHeaders() + { + $this->_bodyCanonEmptyCounter = 1; + } + + protected function _canonicalizeBody($string) + { + $len = strlen($string); + $canon = ''; + $nofws = ($this->_canon == 'nofws'); + for ($i = 0; $i < $len; ++$i) { + if ($this->_bodyCanonIgnoreStart > 0) { + --$this->_bodyCanonIgnoreStart; + continue; + } + switch ($string[$i]) { + case "\r" : + $this->_bodyCanonLastChar = "\r"; + break; + case "\n" : + if ($this->_bodyCanonLastChar == "\r") { + if ($nofws) { + $this->_bodyCanonSpace = false; + } + if ($this->_bodyCanonLine == '') { + ++$this->_bodyCanonEmptyCounter; + } else { + $this->_bodyCanonLine = ''; + $canon .= "\r\n"; + } + } else { + // Wooops Error + throw new Swift_SwiftException('Invalid new line sequence in mail found \n without preceding \r'); + } + break; + case ' ' : + case "\t" : + case "\x09": //HTAB + if ($nofws) { + $this->_bodyCanonSpace = true; + break; + } + default : + if ($this->_bodyCanonEmptyCounter > 0) { + $canon .= str_repeat("\r\n", $this->_bodyCanonEmptyCounter); + $this->_bodyCanonEmptyCounter = 0; + } + $this->_bodyCanonLine .= $string[$i]; + $canon .= $string[$i]; + } + } + $this->_addToHash($canon); + } + + protected function _endOfBody() + { + if (strlen($this->_bodyCanonLine) > 0) { + $this->_addToHash("\r\n"); + } + $this->_hash = hash_final($this->_hashHandler, true); + } + + private function _addToHash($string) + { + $this->_canonData .= $string; + hash_update($this->_hashHandler, $string); + } + + private function _startHash() + { + // Init + switch ($this->_hashAlgorithm) { + case 'rsa-sha1' : + $this->_hashHandler = hash_init('sha1'); + break; + } + $this->_canonLine = ''; + } + + /** + * @throws Swift_SwiftException + * + * @return string + */ + private function _getEncryptedHash() + { + $signature = ''; + $pkeyId = openssl_get_privatekey($this->_privateKey); + if (!$pkeyId) { + throw new Swift_SwiftException('Unable to load DomainKey Private Key ['.openssl_error_string().']'); + } + if (openssl_sign($this->_canonData, $signature, $pkeyId, OPENSSL_ALGO_SHA1)) { + return $signature; + } + throw new Swift_SwiftException('Unable to sign DomainKey Hash ['.openssl_error_string().']'); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php new file mode 100644 index 00000000000..c75cb08a518 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php @@ -0,0 +1,65 @@ + + */ +interface Swift_Signers_HeaderSigner extends Swift_Signer, Swift_InputByteStream +{ + /** + * Exclude an header from the signed headers. + * + * @param string $header_name + * + * @return Swift_Signers_HeaderSigner + */ + public function ignoreHeader($header_name); + + /** + * Prepare the Signer to get a new Body. + * + * @return Swift_Signers_HeaderSigner + */ + public function startBody(); + + /** + * Give the signal that the body has finished streaming. + * + * @return Swift_Signers_HeaderSigner + */ + public function endBody(); + + /** + * Give the headers already given. + * + * @param Swift_Mime_SimpleHeaderSet $headers + * + * @return Swift_Signers_HeaderSigner + */ + public function setHeaders(Swift_Mime_HeaderSet $headers); + + /** + * Add the header(s) to the headerSet. + * + * @param Swift_Mime_HeaderSet $headers + * + * @return Swift_Signers_HeaderSigner + */ + public function addSignature(Swift_Mime_HeaderSet $headers); + + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders(); +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php new file mode 100644 index 00000000000..3a35ad55d07 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php @@ -0,0 +1,190 @@ + + */ +class Swift_Signers_OpenDKIMSigner extends Swift_Signers_DKIMSigner +{ + private $_peclLoaded = false; + + private $_dkimHandler = null; + + private $dropFirstLF = true; + + const CANON_RELAXED = 1; + const CANON_SIMPLE = 2; + const SIG_RSA_SHA1 = 3; + const SIG_RSA_SHA256 = 4; + + public function __construct($privateKey, $domainName, $selector) + { + if (!extension_loaded('opendkim')) { + throw new Swift_SwiftException('php-opendkim extension not found'); + } + + $this->_peclLoaded = true; + + parent::__construct($privateKey, $domainName, $selector); + } + + public static function newInstance($privateKey, $domainName, $selector) + { + return new static($privateKey, $domainName, $selector); + } + + public function addSignature(Swift_Mime_HeaderSet $headers) + { + $header = new Swift_Mime_Headers_OpenDKIMHeader('DKIM-Signature'); + $headerVal = $this->_dkimHandler->getSignatureHeader(); + if (!$headerVal) { + throw new Swift_SwiftException('OpenDKIM Error: '.$this->_dkimHandler->getError()); + } + $header->setValue($headerVal); + $headers->set($header); + + return $this; + } + + public function setHeaders(Swift_Mime_HeaderSet $headers) + { + $bodyLen = $this->_bodyLen; + if (is_bool($bodyLen)) { + $bodyLen = -1; + } + $hash = $this->_hashAlgorithm == 'rsa-sha1' ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256; + $bodyCanon = $this->_bodyCanon == 'simple' ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; + $headerCanon = $this->_headerCanon == 'simple' ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; + $this->_dkimHandler = new OpenDKIMSign($this->_privateKey, $this->_selector, $this->_domainName, $headerCanon, $bodyCanon, $hash, $bodyLen); + // Hardcode signature Margin for now + $this->_dkimHandler->setMargin(78); + + if (!is_numeric($this->_signatureTimestamp)) { + OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, time()); + } else { + if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->_signatureTimestamp)) { + throw new Swift_SwiftException('Unable to force signature timestamp ['.openssl_error_string().']'); + } + } + if (isset($this->_signerIdentity)) { + $this->_dkimHandler->setSigner($this->_signerIdentity); + } + $listHeaders = $headers->listAll(); + foreach ($listHeaders as $hName) { + // Check if we need to ignore Header + if (!isset($this->_ignoredHeaders[strtolower($hName)])) { + $tmp = $headers->getAll($hName); + if ($headers->has($hName)) { + foreach ($tmp as $header) { + if ($header->getFieldBody() != '') { + $htosign = $header->toString(); + $this->_dkimHandler->header($htosign); + $this->_signedHeaders[] = $header->getFieldName(); + } + } + } + } + } + + return $this; + } + + public function startBody() + { + if (!$this->_peclLoaded) { + return parent::startBody(); + } + $this->dropFirstLF = true; + $this->_dkimHandler->eoh(); + + return $this; + } + + public function endBody() + { + if (!$this->_peclLoaded) { + return parent::endBody(); + } + $this->_dkimHandler->eom(); + + return $this; + } + + public function reset() + { + $this->_dkimHandler = null; + parent::reset(); + + return $this; + } + + /** + * Set the signature timestamp. + * + * @param int $time + * + * @return Swift_Signers_DKIMSigner + */ + public function setSignatureTimestamp($time) + { + $this->_signatureTimestamp = $time; + + return $this; + } + + /** + * Set the signature expiration timestamp. + * + * @param int $time + * + * @return Swift_Signers_DKIMSigner + */ + public function setSignatureExpiration($time) + { + $this->_signatureExpiration = $time; + + return $this; + } + + /** + * Enable / disable the DebugHeaders. + * + * @param bool $debug + * + * @return Swift_Signers_DKIMSigner + */ + public function setDebugHeaders($debug) + { + $this->_debugHeaders = (bool) $debug; + + return $this; + } + + // Protected + + protected function _canonicalizeBody($string) + { + if (!$this->_peclLoaded) { + return parent::_canonicalizeBody($string); + } + if (false && $this->dropFirstLF === true) { + if ($string[0] == "\r" && $string[1] == "\n") { + $string = substr($string, 2); + } + } + $this->dropFirstLF = false; + if (strlen($string)) { + $this->_dkimHandler->body($string); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php new file mode 100644 index 00000000000..b267099a860 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php @@ -0,0 +1,436 @@ + + */ +class Swift_Signers_SMimeSigner implements Swift_Signers_BodySigner +{ + protected $signCertificate; + protected $signPrivateKey; + protected $encryptCert; + protected $signThenEncrypt = true; + protected $signLevel; + protected $encryptLevel; + protected $signOptions; + protected $encryptOptions; + protected $encryptCipher; + protected $extraCerts = null; + + /** + * @var Swift_StreamFilters_StringReplacementFilterFactory + */ + protected $replacementFactory; + + /** + * @var Swift_Mime_HeaderFactory + */ + protected $headerFactory; + + /** + * Constructor. + * + * @param string|null $signCertificate + * @param string|null $signPrivateKey + * @param string|null $encryptCertificate + */ + public function __construct($signCertificate = null, $signPrivateKey = null, $encryptCertificate = null) + { + if (null !== $signPrivateKey) { + $this->setSignCertificate($signCertificate, $signPrivateKey); + } + + if (null !== $encryptCertificate) { + $this->setEncryptCertificate($encryptCertificate); + } + + $this->replacementFactory = Swift_DependencyContainer::getInstance() + ->lookup('transport.replacementfactory'); + + $this->signOptions = PKCS7_DETACHED; + + // Supported since php5.4 + if (defined('OPENSSL_CIPHER_AES_128_CBC')) { + $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC; + } else { + $this->encryptCipher = OPENSSL_CIPHER_RC2_128; + } + } + + /** + * Returns an new Swift_Signers_SMimeSigner instance. + * + * @param string $certificate + * @param string $privateKey + * + * @return Swift_Signers_SMimeSigner + */ + public static function newInstance($certificate = null, $privateKey = null) + { + return new self($certificate, $privateKey); + } + + /** + * Set the certificate location to use for signing. + * + * @link http://www.php.net/manual/en/openssl.pkcs7.flags.php + * + * @param string $certificate + * @param string|array $privateKey If the key needs an passphrase use array('file-location', 'passphrase') instead + * @param int $signOptions Bitwise operator options for openssl_pkcs7_sign() + * @param string $extraCerts A file containing intermediate certificates needed by the signing certificate + * + * @return Swift_Signers_SMimeSigner + */ + public function setSignCertificate($certificate, $privateKey = null, $signOptions = PKCS7_DETACHED, $extraCerts = null) + { + $this->signCertificate = 'file://'.str_replace('\\', '/', realpath($certificate)); + + if (null !== $privateKey) { + if (is_array($privateKey)) { + $this->signPrivateKey = $privateKey; + $this->signPrivateKey[0] = 'file://'.str_replace('\\', '/', realpath($privateKey[0])); + } else { + $this->signPrivateKey = 'file://'.str_replace('\\', '/', realpath($privateKey)); + } + } + + $this->signOptions = $signOptions; + if (null !== $extraCerts) { + $this->extraCerts = str_replace('\\', '/', realpath($extraCerts)); + } + + return $this; + } + + /** + * Set the certificate location to use for encryption. + * + * @link http://www.php.net/manual/en/openssl.pkcs7.flags.php + * @link http://nl3.php.net/manual/en/openssl.ciphers.php + * + * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates. + * @param int $cipher + * + * @return Swift_Signers_SMimeSigner + */ + public function setEncryptCertificate($recipientCerts, $cipher = null) + { + if (is_array($recipientCerts)) { + $this->encryptCert = array(); + + foreach ($recipientCerts as $cert) { + $this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert)); + } + } else { + $this->encryptCert = 'file://'.str_replace('\\', '/', realpath($recipientCerts)); + } + + if (null !== $cipher) { + $this->encryptCipher = $cipher; + } + + return $this; + } + + /** + * @return string + */ + public function getSignCertificate() + { + return $this->signCertificate; + } + + /** + * @return string + */ + public function getSignPrivateKey() + { + return $this->signPrivateKey; + } + + /** + * Set perform signing before encryption. + * + * The default is to first sign the message and then encrypt. + * But some older mail clients, namely Microsoft Outlook 2000 will work when the message first encrypted. + * As this goes against the official specs, its recommended to only use 'encryption -> signing' when specifically targeting these 'broken' clients. + * + * @param bool $signThenEncrypt + * + * @return Swift_Signers_SMimeSigner + */ + public function setSignThenEncrypt($signThenEncrypt = true) + { + $this->signThenEncrypt = $signThenEncrypt; + + return $this; + } + + /** + * @return bool + */ + public function isSignThenEncrypt() + { + return $this->signThenEncrypt; + } + + /** + * Resets internal states. + * + * @return Swift_Signers_SMimeSigner + */ + public function reset() + { + return $this; + } + + /** + * Change the Swift_Message to apply the signing. + * + * @param Swift_Message $message + * + * @return Swift_Signers_SMimeSigner + */ + public function signMessage(Swift_Message $message) + { + if (null === $this->signCertificate && null === $this->encryptCert) { + return $this; + } + + // Store the message using ByteStream to a file{1} + // Remove all Children + // Sign file{1}, parse the new MIME headers and set them on the primary MimeEntity + // Set the singed-body as the new body (without boundary) + + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $this->toSMimeByteStream($messageStream, $message); + $message->setEncoder(Swift_DependencyContainer::getInstance()->lookup('mime.rawcontentencoder')); + + $message->setChildren(array()); + $this->streamToMime($messageStream, $message); + } + + /** + * Return the list of header a signer might tamper. + * + * @return array + */ + public function getAlteredHeaders() + { + return array('Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition'); + } + + /** + * @param Swift_InputByteStream $inputStream + * @param Swift_Message $mimeEntity + */ + protected function toSMimeByteStream(Swift_InputByteStream $inputStream, Swift_Message $message) + { + $mimeEntity = $this->createMessage($message); + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + $mimeEntity->toByteStream($messageStream); + $messageStream->commit(); + + if (null !== $this->signCertificate && null !== $this->encryptCert) { + $temporaryStream = new Swift_ByteStream_TemporaryFileByteStream(); + + if ($this->signThenEncrypt) { + $this->messageStreamToSignedByteStream($messageStream, $temporaryStream); + $this->messageStreamToEncryptedByteStream($temporaryStream, $inputStream); + } else { + $this->messageStreamToEncryptedByteStream($messageStream, $temporaryStream); + $this->messageStreamToSignedByteStream($temporaryStream, $inputStream); + } + } elseif ($this->signCertificate !== null) { + $this->messageStreamToSignedByteStream($messageStream, $inputStream); + } else { + $this->messageStreamToEncryptedByteStream($messageStream, $inputStream); + } + } + + /** + * @param Swift_Message $message + * + * @return Swift_Message + */ + protected function createMessage(Swift_Message $message) + { + $mimeEntity = new Swift_Message('', $message->getBody(), $message->getContentType(), $message->getCharset()); + $mimeEntity->setChildren($message->getChildren()); + + $messageHeaders = $mimeEntity->getHeaders(); + $messageHeaders->remove('Message-ID'); + $messageHeaders->remove('Date'); + $messageHeaders->remove('Subject'); + $messageHeaders->remove('MIME-Version'); + $messageHeaders->remove('To'); + $messageHeaders->remove('From'); + + return $mimeEntity; + } + + /** + * @param Swift_FileStream $outputStream + * @param Swift_InputByteStream $inputStream + * + * @throws Swift_IoException + */ + protected function messageStreamToSignedByteStream(Swift_FileStream $outputStream, Swift_InputByteStream $inputStream) + { + $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + $args = array($outputStream->getPath(), $signedMessageStream->getPath(), $this->signCertificate, $this->signPrivateKey, array(), $this->signOptions); + if (null !== $this->extraCerts) { + $args[] = $this->extraCerts; + } + + if (!call_user_func_array('openssl_pkcs7_sign', $args)) { + throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string())); + } + + $this->copyFromOpenSSLOutput($signedMessageStream, $inputStream); + } + + /** + * @param Swift_FileStream $outputStream + * @param Swift_InputByteStream $is + * + * @throws Swift_IoException + */ + protected function messageStreamToEncryptedByteStream(Swift_FileStream $outputStream, Swift_InputByteStream $is) + { + $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + if (!openssl_pkcs7_encrypt($outputStream->getPath(), $encryptedMessageStream->getPath(), $this->encryptCert, array(), 0, $this->encryptCipher)) { + throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string())); + } + + $this->copyFromOpenSSLOutput($encryptedMessageStream, $is); + } + + /** + * @param Swift_OutputByteStream $fromStream + * @param Swift_InputByteStream $toStream + */ + protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream) + { + $bufferLength = 4096; + $filteredStream = new Swift_ByteStream_TemporaryFileByteStream(); + $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); + $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); + + while (false !== ($buffer = $fromStream->read($bufferLength))) { + $filteredStream->write($buffer); + } + + $filteredStream->flushBuffers(); + + while (false !== ($buffer = $filteredStream->read($bufferLength))) { + $toStream->write($buffer); + } + + $toStream->commit(); + } + + /** + * Merges an OutputByteStream to Swift_Message. + * + * @param Swift_OutputByteStream $fromStream + * @param Swift_Message $message + */ + protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message) + { + $bufferLength = 78; + $headerData = ''; + + $fromStream->setReadPointer(0); + + while (($buffer = $fromStream->read($bufferLength)) !== false) { + $headerData .= $buffer; + + if (false !== strpos($buffer, "\r\n\r\n")) { + break; + } + } + + $headersPosEnd = strpos($headerData, "\r\n\r\n"); + $headerData = trim($headerData); + $headerData = substr($headerData, 0, $headersPosEnd); + $headerLines = explode("\r\n", $headerData); + unset($headerData); + + $headers = array(); + $currentHeaderName = ''; + + foreach ($headerLines as $headerLine) { + // Line separated + if (ctype_space($headerLines[0]) || false === strpos($headerLine, ':')) { + $headers[$currentHeaderName] .= ' '.trim($headerLine); + continue; + } + + $header = explode(':', $headerLine, 2); + $currentHeaderName = strtolower($header[0]); + $headers[$currentHeaderName] = trim($header[1]); + } + + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $messageStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); + $messageStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); + + $messageHeaders = $message->getHeaders(); + + // No need to check for 'application/pkcs7-mime', as this is always base64 + if ('multipart/signed;' === substr($headers['content-type'], 0, 17)) { + if (!preg_match('/boundary=("[^"]+"|(?:[^\s]+|$))/is', $headers['content-type'], $contentTypeData)) { + throw new Swift_SwiftException('Failed to find Boundary parameter'); + } + + $boundary = trim($contentTypeData['1'], '"'); + + // Skip the header and CRLF CRLF + $fromStream->setReadPointer($headersPosEnd + 4); + + while (false !== ($buffer = $fromStream->read($bufferLength))) { + $messageStream->write($buffer); + } + + $messageStream->commit(); + + $messageHeaders->remove('Content-Transfer-Encoding'); + $message->setContentType($headers['content-type']); + $message->setBoundary($boundary); + $message->setBody($messageStream); + } else { + $fromStream->setReadPointer($headersPosEnd + 4); + + if (null === $this->headerFactory) { + $this->headerFactory = Swift_DependencyContainer::getInstance()->lookup('mime.headerfactory'); + } + + $message->setContentType($headers['content-type']); + $messageHeaders->set($this->headerFactory->createTextHeader('Content-Transfer-Encoding', $headers['content-transfer-encoding'])); + $messageHeaders->set($this->headerFactory->createTextHeader('Content-Disposition', $headers['content-disposition'])); + + while (false !== ($buffer = $fromStream->read($bufferLength))) { + $messageStream->write($buffer); + } + + $messageStream->commit(); + $message->setBody($messageStream); + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php new file mode 100644 index 00000000000..62516114019 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SmtpTransport.php @@ -0,0 +1,58 @@ +createDependenciesFor('transport.smtp') + ); + + $this->setHost($host); + $this->setPort($port); + $this->setEncryption($security); + } + + /** + * Create a new SmtpTransport instance. + * + * @param string $host + * @param int $port + * @param string $security + * + * @return Swift_SmtpTransport + */ + public static function newInstance($host = 'localhost', $port = 25, $security = null) + { + return new self($host, $port, $security); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Spool.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Spool.php new file mode 100644 index 00000000000..c16ab4b38eb --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Spool.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Interface for spools. + * + * @author Fabien Potencier + */ +interface Swift_Spool +{ + /** + * Starts this Spool mechanism. + */ + public function start(); + + /** + * Stops this Spool mechanism. + */ + public function stop(); + + /** + * Tests if this Spool mechanism has started. + * + * @return bool + */ + public function isStarted(); + + /** + * Queues a message. + * + * @param Swift_Mime_Message $message The message to store + * + * @return bool Whether the operation has succeeded + */ + public function queueMessage(Swift_Mime_Message $message); + + /** + * Sends messages using the given transport instance. + * + * @param Swift_Transport $transport A transport instance + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent emails + */ + public function flushQueue(Swift_Transport $transport, &$failedRecipients = null); +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php new file mode 100644 index 00000000000..cf9bf78fb8f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SpoolTransport.php @@ -0,0 +1,47 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Stores Messages in a queue. + * + * @author Fabien Potencier + */ +class Swift_SpoolTransport extends Swift_Transport_SpoolTransport +{ + /** + * Create a new SpoolTransport. + * + * @param Swift_Spool $spool + */ + public function __construct(Swift_Spool $spool) + { + $arguments = Swift_DependencyContainer::getInstance() + ->createDependenciesFor('transport.spool'); + + $arguments[] = $spool; + + call_user_func_array( + array($this, 'Swift_Transport_SpoolTransport::__construct'), + $arguments + ); + } + + /** + * Create a new SpoolTransport instance. + * + * @param Swift_Spool $spool + * + * @return Swift_SpoolTransport + */ + public static function newInstance(Swift_Spool $spool) + { + return new self($spool); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilter.php new file mode 100644 index 00000000000..362be2e8d47 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilter.php @@ -0,0 +1,35 @@ +_search = $search; + $this->_index = array(); + $this->_tree = array(); + $this->_replace = array(); + $this->_repSize = array(); + + $tree = null; + $i = null; + $last_size = $size = 0; + foreach ($search as $i => $search_element) { + if ($tree !== null) { + $tree[-1] = min(count($replace) - 1, $i - 1); + $tree[-2] = $last_size; + } + $tree = &$this->_tree; + if (is_array($search_element)) { + foreach ($search_element as $k => $char) { + $this->_index[$char] = true; + if (!isset($tree[$char])) { + $tree[$char] = array(); + } + $tree = &$tree[$char]; + } + $last_size = $k + 1; + $size = max($size, $last_size); + } else { + $last_size = 1; + if (!isset($tree[$search_element])) { + $tree[$search_element] = array(); + } + $tree = &$tree[$search_element]; + $size = max($last_size, $size); + $this->_index[$search_element] = true; + } + } + if ($i !== null) { + $tree[-1] = min(count($replace) - 1, $i); + $tree[-2] = $last_size; + $this->_treeMaxLen = $size; + } + foreach ($replace as $rep) { + if (!is_array($rep)) { + $rep = array($rep); + } + $this->_replace[] = $rep; + } + for ($i = count($this->_replace) - 1; $i >= 0; --$i) { + $this->_replace[$i] = $rep = $this->filter($this->_replace[$i], $i); + $this->_repSize[$i] = count($rep); + } + } + + /** + * Returns true if based on the buffer passed more bytes should be buffered. + * + * @param array $buffer + * + * @return bool + */ + public function shouldBuffer($buffer) + { + $endOfBuffer = end($buffer); + + return isset($this->_index[$endOfBuffer]); + } + + /** + * Perform the actual replacements on $buffer and return the result. + * + * @param array $buffer + * @param int $_minReplaces + * + * @return array + */ + public function filter($buffer, $_minReplaces = -1) + { + if ($this->_treeMaxLen == 0) { + return $buffer; + } + + $newBuffer = array(); + $buf_size = count($buffer); + for ($i = 0; $i < $buf_size; ++$i) { + $search_pos = $this->_tree; + $last_found = PHP_INT_MAX; + // We try to find if the next byte is part of a search pattern + for ($j = 0; $j <= $this->_treeMaxLen; ++$j) { + // We have a new byte for a search pattern + if (isset($buffer [$p = $i + $j]) && isset($search_pos[$buffer[$p]])) { + $search_pos = $search_pos[$buffer[$p]]; + // We have a complete pattern, save, in case we don't find a better match later + if (isset($search_pos[-1]) && $search_pos[-1] < $last_found + && $search_pos[-1] > $_minReplaces) { + $last_found = $search_pos[-1]; + $last_size = $search_pos[-2]; + } + } + // We got a complete pattern + elseif ($last_found !== PHP_INT_MAX) { + // Adding replacement datas to output buffer + $rep_size = $this->_repSize[$last_found]; + for ($j = 0; $j < $rep_size; ++$j) { + $newBuffer[] = $this->_replace[$last_found][$j]; + } + // We Move cursor forward + $i += $last_size - 1; + // Edge Case, last position in buffer + if ($i >= $buf_size) { + $newBuffer[] = $buffer[$i]; + } + + // We start the next loop + continue 2; + } else { + // this byte is not in a pattern and we haven't found another pattern + break; + } + } + // Normal byte, move it to output buffer + $newBuffer[] = $buffer[$i]; + } + + return $newBuffer; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php new file mode 100644 index 00000000000..d0db8b96197 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php @@ -0,0 +1,66 @@ +_search = $search; + $this->_replace = $replace; + } + + /** + * Returns true if based on the buffer passed more bytes should be buffered. + * + * @param string $buffer + * + * @return bool + */ + public function shouldBuffer($buffer) + { + $endOfBuffer = substr($buffer, -1); + foreach ((array) $this->_search as $needle) { + if (false !== strpos($needle, $endOfBuffer)) { + return true; + } + } + + return false; + } + + /** + * Perform the actual replacements on $buffer and return the result. + * + * @param string $buffer + * + * @return string + */ + public function filter($buffer) + { + return str_replace($this->_search, $this->_replace, $buffer); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php new file mode 100644 index 00000000000..e98240b5bc5 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php @@ -0,0 +1,45 @@ +_filters[$search][$replace])) { + if (!isset($this->_filters[$search])) { + $this->_filters[$search] = array(); + } + + if (!isset($this->_filters[$search][$replace])) { + $this->_filters[$search][$replace] = array(); + } + + $this->_filters[$search][$replace] = new Swift_StreamFilters_StringReplacementFilter($search, $replace); + } + + return $this->_filters[$search][$replace]; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php new file mode 100644 index 00000000000..db3d31093ef --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/SwiftException.php @@ -0,0 +1,29 @@ +_eventDispatcher = $dispatcher; + $this->_buffer = $buf; + $this->_lookupHostname(); + } + + /** + * Set the name of the local domain which Swift will identify itself as. + * + * This should be a fully-qualified domain name and should be truly the domain + * you're using. + * + * If your server doesn't have a domain name, use the IP in square + * brackets (i.e. [127.0.0.1]). + * + * @param string $domain + * + * @return Swift_Transport_AbstractSmtpTransport + */ + public function setLocalDomain($domain) + { + $this->_domain = $domain; + + return $this; + } + + /** + * Get the name of the domain Swift will identify as. + * + * @return string + */ + public function getLocalDomain() + { + return $this->_domain; + } + + /** + * Sets the source IP. + * + * @param string $source + */ + public function setSourceIp($source) + { + $this->_sourceIp = $source; + } + + /** + * Returns the IP used to connect to the destination. + * + * @return string + */ + public function getSourceIp() + { + return $this->_sourceIp; + } + + /** + * Start the SMTP connection. + */ + public function start() + { + if (!$this->_started) { + if ($evt = $this->_eventDispatcher->createTransportChangeEvent($this)) { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); + if ($evt->bubbleCancelled()) { + return; + } + } + + try { + $this->_buffer->initialize($this->_getBufferParams()); + } catch (Swift_TransportException $e) { + $this->_throwException($e); + } + $this->_readGreeting(); + $this->_doHeloCommand(); + + if ($evt) { + $this->_eventDispatcher->dispatchEvent($evt, 'transportStarted'); + } + + $this->_started = true; + } + } + + /** + * Test if an SMTP connection has been established. + * + * @return bool + */ + public function isStarted() + { + return $this->_started; + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param Swift_Mime_Message $message + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $sent = 0; + $failedRecipients = (array) $failedRecipients; + + if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } + + if (!$reversePath = $this->_getReversePath($message)) { + $this->_throwException(new Swift_TransportException( + 'Cannot send message without a sender address' + ) + ); + } + + $to = (array) $message->getTo(); + $cc = (array) $message->getCc(); + $tos = array_merge($to, $cc); + $bcc = (array) $message->getBcc(); + + $message->setBcc(array()); + + try { + $sent += $this->_sendTo($message, $reversePath, $tos, $failedRecipients); + $sent += $this->_sendBcc($message, $reversePath, $bcc, $failedRecipients); + } catch (Exception $e) { + $message->setBcc($bcc); + throw $e; + } + + $message->setBcc($bcc); + + if ($evt) { + if ($sent == count($to) + count($cc) + count($bcc)) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + } elseif ($sent > 0) { + $evt->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE); + } else { + $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); + } + $evt->setFailedRecipients($failedRecipients); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $message->generateId(); //Make sure a new Message ID is used + + return $sent; + } + + /** + * Stop the SMTP connection. + */ + public function stop() + { + if ($this->_started) { + if ($evt = $this->_eventDispatcher->createTransportChangeEvent($this)) { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); + if ($evt->bubbleCancelled()) { + return; + } + } + + try { + $this->executeCommand("QUIT\r\n", array(221)); + } catch (Swift_TransportException $e) { + } + + try { + $this->_buffer->terminate(); + + if ($evt) { + $this->_eventDispatcher->dispatchEvent($evt, 'transportStopped'); + } + } catch (Swift_TransportException $e) { + $this->_throwException($e); + } + } + $this->_started = false; + } + + /** + * Register a plugin. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->_eventDispatcher->bindEventListener($plugin); + } + + /** + * Reset the current mail transaction. + */ + public function reset() + { + $this->executeCommand("RSET\r\n", array(250)); + } + + /** + * Get the IoBuffer where read/writes are occurring. + * + * @return Swift_Transport_IoBuffer + */ + public function getBuffer() + { + return $this->_buffer; + } + + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * + * @param string $command + * @param int[] $codes + * @param string[] $failures An array of failures by-reference + * + * @return string + */ + public function executeCommand($command, $codes = array(), &$failures = null) + { + $failures = (array) $failures; + $seq = $this->_buffer->write($command); + $response = $this->_getFullResponse($seq); + if ($evt = $this->_eventDispatcher->createCommandEvent($this, $command, $codes)) { + $this->_eventDispatcher->dispatchEvent($evt, 'commandSent'); + } + $this->_assertResponseCode($response, $codes); + + return $response; + } + + /** Read the opening SMTP greeting */ + protected function _readGreeting() + { + $this->_assertResponseCode($this->_getFullResponse(0), array(220)); + } + + /** Send the HELO welcome */ + protected function _doHeloCommand() + { + $this->executeCommand( + sprintf("HELO %s\r\n", $this->_domain), array(250) + ); + } + + /** Send the MAIL FROM command */ + protected function _doMailFromCommand($address) + { + $this->executeCommand( + sprintf("MAIL FROM:<%s>\r\n", $address), array(250) + ); + } + + /** Send the RCPT TO command */ + protected function _doRcptToCommand($address) + { + $this->executeCommand( + sprintf("RCPT TO:<%s>\r\n", $address), array(250, 251, 252) + ); + } + + /** Send the DATA command */ + protected function _doDataCommand() + { + $this->executeCommand("DATA\r\n", array(354)); + } + + /** Stream the contents of the message over the buffer */ + protected function _streamMessage(Swift_Mime_Message $message) + { + $this->_buffer->setWriteTranslations(array("\r\n." => "\r\n..")); + try { + $message->toByteStream($this->_buffer); + $this->_buffer->flushBuffers(); + } catch (Swift_TransportException $e) { + $this->_throwException($e); + } + $this->_buffer->setWriteTranslations(array()); + $this->executeCommand("\r\n.\r\n", array(250)); + } + + /** Determine the best-use reverse path for this message */ + protected function _getReversePath(Swift_Mime_Message $message) + { + $return = $message->getReturnPath(); + $sender = $message->getSender(); + $from = $message->getFrom(); + $path = null; + if (!empty($return)) { + $path = $return; + } elseif (!empty($sender)) { + // Don't use array_keys + reset($sender); // Reset Pointer to first pos + $path = key($sender); // Get key + } elseif (!empty($from)) { + reset($from); // Reset Pointer to first pos + $path = key($from); // Get key + } + + return $path; + } + + /** Throw a TransportException, first sending it to any listeners */ + protected function _throwException(Swift_TransportException $e) + { + if ($evt = $this->_eventDispatcher->createTransportExceptionEvent($this, $e)) { + $this->_eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); + if (!$evt->bubbleCancelled()) { + throw $e; + } + } else { + throw $e; + } + } + + /** Throws an Exception if a response code is incorrect */ + protected function _assertResponseCode($response, $wanted) + { + list($code) = sscanf($response, '%3d'); + $valid = (empty($wanted) || in_array($code, $wanted)); + + if ($evt = $this->_eventDispatcher->createResponseEvent($this, $response, + $valid)) { + $this->_eventDispatcher->dispatchEvent($evt, 'responseReceived'); + } + + if (!$valid) { + $this->_throwException( + new Swift_TransportException( + 'Expected response code '.implode('/', $wanted).' but got code '. + '"'.$code.'", with message "'.$response.'"', + $code) + ); + } + } + + /** Get an entire multi-line response using its sequence number */ + protected function _getFullResponse($seq) + { + $response = ''; + try { + do { + $line = $this->_buffer->readLine($seq); + $response .= $line; + } while (null !== $line && false !== $line && ' ' != $line{3}); + } catch (Swift_TransportException $e) { + $this->_throwException($e); + } catch (Swift_IoException $e) { + $this->_throwException( + new Swift_TransportException( + $e->getMessage()) + ); + } + + return $response; + } + + /** Send an email to the given recipients from the given reverse path */ + private function _doMailTransaction($message, $reversePath, array $recipients, array &$failedRecipients) + { + $sent = 0; + $this->_doMailFromCommand($reversePath); + foreach ($recipients as $forwardPath) { + try { + $this->_doRcptToCommand($forwardPath); + ++$sent; + } catch (Swift_TransportException $e) { + $failedRecipients[] = $forwardPath; + } + } + + if ($sent != 0) { + $this->_doDataCommand(); + $this->_streamMessage($message); + } else { + $this->reset(); + } + + return $sent; + } + + /** Send a message to the given To: recipients */ + private function _sendTo(Swift_Mime_Message $message, $reversePath, array $to, array &$failedRecipients) + { + if (empty($to)) { + return 0; + } + + return $this->_doMailTransaction($message, $reversePath, array_keys($to), + $failedRecipients); + } + + /** Send a message to all Bcc: recipients */ + private function _sendBcc(Swift_Mime_Message $message, $reversePath, array $bcc, array &$failedRecipients) + { + $sent = 0; + foreach ($bcc as $forwardPath => $name) { + $message->setBcc(array($forwardPath => $name)); + $sent += $this->_doMailTransaction( + $message, $reversePath, array($forwardPath), $failedRecipients + ); + } + + return $sent; + } + + /** Try to determine the hostname of the server this is run on */ + private function _lookupHostname() + { + if (!empty($_SERVER['SERVER_NAME']) + && $this->_isFqdn($_SERVER['SERVER_NAME'])) { + $this->_domain = $_SERVER['SERVER_NAME']; + } elseif (!empty($_SERVER['SERVER_ADDR'])) { + $this->_domain = sprintf('[%s]', $_SERVER['SERVER_ADDR']); + } + } + + /** Determine is the $hostname is a fully-qualified name */ + private function _isFqdn($hostname) + { + // We could do a really thorough check, but there's really no point + if (false !== $dotPos = strpos($hostname, '.')) { + return ($dotPos > 0) && ($dotPos != strlen($hostname) - 1); + } + + return false; + } + + /** + * Destructor. + */ + public function __destruct() + { + $this->stop(); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php new file mode 100644 index 00000000000..53f721d03c6 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php @@ -0,0 +1,81 @@ +executeCommand("AUTH CRAM-MD5\r\n", array(334)); + $challenge = base64_decode(substr($challenge, 4)); + $message = base64_encode( + $username.' '.$this->_getResponse($password, $challenge) + ); + $agent->executeCommand(sprintf("%s\r\n", $message), array(235)); + + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", array(250)); + + return false; + } + } + + /** + * Generate a CRAM-MD5 response from a server challenge. + * + * @param string $secret + * @param string $challenge + * + * @return string + */ + private function _getResponse($secret, $challenge) + { + if (strlen($secret) > 64) { + $secret = pack('H32', md5($secret)); + } + + if (strlen($secret) < 64) { + $secret = str_pad($secret, 64, chr(0)); + } + + $k_ipad = substr($secret, 0, 64) ^ str_repeat(chr(0x36), 64); + $k_opad = substr($secret, 0, 64) ^ str_repeat(chr(0x5C), 64); + + $inner = pack('H32', md5($k_ipad.$challenge)); + $digest = md5($k_opad.$inner); + + return $digest; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php new file mode 100644 index 00000000000..6ab6e3337e2 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php @@ -0,0 +1,51 @@ +executeCommand("AUTH LOGIN\r\n", array(334)); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($username)), array(334)); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($password)), array(235)); + + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", array(250)); + + return false; + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php new file mode 100644 index 00000000000..d8331316963 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php @@ -0,0 +1,726 @@ + + */ +class Swift_Transport_Esmtp_Auth_NTLMAuthenticator implements Swift_Transport_Esmtp_Authenticator +{ + const NTLMSIG = "NTLMSSP\x00"; + const DESCONST = 'KGS!@#$%'; + + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'NTLM'; + } + + /** + * Try to authenticate the user with $username and $password. + * + * @param Swift_Transport_SmtpAgent $agent + * @param string $username + * @param string $password + * + * @return bool + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) + { + if (!function_exists('mcrypt_module_open')) { + throw new LogicException('The mcrypt functions need to be enabled to use the NTLM authenticator.'); + } + + if (!function_exists('openssl_random_pseudo_bytes')) { + throw new LogicException('The OpenSSL extension must be enabled to use the NTLM authenticator.'); + } + + if (!function_exists('bcmul')) { + throw new LogicException('The BCMatch functions must be enabled to use the NTLM authenticator.'); + } + + try { + // execute AUTH command and filter out the code at the beginning + // AUTH NTLM xxxx + $response = base64_decode(substr(trim($this->sendMessage1($agent)), 4)); + + // extra parameters for our unit cases + $timestamp = func_num_args() > 3 ? func_get_arg(3) : $this->getCorrectTimestamp(bcmul(microtime(true), '1000')); + $client = func_num_args() > 4 ? func_get_arg(4) : $this->getRandomBytes(8); + + // Message 3 response + $this->sendMessage3($response, $username, $password, $timestamp, $client, $agent); + + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", array(250)); + + return false; + } + } + + protected function si2bin($si, $bits = 32) + { + $bin = null; + if ($si >= -pow(2, $bits - 1) && ($si <= pow(2, $bits - 1))) { + // positive or zero + if ($si >= 0) { + $bin = base_convert($si, 10, 2); + // pad to $bits bit + $bin_length = strlen($bin); + if ($bin_length < $bits) { + $bin = str_repeat('0', $bits - $bin_length).$bin; + } + } else { + // negative + $si = -$si - pow(2, $bits); + $bin = base_convert($si, 10, 2); + $bin_length = strlen($bin); + if ($bin_length > $bits) { + $bin = str_repeat('1', $bits - $bin_length).$bin; + } + } + } + + return $bin; + } + + /** + * Send our auth message and returns the response. + * + * @param Swift_Transport_SmtpAgent $agent + * + * @return string SMTP Response + */ + protected function sendMessage1(Swift_Transport_SmtpAgent $agent) + { + $message = $this->createMessage1(); + + return $agent->executeCommand(sprintf("AUTH %s %s\r\n", $this->getAuthKeyword(), base64_encode($message)), array(334)); + } + + /** + * Fetch all details of our response (message 2). + * + * @param string $response + * + * @return array our response parsed + */ + protected function parseMessage2($response) + { + $responseHex = bin2hex($response); + $length = floor(hexdec(substr($responseHex, 28, 4)) / 256) * 2; + $offset = floor(hexdec(substr($responseHex, 32, 4)) / 256) * 2; + $challenge = $this->hex2bin(substr($responseHex, 48, 16)); + $context = $this->hex2bin(substr($responseHex, 64, 16)); + $targetInfoH = $this->hex2bin(substr($responseHex, 80, 16)); + $targetName = $this->hex2bin(substr($responseHex, $offset, $length)); + $offset = floor(hexdec(substr($responseHex, 88, 4)) / 256) * 2; + $targetInfoBlock = substr($responseHex, $offset); + list($domainName, $serverName, $DNSDomainName, $DNSServerName, $terminatorByte) = $this->readSubBlock($targetInfoBlock); + + return array( + $challenge, + $context, + $targetInfoH, + $targetName, + $domainName, + $serverName, + $DNSDomainName, + $DNSServerName, + $this->hex2bin($targetInfoBlock), + $terminatorByte, + ); + } + + /** + * Read the blob information in from message2. + * + * @param $block + * + * @return array + */ + protected function readSubBlock($block) + { + // remove terminatorByte cause it's always the same + $block = substr($block, 0, -8); + + $length = strlen($block); + $offset = 0; + $data = array(); + while ($offset < $length) { + $blockLength = hexdec(substr(substr($block, $offset, 8), -4)) / 256; + $offset += 8; + $data[] = $this->hex2bin(substr($block, $offset, $blockLength * 2)); + $offset += $blockLength * 2; + } + + if (count($data) == 3) { + $data[] = $data[2]; + $data[2] = ''; + } + + $data[] = $this->createByte('00'); + + return $data; + } + + /** + * Send our final message with all our data. + * + * @param string $response Message 1 response (message 2) + * @param string $username + * @param string $password + * @param string $timestamp + * @param string $client + * @param Swift_Transport_SmtpAgent $agent + * @param bool $v2 Use version2 of the protocol + * + * @return string + */ + protected function sendMessage3($response, $username, $password, $timestamp, $client, Swift_Transport_SmtpAgent $agent, $v2 = true) + { + list($domain, $username) = $this->getDomainAndUsername($username); + //$challenge, $context, $targetInfoH, $targetName, $domainName, $workstation, $DNSDomainName, $DNSServerName, $blob, $ter + list($challenge, , , , , $workstation, , , $blob) = $this->parseMessage2($response); + + if (!$v2) { + // LMv1 + $lmResponse = $this->createLMPassword($password, $challenge); + // NTLMv1 + $ntlmResponse = $this->createNTLMPassword($password, $challenge); + } else { + // LMv2 + $lmResponse = $this->createLMv2Password($password, $username, $domain, $challenge, $client); + // NTLMv2 + $ntlmResponse = $this->createNTLMv2Hash($password, $username, $domain, $challenge, $blob, $timestamp, $client); + } + + $message = $this->createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse); + + return $agent->executeCommand(sprintf("%s\r\n", base64_encode($message)), array(235)); + } + + /** + * Create our message 1. + * + * @return string + */ + protected function createMessage1() + { + return self::NTLMSIG + .$this->createByte('01') // Message 1 +.$this->createByte('0702'); // Flags + } + + /** + * Create our message 3. + * + * @param string $domain + * @param string $username + * @param string $workstation + * @param string $lmResponse + * @param string $ntlmResponse + * + * @return string + */ + protected function createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse) + { + // Create security buffers + $domainSec = $this->createSecurityBuffer($domain, 64); + $domainInfo = $this->readSecurityBuffer(bin2hex($domainSec)); + $userSec = $this->createSecurityBuffer($username, ($domainInfo[0] + $domainInfo[1]) / 2); + $userInfo = $this->readSecurityBuffer(bin2hex($userSec)); + $workSec = $this->createSecurityBuffer($workstation, ($userInfo[0] + $userInfo[1]) / 2); + $workInfo = $this->readSecurityBuffer(bin2hex($workSec)); + $lmSec = $this->createSecurityBuffer($lmResponse, ($workInfo[0] + $workInfo[1]) / 2, true); + $lmInfo = $this->readSecurityBuffer(bin2hex($lmSec)); + $ntlmSec = $this->createSecurityBuffer($ntlmResponse, ($lmInfo[0] + $lmInfo[1]) / 2, true); + + return self::NTLMSIG + .$this->createByte('03') // TYPE 3 message +.$lmSec // LM response header +.$ntlmSec // NTLM response header +.$domainSec // Domain header +.$userSec // User header +.$workSec // Workstation header +.$this->createByte('000000009a', 8) // session key header (empty) +.$this->createByte('01020000') // FLAGS +.$this->convertTo16bit($domain) // domain name +.$this->convertTo16bit($username) // username +.$this->convertTo16bit($workstation) // workstation +.$lmResponse + .$ntlmResponse; + } + + /** + * @param string $timestamp Epoch timestamp in microseconds + * @param string $client Random bytes + * @param string $targetInfo + * + * @return string + */ + protected function createBlob($timestamp, $client, $targetInfo) + { + return $this->createByte('0101') + .$this->createByte('00') + .$timestamp + .$client + .$this->createByte('00') + .$targetInfo + .$this->createByte('00'); + } + + /** + * Get domain and username from our username. + * + * @example DOMAIN\username + * + * @param string $name + * + * @return array + */ + protected function getDomainAndUsername($name) + { + if (strpos($name, '\\') !== false) { + return explode('\\', $name); + } + + list($user, $domain) = explode('@', $name); + + return array($domain, $user); + } + + /** + * Create LMv1 response. + * + * @param string $password + * @param string $challenge + * + * @return string + */ + protected function createLMPassword($password, $challenge) + { + // FIRST PART + $password = $this->createByte(strtoupper($password), 14, false); + list($key1, $key2) = str_split($password, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + + $constantDecrypt = $this->createByte($this->desEncrypt(self::DESCONST, $desKey1).$this->desEncrypt(self::DESCONST, $desKey2), 21, false); + + // SECOND PART + list($key1, $key2, $key3) = str_split($constantDecrypt, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + $desKey3 = $this->createDesKey($key3); + + return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); + } + + /** + * Create NTLMv1 response. + * + * @param string $password + * @param string $challenge + * + * @return string + */ + protected function createNTLMPassword($password, $challenge) + { + // FIRST PART + $ntlmHash = $this->createByte($this->md4Encrypt($password), 21, false); + list($key1, $key2, $key3) = str_split($ntlmHash, 7); + + $desKey1 = $this->createDesKey($key1); + $desKey2 = $this->createDesKey($key2); + $desKey3 = $this->createDesKey($key3); + + return $this->desEncrypt($challenge, $desKey1).$this->desEncrypt($challenge, $desKey2).$this->desEncrypt($challenge, $desKey3); + } + + /** + * Convert a normal timestamp to a tenth of a microtime epoch time. + * + * @param string $time + * + * @return string + */ + protected function getCorrectTimestamp($time) + { + // Get our timestamp (tricky!) + bcscale(0); + + $time = number_format($time, 0, '.', ''); // save microtime to string + $time = bcadd($time, '11644473600000'); // add epoch time + $time = bcmul($time, 10000); // tenths of a microsecond. + + $binary = $this->si2bin($time, 64); // create 64 bit binary string + $timestamp = ''; + for ($i = 0; $i < 8; ++$i) { + $timestamp .= chr(bindec(substr($binary, -(($i + 1) * 8), 8))); + } + + return $timestamp; + } + + /** + * Create LMv2 response. + * + * @param string $password + * @param string $username + * @param string $domain + * @param string $challenge NTLM Challenge + * @param string $client Random string + * + * @return string + */ + protected function createLMv2Password($password, $username, $domain, $challenge, $client) + { + $lmPass = '00'; // by default 00 + // if $password > 15 than we can't use this method + if (strlen($password) <= 15) { + $ntlmHash = $this->md4Encrypt($password); + $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); + + $lmPass = bin2hex($this->md5Encrypt($ntml2Hash, $challenge.$client).$client); + } + + return $this->createByte($lmPass, 24); + } + + /** + * Create NTLMv2 response. + * + * @param string $password + * @param string $username + * @param string $domain + * @param string $challenge Hex values + * @param string $targetInfo Hex values + * @param string $timestamp + * @param string $client Random bytes + * + * @return string + * + * @see http://davenport.sourceforge.net/ntlm.html#theNtlmResponse + */ + protected function createNTLMv2Hash($password, $username, $domain, $challenge, $targetInfo, $timestamp, $client) + { + $ntlmHash = $this->md4Encrypt($password); + $ntml2Hash = $this->md5Encrypt($ntlmHash, $this->convertTo16bit(strtoupper($username).$domain)); + + // create blob + $blob = $this->createBlob($timestamp, $client, $targetInfo); + + $ntlmv2Response = $this->md5Encrypt($ntml2Hash, $challenge.$blob); + + return $ntlmv2Response.$blob; + } + + protected function createDesKey($key) + { + $material = array(bin2hex($key[0])); + $len = strlen($key); + for ($i = 1; $i < $len; ++$i) { + list($high, $low) = str_split(bin2hex($key[$i])); + $v = $this->castToByte(ord($key[$i - 1]) << (7 + 1 - $i) | $this->uRShift(hexdec(dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xf)), $i)); + $material[] = str_pad(substr(dechex($v), -2), 2, '0', STR_PAD_LEFT); // cast to byte + } + $material[] = str_pad(substr(dechex($this->castToByte(ord($key[6]) << 1)), -2), 2, '0'); + + // odd parity + foreach ($material as $k => $v) { + $b = $this->castToByte(hexdec($v)); + $needsParity = (($this->uRShift($b, 7) ^ $this->uRShift($b, 6) ^ $this->uRShift($b, 5) + ^ $this->uRShift($b, 4) ^ $this->uRShift($b, 3) ^ $this->uRShift($b, 2) + ^ $this->uRShift($b, 1)) & 0x01) == 0; + + list($high, $low) = str_split($v); + if ($needsParity) { + $material[$k] = dechex(hexdec($high) | 0x0).dechex(hexdec($low) | 0x1); + } else { + $material[$k] = dechex(hexdec($high) & 0xf).dechex(hexdec($low) & 0xe); + } + } + + return $this->hex2bin(implode('', $material)); + } + + /** HELPER FUNCTIONS */ + /** + * Create our security buffer depending on length and offset. + * + * @param string $value Value we want to put in + * @param int $offset start of value + * @param bool $is16 Do we 16bit string or not? + * + * @return string + */ + protected function createSecurityBuffer($value, $offset, $is16 = false) + { + $length = strlen(bin2hex($value)); + $length = $is16 ? $length / 2 : $length; + $length = $this->createByte(str_pad(dechex($length), 2, '0', STR_PAD_LEFT), 2); + + return $length.$length.$this->createByte(dechex($offset), 4); + } + + /** + * Read our security buffer to fetch length and offset of our value. + * + * @param string $value Securitybuffer in hex + * + * @return array array with length and offset + */ + protected function readSecurityBuffer($value) + { + $length = floor(hexdec(substr($value, 0, 4)) / 256) * 2; + $offset = floor(hexdec(substr($value, 8, 4)) / 256) * 2; + + return array($length, $offset); + } + + /** + * Cast to byte java equivalent to (byte). + * + * @param int $v + * + * @return int + */ + protected function castToByte($v) + { + return (($v + 128) % 256) - 128; + } + + /** + * Java unsigned right bitwise + * $a >>> $b. + * + * @param int $a + * @param int $b + * + * @return int + */ + protected function uRShift($a, $b) + { + if ($b == 0) { + return $a; + } + + return ($a >> $b) & ~(1 << (8 * PHP_INT_SIZE - 1) >> ($b - 1)); + } + + /** + * Right padding with 0 to certain length. + * + * @param string $input + * @param int $bytes Length of bytes + * @param bool $isHex Did we provided hex value + * + * @return string + */ + protected function createByte($input, $bytes = 4, $isHex = true) + { + if ($isHex) { + $byte = $this->hex2bin(str_pad($input, $bytes * 2, '00')); + } else { + $byte = str_pad($input, $bytes, "\x00"); + } + + return $byte; + } + + /** + * Create random bytes. + * + * @param $length + * + * @return string + */ + protected function getRandomBytes($length) + { + $bytes = openssl_random_pseudo_bytes($length, $strong); + + if (false !== $bytes && true === $strong) { + return $bytes; + } + + throw new RuntimeException('OpenSSL did not produce a secure random number.'); + } + + /** ENCRYPTION ALGORITHMS */ + /** + * DES Encryption. + * + * @param string $value + * @param string $key + * + * @return string + */ + protected function desEncrypt($value, $key) + { + $cipher = mcrypt_module_open(MCRYPT_DES, '', 'ecb', ''); + mcrypt_generic_init($cipher, $key, mcrypt_create_iv(mcrypt_enc_get_iv_size($cipher), MCRYPT_DEV_RANDOM)); + + return mcrypt_generic($cipher, $value); + } + + /** + * MD5 Encryption. + * + * @param string $key Encryption key + * @param string $msg Message to encrypt + * + * @return string + */ + protected function md5Encrypt($key, $msg) + { + $blocksize = 64; + if (strlen($key) > $blocksize) { + $key = pack('H*', md5($key)); + } + + $key = str_pad($key, $blocksize, "\0"); + $ipadk = $key ^ str_repeat("\x36", $blocksize); + $opadk = $key ^ str_repeat("\x5c", $blocksize); + + return pack('H*', md5($opadk.pack('H*', md5($ipadk.$msg)))); + } + + /** + * MD4 Encryption. + * + * @param string $input + * + * @return string + * + * @see http://php.net/manual/en/ref.hash.php + */ + protected function md4Encrypt($input) + { + $input = $this->convertTo16bit($input); + + return function_exists('hash') ? $this->hex2bin(hash('md4', $input)) : mhash(MHASH_MD4, $input); + } + + /** + * Convert UTF-8 to UTF-16. + * + * @param string $input + * + * @return string + */ + protected function convertTo16bit($input) + { + return iconv('UTF-8', 'UTF-16LE', $input); + } + + /** + * Hex2bin replacement for < PHP 5.4. + * + * @param string $hex + * + * @return string Binary + */ + protected function hex2bin($hex) + { + if (function_exists('hex2bin')) { + return hex2bin($hex); + } else { + return pack('H*', $hex); + } + } + + /** + * @param string $message + */ + protected function debug($message) + { + $message = bin2hex($message); + $messageId = substr($message, 16, 8); + echo substr($message, 0, 16)." NTLMSSP Signature
\n"; + echo $messageId." Type Indicator
\n"; + + if ($messageId == '02000000') { + $map = array( + 'Challenge', + 'Context', + 'Target Information Security Buffer', + 'Target Name Data', + 'NetBIOS Domain Name', + 'NetBIOS Server Name', + 'DNS Domain Name', + 'DNS Server Name', + 'BLOB', + 'Target Information Terminator', + ); + + $data = $this->parseMessage2($this->hex2bin($message)); + + foreach ($map as $key => $value) { + echo bin2hex($data[$key]).' - '.$data[$key].' ||| '.$value."
\n"; + } + } elseif ($messageId == '03000000') { + $i = 0; + $data[$i++] = substr($message, 24, 16); + list($lmLength, $lmOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 40, 16); + list($ntmlLength, $ntmlOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 56, 16); + list($targetLength, $targetOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 72, 16); + list($userLength, $userOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 88, 16); + list($workLength, $workOffset) = $this->readSecurityBuffer($data[$i - 1]); + + $data[$i++] = substr($message, 104, 16); + $data[$i++] = substr($message, 120, 8); + $data[$i++] = substr($message, $targetOffset, $targetLength); + $data[$i++] = substr($message, $userOffset, $userLength); + $data[$i++] = substr($message, $workOffset, $workLength); + $data[$i++] = substr($message, $lmOffset, $lmLength); + $data[$i] = substr($message, $ntmlOffset, $ntmlLength); + + $map = array( + 'LM Response Security Buffer', + 'NTLM Response Security Buffer', + 'Target Name Security Buffer', + 'User Name Security Buffer', + 'Workstation Name Security Buffer', + 'Session Key Security Buffer', + 'Flags', + 'Target Name Data', + 'User Name Data', + 'Workstation Name Data', + 'LM Response Data', + 'NTLM Response Data', + ); + + foreach ($map as $key => $value) { + echo $data[$key].' - '.$this->hex2bin($data[$key]).' ||| '.$value."
\n"; + } + } + + echo '

'; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php new file mode 100644 index 00000000000..43219f93445 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php @@ -0,0 +1,50 @@ +executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), array(235)); + + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", array(250)); + + return false; + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php new file mode 100644 index 00000000000..ca35e7b83ad --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php @@ -0,0 +1,70 @@ + + * $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587, 'tls') + * ->setAuthMode('XOAUTH2') + * ->setUsername('YOUR_EMAIL_ADDRESS') + * ->setPassword('YOUR_ACCESS_TOKEN'); + * + * + * @author xu.li + * + * @see https://developers.google.com/google-apps/gmail/xoauth2_protocol + */ +class Swift_Transport_Esmtp_Auth_XOAuth2Authenticator implements Swift_Transport_Esmtp_Authenticator +{ + /** + * Get the name of the AUTH mechanism this Authenticator handles. + * + * @return string + */ + public function getAuthKeyword() + { + return 'XOAUTH2'; + } + + /** + * Try to authenticate the user with $email and $token. + * + * @param Swift_Transport_SmtpAgent $agent + * @param string $email + * @param string $token + * + * @return bool + */ + public function authenticate(Swift_Transport_SmtpAgent $agent, $email, $token) + { + try { + $param = $this->constructXOAuth2Params($email, $token); + $agent->executeCommand('AUTH XOAUTH2 '.$param."\r\n", array(235)); + + return true; + } catch (Swift_TransportException $e) { + $agent->executeCommand("RSET\r\n", array(250)); + + return false; + } + } + + /** + * Construct the auth parameter. + * + * @see https://developers.google.com/google-apps/gmail/xoauth2_protocol#the_sasl_xoauth2_mechanism + */ + protected function constructXOAuth2Params($email, $token) + { + return base64_encode("user=$email\1auth=Bearer $token\1\1"); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php new file mode 100644 index 00000000000..cb36133c94d --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php @@ -0,0 +1,263 @@ +setAuthenticators($authenticators); + } + + /** + * Set the Authenticators which can process a login request. + * + * @param Swift_Transport_Esmtp_Authenticator[] $authenticators + */ + public function setAuthenticators(array $authenticators) + { + $this->_authenticators = $authenticators; + } + + /** + * Get the Authenticators which can process a login request. + * + * @return Swift_Transport_Esmtp_Authenticator[] + */ + public function getAuthenticators() + { + return $this->_authenticators; + } + + /** + * Set the username to authenticate with. + * + * @param string $username + */ + public function setUsername($username) + { + $this->_username = $username; + } + + /** + * Get the username to authenticate with. + * + * @return string + */ + public function getUsername() + { + return $this->_username; + } + + /** + * Set the password to authenticate with. + * + * @param string $password + */ + public function setPassword($password) + { + $this->_password = $password; + } + + /** + * Get the password to authenticate with. + * + * @return string + */ + public function getPassword() + { + return $this->_password; + } + + /** + * Set the auth mode to use to authenticate. + * + * @param string $mode + */ + public function setAuthMode($mode) + { + $this->_auth_mode = $mode; + } + + /** + * Get the auth mode to use to authenticate. + * + * @return string + */ + public function getAuthMode() + { + return $this->_auth_mode; + } + + /** + * Get the name of the ESMTP extension this handles. + * + * @return bool + */ + public function getHandledKeyword() + { + return 'AUTH'; + } + + /** + * Set the parameters which the EHLO greeting indicated. + * + * @param string[] $parameters + */ + public function setKeywordParams(array $parameters) + { + $this->_esmtpParams = $parameters; + } + + /** + * Runs immediately after a EHLO has been issued. + * + * @param Swift_Transport_SmtpAgent $agent to read/write + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + if ($this->_username) { + $count = 0; + foreach ($this->_getAuthenticatorsForAgent() as $authenticator) { + if (in_array(strtolower($authenticator->getAuthKeyword()), + array_map('strtolower', $this->_esmtpParams))) { + ++$count; + if ($authenticator->authenticate($agent, $this->_username, $this->_password)) { + return; + } + } + } + throw new Swift_TransportException( + 'Failed to authenticate on SMTP server with username "'. + $this->_username.'" using '.$count.' possible authenticators' + ); + } + } + + /** + * Not used. + */ + public function getMailParams() + { + return array(); + } + + /** + * Not used. + */ + public function getRcptParams() + { + return array(); + } + + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = array(), &$failedRecipients = null, &$stop = false) + { + } + + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } + + /** + * Returns an array of method names which are exposed to the Esmtp class. + * + * @return string[] + */ + public function exposeMixinMethods() + { + return array('setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode'); + } + + /** + * Not used. + */ + public function resetState() + { + } + + /** + * Returns the authenticator list for the given agent. + * + * @param Swift_Transport_SmtpAgent $agent + * + * @return array + */ + protected function _getAuthenticatorsForAgent() + { + if (!$mode = strtolower($this->_auth_mode)) { + return $this->_authenticators; + } + + foreach ($this->_authenticators as $authenticator) { + if (strtolower($authenticator->getAuthKeyword()) == $mode) { + return array($authenticator); + } + } + + throw new Swift_TransportException('Auth mode '.$mode.' is invalid'); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php new file mode 100644 index 00000000000..12a9abf8199 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php @@ -0,0 +1,35 @@ +. + * + * @return string[] + */ + public function getMailParams(); + + /** + * Get params which are appended to RCPT TO:<>. + * + * @return string[] + */ + public function getRcptParams(); + + /** + * Runs when a command is due to be sent. + * + * @param Swift_Transport_SmtpAgent $agent to read/write + * @param string $command to send + * @param int[] $codes expected in response + * @param string[] $failedRecipients to collect failures + * @param bool $stop to be set true by-reference if the command is now sent + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = array(), &$failedRecipients = null, &$stop = false); + + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword); + + /** + * Returns an array of method names which are exposed to the Esmtp class. + * + * @return string[] + */ + public function exposeMixinMethods(); + + /** + * Tells this handler to clear any buffers and reset its state. + */ + public function resetState(); +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php new file mode 100644 index 00000000000..a1cd0dcd1de --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php @@ -0,0 +1,412 @@ + 'tcp', + 'host' => 'localhost', + 'port' => 25, + 'timeout' => 30, + 'blocking' => 1, + 'tls' => false, + 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, + 'stream_context_options' => array(), + ); + + /** + * Creates a new EsmtpTransport using the given I/O buffer. + * + * @param Swift_Transport_IoBuffer $buf + * @param Swift_Transport_EsmtpHandler[] $extensionHandlers + * @param Swift_Events_EventDispatcher $dispatcher + */ + public function __construct(Swift_Transport_IoBuffer $buf, array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher) + { + parent::__construct($buf, $dispatcher); + $this->setExtensionHandlers($extensionHandlers); + } + + /** + * Set the host to connect to. + * + * @param string $host + * + * @return Swift_Transport_EsmtpTransport + */ + public function setHost($host) + { + $this->_params['host'] = $host; + + return $this; + } + + /** + * Get the host to connect to. + * + * @return string + */ + public function getHost() + { + return $this->_params['host']; + } + + /** + * Set the port to connect to. + * + * @param int $port + * + * @return Swift_Transport_EsmtpTransport + */ + public function setPort($port) + { + $this->_params['port'] = (int) $port; + + return $this; + } + + /** + * Get the port to connect to. + * + * @return int + */ + public function getPort() + { + return $this->_params['port']; + } + + /** + * Set the connection timeout. + * + * @param int $timeout seconds + * + * @return Swift_Transport_EsmtpTransport + */ + public function setTimeout($timeout) + { + $this->_params['timeout'] = (int) $timeout; + $this->_buffer->setParam('timeout', (int) $timeout); + + return $this; + } + + /** + * Get the connection timeout. + * + * @return int + */ + public function getTimeout() + { + return $this->_params['timeout']; + } + + /** + * Set the encryption type (tls or ssl). + * + * @param string $encryption + * + * @return Swift_Transport_EsmtpTransport + */ + public function setEncryption($encryption) + { + if ('tls' == $encryption) { + $this->_params['protocol'] = 'tcp'; + $this->_params['tls'] = true; + } else { + $this->_params['protocol'] = $encryption; + $this->_params['tls'] = false; + } + + return $this; + } + + /** + * Get the encryption type. + * + * @return string + */ + public function getEncryption() + { + return $this->_params['tls'] ? 'tls' : $this->_params['protocol']; + } + + /** + * Sets the stream context options. + * + * @param array $options + * + * @return Swift_Transport_EsmtpTransport + */ + public function setStreamOptions($options) + { + $this->_params['stream_context_options'] = $options; + + return $this; + } + + /** + * Returns the stream context options. + * + * @return array + */ + public function getStreamOptions() + { + return $this->_params['stream_context_options']; + } + + /** + * Sets the source IP. + * + * @param string $source + * + * @return Swift_Transport_EsmtpTransport + */ + public function setSourceIp($source) + { + $this->_params['sourceIp'] = $source; + + return $this; + } + + /** + * Returns the IP used to connect to the destination. + * + * @return string + */ + public function getSourceIp() + { + return isset($this->_params['sourceIp']) ? $this->_params['sourceIp'] : null; + } + + /** + * Set ESMTP extension handlers. + * + * @param Swift_Transport_EsmtpHandler[] $handlers + * + * @return Swift_Transport_EsmtpTransport + */ + public function setExtensionHandlers(array $handlers) + { + $assoc = array(); + foreach ($handlers as $handler) { + $assoc[$handler->getHandledKeyword()] = $handler; + } + + @uasort($assoc, array($this, '_sortHandlers')); + $this->_handlers = $assoc; + $this->_setHandlerParams(); + + return $this; + } + + /** + * Get ESMTP extension handlers. + * + * @return Swift_Transport_EsmtpHandler[] + */ + public function getExtensionHandlers() + { + return array_values($this->_handlers); + } + + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * + * @param string $command + * @param int[] $codes + * @param string[] $failures An array of failures by-reference + * + * @return string + */ + public function executeCommand($command, $codes = array(), &$failures = null) + { + $failures = (array) $failures; + $stopSignal = false; + $response = null; + foreach ($this->_getActiveHandlers() as $handler) { + $response = $handler->onCommand( + $this, $command, $codes, $failures, $stopSignal + ); + if ($stopSignal) { + return $response; + } + } + + return parent::executeCommand($command, $codes, $failures); + } + + // -- Mixin invocation code + + /** Mixin handling method for ESMTP handlers */ + public function __call($method, $args) + { + foreach ($this->_handlers as $handler) { + if (in_array(strtolower($method), + array_map('strtolower', (array) $handler->exposeMixinMethods()) + )) { + $return = call_user_func_array(array($handler, $method), $args); + // Allow fluid method calls + if (is_null($return) && substr($method, 0, 3) == 'set') { + return $this; + } else { + return $return; + } + } + } + trigger_error('Call to undefined method '.$method, E_USER_ERROR); + } + + /** Get the params to initialize the buffer */ + protected function _getBufferParams() + { + return $this->_params; + } + + /** Overridden to perform EHLO instead */ + protected function _doHeloCommand() + { + try { + $response = $this->executeCommand( + sprintf("EHLO %s\r\n", $this->_domain), array(250) + ); + } catch (Swift_TransportException $e) { + return parent::_doHeloCommand(); + } + + if ($this->_params['tls']) { + try { + $this->executeCommand("STARTTLS\r\n", array(220)); + + if (!$this->_buffer->startTLS()) { + throw new Swift_TransportException('Unable to connect with TLS encryption'); + } + + try { + $response = $this->executeCommand( + sprintf("EHLO %s\r\n", $this->_domain), array(250) + ); + } catch (Swift_TransportException $e) { + return parent::_doHeloCommand(); + } + } catch (Swift_TransportException $e) { + $this->_throwException($e); + } + } + + $this->_capabilities = $this->_getCapabilities($response); + $this->_setHandlerParams(); + foreach ($this->_getActiveHandlers() as $handler) { + $handler->afterEhlo($this); + } + } + + /** Overridden to add Extension support */ + protected function _doMailFromCommand($address) + { + $handlers = $this->_getActiveHandlers(); + $params = array(); + foreach ($handlers as $handler) { + $params = array_merge($params, (array) $handler->getMailParams()); + } + $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; + $this->executeCommand( + sprintf("MAIL FROM:<%s>%s\r\n", $address, $paramStr), array(250) + ); + } + + /** Overridden to add Extension support */ + protected function _doRcptToCommand($address) + { + $handlers = $this->_getActiveHandlers(); + $params = array(); + foreach ($handlers as $handler) { + $params = array_merge($params, (array) $handler->getRcptParams()); + } + $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; + $this->executeCommand( + sprintf("RCPT TO:<%s>%s\r\n", $address, $paramStr), array(250, 251, 252) + ); + } + + /** Determine ESMTP capabilities by function group */ + private function _getCapabilities($ehloResponse) + { + $capabilities = array(); + $ehloResponse = trim($ehloResponse); + $lines = explode("\r\n", $ehloResponse); + array_shift($lines); + foreach ($lines as $line) { + if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) { + $keyword = strtoupper($matches[1]); + $paramStr = strtoupper(ltrim($matches[2], ' =')); + $params = !empty($paramStr) ? explode(' ', $paramStr) : array(); + $capabilities[$keyword] = $params; + } + } + + return $capabilities; + } + + /** Set parameters which are used by each extension handler */ + private function _setHandlerParams() + { + foreach ($this->_handlers as $keyword => $handler) { + if (array_key_exists($keyword, $this->_capabilities)) { + $handler->setKeywordParams($this->_capabilities[$keyword]); + } + } + } + + /** Get ESMTP handlers which are currently ok to use */ + private function _getActiveHandlers() + { + $handlers = array(); + foreach ($this->_handlers as $keyword => $handler) { + if (array_key_exists($keyword, $this->_capabilities)) { + $handlers[] = $handler; + } + } + + return $handlers; + } + + /** Custom sort for extension handler ordering */ + private function _sortHandlers($a, $b) + { + return $a->getPriorityOver($b->getHandledKeyword()); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php new file mode 100644 index 00000000000..c039f3beccf --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php @@ -0,0 +1,82 @@ +_transports); + $sent = 0; + $this->_lastUsedTransport = null; + + for ($i = 0; $i < $maxTransports + && $transport = $this->_getNextTransport(); ++$i) { + try { + if (!$transport->isStarted()) { + $transport->start(); + } + + if ($sent = $transport->send($message, $failedRecipients)) { + $this->_lastUsedTransport = $transport; + + return $sent; + } + } catch (Swift_TransportException $e) { + $this->_killCurrentTransport(); + } + } + + if (count($this->_transports) == 0) { + throw new Swift_TransportException( + 'All Transports in FailoverTransport failed, or no Transports available' + ); + } + + return $sent; + } + + protected function _getNextTransport() + { + if (!isset($this->_currentTransport)) { + $this->_currentTransport = parent::_getNextTransport(); + } + + return $this->_currentTransport; + } + + protected function _killCurrentTransport() + { + $this->_currentTransport = null; + parent::_killCurrentTransport(); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php new file mode 100644 index 00000000000..af97adf1f8f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php @@ -0,0 +1,67 @@ +_transports = $transports; + $this->_deadTransports = array(); + } + + /** + * Get $transports to delegate to. + * + * @return Swift_Transport[] + */ + public function getTransports() + { + return array_merge($this->_transports, $this->_deadTransports); + } + + /** + * Get the Transport used in the last successful send operation. + * + * @return Swift_Transport + */ + public function getLastUsedTransport() + { + return $this->_lastUsedTransport; + } + + /** + * Test if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return count($this->_transports) > 0; + } + + /** + * Start this Transport mechanism. + */ + public function start() + { + $this->_transports = array_merge($this->_transports, $this->_deadTransports); + } + + /** + * Stop this Transport mechanism. + */ + public function stop() + { + foreach ($this->_transports as $transport) { + $transport->stop(); + } + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param Swift_Mime_Message $message + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $maxTransports = count($this->_transports); + $sent = 0; + $this->_lastUsedTransport = null; + + for ($i = 0; $i < $maxTransports + && $transport = $this->_getNextTransport(); ++$i) { + try { + if (!$transport->isStarted()) { + $transport->start(); + } + if ($sent = $transport->send($message, $failedRecipients)) { + $this->_lastUsedTransport = $transport; + break; + } + } catch (Swift_TransportException $e) { + $this->_killCurrentTransport(); + } + } + + if (count($this->_transports) == 0) { + throw new Swift_TransportException( + 'All Transports in LoadBalancedTransport failed, or no Transports available' + ); + } + + return $sent; + } + + /** + * Register a plugin. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + foreach ($this->_transports as $transport) { + $transport->registerPlugin($plugin); + } + } + + /** + * Rotates the transport list around and returns the first instance. + * + * @return Swift_Transport + */ + protected function _getNextTransport() + { + if ($next = array_shift($this->_transports)) { + $this->_transports[] = $next; + } + + return $next; + } + + /** + * Tag the currently used (top of stack) transport as dead/useless. + */ + protected function _killCurrentTransport() + { + if ($transport = array_pop($this->_transports)) { + try { + $transport->stop(); + } catch (Exception $e) { + } + $this->_deadTransports[] = $transport; + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php new file mode 100644 index 00000000000..77489cedc68 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php @@ -0,0 +1,32 @@ +_invoker = $invoker; + $this->_eventDispatcher = $eventDispatcher; + } + + /** + * Not used. + */ + public function isStarted() + { + return false; + } + + /** + * Not used. + */ + public function start() + { + } + + /** + * Not used. + */ + public function stop() + { + } + + /** + * Set the additional parameters used on the mail() function. + * + * This string is formatted for sprintf() where %s is the sender address. + * + * @param string $params + * + * @return Swift_Transport_MailTransport + */ + public function setExtraParams($params) + { + $this->_extraParams = $params; + + return $this; + } + + /** + * Get the additional parameters used on the mail() function. + * + * This string is formatted for sprintf() where %s is the sender address. + * + * @return string + */ + public function getExtraParams() + { + return $this->_extraParams; + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param Swift_Mime_Message $message + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; + + if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } + + $count = ( + count((array) $message->getTo()) + + count((array) $message->getCc()) + + count((array) $message->getBcc()) + ); + + $toHeader = $message->getHeaders()->get('To'); + $subjectHeader = $message->getHeaders()->get('Subject'); + + if (!$toHeader) { + $this->_throwException(new Swift_TransportException('Cannot send message without a recipient')); + } + $to = $toHeader->getFieldBody(); + $subject = $subjectHeader ? $subjectHeader->getFieldBody() : ''; + + $reversePath = $this->_getReversePath($message); + + // Remove headers that would otherwise be duplicated + $message->getHeaders()->remove('To'); + $message->getHeaders()->remove('Subject'); + + $messageStr = $message->toString(); + + $message->getHeaders()->set($toHeader); + $message->getHeaders()->set($subjectHeader); + + // Separate headers from body + if (false !== $endHeaders = strpos($messageStr, "\r\n\r\n")) { + $headers = substr($messageStr, 0, $endHeaders)."\r\n"; //Keep last EOL + $body = substr($messageStr, $endHeaders + 4); + } else { + $headers = $messageStr."\r\n"; + $body = ''; + } + + unset($messageStr); + + if ("\r\n" != PHP_EOL) { + // Non-windows (not using SMTP) + $headers = str_replace("\r\n", PHP_EOL, $headers); + $subject = str_replace("\r\n", PHP_EOL, $subject); + $body = str_replace("\r\n", PHP_EOL, $body); + } else { + // Windows, using SMTP + $headers = str_replace("\r\n.", "\r\n..", $headers); + $subject = str_replace("\r\n.", "\r\n..", $subject); + $body = str_replace("\r\n.", "\r\n..", $body); + } + + if ($this->_invoker->mail($to, $subject, $body, $headers, + sprintf($this->_extraParams, escapeshellarg($reversePath)))) { + if ($evt) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $evt->setFailedRecipients($failedRecipients); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + } else { + $failedRecipients = array_merge( + $failedRecipients, + array_keys((array) $message->getTo()), + array_keys((array) $message->getCc()), + array_keys((array) $message->getBcc()) + ); + + if ($evt) { + $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); + $evt->setFailedRecipients($failedRecipients); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $message->generateId(); + + $count = 0; + } + + return $count; + } + + /** + * Register a plugin. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->_eventDispatcher->bindEventListener($plugin); + } + + /** Throw a TransportException, first sending it to any listeners */ + protected function _throwException(Swift_TransportException $e) + { + if ($evt = $this->_eventDispatcher->createTransportExceptionEvent($this, $e)) { + $this->_eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); + if (!$evt->bubbleCancelled()) { + throw $e; + } + } else { + throw $e; + } + } + + /** Determine the best-use reverse path for this message */ + private function _getReversePath(Swift_Mime_Message $message) + { + $return = $message->getReturnPath(); + $sender = $message->getSender(); + $from = $message->getFrom(); + $path = null; + if (!empty($return)) { + $path = $return; + } elseif (!empty($sender)) { + $keys = array_keys($sender); + $path = array_shift($keys); + } elseif (!empty($from)) { + $keys = array_keys($from); + $path = array_shift($keys); + } + + return $path; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php new file mode 100644 index 00000000000..ad20e0e535f --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/NullTransport.php @@ -0,0 +1,93 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Pretends messages have been sent, but just ignores them. + * + * @author Fabien Potencier + */ +class Swift_Transport_NullTransport implements Swift_Transport +{ + /** The event dispatcher from the plugin API */ + private $_eventDispatcher; + + /** + * Constructor. + */ + public function __construct(Swift_Events_EventDispatcher $eventDispatcher) + { + $this->_eventDispatcher = $eventDispatcher; + } + + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } + + /** + * Starts this Transport mechanism. + */ + public function start() + { + } + + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } + + /** + * Sends the given message. + * + * @param Swift_Mime_Message $message + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent emails + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } + + if ($evt) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $count = ( + count((array) $message->getTo()) + + count((array) $message->getCc()) + + count((array) $message->getBcc()) + ); + + return $count; + } + + /** + * Register a plugin. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->_eventDispatcher->bindEventListener($plugin); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php new file mode 100644 index 00000000000..34ac4ce3af8 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php @@ -0,0 +1,160 @@ + 30, + 'blocking' => 1, + 'command' => '/usr/sbin/sendmail -bs', + 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, + ); + + /** + * Create a new SendmailTransport with $buf for I/O. + * + * @param Swift_Transport_IoBuffer $buf + * @param Swift_Events_EventDispatcher $dispatcher + */ + public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher) + { + parent::__construct($buf, $dispatcher); + } + + /** + * Start the standalone SMTP session if running in -bs mode. + */ + public function start() + { + if (false !== strpos($this->getCommand(), ' -bs')) { + parent::start(); + } + } + + /** + * Set the command to invoke. + * + * If using -t mode you are strongly advised to include -oi or -i in the flags. + * For example: /usr/sbin/sendmail -oi -t + * Swift will append a -f flag if one is not present. + * + * The recommended mode is "-bs" since it is interactive and failure notifications + * are hence possible. + * + * @param string $command + * + * @return Swift_Transport_SendmailTransport + */ + public function setCommand($command) + { + $this->_params['command'] = $command; + + return $this; + } + + /** + * Get the sendmail command which will be invoked. + * + * @return string + */ + public function getCommand() + { + return $this->_params['command']; + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retrieved from the Message API. + * + * The return value is the number of recipients who were accepted for delivery. + * NOTE: If using 'sendmail -t' you will not be aware of any failures until + * they bounce (i.e. send() will always return 100% success). + * + * @param Swift_Mime_Message $message + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; + $command = $this->getCommand(); + $buffer = $this->getBuffer(); + $count = 0; + + if (false !== strpos($command, ' -t')) { + if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } + + if (false === strpos($command, ' -f')) { + $command .= ' -f'.escapeshellarg($this->_getReversePath($message)); + } + + $buffer->initialize(array_merge($this->_params, array('command' => $command))); + + if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) { + $buffer->setWriteTranslations(array("\r\n" => "\n", "\n." => "\n..")); + } else { + $buffer->setWriteTranslations(array("\r\n" => "\n")); + } + + $count = count((array) $message->getTo()) + + count((array) $message->getCc()) + + count((array) $message->getBcc()) + ; + $message->toByteStream($buffer); + $buffer->flushBuffers(); + $buffer->setWriteTranslations(array()); + $buffer->terminate(); + + if ($evt) { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $evt->setFailedRecipients($failedRecipients); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $message->generateId(); + } elseif (false !== strpos($command, ' -bs')) { + $count = parent::send($message, $failedRecipients); + } else { + $this->_throwException(new Swift_TransportException( + 'Unsupported sendmail command flags ['.$command.']. '. + 'Must be one of "-bs" or "-t" but can include additional flags.' + )); + } + + return $count; + } + + /** Get the params to initialize the buffer */ + protected function _getBufferParams() + { + return $this->_params; + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php new file mode 100644 index 00000000000..4cab66bd6bf --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/** + * Stores Messages in a queue. + * + * @author Fabien Potencier + */ +class Swift_Transport_SpoolTransport implements Swift_Transport +{ + /** The spool instance */ + private $_spool; + + /** The event dispatcher from the plugin API */ + private $_eventDispatcher; + + /** + * Constructor. + */ + public function __construct(Swift_Events_EventDispatcher $eventDispatcher, Swift_Spool $spool = null) + { + $this->_eventDispatcher = $eventDispatcher; + $this->_spool = $spool; + } + + /** + * Sets the spool object. + * + * @param Swift_Spool $spool + * + * @return Swift_Transport_SpoolTransport + */ + public function setSpool(Swift_Spool $spool) + { + $this->_spool = $spool; + + return $this; + } + + /** + * Get the spool object. + * + * @return Swift_Spool + */ + public function getSpool() + { + return $this->_spool; + } + + /** + * Tests if this Transport mechanism has started. + * + * @return bool + */ + public function isStarted() + { + return true; + } + + /** + * Starts this Transport mechanism. + */ + public function start() + { + } + + /** + * Stops this Transport mechanism. + */ + public function stop() + { + } + + /** + * Sends the given message. + * + * @param Swift_Mime_Message $message + * @param string[] $failedRecipients An array of failures by-reference + * + * @return int The number of sent e-mail's + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) { + return 0; + } + } + + $success = $this->_spool->queueMessage($message); + + if ($evt) { + $evt->setResult($success ? Swift_Events_SendEvent::RESULT_SPOOLED : Swift_Events_SendEvent::RESULT_FAILED); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + return 1; + } + + /** + * Register a plugin. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->_eventDispatcher->bindEventListener($plugin); + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php new file mode 100644 index 00000000000..5134ea48a45 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php @@ -0,0 +1,325 @@ +_replacementFactory = $replacementFactory; + } + + /** + * Perform any initialization needed, using the given $params. + * + * Parameters will vary depending upon the type of IoBuffer used. + * + * @param array $params + */ + public function initialize(array $params) + { + $this->_params = $params; + switch ($params['type']) { + case self::TYPE_PROCESS: + $this->_establishProcessConnection(); + break; + case self::TYPE_SOCKET: + default: + $this->_establishSocketConnection(); + break; + } + } + + /** + * Set an individual param on the buffer (e.g. switching to SSL). + * + * @param string $param + * @param mixed $value + */ + public function setParam($param, $value) + { + if (isset($this->_stream)) { + switch ($param) { + case 'timeout': + if ($this->_stream) { + stream_set_timeout($this->_stream, $value); + } + break; + + case 'blocking': + if ($this->_stream) { + stream_set_blocking($this->_stream, 1); + } + + } + } + $this->_params[$param] = $value; + } + + public function startTLS() + { + return stream_socket_enable_crypto($this->_stream, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); + } + + /** + * Perform any shutdown logic needed. + */ + public function terminate() + { + if (isset($this->_stream)) { + switch ($this->_params['type']) { + case self::TYPE_PROCESS: + fclose($this->_in); + fclose($this->_out); + proc_close($this->_stream); + break; + case self::TYPE_SOCKET: + default: + fclose($this->_stream); + break; + } + } + $this->_stream = null; + $this->_out = null; + $this->_in = null; + } + + /** + * Set an array of string replacements which should be made on data written + * to the buffer. + * + * This could replace LF with CRLF for example. + * + * @param string[] $replacements + */ + public function setWriteTranslations(array $replacements) + { + foreach ($this->_translations as $search => $replace) { + if (!isset($replacements[$search])) { + $this->removeFilter($search); + unset($this->_translations[$search]); + } + } + + foreach ($replacements as $search => $replace) { + if (!isset($this->_translations[$search])) { + $this->addFilter( + $this->_replacementFactory->createFilter($search, $replace), $search + ); + $this->_translations[$search] = true; + } + } + } + + /** + * Get a line of output (including any CRLF). + * + * The $sequence number comes from any writes and may or may not be used + * depending upon the implementation. + * + * @param int $sequence of last write to scan from + * + * @throws Swift_IoException + * + * @return string + */ + public function readLine($sequence) + { + if (isset($this->_out) && !feof($this->_out)) { + $line = fgets($this->_out); + if (strlen($line) == 0) { + $metas = stream_get_meta_data($this->_out); + if ($metas['timed_out']) { + throw new Swift_IoException( + 'Connection to '. + $this->_getReadConnectionDescription(). + ' Timed Out' + ); + } + } + + return $line; + } + } + + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. + * + * If less bytes exist than are requested the remaining bytes are given instead. + * If no bytes are remaining at all, boolean false is returned. + * + * @param int $length + * + * @throws Swift_IoException + * + * @return string|bool + */ + public function read($length) + { + if (isset($this->_out) && !feof($this->_out)) { + $ret = fread($this->_out, $length); + if (strlen($ret) == 0) { + $metas = stream_get_meta_data($this->_out); + if ($metas['timed_out']) { + throw new Swift_IoException( + 'Connection to '. + $this->_getReadConnectionDescription(). + ' Timed Out' + ); + } + } + + return $ret; + } + } + + /** Not implemented */ + public function setReadPointer($byteOffset) + { + } + + /** Flush the stream contents */ + protected function _flush() + { + if (isset($this->_in)) { + fflush($this->_in); + } + } + + /** Write this bytes to the stream */ + protected function _commit($bytes) + { + if (isset($this->_in)) { + $bytesToWrite = strlen($bytes); + $totalBytesWritten = 0; + + while ($totalBytesWritten < $bytesToWrite) { + $bytesWritten = fwrite($this->_in, substr($bytes, $totalBytesWritten)); + if (false === $bytesWritten || 0 === $bytesWritten) { + break; + } + + $totalBytesWritten += $bytesWritten; + } + + if ($totalBytesWritten > 0) { + return ++$this->_sequence; + } + } + } + + /** + * Establishes a connection to a remote server. + */ + private function _establishSocketConnection() + { + $host = $this->_params['host']; + if (!empty($this->_params['protocol'])) { + $host = $this->_params['protocol'].'://'.$host; + } + $timeout = 15; + if (!empty($this->_params['timeout'])) { + $timeout = $this->_params['timeout']; + } + $options = array(); + if (!empty($this->_params['sourceIp'])) { + $options['socket']['bindto'] = $this->_params['sourceIp'].':0'; + } + if (isset($this->_params['stream_context_options'])) { + $options = array_merge($options, $this->_params['stream_context_options']); + } + $streamContext = stream_context_create($options); + $this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); + if (false === $this->_stream) { + throw new Swift_TransportException( + 'Connection could not be established with host '.$this->_params['host']. + ' ['.$errstr.' #'.$errno.']' + ); + } + if (!empty($this->_params['blocking'])) { + stream_set_blocking($this->_stream, 1); + } else { + stream_set_blocking($this->_stream, 0); + } + stream_set_timeout($this->_stream, $timeout); + $this->_in = &$this->_stream; + $this->_out = &$this->_stream; + } + + /** + * Opens a process for input/output. + */ + private function _establishProcessConnection() + { + $command = $this->_params['command']; + $descriptorSpec = array( + 0 => array('pipe', 'r'), + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w'), + ); + $this->_stream = proc_open($command, $descriptorSpec, $pipes); + stream_set_blocking($pipes[2], 0); + if ($err = stream_get_contents($pipes[2])) { + throw new Swift_TransportException( + 'Process could not be started ['.$err.']' + ); + } + $this->_in = &$pipes[0]; + $this->_out = &$pipes[1]; + } + + private function _getReadConnectionDescription() + { + switch ($this->_params['type']) { + case self::TYPE_PROCESS: + return 'Process '.$this->_params['command']; + break; + + case self::TYPE_SOCKET: + default: + $host = $this->_params['host']; + if (!empty($this->_params['protocol'])) { + $host = $this->_params['protocol'].'://'.$host; + } + $host .= ':'.$this->_params['port']; + + return $host; + break; + } + } +} diff --git a/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php b/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php new file mode 100644 index 00000000000..4ae2412e62a --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/classes/Swift/TransportException.php @@ -0,0 +1,29 @@ + + */ +class Swift_Validate +{ + /** + * Grammar Object. + * + * @var Swift_Mime_Grammar + */ + private static $grammar = null; + + /** + * Checks if an e-mail address matches the current grammars. + * + * @param string $email + * + * @return bool + */ + public static function email($email) + { + if (self::$grammar === null) { + self::$grammar = Swift_DependencyContainer::getInstance() + ->lookup('mime.grammar'); + } + + return (bool) preg_match( + '/^'.self::$grammar->getDefinition('addr-spec').'$/D', + $email + ); + } +} diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php new file mode 100644 index 00000000000..6023448e85e --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/cache_deps.php @@ -0,0 +1,23 @@ +register('cache') + ->asAliasOf('cache.array') + + ->register('tempdir') + ->asValue('/tmp') + + ->register('cache.null') + ->asSharedInstanceOf('Swift_KeyCache_NullKeyCache') + + ->register('cache.array') + ->asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') + ->withDependencies(array('cache.inputstream')) + + ->register('cache.disk') + ->asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') + ->withDependencies(array('cache.inputstream', 'tempdir')) + + ->register('cache.inputstream') + ->asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream') +; diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/message_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/message_deps.php new file mode 100644 index 00000000000..64d69d21591 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/message_deps.php @@ -0,0 +1,9 @@ +register('message.message') + ->asNewInstanceOf('Swift_Message') + + ->register('message.mimepart') + ->asNewInstanceOf('Swift_MimePart') +; diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php new file mode 100644 index 00000000000..04f394b3267 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/mime_deps.php @@ -0,0 +1,123 @@ +register('properties.charset') + ->asValue('utf-8') + + ->register('mime.grammar') + ->asSharedInstanceOf('Swift_Mime_Grammar') + + ->register('mime.message') + ->asNewInstanceOf('Swift_Mime_SimpleMessage') + ->withDependencies(array( + 'mime.headerset', + 'mime.qpcontentencoder', + 'cache', + 'mime.grammar', + 'properties.charset', + )) + + ->register('mime.part') + ->asNewInstanceOf('Swift_Mime_MimePart') + ->withDependencies(array( + 'mime.headerset', + 'mime.qpcontentencoder', + 'cache', + 'mime.grammar', + 'properties.charset', + )) + + ->register('mime.attachment') + ->asNewInstanceOf('Swift_Mime_Attachment') + ->withDependencies(array( + 'mime.headerset', + 'mime.base64contentencoder', + 'cache', + 'mime.grammar', + )) + ->addConstructorValue($swift_mime_types) + + ->register('mime.embeddedfile') + ->asNewInstanceOf('Swift_Mime_EmbeddedFile') + ->withDependencies(array( + 'mime.headerset', + 'mime.base64contentencoder', + 'cache', + 'mime.grammar', + )) + ->addConstructorValue($swift_mime_types) + + ->register('mime.headerfactory') + ->asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') + ->withDependencies(array( + 'mime.qpheaderencoder', + 'mime.rfc2231encoder', + 'mime.grammar', + 'properties.charset', + )) + + ->register('mime.headerset') + ->asNewInstanceOf('Swift_Mime_SimpleHeaderSet') + ->withDependencies(array('mime.headerfactory', 'properties.charset')) + + ->register('mime.qpheaderencoder') + ->asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') + ->withDependencies(array('mime.charstream')) + + ->register('mime.base64headerencoder') + ->asNewInstanceOf('Swift_Mime_HeaderEncoder_Base64HeaderEncoder') + ->withDependencies(array('mime.charstream')) + + ->register('mime.charstream') + ->asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') + ->withDependencies(array('mime.characterreaderfactory', 'properties.charset')) + + ->register('mime.bytecanonicalizer') + ->asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') + ->addConstructorValue(array(array(0x0D, 0x0A), array(0x0D), array(0x0A))) + ->addConstructorValue(array(array(0x0A), array(0x0A), array(0x0D, 0x0A))) + + ->register('mime.characterreaderfactory') + ->asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') + + ->register('mime.safeqpcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') + ->withDependencies(array('mime.charstream', 'mime.bytecanonicalizer')) + + ->register('mime.rawcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_RawContentEncoder') + + ->register('mime.nativeqpcontentencoder') + ->withDependencies(array('properties.charset')) + ->asNewInstanceOf('Swift_Mime_ContentEncoder_NativeQpContentEncoder') + + ->register('mime.qpcontentencoderproxy') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoderProxy') + ->withDependencies(array('mime.safeqpcontentencoder', 'mime.nativeqpcontentencoder', 'properties.charset')) + + ->register('mime.7bitcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') + ->addConstructorValue('7bit') + ->addConstructorValue(true) + + ->register('mime.8bitcontentencoder') + ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') + ->addConstructorValue('8bit') + ->addConstructorValue(true) + + ->register('mime.base64contentencoder') + ->asSharedInstanceOf('Swift_Mime_ContentEncoder_Base64ContentEncoder') + + ->register('mime.rfc2231encoder') + ->asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') + ->withDependencies(array('mime.charstream')) + + // As of PHP 5.4.7, the quoted_printable_encode() function behaves correctly. + // see https://github.com/php/php-src/commit/18bb426587d62f93c54c40bf8535eb8416603629 + ->register('mime.qpcontentencoder') + ->asAliasOf(version_compare(phpversion(), '5.4.7', '>=') ? 'mime.qpcontentencoderproxy' : 'mime.safeqpcontentencoder') +; + +unset($swift_mime_types); diff --git a/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php b/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php new file mode 100644 index 00000000000..77e432cfac0 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/dependency_maps/transport_deps.php @@ -0,0 +1,76 @@ +register('transport.smtp') + ->asNewInstanceOf('Swift_Transport_EsmtpTransport') + ->withDependencies(array( + 'transport.buffer', + array('transport.authhandler'), + 'transport.eventdispatcher', + )) + + ->register('transport.sendmail') + ->asNewInstanceOf('Swift_Transport_SendmailTransport') + ->withDependencies(array( + 'transport.buffer', + 'transport.eventdispatcher', + )) + + ->register('transport.mail') + ->asNewInstanceOf('Swift_Transport_MailTransport') + ->withDependencies(array('transport.mailinvoker', 'transport.eventdispatcher')) + + ->register('transport.loadbalanced') + ->asNewInstanceOf('Swift_Transport_LoadBalancedTransport') + + ->register('transport.failover') + ->asNewInstanceOf('Swift_Transport_FailoverTransport') + + ->register('transport.spool') + ->asNewInstanceOf('Swift_Transport_SpoolTransport') + ->withDependencies(array('transport.eventdispatcher')) + + ->register('transport.null') + ->asNewInstanceOf('Swift_Transport_NullTransport') + ->withDependencies(array('transport.eventdispatcher')) + + ->register('transport.mailinvoker') + ->asSharedInstanceOf('Swift_Transport_SimpleMailInvoker') + + ->register('transport.buffer') + ->asNewInstanceOf('Swift_Transport_StreamBuffer') + ->withDependencies(array('transport.replacementfactory')) + + ->register('transport.authhandler') + ->asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') + ->withDependencies(array( + array( + 'transport.crammd5auth', + 'transport.loginauth', + 'transport.plainauth', + 'transport.ntlmauth', + 'transport.xoauth2auth', + ), + )) + + ->register('transport.crammd5auth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') + + ->register('transport.loginauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_LoginAuthenticator') + + ->register('transport.plainauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_PlainAuthenticator') + + ->register('transport.xoauth2auth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_XOAuth2Authenticator') + + ->register('transport.ntlmauth') + ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_NTLMAuthenticator') + + ->register('transport.eventdispatcher') + ->asNewInstanceOf('Swift_Events_SimpleEventDispatcher') + + ->register('transport.replacementfactory') + ->asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') +; diff --git a/htdocs/includes/swiftmailer/lib/mime_types.php b/htdocs/includes/swiftmailer/lib/mime_types.php new file mode 100644 index 00000000000..2d7b98dc1aa --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/mime_types.php @@ -0,0 +1,1007 @@ + 'text/vnd.in3d.3dml', + '3ds' => 'image/x-3ds', + '3g2' => 'video/3gpp2', + '3gp' => 'video/3gpp', + '7z' => 'application/x-7z-compressed', + 'aab' => 'application/x-authorware-bin', + 'aac' => 'audio/x-aac', + 'aam' => 'application/x-authorware-map', + 'aas' => 'application/x-authorware-seg', + 'abw' => 'application/x-abiword', + 'ac' => 'application/pkix-attr-cert', + 'acc' => 'application/vnd.americandynamics.acc', + 'ace' => 'application/x-ace-compressed', + 'acu' => 'application/vnd.acucobol', + 'acutc' => 'application/vnd.acucorp', + 'adp' => 'audio/adpcm', + 'aep' => 'application/vnd.audiograph', + 'afm' => 'application/x-font-type1', + 'afp' => 'application/vnd.ibm.modcap', + 'ahead' => 'application/vnd.ahead.space', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'air' => 'application/vnd.adobe.air-application-installer-package+zip', + 'ait' => 'application/vnd.dvb.ait', + 'ami' => 'application/vnd.amiga.ami', + 'apk' => 'application/vnd.android.package-archive', + 'appcache' => 'text/cache-manifest', + 'apr' => 'application/vnd.lotus-approach', + 'aps' => 'application/postscript', + 'arc' => 'application/x-freearc', + 'asc' => 'application/pgp-signature', + 'asf' => 'video/x-ms-asf', + 'asm' => 'text/x-asm', + 'aso' => 'application/vnd.accpac.simply.aso', + 'asx' => 'video/x-ms-asf', + 'atc' => 'application/vnd.acucorp', + 'atom' => 'application/atom+xml', + 'atomcat' => 'application/atomcat+xml', + 'atomsvc' => 'application/atomsvc+xml', + 'atx' => 'application/vnd.antix.game-component', + 'au' => 'audio/basic', + 'avi' => 'video/x-msvideo', + 'aw' => 'application/applixware', + 'azf' => 'application/vnd.airzip.filesecure.azf', + 'azs' => 'application/vnd.airzip.filesecure.azs', + 'azw' => 'application/vnd.amazon.ebook', + 'bat' => 'application/x-msdownload', + 'bcpio' => 'application/x-bcpio', + 'bdf' => 'application/x-font-bdf', + 'bdm' => 'application/vnd.syncml.dm+wbxml', + 'bed' => 'application/vnd.realvnc.bed', + 'bh2' => 'application/vnd.fujitsu.oasysprs', + 'bin' => 'application/octet-stream', + 'blb' => 'application/x-blorb', + 'blorb' => 'application/x-blorb', + 'bmi' => 'application/vnd.bmi', + 'bmp' => 'image/bmp', + 'book' => 'application/vnd.framemaker', + 'box' => 'application/vnd.previewsystems.box', + 'boz' => 'application/x-bzip2', + 'bpk' => 'application/octet-stream', + 'btif' => 'image/prs.btif', + 'bz' => 'application/x-bzip', + 'bz2' => 'application/x-bzip2', + 'c' => 'text/x-c', + 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', + 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', + 'c4d' => 'application/vnd.clonk.c4group', + 'c4f' => 'application/vnd.clonk.c4group', + 'c4g' => 'application/vnd.clonk.c4group', + 'c4p' => 'application/vnd.clonk.c4group', + 'c4u' => 'application/vnd.clonk.c4group', + 'cab' => 'application/vnd.ms-cab-compressed', + 'caf' => 'audio/x-caf', + 'cap' => 'application/vnd.tcpdump.pcap', + 'car' => 'application/vnd.curl.car', + 'cat' => 'application/vnd.ms-pki.seccat', + 'cb7' => 'application/x-cbr', + 'cba' => 'application/x-cbr', + 'cbr' => 'application/x-cbr', + 'cbt' => 'application/x-cbr', + 'cbz' => 'application/x-cbr', + 'cc' => 'text/x-c', + 'cct' => 'application/x-director', + 'ccxml' => 'application/ccxml+xml', + 'cdbcmsg' => 'application/vnd.contact.cmsg', + 'cdf' => 'application/x-netcdf', + 'cdkey' => 'application/vnd.mediastation.cdkey', + 'cdmia' => 'application/cdmi-capability', + 'cdmic' => 'application/cdmi-container', + 'cdmid' => 'application/cdmi-domain', + 'cdmio' => 'application/cdmi-object', + 'cdmiq' => 'application/cdmi-queue', + 'cdx' => 'chemical/x-cdx', + 'cdxml' => 'application/vnd.chemdraw+xml', + 'cdy' => 'application/vnd.cinderella', + 'cer' => 'application/pkix-cert', + 'cfs' => 'application/x-cfs-compressed', + 'cgm' => 'image/cgm', + 'chat' => 'application/x-chat', + 'chm' => 'application/vnd.ms-htmlhelp', + 'chrt' => 'application/vnd.kde.kchart', + 'cif' => 'chemical/x-cif', + 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', + 'cil' => 'application/vnd.ms-artgalry', + 'cla' => 'application/vnd.claymore', + 'class' => 'application/java-vm', + 'clkk' => 'application/vnd.crick.clicker.keyboard', + 'clkp' => 'application/vnd.crick.clicker.palette', + 'clkt' => 'application/vnd.crick.clicker.template', + 'clkw' => 'application/vnd.crick.clicker.wordbank', + 'clkx' => 'application/vnd.crick.clicker', + 'clp' => 'application/x-msclip', + 'cmc' => 'application/vnd.cosmocaller', + 'cmdf' => 'chemical/x-cmdf', + 'cml' => 'chemical/x-cml', + 'cmp' => 'application/vnd.yellowriver-custom-menu', + 'cmx' => 'image/x-cmx', + 'cod' => 'application/vnd.rim.cod', + 'com' => 'application/x-msdownload', + 'conf' => 'text/plain', + 'cpio' => 'application/x-cpio', + 'cpp' => 'text/x-c', + 'cpt' => 'application/mac-compactpro', + 'crd' => 'application/x-mscardfile', + 'crl' => 'application/pkix-crl', + 'crt' => 'application/x-x509-ca-cert', + 'csh' => 'application/x-csh', + 'csml' => 'chemical/x-csml', + 'csp' => 'application/vnd.commonspace', + 'css' => 'text/css', + 'cst' => 'application/x-director', + 'csv' => 'text/csv', + 'cu' => 'application/cu-seeme', + 'curl' => 'text/vnd.curl', + 'cww' => 'application/prs.cww', + 'cxt' => 'application/x-director', + 'cxx' => 'text/x-c', + 'dae' => 'model/vnd.collada+xml', + 'daf' => 'application/vnd.mobius.daf', + 'dart' => 'application/vnd.dart', + 'dataless' => 'application/vnd.fdsn.seed', + 'davmount' => 'application/davmount+xml', + 'dbk' => 'application/docbook+xml', + 'dcr' => 'application/x-director', + 'dcurl' => 'text/vnd.curl.dcurl', + 'dd2' => 'application/vnd.oma.dd2+xml', + 'ddd' => 'application/vnd.fujixerox.ddd', + 'deb' => 'application/x-debian-package', + 'def' => 'text/plain', + 'deploy' => 'application/octet-stream', + 'der' => 'application/x-x509-ca-cert', + 'dfac' => 'application/vnd.dreamfactory', + 'dgc' => 'application/x-dgc-compressed', + 'dic' => 'text/x-c', + 'dir' => 'application/x-director', + 'dis' => 'application/vnd.mobius.dis', + 'dist' => 'application/octet-stream', + 'distz' => 'application/octet-stream', + 'djv' => 'image/vnd.djvu', + 'djvu' => 'image/vnd.djvu', + 'dll' => 'application/x-msdownload', + 'dmg' => 'application/x-apple-diskimage', + 'dmp' => 'application/vnd.tcpdump.pcap', + 'dms' => 'application/octet-stream', + 'dna' => 'application/vnd.dna', + 'doc' => 'application/msword', + 'docm' => 'application/vnd.ms-word.document.macroenabled.12', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dot' => 'application/msword', + 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'dp' => 'application/vnd.osgi.dp', + 'dpg' => 'application/vnd.dpgraph', + 'dra' => 'audio/vnd.dra', + 'dsc' => 'text/prs.lines.tag', + 'dssc' => 'application/dssc+der', + 'dtb' => 'application/x-dtbook+xml', + 'dtd' => 'application/xml-dtd', + 'dts' => 'audio/vnd.dts', + 'dtshd' => 'audio/vnd.dts.hd', + 'dump' => 'application/octet-stream', + 'dvb' => 'video/vnd.dvb.file', + 'dvi' => 'application/x-dvi', + 'dwf' => 'model/vnd.dwf', + 'dwg' => 'image/vnd.dwg', + 'dxf' => 'image/vnd.dxf', + 'dxp' => 'application/vnd.spotfire.dxp', + 'dxr' => 'application/x-director', + 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', + 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', + 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', + 'ecma' => 'application/ecmascript', + 'edm' => 'application/vnd.novadigm.edm', + 'edx' => 'application/vnd.novadigm.edx', + 'efif' => 'application/vnd.picsel', + 'ei6' => 'application/vnd.pg.osasli', + 'elc' => 'application/octet-stream', + 'emf' => 'application/x-msmetafile', + 'eml' => 'message/rfc822', + 'emma' => 'application/emma+xml', + 'emz' => 'application/x-msmetafile', + 'eol' => 'audio/vnd.digital-winds', + 'eot' => 'application/vnd.ms-fontobject', + 'eps' => 'application/postscript', + 'epub' => 'application/epub+zip', + 'es3' => 'application/vnd.eszigno3+xml', + 'esa' => 'application/vnd.osgi.subsystem', + 'esf' => 'application/vnd.epson.esf', + 'et3' => 'application/vnd.eszigno3+xml', + 'etx' => 'text/x-setext', + 'eva' => 'application/x-eva', + 'evy' => 'application/x-envoy', + 'exe' => 'application/x-msdownload', + 'exi' => 'application/exi', + 'ext' => 'application/vnd.novadigm.ext', + 'ez' => 'application/andrew-inset', + 'ez2' => 'application/vnd.ezpix-album', + 'ez3' => 'application/vnd.ezpix-package', + 'f' => 'text/x-fortran', + 'f4v' => 'video/x-f4v', + 'f77' => 'text/x-fortran', + 'f90' => 'text/x-fortran', + 'fbs' => 'image/vnd.fastbidsheet', + 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', + 'fcs' => 'application/vnd.isac.fcs', + 'fdf' => 'application/vnd.fdf', + 'fe_launch' => 'application/vnd.denovo.fcselayout-link', + 'fg5' => 'application/vnd.fujitsu.oasysgp', + 'fgd' => 'application/x-director', + 'fh' => 'image/x-freehand', + 'fh4' => 'image/x-freehand', + 'fh5' => 'image/x-freehand', + 'fh7' => 'image/x-freehand', + 'fhc' => 'image/x-freehand', + 'fig' => 'application/x-xfig', + 'flac' => 'audio/x-flac', + 'fli' => 'video/x-fli', + 'flo' => 'application/vnd.micrografx.flo', + 'flv' => 'video/x-flv', + 'flw' => 'application/vnd.kde.kivio', + 'flx' => 'text/vnd.fmi.flexstor', + 'fly' => 'text/vnd.fly', + 'fm' => 'application/vnd.framemaker', + 'fnc' => 'application/vnd.frogans.fnc', + 'for' => 'text/x-fortran', + 'fpx' => 'image/vnd.fpx', + 'frame' => 'application/vnd.framemaker', + 'fsc' => 'application/vnd.fsc.weblaunch', + 'fst' => 'image/vnd.fst', + 'ftc' => 'application/vnd.fluxtime.clip', + 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', + 'fvt' => 'video/vnd.fvt', + 'fxp' => 'application/vnd.adobe.fxp', + 'fxpl' => 'application/vnd.adobe.fxp', + 'fzs' => 'application/vnd.fuzzysheet', + 'g2w' => 'application/vnd.geoplan', + 'g3' => 'image/g3fax', + 'g3w' => 'application/vnd.geospace', + 'gac' => 'application/vnd.groove-account', + 'gam' => 'application/x-tads', + 'gbr' => 'application/rpki-ghostbusters', + 'gca' => 'application/x-gca-compressed', + 'gdl' => 'model/vnd.gdl', + 'geo' => 'application/vnd.dynageo', + 'gex' => 'application/vnd.geometry-explorer', + 'ggb' => 'application/vnd.geogebra.file', + 'ggt' => 'application/vnd.geogebra.tool', + 'ghf' => 'application/vnd.groove-help', + 'gif' => 'image/gif', + 'gim' => 'application/vnd.groove-identity-message', + 'gml' => 'application/gml+xml', + 'gmx' => 'application/vnd.gmx', + 'gnumeric' => 'application/x-gnumeric', + 'gph' => 'application/vnd.flographit', + 'gpx' => 'application/gpx+xml', + 'gqf' => 'application/vnd.grafeq', + 'gqs' => 'application/vnd.grafeq', + 'gram' => 'application/srgs', + 'gramps' => 'application/x-gramps-xml', + 'gre' => 'application/vnd.geometry-explorer', + 'grv' => 'application/vnd.groove-injector', + 'grxml' => 'application/srgs+xml', + 'gsf' => 'application/x-font-ghostscript', + 'gtar' => 'application/x-gtar', + 'gtm' => 'application/vnd.groove-tool-message', + 'gtw' => 'model/vnd.gtw', + 'gv' => 'text/vnd.graphviz', + 'gxf' => 'application/gxf', + 'gxt' => 'application/vnd.geonext', + 'gz' => 'application/x-gzip', + 'h' => 'text/x-c', + 'h261' => 'video/h261', + 'h263' => 'video/h263', + 'h264' => 'video/h264', + 'hal' => 'application/vnd.hal+xml', + 'hbci' => 'application/vnd.hbci', + 'hdf' => 'application/x-hdf', + 'hh' => 'text/x-c', + 'hlp' => 'application/winhlp', + 'hpgl' => 'application/vnd.hp-hpgl', + 'hpid' => 'application/vnd.hp-hpid', + 'hps' => 'application/vnd.hp-hps', + 'hqx' => 'application/mac-binhex40', + 'htke' => 'application/vnd.kenameaapp', + 'htm' => 'text/html', + 'html' => 'text/html', + 'hvd' => 'application/vnd.yamaha.hv-dic', + 'hvp' => 'application/vnd.yamaha.hv-voice', + 'hvs' => 'application/vnd.yamaha.hv-script', + 'i2g' => 'application/vnd.intergeo', + 'icc' => 'application/vnd.iccprofile', + 'ice' => 'x-conference/x-cooltalk', + 'icm' => 'application/vnd.iccprofile', + 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', + 'ief' => 'image/ief', + 'ifb' => 'text/calendar', + 'ifm' => 'application/vnd.shana.informed.formdata', + 'iges' => 'model/iges', + 'igl' => 'application/vnd.igloader', + 'igm' => 'application/vnd.insors.igm', + 'igs' => 'model/iges', + 'igx' => 'application/vnd.micrografx.igx', + 'iif' => 'application/vnd.shana.informed.interchange', + 'imp' => 'application/vnd.accpac.simply.imp', + 'ims' => 'application/vnd.ms-ims', + 'in' => 'text/plain', + 'ink' => 'application/inkml+xml', + 'inkml' => 'application/inkml+xml', + 'install' => 'application/x-install-instructions', + 'iota' => 'application/vnd.astraea-software.iota', + 'ipfix' => 'application/ipfix', + 'ipk' => 'application/vnd.shana.informed.package', + 'irm' => 'application/vnd.ibm.rights-management', + 'irp' => 'application/vnd.irepository.package+xml', + 'iso' => 'application/x-iso9660-image', + 'itp' => 'application/vnd.shana.informed.formtemplate', + 'ivp' => 'application/vnd.immervision-ivp', + 'ivu' => 'application/vnd.immervision-ivu', + 'jad' => 'text/vnd.sun.j2me.app-descriptor', + 'jam' => 'application/vnd.jam', + 'jar' => 'application/java-archive', + 'java' => 'text/x-java-source', + 'jisp' => 'application/vnd.jisp', + 'jlt' => 'application/vnd.hp-jlyt', + 'jnlp' => 'application/x-java-jnlp-file', + 'joda' => 'application/vnd.joost.joda-archive', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'jpgm' => 'video/jpm', + 'jpgv' => 'video/jpeg', + 'jpm' => 'video/jpm', + 'js' => 'application/javascript', + 'json' => 'application/json', + 'jsonml' => 'application/jsonml+json', + 'kar' => 'audio/midi', + 'karbon' => 'application/vnd.kde.karbon', + 'kfo' => 'application/vnd.kde.kformula', + 'kia' => 'application/vnd.kidspiration', + 'kml' => 'application/vnd.google-earth.kml+xml', + 'kmz' => 'application/vnd.google-earth.kmz', + 'kne' => 'application/vnd.kinar', + 'knp' => 'application/vnd.kinar', + 'kon' => 'application/vnd.kde.kontour', + 'kpr' => 'application/vnd.kde.kpresenter', + 'kpt' => 'application/vnd.kde.kpresenter', + 'kpxx' => 'application/vnd.ds-keypoint', + 'ksp' => 'application/vnd.kde.kspread', + 'ktr' => 'application/vnd.kahootz', + 'ktx' => 'image/ktx', + 'ktz' => 'application/vnd.kahootz', + 'kwd' => 'application/vnd.kde.kword', + 'kwt' => 'application/vnd.kde.kword', + 'lasxml' => 'application/vnd.las.las+xml', + 'latex' => 'application/x-latex', + 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', + 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', + 'les' => 'application/vnd.hhe.lesson-player', + 'lha' => 'application/x-lzh-compressed', + 'link66' => 'application/vnd.route66.link66+xml', + 'list' => 'text/plain', + 'list3820' => 'application/vnd.ibm.modcap', + 'listafp' => 'application/vnd.ibm.modcap', + 'lnk' => 'application/x-ms-shortcut', + 'log' => 'text/plain', + 'lostxml' => 'application/lost+xml', + 'lrf' => 'application/octet-stream', + 'lrm' => 'application/vnd.ms-lrm', + 'ltf' => 'application/vnd.frogans.ltf', + 'lvp' => 'audio/vnd.lucent.voice', + 'lwp' => 'application/vnd.lotus-wordpro', + 'lzh' => 'application/x-lzh-compressed', + 'm13' => 'application/x-msmediaview', + 'm14' => 'application/x-msmediaview', + 'm1v' => 'video/mpeg', + 'm21' => 'application/mp21', + 'm2a' => 'audio/mpeg', + 'm2v' => 'video/mpeg', + 'm3a' => 'audio/mpeg', + 'm3u' => 'audio/x-mpegurl', + 'm3u8' => 'application/vnd.apple.mpegurl', + 'm4a' => 'audio/mp4', + 'm4u' => 'video/vnd.mpegurl', + 'm4v' => 'video/x-m4v', + 'ma' => 'application/mathematica', + 'mads' => 'application/mads+xml', + 'mag' => 'application/vnd.ecowin.chart', + 'maker' => 'application/vnd.framemaker', + 'man' => 'text/troff', + 'mar' => 'application/octet-stream', + 'mathml' => 'application/mathml+xml', + 'mb' => 'application/mathematica', + 'mbk' => 'application/vnd.mobius.mbk', + 'mbox' => 'application/mbox', + 'mc1' => 'application/vnd.medcalcdata', + 'mcd' => 'application/vnd.mcd', + 'mcurl' => 'text/vnd.curl.mcurl', + 'mdb' => 'application/x-msaccess', + 'mdi' => 'image/vnd.ms-modi', + 'me' => 'text/troff', + 'mesh' => 'model/mesh', + 'meta4' => 'application/metalink4+xml', + 'metalink' => 'application/metalink+xml', + 'mets' => 'application/mets+xml', + 'mfm' => 'application/vnd.mfmp', + 'mft' => 'application/rpki-manifest', + 'mgp' => 'application/vnd.osgeo.mapguide.package', + 'mgz' => 'application/vnd.proteus.magazine', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mie' => 'application/x-mie', + 'mif' => 'application/vnd.mif', + 'mime' => 'message/rfc822', + 'mj2' => 'video/mj2', + 'mjp2' => 'video/mj2', + 'mk3d' => 'video/x-matroska', + 'mka' => 'audio/x-matroska', + 'mks' => 'video/x-matroska', + 'mkv' => 'video/x-matroska', + 'mlp' => 'application/vnd.dolby.mlp', + 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', + 'mmf' => 'application/vnd.smaf', + 'mmr' => 'image/vnd.fujixerox.edmics-mmr', + 'mng' => 'video/x-mng', + 'mny' => 'application/x-msmoney', + 'mobi' => 'application/x-mobipocket-ebook', + 'mods' => 'application/mods+xml', + 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', + 'mp2' => 'audio/mpeg', + 'mp21' => 'application/mp21', + 'mp2a' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mp4a' => 'audio/mp4', + 'mp4s' => 'application/mp4', + 'mp4v' => 'video/mp4', + 'mpc' => 'application/vnd.mophun.certificate', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpg4' => 'video/mp4', + 'mpga' => 'audio/mpeg', + 'mpkg' => 'application/vnd.apple.installer+xml', + 'mpm' => 'application/vnd.blueice.multipass', + 'mpn' => 'application/vnd.mophun.application', + 'mpp' => 'application/vnd.ms-project', + 'mpt' => 'application/vnd.ms-project', + 'mpy' => 'application/vnd.ibm.minipay', + 'mqy' => 'application/vnd.mobius.mqy', + 'mrc' => 'application/marc', + 'mrcx' => 'application/marcxml+xml', + 'ms' => 'text/troff', + 'mscml' => 'application/mediaservercontrol+xml', + 'mseed' => 'application/vnd.fdsn.mseed', + 'mseq' => 'application/vnd.mseq', + 'msf' => 'application/vnd.epson.msf', + 'msh' => 'model/mesh', + 'msi' => 'application/x-msdownload', + 'msl' => 'application/vnd.mobius.msl', + 'msty' => 'application/vnd.muvee.style', + 'mts' => 'model/vnd.mts', + 'mus' => 'application/vnd.musician', + 'musicxml' => 'application/vnd.recordare.musicxml+xml', + 'mvb' => 'application/x-msmediaview', + 'mwf' => 'application/vnd.mfer', + 'mxf' => 'application/mxf', + 'mxl' => 'application/vnd.recordare.musicxml', + 'mxml' => 'application/xv+xml', + 'mxs' => 'application/vnd.triscape.mxs', + 'mxu' => 'video/vnd.mpegurl', + 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', + 'n3' => 'text/n3', + 'nb' => 'application/mathematica', + 'nbp' => 'application/vnd.wolfram.player', + 'nc' => 'application/x-netcdf', + 'ncx' => 'application/x-dtbncx+xml', + 'nfo' => 'text/x-nfo', + 'ngdat' => 'application/vnd.nokia.n-gage.data', + 'nitf' => 'application/vnd.nitf', + 'nlu' => 'application/vnd.neurolanguage.nlu', + 'nml' => 'application/vnd.enliven', + 'nnd' => 'application/vnd.noblenet-directory', + 'nns' => 'application/vnd.noblenet-sealer', + 'nnw' => 'application/vnd.noblenet-web', + 'npx' => 'image/vnd.net-fpx', + 'nsc' => 'application/x-conference', + 'nsf' => 'application/vnd.lotus-notes', + 'ntf' => 'application/vnd.nitf', + 'nzb' => 'application/x-nzb', + 'oa2' => 'application/vnd.fujitsu.oasys2', + 'oa3' => 'application/vnd.fujitsu.oasys3', + 'oas' => 'application/vnd.fujitsu.oasys', + 'obd' => 'application/x-msbinder', + 'obj' => 'application/x-tgif', + 'oda' => 'application/oda', + 'odb' => 'application/vnd.oasis.opendocument.database', + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'odf' => 'application/vnd.oasis.opendocument.formula', + 'odft' => 'application/vnd.oasis.opendocument.formula-template', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'odi' => 'application/vnd.oasis.opendocument.image', + 'odm' => 'application/vnd.oasis.opendocument.text-master', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'ogv' => 'video/ogg', + 'ogx' => 'application/ogg', + 'omdoc' => 'application/omdoc+xml', + 'onepkg' => 'application/onenote', + 'onetmp' => 'application/onenote', + 'onetoc' => 'application/onenote', + 'onetoc2' => 'application/onenote', + 'opf' => 'application/oebps-package+xml', + 'opml' => 'text/x-opml', + 'oprc' => 'application/vnd.palm', + 'org' => 'application/vnd.lotus-organizer', + 'osf' => 'application/vnd.yamaha.openscoreformat', + 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', + 'otc' => 'application/vnd.oasis.opendocument.chart-template', + 'otf' => 'application/x-font-otf', + 'otg' => 'application/vnd.oasis.opendocument.graphics-template', + 'oth' => 'application/vnd.oasis.opendocument.text-web', + 'oti' => 'application/vnd.oasis.opendocument.image-template', + 'otp' => 'application/vnd.oasis.opendocument.presentation-template', + 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', + 'ott' => 'application/vnd.oasis.opendocument.text-template', + 'oxps' => 'application/oxps', + 'oxt' => 'application/vnd.openofficeorg.extension', + 'p' => 'text/x-pascal', + 'p10' => 'application/pkcs10', + 'p12' => 'application/x-pkcs12', + 'p7b' => 'application/x-pkcs7-certificates', + 'p7c' => 'application/pkcs7-mime', + 'p7m' => 'application/pkcs7-mime', + 'p7r' => 'application/x-pkcs7-certreqresp', + 'p7s' => 'application/pkcs7-signature', + 'p8' => 'application/pkcs8', + 'pas' => 'text/x-pascal', + 'paw' => 'application/vnd.pawaafile', + 'pbd' => 'application/vnd.powerbuilder6', + 'pbm' => 'image/x-portable-bitmap', + 'pcap' => 'application/vnd.tcpdump.pcap', + 'pcf' => 'application/x-font-pcf', + 'pcl' => 'application/vnd.hp-pcl', + 'pclxl' => 'application/vnd.hp-pclxl', + 'pct' => 'image/x-pict', + 'pcurl' => 'application/vnd.curl.pcurl', + 'pcx' => 'image/x-pcx', + 'pdb' => 'application/vnd.palm', + 'pdf' => 'application/pdf', + 'pfa' => 'application/x-font-type1', + 'pfb' => 'application/x-font-type1', + 'pfm' => 'application/x-font-type1', + 'pfr' => 'application/font-tdpfr', + 'pfx' => 'application/x-pkcs12', + 'pgm' => 'image/x-portable-graymap', + 'pgn' => 'application/x-chess-pgn', + 'pgp' => 'application/pgp-encrypted', + 'php' => 'application/x-php', + 'php3' => 'application/x-php', + 'php4' => 'application/x-php', + 'php5' => 'application/x-php', + 'pic' => 'image/x-pict', + 'pkg' => 'application/octet-stream', + 'pki' => 'application/pkixcmp', + 'pkipath' => 'application/pkix-pkipath', + 'plb' => 'application/vnd.3gpp.pic-bw-large', + 'plc' => 'application/vnd.mobius.plc', + 'plf' => 'application/vnd.pocketlearn', + 'pls' => 'application/pls+xml', + 'pml' => 'application/vnd.ctc-posml', + 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', + 'portpkg' => 'application/vnd.macports.portpkg', + 'pot' => 'application/vnd.ms-powerpoint', + 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', + 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', + 'ppd' => 'application/vnd.cups-ppd', + 'ppm' => 'image/x-portable-pixmap', + 'pps' => 'application/vnd.ms-powerpoint', + 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'pqa' => 'application/vnd.palm', + 'prc' => 'application/x-mobipocket-ebook', + 'pre' => 'application/vnd.lotus-freelance', + 'prf' => 'application/pics-rules', + 'ps' => 'application/postscript', + 'psb' => 'application/vnd.3gpp.pic-bw-small', + 'psd' => 'image/vnd.adobe.photoshop', + 'psf' => 'application/x-font-linux-psf', + 'pskcxml' => 'application/pskc+xml', + 'ptid' => 'application/vnd.pvi.ptid1', + 'pub' => 'application/x-mspublisher', + 'pvb' => 'application/vnd.3gpp.pic-bw-var', + 'pwn' => 'application/vnd.3m.post-it-notes', + 'pya' => 'audio/vnd.ms-playready.media.pya', + 'pyv' => 'video/vnd.ms-playready.media.pyv', + 'qam' => 'application/vnd.epson.quickanime', + 'qbo' => 'application/vnd.intu.qbo', + 'qfx' => 'application/vnd.intu.qfx', + 'qps' => 'application/vnd.publishare-delta-tree', + 'qt' => 'video/quicktime', + 'qwd' => 'application/vnd.quark.quarkxpress', + 'qwt' => 'application/vnd.quark.quarkxpress', + 'qxb' => 'application/vnd.quark.quarkxpress', + 'qxd' => 'application/vnd.quark.quarkxpress', + 'qxl' => 'application/vnd.quark.quarkxpress', + 'qxt' => 'application/vnd.quark.quarkxpress', + 'ra' => 'audio/x-pn-realaudio', + 'ram' => 'audio/x-pn-realaudio', + 'rar' => 'application/x-rar-compressed', + 'ras' => 'image/x-cmu-raster', + 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', + 'rdf' => 'application/rdf+xml', + 'rdz' => 'application/vnd.data-vision.rdz', + 'rep' => 'application/vnd.businessobjects', + 'res' => 'application/x-dtbresource+xml', + 'rgb' => 'image/x-rgb', + 'rif' => 'application/reginfo+xml', + 'rip' => 'audio/vnd.rip', + 'ris' => 'application/x-research-info-systems', + 'rl' => 'application/resource-lists+xml', + 'rlc' => 'image/vnd.fujixerox.edmics-rlc', + 'rld' => 'application/resource-lists-diff+xml', + 'rm' => 'application/vnd.rn-realmedia', + 'rmi' => 'audio/midi', + 'rmp' => 'audio/x-pn-realaudio-plugin', + 'rms' => 'application/vnd.jcp.javame.midlet-rms', + 'rmvb' => 'application/vnd.rn-realmedia-vbr', + 'rnc' => 'application/relax-ng-compact-syntax', + 'roa' => 'application/rpki-roa', + 'roff' => 'text/troff', + 'rp9' => 'application/vnd.cloanto.rp9', + 'rpss' => 'application/vnd.nokia.radio-presets', + 'rpst' => 'application/vnd.nokia.radio-preset', + 'rq' => 'application/sparql-query', + 'rs' => 'application/rls-services+xml', + 'rsd' => 'application/rsd+xml', + 'rss' => 'application/rss+xml', + 'rtf' => 'application/rtf', + 'rtx' => 'text/richtext', + 's' => 'text/x-asm', + 's3m' => 'audio/s3m', + 'saf' => 'application/vnd.yamaha.smaf-audio', + 'sbml' => 'application/sbml+xml', + 'sc' => 'application/vnd.ibm.secure-container', + 'scd' => 'application/x-msschedule', + 'scm' => 'application/vnd.lotus-screencam', + 'scq' => 'application/scvp-cv-request', + 'scs' => 'application/scvp-cv-response', + 'scurl' => 'text/vnd.curl.scurl', + 'sda' => 'application/vnd.stardivision.draw', + 'sdc' => 'application/vnd.stardivision.calc', + 'sdd' => 'application/vnd.stardivision.impress', + 'sdkd' => 'application/vnd.solent.sdkm+xml', + 'sdkm' => 'application/vnd.solent.sdkm+xml', + 'sdp' => 'application/sdp', + 'sdw' => 'application/vnd.stardivision.writer', + 'see' => 'application/vnd.seemail', + 'seed' => 'application/vnd.fdsn.seed', + 'sema' => 'application/vnd.sema', + 'semd' => 'application/vnd.semd', + 'semf' => 'application/vnd.semf', + 'ser' => 'application/java-serialized-object', + 'setpay' => 'application/set-payment-initiation', + 'setreg' => 'application/set-registration-initiation', + 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', + 'sfs' => 'application/vnd.spotfire.sfs', + 'sfv' => 'text/x-sfv', + 'sgi' => 'image/sgi', + 'sgl' => 'application/vnd.stardivision.writer-global', + 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', + 'sh' => 'application/x-sh', + 'shar' => 'application/x-shar', + 'shf' => 'application/shf+xml', + 'sid' => 'image/x-mrsid-image', + 'sig' => 'application/pgp-signature', + 'sil' => 'audio/silk', + 'silo' => 'model/mesh', + 'sis' => 'application/vnd.symbian.install', + 'sisx' => 'application/vnd.symbian.install', + 'sit' => 'application/x-stuffit', + 'sitx' => 'application/x-stuffitx', + 'skd' => 'application/vnd.koan', + 'skm' => 'application/vnd.koan', + 'skp' => 'application/vnd.koan', + 'skt' => 'application/vnd.koan', + 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', + 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'slt' => 'application/vnd.epson.salt', + 'sm' => 'application/vnd.stepmania.stepchart', + 'smf' => 'application/vnd.stardivision.math', + 'smi' => 'application/smil+xml', + 'smil' => 'application/smil+xml', + 'smv' => 'video/x-smv', + 'smzip' => 'application/vnd.stepmania.package', + 'snd' => 'audio/basic', + 'snf' => 'application/x-font-snf', + 'so' => 'application/octet-stream', + 'spc' => 'application/x-pkcs7-certificates', + 'spf' => 'application/vnd.yamaha.smaf-phrase', + 'spl' => 'application/x-futuresplash', + 'spot' => 'text/vnd.in3d.spot', + 'spp' => 'application/scvp-vp-response', + 'spq' => 'application/scvp-vp-request', + 'spx' => 'audio/ogg', + 'sql' => 'application/x-sql', + 'src' => 'application/x-wais-source', + 'srt' => 'application/x-subrip', + 'sru' => 'application/sru+xml', + 'srx' => 'application/sparql-results+xml', + 'ssdl' => 'application/ssdl+xml', + 'sse' => 'application/vnd.kodak-descriptor', + 'ssf' => 'application/vnd.epson.ssf', + 'ssml' => 'application/ssml+xml', + 'st' => 'application/vnd.sailingtracker.track', + 'stc' => 'application/vnd.sun.xml.calc.template', + 'std' => 'application/vnd.sun.xml.draw.template', + 'stf' => 'application/vnd.wt.stf', + 'sti' => 'application/vnd.sun.xml.impress.template', + 'stk' => 'application/hyperstudio', + 'stl' => 'application/vnd.ms-pki.stl', + 'str' => 'application/vnd.pg.format', + 'stw' => 'application/vnd.sun.xml.writer.template', + 'sub' => 'text/vnd.dvb.subtitle', + 'sus' => 'application/vnd.sus-calendar', + 'susp' => 'application/vnd.sus-calendar', + 'sv4cpio' => 'application/x-sv4cpio', + 'sv4crc' => 'application/x-sv4crc', + 'svc' => 'application/vnd.dvb.service', + 'svd' => 'application/vnd.svd', + 'svg' => 'image/svg+xml', + 'svgz' => 'image/svg+xml', + 'swa' => 'application/x-director', + 'swf' => 'application/x-shockwave-flash', + 'swi' => 'application/vnd.aristanetworks.swi', + 'sxc' => 'application/vnd.sun.xml.calc', + 'sxd' => 'application/vnd.sun.xml.draw', + 'sxg' => 'application/vnd.sun.xml.writer.global', + 'sxi' => 'application/vnd.sun.xml.impress', + 'sxm' => 'application/vnd.sun.xml.math', + 'sxw' => 'application/vnd.sun.xml.writer', + 't' => 'text/troff', + 't3' => 'application/x-t3vm-image', + 'taglet' => 'application/vnd.mynfc', + 'tao' => 'application/vnd.tao.intent-module-archive', + 'tar' => 'application/x-tar', + 'tcap' => 'application/vnd.3gpp2.tcap', + 'tcl' => 'application/x-tcl', + 'teacher' => 'application/vnd.smart.teacher', + 'tei' => 'application/tei+xml', + 'teicorpus' => 'application/tei+xml', + 'tex' => 'application/x-tex', + 'texi' => 'application/x-texinfo', + 'texinfo' => 'application/x-texinfo', + 'text' => 'text/plain', + 'tfi' => 'application/thraud+xml', + 'tfm' => 'application/x-tex-tfm', + 'tga' => 'image/x-tga', + 'thmx' => 'application/vnd.ms-officetheme', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'tmo' => 'application/vnd.tmobile-livetv', + 'torrent' => 'application/x-bittorrent', + 'tpl' => 'application/vnd.groove-tool-template', + 'tpt' => 'application/vnd.trid.tpt', + 'tr' => 'text/troff', + 'tra' => 'application/vnd.trueapp', + 'trm' => 'application/x-msterminal', + 'tsd' => 'application/timestamped-data', + 'tsv' => 'text/tab-separated-values', + 'ttc' => 'application/x-font-ttf', + 'ttf' => 'application/x-font-ttf', + 'ttl' => 'text/turtle', + 'twd' => 'application/vnd.simtech-mindmapper', + 'twds' => 'application/vnd.simtech-mindmapper', + 'txd' => 'application/vnd.genomatix.tuxedo', + 'txf' => 'application/vnd.mobius.txf', + 'txt' => 'text/plain', + 'u32' => 'application/x-authorware-bin', + 'udeb' => 'application/x-debian-package', + 'ufd' => 'application/vnd.ufdl', + 'ufdl' => 'application/vnd.ufdl', + 'ulx' => 'application/x-glulx', + 'umj' => 'application/vnd.umajin', + 'unityweb' => 'application/vnd.unity', + 'uoml' => 'application/vnd.uoml+xml', + 'uri' => 'text/uri-list', + 'uris' => 'text/uri-list', + 'urls' => 'text/uri-list', + 'ustar' => 'application/x-ustar', + 'utz' => 'application/vnd.uiq.theme', + 'uu' => 'text/x-uuencode', + 'uva' => 'audio/vnd.dece.audio', + 'uvd' => 'application/vnd.dece.data', + 'uvf' => 'application/vnd.dece.data', + 'uvg' => 'image/vnd.dece.graphic', + 'uvh' => 'video/vnd.dece.hd', + 'uvi' => 'image/vnd.dece.graphic', + 'uvm' => 'video/vnd.dece.mobile', + 'uvp' => 'video/vnd.dece.pd', + 'uvs' => 'video/vnd.dece.sd', + 'uvt' => 'application/vnd.dece.ttml+xml', + 'uvu' => 'video/vnd.uvvu.mp4', + 'uvv' => 'video/vnd.dece.video', + 'uvva' => 'audio/vnd.dece.audio', + 'uvvd' => 'application/vnd.dece.data', + 'uvvf' => 'application/vnd.dece.data', + 'uvvg' => 'image/vnd.dece.graphic', + 'uvvh' => 'video/vnd.dece.hd', + 'uvvi' => 'image/vnd.dece.graphic', + 'uvvm' => 'video/vnd.dece.mobile', + 'uvvp' => 'video/vnd.dece.pd', + 'uvvs' => 'video/vnd.dece.sd', + 'uvvt' => 'application/vnd.dece.ttml+xml', + 'uvvu' => 'video/vnd.uvvu.mp4', + 'uvvv' => 'video/vnd.dece.video', + 'uvvx' => 'application/vnd.dece.unspecified', + 'uvvz' => 'application/vnd.dece.zip', + 'uvx' => 'application/vnd.dece.unspecified', + 'uvz' => 'application/vnd.dece.zip', + 'vcard' => 'text/vcard', + 'vcd' => 'application/x-cdlink', + 'vcf' => 'text/x-vcard', + 'vcg' => 'application/vnd.groove-vcard', + 'vcs' => 'text/x-vcalendar', + 'vcx' => 'application/vnd.vcx', + 'vis' => 'application/vnd.visionary', + 'viv' => 'video/vnd.vivo', + 'vob' => 'video/x-ms-vob', + 'vor' => 'application/vnd.stardivision.writer', + 'vox' => 'application/x-authorware-bin', + 'vrml' => 'model/vrml', + 'vsd' => 'application/vnd.visio', + 'vsf' => 'application/vnd.vsf', + 'vss' => 'application/vnd.visio', + 'vst' => 'application/vnd.visio', + 'vsw' => 'application/vnd.visio', + 'vtu' => 'model/vnd.vtu', + 'vxml' => 'application/voicexml+xml', + 'w3d' => 'application/x-director', + 'wad' => 'application/x-doom', + 'wav' => 'audio/x-wav', + 'wax' => 'audio/x-ms-wax', + 'wbmp' => 'image/vnd.wap.wbmp', + 'wbs' => 'application/vnd.criticaltools.wbs+xml', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wcm' => 'application/vnd.ms-works', + 'wdb' => 'application/vnd.ms-works', + 'wdp' => 'image/vnd.ms-photo', + 'weba' => 'audio/webm', + 'webm' => 'video/webm', + 'webp' => 'image/webp', + 'wg' => 'application/vnd.pmi.widget', + 'wgt' => 'application/widget', + 'wks' => 'application/vnd.ms-works', + 'wm' => 'video/x-ms-wm', + 'wma' => 'audio/x-ms-wma', + 'wmd' => 'application/x-ms-wmd', + 'wmf' => 'application/x-msmetafile', + 'wml' => 'text/vnd.wap.wml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'wmls' => 'text/vnd.wap.wmlscript', + 'wmlsc' => 'application/vnd.wap.wmlscriptc', + 'wmv' => 'video/x-ms-wmv', + 'wmx' => 'video/x-ms-wmx', + 'wmz' => 'application/x-msmetafile', + 'woff' => 'application/font-woff', + 'wpd' => 'application/vnd.wordperfect', + 'wpl' => 'application/vnd.ms-wpl', + 'wps' => 'application/vnd.ms-works', + 'wqd' => 'application/vnd.wqd', + 'wri' => 'application/x-mswrite', + 'wrl' => 'model/vrml', + 'wsdl' => 'application/wsdl+xml', + 'wspolicy' => 'application/wspolicy+xml', + 'wtb' => 'application/vnd.webturbo', + 'wvx' => 'video/x-ms-wvx', + 'x32' => 'application/x-authorware-bin', + 'x3d' => 'model/x3d+xml', + 'x3db' => 'model/x3d+binary', + 'x3dbz' => 'model/x3d+binary', + 'x3dv' => 'model/x3d+vrml', + 'x3dvz' => 'model/x3d+vrml', + 'x3dz' => 'model/x3d+xml', + 'xaml' => 'application/xaml+xml', + 'xap' => 'application/x-silverlight-app', + 'xar' => 'application/vnd.xara', + 'xbap' => 'application/x-ms-xbap', + 'xbd' => 'application/vnd.fujixerox.docuworks.binder', + 'xbm' => 'image/x-xbitmap', + 'xdf' => 'application/xcap-diff+xml', + 'xdm' => 'application/vnd.syncml.dm+xml', + 'xdp' => 'application/vnd.adobe.xdp+xml', + 'xdssc' => 'application/dssc+xml', + 'xdw' => 'application/vnd.fujixerox.docuworks', + 'xenc' => 'application/xenc+xml', + 'xer' => 'application/patch-ops-error+xml', + 'xfdf' => 'application/vnd.adobe.xfdf', + 'xfdl' => 'application/vnd.xfdl', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'xhvml' => 'application/xv+xml', + 'xif' => 'image/vnd.xiff', + 'xla' => 'application/vnd.ms-excel', + 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', + 'xlc' => 'application/vnd.ms-excel', + 'xlf' => 'application/x-xliff+xml', + 'xlm' => 'application/vnd.ms-excel', + 'xls' => 'application/vnd.ms-excel', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xlt' => 'application/vnd.ms-excel', + 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', + 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'xlw' => 'application/vnd.ms-excel', + 'xm' => 'audio/xm', + 'xml' => 'application/xml', + 'xo' => 'application/vnd.olpc-sugar', + 'xop' => 'application/xop+xml', + 'xpi' => 'application/x-xpinstall', + 'xpl' => 'application/xproc+xml', + 'xpm' => 'image/x-xpixmap', + 'xpr' => 'application/vnd.is-xpr', + 'xps' => 'application/vnd.ms-xpsdocument', + 'xpw' => 'application/vnd.intercon.formnet', + 'xpx' => 'application/vnd.intercon.formnet', + 'xsl' => 'application/xml', + 'xslt' => 'application/xslt+xml', + 'xsm' => 'application/vnd.syncml+xml', + 'xspf' => 'application/xspf+xml', + 'xul' => 'application/vnd.mozilla.xul+xml', + 'xvm' => 'application/xv+xml', + 'xvml' => 'application/xv+xml', + 'xwd' => 'image/x-xwindowdump', + 'xyz' => 'chemical/x-xyz', + 'xz' => 'application/x-xz', + 'yang' => 'application/yang', + 'yin' => 'application/yin+xml', + 'z1' => 'application/x-zmachine', + 'z2' => 'application/x-zmachine', + 'z3' => 'application/x-zmachine', + 'z4' => 'application/x-zmachine', + 'z5' => 'application/x-zmachine', + 'z6' => 'application/x-zmachine', + 'z7' => 'application/x-zmachine', + 'z8' => 'application/x-zmachine', + 'zaz' => 'application/vnd.zzazz.deck+xml', + 'zip' => 'application/zip', + 'zir' => 'application/vnd.zul', + 'zirz' => 'application/vnd.zul', + 'zmm' => 'application/vnd.handheld-entertainment+xml', + '123' => 'application/vnd.lotus-1-2-3', +); diff --git a/htdocs/includes/swiftmailer/lib/preferences.php b/htdocs/includes/swiftmailer/lib/preferences.php new file mode 100644 index 00000000000..e5195014824 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/preferences.php @@ -0,0 +1,25 @@ +setCharset('utf-8'); + +// Without these lines the default caching mechanism is "array" but this uses a lot of memory. +// If possible, use a disk cache to enable attaching large attachments etc. +// You can override the default temporary directory by setting the TMPDIR environment variable. +if (@is_writable($tmpDir = sys_get_temp_dir())) { + $preferences->setTempDir($tmpDir)->setCacheType('disk'); +} + +// this should only be done when Swiftmailer won't use the native QP content encoder +// see mime_deps.php +if (version_compare(phpversion(), '5.4.7', '<')) { + $preferences->setQPDotEscape(false); +} diff --git a/htdocs/includes/swiftmailer/lib/swift_init.php b/htdocs/includes/swiftmailer/lib/swift_init.php new file mode 100644 index 00000000000..5c4bae4f4f1 --- /dev/null +++ b/htdocs/includes/swiftmailer/lib/swift_init.php @@ -0,0 +1,28 @@ + 'application/x-php', + 'php3' => 'application/x-php', + 'php4' => 'application/x-php', + 'php5' => 'application/x-php', + 'zip' => 'application/zip', + 'gif' => 'image/gif', + 'png' => 'image/png', + 'css' => 'text/css', + 'js' => 'text/javascript', + 'txt' => 'text/plain', + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'avi' => 'video/avi', + 'bmp' => 'image/bmp', + 'bz2' => 'application/x-bz2', + 'csv' => 'text/csv', + 'dmg' => 'application/x-apple-diskimage', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'eml' => 'message/rfc822', + 'aps' => 'application/postscript', + 'exe' => 'application/x-ms-dos-executable', + 'flv' => 'video/x-flv', + 'gz' => 'application/x-gzip', + 'hqx' => 'application/stuffit', + 'htm' => 'text/html', + 'html' => 'text/html', + 'jar' => 'application/x-java-archive', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'm3u' => 'audio/x-mpegurl', + 'm4a' => 'audio/mp4', + 'mdb' => 'application/x-msaccess', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'odg' => 'vnd.oasis.opendocument.graphics', + 'odp' => 'vnd.oasis.opendocument.presentation', + 'odt' => 'vnd.oasis.opendocument.text', + 'ods' => 'vnd.oasis.opendocument.spreadsheet', + 'ogg' => 'audio/ogg', + 'pdf' => 'application/pdf', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'ps' => 'application/postscript', + 'rar' => 'application/x-rar-compressed', + 'rtf' => 'application/rtf', + 'tar' => 'application/x-tar', + 'sit' => 'application/x-stuffit', + 'svg' => 'image/svg+xml', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'ttf' => 'application/x-font-truetype', + 'vcf' => 'text/x-vcard', + 'wav' => 'audio/wav', + 'wma' => 'audio/x-ms-wma', + 'wmv' => 'audio/x-ms-wmv', + 'xls' => 'application/excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'application/xml', + ); + + // wrap array for generating file + foreach ($valid_mime_types_preset as $extension => $mime_type) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } + + // collect extensions + $valid_extensions = array(); + + // all extensions from second match + foreach ($matches[2] as $i => $extensions) { + // explode multiple extensions from string + $extensions = explode(' ', strtolower($extensions)); + + // force array for foreach + if (!is_array($extensions)) { + $extensions = array($extensions); + } + + foreach ($extensions as $extension) { + // get mime type + $mime_type = $matches[1][$i]; + + // check if string length lower than 10 + if (strlen($extension) < 10) { + // add extension + $valid_extensions[] = $extension; + + if (!isset($valid_mime_types[$mime_type])) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } + } + } + } + } + + $xml = simplexml_load_string($mime_xml); + + foreach ($xml as $node) { + // check if there is no pattern + if (!isset($node->glob['pattern'])) { + continue; + } + + // get all matching extensions from match + foreach ((array) $node->glob['pattern'] as $extension) { + // skip none glob extensions + if (strpos($extension, '.') === false) { + continue; + } + + // remove get only last part + $extension = explode('.', strtolower($extension)); + $extension = end($extension); + + // maximum length in database column + if (strlen($extension) <= 9) { + $valid_extensions[] = $extension; + } + } + + if (isset($node->glob['pattern'][0])) { + // mime type + $mime_type = strtolower((string) $node['type']); + + // get first extension + $extension = strtolower(trim($node->glob['ddpattern'][0], '*.')); + + // skip none glob extensions and check if string length between 1 and 10 + if (strpos($extension, '.') !== false || strlen($extension) < 1 || strlen($extension) > 9) { + continue; + } + + // check if string length lower than 10 + if (!isset($valid_mime_types[$mime_type])) { + // generate array for mimetype to extension resolver (only first match) + $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; + } + } + } + + // full list of valid extensions only + $valid_mime_types = array_unique($valid_mime_types); + ksort($valid_mime_types); + + // combine mime types and extensions array + $output = "$preamble\$swift_mime_types = array(\n ".implode($valid_mime_types, ",\n ")."\n);"; + + // write mime_types.php config file + @file_put_contents('./mime_types.php', $output); +} + +generateUpToDateMimeArray(); From 8428b791f8d4588254f2be422bb350e1e1a40349 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Sat, 16 Apr 2016 22:25:47 +0200 Subject: [PATCH 13/50] Add logger to dump smtp dialog --- htdocs/core/class/CMailFile.class.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php index 44e61b3f219..8592c3e005c 100644 --- a/htdocs/core/class/CMailFile.class.php +++ b/htdocs/core/class/CMailFile.class.php @@ -628,13 +628,20 @@ class CMailFile // Create the Mailer using your created Transport $this->mailer = Swift_Mailer::newInstance($this->transport); - //if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->mailer->setDebug(true); + if (! empty($conf->global->MAIN_MAIL_DEBUG)) { + // To use the ArrayLogger + $this->logger = new Swift_Plugins_Loggers_ArrayLogger(); + // Or to use the Echo Logger + //$this->logger = new Swift_Plugins_Loggers_EchoLogger(); + $this->mailer->registerPlugin(new Swift_Plugins_LoggerPlugin($this->logger)); + } + // send mail try { $result = $this->mailer->send($this->message); } catch (Exception $e) { $this->error = $e->getMessage(); } - //if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail(); + if (! empty($conf->global->MAIN_MAIL_DEBUG)) $this->dump_mail(); $res = true; if (! empty($this->error) && ! $result) { @@ -728,6 +735,10 @@ class CMailFile { fputs($fp, $this->smtps->log); // this->smtps->log is filled only if MAIN_MAIL_DEBUG was set to on } + elseif ($conf->global->MAIN_MAIL_SENDMODE == 'swiftmailer') + { + fputs($fp, $this->logger->dump()); // this->logger is filled only if MAIN_MAIL_DEBUG was set to on + } fclose($fp); if (! empty($conf->global->MAIN_UMASK)) From 75127638a4405e891a3620c2251734b71073cf4a Mon Sep 17 00:00:00 2001 From: frederic34 Date: Sun, 17 Apr 2016 10:28:21 +0200 Subject: [PATCH 14/50] Embed images --- htdocs/admin/mails.php | 2 +- htdocs/core/class/CMailFile.class.php | 37 ++++++++++++++++----------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index deaff88f50f..24155b8a65c 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -207,7 +207,7 @@ if (($action == 'send' || $action == 'sendhtml') && ! GETPOST('addfile') && ! GE $msgishtml, $errors_to, '', - $trackid + $trackid ); $result=$mailfile->sendfile(); diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php index 8592c3e005c..3f78a4ba078 100644 --- a/htdocs/core/class/CMailFile.class.php +++ b/htdocs/core/class/CMailFile.class.php @@ -361,6 +361,14 @@ class CMailFile // Create the message $this->message = Swift_Message::newInstance(); + // Adding a trackid header to a message + $headers = $this->message->getHeaders(); + $headers->addTextHeader('X-Dolibarr-TRACKID', $trackid); + $headerID = time() . '.swiftmailer-dolibarr-' . $trackid . '@' . $conf->global->MAIN_MAIL_SMTP_SERVER; + $msgid = $headers->get('Message-ID'); + $msgid->setId($headerID); + $headers->addIdHeader('References', $headerID); + // Give the message a subject $this->message->setSubject($this->encodetorfc2822($subject)); @@ -375,8 +383,6 @@ class CMailFile $this->message->setCharSet($conf->file->character_set_client); - // TODO Add trackid into smtp header - if (! empty($this->html)) { if (!empty($css)) @@ -388,6 +394,19 @@ class CMailFile $msg = $this->checkIfHTML($msg); } + if ($this->atleastoneimage) + { + foreach ($this->images_encoded as $img) + { + //$img['fullpath'],$img['image_encoded'],$img['name'],$img['content_type'],$img['cid'] + $attachment = Swift_Image::fromPath($img['fullpath'], $img['content_type']); + // embed image + $imgcid = $this->message->embed($attachment); + // replace cid by the one created by swiftmail in html message + $msg = str_replace("cid:".$img['cid'], $imgcid, $msg); + } + } + if ($this->msgishtml) { $this->message->setBody($msg,'text/html'); // And optionally an alternative body @@ -398,19 +417,6 @@ class CMailFile //$this->message->addPart('Here is the message itself', 'text/html'); } - if ($this->atleastoneimage) - { - foreach ($this->images_encoded as $img) - { - //$img['fullpath'],$img['image_encoded'],$img['name'],$img['content_type'],$img['cid'] - // TODO this part is not tested - //$attachment = Swift_Attachment::fromPath($img['fullpath'], 'image/jpeg'); - //$attachment->setFilename($img['name']); - //$attachment->setDisposition('inline'); - //$message->attach($attachment); - } - } - if ($this->atleastonefile) { foreach ($filename_list as $i => $val) @@ -1175,6 +1181,7 @@ class CMailFile $imgName = $regs[1]; $this->images_encoded[$i]['name'] = $imgName; + $this->images_encoded[$i]['fullpath'] = $fullpath; $this->images_encoded[$i]['content_type'] = $img["content_type"]; $this->images_encoded[$i]['cid'] = $img["cid"]; // Encodage de l'image From 09528cccaf7d2752efb9af20d7ba4814632f6ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sun, 17 Apr 2016 19:14:48 +0200 Subject: [PATCH 15/50] Update printsheet.php --- htdocs/barcode/printsheet.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/barcode/printsheet.php b/htdocs/barcode/printsheet.php index bb3934625b6..81533de82ae 100644 --- a/htdocs/barcode/printsheet.php +++ b/htdocs/barcode/printsheet.php @@ -62,7 +62,7 @@ if (GETPOST('submitproduct') && GETPOST('submitproduct')) { $producttmp->fetch(GETPOST('productid')); $forbarcode=$producttmp->barcode; - $fk_barcode_type=$thirdpartytmp->barcode_type_code; + $fk_barcode_type=$producttmp->barcode_type; if (empty($fk_barcode_type) && ! empty($conf->global->PRODUIT_DEFAULT_BARCODE_TYPE)) $fk_barcode_type = $conf->global->PRODUIT_DEFAULT_BARCODE_TYPE; From 60ebc6fa11dde7ea6b46d1c965c81cc64d99edd5 Mon Sep 17 00:00:00 2001 From: frederic34 Date: Mon, 18 Apr 2016 00:47:08 +0200 Subject: [PATCH 16/50] Some correction for testconnect --- htdocs/admin/mails.php | 3 --- htdocs/core/class/CMailFile.class.php | 12 +++++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index 24155b8a65c..cc824355fc8 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -720,9 +720,6 @@ else { print load_fiche_titre($langs->trans("DoTestServerAvailability")); - // If we use SSL/TLS - if (! empty($conf->global->MAIN_MAIL_EMAIL_TLS) && function_exists('openssl_open')) $server='ssl://'.$server; - include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'; $mail = new CMailFile('','','',''); $result=$mail->check_server_port($server,$port); diff --git a/htdocs/core/class/CMailFile.class.php b/htdocs/core/class/CMailFile.class.php index 3f78a4ba078..1db31697bb8 100644 --- a/htdocs/core/class/CMailFile.class.php +++ b/htdocs/core/class/CMailFile.class.php @@ -374,12 +374,12 @@ class CMailFile // Set the From address with an associative array //$this->message->setFrom(array('john@doe.com' => 'John Doe')); - $this->message->setFrom($this->getArrayAddress($from)); + if (! empty($from)) $this->message->setFrom($this->getArrayAddress($from)); // Set the To addresses with an associative array - $this->message->setTo($this->getArrayAddress($to)); + if (! empty($to)) $this->message->setTo($this->getArrayAddress($to)); - $this->message->SetReplyTo($this->getArrayAddress($from)); + if (! empty($from)) $this->message->SetReplyTo($this->getArrayAddress($from)); $this->message->setCharSet($conf->file->character_set_client); @@ -1049,11 +1049,17 @@ class CMailFile */ function check_server_port($host,$port) { + global $conf; $_retVal=0; $timeout=5; // Timeout in seconds if (function_exists('fsockopen')) { + // If we use SSL/TLS + if (! empty($conf->global->MAIN_MAIL_EMAIL_TLS) && function_exists('openssl_open')) $host='ssl://'.$host; + // tls smtp start with no encryption + //if (! empty($conf->global->MAIN_MAIL_EMAIL_STARTTLS) && function_exists('openssl_open')) $host='tls://'.$host; + dol_syslog("Try socket connection to host=".$host." port=".$port); //See if we can connect to the SMTP server if ($socket = @fsockopen( From 3db34a723d1eaaee2553825e2680579f879535d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Mon, 18 Apr 2016 00:55:12 +0200 Subject: [PATCH 17/50] Update style.css.php --- htdocs/theme/eldy/style.css.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 0314ce7b928..f474c4463d8 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -103,7 +103,7 @@ $useboldtitle=1; if (! isset($conf->global->THEME_ELDY_BACKBODY)) $conf->global->THEME_ELDY_BACKBODY=$colorbackbody; if (! isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) $conf->global->THEME_ELDY_TOPMENU_BACK1='120,130,170'; if (! isset($conf->global->THEME_ELDY_BACKTITLE1)) $conf->global->THEME_ELDY_BACKTITLE1=$colorbacktitle1; -if (! isset($conf->global->THEME_ELDY_USE_HOVER)) $conf->global->THEME_ELDY_USE_HOVER=='238,246,252'; +if (! isset($conf->global->THEME_ELDY_USE_HOVER)) $conf->global->THEME_ELDY_USE_HOVER='238,246,252'; if (! isset($conf->global->THEME_ELDY_TEXTTITLENOTAB)) $conf->global->THEME_ELDY_TEXTTITLENOTAB=$colortexttitlenotab; if (! isset($conf->global->THEME_ELDY_TEXTLINK)) $conf->global->THEME_ELDY_TEXTLINK=$colortextlink; From c77e121553df7541d4faebc4e397b07d29a63970 Mon Sep 17 00:00:00 2001 From: abb Date: Sat, 16 Apr 2016 17:47:49 +0100 Subject: [PATCH 18/50] fix:use of function updateExtrafield instead of insertExtrafields in interventions --- htdocs/fichinter/card.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php index 74f50f26a5b..61ddfad76e4 100644 --- a/htdocs/fichinter/card.php +++ b/htdocs/fichinter/card.php @@ -882,8 +882,7 @@ if (empty($reshook)) $parameters=array('id'=>$object->id); $reshook=$hookmanager->executeHooks('insertExtraFields',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks if (empty($reshook)) - { - $result=$object->insertExtraFields(); + { $result=$object->updateExtraField($_POST["attribute"]); if ($result < 0) { $error++; From 0a52abab5df8cca431a71f9f4cecf1f5bd06ad90 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 19 Apr 2016 13:38:32 +0200 Subject: [PATCH 19/50] Fix: broken multicompany transverse mode authentication feature --- htdocs/user/class/user.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/user/class/user.class.php b/htdocs/user/class/user.class.php index 85f340b1cb1..1ee07e0a7af 100644 --- a/htdocs/user/class/user.class.php +++ b/htdocs/user/class/user.class.php @@ -207,7 +207,10 @@ class User extends CommonObject } else // The fetch was forced on an entity { - $sql.= " WHERE u.entity IN (0, ".$conf->entity.")"; + if (!empty($conf->multicompany->enabled) && !empty($conf->multicompany->transverse_mode)) + $sql.= " WHERE u.entity IS NOT NULL"; // multicompany is on in transverse mode or user making fetch is on entity 0, so user is allowed to fetch anywhere into database + else + $sql.= " WHERE u.entity IN (0, ".$conf->entity.")"; } if ($sid) // permet une recherche du user par son SID ActiveDirectory ou Samba From 1a552cbd16a5980f25e65ef79b61c7981acafc4e Mon Sep 17 00:00:00 2001 From: frederic34 Date: Tue, 19 Apr 2016 18:27:56 +0200 Subject: [PATCH 20/50] typo --- htdocs/admin/mails.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index cc824355fc8..b507ac89a50 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -451,7 +451,7 @@ if ($action == 'edit') print '
'; - $sql = 'SELECT p.datep as dp, p.num_paiement, p.rowid, p.fk_bank,'; + $sql = 'SELECT p.datep as dp, p.ref, p.num_paiement, p.rowid, p.fk_bank,'; $sql.= ' c.id as paiement_type,'; $sql.= ' pf.amount,'; - $sql.= ' ba.rowid as baid, ba.ref, ba.label'; + $sql.= ' ba.rowid as baid, ba.ref as baref, ba.label'; $sql.= ' FROM '.MAIN_DB_PREFIX.'paiementfourn as p'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank as b ON p.fk_bank = b.rowid'; $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'bank_account as ba ON b.fk_account = ba.rowid'; @@ -1902,6 +1903,7 @@ else print ''; print ''; print ''; + print ''; print ''; if (! empty($conf->banque->enabled)) print ''; print ''; @@ -1915,16 +1917,23 @@ else { $objp = $db->fetch_object($result); $var=!$var; - print ''; - print '\n"; + print ''; + print ''; print ''; if (! empty($conf->banque->enabled)) { $bankaccountstatic->id=$objp->baid; - $bankaccountstatic->ref=$objp->ref; - $bankaccountstatic->label=$objp->ref; + $bankaccountstatic->ref=$objp->baref; + $bankaccountstatic->label=$objp->baref; print ''; From a10d97cce03a4e36314db2465f0cea858a7e50b7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 11:09:31 +0200 Subject: [PATCH 36/50] NEW Can filter on status employee when building emailing from users --- .../core/modules/mailings/pomme.modules.php | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/htdocs/core/modules/mailings/pomme.modules.php b/htdocs/core/modules/mailings/pomme.modules.php index ce4a8b89e09..3db13ac824c 100644 --- a/htdocs/core/modules/mailings/pomme.modules.php +++ b/htdocs/core/modules/mailings/pomme.modules.php @@ -26,8 +26,7 @@ include_once DOL_DOCUMENT_ROOT.'/core/modules/mailings/modules_mailings.php'; /** - * \class mailing_pomme - * \brief Class to offer a selector of emailing targets with Rule 'Peche'. + * Class to offer a selector of emailing targets with Rule 'Peche'. */ class mailing_pomme extends MailingTargets { @@ -112,11 +111,21 @@ class mailing_pomme extends MailingTargets $langs->load("users"); $s=''; + $s.=$langs->trans("Status").': '; $s.=''; + + $s.=' '; + $s.=$langs->trans("Employee").': '; + $s.=''; + return $s; } @@ -142,7 +151,12 @@ class mailing_pomme extends MailingTargets */ function add_to_target($mailing_id,$filtersarray=array()) { - global $conf, $langs; + // Deprecation warning + if ($filtersarray) { + dol_syslog(__METHOD__ . ": filtersarray parameter is deprecated", LOG_WARNING); + } + + global $conf, $langs; $langs->load("companies"); $cibles = array(); @@ -154,11 +168,10 @@ class mailing_pomme extends MailingTargets $sql.= " WHERE u.email <> ''"; // u.email IS NOT NULL est implicite dans ce test $sql.= " AND u.entity IN (0,".$conf->entity.")"; $sql.= " AND u.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".$mailing_id.")"; - foreach($filtersarray as $key) - { - if ($key == '1') $sql.= " AND u.statut=1"; - if ($key == '0') $sql.= " AND u.statut=0"; - } + if (isset($_POST["filter"]) && $_POST["filter"] == '1') $sql.= " AND u.statut=1"; + if (isset($_POST["filter"]) && $_POST["filter"] == '0') $sql.= " AND u.statut=0"; + if (isset($_POST["filteremployee"]) && $_POST["filteremployee"] == '1') $sql.= " AND u.employee=1"; + if (isset($_POST["filteremployee"]) && $_POST["filteremployee"] == '0') $sql.= " AND u.employee=0"; $sql.= " ORDER BY u.email"; // Stocke destinataires dans cibles From d735f5dc70edc49ec860ba2701ddcaa124be5c33 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 11:09:47 +0200 Subject: [PATCH 37/50] FIX lost css change --- dev/dolibarr_changes.txt | 30 ++++++++++++------- .../includes/ckeditor/ckeditor/contents.css | 2 +- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/dev/dolibarr_changes.txt b/dev/dolibarr_changes.txt index d666aa02165..a7aed128151 100644 --- a/dev/dolibarr_changes.txt +++ b/dev/dolibarr_changes.txt @@ -10,6 +10,16 @@ Replace "& new" by "new" +CKEDITOR: +--------- +* In ckeditor/ckeditor/contents.css +Replace: + margin: 20px; +With + margin: 5px; + + + NUSOAP: ------- * In file nusoap.php, to avoid a warning, @@ -38,6 +48,7 @@ with: } + TCPDF: ------ * To avoid to have QRcode changed because generated with a random mask, replace @@ -45,13 +56,8 @@ define('QR_FIND_FROM_RANDOM', 2); with define('QR_FIND_FROM_RANDOM', false); -* Removed all fonts except - dejavusans* (used by greek, arab, persan, romanian, turkish), - freemono* (russian), - cid*+msungstdlight+stsongstdlight+uni2cid* (chinese), - helvetica* (all other languages), - zapfdingbats.php (for special chars like form checkboxes) * Removed useless directories (examples, tools) + * Fix // initialize subsetchars $subsetchars = array(); @@ -59,13 +65,18 @@ into // initialize subsetchars $subsetchars = array_fill(0, 256, true); -* Made freemono the default monotype font because we removed courier +* Optionnaly, removed all fonts except + dejavusans* (used by greek, arab, persan, romanian, turkish), + freemono* (russian), + cid*+msungstdlight+stsongstdlight+uni2cid* (chinese), + helvetica* (all other languages), + zapfdingbats.php (for special chars like form checkboxes) + +* Optionnaly, made freemono the default monotype font because we removed courier In htdocs/includes/tcpdf/tcpdf.php - protected $default_monospaced_font = 'courier'; + protected $default_monospaced_font = 'freemono'; -* Renamed getmypid into dol_getmypid(). - TCPDI: @@ -80,7 +91,6 @@ require_once(dirname(__FILE__).'/../tecnickcom/tcpdf/include/tcpdf_filters.php') - JSGANTT: -------- * Replace in function JSGantt.taskLink diff --git a/htdocs/includes/ckeditor/ckeditor/contents.css b/htdocs/includes/ckeditor/ckeditor/contents.css index bef3ebc8b1b..7e990756288 100644 --- a/htdocs/includes/ckeditor/ckeditor/contents.css +++ b/htdocs/includes/ckeditor/ckeditor/contents.css @@ -15,7 +15,7 @@ body /* Remove the background color to make it transparent */ background-color: #fff; - margin: 20px; + margin: 5px; } .cke_editable From 78d18185e49a2ef2ab379819dc8701eeda1f3ff4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 11:11:08 +0200 Subject: [PATCH 38/50] Several css enhancements --- htdocs/adherents/type.php | 7 +-- htdocs/categories/index.php | 2 +- htdocs/comm/action/peruser.php | 2 +- .../modules/mailings/contacts3.modules.php | 18 +++++--- .../modules/mailings/contacts4.modules.php | 23 ++++++---- htdocs/langs/en_US/website.lang | 3 +- htdocs/theme/eldy/style.css.php | 43 +++++++++++-------- htdocs/websites/index.php | 3 +- 8 files changed, 61 insertions(+), 40 deletions(-) diff --git a/htdocs/adherents/type.php b/htdocs/adherents/type.php index bae064bef34..dbc700a6778 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -153,6 +153,7 @@ if ($action == 'delete' && $user->rights->adherent->configurer) exit; } + /* * View */ @@ -236,7 +237,7 @@ if ($action == 'create') print '
'.$langs->trans('Payments').''.$langs->trans('Date').''.$langs->trans('Type').''.$langs->trans('BankAccount').''.$langs->trans('Amount').'
'.img_object($langs->trans('ShowPayment'),'payment').' '.dol_print_date($db->jdate($objp->dp),'day')."
'; + $paymentstatic->id=$objp->rowid; + $paymentstatic->datepaye=$db->jdate($objp->dp); + $paymentstatic->ref=$objp->ref; + $paymentstatic->num_paiement=$objp->num_paiement; + $paymentstatic->payment_code=$objp->payment_code; + print $paymentstatic->getNomUrl(1); + print ''.dol_print_date($db->jdate($objp->dp), 'day') . ''; print $form->form_modes_reglement(null, $objp->paiement_type,'none').' '.$objp->num_paiement; print ''; if ($objp->baid > 0) print $bankaccountstatic->getNomUrl(1,'transactions'); print '
'; print ''; - print ''; + print ''; print ''; print ''; + print ''; print ''; print ''; + print ''; print ''; print ''; print ''; print ''; +print $langs->trans("Name").':'; /* // faire une rech dans une sous categorie uniquement print ' - - - - - - - - - - - - -
'.$langs->trans("Label").'
'.$langs->trans("Label").'
'.$langs->trans("SubscriptionRequired").''; print $form->selectyesno("cotisation",1,1); @@ -247,7 +248,7 @@ if ($action == 'create') print '
'.$langs->trans("Description").''; - print '
'.$langs->trans("WelcomeEMail").''; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; @@ -645,7 +646,7 @@ if ($rowid > 0) print '
'.$langs->trans("Description").''; - print '
'.$langs->trans("WelcomeEMail").''; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; diff --git a/htdocs/categories/index.php b/htdocs/categories/index.php index e57cd22d5fd..02b83fcaef8 100644 --- a/htdocs/categories/index.php +++ b/htdocs/categories/index.php @@ -79,7 +79,7 @@ print '
'.$langs->trans("Search").'
'; -print $langs->trans("Name").':
'; diff --git a/htdocs/comm/action/peruser.php b/htdocs/comm/action/peruser.php index 621d3ada57a..fa24935316e 100644 --- a/htdocs/comm/action/peruser.php +++ b/htdocs/comm/action/peruser.php @@ -564,7 +564,7 @@ echo ''; //print "begin_d=".$begin_d." end_d=".$end_d; -echo ''; +echo '
'; echo ''; echo ''; diff --git a/htdocs/core/modules/mailings/contacts3.modules.php b/htdocs/core/modules/mailings/contacts3.modules.php index 61d992b32aa..b9878fd1c83 100644 --- a/htdocs/core/modules/mailings/contacts3.modules.php +++ b/htdocs/core/modules/mailings/contacts3.modules.php @@ -225,14 +225,22 @@ class mailing_contacts3 extends MailingTargets if ($resql) { $num = $this->db->num_rows($resql); - $i = 0; - while ($i < $num) + if ($num) { - $obj = $this->db->fetch_object($resql); - $s.=''; - $i++; + $i = 0; + while ($i < $num) + { + $obj = $this->db->fetch_object($resql); + $s.=''; + $i++; + } + } + else + { + $s.=''; } } + else dol_print_error($this->db); $s.=''; return $s; diff --git a/htdocs/core/modules/mailings/contacts4.modules.php b/htdocs/core/modules/mailings/contacts4.modules.php index 631f06ec8f2..421fd2676c8 100644 --- a/htdocs/core/modules/mailings/contacts4.modules.php +++ b/htdocs/core/modules/mailings/contacts4.modules.php @@ -222,16 +222,21 @@ class mailing_contacts4 extends MailingTargets $s=''; $s.=''; return $s; diff --git a/htdocs/langs/en_US/website.lang b/htdocs/langs/en_US/website.lang index 688866a4e5b..13659bc5954 100644 --- a/htdocs/langs/en_US/website.lang +++ b/htdocs/langs/en_US/website.lang @@ -10,4 +10,5 @@ EditPageMeta=Edit Meta EditPageContent=Edit Content Website=Web site AddPage=Add page -Page=Page \ No newline at end of file +Page=Page +PreviewOfSiteNotYetAvailable=Preview of your website %s not yet available. You must first add a page. \ No newline at end of file diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index e7fe3a14952..f7519e16f61 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -81,7 +81,8 @@ $dol_use_jmobile=$conf->dol_use_jmobile; // Colors $colorbackhmenu1='120,130,170'; // topmenu $colorbackvmenu1='255,255,255'; // vmenu -$colorbacktitle1='230,230,230'; // title of array +$colortopbordertitle1='40,40,40'; // top border of title +$colorbacktitle1='230,230,230'; // title of tables,list $colorbacktabcard1='255,255,255'; // card $colorbacktabactive='234,234,234'; $colorbacklineimpair1='255,255,255'; // line impair @@ -345,7 +346,7 @@ input:-moz-placeholder { color:#ccc; } legend { margin-bottom: 8px; } -fieldset { border: 1px solid #AAAAAA !important; box-shadow: 2px 2px 3px #DDD; } +fieldset { border: 1px solid #AAAAAA !important; } .button, input[name="sbmtConnexion"] { @@ -1720,11 +1721,11 @@ div.tabBar { background: rgb(); - + /* -moz-box-shadow: 3px 3px 4px #DDD; -webkit-box-shadow: 3px 3px 4px #DDD; box-shadow: 3px 3px 4px #DDD; - + */ } div.popuptabset { padding: 6px; @@ -2177,17 +2178,17 @@ table.liste, table.noborder, table.formdoc, div.noborder { border-spacing: 0px; border-top-width: 1px; - border-top-color: #BBB; + border-top-color: rgb(); border-top-style: solid; - border-right-width: 1px; +/* border-right-width: 1px; border-right-color: #BBB; border-right-style: solid; border-left-width: 1px; border-left-color: #BBB; border-left-style: solid; - +*/ border-bottom-width: 1px; border-bottom-color: #BBB; border-bottom-style: solid; @@ -2538,6 +2539,10 @@ div.liste_titre { border-top-style: solid; } div.liste_titre_bydiv { + border-top-width: 1px; + border-top-color: rgb(); + border-top-style: solid; + border-collapse: collapse; display: table; padding: 2px 0px 2px 0; @@ -2555,13 +2560,13 @@ div.liste_titre, tr.liste_titre, tr.liste_titre_sel, form.liste_titre, form.list color: #000 !important;*/ /* TO MATCH ELDY */ - background: rgb(); + /*background: rgb();*/ - background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); - background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); - background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); - background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); - background-image: linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + background-image: linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); font-weight: ; @@ -2707,13 +2712,13 @@ tr.box_titre { color: #000 !important;*/ /* TO MATCH ELDY */ - background: rgb(); + /* background: rgb(); */ - background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); - background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); - background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); - background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); - background-image: linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + background-image: linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); color: rgb(); diff --git a/htdocs/websites/index.php b/htdocs/websites/index.php index bfcdb9e0c85..ba2a4466b4d 100644 --- a/htdocs/websites/index.php +++ b/htdocs/websites/index.php @@ -334,7 +334,8 @@ print ''; if ($action == 'preview') { - print '
Preview TO DO'; + print '

'.$langs->trans("PreviewOfSiteNotYetAvailable", $website).'


'; + print '
'; } From ff5f04dee1eb27c5a601e8600660720d66e5032b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 11:11:24 +0200 Subject: [PATCH 39/50] Removed not required directories --- .../examples/barcodes/example_1d_html.php | 53 - .../examples/barcodes/example_1d_png.php | 53 - .../examples/barcodes/example_1d_svg.php | 53 - .../examples/barcodes/example_1d_svgi.php | 53 - .../barcodes/example_2d_datamatrix_html.php | 53 - .../barcodes/example_2d_datamatrix_png.php | 53 - .../barcodes/example_2d_datamatrix_svg.php | 53 - .../barcodes/example_2d_datamatrix_svgi.php | 53 - .../barcodes/example_2d_pdf417_html.php | 53 - .../barcodes/example_2d_pdf417_png.php | 53 - .../barcodes/example_2d_pdf417_svg.php | 53 - .../barcodes/example_2d_pdf417_svgi.php | 53 - .../barcodes/example_2d_qrcode_html.php | 53 - .../barcodes/example_2d_qrcode_png.php | 53 - .../barcodes/example_2d_qrcode_svg.php | 53 - .../barcodes/example_2d_qrcode_svgi.php | 53 - .../barcodes/tcpdf_barcodes_1d_include.php | 37 - .../barcodes/tcpdf_barcodes_2d_include.php | 37 - .../examples/config/tcpdf_config_alt.php | 222 --- .../tcpdf/examples/data/cert/tcpdf.crt | 40 - .../tcpdf/examples/data/cert/tcpdf.fdf | Bin 1286 -> 0 bytes .../tcpdf/examples/data/cert/tcpdf.p12 | Bin 1749 -> 0 bytes .../tcpdf/examples/data/chapter_demo_1.txt | 19 - .../tcpdf/examples/data/chapter_demo_2.txt | 23 - .../tcpdf/examples/data/table_data_demo.txt | 15 - .../tcpdf/examples/data/utf8test.txt | 128 -- .../tecnickcom/tcpdf/examples/example_001.php | 106 -- .../tecnickcom/tcpdf/examples/example_002.php | 87 - .../tecnickcom/tcpdf/examples/example_003.php | 118 -- .../tecnickcom/tcpdf/examples/example_004.php | 121 -- .../tecnickcom/tcpdf/examples/example_005.php | 158 -- .../tecnickcom/tcpdf/examples/example_006.php | 330 ---- .../tecnickcom/tcpdf/examples/example_007.php | 113 -- .../tecnickcom/tcpdf/examples/example_008.php | 97 -- .../tecnickcom/tcpdf/examples/example_009.php | 146 -- .../tecnickcom/tcpdf/examples/example_010.php | 150 -- .../tecnickcom/tcpdf/examples/example_011.php | 138 -- .../tecnickcom/tcpdf/examples/example_012.pdf | Bin 13214 -> 0 bytes .../tecnickcom/tcpdf/examples/example_012.php | 205 --- .../tecnickcom/tcpdf/examples/example_013.php | 229 --- .../tecnickcom/tcpdf/examples/example_014.php | 194 --- .../tecnickcom/tcpdf/examples/example_015.php | 161 -- .../tecnickcom/tcpdf/examples/example_016.php | 134 -- .../tecnickcom/tcpdf/examples/example_017.php | 117 -- .../tecnickcom/tcpdf/examples/example_018.php | 128 -- .../tecnickcom/tcpdf/examples/example_019.php | 98 -- .../tecnickcom/tcpdf/examples/example_020.php | 146 -- .../tecnickcom/tcpdf/examples/example_021.php | 91 - .../tecnickcom/tcpdf/examples/example_022.php | 146 -- .../tecnickcom/tcpdf/examples/example_023.php | 113 -- .../tecnickcom/tcpdf/examples/example_024.php | 140 -- .../tecnickcom/tcpdf/examples/example_025.php | 118 -- .../tecnickcom/tcpdf/examples/example_026.php | 145 -- .../tecnickcom/tcpdf/examples/example_027.php | 418 ----- .../tecnickcom/tcpdf/examples/example_028.php | 138 -- .../tecnickcom/tcpdf/examples/example_029.php | 124 -- .../tecnickcom/tcpdf/examples/example_030.php | 188 --- .../tecnickcom/tcpdf/examples/example_031.php | 103 -- .../tecnickcom/tcpdf/examples/example_032.php | 91 - .../tecnickcom/tcpdf/examples/example_033.php | 105 -- .../tecnickcom/tcpdf/examples/example_034.php | 96 -- .../tecnickcom/tcpdf/examples/example_035.php | 111 -- .../tecnickcom/tcpdf/examples/example_036.php | 89 - .../tecnickcom/tcpdf/examples/example_037.php | 147 -- .../tecnickcom/tcpdf/examples/example_038.php | 92 - .../tecnickcom/tcpdf/examples/example_039.php | 104 -- .../tecnickcom/tcpdf/examples/example_040.php | 116 -- .../tecnickcom/tcpdf/examples/example_041.php | 90 - .../tecnickcom/tcpdf/examples/example_042.php | 102 -- .../tecnickcom/tcpdf/examples/example_043.php | 85 - .../tecnickcom/tcpdf/examples/example_044.php | 128 -- .../tecnickcom/tcpdf/examples/example_045.php | 140 -- .../tecnickcom/tcpdf/examples/example_046.php | 123 -- .../tecnickcom/tcpdf/examples/example_047.php | 117 -- .../tecnickcom/tcpdf/examples/example_048.php | 313 ---- .../tecnickcom/tcpdf/examples/example_049.php | 126 -- .../tecnickcom/tcpdf/examples/example_050.php | 210 --- .../tecnickcom/tcpdf/examples/example_051.php | 145 -- .../tecnickcom/tcpdf/examples/example_052.php | 121 -- .../tecnickcom/tcpdf/examples/example_053.php | 108 -- .../tecnickcom/tcpdf/examples/example_054.php | 128 -- .../tecnickcom/tcpdf/examples/example_055.php | 115 -- .../tecnickcom/tcpdf/examples/example_056.php | 133 -- .../tecnickcom/tcpdf/examples/example_057.php | 268 --- .../tecnickcom/tcpdf/examples/example_058.php | 94 -- .../tecnickcom/tcpdf/examples/example_059.php | 190 --- .../tecnickcom/tcpdf/examples/example_060.php | 108 -- .../tecnickcom/tcpdf/examples/example_061.php | 264 --- .../tecnickcom/tcpdf/examples/example_062.php | 140 -- .../tecnickcom/tcpdf/examples/example_063.php | 131 -- .../tecnickcom/tcpdf/examples/example_064.php | 176 -- .../tecnickcom/tcpdf/examples/example_065.php | 98 -- .../tcpdf/examples/images/_blank.png | Bin 137 -> 0 bytes .../tcpdf/examples/images/alpha.png | Bin 23886 -> 0 bytes .../tcpdf/examples/images/image_demo.jpg | Bin 573845 -> 0 bytes .../examples/images/image_with_alpha.png | Bin 244218 -> 0 bytes .../tecnickcom/tcpdf/examples/images/img.png | Bin 195148 -> 0 bytes .../tcpdf/examples/images/logo_example.gif | Bin 21022 -> 0 bytes .../tcpdf/examples/images/logo_example.jpg | Bin 32732 -> 0 bytes .../tcpdf/examples/images/logo_example.png | Bin 19411 -> 0 bytes .../tcpdf/examples/images/tcpdf_box.ai | 214 --- .../tcpdf/examples/images/tcpdf_box.svg | 69 - .../tcpdf/examples/images/tcpdf_cell.png | Bin 38415 -> 0 bytes .../tcpdf/examples/images/tcpdf_logo.jpg | Bin 17633 -> 0 bytes .../tcpdf/examples/images/tcpdf_signature.png | Bin 67931 -> 0 bytes .../tcpdf/examples/images/testsvg.svg | 328 ---- .../tecnickcom/tcpdf/examples/images/tux.svg | 1487 ----------------- .../tecnickcom/tcpdf/examples/index.php | 115 -- .../tecnickcom/tcpdf/examples/lang/afr.php | 44 - .../tecnickcom/tcpdf/examples/lang/ara.php | 44 - .../tecnickcom/tcpdf/examples/lang/aze.php | 44 - .../tecnickcom/tcpdf/examples/lang/bel.php | 44 - .../tecnickcom/tcpdf/examples/lang/bra.php | 44 - .../tecnickcom/tcpdf/examples/lang/bul.php | 44 - .../tecnickcom/tcpdf/examples/lang/cat.php | 44 - .../tecnickcom/tcpdf/examples/lang/ces.php | 44 - .../tecnickcom/tcpdf/examples/lang/chi.php | 44 - .../tecnickcom/tcpdf/examples/lang/cym.php | 44 - .../tecnickcom/tcpdf/examples/lang/dan.php | 44 - .../tecnickcom/tcpdf/examples/lang/eng.php | 44 - .../tecnickcom/tcpdf/examples/lang/est.php | 44 - .../tecnickcom/tcpdf/examples/lang/eus.php | 44 - .../tecnickcom/tcpdf/examples/lang/far.php | 44 - .../tecnickcom/tcpdf/examples/lang/fra.php | 44 - .../tecnickcom/tcpdf/examples/lang/ger.php | 44 - .../tecnickcom/tcpdf/examples/lang/gle.php | 44 - .../tecnickcom/tcpdf/examples/lang/glg.php | 44 - .../tecnickcom/tcpdf/examples/lang/hat.php | 44 - .../tecnickcom/tcpdf/examples/lang/heb.php | 44 - .../tecnickcom/tcpdf/examples/lang/hrv.php | 44 - .../tecnickcom/tcpdf/examples/lang/hun.php | 44 - .../tecnickcom/tcpdf/examples/lang/hye.php | 44 - .../tecnickcom/tcpdf/examples/lang/ind.php | 44 - .../tecnickcom/tcpdf/examples/lang/ita.php | 44 - .../tecnickcom/tcpdf/examples/lang/jpn.php | 44 - .../tecnickcom/tcpdf/examples/lang/kat.php | 44 - .../tecnickcom/tcpdf/examples/lang/kor.php | 44 - .../tecnickcom/tcpdf/examples/lang/mkd.php | 44 - .../tecnickcom/tcpdf/examples/lang/mlt.php | 44 - .../tecnickcom/tcpdf/examples/lang/msa.php | 44 - .../tecnickcom/tcpdf/examples/lang/nld.php | 44 - .../tecnickcom/tcpdf/examples/lang/nob.php | 44 - .../tecnickcom/tcpdf/examples/lang/pol.php | 44 - .../tecnickcom/tcpdf/examples/lang/por.php | 44 - .../tecnickcom/tcpdf/examples/lang/ron.php | 44 - .../tecnickcom/tcpdf/examples/lang/rus.php | 44 - .../tecnickcom/tcpdf/examples/lang/slv.php | 44 - .../tecnickcom/tcpdf/examples/lang/spa.php | 44 - .../tecnickcom/tcpdf/examples/lang/sqi.php | 44 - .../tecnickcom/tcpdf/examples/lang/srp.php | 44 - .../tecnickcom/tcpdf/examples/lang/swa.php | 44 - .../tecnickcom/tcpdf/examples/lang/swe.php | 44 - .../tecnickcom/tcpdf/examples/lang/ukr.php | 44 - .../tecnickcom/tcpdf/examples/lang/urd.php | 44 - .../tecnickcom/tcpdf/examples/lang/yid.php | 44 - .../tecnickcom/tcpdf/examples/lang/zho.php | 44 - .../tcpdf/examples/tcpdf_include.php | 48 - .../includes/tecnickcom/tcpdf/tools/.htaccess | 1 - .../tcpdf/tools/convert_fonts_examples.txt | 28 - .../tecnickcom/tcpdf/tools/tcpdf_addfont.php | 269 --- 160 files changed, 15344 deletions(-) delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_html.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_png.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_svg.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_svgi.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_html.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_png.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_svg.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_svgi.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_html.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_png.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_svg.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_svgi.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_html.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_png.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_svg.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_svgi.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/tcpdf_barcodes_1d_include.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/barcodes/tcpdf_barcodes_2d_include.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/config/tcpdf_config_alt.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/data/cert/tcpdf.crt delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/data/cert/tcpdf.fdf delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/data/cert/tcpdf.p12 delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/data/chapter_demo_1.txt delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/data/chapter_demo_2.txt delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/data/table_data_demo.txt delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/data/utf8test.txt delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_001.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_002.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_003.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_004.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_005.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_006.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_007.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_008.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_009.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_010.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_011.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_012.pdf delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_012.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_013.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_014.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_015.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_016.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_017.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_018.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_019.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_020.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_021.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_022.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_023.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_024.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_025.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_026.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_027.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_028.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_029.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_030.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_031.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_032.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_033.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_034.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_035.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_036.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_037.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_038.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_039.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_040.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_041.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_042.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_043.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_044.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_045.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_046.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_047.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_048.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_049.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_050.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_051.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_052.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_053.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_054.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_055.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_056.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_057.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_058.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_059.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_060.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_061.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_062.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_063.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_064.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/example_065.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/_blank.png delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/alpha.png delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/image_demo.jpg delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/image_with_alpha.png delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/img.png delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.gif delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.jpg delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.png delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_box.ai delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_box.svg delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_cell.png delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_logo.jpg delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_signature.png delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/testsvg.svg delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/images/tux.svg delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/index.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/afr.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/ara.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/aze.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/bel.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/bra.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/bul.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/cat.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/ces.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/chi.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/cym.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/dan.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/eng.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/est.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/eus.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/far.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/fra.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/ger.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/gle.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/glg.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/hat.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/heb.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/hrv.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/hun.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/hye.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/ind.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/ita.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/jpn.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/kat.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/kor.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/mkd.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/mlt.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/msa.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/nld.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/nob.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/pol.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/por.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/ron.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/rus.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/slv.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/spa.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/sqi.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/srp.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/swa.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/swe.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/ukr.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/urd.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/yid.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/lang/zho.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/examples/tcpdf_include.php delete mode 100644 htdocs/includes/tecnickcom/tcpdf/tools/.htaccess delete mode 100644 htdocs/includes/tecnickcom/tcpdf/tools/convert_fonts_examples.txt delete mode 100644 htdocs/includes/tecnickcom/tcpdf/tools/tcpdf_addfont.php diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_html.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_html.php deleted file mode 100644 index 67d22e72594..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_html.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.000 - */ - -// include 1D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_1d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128'); - -// output the barcode as HTML object -echo $barcodeobj->getBarcodeHTML(2, 30, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_png.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_png.php deleted file mode 100644 index 9e44909f4f0..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_png.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.000 - */ - -// include 1D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_1d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128'); - -// output the barcode as PNG image -$barcodeobj->getBarcodePNG(2, 30, array(0,0,0)); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_svg.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_svg.php deleted file mode 100644 index f7b585acfec..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_svg.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.000 - */ - -// include 1D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_1d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128'); - -// output the barcode as SVG image -$barcodeobj->getBarcodeSVG(2, 30, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_svgi.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_svgi.php deleted file mode 100644 index a74a30460e7..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_1d_svgi.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.000 - */ - -// include 1D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_1d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128'); - -// output the barcode as SVG inline code -echo $barcodeobj->getBarcodeSVGcode(2, 40, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_html.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_html.php deleted file mode 100644 index dc7bab324e6..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_html.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'DATAMATRIX'); - -// output the barcode as HTML object -echo $barcodeobj->getBarcodeHTML(6, 6, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_png.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_png.php deleted file mode 100644 index 87b7a33064e..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_png.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'DATAMATRIX'); - -// output the barcode as PNG image -$barcodeobj->getBarcodePNG(6, 6, array(0,0,0)); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_svg.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_svg.php deleted file mode 100644 index 523ebfa3ca9..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_svg.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'DATAMATRIX'); - -// output the barcode as SVG image -$barcodeobj->getBarcodeSVG(6, 6, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_svgi.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_svgi.php deleted file mode 100644 index 4470981e656..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_datamatrix_svgi.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'DATAMATRIX'); - -// output the barcode as SVG inline code -echo $barcodeobj->getBarcodeSVGcode(6, 6, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_html.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_html.php deleted file mode 100644 index 4c4e9ee748e..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_html.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'PDF417'); - -// output the barcode as HTML object -echo $barcodeobj->getBarcodeHTML(4, 4, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_png.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_png.php deleted file mode 100644 index df939bb11a7..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_png.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'PDF417'); - -// output the barcode as PNG image -$barcodeobj->getBarcodePNG(4, 4, array(0,0,0)); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_svg.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_svg.php deleted file mode 100644 index fb29ea2493d..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_svg.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'PDF417'); - -// output the barcode as SVG image -$barcodeobj->getBarcodeSVG(4, 4, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_svgi.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_svgi.php deleted file mode 100644 index 94e1c71c5e1..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_pdf417_svgi.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'PDF417'); - -// output the barcode as SVG inline code -echo $barcodeobj->getBarcodeSVGcode(4, 4, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_html.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_html.php deleted file mode 100644 index ac828f7d3e5..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_html.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); - -// output the barcode as HTML object -echo $barcodeobj->getBarcodeHTML(6, 6, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_png.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_png.php deleted file mode 100644 index 71f87101540..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_png.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); - -// output the barcode as PNG image -$barcodeobj->getBarcodePNG(6, 6, array(0,0,0)); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_svg.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_svg.php deleted file mode 100644 index 1baa43dec29..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_svg.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); - -// output the barcode as SVG image -$barcodeobj->getBarcodeSVG(6, 6, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_svgi.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_svgi.php deleted file mode 100644 index 99d65908f47..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/example_2d_qrcode_svgi.php +++ /dev/null @@ -1,53 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Example for tcpdf_barcodes_2d.php class -// -//============================================================+ - -/** - * @file - * Example for tcpdf_barcodes_2d.php class - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.009 - */ - -// include 2D barcode class (search for installation path) -require_once(dirname(__FILE__).'/tcpdf_barcodes_2d_include.php'); - -// set the barcode content and type -$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H'); - -// output the barcode as SVG inline code -echo $barcodeobj->getBarcodeSVGcode(6, 6, 'black'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/tcpdf_barcodes_1d_include.php b/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/tcpdf_barcodes_1d_include.php deleted file mode 100644 index a0bde57e04c..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/barcodes/tcpdf_barcodes_1d_include.php +++ /dev/null @@ -1,37 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -//============================================================+ - -/** - * Example of alternative configuration file for TCPDF. - * @author Nicola Asuni - * @package com.tecnick.tcpdf - * @version 4.9.005 - * @since 2004-10-27 - */ - -/** - * Define the following constant to ignore the default configuration file. - */ -define ('K_TCPDF_EXTERNAL_CONFIG', true); - -/** - * Installation path (/var/www/tcpdf/). - * By default it is automatically calculated but you can also set it as a fixed string to improve performances. - */ -//define ('K_PATH_MAIN', ''); - -/** - * URL path to tcpdf installation folder (http://localhost/tcpdf/). - * By default it is automatically set but you can also set it as a fixed string to improve performances. - */ -//define ('K_PATH_URL', ''); - -/** - * Path for PDF fonts. - * By default it is automatically set but you can also set it as a fixed string to improve performances. - */ -//define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/'); - -/** - * Default images directory. - * By default it is automatically set but you can also set it as a fixed string to improve performances. - */ -define ('K_PATH_IMAGES', dirname(__FILE__).'/../images/'); - -/** - * Deafult image logo used be the default Header() method. - * Please set here your own logo or an empty string to disable it. - */ -define ('PDF_HEADER_LOGO', 'tcpdf_logo.jpg'); - -/** - * Header logo image width in user units. - */ -define ('PDF_HEADER_LOGO_WIDTH', 30); - -/** - * Cache directory for temporary files (full path). - */ -define ('K_PATH_CACHE', sys_get_temp_dir().'/'); - -/** - * Generic name for a blank image. - */ -define ('K_BLANK_IMAGE', '_blank.png'); - -/** - * Page format. - */ -define ('PDF_PAGE_FORMAT', 'A4'); - -/** - * Page orientation (P=portrait, L=landscape). - */ -define ('PDF_PAGE_ORIENTATION', 'P'); - -/** - * Document creator. - */ -define ('PDF_CREATOR', 'TCPDF'); - -/** - * Document author. - */ -define ('PDF_AUTHOR', 'TCPDF'); - -/** - * Header title. - */ -define ('PDF_HEADER_TITLE', 'TCPDF Example'); - -/** - * Header description string. - */ -define ('PDF_HEADER_STRING', "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org"); - -/** - * Document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch]. - */ -define ('PDF_UNIT', 'mm'); - -/** - * Header margin. - */ -define ('PDF_MARGIN_HEADER', 5); - -/** - * Footer margin. - */ -define ('PDF_MARGIN_FOOTER', 10); - -/** - * Top margin. - */ -define ('PDF_MARGIN_TOP', 27); - -/** - * Bottom margin. - */ -define ('PDF_MARGIN_BOTTOM', 25); - -/** - * Left margin. - */ -define ('PDF_MARGIN_LEFT', 15); - -/** - * Right margin. - */ -define ('PDF_MARGIN_RIGHT', 15); - -/** - * Default main font name. - */ -define ('PDF_FONT_NAME_MAIN', 'helvetica'); - -/** - * Default main font size. - */ -define ('PDF_FONT_SIZE_MAIN', 10); - -/** - * Default data font name. - */ -define ('PDF_FONT_NAME_DATA', 'helvetica'); - -/** - * Default data font size. - */ -define ('PDF_FONT_SIZE_DATA', 8); - -/** - * Default monospaced font name. - */ -define ('PDF_FONT_MONOSPACED', 'courier'); - -/** - * Ratio used to adjust the conversion of pixels to user units. - */ -define ('PDF_IMAGE_SCALE_RATIO', 1.25); - -/** - * Magnification factor for titles. - */ -define('HEAD_MAGNIFICATION', 1.1); - -/** - * Height of cell respect font height. - */ -define('K_CELL_HEIGHT_RATIO', 1.25); - -/** - * Title magnification respect main font size. - */ -define('K_TITLE_MAGNIFICATION', 1.3); - -/** - * Reduction factor for small font. - */ -define('K_SMALL_RATIO', 2/3); - -/** - * Set to true to enable the special procedure used to avoid the overlappind of symbols on Thai language. - */ -define('K_THAI_TOPCHARS', true); - -/** - * If true allows to call TCPDF methods using HTML syntax - * IMPORTANT: For security reason, disable this feature if you are printing user HTML content. - */ -define('K_TCPDF_CALLS_IN_HTML', true); - -/** - * If true and PHP version is greater than 5, then the Error() method throw new exception instead of terminating the execution. - */ -define('K_TCPDF_THROW_EXCEPTION_ERROR', false); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/data/cert/tcpdf.crt b/htdocs/includes/tecnickcom/tcpdf/examples/data/cert/tcpdf.crt deleted file mode 100644 index f0491391cf0..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/data/cert/tcpdf.crt +++ /dev/null @@ -1,40 +0,0 @@ -Bag Attributes - localKeyID: 7B AB 1B 7A BE 4C 85 C0 1A A6 DC 59 3F 79 48 C3 93 38 68 9C -subject=/CN=TCPDF DEMO/O=TCPDF/OU=DEMO/emailAddress=you@example.com/C=IT -issuer=/CN=TCPDF DEMO/O=TCPDF/OU=DEMO/emailAddress=you@example.com/C=IT ------BEGIN CERTIFICATE----- -MIIC1TCCAj6gAwIBAgIKkehOL/XGkB5cjjANBgkqhkiG9w0BAQUFADBhMRMwEQYD -VQQDEwpUQ1BERiBERU1PMQ4wDAYDVQQKEwVUQ1BERjENMAsGA1UECxMEREVNTzEe -MBwGCSqGSIb3DQEJARYPeW91QGV4YW1wbGUuY29tMQswCQYDVQQGEwJJVDAeFw0w -OTA4MjExMjU0NDhaFw0xNDA4MjExMjU0NDhaMGExEzARBgNVBAMTClRDUERGIERF -TU8xDjAMBgNVBAoTBVRDUERGMQ0wCwYDVQQLEwRERU1PMR4wHAYJKoZIhvcNAQkB -Fg95b3VAZXhhbXBsZS5jb20xCzAJBgNVBAYTAklUMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDAqIL0uGKmTR98Lxx2vEEE1OGKkMXFo0JViitALe7Onhxxqx0H -XMUDKF5mvEVu1rcvh7/oAnAfrCuEpL/up3u1mQCgBE7WXBnFFE/AE3jCksh9OkS0 -Z0Xj9woN5bzxRDsGoPiOu/4xzk5qSEXt8jf2Ep90QuNkqLIRT4swAzpDbwIDAQAB -o4GTMIGQMDcGA1UdEgQwMC6gEQYDVQQDDApUQ1BERiBERU1PoAwGA1UECgwFVENQ -REagCwYDVQQLDARERU1PMDcGA1UdEQQwMC6gEQYDVQQDDApUQ1BERiBERU1PoAwG -A1UECgwFVENQREagCwYDVQQLDARERU1PMA8GCSqGSIb3LwEBCgQCBQAwCwYDVR0P -BAQDAgSQMA0GCSqGSIb3DQEBBQUAA4GBAEhTQfqX3ZNdHmpTLDbIj22RHXii2roE -OavCbu9WsHoWpva0qSd+yIoD594VHvYAd29sfzDfiN+7W0aiZfDhq5jpaSQMVlN8 -RGYMupbHY/+a9Gz1wqxnR84mlTtIkZVRYAhsfPwy6M1BEjdMqfdh9h40JIdkdjtb -8faTCfXPePWQ ------END CERTIFICATE----- -Bag Attributes - localKeyID: 7B AB 1B 7A BE 4C 85 C0 1A A6 DC 59 3F 79 48 C3 93 38 68 9C -Key Attributes: ------BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQDAqIL0uGKmTR98Lxx2vEEE1OGKkMXFo0JViitALe7Onhxxqx0H -XMUDKF5mvEVu1rcvh7/oAnAfrCuEpL/up3u1mQCgBE7WXBnFFE/AE3jCksh9OkS0 -Z0Xj9woN5bzxRDsGoPiOu/4xzk5qSEXt8jf2Ep90QuNkqLIRT4swAzpDbwIDAQAB -AoGAXc+wNMmz/5Z+RlIKYia44klmqbplEx+0JULqXI4BQsrqvs67i+I4bJkznoL+ -rEIRYSuQ3sCRKFsFtckjTGpxadnxkB+uwGKc6pZChv99BFX6HFR4hgBlT/BBRAQA -hMDlM2JIRr4S4SMVXR7MHwGMUf9mUeanGLR3ZWtU3aXJrIECQQD7OaYUVYNEEnM9 -uXyjm22CuHyqyEf5gb13sK0uQty67547yJTMUQZd/sQc9KGwhzBbhrob2LO2jAhh -S+f+NSRnAkEAxFHm3fMI5RgXmswxlGm4QW07a/Ueo7ZJG6xjTkFXluJhd+XHswRD -dQIO3zG9nGjNUoeMrPhXhPvKqFc2F9RDuQJAQBEGin74N77gxqfr4ik79y8nE8J5 -oGZ2s/RJZdfFRKLg3mwbjjNHhWb4Ck5UgZkoOt8TzRApXG8/n9hktE5HFwJBALur -M5AueO1Pl5kB489lNJ9OxUQRYUXMxpxuscuoCQwSwmv0O2+0/qtG2WKhUQnI4aYo -L+FV0YwtivBb1jj3T/kCQQDIWOxq8eRowdaMzvJpRUHFgMcf1AVZExKyrugwYOWd -KNsDxC4KaQOsPt8iT/Ulo4g/MJC0HolCOhWibKmR9Ayl ------END RSA PRIVATE KEY----- diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/data/cert/tcpdf.fdf b/htdocs/includes/tecnickcom/tcpdf/examples/data/cert/tcpdf.fdf deleted file mode 100644 index a8f7c35d9af83d2579adafbe8d2745daa30dfd3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1286 zcmY#&b8*u()HC8$ef0SJWnL~r1p|frq%2+=8-1XRf)S7#r0=WYVr67tU}<1sWNK(+ zVqj{ZZD6EsV4$w4A5vM6s_&dwl9-d9ZfD1vnwJ974blcRB_P0C!5Cx;LKeh@%DVa{ zX69&A=9fC8RwU*YU-uEiZ?;rfP&Z2LK)A;_B7r3kke!oRl4_NlT2$g%0n&r%SOWtqBSU91S93#0P5mGRLt{e&OJj)R zfezFUQ!unNGcz$2Stmap^>SHiA5BUZ)k$Vr=CM% zc=0=>aXxA&FtRc*H}*0ZG&u@?wgf?)m6q&9>l2-|l~g=lrrfT;F~&|0XoQ#OZO$icNz4 z-3H87&iPEtj0}v68z&nyPB1VB2BNGGi-CdO0!TdZAji`JXe{wSVrc;=ieh+KxOu>l z1ko%=ie|W0erW9KGcv~Hu`mIX3dn3(eijyHCYA}PK?qDp%)qeo2zLB6{qE#gxvXFv zvlIQf6J;wF-P*-sx%yDv`>+jFV#~g5S*c!kqKo)Yp8S8-mz=MM)}*_iQ=4k-F>z{O0!L2GAEOs%9fiz&R(?FEV{qfsm&adYyzE04L)pyR%D@jZ)LCJsMoDa#P`pJ37QixnsQIwj-%VnTo z3MAk_!OYau*i-=|0R@I;3SgE(9zx6lQ_K*HIwK1Mgx-=OU}=(C#LERNy@E5VQWZ?~ kgYxrB6hMU zY-rcU0s;sCfPw=!#BpZA(3DXgvNT6SMx2c3M^p9_<~*qj&~k|Wio#7(scRd zVB;~P(%~|g!$#H)Uj>}ly*mK-K*NcRU+dxygiF7$BDFu;YqjVO#_{qT;h+#I>a(HG z6~@vJ%56(B0~rm^94uG!F&Q6%9$*+cPTn~18aH}n`p;SwVUc3}cGnJV33D`@$5Df5 zka5G^;jy@bF*5dt7yj?!On2m{6(lU}`+Ngz(u>-st&u3q&_N{T-$B(t9@HplX>tLm z<+%6V-nXIed*8 zvh$I?cs-H$tTFYyLYOK&N@y0$j3(wM=r+RHOFm_l_Ew3J zjZ|cTFZc?kMLbIRq9#Je0!uHg$!6L_|JSTh4SBDC^kz-4Q$rl0exLwuv7)I*(A$u( z4~P;V(@gR1lQvQ9WUL5F(7#Oi)Yh-}TXhqUaHvL^;{PKZ_!c^5TIaYzP~~Y~ol!Ix zIU5LwA?E0d=I<-Og-X;m1K5(@AtP)n6jQ1{Q2ko=_)Bd{1(bAXe>Coeda=}lih)j$ z2>zQNzJ;fmRdBanq`^ZJV5@Ra+72~oPcmiLf=NHQP1lj<)-k#CXYR9X=4kR3k!;Y8h(}v0#D@^oeB!oK*4q{yIW*$U z&LNQUbi3jQQ0AALA`*I zEfwAUX0Q~1Fi>8l{3I2b+YV;2v~q$Ht)BfYyxTJvSQ3SoAxX}JT3QHXqu~l@W;f&? zvySO921ne7{yT!I)^oWbM&abJwv8?L zM@*J>12l+CQ;QV!Y|w=vINzLD8!z3$e&b>m;bngGpZYK)8EI}digPEz z`_pvC6Afky&Q2vvrHY~v?ZeFbT?m+rp=p=tij1id`L#ceB43YATh$S6RuVfPIPHzQGmAuP1O9==9r!_9t z(XXtxXOZ1gWS49JT5NEHFG{7{?SuzHx8kV3=tHXcRlJ=U+G!T)+ z?jrd2IhsLxK1dcI7Bz#699SwDG5!;?5@oG>vkAutIB1uG5% r0vZJX1QaJKFP)8IPAOWT%X#|+d4hgQWoQHlY+QLorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc.

- - - -

Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.

- -

Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu.

- -

Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra.

- -

Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.

- -

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc.

- - - -

Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.

- -

Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu.

- -

Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra.

- -

Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.

diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/data/table_data_demo.txt b/htdocs/includes/tecnickcom/tcpdf/examples/data/table_data_demo.txt deleted file mode 100644 index 5a48a42e77b..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/data/table_data_demo.txt +++ /dev/null @@ -1,15 +0,0 @@ -Austria;Vienna;83859;8075 -Belgium;Brussels;30518;10192 -Denmark;Copenhagen;43094;5295 -Finland;Helsinki;304529;5147 -France;Paris;543965;58728 -Germany;Berlin;357022;82057 -Greece;Athens;131625;10511 -Ireland;Dublin;70723;3694 -Italy;Roma;301316;57563 -Luxembourg;Luxembourg;2586;424 -Netherlands;Amsterdam;41526;15654 -Portugal;Lisbon;91906;9957 -Spain;Madrid;504790;39348 -Sweden;Stockholm;410934;8839 -United Kingdom;London;243820;58862 diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/data/utf8test.txt b/htdocs/includes/tecnickcom/tcpdf/examples/data/utf8test.txt deleted file mode 100644 index 291d4e73554..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/data/utf8test.txt +++ /dev/null @@ -1,128 +0,0 @@ -Sentences that contain all letters commonly used in a language --------------------------------------------------------------- - -This file is UTF-8 encoded. - -Czech (cz) ---------- - - Příšerně žluťoučký kůň úpěl ďábelské ódy. - Hleď, toť přízračný kůň v mátožné póze šíleně úpí. - Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů. - Loď čeří kýlem tůň obzvlášť v Grónské úžině. - Ó, náhlý déšť již zvířil prach a čilá laň teď běží s houfcem gazel k úkrytům. - -Danish (da) ---------- - - Quizdeltagerne spiste jordbær med fløde, mens cirkusklovnen - Wolther spillede på xylofon. - (= Quiz contestants were eating strawbery with cream while Wolther - the circus clown played on xylophone.) - -German (de) ------------ - - Falsches Üben von Xylophonmusik quält jeden größeren Zwerg - (= Wrongful practicing of xylophone music tortures every larger dwarf) - - Zwölf Boxkämpfer jagten Eva quer über den Sylter Deich - (= Twelve boxing fighters hunted Eva across the dike of Sylt) - - Heizölrückstoßabdämpfung - (= fuel oil recoil absorber) - (jqvwxy missing, but all non-ASCII letters in one word) - -English (en) ------------- - - The quick brown fox jumps over the lazy dog - -Spanish (es) ------------- - - El pingüino Wenceslao hizo kilómetros bajo exhaustiva lluvia y - frío, añoraba a su querido cachorro. - (Contains every letter and every accent, but not every combination - of vowel + acute.) - -French (fr) ------------ - - Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à - côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce - qui lui permet de penser à la cænogenèse de l'être dont il est question - dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui, - pense-t-il, diminue çà et là la qualité de son œuvre. - - l'île exiguë - Où l'obèse jury mûr - Fête l'haï volapük, - Âne ex aéquo au whist, - Ôtez ce vœu déçu. - - Le cœur déçu mais l'âme plutôt naïve, Louÿs rêva de crapaüter en - canoë au delà des îles, près du mälström où brûlent les novæ. - -Irish Gaelic (ga) ------------------ - - D'fhuascail Íosa, Úrmhac na hÓighe Beannaithe, pór Éava agus Ádhaimh - -Hungarian (hu) --------------- - - Árvíztűrő tükörfúrógép - (= flood-proof mirror-drilling machine, only all non-ASCII letters) - -Icelandic (is) --------------- - - Kæmi ný öxi hér ykist þjófum nú bæði víl og ádrepa - - Sævör grét áðan því úlpan var ónýt - (some ASCII letters missing) - -Greek (el) -------------- - - Γαζέες καὶ μυρτιὲς δὲν θὰ βρῶ πιὰ στὸ χρυσαφὶ ξέφωτο - (= No more shall I see acacias or myrtles in the golden clearing) - - Ξεσκεπάζω τὴν ψυχοφθόρα βδελυγμία - (= I uncover the soul-destroying abhorrence) - -Hebrew (iw) ------------ - - ? דג סקרן שט בים מאוכזב ולפתע מצא לו חברה איך הקליטה - -Polish (pl) ------------ - - Pchnąć w tę łódź jeża lub osiem skrzyń fig - (= To push a hedgehog or eight bins of figs in this boat) - - Zażółć gęślą jaźń - -Russian (ru) ------------- - - В чащах юга жил бы цитрус? Да, но фальшивый экземпляр! - (= Would a citrus live in the bushes of south? Yes, but only a fake one!) - -Thai (th) ---------- - - [--------------------------|------------------------] - ๏ เป็นมนุษย์สุดประเสริฐเลิศคุณค่า กว่าบรรดาฝูงสัตว์เดรัจฉาน - จงฝ่าฟันพัฒนาวิชาการ อย่าล้างผลาญฤๅเข่นฆ่าบีฑาใคร - ไม่ถือโทษโกรธแช่งซัดฮึดฮัดด่า หัดอภัยเหมือนกีฬาอัชฌาสัย - ปฏิบัติประพฤติกฎกำหนดใจ พูดจาให้จ๊ะๆ จ๋าๆ น่าฟังเอย ฯ - - [The copyright for the Thai example is owned by The Computer - Association of Thailand under the Royal Patronage of His Majesty the - King.] - -Please let me know if you find others! Special thanks to the people -from all over the world who contributed these sentences. diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_001.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_001.php deleted file mode 100644 index 055c66af98d..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_001.php +++ /dev/null @@ -1,106 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 001'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); -$pdf->setFooterData(array(0,64,0), array(0,64,128)); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set default font subsetting mode -$pdf->setFontSubsetting(true); - -// Set font -// dejavusans is a UTF-8 Unicode font, if you only need to -// print standard ASCII chars, you can use core fonts like -// helvetica or times to reduce file size. -$pdf->SetFont('dejavusans', '', 14, '', true); - -// Add a page -// This method has several options, check the source code documentation for more information. -$pdf->AddPage(); - -// set text shadow effect -$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); - -// Set some content to print -$html = <<Welcome to  TCPDF ! -This is the first example of TCPDF library. -

This text is printed using the writeHTMLCell() method but you can also use: Multicell(), writeHTML(), Write(), Cell() and Text().

-

Please check the source code documentation and other examples for further information.

-

TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE MAKE A DONATION!

-EOD; - -// Print text using writeHTMLCell() -$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); - -// --------------------------------------------------------- - -// Close and output PDF document -// This method has several options, check the source code documentation for more information. -$pdf->Output('example_001.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_002.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_002.php deleted file mode 100644 index 020dd299063..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_002.php +++ /dev/null @@ -1,87 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 002'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// remove default header/footer -$pdf->setPrintHeader(false); -$pdf->setPrintFooter(false); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', 'BI', 20); - -// add a page -$pdf->AddPage(); - -// set some text to print -$txt = <<Write(0, $txt, '', 0, 'C', true, 0, false, false, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_002.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_003.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_003.php deleted file mode 100644 index 73a0e8c1a7a..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_003.php +++ /dev/null @@ -1,118 +0,0 @@ -Image($image_file, 10, 10, 15, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false); - // Set font - $this->SetFont('helvetica', 'B', 20); - // Title - $this->Cell(0, 15, '<< TCPDF Example 003 >>', 0, false, 'C', 0, '', 0, false, 'M', 'M'); - } - - // Page footer - public function Footer() { - // Position at 15 mm from bottom - $this->SetY(-15); - // Set font - $this->SetFont('helvetica', 'I', 8); - // Page number - $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M'); - } -} - -// create new PDF document -$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 003'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', 'BI', 12); - -// add a page -$pdf->AddPage(); - -// set some text to print -$txt = <<Write(0, $txt, '', 0, 'C', true, 0, false, false, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_003.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_004.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_004.php deleted file mode 100644 index 88e08c1b7e7..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_004.php +++ /dev/null @@ -1,121 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 004'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 004', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 11); - -// add a page -$pdf->AddPage(); - -//Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') - -// test Cell stretching -$pdf->Cell(0, 0, 'TEST CELL STRETCH: no stretch', 1, 1, 'C', 0, '', 0); -$pdf->Cell(0, 0, 'TEST CELL STRETCH: scaling', 1, 1, 'C', 0, '', 1); -$pdf->Cell(0, 0, 'TEST CELL STRETCH: force scaling', 1, 1, 'C', 0, '', 2); -$pdf->Cell(0, 0, 'TEST CELL STRETCH: spacing', 1, 1, 'C', 0, '', 3); -$pdf->Cell(0, 0, 'TEST CELL STRETCH: force spacing', 1, 1, 'C', 0, '', 4); - -$pdf->Ln(5); - -$pdf->Cell(45, 0, 'TEST CELL STRETCH: scaling', 1, 1, 'C', 0, '', 1); -$pdf->Cell(45, 0, 'TEST CELL STRETCH: force scaling', 1, 1, 'C', 0, '', 2); -$pdf->Cell(45, 0, 'TEST CELL STRETCH: spacing', 1, 1, 'C', 0, '', 3); -$pdf->Cell(45, 0, 'TEST CELL STRETCH: force spacing', 1, 1, 'C', 0, '', 4); - -$pdf->AddPage(); - -// example using general stretching and spacing - -for ($stretching = 90; $stretching <= 110; $stretching += 10) { - for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { - - // set general stretching (scaling) value - $pdf->setFontStretching($stretching); - - // set general spacing value - $pdf->setFontSpacing($spacing); - - $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, no stretch', 1, 1, 'C', 0, '', 0); - $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, scaling', 1, 1, 'C', 0, '', 1); - $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, force scaling', 1, 1, 'C', 0, '', 2); - $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, spacing', 1, 1, 'C', 0, '', 3); - $pdf->Cell(0, 0, 'Stretching '.$stretching.'%, Spacing '.sprintf('%+.3F', $spacing).'mm, force spacing', 1, 1, 'C', 0, '', 4); - - $pdf->Ln(2); - } -} - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_004.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_005.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_005.php deleted file mode 100644 index 5a592d16876..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_005.php +++ /dev/null @@ -1,158 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 005'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 005', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 10); - -// add a page -$pdf->AddPage(); - -// set cell padding -$pdf->setCellPaddings(1, 1, 1, 1); - -// set cell margins -$pdf->setCellMargins(1, 1, 1, 1); - -// set color for background -$pdf->SetFillColor(255, 255, 127); - -// MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) - -// set some text for example -$txt = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'; - -// Multicell test -$pdf->MultiCell(55, 5, '[LEFT] '.$txt, 1, 'L', 1, 0, '', '', true); -$pdf->MultiCell(55, 5, '[RIGHT] '.$txt, 1, 'R', 0, 1, '', '', true); -$pdf->MultiCell(55, 5, '[CENTER] '.$txt, 1, 'C', 0, 0, '', '', true); -$pdf->MultiCell(55, 5, '[JUSTIFY] '.$txt."\n", 1, 'J', 1, 2, '' ,'', true); -$pdf->MultiCell(55, 5, '[DEFAULT] '.$txt, 1, '', 0, 1, '', '', true); - -$pdf->Ln(4); - -// set color for background -$pdf->SetFillColor(220, 255, 220); - -// Vertical alignment -$pdf->MultiCell(55, 40, '[VERTICAL ALIGNMENT - TOP] '.$txt, 1, 'J', 1, 0, '', '', true, 0, false, true, 40, 'T'); -$pdf->MultiCell(55, 40, '[VERTICAL ALIGNMENT - MIDDLE] '.$txt, 1, 'J', 1, 0, '', '', true, 0, false, true, 40, 'M'); -$pdf->MultiCell(55, 40, '[VERTICAL ALIGNMENT - BOTTOM] '.$txt, 1, 'J', 1, 1, '', '', true, 0, false, true, 40, 'B'); - -$pdf->Ln(4); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// set color for background -$pdf->SetFillColor(215, 235, 255); - -// set some text for example -$txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. - -Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.'; - -// print a blox of text using multicell() -$pdf->MultiCell(80, 5, $txt."\n", 1, 'J', 1, 1, '' ,'', true); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// AUTO-FITTING - -// set color for background -$pdf->SetFillColor(255, 235, 235); - -// Fit text on cell by reducing font size -$pdf->MultiCell(55, 60, '[FIT CELL] '.$txt."\n", 1, 'J', 1, 1, 125, 145, true, 0, false, true, 60, 'M', true); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// CUSTOM PADDING - -// set color for background -$pdf->SetFillColor(255, 255, 215); - -// set font -$pdf->SetFont('helvetica', '', 8); - -// set cell padding -$pdf->setCellPaddings(2, 4, 6, 8); - -$txt = "CUSTOM PADDING:\nLeft=2, Top=4, Right=6, Bottom=8\nLorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue.\n"; - -$pdf->MultiCell(55, 5, $txt, 1, 'J', 1, 2, 125, 210, true); - -// move pointer to last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_005.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_006.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_006.php deleted file mode 100644 index 481f70e5478..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_006.php +++ /dev/null @@ -1,330 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 006'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 006', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('dejavusans', '', 10); - -// add a page -$pdf->AddPage(); - -// writeHTML($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='') -// writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='', $autopadding=true) - -// create some HTML content -$html = '

HTML Example

-Some special characters: < € € € & è è © > \\slash \\\\double-slash \\\\\\triple-slash -

List

-List example: -
    -
  1. test alt attribute test image
  2. -
  3. bold text
  4. -
  5. italic text
  6. -
  7. underlined text
  8. -
  9. bbibiubib
  10. -
  11. link to http://www.tecnick.com
  12. -
  13. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
    Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
  14. -
  15. SUBLIST -
      -
    1. row one -
        -
      • sublist
      • -
      -
    2. -
    3. row two
    4. -
    -
  16. -
  17. TEST line through
  18. -
  19. font + 3
  20. -
  21. small text normal small text normal subscript normal superscript normal
  22. -
-
-
Coffee
-
Black hot drink
-
Milk
-
White cold drink
-
-
IMAGES
-test alt attributetest alt attributetest alt attribute -
'; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - - -// output some RTL HTML content -$html = '
The words “מזל [mazel] טוב [tov]” mean “Congratulations!”
'; -$pdf->writeHTML($html, true, false, true, false, ''); - -// test some inline CSS -$html = '

This is just an example of html code to demonstrate some supported CSS inline styles. -bold text -line-trough -underline and line-trough -color -background color -bold -xx-small -x-small -small -medium -large -x-large -xx-large -

'; - -$pdf->writeHTML($html, true, false, true, false, ''); - -// reset pointer to the last page -$pdf->lastPage(); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Print a table - -// add a page -$pdf->AddPage(); - -// create some HTML content -$subtable = '
ab
cd
'; - -$html = '

HTML TABLE:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#RIGHT alignLEFT align4A
1A1 example link column span. One two tree four five six seven eight nine ten.
line after br
small text normal subscript normal superscript normal bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
  1. first
    1. sublist
    2. sublist
  2. second
small small small small small small small small small small small small small small small small small small small small
4B
'.$subtable.'A2 € € € & è è
A2 € € € & è è
Red Yellow BG4C
1A2AA
2AB
2AC
4D
1B4E
1C2C3C4F
'; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// Print some HTML Cells - -$html = 'red green blue
red green blue'; - -$pdf->SetFillColor(255,255,0); - -$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 0, true, 'L', true); -$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 1, true, 'C', true); -$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 0, true, 'R', true); - -// reset pointer to the last page -$pdf->lastPage(); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Print a table - -// add a page -$pdf->AddPage(); - -// create some HTML content -$html = '

Image alignments on HTML table

- - - - - - - - -
'; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// reset pointer to the last page -$pdf->lastPage(); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Print all HTML colors - -// add a page -$pdf->AddPage(); - -$textcolors = '

HTML Text Colors

'; -$bgcolors = '

HTML Background Colors

'; - -foreach(TCPDF_COLORS::$webcolor as $k => $v) { - $textcolors .= ''.$v.' '; - $bgcolors .= ''.$v.' '; -} - -// output the HTML content -$pdf->writeHTML($textcolors, true, false, true, false, ''); -$pdf->writeHTML($bgcolors, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Test word-wrap - -// create some HTML content -$html = '
-

Various tests

-link to page 2
-thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword'; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// Test fonts nesting -$html1 = 'Default Courier Helvetica Times dejavusans Times Helvetica Courier Default'; -$html2 = 'small text normal small text normal subscript normal superscript normal'; -$html3 = 'The quick brown fox jumps over the lazy dog.'; - -$html = $html1.'
'.$html2.'
'.$html3.'
'.$html3.'
'.$html2; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// test pre tag - -// add a page -$pdf->AddPage(); - -$html = << -Hello World!
-Hello - -
-int main() {
-    printf("HelloWorld");
-    return 0;
-}
-
-Monospace font, normal font, monospace font, normal font. -
-
DIV LEVEL 1
DIV LEVEL 2
DIV LEVEL 1
-
-SPAN LEVEL 1 SPAN LEVEL 2 SPAN LEVEL 1 -EOF; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// test custom bullet points for list - -// add a page -$pdf->AddPage(); - -$html = <<Test custom bullet image for list items -
    -
  • test custom bullet image
  • -
  • test custom bullet image
  • -
  • test custom bullet image
  • -
  • test custom bullet image
  • -
      -EOF; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_006.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_007.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_007.php deleted file mode 100644 index 97ebecb2e1c..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_007.php +++ /dev/null @@ -1,113 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 007'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 007', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 12); - -// add a page -$pdf->AddPage(); - -// create columns content -$left_column = 'LEFT COLUMN left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column'; - -$right_column = 'RIGHT COLUMN right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column'; - -// writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='', $autopadding=true) - -// get current vertical position -$y = $pdf->getY(); - -// set color for background -$pdf->SetFillColor(255, 255, 200); - -// set color for text -$pdf->SetTextColor(0, 63, 127); - -// write the first column -$pdf->writeHTMLCell(80, '', '', $y, $left_column, 1, 0, 1, true, 'J', true); - -// set color for background -$pdf->SetFillColor(215, 235, 255); - -// set color for text -$pdf->SetTextColor(127, 31, 0); - -// write the second column -$pdf->writeHTMLCell(80, '', '', '', $right_column, 1, 1, 1, true, 'J', true); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_007.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_008.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_008.php deleted file mode 100644 index 4349c3861de..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_008.php +++ /dev/null @@ -1,97 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 008'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 008', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set default font subsetting mode -$pdf->setFontSubsetting(true); - -// set font -$pdf->SetFont('freeserif', '', 12); - -// add a page -$pdf->AddPage(); - -// get esternal file content -$utf8text = file_get_contents('data/utf8test.txt', false); - -// set color for text -$pdf->SetTextColor(0, 63, 127); - -//Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0) - -// write the text -$pdf->Write(5, $utf8text, '', 0, '', false, 0, false, false, 0); - - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_008.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_009.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_009.php deleted file mode 100644 index 235dd721d84..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_009.php +++ /dev/null @@ -1,146 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 009'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 009', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// ------------------------------------------------------------------- - -// add a page -$pdf->AddPage(); - -// set JPEG quality -$pdf->setJPEGQuality(75); - -// Image method signature: -// Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false) - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Example of Image from data stream ('PHP rules') -$imgdata = base64_decode('iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='); - -// The '@' character is used to indicate that follows an image data stream and not an image file name -$pdf->Image('@'.$imgdata); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Image example with resizing -$pdf->Image('images/image_demo.jpg', 15, 140, 75, 113, 'JPG', 'http://www.tcpdf.org', '', true, 150, '', false, false, 1, false, false, false); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// test fitbox with all alignment combinations - -$horizontal_alignments = array('L', 'C', 'R'); -$vertical_alignments = array('T', 'M', 'B'); - -$x = 15; -$y = 35; -$w = 30; -$h = 30; -// test all combinations of alignments -for ($i = 0; $i < 3; ++$i) { - $fitbox = $horizontal_alignments[$i].' '; - $x = 15; - for ($j = 0; $j < 3; ++$j) { - $fitbox[1] = $vertical_alignments[$j]; - $pdf->Rect($x, $y, $w, $h, 'F', array(), array(128,255,128)); - $pdf->Image('images/image_demo.jpg', $x, $y, $w, $h, 'JPG', '', '', false, 300, '', false, false, 0, $fitbox, false, false); - $x += 32; // new column - } - $y += 32; // new row -} - -$x = 115; -$y = 35; -$w = 25; -$h = 50; -for ($i = 0; $i < 3; ++$i) { - $fitbox = $horizontal_alignments[$i].' '; - $x = 115; - for ($j = 0; $j < 3; ++$j) { - $fitbox[1] = $vertical_alignments[$j]; - $pdf->Rect($x, $y, $w, $h, 'F', array(), array(128,255,255)); - $pdf->Image('images/image_demo.jpg', $x, $y, $w, $h, 'JPG', '', '', false, 300, '', false, false, 0, $fitbox, false, false); - $x += 27; // new column - } - $y += 52; // new row -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Stretching, position and alignment example - -$pdf->SetXY(110, 200); -$pdf->Image('images/image_demo.jpg', '', '', 40, 40, '', '', 'T', false, 300, '', false, false, 1, false, false, false); -$pdf->Image('images/image_demo.jpg', '', '', 40, 40, '', '', '', false, 300, '', false, false, 1, false, false, false); - -// ------------------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_009.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_010.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_010.php deleted file mode 100644 index 5b980b04d6e..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_010.php +++ /dev/null @@ -1,150 +0,0 @@ -AddPage(); - // disable existing columns - $this->resetColumns(); - // print chapter title - $this->ChapterTitle($num, $title); - // set columns - $this->setEqualColumns(3, 57); - // print chapter body - $this->ChapterBody($file, $mode); - } - - /** - * Set chapter title - * @param $num (int) chapter number - * @param $title (string) chapter title - * @public - */ - public function ChapterTitle($num, $title) { - $this->SetFont('helvetica', '', 14); - $this->SetFillColor(200, 220, 255); - $this->Cell(180, 6, 'Chapter '.$num.' : '.$title, 0, 1, '', 1); - $this->Ln(4); - } - - /** - * Print chapter body - * @param $file (string) name of the file containing the chapter body - * @param $mode (boolean) if true the chapter body is in HTML, otherwise in simple text. - * @public - */ - public function ChapterBody($file, $mode=false) { - $this->selectColumn(); - // get esternal file content - $content = file_get_contents($file, false); - // set font - $this->SetFont('times', '', 9); - $this->SetTextColor(50, 50, 50); - // print content - if ($mode) { - // ------ HTML MODE ------ - $this->writeHTML($content, true, false, true, false, 'J'); - } else { - // ------ TEXT MODE ------ - $this->Write(0, $content, '', 0, 'J', true, 0, false, true, 0); - } - $this->Ln(); - } -} // end of extended class - -// --------------------------------------------------------- -// EXAMPLE -// --------------------------------------------------------- -// create new PDF document -$pdf = new MC_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 010'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 010', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// print TEXT -$pdf->PrintChapter(1, 'LOREM IPSUM [TEXT]', 'data/chapter_demo_1.txt', false); - -// print HTML -$pdf->PrintChapter(2, 'LOREM IPSUM [HTML]', 'data/chapter_demo_2.txt', true); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_010.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_011.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_011.php deleted file mode 100644 index 623ba3b8699..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_011.php +++ /dev/null @@ -1,138 +0,0 @@ -SetFillColor(255, 0, 0); - $this->SetTextColor(255); - $this->SetDrawColor(128, 0, 0); - $this->SetLineWidth(0.3); - $this->SetFont('', 'B'); - // Header - $w = array(40, 35, 40, 45); - $num_headers = count($header); - for($i = 0; $i < $num_headers; ++$i) { - $this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1); - } - $this->Ln(); - // Color and font restoration - $this->SetFillColor(224, 235, 255); - $this->SetTextColor(0); - $this->SetFont(''); - // Data - $fill = 0; - foreach($data as $row) { - $this->Cell($w[0], 6, $row[0], 'LR', 0, 'L', $fill); - $this->Cell($w[1], 6, $row[1], 'LR', 0, 'L', $fill); - $this->Cell($w[2], 6, number_format($row[2]), 'LR', 0, 'R', $fill); - $this->Cell($w[3], 6, number_format($row[3]), 'LR', 0, 'R', $fill); - $this->Ln(); - $fill=!$fill; - } - $this->Cell(array_sum($w), 0, '', 'T'); - } -} - -// create new PDF document -$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 011'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 011', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 12); - -// add a page -$pdf->AddPage(); - -// column titles -$header = array('Country', 'Capital', 'Area (sq km)', 'Pop. (thousands)'); - -// data loading -$data = $pdf->LoadData('data/table_data_demo.txt'); - -// print colored table -$pdf->ColoredTable($header, $data); - -// --------------------------------------------------------- - -// close and output PDF document -$pdf->Output('example_011.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_012.pdf b/htdocs/includes/tecnickcom/tcpdf/examples/example_012.pdf deleted file mode 100644 index eec8ee0cd916cb7a7fadbaa9e7a5c8d2581ca902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13214 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 diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_012.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_012.php deleted file mode 100644 index aaa196b7a7d..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_012.php +++ /dev/null @@ -1,205 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 012'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// disable header and footer -$pdf->setPrintHeader(false); -$pdf->setPrintFooter(false); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 10); - -// add a page -$pdf->AddPage(); - -$style = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,20,5,10', 'phase' => 10, 'color' => array(255, 0, 0)); -$style2 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)); -$style3 = array('width' => 1, 'cap' => 'round', 'join' => 'round', 'dash' => '2,10', 'color' => array(255, 0, 0)); -$style4 = array('L' => 0, - 'T' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '20,10', 'phase' => 10, 'color' => array(100, 100, 255)), - 'R' => array('width' => 0.50, 'cap' => 'round', 'join' => 'miter', 'dash' => 0, 'color' => array(50, 50, 127)), - 'B' => array('width' => 0.75, 'cap' => 'square', 'join' => 'miter', 'dash' => '30,10,5,10')); -$style5 = array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 64, 128)); -$style6 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,10', 'color' => array(0, 128, 0)); -$style7 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 128, 0)); - -// Line -$pdf->Text(5, 4, 'Line examples'); -$pdf->Line(5, 10, 80, 30, $style); -$pdf->Line(5, 10, 5, 30, $style2); -$pdf->Line(5, 10, 80, 10, $style3); - -// Rect -$pdf->Text(100, 4, 'Rectangle examples'); -$pdf->Rect(100, 10, 40, 20, 'DF', $style4, array(220, 220, 200)); -$pdf->Rect(145, 10, 40, 20, 'D', array('all' => $style3)); - -// Curve -$pdf->Text(5, 34, 'Curve examples'); -$pdf->Curve(5, 40, 30, 55, 70, 45, 60, 75, null, $style6); -$pdf->Curve(80, 40, 70, 75, 150, 45, 100, 75, 'F', $style6); -$pdf->Curve(140, 40, 150, 55, 180, 45, 200, 75, 'DF', $style6, array(200, 220, 200)); - -// Circle and ellipse -$pdf->Text(5, 79, 'Circle and ellipse examples'); -$pdf->SetLineStyle($style5); -$pdf->Circle(25,105,20); -$pdf->Circle(25,105,10, 90, 180, null, $style6); -$pdf->Circle(25,105,10, 270, 360, 'F'); -$pdf->Circle(25,105,10, 270, 360, 'C', $style6); - -$pdf->SetLineStyle($style5); -$pdf->Ellipse(100,103,40,20); -$pdf->Ellipse(100,105,20,10, 0, 90, 180, null, $style6); -$pdf->Ellipse(100,105,20,10, 0, 270, 360, 'DF', $style6); - -$pdf->SetLineStyle($style5); -$pdf->Ellipse(175,103,30,15,45); -$pdf->Ellipse(175,105,15,7.50, 45, 90, 180, null, $style6); -$pdf->Ellipse(175,105,15,7.50, 45, 270, 360, 'F', $style6, array(220, 200, 200)); - -// Polygon -$pdf->Text(5, 129, 'Polygon examples'); -$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); -$pdf->Polygon(array(5,135,45,135,15,165)); -$pdf->Polygon(array(60,135,80,135,80,155,70,165,50,155), 'DF', array($style6, $style7, $style7, 0, $style6), array(220, 200, 200)); -$pdf->Polygon(array(120,135,140,135,150,155,110,155), 'D', array($style6, 0, $style7, $style6)); -$pdf->Polygon(array(160,135,190,155,170,155,200,160,160,165), 'DF', array('all' => $style6), array(220, 220, 220)); - -// Polygonal Line -$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 164))); -$pdf->PolyLine(array(80,165,90,160,100,165,110,160,120,165,130,160,140,165), 'D', array(), array()); - -// Regular polygon -$pdf->Text(5, 169, 'Regular polygon examples'); -$pdf->SetLineStyle($style5); -$pdf->RegularPolygon(20, 190, 15, 6, 0, 1, 'F'); -$pdf->RegularPolygon(55, 190, 15, 6); -$pdf->RegularPolygon(55, 190, 10, 6, 45, 0, 'DF', array($style6, 0, $style7, 0, $style7, $style7)); -$pdf->RegularPolygon(90, 190, 15, 3, 0, 1, 'DF', array('all' => $style5), array(200, 220, 200), 'F', array(255, 200, 200)); -$pdf->RegularPolygon(125, 190, 15, 4, 30, 1, null, array('all' => $style5), null, null, $style6); -$pdf->RegularPolygon(160, 190, 15, 10); - -// Star polygon -$pdf->Text(5, 209, 'Star polygon examples'); -$pdf->SetLineStyle($style5); -$pdf->StarPolygon(20, 230, 15, 20, 3, 0, 1, 'F'); -$pdf->StarPolygon(55, 230, 15, 12, 5); -$pdf->StarPolygon(55, 230, 7, 12, 5, 45, 0, 'DF', array('all' => $style7), array(220, 220, 200), 'F', array(255, 200, 200)); -$pdf->StarPolygon(90, 230, 15, 20, 6, 0, 1, 'DF', array('all' => $style5), array(220, 220, 200), 'F', array(255, 200, 200)); -$pdf->StarPolygon(125, 230, 15, 5, 2, 30, 1, null, array('all' => $style5), null, null, $style6); -$pdf->StarPolygon(160, 230, 15, 10, 3); -$pdf->StarPolygon(160, 230, 7, 50, 26); - -// Rounded rectangle -$pdf->Text(5, 249, 'Rounded rectangle examples'); -$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); -$pdf->RoundedRect(5, 255, 40, 30, 3.50, '1111', 'DF'); -$pdf->RoundedRect(50, 255, 40, 30, 6.50, '1000'); -$pdf->RoundedRect(95, 255, 40, 30, 10.0, '1111', null, $style6); -$pdf->RoundedRect(140, 255, 40, 30, 8.0, '0101', 'DF', $style6, array(200, 200, 200)); - -// Arrows -$pdf->Text(185, 249, 'Arrows'); -$pdf->SetLineStyle($style5); -$pdf->SetFillColor(255, 0, 0); -$pdf->Arrow(200, 280, 185, 266, 0, 5, 15); -$pdf->Arrow(200, 280, 190, 263, 1, 5, 15); -$pdf->Arrow(200, 280, 195, 261, 2, 5, 15); -$pdf->Arrow(200, 280, 200, 260, 3, 5, 15); - -// - . - . - . - . - . - . - . - . - . - . - . - . - . - . - - -// ellipse - -// add a page -$pdf->AddPage(); - -$pdf->Cell(0, 0, 'Arc of Ellipse'); - -// center of ellipse -$xc=100; -$yc=100; - -// X Y axis -$pdf->SetDrawColor(200, 200, 200); -$pdf->Line($xc-50, $yc, $xc+50, $yc); -$pdf->Line($xc, $yc-50, $xc, $yc+50); - -// ellipse axis -$pdf->SetDrawColor(200, 220, 255); -$pdf->Line($xc-50, $yc-50, $xc+50, $yc+50); -$pdf->Line($xc-50, $yc+50, $xc+50, $yc-50); - -// ellipse -$pdf->SetDrawColor(200, 255, 200); -$pdf->Ellipse($xc, $yc, 30, 15, 45, 0, 360, 'D', array(), array(), 2); - -// ellipse arc -$pdf->SetDrawColor(255, 0, 0); -$pdf->Ellipse($xc, $yc, 30, 15, 45, 45, 90, 'D', array(), array(), 2); - - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_012.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_013.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_013.php deleted file mode 100644 index a472760c1c8..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_013.php +++ /dev/null @@ -1,229 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 013'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 013', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Graphic Transformations', '', 0, 'C', 1, 0, false, false, 0); - -// set font -$pdf->SetFont('helvetica', '', 10); - -// --- Scaling --------------------------------------------- -$pdf->SetDrawColor(200); -$pdf->SetTextColor(200); -$pdf->Rect(50, 70, 40, 10, 'D'); -$pdf->Text(50, 66, 'Scale'); -$pdf->SetDrawColor(0); -$pdf->SetTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// Scale by 150% centered by (50,80) which is the lower left corner of the rectangle -$pdf->ScaleXY(150, 50, 80); -$pdf->Rect(50, 70, 40, 10, 'D'); -$pdf->Text(50, 66, 'Scale'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Translation ----------------------------------------- -$pdf->SetDrawColor(200); -$pdf->SetTextColor(200); -$pdf->Rect(125, 70, 40, 10, 'D'); -$pdf->Text(125, 66, 'Translate'); -$pdf->SetDrawColor(0); -$pdf->SetTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// Translate 7 to the right, 5 to the bottom -$pdf->Translate(7, 5); -$pdf->Rect(125, 70, 40, 10, 'D'); -$pdf->Text(125, 66, 'Translate'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Rotation -------------------------------------------- -$pdf->SetDrawColor(200); -$pdf->SetTextColor(200); -$pdf->Rect(70, 100, 40, 10, 'D'); -$pdf->Text(70, 96, 'Rotate'); -$pdf->SetDrawColor(0); -$pdf->SetTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// Rotate 20 degrees counter-clockwise centered by (70,110) which is the lower left corner of the rectangle -$pdf->Rotate(20, 70, 110); -$pdf->Rect(70, 100, 40, 10, 'D'); -$pdf->Text(70, 96, 'Rotate'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Skewing --------------------------------------------- -$pdf->SetDrawColor(200); -$pdf->SetTextColor(200); -$pdf->Rect(125, 100, 40, 10, 'D'); -$pdf->Text(125, 96, 'Skew'); -$pdf->SetDrawColor(0); -$pdf->SetTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// skew 30 degrees along the x-axis centered by (125,110) which is the lower left corner of the rectangle -$pdf->SkewX(30, 125, 110); -$pdf->Rect(125, 100, 40, 10, 'D'); -$pdf->Text(125, 96, 'Skew'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Mirroring horizontally ------------------------------ -$pdf->SetDrawColor(200); -$pdf->SetTextColor(200); -$pdf->Rect(70, 130, 40, 10, 'D'); -$pdf->Text(70, 126, 'MirrorH'); -$pdf->SetDrawColor(0); -$pdf->SetTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// mirror horizontally with axis of reflection at x-position 70 (left side of the rectangle) -$pdf->MirrorH(70); -$pdf->Rect(70, 130, 40, 10, 'D'); -$pdf->Text(70, 126, 'MirrorH'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Mirroring vertically -------------------------------- -$pdf->SetDrawColor(200); -$pdf->SetTextColor(200); -$pdf->Rect(125, 130, 40, 10, 'D'); -$pdf->Text(125, 126, 'MirrorV'); -$pdf->SetDrawColor(0); -$pdf->SetTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// mirror vertically with axis of reflection at y-position 140 (bottom side of the rectangle) -$pdf->MirrorV(140); -$pdf->Rect(125, 130, 40, 10, 'D'); -$pdf->Text(125, 126, 'MirrorV'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Point reflection ------------------------------------ -$pdf->SetDrawColor(200); -$pdf->SetTextColor(200); -$pdf->Rect(70, 160, 40, 10, 'D'); -$pdf->Text(70, 156, 'MirrorP'); -$pdf->SetDrawColor(0); -$pdf->SetTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// point reflection at the lower left point of rectangle -$pdf->MirrorP(70,170); -$pdf->Rect(70, 160, 40, 10, 'D'); -$pdf->Text(70, 156, 'MirrorP'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Mirroring against a straigth line described by a point (120, 120) and an angle -20° -$angle=-20; -$px=120; -$py=170; - -// just for visualisation: the straight line to mirror against - -$pdf->SetDrawColor(200); -$pdf->Line($px-1,$py-1,$px+1,$py+1); -$pdf->Line($px-1,$py+1,$px+1,$py-1); -$pdf->StartTransform(); -$pdf->Rotate($angle, $px, $py); -$pdf->Line($px-5, $py, $px+60, $py); -$pdf->StopTransform(); - -$pdf->SetDrawColor(200); -$pdf->SetTextColor(200); -$pdf->Rect(125, 160, 40, 10, 'D'); -$pdf->Text(125, 156, 'MirrorL'); -$pdf->SetDrawColor(0); -$pdf->SetTextColor(0); -//Start Transformation -$pdf->StartTransform(); -//mirror against the straight line -$pdf->MirrorL($angle, $px, $py); -$pdf->Rect(125, 160, 40, 10, 'D'); -$pdf->Text(125, 156, 'MirrorL'); -//Stop Transformation -$pdf->StopTransform(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_013.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_014.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_014.php deleted file mode 100644 index 27e4efc460c..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_014.php +++ /dev/null @@ -1,194 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 014'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 014', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// IMPORTANT: disable font subsetting to allow users editing the document -$pdf->setFontSubsetting(false); - -// set font -$pdf->SetFont('helvetica', '', 10, '', false); - -// add a page -$pdf->AddPage(); - -/* -It is possible to create text fields, combo boxes, check boxes and buttons. -Fields are created at the current position and are given a name. -This name allows to manipulate them via JavaScript in order to perform some validation for instance. -*/ - -// set default form properties -$pdf->setFormDefaultProp(array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 200), 'strokeColor'=>array(255, 128, 128))); - -$pdf->SetFont('helvetica', 'BI', 18); -$pdf->Cell(0, 5, 'Example of Form', 0, 1, 'C'); -$pdf->Ln(10); - -$pdf->SetFont('helvetica', '', 12); - -// First name -$pdf->Cell(35, 5, 'First name:'); -$pdf->TextField('firstname', 50, 5); -$pdf->Ln(6); - -// Last name -$pdf->Cell(35, 5, 'Last name:'); -$pdf->TextField('lastname', 50, 5); -$pdf->Ln(6); - -// Gender -$pdf->Cell(35, 5, 'Gender:'); -$pdf->ComboBox('gender', 30, 5, array(array('', '-'), array('M', 'Male'), array('F', 'Female'))); -$pdf->Ln(6); - -// Drink -$pdf->Cell(35, 5, 'Drink:'); -//$pdf->RadioButton('drink', 5, array('readonly' => 'true'), array(), 'Water'); -$pdf->RadioButton('drink', 5, array(), array(), 'Water'); -$pdf->Cell(35, 5, 'Water'); -$pdf->Ln(6); -$pdf->Cell(35, 5, ''); -$pdf->RadioButton('drink', 5, array(), array(), 'Beer', true); -$pdf->Cell(35, 5, 'Beer'); -$pdf->Ln(6); -$pdf->Cell(35, 5, ''); -$pdf->RadioButton('drink', 5, array(), array(), 'Wine'); -$pdf->Cell(35, 5, 'Wine'); -$pdf->Ln(6); -$pdf->Cell(35, 5, ''); -$pdf->RadioButton('drink', 5, array(), array(), 'Milk'); -$pdf->Cell(35, 5, 'Milk'); -$pdf->Ln(10); - -// Newsletter -$pdf->Cell(35, 5, 'Newsletter:'); -$pdf->CheckBox('newsletter', 5, true, array(), array(), 'OK'); - -$pdf->Ln(10); -// Address -$pdf->Cell(35, 5, 'Address:'); -$pdf->TextField('address', 60, 18, array('multiline'=>true, 'lineWidth'=>0, 'borderStyle'=>'none'), array('v'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'dv'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit.')); -$pdf->Ln(19); - -// Listbox -$pdf->Cell(35, 5, 'List:'); -$pdf->ListBox('listbox', 60, 15, array('', 'item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7'), array('multipleSelection'=>'true')); -$pdf->Ln(20); - -// E-mail -$pdf->Cell(35, 5, 'E-mail:'); -$pdf->TextField('email', 50, 5); -$pdf->Ln(6); - -// Date of the day -$pdf->Cell(35, 5, 'Date:'); -$pdf->TextField('date', 30, 5, array(), array('v'=>date('Y-m-d'), 'dv'=>date('Y-m-d'))); -$pdf->Ln(10); - -$pdf->SetX(50); - -// Button to validate and print -$pdf->Button('print', 30, 10, 'Print', 'Print()', array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); - -// Reset Button -$pdf->Button('reset', 30, 10, 'Reset', array('S'=>'ResetForm'), array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); - -// Submit Button -$pdf->Button('submit', 30, 10, 'Submit', array('S'=>'SubmitForm', 'F'=>'http://localhost/printvars.php', 'Flags'=>array('ExportFormat')), array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); - -// Form validation functions -$js = <<IncludeJS($js); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_014.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_015.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_015.php deleted file mode 100644 index 4cc03cabe20..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_015.php +++ /dev/null @@ -1,161 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 015'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 015', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// Bookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0)) - -// set font -$pdf->SetFont('times', 'B', 20); - -// add a page -$pdf->AddPage(); - -// set a bookmark for the current position -$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); - -// print a line using Cell() -$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); - -$pdf->SetFont('times', 'I', 14); -$pdf->Write(0, 'You can set PDF Bookmarks using the Bookmark() method. -You can set PDF Named Destinations using the setDestination() method.'); - -$pdf->SetFont('times', 'B', 20); - -// add other pages and bookmarks - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(0,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(0,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,0,0)); -$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(0,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); - -$pdf->AddPage(); -// add a named destination so you can open this document at this page using the link: "example_015.pdf#chapter2" -$pdf->setDestination('chapter2', 0, ''); -// add a bookmark that points to a named destination -$pdf->Bookmark('Chapter 2', 0, 0, '', 'BI', array(128,0,0), -1, '#chapter2'); -$pdf->Cell(0, 10, 'Chapter 2', 0, 1, 'L'); -$pdf->SetFont('times', 'I', 14); -$pdf->Write(0, 'Once saved, you can open this document at this page using the link: "example_015.pdf#chapter2".'); - -$pdf->AddPage(); -$pdf->setDestination('chapter3', 0, ''); -$pdf->SetFont('times', 'B', 20); -$pdf->Bookmark('Chapter 3', 0, 0, '', 'B', array(0,64,128)); -$pdf->Cell(0, 10, 'Chapter 3', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->setDestination('chapter4', 0, ''); -$pdf->SetFont('times', 'B', 20); -$pdf->Bookmark('Chapter 4', 0, 0, '', 'B', array(0,64,128)); -$pdf->Cell(0, 10, 'Chapter 4', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Chapter 5', 0, 0, '', 'B', array(0,128,0)); -$pdf->Cell(0, 10, 'Chapter 5', 0, 1, 'L'); -$txt = 'Example of File Attachment. -Double click on the icon to open the attached file.'; -$pdf->SetFont('helvetica', '', 10); -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// attach an external file TXT file -$pdf->Annotation(20, 50, 5, 5, 'TXT file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'data/utf8test.txt')); - -// attach an external file -$pdf->Annotation(50, 50, 5, 5, 'PDF file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'example_012.pdf')); - -// add a bookmark that points to an embedded file -// NOTE: prefix the file name with the * character for generic file and with % character for PDF file -$pdf->Bookmark('TXT file', 0, 0, '', 'B', array(128,0,255), -1, '*utf8test.txt'); - -// add a bookmark that points to an embedded file -// NOTE: prefix the file name with the * character for generic file and with % character for PDF file -$pdf->Bookmark('PDF file', 0, 0, '', 'B', array(128,0,255), -1, '%example_012.pdf'); - -// add a bookmark that points to an external URL -$pdf->Bookmark('External URL', 0, 0, '', 'B', array(0,0,255), -1, 'http://www.tcpdf.org'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_015.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_016.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_016.php deleted file mode 100644 index 34284f20fb3..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_016.php +++ /dev/null @@ -1,134 +0,0 @@ -SetProtection(array('print', 'copy'), '', null, 0, null); - -// Example with public-key -// To open the document you need to install the private key (tcpdf.p12) on the Acrobat Reader. The password is: 1234 -//$pdf->SetProtection($permissions=array('print', 'copy'), $user_pass='', $owner_pass=null, $mode=1, $pubkeys=array(array('c' => 'file://../config/cert/tcpdf.crt', 'p' => array('print')))); - -// ********************************************************* - - -// set document information -$pdf->SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 016'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 016', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array('helvetica', '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array('helvetica', '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 16); - -// add a page -$pdf->AddPage(); - -// set some text to print -$txt = <<Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_016.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_017.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_017.php deleted file mode 100644 index 1324091c872..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_017.php +++ /dev/null @@ -1,117 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 017'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 017', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of independent Multicell() columns', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(5); - -$pdf->SetFont('times', '', 12); - -// create columns content -// create columns content -$left_column = '[LEFT COLUMN] left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column'."\n"; - -$right_column = '[RIGHT COLUMN] right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column'."\n"; - -// MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) - -// set color for background -$pdf->SetFillColor(255, 255, 200); - -// set color for text -$pdf->SetTextColor(0, 63, 127); - -// write the first column -$pdf->MultiCell(80, 0, $left_column, 1, 'J', 1, 0, '', '', true, 0, false, true, 0); - -// set color for background -$pdf->SetFillColor(215, 235, 255); - -// set color for text -$pdf->SetTextColor(127, 31, 0); - -// write the second column -$pdf->MultiCell(80, 0, $right_column, 1, 'J', 1, 1, '', '', true, 0, false, true, 0); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_017.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_018.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_018.php deleted file mode 100644 index a97a44ac86a..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_018.php +++ /dev/null @@ -1,128 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 018'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 018', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language dependent data: -$lg = Array(); -$lg['a_meta_charset'] = 'UTF-8'; -$lg['a_meta_dir'] = 'rtl'; -$lg['a_meta_language'] = 'fa'; -$lg['w_page'] = 'page'; - -// set some language-dependent strings (optional) -$pdf->setLanguageArray($lg); - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('dejavusans', '', 12); - -// add a page -$pdf->AddPage(); - -// Persian and English content -$htmlpersian = 'Persian example:
      سلام بالاخره مشکل PDF فارسی به طور کامل حل شد. اینم یک نمونش.
      مشکل حرف \"ژ\" در بعضی کلمات مانند کلمه ویژه نیز بر طرف شد.
      نگارش حروف لام و الف پشت سر هم نیز تصحیح شد.
      با تشکر از "Asuni Nicola" و محمد علی گل کار برای پشتیبانی زبان فارسی.'; -$pdf->WriteHTML($htmlpersian, true, 0, true, 0); - -// set LTR direction for english translation -$pdf->setRTL(false); - -$pdf->SetFontSize(10); - -// print newline -$pdf->Ln(); - -// Persian and English content -$htmlpersiantranslation = 'Hi, At last Problem of Persian PDF Solved completely. This is a example for it.
      Problem of "jeh" letter in some word like "ویژه" (=special) fix too.
      The joining of laa and alf letter fix now.
      Special thanks to "Nicola Asuni" and "Mohamad Ali Golkar" for Persian support.
      '; -$pdf->WriteHTML($htmlpersiantranslation, true, 0, true, 0); - -// Restore RTL direction -$pdf->setRTL(true); - -// set font -$pdf->SetFont('aefurat', '', 18); - -// print newline -$pdf->Ln(); - -// Arabic and English content -$pdf->Cell(0, 12, 'بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ',0,1,'C'); -$htmlcontent = 'تمَّ بِحمد الله حلّ مشكلة الكتابة باللغة العربية في ملفات الـPDF مع دعم الكتابة من اليمين إلى اليسار والحركَات .
      تم الحل بواسطة صالح المطرفي و Asuni Nicola . '; -$pdf->WriteHTML($htmlcontent, true, 0, true, 0); - -// set LTR direction for english translation -$pdf->setRTL(false); - -// print newline -$pdf->Ln(); - -$pdf->SetFont('aealarabiya', '', 18); - -// Arabic and English content -$htmlcontent2 = 'This is Arabic "العربية" Example With TCPDF.'; -$pdf->WriteHTML($htmlcontent2, true, 0, true, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_018.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_019.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_019.php deleted file mode 100644 index a1d5f08ab69..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_019.php +++ /dev/null @@ -1,98 +0,0 @@ -SetDocInfoUnicode(true); - -// set document information -$pdf->SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni [€]'); -$pdf->SetTitle('TCPDF Example 019'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 019', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language dependent data: -$lg = Array(); -$lg['a_meta_charset'] = 'ISO-8859-1'; -$lg['a_meta_dir'] = 'ltr'; -$lg['a_meta_language'] = 'en'; -$lg['w_page'] = 'page'; - -// set some language-dependent strings (optional) -$pdf->setLanguageArray($lg); - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 12); - -// add a page -$pdf->AddPage(); - -// set color for background -$pdf->SetFillColor(200, 255, 200); - -$txt = 'An alternative configuration file is used on this example. -Check the definition of the K_TCPDF_EXTERNAL_CONFIG constant on the source code.'; - -// print some text -$pdf->MultiCell(0, 0, $txt."\n", 1, 'J', 1, 1, '', '', true, 0, false, true, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_019.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_020.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_020.php deleted file mode 100644 index 6204f746184..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_020.php +++ /dev/null @@ -1,146 +0,0 @@ -getPage(); - $y_start = $this->GetY(); - - // write the left cell - $this->MultiCell(40, 0, $left, 1, 'R', 1, 2, '', '', true, 0); - - $page_end_1 = $this->getPage(); - $y_end_1 = $this->GetY(); - - $this->setPage($page_start); - - // write the right cell - $this->MultiCell(0, 0, $right, 1, 'J', 0, 1, $this->GetX() ,$y_start, true, 0); - - $page_end_2 = $this->getPage(); - $y_end_2 = $this->GetY(); - - // set the new row position by case - if (max($page_end_1,$page_end_2) == $page_start) { - $ynew = max($y_end_1, $y_end_2); - } elseif ($page_end_1 == $page_end_2) { - $ynew = max($y_end_1, $y_end_2); - } elseif ($page_end_1 > $page_end_2) { - $ynew = $y_end_1; - } else { - $ynew = $y_end_2; - } - - $this->setPage(max($page_end_1,$page_end_2)); - $this->SetXY($this->GetX(),$ynew); - } - -} - -// create new PDF document -$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 020'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 020', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 20); -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of text layout using Multicell()', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(5); - -$pdf->SetFont('times', '', 9); - -//$pdf->SetCellPadding(0); -//$pdf->SetLineWidth(2); - -// set color for background -$pdf->SetFillColor(255, 255, 200); - -$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. - -Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.'; - -// print some rows just as example -for ($i = 0; $i < 10; ++$i) { - $pdf->MultiRow('Row '.($i+1), $text."\n"); -} - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_020.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_021.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_021.php deleted file mode 100644 index 65e39fbf0d0..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_021.php +++ /dev/null @@ -1,91 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 021'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 021', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 9); - -// add a page -$pdf->AddPage(); - -// create some HTML content -$html = '

      Example of HTML text flow

      Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

      A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B    ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B

      BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined'; - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, 0); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_021.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_022.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_022.php deleted file mode 100644 index ca35d68a439..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_022.php +++ /dev/null @@ -1,146 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 022'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 022', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// check also the following methods: -// SetDrawColorArray() -// SetFillColorArray() -// SetTextColorArray() - -// set font -$pdf->SetFont('helvetica', 'B', 18); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of CMYK, RGB and Grayscale colours', '', 0, 'L', true, 0, false, false, 0); - -// define style for border -$border_style = array('all' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'phase' => 0)); - -// --- CMYK ------------------------------------------------ - -$pdf->SetDrawColor(50, 0, 0, 0); -$pdf->SetFillColor(100, 0, 0, 0); -$pdf->SetTextColor(100, 0, 0, 0); -$pdf->Rect(30, 60, 30, 30, 'DF', $border_style); -$pdf->Text(30, 92, 'Cyan'); - -$pdf->SetDrawColor(0, 50, 0, 0); -$pdf->SetFillColor(0, 100, 0, 0); -$pdf->SetTextColor(0, 100, 0, 0); -$pdf->Rect(70, 60, 30, 30, 'DF', $border_style); -$pdf->Text(70, 92, 'Magenta'); - -$pdf->SetDrawColor(0, 0, 50, 0); -$pdf->SetFillColor(0, 0, 100, 0); -$pdf->SetTextColor(0, 0, 100, 0); -$pdf->Rect(110, 60, 30, 30, 'DF', $border_style); -$pdf->Text(110, 92, 'Yellow'); - -$pdf->SetDrawColor(0, 0, 0, 50); -$pdf->SetFillColor(0, 0, 0, 100); -$pdf->SetTextColor(0, 0, 0, 100); -$pdf->Rect(150, 60, 30, 30, 'DF', $border_style); -$pdf->Text(150, 92, 'Black'); - -// --- RGB ------------------------------------------------- - -$pdf->SetDrawColor(255, 127, 127); -$pdf->SetFillColor(255, 0, 0); -$pdf->SetTextColor(255, 0, 0); -$pdf->Rect(30, 110, 30, 30, 'DF', $border_style); -$pdf->Text(30, 142, 'Red'); - -$pdf->SetDrawColor(127, 255, 127); -$pdf->SetFillColor(0, 255, 0); -$pdf->SetTextColor(0, 255, 0); -$pdf->Rect(70, 110, 30, 30, 'DF', $border_style); -$pdf->Text(70, 142, 'Green'); - -$pdf->SetDrawColor(127, 127, 255); -$pdf->SetFillColor(0, 0, 255); -$pdf->SetTextColor(0, 0, 255); -$pdf->Rect(110, 110, 30, 30, 'DF', $border_style); -$pdf->Text(110, 142, 'Blue'); - -// --- GRAY ------------------------------------------------ - -$pdf->SetDrawColor(191); -$pdf->SetFillColor(127); -$pdf->SetTextColor(127); -$pdf->Rect(30, 160, 30, 30, 'DF', $border_style); -$pdf->Text(30, 192, 'Gray'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_022.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_023.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_023.php deleted file mode 100644 index dbb8b9831f8..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_023.php +++ /dev/null @@ -1,113 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 023'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 023', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', 'BI', 14); - -// Start First Page Group -$pdf->startPageGroup(); - -// add a page -$pdf->AddPage(); - -// set some text to print -$txt = <<Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// add second page -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the second page of group 1', 0, 1, 'L'); - -// Start Second Page Group -$pdf->startPageGroup(); - -// add some pages -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the first page of group 2', 0, 1, 'L'); -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the second page of group 2', 0, 1, 'L'); -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the third page of group 2', 0, 1, 'L'); -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the fourth page of group 2', 0, 1, 'L'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_023.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_024.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_024.php deleted file mode 100644 index b60d12dc736..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_024.php +++ /dev/null @@ -1,140 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 024'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 024', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 18); - -// add a page -$pdf->AddPage(); - -/* - * setVisibility() allows to restrict the rendering of some - * elements to screen or printout. This can be useful, for - * instance, to put a background image or color that will - * show on screen but won't print. - */ - -$txt = 'You can limit the visibility of PDF objects to screen or printer by using the setVisibility() method. -Check the print preview of this document to display the alternative text.'; - -$pdf->Write(0, $txt, '', 0, '', true, 0, false, false, 0); - -// change font size -$pdf->SetFontSize(40); - -// change text color -$pdf->SetTextColor(0,63,127); - -// set visibility only for screen -$pdf->setVisibility('screen'); - -// write something only for screen -$pdf->Write(0, '[This line is for display]', '', 0, 'C', true, 0, false, false, 0); - -// set visibility only for print -$pdf->setVisibility('print'); - -// change text color -$pdf->SetTextColor(127,0,0); - -// write something only for print -$pdf->Write(0, '[This line is for printout]', '', 0, 'C', true, 0, false, false, 0); - -// restore visibility -$pdf->setVisibility('all'); - -// --------------------------------------------------------- - -// LAYERS - -// start a new layer -$pdf->startLayer('layer1', true, true); - -// change font size -$pdf->SetFontSize(18); - -// change text color -$pdf->SetTextColor(0,127,0); - -$txt = 'Using the startLayer() method you can group PDF objects into layers. -This text is on "layer1".'; - -// write something -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// close the current layer -$pdf->endLayer(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_024.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_025.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_025.php deleted file mode 100644 index 1260d6207e5..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_025.php +++ /dev/null @@ -1,118 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 025'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 025', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 12); - -// add a page -$pdf->AddPage(); - -$txt = 'You can set the transparency of PDF objects using the setAlpha() method.'; -$pdf->Write(0, $txt, '', 0, '', true, 0, false, false, 0); - -/* - * setAlpha() gives transparency support. You can set the - * alpha channel from 0 (fully transparent) to 1 (fully - * opaque). It applies to all elements (text, drawings, - * images). - */ - -$pdf->SetLineWidth(2); - -// draw opaque red square -$pdf->SetFillColor(255, 0, 0); -$pdf->SetDrawColor(127, 0, 0); -$pdf->Rect(30, 40, 60, 60, 'DF'); - -// set alpha to semi-transparency -$pdf->SetAlpha(0.5); - -// draw green square -$pdf->SetFillColor(0, 255, 0); -$pdf->SetDrawColor(0, 127, 0); -$pdf->Rect(50, 60, 60, 60, 'DF'); - -// draw blue square -$pdf->SetFillColor(0, 0, 255); -$pdf->SetDrawColor(0, 0, 127); -$pdf->Rect(70, 80, 60, 60, 'DF'); - -// draw jpeg image -$pdf->Image('images/image_demo.jpg', 90, 100, 60, 60, '', 'http://www.tcpdf.org', '', true, 72); - -// restore full opacity -$pdf->SetAlpha(1); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_025.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_026.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_026.php deleted file mode 100644 index 5646e9151a0..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_026.php +++ /dev/null @@ -1,145 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 026'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 026', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 22); - -// add a page -$pdf->AddPage(); - -// set color for text stroke -$pdf->SetDrawColor(255,0,0); - - -$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=false); -$pdf->Write(0, 'Fill text', '', 0, '', true, 0, false, false, 0); - -$pdf->setTextRenderingMode($stroke=0.2, $fill=false, $clip=false); -$pdf->Write(0, 'Stroke text', '', 0, '', true, 0, false, false, 0); - -$pdf->setTextRenderingMode($stroke=0.2, $fill=true, $clip=false); -$pdf->Write(0, 'Fill, then stroke text', '', 0, '', true, 0, false, false, 0); - -$pdf->setTextRenderingMode($stroke=0, $fill=false, $clip=false); -$pdf->Write(0, 'Neither fill nor stroke text (invisible)', '', 0, '', true, 0, false, false, 0); - - -// * * * CLIPPING MODES * * * * * * * * * * * * * * * * * * - -$pdf->StartTransform(); -$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=true); -$pdf->Write(0, 'Fill text and add to path for clipping', '', 0, '', true, 0, false, false, 0); -$pdf->Image('images/image_demo.jpg', 15, 65, 170, 10, '', '', '', true, 72); -$pdf->StopTransform(); - -$pdf->StartTransform(); -$pdf->setTextRenderingMode($stroke=0.3, $fill=false, $clip=true); -$pdf->Write(0, 'Stroke text and add to path for clipping', '', 0, '', true, 0, false, false, 0); -$pdf->Image('images/image_demo.jpg', 15, 75, 170, 10, '', '', '', true, 72); -$pdf->StopTransform(); - -$pdf->StartTransform(); -$pdf->setTextRenderingMode($stroke=0.3, $fill=true, $clip=true); -$pdf->Write(0, 'Fill, then stroke text and add to path for clipping', '', 0, '', true, 0, false, false, 0); -$pdf->Image('images/image_demo.jpg', 15, 85, 170, 10, '', '', '', true, 72); -$pdf->StopTransform(); - -$pdf->StartTransform(); -$pdf->setTextRenderingMode($stroke=0, $fill=false, $clip=true); -$pdf->Write(0, 'Add text to path for clipping', '', 0, '', true, 0, false, false, 0); -$pdf->Image('images/image_demo.jpg', 15, 95, 170, 10, '', '', '', true, 72); -$pdf->StopTransform(); - -// reset text rendering mode -$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=false); - -// * * * HTML MODE * * * * * * * * * * * * * * * * * * * * * - -// The following attributes were added to HTML: -// stroke : stroke width -// strokecolor : stroke color -// fill : true (default) to fill the font, false otherwise - - -// create some HTML content with text rendering modes -$html = 'HTML Fill text
      '; -$html .= 'HTML Stroke text
      '; -$html .= 'HTML Fill, then stroke text
      '; -$html .= 'HTML Neither fill nor stroke text (invisible)
      '; - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_026.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_027.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_027.php deleted file mode 100644 index a23707451a8..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_027.php +++ /dev/null @@ -1,418 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 027'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 027', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set a barcode on the page footer -$pdf->setBarcode(date('Y-m-d H:i:s')); - -// set font -$pdf->SetFont('helvetica', '', 11); - -// add a page -$pdf->AddPage(); - -// print a message -$txt = "You can also export 1D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcodes directory.\n"; -$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false); -$pdf->SetY(30); - -// ----------------------------------------------------------------------------- - -$pdf->SetFont('helvetica', '', 10); - -// define barcode style -$style = array( - 'position' => '', - 'align' => 'C', - 'stretch' => false, - 'fitwidth' => true, - 'cellfitalign' => '', - 'border' => true, - 'hpadding' => 'auto', - 'vpadding' => 'auto', - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, //array(255,255,255), - 'text' => true, - 'font' => 'helvetica', - 'fontsize' => 8, - 'stretchtext' => 4 -); - -// PRINT VARIOUS 1D BARCODES - -// CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. -$pdf->Cell(0, 0, 'CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9', 0, 1); -$pdf->write1DBarcode('CODE 39', 'C39', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 39 + CHECKSUM -$pdf->Cell(0, 0, 'CODE 39 + CHECKSUM', 0, 1); -$pdf->write1DBarcode('CODE 39 +', 'C39+', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 39 EXTENDED -$pdf->Cell(0, 0, 'CODE 39 EXTENDED', 0, 1); -$pdf->write1DBarcode('CODE 39 E', 'C39E', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 39 EXTENDED + CHECKSUM -$pdf->Cell(0, 0, 'CODE 39 EXTENDED + CHECKSUM', 0, 1); -$pdf->write1DBarcode('CODE 39 E+', 'C39E+', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 93 - USS-93 -$pdf->Cell(0, 0, 'CODE 93 - USS-93', 0, 1); -$pdf->write1DBarcode('TEST93', 'C93', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// Standard 2 of 5 -$pdf->Cell(0, 0, 'Standard 2 of 5', 0, 1); -$pdf->write1DBarcode('1234567', 'S25', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// Standard 2 of 5 + CHECKSUM -$pdf->Cell(0, 0, 'Standard 2 of 5 + CHECKSUM', 0, 1); -$pdf->write1DBarcode('1234567', 'S25+', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// Interleaved 2 of 5 -$pdf->Cell(0, 0, 'Interleaved 2 of 5', 0, 1); -$pdf->write1DBarcode('1234567', 'I25', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// Interleaved 2 of 5 + CHECKSUM -$pdf->Cell(0, 0, 'Interleaved 2 of 5 + CHECKSUM', 0, 1); -$pdf->write1DBarcode('1234567', 'I25+', '', '', '', 18, 0.4, $style, 'N'); - - -// add a page ---------- -$pdf->AddPage(); - -// CODE 128 AUTO -$pdf->Cell(0, 0, 'CODE 128 AUTO', 0, 1); -$pdf->write1DBarcode('CODE 128 AUTO', 'C128', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 128 A -$pdf->Cell(0, 0, 'CODE 128 A', 0, 1); -$pdf->write1DBarcode('CODE 128 A', 'C128A', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 128 B -$pdf->Cell(0, 0, 'CODE 128 B', 0, 1); -$pdf->write1DBarcode('CODE 128 B', 'C128B', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 128 C -$pdf->Cell(0, 0, 'CODE 128 C', 0, 1); -$pdf->write1DBarcode('0123456789', 'C128C', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// EAN 8 -$pdf->Cell(0, 0, 'EAN 8', 0, 1); -$pdf->write1DBarcode('1234567', 'EAN8', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// EAN 13 -$pdf->Cell(0, 0, 'EAN 13', 0, 1); -$pdf->write1DBarcode('1234567890128', 'EAN13', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// UPC-A -$pdf->Cell(0, 0, 'UPC-A', 0, 1); -$pdf->write1DBarcode('12345678901', 'UPCA', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// UPC-E -$pdf->Cell(0, 0, 'UPC-E', 0, 1); -$pdf->write1DBarcode('04210000526', 'UPCE', '', '', '', 18, 0.4, $style, 'N'); - -// add a page ---------- -$pdf->AddPage(); - -// 5-Digits UPC-Based Extension -$pdf->Cell(0, 0, '5-Digits UPC-Based Extension', 0, 1); -$pdf->write1DBarcode('51234', 'EAN5', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// 2-Digits UPC-Based Extension -$pdf->Cell(0, 0, '2-Digits UPC-Based Extension', 0, 1); -$pdf->write1DBarcode('34', 'EAN2', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// MSI -$pdf->Cell(0, 0, 'MSI', 0, 1); -$pdf->write1DBarcode('80523', 'MSI', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// MSI + CHECKSUM (module 11) -$pdf->Cell(0, 0, 'MSI + CHECKSUM (module 11)', 0, 1); -$pdf->write1DBarcode('80523', 'MSI+', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODABAR -$pdf->Cell(0, 0, 'CODABAR', 0, 1); -$pdf->write1DBarcode('123456789', 'CODABAR', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 11 -$pdf->Cell(0, 0, 'CODE 11', 0, 1); -$pdf->write1DBarcode('123-456-789', 'CODE11', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// PHARMACODE -$pdf->Cell(0, 0, 'PHARMACODE', 0, 1); -$pdf->write1DBarcode('789', 'PHARMA', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// PHARMACODE TWO-TRACKS -$pdf->Cell(0, 0, 'PHARMACODE TWO-TRACKS', 0, 1); -$pdf->write1DBarcode('105', 'PHARMA2T', '', '', '', 18, 2, $style, 'N'); - -// add a page ---------- -$pdf->AddPage(); - -// IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200 -$pdf->Cell(0, 0, 'IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200', 0, 1); -$pdf->write1DBarcode('01234567094987654321-01234567891', 'IMB', '', '', '', 15, 0.6, $style, 'N'); - -$pdf->Ln(); - -// POSTNET -$pdf->Cell(0, 0, 'POSTNET', 0, 1); -$pdf->write1DBarcode('98000', 'POSTNET', '', '', '', 15, 0.6, $style, 'N'); - -$pdf->Ln(); - -// PLANET -$pdf->Cell(0, 0, 'PLANET', 0, 1); -$pdf->write1DBarcode('98000', 'PLANET', '', '', '', 15, 0.6, $style, 'N'); - -$pdf->Ln(); - -// RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) -$pdf->Cell(0, 0, 'RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code)', 0, 1); -$pdf->write1DBarcode('SN34RD1A', 'RMS4CC', '', '', '', 15, 0.6, $style, 'N'); - -$pdf->Ln(); - -// KIX (Klant index - Customer index) -$pdf->Cell(0, 0, 'KIX (Klant index - Customer index)', 0, 1); -$pdf->write1DBarcode('SN34RDX1A', 'KIX', '', '', '', 15, 0.6, $style, 'N'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// TEST BARCODE ALIGNMENTS - -// add a page -$pdf->AddPage(); - -// set a background color -$style['bgcolor'] = array(255,255,240); -$style['fgcolor'] = array(127,0,0); - -// Left position -$style['position'] = 'L'; -$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Center position -$style['position'] = 'C'; -$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Right position -$style['position'] = 'R'; -$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -$style['fgcolor'] = array(0,127,0); -$style['position'] = ''; -$style['stretch'] = false; // disable stretch -$style['fitwidth'] = false; // disable fitwidth - -// Left alignment -$style['align'] = 'L'; -$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Center alignment -$style['align'] = 'C'; -$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Right alignment -$style['align'] = 'R'; -$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -$style['fgcolor'] = array(0,64,127); -$style['position'] = ''; -$style['stretch'] = false; // disable stretch -$style['fitwidth'] = true; // disable fitwidth - -// Left alignment -$style['cellfitalign'] = 'L'; -$pdf->write1DBarcode('LEFT', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Center alignment -$style['cellfitalign'] = 'C'; -$pdf->write1DBarcode('CENTER', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Right alignment -$style['cellfitalign'] = 'R'; -$pdf->write1DBarcode('RIGHT', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); - -$pdf->Ln(2); -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -$style['fgcolor'] = array(127,0,127); - -// Left alignment -$style['position'] = 'L'; -$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Center alignment -$style['position'] = 'C'; -$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Right alignment -$style['position'] = 'R'; -$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// TEST BARCODE STYLE - -// define barcode style -$style = array( - 'position' => '', - 'align' => '', - 'stretch' => true, - 'fitwidth' => false, - 'cellfitalign' => '', - 'border' => true, - 'hpadding' => 'auto', - 'vpadding' => 'auto', - 'fgcolor' => array(0,0,128), - 'bgcolor' => array(255,255,128), - 'text' => true, - 'label' => 'CUSTOM LABEL', - 'font' => 'helvetica', - 'fontsize' => 8, - 'stretchtext' => 4 -); - -// CODE 39 EXTENDED + CHECKSUM -$pdf->Cell(0, 0, 'CODE 39 EXTENDED + CHECKSUM', 0, 1); -$pdf->SetLineStyle(array('width' => 1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); -$pdf->write1DBarcode('CODE 39 E+', 'C39E+', '', '', 120, 25, 0.4, $style, 'N'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_027.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_028.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_028.php deleted file mode 100644 index f250ac58970..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_028.php +++ /dev/null @@ -1,138 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 028'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// remove default header/footer -$pdf->setPrintHeader(false); -$pdf->setPrintFooter(false); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(10, PDF_MARGIN_TOP, 10); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -$pdf->SetDisplayMode('fullpage', 'SinglePage', 'UseNone'); - -// set font -$pdf->SetFont('times', 'B', 20); - -$pdf->AddPage('P', 'A4'); -$pdf->Cell(0, 0, 'A4 PORTRAIT', 1, 1, 'C'); - -$pdf->AddPage('L', 'A4'); -$pdf->Cell(0, 0, 'A4 LANDSCAPE', 1, 1, 'C'); - -$pdf->AddPage('P', 'A5'); -$pdf->Cell(0, 0, 'A5 PORTRAIT', 1, 1, 'C'); - -$pdf->AddPage('L', 'A5'); -$pdf->Cell(0, 0, 'A5 LANDSCAPE', 1, 1, 'C'); - -$pdf->AddPage('P', 'A6'); -$pdf->Cell(0, 0, 'A6 PORTRAIT', 1, 1, 'C'); - -$pdf->AddPage('L', 'A6'); -$pdf->Cell(0, 0, 'A6 LANDSCAPE', 1, 1, 'C'); - -$pdf->AddPage('P', 'A7'); -$pdf->Cell(0, 0, 'A7 PORTRAIT', 1, 1, 'C'); - -$pdf->AddPage('L', 'A7'); -$pdf->Cell(0, 0, 'A7 LANDSCAPE', 1, 1, 'C'); - - -// --- test backward editing --- - - -$pdf->setPage(1, true); -$pdf->SetY(50); -$pdf->Cell(0, 0, 'A4 test', 1, 1, 'C'); - -$pdf->setPage(2, true); -$pdf->SetY(50); -$pdf->Cell(0, 0, 'A4 test', 1, 1, 'C'); - -$pdf->setPage(3, true); -$pdf->SetY(50); -$pdf->Cell(0, 0, 'A5 test', 1, 1, 'C'); - -$pdf->setPage(4, true); -$pdf->SetY(50); -$pdf->Cell(0, 0, 'A5 test', 1, 1, 'C'); - -$pdf->setPage(5, true); -$pdf->SetY(50); -$pdf->Cell(0, 0, 'A6 test', 1, 1, 'C'); - -$pdf->setPage(6, true); -$pdf->SetY(50); -$pdf->Cell(0, 0, 'A6 test', 1, 1, 'C'); - -$pdf->setPage(7, true); -$pdf->SetY(40); -$pdf->Cell(0, 0, 'A7 test', 1, 1, 'C'); - -$pdf->setPage(8, true); -$pdf->SetY(40); -$pdf->Cell(0, 0, 'A7 test', 1, 1, 'C'); - -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_028.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_029.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_029.php deleted file mode 100644 index 33be97ecf76..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_029.php +++ /dev/null @@ -1,124 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 029'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 029', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set array for viewer preferences -$preferences = array( - 'HideToolbar' => true, - 'HideMenubar' => true, - 'HideWindowUI' => true, - 'FitWindow' => true, - 'CenterWindow' => true, - 'DisplayDocTitle' => true, - 'NonFullScreenPageMode' => 'UseNone', // UseNone, UseOutlines, UseThumbs, UseOC - 'ViewArea' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox - 'ViewClip' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox - 'PrintArea' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox - 'PrintClip' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox - 'PrintScaling' => 'AppDefault', // None, AppDefault - 'Duplex' => 'DuplexFlipLongEdge', // Simplex, DuplexFlipShortEdge, DuplexFlipLongEdge - 'PickTrayByPDFSize' => true, - 'PrintPageRange' => array(1,1,2,3), - 'NumCopies' => 2 -); - -// Check the example n. 60 for advanced page settings - -// set pdf viewer preferences -$pdf->setViewerPreferences($preferences); - -// set font -$pdf->SetFont('times', '', 14); - -// add a page -$pdf->AddPage(); - -// print a line -$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 1', 1, 1, 'C'); - -$pdf->Ln(5); - -$pdf->Write(0, 'You can use the setViewerPreferences() method to change viewer preferences.', '', 0, 'L', true, 0, false, false, 0); - -// add a page -$pdf->AddPage(); -// print a line -$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 2', 0, 0, 'C'); - -// add a page -$pdf->AddPage(); -// print a line -$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 3', 0, 0, 'C'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_029.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_030.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_030.php deleted file mode 100644 index ed4e799d16e..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_030.php +++ /dev/null @@ -1,188 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 030'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 030', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -// --- first page ------------------------------------------ - -// add a page -$pdf->AddPage(); - -$pdf->Cell(0, 0, 'TCPDF Gradients', 0, 1, 'C', 0, '', 0, false, 'T', 'M'); - -// set colors for gradients (r,g,b) or (grey 0-255) -$red = array(255, 0, 0); -$blue = array(0, 0, 200); -$yellow = array(255, 255, 0); -$green = array(0, 255, 0); -$white = array(255); -$black = array(0); - -// set the coordinates x1,y1,x2,y2 of the gradient (see linear_gradient_coords.jpg) -$coords = array(0, 0, 1, 0); - -// paint a linear gradient -$pdf->LinearGradient(20, 45, 80, 80, $red, $blue, $coords); - -// write label -$pdf->Text(20, 130, 'LinearGradient()'); - -// set the coordinates fx,fy,cx,cy,r of the gradient (see radial_gradient_coords.jpg) -$coords = array(0.5, 0.5, 1, 1, 1.2); - -// paint a radial gradient -$pdf->RadialGradient(110, 45, 80, 80, $white, $black, $coords); - -// write label -$pdf->Text(110, 130, 'RadialGradient()'); - -// paint a coons patch mesh with default coordinates -$pdf->CoonsPatchMesh(20, 155, 80, 80, $yellow, $blue, $green, $red); - -// write label -$pdf->Text(20, 240, 'CoonsPatchMesh()'); - -// set the coordinates for the cubic Bézier points x1,y1 ... x12, y12 of the patch (see coons_patch_mesh_coords.jpg) -$coords = array( - 0.00,0.00, 0.33,0.20, //lower left - 0.67,0.00, 1.00,0.00, 0.80,0.33, //lower right - 0.80,0.67, 1.00,1.00, 0.67,0.80, //upper right - 0.33,1.00, 0.00,1.00, 0.20,0.67, //upper left - 0.00,0.33); //lower left -$coords_min = 0; //minimum value of the coordinates -$coords_max = 1; //maximum value of the coordinates - -// paint a coons patch gradient with the above coordinates -$pdf->CoonsPatchMesh(110, 155, 80, 80, $yellow, $blue, $green, $red, $coords, $coords_min, $coords_max); - -// write label -$pdf->Text(110, 240, 'CoonsPatchMesh()'); - -// --- second page ----------------------------------------- -$pdf->AddPage(); - -// first patch: f = 0 -$patch_array[0]['f'] = 0; -$patch_array[0]['points'] = array( - 0.00,0.00, 0.33,0.00, - 0.67,0.00, 1.00,0.00, 1.00,0.33, - 0.8,0.67, 1.00,1.00, 0.67,0.8, - 0.33,1.80, 0.00,1.00, 0.00,0.67, - 0.00,0.33); -$patch_array[0]['colors'][0] = array('r' => 255, 'g' => 255, 'b' => 0); -$patch_array[0]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 255); -$patch_array[0]['colors'][2] = array('r' => 0, 'g' => 255,'b' => 0); -$patch_array[0]['colors'][3] = array('r' => 255, 'g' => 0,'b' => 0); - -// second patch - above the other: f = 2 -$patch_array[1]['f'] = 2; -$patch_array[1]['points'] = array( - 0.00,1.33, - 0.00,1.67, 0.00,2.00, 0.33,2.00, - 0.67,2.00, 1.00,2.00, 1.00,1.67, - 1.5,1.33); -$patch_array[1]['colors'][0]=array('r' => 0, 'g' => 0, 'b' => 0); -$patch_array[1]['colors'][1]=array('r' => 255, 'g' => 0, 'b' => 255); - -// third patch - right of the above: f = 3 -$patch_array[2]['f'] = 3; -$patch_array[2]['points'] = array( - 1.33,0.80, - 1.67,1.50, 2.00,1.00, 2.00,1.33, - 2.00,1.67, 2.00,2.00, 1.67,2.00, - 1.33,2.00); -$patch_array[2]['colors'][0] = array('r' => 0, 'g' => 255, 'b' => 255); -$patch_array[2]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 0); - -// fourth patch - below the above, which means left(?) of the above: f = 1 -$patch_array[3]['f'] = 1; -$patch_array[3]['points'] = array( - 2.00,0.67, - 2.00,0.33, 2.00,0.00, 1.67,0.00, - 1.33,0.00, 1.00,0.00, 1.00,0.33, - 0.8,0.67); -$patch_array[3]['colors'][0] = array('r' => 0, 'g' => 0, 'b' => 0); -$patch_array[3]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 255); - -$coords_min = 0; -$coords_max = 2; - -$pdf->CoonsPatchMesh(10, 45, 190, 200, '', '', '', '', $patch_array, $coords_min, $coords_max); - -// write label -$pdf->Text(10, 250, 'CoonsPatchMesh()'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_030.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_031.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_031.php deleted file mode 100644 index 160d162ee6f..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_031.php +++ /dev/null @@ -1,103 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 031'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 031', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of PieSector() method.'); - -$xc = 105; -$yc = 100; -$r = 50; - -$pdf->SetFillColor(0, 0, 255); -$pdf->PieSector($xc, $yc, $r, 20, 120, 'FD', false, 0, 2); - -$pdf->SetFillColor(0, 255, 0); -$pdf->PieSector($xc, $yc, $r, 120, 250, 'FD', false, 0, 2); - -$pdf->SetFillColor(255, 0, 0); -$pdf->PieSector($xc, $yc, $r, 250, 20, 'FD', false, 0, 2); - -// write labels -$pdf->SetTextColor(255,255,255); -$pdf->Text(105, 65, 'BLUE'); -$pdf->Text(60, 95, 'GREEN'); -$pdf->Text(120, 115, 'RED'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_031.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_032.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_032.php deleted file mode 100644 index b38f5ae0a7d..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_032.php +++ /dev/null @@ -1,91 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 032'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 032', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 12); - -$pdf->AddPage(); - -$html = << -NOTE: Please use SVG format for a better vector support. -EOD; - -// Print text using writeHTMLCell() -$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); - -$pdf->ImageEps('images/tcpdf_box.ai', 10, 40, 150, '', 'http://www.tcpdf.org', true, '', '', 0, false); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_032.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_033.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_033.php deleted file mode 100644 index 4f95e409a16..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_033.php +++ /dev/null @@ -1,105 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 033'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 033', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// add a page -$pdf->AddPage(); - -// set default font subsetting mode -$pdf->setFontSubsetting(false); - -$pdf->SetFont('helvetica', 'B', 20); - -$pdf->Write(0, 'Font Types', '', 0, 'C', 1, 0, false, false, 0); - -$pdf->Ln(10); - -$pdf->SetFont('times', '', 10); - -$pdf->MultiCell(80, 0, "[Core font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); - -$pdf->Ln(2); - -$pdf->SetFont('dejavusans', '', 10); - -$pdf->MultiCell(80, 0, "[True Type Unicode font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); - -$pdf->Ln(2); - -$pdf->SetFont('cid0jp', '', 9); - -$pdf->MultiCell(80, 0, "[CID-0 font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); - - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_033.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_034.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_034.php deleted file mode 100644 index bb15902f323..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_034.php +++ /dev/null @@ -1,96 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 034'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 034', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Image Clipping using geometric functions', '', 0, 'C', 1, 0, false, false, 0); - -//Start Graphic Transformation -$pdf->StartTransform(); - -// set clipping mask -$pdf->StarPolygon(105, 100, 30, 10, 3, 0, 1, 'CNZ'); - -// draw jpeg image to be clipped -$pdf->Image('images/image_demo.jpg', 75, 70, 60, 60, '', 'http://www.tcpdf.org', '', true, 72); - -//Stop Graphic Transformation -$pdf->StopTransform(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_034.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_035.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_035.php deleted file mode 100644 index 0e5280c2724..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_035.php +++ /dev/null @@ -1,111 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 035'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 035', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', 'BI', 16); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of SetLineStyle() method', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(); - -$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 4, 'color' => array(255, 0, 0))); -$pdf->SetFillColor(255,255,128); -$pdf->SetTextColor(0,0,128); - -$text="DUMMY"; - -$pdf->Cell(0, 0, $text, 1, 1, 'L', 1, 0); - -$pdf->Ln(); - -$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 255))); -$pdf->SetFillColor(255,255,0); -$pdf->SetTextColor(0,0,255); -$pdf->MultiCell(60, 4, $text, 1, 'C', 1, 0); - -$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 255, 0))); -$pdf->SetFillColor(0,0,255); -$pdf->SetTextColor(255,255,0); -$pdf->MultiCell(60, 4, $text, 'TB', 'C', 1, 0); - -$pdf->SetLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 255))); -$pdf->SetFillColor(0,255,0); -$pdf->SetTextColor(255,0,255); -$pdf->MultiCell(60, 4, $text, 1, 'C', 1, 1); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_035.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_036.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_036.php deleted file mode 100644 index 262549741ca..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_036.php +++ /dev/null @@ -1,89 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 036'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 036', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 16); - -// add a page -$pdf->AddPage(); - -$txt = 'Example of Text Annotation. -Move your mouse over the yellow box or double click on it to display the annotation text.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// text annotation -$pdf->Annotation(83, 27, 10, 10, "Text annotation example\naccented letters test: àèéìòù", array('Subtype'=>'Text', 'Name' => 'Comment', 'T' => 'title example', 'Subj' => 'example', 'C' => array(255, 255, 0))); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_036.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_037.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_037.php deleted file mode 100644 index deb7d92a2f7..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_037.php +++ /dev/null @@ -1,147 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 037'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 037', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 11); - -// add a page -$pdf->AddPage(); - -$html = '

      Example of Spot Colors

      Spot colors are single ink colors, rather than colors produced by four (CMYK), six (CMYKOG) or more inks in the printing process (process colors). They can be obtained by special vendors, but often the printers have found their own way of mixing inks to match defined colors.

      As long as no open standard for spot colours exists, TCPDF users will have to buy a colour book by one of the colour manufacturers and insert the values and names of spot colours directly into the $spotcolor array in include/tcpdf_colors.php file, or define them using the AddSpotColor() method.

      Common industry standard spot colors are:
      ANPA-COLOR, DIC, FOCOLTONE, GCMI, HKS, PANTONE, TOYO, TRUMATCH.'; - -// Print text using writeHTMLCell() -$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, 'J', true); - - -$pdf->SetFont('helvetica', '', 10); - -// Define some new spot colors -// $c, $m, $y and $k (2nd, 3rd, 4th and 5th parameter) are the CMYK color components. -// AddSpotColor($name, $c, $m, $y, $k) - -$pdf->AddSpotColor('My TCPDF Dark Green', 100, 50, 80, 45); -$pdf->AddSpotColor('My TCPDF Light Yellow', 0, 0, 55, 0); -$pdf->AddSpotColor('My TCPDF Black', 0, 0, 0, 100); -$pdf->AddSpotColor('My TCPDF Red', 30, 100, 90, 10); -$pdf->AddSpotColor('My TCPDF Green', 100, 30, 100, 0); -$pdf->AddSpotColor('My TCPDF Blue', 100, 60, 10, 5); -$pdf->AddSpotColor('My TCPDF Yellow', 0, 20, 100, 0); - -// Select the spot color -// $tint (the second parameter) is the intensity of the color (0-100). -// SetTextSpotColor($name, $tint=100) -// SetDrawSpotColor($name, $tint=100) -// SetFillSpotColor($name, $tint=100) - -$pdf->SetTextSpotColor('My TCPDF Black', 100); -$pdf->SetDrawSpotColor('My TCPDF Black', 100); - -$starty = 100; - -// print some spot colors - -$pdf->SetFillSpotColor('My TCPDF Dark Green', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Dark Green'); - -$starty += 24; -$pdf->SetFillSpotColor('My TCPDF Light Yellow', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Light Yellow'); - - -// --- default values defined on spotcolors.php --- - -$starty += 24; -$pdf->SetFillSpotColor('My TCPDF Red', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Red'); - -$starty += 24; -$pdf->SetFillSpotColor('My TCPDF Green', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Green'); - -$starty += 24; -$pdf->SetFillSpotColor('My TCPDF Blue', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Blue'); - -$starty += 24; -$pdf->SetFillSpotColor('My TCPDF Yellow', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Yellow'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_037.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_038.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_038.php deleted file mode 100644 index a1e57e20695..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_038.php +++ /dev/null @@ -1,92 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 038'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 038', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 20); - -// add a page -$pdf->AddPage(); - -$txt = 'Example of CID-0 CJK unembedded font. -To display extended text you must have CJK fonts installed for your PDF reader:'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// set font -$pdf->SetFont('cid0jp', '', 40); - -$txt = 'こんにちは世界'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_038.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_039.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_039.php deleted file mode 100644 index 4a8775c19e2..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_039.php +++ /dev/null @@ -1,104 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 039'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 039', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// add a page -$pdf->AddPage(); - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -$pdf->Write(0, 'Example of HTML Justification', '', 0, 'L', true, 0, false, false, 0); - -// create some HTML content -$html = 'a abc abcdefghijkl (abcdef) abcdefg abcdefghi a ((abc)) abcd test alt attribute abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc \(abcd\) abcdef abcdefg abcdefghi a abc \\\(abcd\\\) abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg start a abc before yellow color after a abc abcd abcdef abcdefg abcdefghi a abc abcd end abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi
      abcd abcdef abcdefg abcdefghi
      abcd abcde abcdef
      '; - -// set core font -$pdf->SetFont('helvetica', '', 10); - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, true); - -$pdf->Ln(); - -// set UTF-8 Unicode font -$pdf->SetFont('dejavusans', '', 10); - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, true); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_039.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_040.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_040.php deleted file mode 100644 index c1d90917263..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_040.php +++ /dev/null @@ -1,116 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 040'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 040', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set display mode -$pdf->SetDisplayMode($zoom='fullpage', $layout='TwoColumnRight', $mode='UseNone'); - -// set pdf viewer preferences -$pdf->setViewerPreferences(array('Duplex' => 'DuplexFlipLongEdge')); - -// set booklet mode -$pdf->SetBooklet(true, 10, 30); - -// set core font -$pdf->SetFont('helvetica', '', 18); - -// add a page (left page) -$pdf->AddPage(); - -$pdf->Write(0, 'Example of booklet mode', '', 0, 'L', true, 0, false, false, 0); - -// print a line using Cell() -$pdf->Cell(0, 0, 'PAGE 1', 1, 1, 'C'); - - -// add a page (right page) -$pdf->AddPage(); - -// print a line using Cell() -$pdf->Cell(0, 0, 'PAGE 2', 1, 1, 'C'); - - -// add a page (left page) -$pdf->AddPage(); - -// print a line using Cell() -$pdf->Cell(0, 0, 'PAGE 3', 1, 1, 'C'); - -// add a page (right page) -$pdf->AddPage(); - -// print a line using Cell() -$pdf->Cell(0, 0, 'PAGE 4', 1, 1, 'C'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_040.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_041.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_041.php deleted file mode 100644 index 973bdf99af0..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_041.php +++ /dev/null @@ -1,90 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 041'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 041', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 16); - -// add a page -$pdf->AddPage(); - - -$txt = 'Example of File Attachment. -Double click on the icon to open the attached file.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// attach an external file -$pdf->Annotation(85, 27, 5, 5, 'text file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'data/utf8test.txt')); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_041.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_042.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_042.php deleted file mode 100644 index 14c9fd0a759..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_042.php +++ /dev/null @@ -1,102 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 042'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 042', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set JPEG quality -//$pdf->setJPEGQuality(75); - -$pdf->SetFont('helvetica', '', 18); - -// add a page -$pdf->AddPage(); - -// create background text -$background_text = str_repeat('TCPDF test PNG Alpha Channel ', 50); -$pdf->MultiCell(0, 5, $background_text, 0, 'J', 0, 2, '', '', true, 0, false); - -// --- Method (A) ------------------------------------------ -// the Image() method recognizes the alpha channel embedded on the image: - -$pdf->Image('images/image_with_alpha.png', 50, 50, 100, '', '', 'http://www.tcpdf.org', '', false, 300); - -// --- Method (B) ------------------------------------------ -// provide image + separate 8-bit mask - -// first embed mask image (w, h, x and y will be ignored, the image will be scaled to the target image's size) -$mask = $pdf->Image('images/alpha.png', 50, 140, 100, '', '', '', '', false, 300, '', true); - -// embed image, masked with previously embedded mask -$pdf->Image('images/img.png', 50, 140, 100, '', '', 'http://www.tcpdf.org', '', false, 300, '', false, $mask); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_042.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_043.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_043.php deleted file mode 100644 index 116827e8545..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_043.php +++ /dev/null @@ -1,85 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 043'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 043', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 16); - -// add a page -$pdf->AddPage(); - -// Multicell test -$pdf->MultiCell(0, 0, 'DISK CACHING TEST: check the parameters of the class constructor.', 1, 'L', 0, 0, '', '', true); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_043.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_044.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_044.php deleted file mode 100644 index 949270cca6c..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_044.php +++ /dev/null @@ -1,128 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 044'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 044', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 40); - -// print a line using Cell() -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: A', 0, 1, 'L'); - -// add some vertical space -$pdf->Ln(10); - -// print some text -$pdf->SetFont('times', 'I', 16); -$txt = 'TCPDF allows you to Copy, Move and Delete pages.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -$pdf->SetFont('helvetica', 'B', 40); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: B', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: D', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: E', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: E-2', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: F', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: C', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: G', 0, 1, 'L'); - -// Move page 7 to page 3 -$pdf->movePage(7, 3); - -// Delete page 6 -$pdf->deletePage(6); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: H', 0, 1, 'L'); - -// copy the second page -$pdf->copyPage(2); - -// NOTE: to insert a page to a previous position, you can add a new page to the end of document and then move it using movePage(). - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_044.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_045.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_045.php deleted file mode 100644 index 0f49abca4da..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_045.php +++ /dev/null @@ -1,140 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 045'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 045', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', 'B', 20); - -// add a page -$pdf->AddPage(); - -// set a bookmark for the current position -$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); - -// print a line using Cell() -$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); - -// Create a fixed link to the first page using the * character -$index_link = $pdf->AddLink(); -$pdf->SetLink($index_link, 0, '*1'); -$pdf->Cell(0, 10, 'Link to INDEX', 0, 1, 'R', false, $index_link); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,128,0)); -$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); - -// fixed link to the first page using the * character -$html = 'link to INDEX (page 1)'; -$pdf->writeHTML($html, true, false, true, false, ''); - - -// add some pages and bookmarks -for ($i = 2; $i < 12; $i++) { - $pdf->AddPage(); - $pdf->Bookmark('Chapter '.$i, 0, 0, '', 'B', array(0,64,128)); - $pdf->Cell(0, 10, 'Chapter '.$i, 0, 1, 'L'); -} - -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -// add a new page for TOC -$pdf->addTOCPage(); - -// write the TOC title -$pdf->SetFont('times', 'B', 16); -$pdf->MultiCell(0, 0, 'Table Of Content', 0, 'C', 0, 1, '', '', true, 0); -$pdf->Ln(); - -$pdf->SetFont('dejavusans', '', 12); - -// add a simple Table Of Content at first page -// (check the example n. 59 for the HTML version) -$pdf->addTOC(1, 'courier', '.', 'INDEX', 'B', array(128,0,0)); - -// end of TOC page -$pdf->endTOCPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_045.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_046.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_046.php deleted file mode 100644 index 70d11d3be20..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_046.php +++ /dev/null @@ -1,123 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 046'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 046', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of Text Hyphenation', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(10); - -/* -Unicode Data for SHY: - Name : SOFT HYPHEN, commonly abbreviated as SHY - HTML Entity (decimal): ­ - HTML Entity (hex): ­ - HTML Entity (named): ­ - How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173] - UTF-8 (hex): 0xC2 0xAD (c2ad) -*/ - -/* -// You can automatically add SOFT HYPHENS to your text using -// the hyphenateText() method, but this requires either an -// hyphenation pattern array of a hyphenation pattern TEX file. -// You can download hyphenation TEX patterns from: -// http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ - -// EXAMPLE: - -$html = 'On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.'; - -$hyphen_patterns = $pdf->getHyphenPatternsFromTEX('hyphens/hyph-en-gb.tex'); - -$html = $pdf->hyphenateText($html, $hyphen_patterns, array(), 1, 2, 1, 8); -*/ - - -// HTML text with soft hyphens (­) -$html = 'On the other hand, we de­nounce with righ­teous in­dig­na­tion and dis­like men who are so be­guiled and de­mo­r­al­ized by the charms of plea­sure of the mo­ment, so blind­ed by de­sire, that they can­not fore­see the pain and trou­ble that are bound to en­sue; and equal blame be­longs to those who fail in their du­ty through weak­ness of will, which is the same as say­ing through shrink­ing from toil and pain. Th­ese cas­es are per­fect­ly sim­ple and easy to distin­guish. In a free hour, when our pow­er of choice is un­tram­melled and when noth­ing pre­vents our be­ing able to do what we like best, ev­ery plea­sure is to be wel­comed and ev­ery pain avoid­ed. But in cer­tain cir­cum­s­tances and ow­ing to the claims of du­ty or the obli­ga­tions of busi­ness it will fre­quent­ly oc­cur that plea­sures have to be re­pu­di­at­ed and an­noy­ances ac­cept­ed. The wise man there­fore al­ways holds in th­ese mat­ters to this prin­ci­ple of se­lec­tion: he re­jects plea­sures to se­cure other greater plea­sures, or else he en­dures pains to avoid worse pains.'; - -$pdf->SetFont('times', '', 10); -$pdf->SetDrawColor(255,0,0); -$pdf->SetTextColor(0,63,127); - -// print a cell -$pdf->writeHTMLCell(50, 0, '', '', $html, 1, 1, 0, true, 'J'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_046.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_047.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_047.php deleted file mode 100644 index a26ae5d5ce7..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_047.php +++ /dev/null @@ -1,117 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 047'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 047', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 16); - -// add a page -$pdf->AddPage(); - -$txt = 'Example of Transactions. -TCPDF allows you to undo some operations using the Transactions. -Check the source code for further information.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(5); - -$pdf->SetFont('times', '', 12); - -// start transaction -$pdf->startTransaction(); - -$pdf->Write(0, "LINE 1\n"); -$pdf->Write(0, "LINE 2\n"); - -// restarts transaction -$pdf->startTransaction(); - -$pdf->Write(0, "LINE 3\n"); -$pdf->Write(0, "LINE 4\n"); - -// rolls back to the last (re)start -$pdf = $pdf->rollbackTransaction(); - -$pdf->Write(0, "LINE 5\n"); -$pdf->Write(0, "LINE 6\n"); - -// start transaction -$pdf->startTransaction(); - -$pdf->Write(0, "LINE 7\n"); - -// commit transaction (actually just frees memory) -$pdf->commitTransaction(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_047.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_048.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_048.php deleted file mode 100644 index ca88a148e7e..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_048.php +++ /dev/null @@ -1,313 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 048'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 048', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of HTML tables', '', 0, 'L', true, 0, false, false, 0); - -$pdf->SetFont('helvetica', '', 8); - -// ----------------------------------------------------------------------------- - -$tbl = << -
COL 1 - ROW 1
COLSPAN 3
COL 2 - ROW 1COL 3 - ROW 1
COL 2 - ROW 2 - COLSPAN 2
text line
text line
text line
text line
COL 3 - ROW 2
COL 3 - ROW 3
-EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << -
COL 1 - ROW 1
COLSPAN 3
text line
text line
text line
text line
text line
text line
COL 2 - ROW 1COL 3 - ROW 1
COL 2 - ROW 2 - COLSPAN 2
text line
text line
text line
text line
COL 3 - ROW 2
COL 3 - ROW 3
-EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << - - COL 1 - ROW 1
COLSPAN 3
text line
text line
text line
text line
text line
text line - COL 2 - ROW 1 - COL 3 - ROW 1 - - - COL 2 - ROW 2 - COLSPAN 2
text line
text line
text line
text line - COL 3 - ROW 2
text line
text line - - - COL 3 - ROW 3 - - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << - -Left column -Heading Column Span 5 -Heading Column Span 9 - - -Rowspan 2
This is some text that fills the table cell. -span 2 -span 2 -2 rows -Colspan 8 - - -1a -2a -1b -2b -1 -2 -3 -4 -5 -6 -7 -8 - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -// Table with rowspans and THEAD -$tbl = << - - - A - XXXX - XXXX - XXXX - XXXX - XXXX - - - B - XXXX - XXXX - XXXX - XXXX - XXXX - - - - 1. - XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX - XXXX
XXXX - XXXX
XXXX - XXXX - XXXX
XXXX - - - 2. - XXXX
XXXX - XXXX
XXXX - XXXX
XXXX - XXXX
XXXX - - - XXXX
XXXX
XXXX
XXXX - XXXX
XXXX - XXXX
XXXX - - - RRRRRR
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX - XXXX
XXXX - XXXX
XXXX - - - 3. - XXXX1
XXXX - XXXX
XXXX - XXXX
XXXX - - - 4. - XXXX
XXXX - XXXX
XXXX - XXXX
XXXX - XXXX
XXXX - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -// NON-BREAKING TABLE (nobr="true") - -$tbl = << - - NON-BREAKING TABLE - - - 1-1 - 1-2 - 1-3 - - - 2-1 - 3-2 - 3-3 - - - 3-1 - 3-2 - 3-3 - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -// NON-BREAKING ROWS (nobr="true") - -$tbl = << - - NON-BREAKING ROWS - - - ROW 1
COLUMN 1 - ROW 1
COLUMN 2 - ROW 1
COLUMN 3 - - - ROW 2
COLUMN 1 - ROW 2
COLUMN 2 - ROW 2
COLUMN 3 - - - ROW 3
COLUMN 1 - ROW 3
COLUMN 2 - ROW 3
COLUMN 3 - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_048.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_049.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_049.php deleted file mode 100644 index 7a764fbc60f..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_049.php +++ /dev/null @@ -1,126 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 049'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 049', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 10); - -// add a page -$pdf->AddPage(); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -IMPORTANT: -If you are printing user-generated content, tcpdf tag can be unsafe. -You can disable this tag by setting to false the K_TCPDF_CALLS_IN_HTML -constant on TCPDF configuration file. - -For security reasons, the parameters for the 'params' attribute of TCPDF -tag must be prepared as an array and encoded with the -serializeTCPDFtagParameters() method (see the example below). - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -$html = '

Test TCPDF Methods in HTML

-

IMPORTANT:

-If you are using user-generated content, the tcpdf tag can be unsafe.
-You can disable this tag by setting to false the K_TCPDF_CALLS_IN_HTML constant on TCPDF configuration file.
-

write1DBarcode method in HTML

'; - -$params = $pdf->serializeTCPDFtagParameters(array('CODE 39', 'C39', '', '', 80, 30, 0.4, array('position'=>'S', 'border'=>true, 'padding'=>4, 'fgcolor'=>array(0,0,0), 'bgcolor'=>array(255,255,255), 'text'=>true, 'font'=>'helvetica', 'fontsize'=>8, 'stretchtext'=>4), 'N')); -$html .= ''; - -$params = $pdf->serializeTCPDFtagParameters(array('CODE 128', 'C128', '', '', 80, 30, 0.4, array('position'=>'S', 'border'=>true, 'padding'=>4, 'fgcolor'=>array(0,0,0), 'bgcolor'=>array(255,255,255), 'text'=>true, 'font'=>'helvetica', 'fontsize'=>8, 'stretchtext'=>4), 'N')); -$html .= ''; - -$html .= '

Graphic Functions

'; - -$params = $pdf->serializeTCPDFtagParameters(array(0)); -$html .= ''; - -$params = $pdf->serializeTCPDFtagParameters(array(50, 50, 40, 10, 'DF', array(), array(0,128,255))); -$html .= ''; - - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, 0); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_049.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_050.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_050.php deleted file mode 100644 index 5ccae31a9cf..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_050.php +++ /dev/null @@ -1,210 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 050'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 050', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// NOTE: 2D barcode algorithms must be implemented on 2dbarcode.php class file. - -// set font -$pdf->SetFont('helvetica', '', 11); - -// add a page -$pdf->AddPage(); - -// print a message -$txt = "You can also export 2D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcode directory.\n"; -$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false); - - -$pdf->SetFont('helvetica', '', 10); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// set style for barcode -$style = array( - 'border' => true, - 'vpadding' => 'auto', - 'hpadding' => 'auto', - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, //array(255,255,255) - 'module_width' => 1, // width of a single module in points - 'module_height' => 1 // height of a single module in points -); - -// write RAW 2D Barcode - -$code = '111011101110111,010010001000010,010011001110010,010010000010010,010011101110010'; -$pdf->write2DBarcode($code, 'RAW', 80, 30, 30, 20, $style, 'N'); - -// write RAW2 2D Barcode -$code = '[111011101110111][010010001000010][010011001110010][010010000010010][010011101110010]'; -$pdf->write2DBarcode($code, 'RAW2', 80, 60, 30, 20, $style, 'N'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// set style for barcode -$style = array( - 'border' => 2, - 'vpadding' => 'auto', - 'hpadding' => 'auto', - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, //array(255,255,255) - 'module_width' => 1, // width of a single module in points - 'module_height' => 1 // height of a single module in points -); - -// QRCODE,L : QR-CODE Low error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,L', 20, 30, 50, 50, $style, 'N'); -$pdf->Text(20, 25, 'QRCODE L'); - -// QRCODE,M : QR-CODE Medium error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,M', 20, 90, 50, 50, $style, 'N'); -$pdf->Text(20, 85, 'QRCODE M'); - -// QRCODE,Q : QR-CODE Better error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,Q', 20, 150, 50, 50, $style, 'N'); -$pdf->Text(20, 145, 'QRCODE Q'); - -// QRCODE,H : QR-CODE Best error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 20, 210, 50, 50, $style, 'N'); -$pdf->Text(20, 205, 'QRCODE H'); - -// ------------------------------------------------------------------- -// PDF417 (ISO/IEC 15438:2006) - -/* - - The $type parameter can be simple 'PDF417' or 'PDF417' followed by a - number of comma-separated options: - - 'PDF417,a,e,t,s,f,o0,o1,o2,o3,o4,o5,o6' - - Possible options are: - - a = aspect ratio (width/height); - e = error correction level (0-8); - - Macro Control Block options: - - t = total number of macro segments; - s = macro segment index (0-99998); - f = file ID; - o0 = File Name (text); - o1 = Segment Count (numeric); - o2 = Time Stamp (numeric); - o3 = Sender (text); - o4 = Addressee (text); - o5 = File Size (numeric); - o6 = Checksum (numeric). - - Parameters t, s and f are required for a Macro Control Block, all other parametrs are optional. - To use a comma character ',' on text options, replace it with the character 255: "\xff". - -*/ - -$pdf->write2DBarcode('www.tcpdf.org', 'PDF417', 80, 90, 0, 30, $style, 'N'); -$pdf->Text(80, 85, 'PDF417 (ISO/IEC 15438:2006)'); - -// ------------------------------------------------------------------- -// DATAMATRIX (ISO/IEC 16022:2006) - -$pdf->write2DBarcode('http://www.tcpdf.org', 'DATAMATRIX', 80, 150, 50, 50, $style, 'N'); -$pdf->Text(80, 145, 'DATAMATRIX (ISO/IEC 16022:2006)'); - -// ------------------------------------------------------------------- - -// new style -$style = array( - 'border' => 2, - 'padding' => 'auto', - 'fgcolor' => array(0,0,255), - 'bgcolor' => array(255,255,64) -); - -// QRCODE,H : QR-CODE Best error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 80, 210, 50, 50, $style, 'N'); -$pdf->Text(80, 205, 'QRCODE H - COLORED'); - -// new style -$style = array( - 'border' => false, - 'padding' => 0, - 'fgcolor' => array(128,0,0), - 'bgcolor' => false -); - -// QRCODE,H : QR-CODE Best error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 140, 210, 50, 50, $style, 'N'); -$pdf->Text(140, 205, 'QRCODE H - NO PADDING'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_050.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_051.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_051.php deleted file mode 100644 index dc2d94ec51f..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_051.php +++ /dev/null @@ -1,145 +0,0 @@ -getBreakMargin(); - // get current auto-page-break mode - $auto_page_break = $this->AutoPageBreak; - // disable auto-page-break - $this->SetAutoPageBreak(false, 0); - // set bacground image - $img_file = K_PATH_IMAGES.'image_demo.jpg'; - $this->Image($img_file, 0, 0, 210, 297, '', '', '', false, 300, '', false, false, 0); - // restore auto-page-break status - $this->SetAutoPageBreak($auto_page_break, $bMargin); - // set the starting point for the page content - $this->setPageMark(); - } -} - -// create new PDF document -$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 051'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(0); -$pdf->SetFooterMargin(0); - -// remove default footer -$pdf->setPrintFooter(false); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 48); - -// add a page -$pdf->AddPage(); - -// Print a text -$html = ' PAGE 1  -

You can set a full page background.

'; -$pdf->writeHTML($html, true, false, true, false, ''); - - -// add a page -$pdf->AddPage(); - -// Print a text -$html = ' PAGE 2 '; -$pdf->writeHTML($html, true, false, true, false, ''); - -// --- example with background set on page --- - -// remove default header -$pdf->setPrintHeader(false); - -// add a page -$pdf->AddPage(); - - -// -- set new background --- - -// get the current page break margin -$bMargin = $pdf->getBreakMargin(); -// get current auto-page-break mode -$auto_page_break = $pdf->getAutoPageBreak(); -// disable auto-page-break -$pdf->SetAutoPageBreak(false, 0); -// set bacground image -$img_file = K_PATH_IMAGES.'image_demo.jpg'; -$pdf->Image($img_file, 0, 0, 210, 297, '', '', '', false, 300, '', false, false, 0); -// restore auto-page-break status -$pdf->SetAutoPageBreak($auto_page_break, $bMargin); -// set the starting point for the page content -$pdf->setPageMark(); - - -// Print a text -$html = 'PAGE 3'; -$pdf->writeHTML($html, true, false, true, false, ''); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_051.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_052.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_052.php deleted file mode 100644 index 2af27f08ad2..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_052.php +++ /dev/null @@ -1,121 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 052'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 052', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -/* -NOTES: - - To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt - - To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 - - To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes -*/ - -// set certificate file -$certificate = 'file://data/cert/tcpdf.crt'; - -// set additional information -$info = array( - 'Name' => 'TCPDF', - 'Location' => 'Office', - 'Reason' => 'Testing TCPDF', - 'ContactInfo' => 'http://www.tcpdf.org', - ); - -// set document signature -$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info); - -// set font -$pdf->SetFont('helvetica', '', 12); - -// add a page -$pdf->AddPage(); - -// print a line of text -$text = 'This is a digitally signed document using the default (example) tcpdf.crt certificate.
To validate this signature you have to load the tcpdf.fdf on the Arobat Reader to add the certificate to List of Trusted Identities.

For more information check the source code of this example and the source code documentation for the setSignature() method.

www.tcpdf.org'; -$pdf->writeHTML($text, true, 0, true, 0); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// *** set signature appearance *** - -// create content for signature (image and/or text) -$pdf->Image('images/tcpdf_signature.png', 180, 60, 15, 15, 'PNG'); - -// define active area for signature appearance -$pdf->setSignatureAppearance(180, 60, 15, 15); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// *** set an empty signature appearance *** -$pdf->addEmptySignatureAppearance(180, 80, 15, 15); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_052.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_053.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_053.php deleted file mode 100644 index 8c784d5f025..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_053.php +++ /dev/null @@ -1,108 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 053'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 053', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('times', '', 14); - -// add a page -$pdf->AddPage(); - -// print a some of text -$text = 'This is an example of JavaScript usage on PDF documents.

For more information check the source code of this example, the source code documentation for the IncludeJS() method and the JavaScript for Acrobat API Reference guide.

www.tcpdf.org'; -$pdf->writeHTML($text, true, 0, true, 0); - -// write some JavaScript code -$js = <<IncludeJS($js); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_053.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_054.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_054.php deleted file mode 100644 index af4545df243..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_054.php +++ /dev/null @@ -1,128 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 054'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 054', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// IMPORTANT: disable font subsetting to allow users editing the document -$pdf->setFontSubsetting(false); - -// set font -$pdf->SetFont('helvetica', '', 10, '', false); - -// add a page -$pdf->AddPage(); - -// create some HTML content -$html = <<XHTML Form Example -
-
-

-

-

-
-
-

- -

- -


-
-
-


- - - - -
-
-EOD; - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, 0); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_054.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_055.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_055.php deleted file mode 100644 index a825966e250..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_055.php +++ /dev/null @@ -1,115 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 055'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 055', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 14); - -// array of font names -$core_fonts = array('courier', 'courierB', 'courierI', 'courierBI', 'helvetica', 'helveticaB', 'helveticaI', 'helveticaBI', 'times', 'timesB', 'timesI', 'timesBI', 'symbol', 'zapfdingbats'); - -// set fill color -$pdf->SetFillColor(221,238,255); - -// create one HTML table for each core font -foreach($core_fonts as $font) { - // add a page - $pdf->AddPage(); - - // Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') - - // set font for title - $pdf->SetFont('helvetica', 'B', 16); - - // print font name - $pdf->Cell(0, 10, 'FONT: '.$font, 1, 1, 'C', true, '', 0, false, 'T', 'M'); - - // set font for chars - $pdf->SetFont($font, '', 16); - - // print each character - for ($i = 0; $i < 256; ++$i) { - if (($i > 0) AND (($i % 16) == 0)) { - $pdf->Ln(); - } - $pdf->Cell(11.25, 11.25, TCPDF_FONTS::unichr($i), 1, 0, 'C', false, '', 0, false, 'T', 'M'); - } - - $pdf->Ln(20); - - // print a pangram - $pdf->Cell(0, 0, 'The quick brown fox jumps over the lazy dog', 0, 1, 'C', false, '', 0, false, 'T', 'M'); -} - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_055.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_056.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_056.php deleted file mode 100644 index c3dfe25562c..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_056.php +++ /dev/null @@ -1,133 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 056'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 056', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 18); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of Registration Marks, Crop Marks and Color Bars', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(5); - -// color registration bars - -// A,W,R,G,B,C,M,Y,K,RGB,CMYK,ALL,ALLSPOT, -$pdf->colorRegistrationBar(50, 70, 40, 40, true, false, 'A,R,G,B,C,M,Y,K'); -$pdf->colorRegistrationBar(90, 70, 40, 40, true, true, 'A,R,G,B,C,M,Y,K'); -$pdf->colorRegistrationBar(50, 115, 80, 5, false, true, 'A,W,R,G,B,C,M,Y,K,ALL'); -$pdf->colorRegistrationBar(135, 70, 5, 50, false, false, 'A,W,R,G,B,C,M,Y,K,ALL'); - -// corner crop marks - -$pdf->cropMark(50, 70, 10, 10, 'TL'); -$pdf->cropMark(140, 70, 10, 10, 'TR'); -$pdf->cropMark(50, 120, 10, 10, 'BL'); -$pdf->cropMark(140, 120, 10, 10, 'BR'); - -// various crop marks - -$pdf->cropMark(95, 65, 5, 5, 'LEFT,TOP,RIGHT', array(255,0,0)); -$pdf->cropMark(95, 125, 5, 5, 'LEFT,BOTTOM,RIGHT', array(255,0,0)); - -$pdf->cropMark(45, 95, 5, 5, 'TL,BL', array(0,255,0)); -$pdf->cropMark(145, 95, 5, 5, 'TR,BR', array(0,255,0)); - -$pdf->cropMark(95, 140, 5, 5, 'A,D', array(0,0,255)); - -// registration marks - -$pdf->registrationMark(40, 60, 5, false); -$pdf->registrationMark(150, 60, 5, true, array(0,0,0), array(255,255,0)); -$pdf->registrationMark(40, 130, 5, true, array(0,0,0), array(255,255,0)); -$pdf->registrationMark(150, 130, 5, false, array(100,100,100,100,'All'), array(0,0,0,0,'None')); - -// test registration bar with spot colors - -$pdf->AddSpotColor('My TCPDF Dark Green', 100, 50, 80, 45); -$pdf->AddSpotColor('My TCPDF Light Yellow', 0, 0, 55, 0); -$pdf->AddSpotColor('My TCPDF Black', 0, 0, 0, 100); -$pdf->AddSpotColor('My TCPDF Red', 30, 100, 90, 10); -$pdf->AddSpotColor('My TCPDF Green', 100, 30, 100, 0); -$pdf->AddSpotColor('My TCPDF Blue', 100, 60, 10, 5); -$pdf->AddSpotColor('My TCPDF Yellow', 0, 20, 100, 0); - -$pdf->colorRegistrationBar(50, 150, 80, 10, false, true, 'ALLSPOT'); - -// CMYK registration mark -$pdf->registrationMarkCMYK(150, 155, 8); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_056.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_057.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_057.php deleted file mode 100644 index 9714b40b1bc..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_057.php +++ /dev/null @@ -1,268 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 057'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 057', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of alignment options for Cell()', '', 0, 'L', true, 0, false, false, 0); - -$pdf->SetFont('helvetica', '', 11); - -// set border width -$pdf->SetLineWidth(0.7); - -// set color for cell border -$pdf->SetDrawColor(0,128,255); - -$pdf->setCellHeightRatio(3); - -$pdf->SetXY(15, 60); - -// text on center -$pdf->Cell(30, 0, 'Top-Center', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'C'); -$pdf->Cell(30, 0, 'Center-Center', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'C'); -$pdf->Cell(30, 0, 'Bottom-Center', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'C'); -$pdf->Cell(30, 0, 'Ascent-Center', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'C'); -$pdf->Cell(30, 0, 'Baseline-Center', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'C'); -$pdf->Cell(30, 0, 'Descent-Center', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'C'); - - -$pdf->SetXY(15, 90); - -// text on top -$pdf->Cell(30, 0, 'Top-Top', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'T'); -$pdf->Cell(30, 0, 'Center-Top', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'T'); -$pdf->Cell(30, 0, 'Bottom-Top', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'T'); -$pdf->Cell(30, 0, 'Ascent-Top', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'T'); -$pdf->Cell(30, 0, 'Baseline-Top', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'T'); -$pdf->Cell(30, 0, 'Descent-Top', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'T'); - - -$pdf->SetXY(15, 120); - -// text on bottom -$pdf->Cell(30, 0, 'Top-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'B'); -$pdf->Cell(30, 0, 'Center-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'B'); -$pdf->Cell(30, 0, 'Bottom-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'B'); -$pdf->Cell(30, 0, 'Ascent-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'B'); -$pdf->Cell(30, 0, 'Baseline-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'B'); -$pdf->Cell(30, 0, 'Descent-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'B'); - - -// draw some reference lines -$linestyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => '', 'phase' => 0, 'color' => array(255, 0, 0)); -$pdf->Line(15, 60, 195, 60, $linestyle); -$pdf->Line(15, 90, 195, 90, $linestyle); -$pdf->Line(15, 120, 195, 120, $linestyle); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Print an image to explain cell measures - -$pdf->Image('images/tcpdf_cell.png', 15, 160, 100, 100, 'PNG', '', '', false, 300, '', false, false, 0, false, false, false); -$legend = 'LEGEND: - -X: cell x top-left origin (top-right for RTL) -Y: cell y top-left origin (top-right for RTL) -CW: cell width -CH: cell height -LW: line width -NRL: normal line position -EXT: external line position -INT: internal line position -ML: margin left -MR: margin right -MT: margin top -MB: margin bottom -PL: padding left -PR: padding right -PT: padding top -PB: padding bottom -TW: text width -FA: font ascent -FB: font baseline -FD: font descent'; -$pdf->SetFont('helvetica', '', 10); -$pdf->setCellHeightRatio(1.25); -$pdf->MultiCell(0, 0, $legend, 0, 'L', false, 1, 125, 160, true, 0, false, true, 0, 'T', false); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// CELL BORDERS - -// add a page -$pdf->AddPage(); - -$pdf->SetFont('helvetica', 'B', 20); - -$pdf->Write(0, 'Example of borders for Cell()', '', 0, 'L', true, 0, false, false, 0); - -$pdf->SetFont('helvetica', '', 11); - -// set border width -$pdf->SetLineWidth(0.508); - -// set color for cell border -$pdf->SetDrawColor(0,128,255); - -// set filling color -$pdf->SetFillColor(255,255,128); - -// set cell height ratio -$pdf->setCellHeightRatio(3); - -$pdf->Cell(30, 0, '1', 1, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LTRB', 'LTRB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LTR', 'LTR', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'TRB', 'TRB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LRB', 'LRB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LTB', 'LTB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LT', 'LT', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'TR', 'TR', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'RB', 'RB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LB', 'LB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LR', 'LR', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'TB', 'TB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'L', 'L', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'T', 'T', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'R', 'R', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'B', 'B', 1, 'C', 1, '', 0, false, 'T', 'C'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// ADVANCED SETTINGS FOR CELL BORDERS - -// add a page -$pdf->AddPage(); - -$pdf->SetFont('helvetica', 'B', 20); - -$pdf->Write(0, 'Example of advanced border settings for Cell()', '', 0, 'L', true, 0, false, false, 0); - -$pdf->SetFont('helvetica', '', 11); - -// set border width -$pdf->SetLineWidth(1); - -// set color for cell border -$pdf->SetDrawColor(0,128,255); - -// set filling color -$pdf->SetFillColor(255,255,128); - -$border = array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); -$pdf->Cell(30, 0, 'LTRB', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(5); - -$border = array( -'L' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)), -'R' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 255)), -'T' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 255, 0)), -'B' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 255))); -$pdf->Cell(30, 0, 'LTRB', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(5); - -$border = array('mode' => 'ext', 'LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); -$pdf->Cell(30, 0, 'LTRB EXT', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(5); - -$border = array('mode' => 'int', 'LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); -$pdf->Cell(30, 0, 'LTRB INT', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(5); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_057.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_058.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_058.php deleted file mode 100644 index 1e472fbcb28..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_058.php +++ /dev/null @@ -1,94 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 058'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 058', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 10); - -// add a page -$pdf->AddPage(); - -// NOTE: Uncomment the following line to rasterize SVG image using the ImageMagick library. -//$pdf->setRasterizeVectorImages(true); - -$pdf->ImageSVG($file='images/testsvg.svg', $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false); - -$pdf->ImageSVG($file='images/tux.svg', $x=30, $y=100, $w='', $h=100, $link='', $align='', $palign='', $border=0, $fitonpage=false); - -$pdf->SetFont('helvetica', '', 8); -$pdf->SetY(195); -$txt = '© The copyright holder of the above Tux image is Larry Ewing, allows anyone to use it for any purpose, provided that the copyright holder is properly attributed. Redistribution, derivative work, commercial use, and all other use is permitted.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_058.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_059.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_059.php deleted file mode 100644 index 9396784da29..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_059.php +++ /dev/null @@ -1,190 +0,0 @@ -tocpage) { - // *** replace the following parent::Header() with your code for TOC page - parent::Header(); - } else { - // *** replace the following parent::Header() with your code for normal pages - parent::Header(); - } - } - - /** - * Overwrite Footer() method. - * @public - */ - public function Footer() { - if ($this->tocpage) { - // *** replace the following parent::Footer() with your code for TOC page - parent::Footer(); - } else { - // *** replace the following parent::Footer() with your code for normal pages - parent::Footer(); - } - } - -} // end of class - -// create new PDF document -$pdf = new TOC_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 059'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 059', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// set font -$pdf->SetFont('helvetica', '', 10); - -// --------------------------------------------------------- - -// create some content ... - -// add a page -$pdf->AddPage(); - -// set a bookmark for the current position -$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); - -// print a line using Cell() -$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,128,0)); -$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); - -// add some pages and bookmarks -for ($i = 2; $i < 12; $i++) { - $pdf->AddPage(); - $pdf->Bookmark('Chapter '.$i, 0, 0, '', 'B', array(0,64,128)); - $pdf->Cell(0, 10, 'Chapter '.$i, 0, 1, 'L'); -} - - -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - -// add a new page for TOC -$pdf->addTOCPage(); - -// write the TOC title and/or other elements on the TOC page -$pdf->SetFont('times', 'B', 16); -$pdf->MultiCell(0, 0, 'Table Of Content', 0, 'C', 0, 1, '', '', true, 0); -$pdf->Ln(); -$pdf->SetFont('helvetica', '', 10); - -// define styles for various bookmark levels -$bookmark_templates = array(); - -/* - * The key of the $bookmark_templates array represent the bookmark level (from 0 to n). - * The following templates will be replaced with proper content: - * #TOC_DESCRIPTION# this will be replaced with the bookmark description; - * #TOC_PAGE_NUMBER# this will be replaced with page number. - * - * NOTES: - * If you want to align the page number on the right you have to use a monospaced font like courier, otherwise you can left align using any font type. - * The following is just an example, you can get various styles by combining various HTML elements. - */ - -// A monospaced font for the page number is mandatory to get the right alignment -$bookmark_templates[0] = '
#TOC_DESCRIPTION##TOC_PAGE_NUMBER#
'; -$bookmark_templates[1] = '
 #TOC_DESCRIPTION##TOC_PAGE_NUMBER#
'; -$bookmark_templates[2] = '
 #TOC_DESCRIPTION##TOC_PAGE_NUMBER#
'; -// add other bookmark level templates here ... - -// add table of content at page 1 -// (check the example n. 45 for a text-only TOC -$pdf->addHTMLTOC(1, 'INDEX', $bookmark_templates, true, 'B', array(128,0,0)); - -// end of TOC page -$pdf->endTOCPage(); - -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_059.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_060.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_060.php deleted file mode 100644 index 03bad28a841..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_060.php +++ /dev/null @@ -1,108 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 060'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 060', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// set font -$pdf->SetFont('helvetica', '', 20); - -// --------------------------------------------------------- - -// set page format (read source code documentation for further information) -$page_format = array( - 'MediaBox' => array ('llx' => 0, 'lly' => 0, 'urx' => 210, 'ury' => 297), - 'CropBox' => array ('llx' => 0, 'lly' => 0, 'urx' => 210, 'ury' => 297), - 'BleedBox' => array ('llx' => 5, 'lly' => 5, 'urx' => 205, 'ury' => 292), - 'TrimBox' => array ('llx' => 10, 'lly' => 10, 'urx' => 200, 'ury' => 287), - 'ArtBox' => array ('llx' => 15, 'lly' => 15, 'urx' => 195, 'ury' => 282), - 'Dur' => 3, - 'trans' => array( - 'D' => 1.5, - 'S' => 'Split', - 'Dm' => 'V', - 'M' => 'O' - ), - 'Rotate' => 90, - 'PZ' => 1, -); - -// Check the example n. 29 for viewer preferences - -// add first page --- -$pdf->AddPage('P', $page_format, false, false); -$pdf->Cell(0, 12, 'First Page', 1, 1, 'C'); - -// add second page --- -$page_format['Rotate'] = 270; -$pdf->AddPage('P', $page_format, false, false); -$pdf->Cell(0, 12, 'Second Page', 1, 1, 'C'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_060.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_061.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_061.php deleted file mode 100644 index 13e18c22eab..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_061.php +++ /dev/null @@ -1,264 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 061'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 061', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 10); - -// add a page -$pdf->AddPage(); - -/* NOTE: - * ********************************************************* - * You can load external XHTML using : - * - * $html = file_get_contents('/path/to/your/file.html'); - * - * External CSS files will be automatically loaded. - * Sometimes you need to fix the path of the external CSS. - * ********************************************************* - */ - -// define some HTML content with style -$html = << - - -

Example of XHTML + CSS

- -

Example of paragraph with class selector. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc.

- -

Example of paragraph with ID selector. Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.

- -
example of DIV with border and fill. -
Lorem ipsum dolor sit amet, consectetur adipiscing elit. -
text-transform LOWERCASE Lorem ipsum dolor sit amet, consectetur adipiscing elit. -
text-transform uppercase Lorem ipsum dolor sit amet, consectetur adipiscing elit. -
text-transform cAPITALIZE Lorem ipsum dolor sit amet, consectetur adipiscing elit. -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
No.XXXXXXXX XXXXXXXXXXXX
1.XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXXXXXX
XXXX
2.XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
3.XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
4.XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
XXXX
-EOF; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// add a page -$pdf->AddPage(); - -$html = ' -

HTML TIPS & TRICKS

- -

REMOVE CELL PADDING

-
$pdf->SetCellPadding(0);
-This is used to remove any additional vertical space inside a single cell of text. - -

REMOVE TAG TOP AND BOTTOM MARGINS

-
$tagvs = array(\'p\' => array(0 => array(\'h\' => 0, \'n\' => 0), 1 => array(\'h\' => 0, \'n\' => 0)));
-$pdf->setHtmlVSpace($tagvs);
-Since the CSS margin command is not yet implemented on TCPDF, you need to set the spacing of block tags using the following method. - -

SET LINE HEIGHT

-
$pdf->setCellHeightRatio(1.25);
-You can use the following method to fine tune the line height (the number is a percentage relative to font height). - -

CHANGE THE PIXEL CONVERSION RATIO

-
$pdf->setImageScale(0.47);
-This is used to adjust the conversion ratio between pixels and document units. Increase the value to get smaller objects.
-Since you are using pixel unit, this method is important to set theright zoom factor.

-Suppose that you want to print a web page larger 1024 pixels to fill all the available page width.
-An A4 page is larger 210mm equivalent to 8.268 inches, if you subtract 13mm (0.512") of margins for each side, the remaining space is 184mm (7.244 inches).
-The default resolution for a PDF document is 300 DPI (dots per inch), so you have 7.244 * 300 = 2173.2 dots (this is the maximum number of points you can print at 300 DPI for the given width).
-The conversion ratio is approximatively 1024 / 2173.2 = 0.47 px/dots
-If the web page is larger 1280 pixels, on the same A4 page the conversion ratio to use is 1280 / 2173.2 = 0.59 pixels/dots'; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_061.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_062.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_062.php deleted file mode 100644 index 45fc25dad18..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_062.php +++ /dev/null @@ -1,140 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 062'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 062', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'XObject Templates', '', 0, 'C', 1, 0, false, false, 0); - -/* - * An XObject Template is a PDF block that is a self-contained - * description of any sequence of graphics objects (including path - * objects, text objects, and sampled images). - * An XObject Template may be painted multiple times, either on - * several pages or at several locations on the same page and produces - * the same results each time, subject only to the graphics state at - * the time it is invoked. - */ - - -// start a new XObject Template and set transparency group option -$template_id = $pdf->startTemplate(60, 60, true); - -// create Template content -// ................................................................... -//Start Graphic Transformation -$pdf->StartTransform(); - -// set clipping mask -$pdf->StarPolygon(30, 30, 29, 10, 3, 0, 1, 'CNZ'); - -// draw jpeg image to be clipped -$pdf->Image('images/image_demo.jpg', 0, 0, 60, 60, '', '', '', true, 72, '', false, false, 0, false, false, false); - -//Stop Graphic Transformation -$pdf->StopTransform(); - -$pdf->SetXY(0, 0); - -$pdf->SetFont('times', '', 40); - -$pdf->SetTextColor(255, 0, 0); - -// print a text -$pdf->Cell(60, 60, 'Template', 0, 0, 'C', false, '', 0, false, 'T', 'M'); -// ................................................................... - -// end the current Template -$pdf->endTemplate(); - - -// print the selected Template various times using various transparencies - -$pdf->SetAlpha(0.4); -$pdf->printTemplate($template_id, 15, 50, 20, 20, '', '', false); - -$pdf->SetAlpha(0.6); -$pdf->printTemplate($template_id, 27, 62, 40, 40, '', '', false); - -$pdf->SetAlpha(0.8); -$pdf->printTemplate($template_id, 55, 85, 60, 60, '', '', false); - -$pdf->SetAlpha(1); -$pdf->printTemplate($template_id, 95, 125, 80, 80, '', '', false); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_062.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_063.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_063.php deleted file mode 100644 index de13515c7c4..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_063.php +++ /dev/null @@ -1,131 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 063'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 063', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', 'B', 16); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of Text Stretching and Spacing (tracking)', '', 0, 'L', true, 0, false, false, 0); -$pdf->Ln(5); - -// create several cells to display all cases of stretching and spacing combinations. - -$fonts = array('times', 'dejavuserif'); -$alignments = array('L' => 'LEFT', 'C' => 'CENTER', 'R' => 'RIGHT', 'J' => 'JUSTIFY'); - - -// Test all cases using direct stretching/spacing methods -foreach ($fonts as $fkey => $font) { - $pdf->SetFont($font, '', 14); - foreach ($alignments as $align_mode => $align_name) { - for ($stretching = 90; $stretching <= 110; $stretching += 10) { - for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { - $pdf->setFontStretching($stretching); - $pdf->setFontSpacing($spacing); - $txt = $align_name.' | Stretching = '.$stretching.'% | Spacing = '.sprintf('%+.3F', $spacing).'mm'; - $pdf->Cell(0, 0, $txt, 1, 1, $align_mode); - } - } - } - $pdf->AddPage(); -} - - -// Test all cases using CSS stretching/spacing properties -foreach ($fonts as $fkey => $font) { - $pdf->SetFont($font, '', 11); - foreach ($alignments as $align_mode => $align_name) { - for ($stretching = 90; $stretching <= 110; $stretching += 10) { - for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { - $html = ''.$align_name.' | Stretching = '.$stretching.'% | Spacing = '.sprintf('%+.3F', $spacing).'mm
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
'; - $pdf->writeHTMLCell(0, 0, '', '', $html, 1, 1, false, true, $align_mode, false); - } - } - if (!(($fkey == 1) AND ($align_mode == 'J'))) { - $pdf->AddPage(); - } - } -} - - -// reset font stretching -$pdf->setFontStretching(100); - -// reset font spacing -$pdf->setFontSpacing(0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_063.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_064.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_064.php deleted file mode 100644 index 39da07139a7..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_064.php +++ /dev/null @@ -1,176 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 064'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 064', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->SetFont('helvetica', '', 8); - - -// define some html content for testing -$txt = '

TEST PAGE REGIONS: A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. A region is always aligned on the left or right side of the page ad is defined using a vertical segment. You can set multiple regions for the same page. You can combine several adjacent regions to approximate curved shapes. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. -Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. -Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. -Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. -Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.

'; - - -// add a page -$pdf->AddPage(); - -// print some graphic content -$pdf->Image('images/image_demo.jpg', 155, 30, 40, 40, 'JPG', '', '', true); -$pdf->Image('images/image_demo.jpg', 15, 230, 40, 40, 'JPG', '', '', true); - -// define some graphic styles -$styleA = array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)); -$styleB = array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 3, 'color' => array(127, 127, 127)); -$pdf->SetFillColor(220, 255, 220); - -// write a trapezoid with some information about no-write page regions -$pdf->Polygon(array(15,90, 57,90, 67,140, 15,140), 'DF', array($styleB, $styleA, $styleB, $styleB)); -$pdf->SetXY(15, 90); -$pdf->Cell(42, 0, 'xt,yt', 0, 0, 'R', false, '', 0, false, 'T', 'T'); -$pdf->SetXY(15, 140); -$pdf->Cell(52, 0, 'xb,yb', 0, 0, 'R', false, '', 0, false, 'B', 'B'); -$pdf->SetXY(15, 115); -$pdf->Cell(40, 0, 'side', 0, 0, 'R', false, '', 0, false, 'B', 'B'); -$pdf->SetLineStyle(array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); -$pdf->Arrow(60, 115, 35, 115, 2, 5, 15); - -// write a trapezoid with some information about no-write page regions -$pdf->Polygon(array(145,130, 195,130, 195,180, 155,180), 'DF', array($styleB, $styleB, $styleB, $styleA)); -$pdf->SetXY(145, 130); -$pdf->Cell(42, 0, 'xt,yt', 0, 0, 'L', false, '', 0, false, 'T', 'T'); -$pdf->SetXY(155, 180); -$pdf->Cell(52, 0, 'xb,yb', 0, 0, 'L', false, '', 0, false, 'B', 'B'); -$pdf->SetXY(160, 155); -$pdf->Cell(30, 0, 'side', 0, 0, 'L', false, '', 0, false, 'B', 'B'); -$pdf->SetLineStyle(array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); -$pdf->Arrow(155, 155, 180, 155, 2, 5, 15); - -// reset x,y position -$pdf->SetXY(15, 30); - - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// define no-write page regions to avoid text overlapping images -/* - 'page' => page number or empy for current page - 'xt' => X top - 'yt' => Y top - 'yb' => Y bottom - 'side' => page side ('L' = left or 'R' = right) -*/ -$regions = array( -array('page' => '', 'xt' => 153, 'yt' => 30, 'xb' => 153, 'yb' => 70, 'side' => 'R'), -array('page' => '', 'xt' => 60, 'yt' => 90, 'xb' => 70, 'yb' => 140, 'side' => 'L'), -array('page' => '', 'xt' => 143, 'yt' => 130, 'xb' => 153, 'yb' => 180, 'side' => 'R'), -array('page' => '', 'xt' => 58, 'yt' => 230, 'xb' => 58, 'yb' => 270, 'side' => 'L') -); - -// set page regions, check also getPageRegions(), addPageRegion() and removePageRegion() -$pdf->setPageRegions($regions); - -// write html text -$pdf->writeHTML($txt, true, false, true, false, ''); - - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// set a circular no-write region on the second page -$regions = array( -array('page' => 2, 'xt' => 195, 'yt' => 110, 'xb' => 179.693, 'yb' => 113.045, 'side' => 'R'), -array('page' => 2, 'xt' => 179.693, 'yt' => 113.045, 'xb' => 166.716, 'yb' => 121.716, 'side' => 'R'), -array('page' => 2, 'xt' => 166.716, 'yt' => 121.716, 'xb' => 158.045, 'yb' => 134.693, 'side' => 'R'), -array('page' => 2, 'xt' => 158.045, 'yt' => 134.693, 'xb' => 155, 'yb' => 150, 'side' => 'R'), -array('page' => 2, 'xt' => 155, 'yt' => 150, 'xb' => 158.045, 'yb' => 165.307, 'side' => 'R'), -array('page' => 2, 'xt' => 158.045, 'yt' => 165.307, 'xb' => 166.716, 'yb' => 178.284, 'side' => 'R'), -array('page' => 2, 'xt' => 166.716, 'yt' => 178.284, 'xb' => 179.693, 'yb' => 186.955, 'side' => 'R'), -array('page' => 2, 'xt' => 179.693, 'yt' => 186.955, 'xb' => 195, 'yb' => 190, 'side' => 'R') -); -$pdf->setPageRegions($regions); - -$pdf->Polygon(array(195,110, 179.693,113.045, 166.716,121.716, 158.045,134.693, 155,150, 158.045,165.307, 166.716,178.284, 179.693,186.955, 195,190), 'DF'); - -$pdf->Ln(15); - -// define some html content for testing -$txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.'."\n"; - -// write text -$pdf->MultiCell(0, 0, $txt, 0, 'J', false, 1, '', '', true, 0, false, true, 0, 'T', false); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_064.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/example_065.php b/htdocs/includes/tecnickcom/tcpdf/examples/example_065.php deleted file mode 100644 index f1bbcbe9dfa..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/example_065.php +++ /dev/null @@ -1,98 +0,0 @@ -SetCreator(PDF_CREATOR); -$pdf->SetAuthor('Nicola Asuni'); -$pdf->SetTitle('TCPDF Example 065'); -$pdf->SetSubject('TCPDF Tutorial'); -$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 065', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); -$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set default font subsetting mode -$pdf->setFontSubsetting(true); - -// Set font -$pdf->SetFont('helvetica', '', 14, '', true); - -// Add a page -// This method has several options, check the source code documentation for more information. -$pdf->AddPage(); - -// Set some content to print -$html = <<Example of  TCPDF  document in PDF/A-1b mode. -This document conforms to the standard PDF/A-1b (ISO 19005-1:2005). -

Please check the source code documentation and other examples for further information (http://www.tcpdf.org).

-

TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE MAKE A DONATION!

-EOD; - -// Print text using writeHTMLCell() -$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); - -// --------------------------------------------------------- - -// Close and output PDF document -// This method has several options, check the source code documentation for more information. -$pdf->Output('example_065.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/_blank.png b/htdocs/includes/tecnickcom/tcpdf/examples/images/_blank.png deleted file mode 100644 index 38f7b2fa56ab08499e0d6f848af9b91c14963aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx3?$;uu;>Cg%mF?juK)l4Uw%aT1W2wV$S;_| z;n|HeAcwQSBeIx*fm;ZK886+f`vVdzag8W(&d<$F%`0JG=+x?E0}66^x;TbZ%t=lF YvY8kdJ=QNN1hN=BUHx3vIVCg!07t?hGXMYp diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/alpha.png b/htdocs/includes/tecnickcom/tcpdf/examples/images/alpha.png deleted file mode 100644 index 5447918606d892cb1dbe1986f03eace68bf1a4c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23886 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 D=>KuP diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/image_demo.jpg b/htdocs/includes/tecnickcom/tcpdf/examples/images/image_demo.jpg deleted file mode 100644 index 262bce272c8f2bdf6d1fa3fd2efa919a6ae700cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573845 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 IJ8jYb*|WvFi2wiq diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/image_with_alpha.png b/htdocs/includes/tecnickcom/tcpdf/examples/images/image_with_alpha.png deleted file mode 100644 index 3011618ded08056d5b527dda32fa8f5bfd843f22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244218 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 x?gk&T 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

$Fi7KR7Hpbkn0=Thd_3 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 *8h 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

Td2n`c-cMm@*oOdYa3>`Lb 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 s>$#rmxt{B}p6j`u>$#rm`E$_~ek>+WeyWe{w z0!uDra#t-X)r?x|>7IF*KYbp$=1f=hbV({o)J93%$=r~MH4w{P+}+IPAu>U5kxH79 zD2jsRIXE~0M4rs+j-P+_xtRgo9d6<#ZsI2X5`u0X!A;!6P22$MCT`*;ZsG=5H*pg; z@z)x1^9X*=_aOa*G=5SUlFi=$A8MfcVE4R8ov&#-B+J|ZoWf@`wm7|It!n@ z^clVNDP|Dy(|3FpLpw9;3Q1Sq*6)DS4Zm*UCcc@#`s{zluR!At4vtqO+JVQP5z2k{ zb#Qk?cuo*-x1B<|_P2go2x9Kn5k|NJ)HApclDj`wT%Q9Qehy*351wwYbrU!74FT5Y zICYh!Jtxt1f#eS0ZtevN1JX$TamYl~rjZ+>=&aSoOY-U76giItMi3ARTIdF(9 zF~ms3A^}L4g*Xr~A_1W9{#Euo5qzF75|Lk}kI%H2Bj6X|bwjS3xQTBRuyzt=$0NU% z*&%|OeQF&c61iEac_?}8x9fhh-fTA8_4;zT+^#m8RiDSPOr;;jsh>(!EtO0)XLoP_ z5n>_&XA+Jvq?noznwV1J5SlioHnofSY`&N+7TtV4TP#vH3$bHKfb8~Z%1KDq*@TE! z-qv;H_3z5A8*JUg4Y2;=B-N*4YWJGExf=kQJEFViGOah4XBQ`D=cgCv=NH@6$vI7C(;juN6I0Omj<$b!Vch{6;C z$Iy07>blvYYY!HChx-S2Zynyby*Rwp&h|t)0Dhh&A_5Sx0}$dBqa1*cu9&rRyMDLq zx*^w1+yLwAj;hbz=()SwF4c2$tF>-7%d^wtM@J7HKe~T%dU7$Ww_3}v+H5z&&`-72 ze&}H;tg5x-sj|75PDNF%VF>QyRKcMYY6AyG3e1c_*ugbdM1dv{GaImoGfNXG1e8EA z0JFr%DWtAz_UG;1?AD97UbuJX?!9{lcV6t~hdbp30C*+1o-yh(g6lf1i0B4eUt=TU z5C7S_S+Z|DuRE>M%vN_$tK(*MesTKb`0=CrAKriR@N{{;T3@b*&DL|yQ?XK3 zm)kr}MQbhUT9X=S-DVd-$)%_g0HfDpppM{sQD#E$oF^c}4aIq**(+e|$g}#^5FG(B zpiAHsCL)djkd>Lc6q+WsUDu^%*6klGZr?q)_sZRSuf2MB@7`knc53Fx(H&uTb%?n0 zxpvqh!q2knbGhWr&%jr^{mlM!Pxxl-zB$19jH>car4)c8UQUx>hZpk4V3pS-mrB?yQCRzP%S5^@#-a}uE_ zyLtw5s0Mx2LEVs`sv!UqMM)yUghZ)HaVFiJS-&>(fK8NH3SBqfpSO#}{MO$7%P+kC z?KfWio4?sRc+oKc5+MO1Jww&Aw2|oZ}+FQ*i3{`FZ(6n@0cLZ@XE_zYJhK zD@u622X;B2SsD9_rw>1P?-#%R;GGAn^Yi7&^6Yq-w;S#I?Zsvq#$g(#Y~&c&J?HEe z9cNAfyg*j)=s}nmRVwUm85z6>>%jt02iyTQ5eW>6tD69e5DO|ehe#qqP|e&RFuGdK zb)3`?ilPEYVh2|wLt>&P3JZZSOOOyK1xXRw#-c!K!Hc)w`1@Di_|88Z zzVM2K4uKtjiQx)bh={a<6fp>t2sk8cQgvW6jr;>mXjKNjCAuzRU zRSHp%ib#kgoTo{W#J0mGQeZpj$JN@~rd}*JPfs7c^YM#+`}*Jhr+;|ym2UyHfJ8(H zxGUPA=i%<3W7gGnzuM6MZtKqtq^@4y^*Q+Sj;&pn1Q7rlxw)&Gn$}vgX|Y<>DiIMe z5+gB_APb@(krN}JDVXmNX3zT|5U=%4Twl1WWxCF+-v+5a;>eI2h4mlJ0iU<^nR^}k z^G|;B^IyFA_QMbFpFTKV9$yU0rA@C0ID1~3O^z^)1V zKrrSdOdUugJC8^vXG3biV44t6zzqxl94rALkdUi^feR2KgD^0*4GBwRKu||A;fe@e zYSH84X#x`f0Ic8wfdDI5;1H7lpt~6m3%R*8GMlv$*rIsTDGM>hHgVU;Y~CF1&t7`r zrEkCfci;Q&-kn!i5+Utyw^LR`d_}J7-qw||b>nLNKD63#3Z5MX?hc3!pkBv34O73F zhRx9T!_e1h%w?L&RK}_Hla_2&34wrxnM6|8g+;?n6C^}QDKpv^>G{Rc#jx6HzacAL zt4&kh<|RyKC;$YcU=GND5zwJ_fCSVY#=SYg!)f%Y03EXsfn%LTd9}eOLt1OilLI24 zf-3+c1b0G5SAkFg8A%-geBPxt5i^098c-u3l>0I)hjD}nyn-7*1P(|N8HKDG6C&bN z+#Ench|G)z);3XCBnq}c?j7Vx`C{uSS_m?q%?|gwJ9p==-1*k`zw`RHztisBMdV%S zJ`yoAeJZv-L$2$7{O{B5^Vg}Wo^?t95Q4j!mNISn)pB)ya(Q-kd4ADfuBL5Y%Lom4 z0zy|W;O1W49BcKgIusj}oGAohmV?Ce2ADZTq97PWLeq9l+s)c}+b+7rL1_0Vw#11@ z%yE}E;#HUHXY22-OR(LV{s&#Ko0Ra6B&?o|ad9<6)QjU!-hT7PZ~ypL$Dce}ot_Ps zmzPg2*5@0jg=;abU@B_GCIE{-4!{5c!r%>wgo{0)UXnRGE3FvzW<@nE6U%sp^hj*Yk_Nw)F7JIOPCf=7>lH;I))~eR+O< za=d(Uv^+jpU0zJvP3?!$4^~Rf8MMeg(IIlj3I=LSh-R>!>SnUyRzcc8$hjb22$u-+ zgdi+T6h(PG20RZ`m@@{C&0?PBi`lK)i^DtZ-mRwFqtKeO+cVefbBE0pv&;;BkDmE& z@N8T88f>Xuj_$=`dtG;d~u9da8`)c5CGv<~{b!Z|oG8noA zx2B6gz}1jRh*8k20@##`Rlr<5Pk9_|xy9wWT&}lI&hGxhgIB-%or4!%a|}#uX3WOS z?u1D0zGK#vefy;j?r*b5zVXT5b5uEzY2KWlKRtf*==Aa9%agNyb>1)6({ioTVAJHa z;Lfos#jU~I9=&5)_!EG9h!rpDS=Ch02L+> z5TZ0=>oOB=WIN zm%z+TY?@@YH;+xw(ko`&Zi~4EAVZ!^;KVO3C!%t6b zJ9)0KMIy88l9(4QXu;x~Yfu1U0K;Jdcb>u2>}kJS1t2_OJe(BX1*a{T1}(Zh%5M^DG)G7p<+z0qNWTE^3D z*$xiM(L&3h#d0Aw&ovt)o)c&(m8j%A;VNS_VkBWh6DSyrf(EGIRE-_ToZT3a9l?|# zG6>lyz*M1Ioo~kF)75b+^F^5Lwe!W^{;mC6_hyUR9%qQrKP#zrrS{i3^~IZ(FJ0Mh z%n>DjPFg)vRc>y8HmpzH`^B3-`=393`ry&_J}fWS7wghz>oewpsH}$WfKc56 zST=}2#M}kgYuTn+!5Cbg8Q#FK(>}HVkKkNPT4F@5fDFiFUTbJPIrn1_z{(6L=8VJ@ zg;UkK0e8UW#rB04W87c|0Gn}~#%c8GXc*@Q?W}VlqbTI4lL>(rL#8qUFr&KH+7Qj2 zo})OHTx-eBb(5j0nZrD``=D9tpkNRXW1vZkRSyKf=2oE=R2@pm>&H3|8xdbsKU_bVug>Rh-ah{AsM?uAre)l2&rVMs9vyvrdj4dyxyYMd zw_ELd?MIjjS}wy>S1Zpo-D~g`Gpe7C(z&~WRaj73DDcP)t5N6@95AjGP5F>B}vDHd=u@xVf3Bc{zRj?oa>658nCN zI~PaC!};;FzRa7=v>MBL;Ho%HP^%E48#0+YI1W=bKmknd9edES?uUkhYLUQVNa_R# zfEj85=m0`XLC~ukU=snst2#lY&48q)FmECZ>RE+I065UbD7XUnVmt2l9GMwvznRuU zC14QQdvU&ZC<0{bDOBTzeU@w}?zK+VwWMlh00=gf;g^@}E-Yvkqh$3VS9d65Ef)g- zK+!zb=AdIS$cD^_Y6e!!)R>T4(!TT$r=wxmoGtHt_uDW1{Xd3g-%NLtxpqmSnGq8c zGxHU;uD8N{!=%<1Ikh_vnXyinCnxuhjy`;P{NQqRI`*4d2CHM4M$?g^u@{5tI(ff= zeh>tnibyNMwr4O_T~{K*%(xsV5d>lbNC6jtHsGtCXM%GQa-4t^P!SPqtf2*jinEfF*~wOY&e{=09z`QLx^;N4G-A3yF-&VAgt^)QaQ z>U~qdovM0Xqp%a8!>SGElvA1avS2I|Q1Gv;hdf31b8X ztJ%iBOq-EGQlb!~jp)W>v23N0SaT(Z2IO{(w`S6Ug$Pz_KNy2B;OvEV|1L!`OtD%O zB~ugB;?=-QEyJJ?8}aH@33d)SQUDdwJVAj-1n#JoSEHE&V(Ma>sMLy%LXK8BfCiqN zp=7*Rri0d4eN7kdZN}wldwTxbfBs&(_ad?EGC?yj6LE3!ovXEb{hKPazLZvoR`crd z{SQC6|L)o8qs`^%So)d=!0eX2jy8>8201$#wN!J~VS+Iuxt#*F6%IrW(JD}6>;0Ml4PZfGZQgvVsGXKnjS6eFn1KZ4ET8j;!kEBLMQPnR*F9v9F$M z2n)~V?ga)j{n_&3K{LCx*t>gh>t46G>(IJ8fbI^VtE=J9iL9$-{U+s! z@>SEyKGjz4HVx5L!S`6Qp4n*UO@SVHy?P z)lHkZ|y79JO&r;soEG>kGYHf9KE z81wNsjjPS;|K&gJ-+RM2nVFfJxw|pTPHB8DL)`81Zw9kIM=L}yt94u*AAR)E2fsdj z@~|JzbKNLphY=w=4hCw&;F}CtnF*phSRk|D)Hs=gx}A+-kw^kJEUo)MzD2CSLxqkw zPY4kk#sol!Xb32|W@p?KldmJ~NPp7(ywI?y*9xKCVz&@Zuqm zW8Dl81|uG~tJ=-;a4~F7F3#@H=XVZoz0~c$NHX8mrmE_7SN^IH@9Mtzo0KQYSGlov z;>z62&A~Po58wKifBxlGIGk+n@qVtrkIx2t&s4|h2TDPhh+cxEF0uTgz zSL_K;#^Mf~B8wMfxwlUpQ?Fr~(o8s@sS80?=UTXR>L_Q1sRr)nQHK`npZ=&FcLW7Z*q z1iHf**vMQmv*To_=t*lOo`zZ{AGdYBp17UXr^|~+ZQR@6e{pf=KQ&=R$C4vFiahUBJYtVO}A5tYTkjPK0T>+|@n*ncwlCms;2 z)~1Qma?C?jpfGWoC5&iAb(nlA?X05&V}|LnR~{`6)Q>ifK2FnS=r7mzzVpAt?m)y; z*~~=T%t8oPoA|og`eJ(cm$G+1gDQ7KKph@Gc>m*Hz5Vo~Pd4YrIj<`Z1xIQsYzBvl zY)BQ{+$xh(B#Ml#pi1Vnh)hs=wG8nN%k9L8(Ht2u0WmlL>>*wnF9&%sK`f381Rz9? zIE|bwbdg#@5CA|&aFv;uAb_E}sTnyExUuhwP|(7i1|u0b8fZXE!Bvo^fZ&*!2p}4c zmNQ&#eKxbQ#$lD^Y<+Un9(}wxcwz6(OS4-qVVJA#rtG?^?(T@MH$Qyo_2L)3t*`m& z%U4A!GdD9UTBh6|Km7Gi{^?&I{`$S+`;WI5=el06PnYB6l*f!{5nT|3AtsO(^Ppu? zLYg@lc+1?NVW7&;%q8vnXd5^3Q5ikW2xk_$(qbs2jNsXr1;JxisY2eksufV*4v`@x z0B{=t6p=U&Mxp6$NkrGFiqLGYNgc<-h*UQZw?mIIONTE=x8VNi#2Ltuk`Sw%tjm=9 zi)oxR2!<4#7f&9%|BIhLdgp`H(c|^Wsg@1TDzHMRRFt4tas?+-nkr<4 zxexPP)t#RV29|rE;BAO=!7rLV4qMBDF{XKiZC$| zu#h7ZM==kij?4@s;5o!#DdOP18HmU|dN3;L0FsErfgM|_fR)Iyx;tfXGL&FQ6dS^^ zQgy6m6V+ZXHvQSj*~9zu!&`?hzp;1sRfr2yBf?ti^$hW<=k!W{U7b~5OcKA&t1n*} zt<*GY9jDd(cYpe`fBv`Q4?jBp_+fu?uG^t*Hk1pQ#w0!rj1Y--MU*9CE~*t8=F|kP zCQ!Pzb*ZjKvY|x`U8psLQ^9osw%B^=AZV4nfJPZA0I_&1W*EA;je`}1T=J~zqEPK8 ztd2slOIER4G=UVRTnr$DW(G||fo%P_->d-V?ctqffn)z@@@9tQXb>CDt0}Kbt?rIV zI7Dd^0sxXLpt!q(5RuhDynm~08;0tMnHP~5U9E~Mv&~Yy+>%+_Qb^=?fnJ=~M^WLxobb`SRtYf>(h^a^~(=__KW4?$E)Mh@$78cY_Rk!wLL(Zn<*I?8ZuPe6hBs+ za{N{b_mTy20*vIv*^p)wUXS)9lNU1QM5>-gkLu#c0U$cI2x|v4JR6{EJO~FAF$95L zu_6UxFjvo7Qa2|hA|wK5aR|(8FrgEg12FSU*IO{4V(5-ezR4I_yi~3303l!qrR?TJ zWJCy}PHtpIqh>M>me&`@7n}9T?8(QsUjEkX)+-nnJ9V{7{I4(c&K%f1zN@OP&tdE9 z%q;m+Z!dK-Gj%PsOnLL++i$-0-+y#+|NiFjqxJFGv|0;Qtho^j`&_ca;Ef;^Lv{!| z#|65snMIMR%z%a+t25M5GnCp^o^b<_M{$XKu*R?vE|S(4N9Z?=)~mUP#i`B1Q2Es zX5p$vQMf~|9GIA+PJs$wg23(u&WPgDS{Ep6A-fNVSoxrJ4z`(m%4k41~^l&pZOs0Fu;>T0_^o9#WgeeaFgtyhp|&u<~@YPQGK$#i`} z5qx1v#Mjo0{}Tes+;C{(msJk91aN=~?pC>OV|&;nsEXwfJu1%$W)({%tVvLRiR*>5kLd1~7%rJY~1al8ya52P|g;a+O zc_@RSL}ZxHBsRz#b6>_Sm=l`r7Mvx-R+>iGtyxIw#3K=c;2w_+sfAIFt9{u_^%cF~OoS_^vI5#8^bS_G{awT$P4hUpztP-FA_SqDJBNAaC zq$o3jP)Jxai4;lV&%6yLH!RsD06CDEB2}u5NSAE2C34^ZiM0w8M^mo~%-*0x$5x!x z1G=*p*7fK^)oNIZBRSs_001BWNklw3GUwyr0M*L}>de>;Ty>2}yvCRk0UvVQx=|Ko@M?Z=Pb`EYxFURO(*Myf?> zW;X;ybaap)Hca4N#u{frKoKBDp+OlzXJQHJrjVILYCEg|&_HN`fM@$6+septfK`A5 z*sz{?Ac^D>86smFU_CfuV28`Tn%n435|RW2JKCneO-IvK0YHQu-KOHzcow=>J9MO+ zV;iGrSxz=1G}LkdM#+=YF3?@z;>;0g#l_cLL@hLBSt7%`vF%g*>w3lee#o^ zzy4o*|K4k6(ad*J%PfAO6ab$WaM{<;gTL;t12{lAJG%dyH~;PA-FGjKj<#o~)8*3Y z$TMe9f@-c9K>`;e8>4BhXPJ-y9L++YIPXG(aOqq|o;2K!UYVGg#5YPUVj?&hbwH9> z1{KM&4-koildCq2au5RY(Ln6T2h=zLQbf?q5E%mi24X~X2iz3cW?q0hK%9sJHl0-P zQbS9QfRj3?%#!yLf_Ndz83GywLS$%V z9M;>5lf!$j@4fIh((D_A>lG~`a@A-0#R(8!=Xw|U)6vS^)U{e2^X0F8@`L~RfBoqG zyC0uDd<@$yPn(%&$P?y*K>!0w4QRw}mB&p{cTixI6ouClWJAR8w@tbi>1QJiSr`>4 z2}uCFWKHEdpuL(2|x? zrji=LPAFjQi_C-;$ql*GBq2s9XVZA0VV0Ub5p)1&b7f)zRBuuUT+wT;76Ui47!!x+ zgsg<|c1MRT%x2&M)#~ZehY=m27P5l1mQAgrjlEJN2Pl&PbC@MzVggkUZIC2WQBtE2 zO%2sjpeTl7YSpK~PL2W9hUt?x?e+g17B9TwvipsV&uhTp)7!(Hv9-He`noae)3Kib zh+gyN{%?Nu!7tuA|LCLT#}E6<3mtlZjCJCr1E@}!s&W%_Dls^8Ovtvzx-C#V5QfI1 zl~@=r%q|pq;F<72NBaU}#mS*ZBmnCefWQ$PnNb0WKvkDDE?SI2z#IU#N@?KEoycp2 zt;${ii9q67$<*DQA|&*RsE*H^3Nl2f4jDNDFOuf!W{3cSiUhzIiJQhffCD3AqUvZO z08FJQp?1VXAYMVK6p#wyfIYLhS(!%b*H2c<)$!xQSN?8(=QWNCvrk*%cRK5O|LO0j ze)#%Gtv^1no@Ihys#>&6dG+g`{OeEt=|^WDe0=fnXmxy^v>r6Z!^Bt#OwgchSV&ew zEY%}aR=3!48=i6&AcyikZ>yOz*DOz%HkCCZhxqx9(m=D;GpSZpL zfB53=tGmq5Y*)PNG44LbXInvJH<9M5MC;GXtk3+eTz4YxSEuj&Q@$$)& zaa@88ETaT~OVv%*sp^oaR$oXs2q;Jd*aS*w9WkR#m9-|UxGE4x=1IC%fY1r5VIrD| zk04<5LZFq=atlat7J(TRktpqvECM!>k+>ydvN7Z6FlR^+%Lw2=j3FRLm_~N=$P@&! z3PvbOarYZd7}^LiqE8eEVyoK`oVXay6Li7VJh21$I=dQn63E@zMNAnPu@zGQMP5i< zL*0zls8Ml5MZjUy%?iS1Yr{0I=F6wIUjF-LaZiD-u34^pfE~HMSaL zge@BfiigocmFjpj`2`6Iw!q1Q04;)bql*z@FcMbmq#6MQ@<2E`G4;d>z>WpjOo2lL zUTZZJhGMwbi>RjR&5V$Vx)A390x>xUhu~GIWpqXxYTag0;6M#i(-H%K0!QLR=w6Y1 z9AQ#d2ocSUgvr!FWY&cJ7;i^rw{3P?q35s~A-WMlmF+Qam(`tkCd7c*)Q}^l2AeJb zVQs^-$=#e;fUI&1vEw{gm|z%vv$a}ChssrbETOARs7!VSS?JME<<_I z{Ek-Fx1c=hpr$Vl>ix<$>lLkbBS3Ze^uas-_M_wXeslTY!8k7Su%T&#r3#t#83b%J z+h)kc1xa1d<2(>L1*AEF3L^Lb5@Ow`^pjU5t2mh5ALUl2TXWoJ>5#jC%IJ!!G$j}c zPD%}MN;sQ==MWv3n1dv+ei8#1)H{OMP>Ws+r-`Gu2tbS3NFCjGzW~V!e}8iN{zvBz9}iE?VHi`wm?y3#;=-8RX;R+iZk5Pm>Cm>=G+>ybLAvuC@HZd1P4YS2dE5yvKg^@25VB#vABDf33+u8Oc6-k!2t7i)b(V=Viys- znu5cm828%r$~?{(*?lxtA~e|a=#CL;sihR@Qrv4xhGs7aBeFX&RKrrBRuJiKrO*Wy zG$IlLa*BjhP0(#&?ToS2@b@Y44sEpEHnt~+WsZ+3T(Ue{T> zDRF<+S_i)-uN*x;`S`tefAquU#~-eakNV}A+2}(Ls2mN(%;FfRu(~@2j*Aqcr9{H+ z)sT^6KtnS3nM+I3xvpDZE0pTn$v2kIa{Gp-CQ>s)L?mV>S|pqYm<+3n05^zT0%&2g z5kv5d)X;wC1w2nwGsp~MB&(90wR&J6bR|Nx?1Ua7YhX$QB97v&%!rZ64bVbFY=V{G zsAk210LUE!A*_pzlQ$G*a~+FWK_&wSS7xK=Sd~kunG?Bbb(ypw+c(eEw+al9>Uf@y zhwXN?y!FaI#QEJ_UGeoQt?QoVRVBoiI`Mx-X2~D#Kye6^ne*+& zs^(3Belo=%2_p(}u7;%wk}MiJY!#&x=RDL6dXV9x2WK(f`R?~Q&7O@ubuc$X3?Tr( z6|=5x55LH)ua;H@;8w;@e*N?JfAqu6(}$b$w;*ZLm?)p zF`(?q)4L#dXR#Vh6RTQQAJj)@G;3J5$PP$MitwOdRsJ^f;T{r3Aq?oLfh4f4+$-0K zP(4PpIpl#NU=V164`q9?VOr1cfrJ)Ig`w)xf$tt-5|_XvK@_%%=8TTJ8h5IWN<`2g zD>HaOaCeTN1_bQxKmd+7x$DGUP1yu-(VChOI}#G06;StT%ubDXb!W3NGfPPx4@tMx zr;QUp9_p}N4MVZ0)a$QroTjrh4*tv@5P&A`nj}S^Mj9t#3ds|=Z7nMXf|kGoG9x)6sX5ZE zJC$L zODGsu*fk!HCfnYww|BiC8Ws9YC6CTJ=p6aUM_= znJRc{CGMrz2BDpa<_JhF>!g~|M>j2cS@VT?;IxODi;We*Y*Tb}At$7;pO6qDY0=O{ zbMUc96X?Y>#3l?@3?y)fg@%ge%7VeW1JR}(Cd`{+d7947z3P$}V?6x3@0hlbz}$Dg zw93JWsFZTuYP~)Q;45=6o(*$+mI+#!HXr@`t&e~Fqt(%asXrf2&c}<5=>*X^se>^B zkP|5hwRaFqaBv?-ASN&&=7e$E^Mqgq?j*^oIw&t9IQq;PNw*`BFjia=KlVn{lk*H9 z3N((1NEpy?8{G-35{8E2o=qY*oy9k=`w?ZQ=kffL4w3u6dIuz4FNq^LHB}4B%pzj|3Bv5 ztyzxcyb@dAB{QqKd+!b49Nw)7jZBZi|5E?T4}Nfr?XhP>Qimcbk>W_yxnBY7TX$Dg z=6CT!10Zy$u}D$mOa}rF`(XnSowe%A^{or{Bo=~2SXb6?(}Kjv?dWHPGq$nz_4#tz zP7hDM`yZ%Wf%1)}^s+s?ys_Re@o#3X{}F^*@)v*c7r*}@%g9#>1|P$>kAL-(|MI{6 zr_cWOA6|U=#r^Z=xo#~Tk7pO&x|32}I!;yr-po6tlspaf)L;sX#ZV;DE0bI$zoR-U z&qJots?-D5Yvro*Q{_YY9H_*cLY2iK$bzI&EV@9x_Z@7B*is z{dVKbLWxLW;zX^Q9DFN@3|EDq}dxx1J~^4<|RQUM`9p3Mo>mNFm+T z`I|d!A_NZSb-*%~uybM?81BdDkH(2I2^QN3_LZuz zkW91gl;=XosU(52O;QVGiubXcRitdr9jsKQBH+^IB&ze&rdg;;vT9Ng>zp299o8v8 ztO-B_Oq@<&0_Sik3>8W+2`3Y&NJ$U6tZoWGBovg;aM=b<8zL|jo@*9HfGsr%Yf@Y? z;RYT%&K>TVZo|fQ9%C)L9Z~bQ6nbC#O8#3dK7Zho@Q0kR-bk)2eE9g{<6r#e|NZ~{ z@b5mj{p5@DisSy&QTXQ|hXZ=`kh`whp!-)6a* zN^?QVW2wrdZ0Xn~rVs^{@W^0iq2!U7t+1UDaM9!ZOfxq~rFUED3Z;A?e8OcS>FFxd z4Py(^DM#|ma}#^$qmQx5m}=S1>fr{6aAX|zOlMmR`$FQ_jMf254isiekBuNa?+RC; zort8?LXF6?pSpE-sbK0aPU$3^)Xg4N>B@r2$St@kt6&5o>#R<2Ctqyax-K?-|66TG zcHU@N;^@^NaVJ+9B;7?geK~JEm%HT&liawtD6+!HsXsiNKP%FTv}t3U#Ckke) z;3O3$4~)zav4&LPS(6!N3{hrO&JNn5R3;z!*y}91uN)Jr@x-vuNl<}v2Qeu~iKS)( z70L6aMNKMYu=gIxQz3)^8mtSIeZ>SocdA@VsuEQY^8Qv?rLZM}sqYh|yEF z!CM3}3WvFK93#T|_4mH7y9=e2Z;LIyqc`|g6P~Axmzy^e5r#>rt=EIp-k^lx(P%X?fUl*N0 zRdugY3)1145U=x=$R_dFZAF{8_!yu%SGO@%b0gj{@06y>1&7dN29vsYv z1EVqrX_A&yq1C78v2={!HLZl~>U=ZF<0hoo5|f~$)(g2_i8*3$Ye+&`*(tPu6ogBq zH%S8QSqMt8X^B)2gG-Wdjv!970-`7qNJgXx1L($-)`~gws-Q6!BqPGNqp=oN%}fPT z!sd+i9LvH*xkav=VUO-(-LAg-XVcT~MX01?#H+g@@HT9{oy+_+%=%-FTKfA=@R<=| zVcqO_{PG9?@&Eb7kN^IB_wwPZ7a7KVi}TvoZOzd@iWDS)2v9I35qw*s5;4Ydx3ojO z{?@fL7B_z|Z53?gg|+V(c8yz*SS*9C=Q5R~&1G;>DwA+ZFQuSNf02Ssj=0$Kb+(4SPqqlgdtN& zX5PzmrNrP}BTsZgCotj^W6P9Wnf1?~*lzKkWOOGo62i7|=5me%PfsV=m$GluHzuCg z&K~E%K-nvV!qd)<^Wuy9-Im0#On22n!&{N^t+FiUR@74N*M1(}L&|7ZR_BSB-~)sG z@p1k5v(sU>|Nfu9>LdmcK}7Ht$;!-Tc5zC-!K^<7ne}U#v77nm+wr5HzW4DDet7r6 zKiatWIGUf+O~Ob)W*Mo4^VHcPB*fsQ$Jt^q7ZN35m2{p3tXhI1xD;+oA~}MP;MB_O zSxTefdQ-D76(vf{g`YMmU>2>06jnt-asW=P3KuGx!`YHjaw1!|60EyQJwyvbAPuEt zH?9eCDiG$>###Y}5^n)FA>z!?LX`rl#0iPV%s8vCF+wE4luQ}`QVSPGIw&%n38|n- zrOa8@Y%Q6ILpjW>UQf9>=awGSi4=0B_R_NeHF;vw?%{Ag--eHI7-RSBPclo0{Q7>V z`sO=&Lu|dlum3KqL;XF_3YVfi&#>^VKm6>6fBCn6^~>Xnmych3b$Wc9$4Uts>6fN> zM8X2xKm;!=1?0h5ba?KWvT&Tj9~X0q!c=Rynd)A#9O;z&guQB(t~I%Wujb)v@L;Y9 zqe_e<0<$89XSW(T2j46S0;dEdi3`On3=o2aQ#~$x&;N2T%IRlk@l0eOD17p;9w5<4 zNjVbJP9uX=>s9p^8}7DpRoqi|tWBq@$^uf=sYoP}z=AAeST{x=xjwAFctjiVzLlP= zLQT%c;XQTN>a*7Ns=JDayj^KxT8u`-{VCQ4X?7Y3N^=<1f?-9{We1%i(JJ&Y$%BCl|oZzoxD(xio)Jx$|q6TSV9h z>)ZL$pa1lezk2WC(+|Br#PYb_KG;~9O!gu{>8VA01%)bSp54}t%pk{(cCE5UK5kS{ zo*wj@g?Gvnx;mc_k6W%0NOX&Xa#1Nt#C({sD@2?Tp^*ZXqDou~pa@r)otY$DbFm zIswfgRc>15Ha!fsvxqP9Q7?f9~(yvRT-yqa)zE}S(4(Np}2~RU0W2|5P>gS)n_oIgof7Nfl z>Zgb8?r6t#oHmist|eS~S4oQ$(S7(=4^pIFPq}pp6@~<`F-)lvD>0e2R`!iE#y>uA zI#VEGtPBxRW+FN?u1q&7O`Xy?QA_DowPC8DOb8PRQ>GAe7G_bbi#CQ7yFVRn4n;+( zb1Cp14@qa?igeK8QY$aIRzYyzdsn z4&VEJ$P_vBpW5ZW=Ii`tiGn`@X6e8B&G^RK>|vjO@?ZbUfBexG|M=147hf$eZY6r2 zmR!dv#~xh4vm^ywr3&0o6;YE|c;A>JFY78j)GWF^E;O*4n?9Wjn-r1nJ*8=IS*uR0 zPQ`>m(n)BlHJK!9B!o0!nXW~^$n@wbEiyJz5fwVFIQ9JUgl^i1cN8@Xmca-e(K|7V<>iI_s+gOopsN=by}0SfQ>xt+{u`yS*e;uJ`Sn{Ns>yXurh6n zESNH)e2f1wuFD2Hi!dt17%vc`HZH-OhUT7-gY9FOx2LKl-Hi5oo zD|=g;^ECqg_dKBSX1Q#mkL|_Bzxw#cKY0B3{l`x~>vwnC=^Wd}Owx!3#l2@Ec>p%wMuN=|wPb6w z8X_slL{hjcMtMvT_TAQdc_%Q@STnXqdmP92J;Hb2`97B^JhJH9fc195#~V%j9~ras zUpHP|bcYr`!j2DL{^&pb@WWrc|M10&I3LS;78`-oL(NS~`VL+ajuiN;rCe88dIg%Y zs+7jL4m%AMP0B)nQeyLb+;D&}>AMrPikexLBn~ZHGOvqavEHt? zUv6zG^;s)V=k`q4QY+JG>klbYlcxs&vAHx&MjXfbeATL34IY?4G5Wg3*iiN}H)2XD zStsUXyI<41KG6XDJV3QwD_>6*rT1`kduNJ|PdIPmcB$`93fSg=)h6+z=G{7O7uF^_ zMinYGtWZYY9$SbA4U4G}Z?r}rdf!g=oT)Y5UkxqD3*jzIe988^{QZW~dXu_~f1`lP z*DQOOk746<_r>Rb^WNk8zk2-S)APe4v*~`s4V8oPIdSLN6C-3epBA1)H0T-8qT{25 z4J6QKJ9HxfbEXYGn*@t1pFy*3HVh#GDXGCyn2E#(8?Xj#RESfnl1iosQy|BHG%8>P zgtdtEg#axD;C?ph-b$nCin7xXDZ$e&-vNDbW@KvN3$}4#${-|&M8QIwgiI2g&Ukbb z(6y2HWm#HEO>rR>B7hJmf|C9geFnO)`>M4 z&PYo>4n8n}bijrwEfI+29I=gv$O3dt+1I5*ojHUa+=@H4Q;6NHA(pOr$ zpWKpYFFYgEBZ4=SPBN<&8lraGVo4^IDrKr_1L;yls;m!d-~8~T&9g}5+FXLQuvYOi z0A@g$zmCmCeExejvECv&DyIQMQOG?j9*%k(_2 zv=~Q%D3MZYbQdHMWrcuqj4{L>kN)KgzWP-6dt5PXzYa_K+UJeF;SFH@zOz+E#w!b# zyKU#YPk;KO`(OUuL&PjyV;6mIz?u{CQlPdYW({V5*#_V4$ zJcjH`sFr<;+hf_Q7M3b8JU1Uef~hshVDC&|VF{C5T8tM$3ki!3;Vf2u+|& zNsuHVB@R*o0Rt%rAtomz6M&SYFnDBMRL;bXS!z7?D3n*%bX?iH zR`!|&f@JTjtdT|{h*SDHj*JwVzwu|0HD75RUOn}1*2iY{#xMOf%=&|Zm;Uao!>i^S z3ma~qefaYq{+~bj=>1R5FK_*;Tb$O(I<}QF@sMaVQP5tCIYSF_5}H*t5E;}19@JS{ z(d))rQaWpKvoaQNvDT0^9=uTUR1%aeyR1}Lq)1^1vo^^K(;%CZrrX%8=di)d7ypT3 zgKHAuNzhA3sHYq;k_Ix#j<{Wj&sP=h<%*HxJ*x5X{GE-Ze}jE6+H-;Vl|zm9jeY6kE`9E z%f3((YRXfoRr~X^f4P(ov+O7SmO=*7;?Z?do{KLVFA%d<2A)a&5Zjki7-!43Ic`l@}$eh6rQW==M9 zFFkWJS_bt*AuPjlL&iEwBzEuqX-LbAH(9m$I_l?wR{t$N>kp@O(BBoUB42L?-A|97 z{pkPx@dy9#(el;He0VHl+m>y~D8x0R+g6P7W>@CY&Wlv+s?-dI7ZoRlO5b8#^B}nS z=3FJQd2De$`}q7c|GTI4rpRI9AZ?ACacfej)&en|3YZ}im&yQvl1R2h&}r#JLCQYd zERg_fpGfw};5tjbToGmjZ0z8q$eYN;?RMBmbK$`Jl%)|FhsERV;u*4UqDU}5tbd;uKmj>3(?0hDk)gN~U?Py!rr9(7h~QmzWE##by?;;1TKsa`qjS((Ohz=?Z zL9k4f%T<}0!h;7mXR2&MY$8>m80xiclTcmH&xz5=UDK@olpN&oEj@DIvo{VT47c@fT7tiSx( z-~8h*-ao#$%XKT;M(bua=5Oz>!s=H`qNvjJo$Et2{c`RWUQ;kX6 zcc*&Z)QI;@ZXl1{l3Ix>$h!wWf!}$zd}EiqPT8E)xFY~jQdKDtMqCK#8DP{&VhnR4 zA`xsO9a|o90@FR&y15LS!!v4DfW}p@obZ6{E@6^FJQb?omQwTdVk|xDLB!3uUjK(@ zDoHw9j8-a?d^^dvZdlpxdk(kr<90umN1t}Jy*tZXck{&OQ#@<}VAHQo3pxiS*hiIkzwGND5WvVYUGwNQM!Hx2IP@NtpqHWvt;N zMGN*KlQ46=E*?k=6GD(yOcmUykJwI+BZ+?{`HTSPd{ECUZ$OdE!Iwr1i;C%k93KDg*wRs+&6-AYZU62@_C&$$ zTBuXMTkUR@;r4JW&klUm?6k#-=z}vdlPH-}d>xN#UtYZcK~$=u$SCZ0N40@-UmjLX z)~niYR}7$U@Ss}CHv%=`o+IpT&`Ov=J$VC@MrEobLiQLusT}H9hY0!VdQc_~_sry7 zb*96UsT{1Iy3bs9l3+!kILXMd+T&fB=B`y(iq@{ZXi?R-0qbq!{%>{`{5EIw!Y5p` z#_qPA??3z5d#BIeU)L9r=cEB2nJzm)AGsK5vxnee0+LorOWCnF`_|{HP-Sw?^l%WF zPMoEcy|(L?TToRX^{P-xE*OV08DOczF-wq3%haH9#@vW!_8@n<#8DBX2~8!1(ph(< zC=*du%88PKBG`zfL7lCTjwFXR5J5Ydf&gRe2-$En5FiB%fDs80OaVd(h{7FQpaf1( zAOjFkf-Wz&gbNY~LNFSE6h0UVXpk_iHiTZ?6>AO`7J9bN8L-GllB%i-60F8&Zhmi}&&Ri;M_ zvu!*6@+Uw2^zT1DzqsALdYSk4`$@QXoLJ6k#zEVoE|nE~^x9DQRG) zO!pWb=wTz=0Efp&*Re=!on~^-5P)i_du2~PZV?Ec_h%8Z;je)UK~70-MRybVffePC|n5*=>x-&FL^hL=GG_>~^3`Bt)%d1lf?LI+v(b z0Til*#uikHS&Z971oc^SVYzC2SHcEPE8R>WL?4nYGWzXH-R*nZb7vDdNPX$H#ZyW=fC{f{XhQgdi!~Qd7E~kw2P1urxl)Q0GmuHMEN*$ zDgxqRqTIgOB#d{A9WjZR@T2+SL|OMW&PzE=G*8@!h-n3!^Sse+&xNR)vO~aD5G5#e zU&#v}o%6`VEFhIMP!E}iY6UdGIl5M%R%-%D=mQ0!1zO-v9FPG`c%Uhm5e)*6VPDY= z#9)RcB7q7J5MY8k&PNC#D~J&ZN-!h+GVGxQiU5Jg*Uzkj6`}0JzC|ac3Zk?~Q`Sn# zm=FayT$xi!w~fX|Rr#tg>(~roOzw|czC5cIdaA6=kgA!((?cZ8rQd!5Wr*tG8<+RZ zZ#Lb(ZJGW<`wjJXAWC1;?Zd~HpS}N!zxuBaUw+jePsAW(zdP|d)V#v0QdOx_AqqS! zG%E9(_hX)p;Mmh_X**A~7bGd$2t`2f&3?p|g6O>ZA zGl-C8K_JRZzx+Rkdqi5q@bJjt7dAi*V$?^*mQY1(+=u1$Ff)2leWgy!G3Kw1lOcUu zj^;%Q54xGAKfmG~@ZjV?N;lzB1kNR5A`B$7?Q7oOvl9`kKr%6GtOgN?vr#G3-6@f! zs7S7%t+hRgJ8ANy%bMJzG0BX%IiNOGR9EV z3tGKBWc{;!cE81P@FF&L4}1CP`!9a>1~W2H z38d%)TpJqze+mdsY`=p!FjTC(jlgyb-JE$X^GE`X0?4{}T?mE+;X_GKk$ zFGKahUvKY=W~t%3V#mcH^``I`tem@A zo+x#55XkW2Jc4r0_N<~3?}8e~;8>G`pd=M!j-KP?CQk}L8KJfG640(gr_wE;T)|x;$UO zJhvv3$hG=uBy%YYv+cpSl=+*we>U}{`;w%UTOld++cTIl$-8l77<50;YP4+;L>c3> zghO{F$Kb}X88UNmE+RKOECag|yBct;Myy3KgyF#blBe#Q-`|c=P8)XY(r#|fQdcQj zimIyW1+d->SzlwaetS*UTfHP^Vaw_MtDpb%^7%*G-JPG0i47Cwonal^Bq|X*U9l#W zxzh9QGqFaUxjZQ}0C(;&Ui30mnuvtKC^sU`#8K-GbLcdLl!awa8D5$alnysC&arK^ zFwKqWQuz?v2OoqF6QNNgx>IxVf>GI1TA(lBhB^a|z{SuGCRjoVQ$ZHknVO^35T>$& zR1m=cB_sn560oB&@}jm;*Z?U?!)0}Z0!btx6LNVr{dEu&Arq<)1_Z?L031PB98)rc zwPZ2g3T02FByGFNk7s5{6rISQ>~m5Xk?=aaZzcs&%K$Lf2n2cC6<%FVW8FF}nP?>KQw(tB|)?Gwgfa>iChp(N4uQl=f8)BCJwwFOb2?$2(_nkVW$Zov-4Op zr-5X}to+WEj%QJ9v4~+8Ko4xBrvST6v)gqKnzfOXP55der&7Pr-$iT5!+}gbuV_> zYztvvcy_b%2$no=EWF;Y{c)7*78~-e%Q6HMBhoT=Om_=c6-N4Ca}ZJAnocO#g#En5 zFx0l*E{~_X+>I)YpTC^;hx1lSDW%lXyT1O6F+}9;mWns;*tbJz{(n3;nGxykHpcqZ zFaPHL=Re<`Klk;4ccV;16?z+llmlHjZ*HI!jFczRnkW&sNey6m1$h@bZ0+cQ{SF|if*M2x+Su5avu=Yq`!wfV_~|s3jbp%E zw!sdrqF0riyNDA4irkbyH7fDe4O<6B`Z{jEq+07Y|1_fD60x2CBpB=Mnd{$5ulIWZ z)+;qbuItNR{`D{KKK=as@^-y_Nqy4{iJ|V|QI=3))yt5cgse5IQogez=ax>O*t%QF z%xYP7LO?DH_7zp@4V|A`ba2n2vrVGRkUy8%zGt63dnOCXZN{PixFle zDeQ~KEK_b~Cs$-Vu2qXF4aMk*N26)g@QY|Xx(h(U(zHy%wTRNVU&hI!gAY^L)mB&v zXZMjTnpz^pdVcZP@{paFj=PVcjW-M1*=x}L{i2&(usFqa72;^ zPTO|3xp|#buNSQvF`#V0li=Bt>Sl{|IUVEfPM+M5w5`{=)mln_3$xt)GGtv~>y7C7 zUtD8n#)WHlce8PN{>Ag3{) zPti(M|DXiC{;GVa1UgndYr-ofMrI&3BF!-GLf7Ea9~S_009RyVMib5Xioz2;G#*uG7ylR_{{Db zyT!xF>qO-F;$+8^XOy*-g8mO*k~W>mjc|34?i|R6b3_O$MzF1-N(~ohahi>zjU_A# zb5;(rK}uMMv{IiGcH?1)pu)@jV>xI)uH2*^X5Q^2f<60lYu5+5X>n-^I&GK=?n zheu=rAVJots%`)OfAmnNn_KUwf*TZqsT1zdX+zG7vVt9Y z%4?f!7)D|Sh*9MS^(mnMCBcN5M3BhbIz;tUSV_9w;VwOdc%-G4B!b?Bs6sxm$~;sL zCvh>9YK9HW;eqb<@f#`!S)a^|2+V_-{y6mUuG;%wm+bwifb}Z8@_jr1>Tmz?!`I(k zKEC*EQyVs&GmBE8%m@);p}2O0#%{7QKh%;FXDceameQ&|RhhjWNH>Bbn&55WkugD! z>*+5Zu}@u>dFd2R1??waU}d(KoJJ+ME@k~`?%{JLJ2I!w3Cj#bxRC{u7V6W@Y`_y? zAPEYLi5ZXvW_F1X%oo_1M3ZFO&8TD(P4`TiCbFQlRas*o;I<9lSsKr8Kk2E>>*Ol! zzdXe@a%@!*ePVj-k*!jpdejWC!Y;NM5$Zfo6_tBXb2?)9t(U{1r$SFleZI!FODQO- zs|0peNNp+T#n!(l*>||;aw>m$(x)YRm>E`NT6v>>OOX=C>i4%KT$v}C3PM*{%$Ff5 zvl|t)eTJvL;W=k}SRdc5<2)_;?fH`)A5aftwlPL6b&OF;u^*m4SPcLDA?r0UEi=+R z%+ue0^~>kK{lEQo1}=o5OGKym?te(1J*H(vJ#6h&8_pLF9fqe zhwA99v^fnKe%S?_Rmd|ua!hzIQjbb2P>Eo%yLSr~Yb%u{NnZo46ZoNJ=MUmN{@~sC zvyfT(KQ&$*V10_Le0@ z3wGzG(jZkUtBiphU}QwLnJ39-Do1W#9`A7;2R`Pv7r%L2ul3;(`ba+G{Wp*&dizw` zBS#;8Nf=@T9k9{<}!!T1jg7r)`Y6{OnD6tTwwWMvG8eVUfi^1Ddso z3HPrrcHW{DJ~Xbxhb2e&i)Ej28&F=pSZA&LF5_kAOGj1odM7}LAT&>p$6aJ(nBV64 zMNf}=sa0#&UVc~%@33_z;3Iw{;%~U;oA6oEU0^9`s231)(J$l^RnB@1YGOgyFmtaV9R*Gkfq7L_tAZI8`gXP4zUe z6g(W6SL{ZgcFNQu{J12uoL|bL#-}|mw{|*YZ6Lm%1=B&-3BIA;140>EfPf^35CH%M z5XDYlKon+ZD}09laUYk)<@vj+r5@fw6v7C{1jtbwlMr?{Cqm;D$fSW3uPwlLI-|fl zGGC`TRk$M@5tsv%2trXrzWR9XTCJ*Z2TJnLrNBW0S{I*Ap)xxk>Il*4K9dYYklP-; zTZ(j0B&o`&MpLWc-ODie@SDc@dtXmD{xs)nzP8BkFUOy!sz0bQ`TvP@zn_9$lWXVx z)!+a9x4-%B_URI15|I|QeVFo8Xv`RPuYhQ*@-o9}DBFj97SW&8a;i10T?Y@kleqOU zxI-U=9+NpqjqH-M@Z(V*)=~wJN9xl*UT9hLsl~j^mu-2x;UH8br+Zp508TUVBoN$( zr5k+4eV&Sd2gu+FOAufq&pl^6A+8~Fb%$O0==h-7mHqFJ4)%gAUYP)oA2N6belT#^$;DuU| zrRckZe7RxUQrwDY?IFXB$e5(^xb!QT==0N zo!?ZkHE*5Yta3OZ9MkEx-0Z8|0u zIec;8zTrv^+-sw7n@OTaZi~bj!%}Wpu2UOm+cJ|6g@gc*k|da!3zY+5gz%J=NDS`0 zu5zLz)(4@5_07Ayee|2lLm~|jmP1A-KeAubcJl}*g@pqo!ajlNh(HE3G4@=QvH$=e z07*naR3`|4;kJVVtpF7v*!QeSwbS*RoY%^&9v)1l!!(HO`Qjg~wxiQ6MyE`DIPqUU zO5yTf-q!5#{wi-2t>ks1Oc;C*n#mbbA!~{@{PV6tDa4vNMii1&8EKp8!&06Ox)yE> z1P`B3CrEx{Vo9gF^%=d!uR_S z7V(;Rb$Tj zA!1Hwa!N850>XnzjXmh&P2M&-EW%9zD$J5hNG|f%6^q8lEo0Dum=QmD8%5>AjLVg_ z7d<_462ifTRxuoxD^3pxgVfjA=Y9kPfB~J*L{u078;F2JIbps)<8VAd4uHPe0~rv4 z8(1L%_t)biIo#ofD$okLNB$|OBN+i;1K|h4D*=Hd4h&{U!48ZBF{)yl=!xrqPcZQ2 z1WuGB2VEm(=xOz}uus}JZhJI^aa>-~yS4__`C_E2o3j}eE-L*9ybPtV5}7@>tDV1- zr{+{KCy<|mJ?_4UyZO}JKSS7`tJYBeXN(jc9_e3y^^f2D_I-`1ciGG+YhnNR z%r@LSk&GOe4nhWB+&1Ck%Bz+yA4zk3yzXAw68g~+M2}idHLflj*S{*d5{Zb9yuM_o zNTP=o%H_m#3amyaZ4axBojj5uZE5W=hXO;tP1m{=N0ymdEvY6t?MeX3hQA1HH)MNVD7bXFsR@2 z_8ATvBq{)St;?57Sp*g$#LP%=ZQf_@jv|<@kBfeJDqkGP6W2kHjo-atn*RJ;c6Xb3 zo48C~8!wf%5yR8rFMYi9x|aH=<%_( zSno8QzkI_adG2f$#A0Dov_a<7{Z?aNd~9>tG@I6YFQt6OtRD|qpP8&baF)frUpg}~ zrj0T7_y6$!j1Rx2a%0}JCKZ*S{BVhz+0E;dNP#>EPRb|cs#KG2k>{i(^+}OQ8G-~e z_?{LeLQDZ#K@QB&Ly@Y=NzSq{b4VR%jY}n@q|vQY75eKV9%`ItZarnn*hvnuattM# zvG=UPt-%7-u@;13?ynQp{q`pWV$2Q)^xkTBK|DwyZ(F9_8%BikJ$V3Km6UVwojk7=a+H2^?erM)2YzM%ZNy1g)T*D zZVs7n1ryjk?b1moue-L2wJ{g&w=ieQ!U6+pV-&rzrsU>Sfo8E1A9%{enF}|HEq8zh z6_!?P+`<6PbI+Fx?y9RE<)P9{ngIe!nrd#T zsd;k*-PndT@f zyRlE1ea&&1W6VBAy`$A<-uzj9L*Q7I1#@20tW+gr z?tNNfa|Usfc*{ANXOefsnIXP^kaCD}NDBfn|BGOvA6M}Hn1KIZ#4P;}%s5ETNW}Nw z{_dM!e{=ir@$&I}zU+}!LhZWMWf3z46dt4B<9q~#Nx0C8C@jV@JKVA%YYbSHhXpbH z;`&Cl>2h2&5+8z+;@Rosib6Saro`)%e>|3r$>5Q_*7`PpLboWF6w(Pk0;k0 zpUxEqB+h+%fAMU|%zaQ3-<*STb5G$_Aq<5o<#EMg<+#9tnaZJthUOlR2iWfOW~6k@ zr!RlzYs2)oS=bDg<>vqa<#j9H%v z_|Ht%9{|=5jY@7lZT9!S`dhz#ZSy6uN6f-Vvnhci$w4Ve37nFgSdztMg1h^M7_)G~ zTn|c4xCI>}Tha;Aooi^6SP5E4n3X}GN6|x}aM}hrkq0H1g@suc31i4z`p9pJA2VNw zZyR=pZ+xiS3fc+q%tEcAzrYDg0SGg|gdDHR0})UG3~9Irt=zA|s!3@W016FgfO<;z z3?%~}K#TwcC*8ZV}TLD9iChc2dc5O!aZ>hhTWZ*;-Cqaj(kB9 zNh$H|$hYZlCofkcW@?;GOaUS0L=B%~o=MuetfN0Or7(emRMn%42c-k<$ixiHiRsY$ zA6Kv$S_1(2h}#Vh|1Gx<&&9nys(d+#nKlNqK7f+>(8|wODu_=V!y_=Fs4^vp*rKEs zSwxv>)hHOZh%JJb`V-}rIR^SYsx_0{c4OkWTsD)-$F03=4{w$-Qc3qu*Yfs3zdV)4 zqu+L)(T)-r?pFjHb9NVtgVmci_2PI{3LkE*cgGJVGzBzV86@Dt|>67^TBw=m^ zYm#6gDc!jTpTI<{L`zALoX*6gfny;Quo8qOQ%y<&DP_Wm+-Y61RyM;DvT9zH3wZBB zNsH!#a#=tEAskPyp>?$&=~YYsfCPM>dKe7Ae%SIT;amSe2$2WZg%M=i@QrLtb`fE$ zukJ#v&^O?TF+hpjk%C|l!TM`nUJOJB3sgaXDrQ0yTu~a5!3nCEj_A+^R;U3R>W)k( z!w4P_N`OkG88JzWbWgwB=;E0qWv64?EFzfP3+FtY=<$(}{Zmh?I2BxtECoQ4&n~(- zzr=h0KnrOSkQfm&YDhUXZjF+0F$jUu zznEBH+{r|Ig(&Kh1R9n~eSenaLEAd}B|Sw%-1vTQnPyz04kZQk(*e+>(oycj6nxBzdYKIWJpYhh#|d+?YoK}HqaC|>q*tU;W_acThN!-G$c(WO-!8+!z?ACUWu zEi_V2Ibj7h=fw3Y>$T`Z*qk=q{Ek+iSHk;q-wHn)Uw@BQ_w1wybDLxT_{(3+-~QA7 z%lH0#&TX5$(=zETmoJ+hghBaf@RAf!lz4JZh8Zm^Ur1_EBi<)9p@WhKgGyn#O)f$n zaqe^tOrb;J1Z?WVDytB&JRO*XSXc$342qmwNu(q|NqIlQoK||8vn1Cp1NoW>;9vdM!G$RQmFC%Tp26}ANKm>WKf+QwTP;GRtnj;GG z5gXOzewaoPVgVtlA`^ma;!SWHG=i$YI;w&S=D-LP!a^7WwE^;bXI~PefE5(Tn!ee* zsx;9RsURXf*dW9tFh@+AiCd9J+--;6fdB<&f+o@sgiN?02ktHQQh(U9@5Y^byq{qj z!Z8&YAV&dYg*d8Wu3$w@BtsI%12Tbt8~Tvx^V20SS9VS!OCj*?Gy*fofazAaJW8&P-D4Z$#v&y5cx1Y_ zhZ!RXp2$QbJm7aJOrR4Y;fz}(EnXjIJ|Z9HERmr^*`AIe)ixvAh!O>9NN#x&qV%(4 zMtEo|#pnEoulJjY#nS5bp~rLr>#;7C!`%nwK4Ve@1(6hHLw!0P4i!t?&O2M`?UrE! zqzZUQeEb?@scx3ooW>^J)oq$jdxfey-Tq_1x?|R7mCb$Z_i%G_w>ihh zU;S$Q?stAZGaJluA5px%DYXel($z5omN_HM%Spp#7UC~B21qMzgDNFeoCCsnQ0EZk zd~9^}1m)5=m?-apTV4qJ$Y3fU7UbkwP|95+u0=%^Bq9xwq<0lxfRV%@AT3xmJJTeD zLlxkACNQF68ko@%idU1W-_sNr#NZX=m?DjOhS_5-Lyv3?ASB2C||jk`RV)>=Se1 zdBb+qzKifI)k&3xU2k}qv>xd%P9l=qr00vU_}Yjy&bJ(fmz$7fP(2(%gL%dr#Fvnd zbX)^G=OiYXV~pR&d;A&WYX5b>${!NvU+p;i_3PjK)62`{`%jns+H-dbpE(0Ouru#*K6U@F z)rUtquCjtkHFU!u_M`yMVc%DOQt(obliX&{v~;%!Pjia|xPTq~hs6*KH&_6`a7bcI zRE@Fp@^esNT2l3U#@F0B6Zn`4va?vvrjzHMJxBx-shY9ROUBjQQCs0A-jj-!%EY-} zyRh_Ym}q@EC_sIW^A=1?EmB!3>Il+uY zaJ}M^_=}%GD+&WZ5waj|5Ow!t=B0`aA4Z_$3^q_9G0_wR!?m6>5dNww5k zbOth_JEvd<0-WU6keqa6e<68V=%{#3-b2V}U1(BHCJ1JxCo<`vbWm18SqS0Q?MzBu znn>eRVOAjr8)>6jiByWxEAK-fg&EC(3Yd#>s89hd1sma(n2wl`1T*RiHvsSno3A>o zzJUq4ymDKjsBhF?dfc=g2svYqoJ`Zg?yg%wb&QM`rAOk396Wn6vsA+_Vd99s5hb|- z2|j`=VuBS8z(5L0AP|mF>>akD3R;B+Xdnr(K^Bxp^ocas6`r{4xNYb=hEb`AWcPYl zFp}(A-!yrfHI z^i82slnQ(|+h%Md`tY==?Gq8t<) zeZyKohTtHM(s_~tp&8Y3zBmnKiS8kjFbRGnYIz&pqmQ7#QZ)%-R+_|cL^^9Qjp2M? zUh6zxK_q}?Fexvpr$s84HF9^~C8~^VmMZDfz8h3Zc?{^pE%4Jv#C-jVPDd1+PKZQX zP#c=S9qvfO`4iWb)@6=P!W1fkED}uYT^fQ@RHC#XrI7iLTb&vG1~5fZfJW363h%dT zUB}g@hlhv#==nTe-QSbnmjfpv!#&LAnB&uLe%*ilRrISKr@hRSb%|OSE@4Pw za!@ddC{rdQGMR+H2>_;;PEwI6L8*dLL4hD#I>v^gcsPLVRTyRCRXxE99OW!?BT}AAlE8H3ZIxew7~=6 z&?ES+$s&wEAAkV`eIPregBFCNy+INfm@fdq2;E^n=% z+W(Mre=YK|nE(7wzxnES?>~Ha@vT=+OY*!s2)qi8K^>%!1#u_$2pJHq^t4j*6p6ML z1?x$xq*l_$s!Kp8JtzW}U3J09ym_u%YeTB_5K?_e{mId1P-b$32UTPWiBK{!0gq)w zDPk<6YAd?Fxeasc)587Ukqb{)U<6(^JTy?k6TaiHzybv94g*|)Koy9ARX0qY6Nbq9 z_jnW{F>qIjI#Hc4Q>H`Rm!c33k1;6IeTHzMQspSL4@~oOk0^0i1a4W2S=}w3h=~X? zeI^kvMLha8#3+@e53WrP0!wTYML~`^aXjL*;^Ba$pjK3Y2-I=gF#_kAIp{BxJu@>! zQCi;fx5|_#&IponSSdm09&aA}a?P#h=Cj8HmA41CsIYAg89S@pUC@7wR(Hnz4^;1; zwO6xmFaP-e;_^}GhQ8-*mzs1U;YbXA6e=YrFoIg@LqTH%(<-)5St~OLNG4uHpBf#M zov~Xc1u85VN2E)YUEV!%3x0Kxr6(gPe|hxgYNwFJZf#Xexq z*e~!2IspT1g>B#hWf0?hA)8vnwWT!T>U&4Y2x1j_DlKHc>_o^&E*`beW2K|8X6}*K z0WFLTy3n|i?aqhDoO3cu@BL0@{Xtyq=P2|ps~jls-|#ZK-trA*-m1gq{t$og^ygXzHeq}{>o0S3+9F*SQ>5< ztG;^X_xm`n(1{>~qY=2nz(NU|WVj8mLC&C0u*4F@Z>hfLL0qa|hXivXh(ctH$yKrx zl#J!LoT`j2Z;o>xYZHC@2sgQIILX3Mn6S?bP7xJB6|Bp6|1vwXg=pYVoNH1QH|hi5 z?RdLF7c3R)g5wGmD5De*U;!zRz{6vH{XM>ak<*F@;>d%hXhxW}kkm=e9O)&Jm*#(o z{=4b_{K>Z|%c{G_ZIpKl1*sUvKL;J0CmV&-B!> zAq%6tgRaO5aU?OMkhFrgO@CHp+ccx7kWf3(Hz^;VhPJNeN}-aG!}1 ztr^9%Btf7A5URdkyx)wrcq)T3twBZCWj^zqo>L|yvKaTc!3VAhq6{FGYhi_D0dE)wdF0t!6I?05Grq0BB^g5+Rq;H zwl9mace&nJI=N>_DUe`R0mE)RhI3JA)i=+&wl_<15JNb0rLYk*aJeOmhTy-xfe=1^ z#GybcnBWEi5KzLZxH7*v!V@oBGB`7~9q)cZA?Sd0E}7F=5#cm<()7m?KY8#EHzH85 zzij-t(6I`q+E%>V9fE#f-2Z@d|EzDglN0xpzB&8LZ@-G?@8WW%>ovBGX7D|tkBBFc zyDWi1G!u_ZLUc2_Ohn)dM-n|ANC8hyrS2=GYoV~ z3Ysp&NJPwpPza3R4ocW1$*50wq8-2lzw3)S@-CxyLmsa5HVqpIhkRxl~a4SkBb79HpAFVB)iYPEi*Ae8mhVH> zUEJ{F^v6HVVEC_+?zp$(0Qvr#Z$7+#8QU%U5clled{)H$e8sQI5Wfp@0W|o5#>%VOMxy>-1IhUzKoH0=rKFOGqtkO*+r+bH1JeCxIAb$i&Ro_(lMQunkbaCJMuEm%v4o)i0oqT%sgUe z$v7l3Z*lN6R}&TaB%|n5j*>IoBmATBCO%HC$L}9qN}W}eGXMY}07*naRKG?G0Y=7{ zW52!c|MmZjuixW()iK~3m(PXWr4>09X{tp{lv5CiL$XJ)$?KFsslwG* zrF;^FS8PfEc|eB0$y-Px{R6B99oHLEa{QD*F-Dn0`mi4;i` zPl*^R1#`~)ZV(~T134JG5Ehoas}v#%bj&yND0(JN8deaHMOcuE`EbThf}Xo@7FhbO zw!sJJ@BklPt%O&s7pUR;6~}>tpy0f6D{)-Qwr14~*3}{=mJ}6uwwD$@xP`>*x5-8A zdCg$Up4WSPPkj%i`h2yYidsZ}0E>+n90mmZM^vfCYS9=uaPRUo0pm;3Cpasuksq68*TDm2gt{0aFgwU)Y2CR(+&waZJ}Hk>xv z;<~NH>Z)2zvkILteQB+}oPA6gV_AxRzuvzc%V}$f@EOR`N?q!sGWzx}Zz@F>tE*I% z(oD~-*h7JaA01c0&p+d&0I-R?ET{qib%iJ#sKmX)CrHGB8R#8fZ`f88gAg7J0;2cb z0`-V+2b88fy3C=f{(a|L$9d6DW<|=)b1)$-ee@~Il<3CD%)hWT{5Z276IMj1DM@$t zn740V;+J1|+)XBHND(!ZRp0?N5zRfch*;)RO0iObMf9aHKu?44+dwEC_=K{EmW3%v z#g)O`)@qWHq1Nnkvj=TT4WyFj9-gw9v`{fsQc4OXraILiu6T&KQitSi`o2k9lC ziSlIa1*#b%{LP@WF4H9y0@!1)eVlie^x#N;BWe;<2_j>dG}8d0$rg^wNMbEW>tbd1tL(2CMM zt65{n9_)}RBKpx^0MTWHLxS4OD(9+{YAqL?^FBE}F!y`pW1yKi>BJZxwLipb7&L2uC<-MNZ5K0^5R8&=hlWkGxNPJ~N>vsy2@ux!cP*SZqHSsjbz8 zuFNDB&5lxS3>p*rQP@OxTjq@a=gj);=b>T!ifzCH)Hmil{`3oucabhSSy>m6kx~*S z<ARrP^9m zo2W>ugyuu9>q%9qjX6@MiU37KLBR;z4}>5Vw1Tz#if~Ej04hj*ge5h_UQi}tBAN3l z5Qs4V5hpW8=Is3@A_0ZkJodz4a-OM#C)@7S0f9>dwL$?RKtx|e0ZGY8!b4(K2`$W& zP(jYTUrkml6^UcYQqWUGe=3>IMg1KBFW`09{P6 z=MQqIUe0DkV#=|{{m}4oS$l1EQuNXP{2p)6o`o~hxwXk6X0X%!EA3 zNTl?wRThp?v zr%QO~rLJdNo(ziArYZRTeF2d&4=<|ryxQfIAl~js#pMhG-aGb0A)Z%MLlOsYOkD4% z23b)WQcxE31EYW3(O)j;9V2k-LX%UKQ)AJ*Pq77Mi`T0@6Yksx??a!~l;oFPs_4rG zMOI1*$J9yi(As78tmnUZTK%{uswongIp&!CnBV>^{YF2)04Ew`GVh@mg-nq7NK3V1 zBIZCsX6Ad$e;wK?eOfhykcJA~iaKQ^#N`p$lMok5YJjIL1~mX?4%#|(DH=*iGr%3G z2w06oiW!pn;jgeYJl3v7c{%0Zt~3dRjFDM-=COa=kZ zk&F;Hb@-0Cx2=Yprr#*%z-h)Epe888O_17D8375Ss3N5ZhVXb$w-l1x?fzzmx6@}~ zQ#Te#3->X`cjPXqWGbLqM5-x}F6jVehTJEnBP$?S&oD}^K zJHFrZ?ciE+tEx+0@A-A-w-HxrQ2|uVo>wW0s%4Y>qHLlSoiSt>z8j|U*ozd?^-4<~Bm%#ffaJ>9c|2@-Pxg1`q7i$Hh8K&=R%HB%2!2(YbK4U1q?m2)DEKh>sY zifr|8j_+=?)8(W@h>K63V|;U|=0T=-l=iz%%TKEz3v*qxoHhgNmD(LbYNwY>m~ZR3iIis%&c(&5)7{N0%m?Qz8MQ2n4FiYmo{ulZSczW2;k; zgmkn6MF2%Sw1Wb7sDlIzx-ms?Cz2YdizMUxT1!SoEz^o&0LsP*Yc zkz$m!XB9s{h-yX2h|FG9s75b6hJcV1&NLBQ*{?dj>*Q81k|*hx6lBeaG4|IvZYCWf zq7AGG6BW!G7z&6x??Z+H4M#OO5ro)kIh%0mQ`$4? zg*iK)PRpl?D!LL)GP{ofjYs4tvy)^XRWkVq)`+-R%{)eANY0eV=)E%mTO?-Yk?v!n z&yR%BVmR)16hadl;bGf?+EACA z-4K~xFC_pLiFDkSh|E%?s7RHg&p*G(Kb>UT>Srxe^coT&b10Lr+=R3kJCn&d(<42!ket&4oT*3uUMzI^IdV_A z%&eIH0Uu{%dQ4|+Qj19Q%sdWgsIsP%ra9ejuUl@;#c+>VWqr={V}2R8f1%vm(#qO& zV-!`3xFx6Z0pnuAQ~~aIzCb6kz8$F4avz2pt`1?J+CEsST z1`Rz)C}2&!*5&Z6XiO7O0urVX`=RYlze{`Ff4N=v#tlg%pMmkJwG1Pt4Xe&FbsJ4=mAQ4*%81v(LrjyOi#a{ndXM>p!}LUTJY%!1m8X0 zZkRI{m6tOX#iIK2X@0$GZ80Wi;1+TR-YE;EP*Ow!^S~UEe?x2kcN*3scj|MDG2dVL z{+-@UhDdUTErJ!uA_X++W_B*9k9>)MV!vPIh56MDV$W5EYgKAdrLCeTeQ4_0lS*s~ zf{RfVs!~%crBn@?Czza_rcjlp7>xZ3;K(dTraqw%SAIZJ1308I741 zhsW+2XFEIL(?zCgW+^g{7=hlKZtP{3-t%jTW9D`G*W@dW#TF?m&_uV8J+m80Es~N@ zREaXQo#b3WMK}r()adEDKn`=iI?2lw%}X5+t0$twR&z>Tezkd1tcD>*F zh(L^j1P7R(VW7hEtA(0!lPPZK#4$UUr~T&Ch~jRZS+| z6s{$S?SB2@!#7!H#$9KQT~&(Sr+>|SN2RKXmI6gRhxhQiKGH&o*uJXUyTZ<9;)o7Tr{UrdYs;_&y^SDVzRbrL6Y$Cc~!tTm(wZfN+k$`>;|=$~X?y z;OT-(O8^|26DWL?*Npiirt{k&>u+}P{->Po%p|Yx-@ktOK98f!F!~@H>={r*zzQHp zA`PW%28K9FGixRS3@|zFDUMRColF;tbitI9kCxI@jAVceQ8f+Fj3HSbEFmDZih>dk z97N=ta}q^hk>S%HJ#2IOa7?EMtf{dmP#bF-vBUXM^R*ucVgl1p4DSP12Lj`j&!@D2 z26m!!G{?Lnd!_R8|NQ(3xc#rUnre`8xW3*>6FFFae<{s0v(dF#eQFIXD0Qo4wYr_^ zree_NWqID_`z{w{&$#>8yVm9Ove=vu)naBUMNu9r@&o`iR0Dw10vhIy12~_c1r0#O zgTZ@ha0h^;!UPFq{rEp@3)0XUGVpfo|N6DQoEa{)ma6l*Cley@ENcDrsQ>*Fd2nqN zhlAU*DX+P3Q2T9fr@|{rflZZZD}9jUC>Hos}oBK?fdj#dPYW z<`Mc-NJFY-N=M!TYnFdpuoMI&6c@qLxY!KfjHM{UQB_f4j|N@aQ#|#F@4M1}>Kx*Tawk zC@_v#K&c9*1hXSk^V4?zFSdL++EzYP@~Zk0Tszg4rO<)}Vk)UZ3Nu3zoJi6|VWnht z(3A17-UE_BK?rCnJ~J~RIm7SM$gl$$%s}4<1g1C+jKtyCCm^VsJXPhCWkt<+yYsr^ ze$N#^fQla2C!SWVXFOjs|Cc|1-?6p2t>veex;V-KsZ9&5YFUk6?rO5Us74gEQgwN0 z+G?rB7)oQHoYuP5-0v`rw_fpC4J8L|2VK;lTZIWo+;=drHauW*CRiGNUJ&niy@B=- zHTrahI%0m<=8lfF0*|VKg0leu_y?Op1*dKKr+?(=<+R2e+^0&K!uOqT9ah>uK8Zpz z>}=vD$?y`@!pXJx^IEV7?EmV1q(5i4nS0 zR)bIgo0Nm_iA8us4CvD2WU>?tT25JtYJodzsV5UAj1(a7+;s9(+VVa{&D? zRfvfal2(n2L_<{C??FLN)Af#B=b;i z98jsw7(Qx!+4D~xH+P@IXL7o9r}+)K7~nJK$iyBTCMk1HWK%_RE0#h%6dl}oj=v0(23IAVNCOP1$a%dHp+GP+E~< zH4;9Vo&ib*GmC01wrOE#-;Ws?keRsO;lDN~MIr>Hpt*eiC6p*;FQ)?IpZ@IcpCASf z90m|e!@*o?E-NHd&t(@%XZ?Y`1Ex7h*?|kq2VQD3VxOUtImV(a$5T}AX@TYftUQjj+q7dbA@4F!#TSXGL z10uMrP=y%uQ3fT*1Ot+wpqNZ$2B$;yp^n?S@W^zR=Mzn+mOgE` z;lJ}?J)XQ@1^1AYh;)y+-`THNhXCVxjnUg_(I9qr5z}g`@ucdMx0DC@6G?UaRP5P^ zsuhTY3Q*-#&=bXU6J1r!^t4ii#gt%pWJodkq!qQ4n4n1!tQ!cCq`?Y_M}*x}H(6Gx z8$d|GNl`0|5JgVl5Ww>qc}q`*s4akqG^PnNGspnMG+hUoiJE!KF&JsKHj@Y^mN8%F zm~+O+>{C446||%J-n)<4O>GDJc3-rLJGs?M+SB&tn%W#=)RTyv5i}tDe z9mC@`N^2T84o52@CPhs%S}&iUh+>)6!Fkg(zh`8~Wo7MxfXJhB>jzx>u`B$WxZ3}e z59`s?OU^mozJK#Re9jV7Vnqpz?}#(7LLRL{6G=#g4rVo@DwZr8Y^J>JkxgqP)lL#Q z)2SZysp%r9U}2V$sTL1=FFZU`)N)2ps8&?1RLL0+p=&8+%%BF5rXossB)ln1;uxW@ z0{V#Ap@z2N)-mSCGJymC{KxF?csXIKAw4fme8<}rt-uIxaNs7WhSLQtu|A1~*u++C zy)+BW>uny_<+SC|?|n*7Ul)^OU2FMivy;rP$|XmDVWns_Q8C9S~vz2uG$tMO)s@< z%7<}E5?Vr-gC!`fp*wow$q+MonrgDBlvLAN^t6%5Ok1l;lO#+*U=9G_3Ob~~2rIw| zrYi0^62rqQMWu=~MSn8@NPb{heYC3bRLKzp2I~;wU=hC&08-=*F+Za z`^{&D(<~7~RQY;StK9Fr3bg6g86#s?xp=zZQNuj{!oK&nakYP!4-3D78p6lhx9ivk zJZiWQ{_BZ0ksUZgi40(Y8dL?5!IR1J^g^L7n{l0o=lZkB=OUNHGW8>O#DX+2 z(4eM?5HTpF)~ZU8WDq8hS{|WQogT@sT1X&5phC%DB!ilf$()HXx$n5|xDAW}Pdx7W z$5-sH5JDy-(7;-Vj($a7u@=MuH@pbWfdyF4SUO6Y%Ce}GZ82>$x6yIy$DW*71T|+; zasXoU4y`FLR%`#`^W230a;s+f-nCgRn(ShRG4ts9vdJnC`>gEp6|I0C^LTsPO}s8@WjiL1yakIVXL(r;a|{r__L5W}le=c%LI8OhPD;<8uCo z(mvf^{~733Sk#*O(ljI{q!bIXWho|+JBC|5qb#|PIIfs;F622ZN^1tl{yqJ@XSAH2cX1yA z)OPM;fIat}%U#y9h$PcJeye-_P_q64jP={o>c4ezmA`KG^2np#-@d(%-gC@wADoG3 z0Kow7hypEOg+7|qI@zR@leVW7H|L_h(a$*juF8{hnYtPiv;-wH1XKlcqAL-xG_B3r z0t+*wMo3y{kPs2ZF$0MpXFwrlOToKV&$)Med&l=X4#FQfXCe|M@b(oC z<--(4=zszX(cck|r5x}iI48D1B_LoUCaj6ACoK*4XqQd44KC&VUJoxx6RoW*OM#k` z&1`u-X~}G1r#k1%!J=lNoKdP2229l|g0LcMLCd(hIrXxjJ=pDmT9ATcq9p*_C)5!g z{FO+bj!1lYM-2SK3r;5(;I|K$9|0t0|DaHw&JaplVFooVB@n0;MX@Bu6be}ElQL^C zu@5wns=QA*lC@)Y$@r1N`R#c1BLdANiHFZV(>3NCqkKBqMQSHh)k-L=J-VleD(C`0 zs%SA#F%o&8si;vw5gEaWxF^F6fhk#_FAcV0m~3Vn6`@aC&dCvWK0#e;Q58sjJhMvl zp~X-a0MG&$pwJ2gVn7wkf((F2wc0AJzy)*UAiRJi5=V@yra`w-mc#GDbVrs=&FWu`NuWTY%r zO>1~GhDsm`j~i>NZFQeV|K?e&8JlUk3IPqRbY1`eAOJ~3K~!X#p_oW$l`5)L*~Ia& zz@eZzv_ci8s11d(HC#;V67sP$$ApJaA4RZ~x1c2rKBrh{dd8$LW!WA>RQNkn@cpKr zPC2`+A&|#I@;B*^Kca>Iao|k(O(N&l@UvjwukUX=$7G+!!!*vQkOfx36{P?LOymR` zXj(H6N5(hhG;CJ?r&ZSL@x^N|tl)YF ziK;MpyoOK>JMelS9A&}zjAH^sQPc%eAOe{H#S|I3w44ugg=MoCcPJo*3^AdLRk1)Z z$y1Rzu?zRX?C?PbnSXs|{d*ZcaqsHR#dFRSYvmDw5{1a3sv=6N3gm$$lfyZ{o+!}O zAdqmSN7j4;=9EWK$N(EyO;BV~j)Ox4C$S_Mbx3X0rjzP-t<$7PTV*XKYEAX=G#Jnt zQ1IxVc}N?}qo8zxK&PoZ*C$fM2Km0)8VrepfQhF1jPI2}v0_gEe6r84i9^bw^{097 z$ML1lK1O#+c%*X-_q0BZ!yWq!83UP4%@C9#nX{9}IM({UZ3cR(=40_2oHJXSt%k!? znQ+reHS4b^Bdrc))uOCMF^I83p>2URmbFSPVY;WxnS@eB4W&U0Dk!HEaJ5)Mt2|;P zj2ST|pk;$Jz-4VJn`BopOUYIEPVGa){Qa)ZlAbD>3nNStl1Yb@k9tb?$F1`ov`AiQSzBN9yK+fFD%J`ghy4EcrP$rMqX8ZyxxrC@#BkO6(Y`qcVyzz1(ypXAq{wrf}T#uKqN-MiqzDAD#Ryh#dO?vScMw2LMtpG zA7E2V$0R193W&h4oSQ8GVW9f(HzLw|!aaxRqR^Qs#o*gGzUGQX)Cm z@%s9-Nv0B6Vo?wAD#yt3Dd! z%PhsW%~piTYRjoGQer?9(mrVaqRdVy#UfmjCQ#v^4-ZeVL`)wZoWsYQx4XX|xX%yf zO31Hm-i9O|u4YV#pjE6Dmx3o7&!7K*V)nm%Ycm#N88{6rfpe3~X7vKSQNK%OmQU$N zSQTxAxol}`aV+)xw6>zV%Xyo}oWI)Rj-??T4r~nqlm$|;-Vs0$1ja-$938{K1FJ)UYyWU#Ys342|N0C5%kOddg!>&1 zc;fv#ib91@G{rGMp(xZ0Xs74E0jpHO^tjy#X3S);ktW#q074`~m_PQ(zwMs*;l?7E z5f7)Pzs}Oqp45s!RiJp3&hDuLR1sG#$kps~<(&}fW@r!rx5|4;4-{uAE6}KB6w%?O zRM}Rml<*A22)!&66$0EL70U+8MA6o;XlfBt(Fy=s|8LITrPq=p$@BY}nY%}vbMC$Q zAX!~6VMYQP+6eR2XQ_=ofL4N}jnIQucd5J7^y8G-n1QB|#&jzmzaP3n@S0d@p>xw2)%ges+lM144MIkDChiQ&;F`;4u} z9G-nPvT4z>7A#DCkUi7Q`y4~(lq9#zw-J`}+O?@ZH2GK>#a@|92~e35Q}xJOPxn8I zC;A}_`fpT2|JN}rkI0O-x7U64K3x;fSW+6I*%fiKPHa_<;D*n~V0w*{*tJm_XP}=)T zHK+IZoZHv2oFnC$3-e`*$>FQ?=e~YCpMLhZy!$Ag{p&3@I?+>XQqQY4)tEUPNzRDE zzT=82Ga>0oDLgFH6@$+^sw{;Ric%Yw6P{cy!RQ7XY?U+Oiy#k z%pB7**~ZYs6A`wg7}dTj>nhS`)`~9lfdiVUGw*?|DlRR9du45(9+{}EQ;TVW3Tc93 z#hZlTGxtoK%T3=cUWP>GzEAgv!Pvd;39ggUtesVhhgOJ8ADi5E#>|)^8GVWqFHRUL za+XLb9~NCut?bF{T?f}q-VKoe$@t5VkH6rW|5Re~?~*mh{Va^P*Xy>A5z~j)%%es& zh$MDm!UOpp31VjgMpRUY0iozg!S(Frr^v^ckENbfMACJBJN>%x@lxLli{&NrUBm(v z!h?w)G<;+XA4GIXJOfcH6|X)=4?M@5W8b&8oo%vr_CXd9mV06QJv_1~G0;Qy2d9SK?92aveNA zppAqcw8~G;WbnE0?d>kpcsdb*th{fmm3I%kzpxKXVbWGCIaRFjlb>+g#><;|u(Vv3 zeBDHZ6xnxMmRwtGn~zY{To&Fs+eAWYCOHUcnG$5CI~n)9{~yh)L&xVcpctnr)+~bxh(zX1wHi%hXFU!@>PLt2xRG>e{@Auj63vfdN%j~qKu4A_wc%6&-9j;^50KpKmXi4+D*5qIHK z%U*QvWuNic`F67Rm?Qis3TP@fEtz||kLjc5^)~lCMQWyI#E3G3Z3JnaaqD<+ZuH4w zgz@x1S$TaSC$%sH6&xv%ju-}>*oaVKc$lVInjn(JR0Of({I236edhFBjD^VV@+#S6 zDw!b`AtD+({B>HY7*t7!;7RV#gveF?Kvu* zO3yYmoOFbU6!E_bz5j4p{aD%X;|uYxWx7XydEMvqzWbi&!4=?V2=WFAXP9KCK8R)B z>i1b^5id7ii?oZ*Iww|8tI#r-^Rts-Rit&E`dCXjr!Fe3iAeMthNpAr)%WloZh>j4 zWX^Pn$T`Oxx9jcg<#oJl?DM`-6}!XG2i0?DKb)S#pznyI2Miq$F<+iP|Gv+GDeI12 zP^B%hv?6=N=kBAFwM4(hjHeO#W@9v3qGH=nm}Z(^no-<~i z8ET1mjw1cWa2D~?!U&XHMb3>?v({Leww8v8@DOZ0Tgk-)#Z4BWfgHOMvKF&q38ivA z)0X=UNMY}&l1Uu^Q}Bs{ByyyGABS0@NnJ2wIAzhiu2xHXPkDM18=fP5Mh`Tol(Q7m z-pxW%-u8IAxkwSU?4T=BdY^rUNcJPgIC#5pT9}DX;*HkR6s-(U2*f?zC>o*%C1e5f z0O*K=uRjPXEhn`GqGp*nbk{aR=!l9WN)Dq$qEgXCMfHfjNd&^*Vv?P48!}WP`rDhl zzGW7cCgnou`S!__Fq=c!_vO?i6-;Z9y2=gJ+D+4sB4d;9YXg5A^6{f@>EBjk{b^uD z9C;Tx-N!!W^bTDQ^Ob0FBRc>WI8k9pQ`7K`ofx3#vRcf@)#NPMGS5cJctMJfn4*f! zx~83dpA@N>6{?JG^@zO8W9kYz8B{q6-w@m*W83@Iw{hKWZ`-^&w|;NlU5#;c2*94K z%4&GB3o6WxC#BI&$Eqc=`+m#MuRDRh(k`?OH6$fH?dbmceecp&E4-#Wmi5xgiFP)9 zaS7ETQdBb$_1-sheOKk?{QB+oyKR@*-k-{1;+Z+hLyfGlMVzaS@NaK;nk_swn$eGc z!vX?@>tKJ$kL0rGUKq}Dx>KGt`FLS9UT?f?6vd9r%E45sAqVrQm~dXW?FXwUO_)I> zWtm#Amd~%_^~Ta7hNLGM5|XKkUfS$~VeXmf5-A!&$CF(NBQw;I z)k4T?N-7sq6+3A(&4?gbRIbhz7J(9hWJg3I^TkUoVdzt%D63K}&HU&|Hin5xE5{yZ z0i>2}Mzjn`RVz*WV8oOtNV)TaMVU?rVF(Oi9%VTbQ2;k2(WAU%qDKX^po#4Gu*_7N zEu(!ky^i=gX+EAkufyGd!=NbPbIftary^xW?tOpV`qqaS5g=5%H(&tGNM#;}p>a9W zuQK+mm11b(9&V|rXbBME7(*!~IeI0@3^K=fAyA$7(A@;B21QzkA>|M+2qC5U7@~~v zmU~JrHcf6Lp@)Q%DRCRI-$G4>N@fN;zfxLiQ&6)=w5VJvmx`2ny6jsrhe$atSO3wk z{~uRj`QbsB0Z4><_i!gu1DB9YA)R653Xh23XIT1n1w(?YuoJe$ zJHt_>fGGV)UfZdKx=;;_turP!XCK&t3T-`**7VSCKK0i(PL+0L{0q^s_bM|aM!j4p z5jFeox9juu)E3|3<)5CGetgG$aP6vbBsYpe6)}VoJz_>^<_O7LVE$NoEO(m}YK~5^kAeaz)jolpI6^C@!%LOJPTyR74Xp#I$Pc6E%^Pq8Xl^lA7+R zMr2x+3`^1^P%V$P-_pHU+ImNZAh=^r< zw|F2q7*#j|nex7i{Ag7DWfAYcBM-Dzn+;--~@~#1NqwF)^{Nckn zCoy|%r7SvLdu+b8I$pYXiif1yxy1}2?cIt8uQ#5~nDP9^-Z?cc7v8T@sy)1;7zA@e zl?-l^n3z(Ha)QarPN`JmW#i?>x$$&jS?)IJ43@^Ckd%^IoWw1L(W>Yo;rX)rw{P)! z1l$nqo(S zO?=n(CCI{J%s_=1_elR!Whw>*rr+Oywoq44Y@t-#5o2yT-%Jvpmfhx?&Z{8j`tfvz zYNylac6xdHJJIJ>W$T%UqZu+sjzOPTgFyA3epZb2B$tP3*6RYn5C*g*^-zrIar8?< zN~#cqCz^hU0*;{18Bx+DlL)kiXQU%>Gzbe8+>1Fxnuw_gkt7ilk(8uJnrf@j_dumn zip(*b!jh7%9(u0jvCXTAUQ8+(QY80K4bMT46mket__Igu$3?t<1}c0PlJ&3Ah2_tt zRVJBZ&M`fwTha{0Dq%=NAqOr{k)3>o1>jQQc8HwT% z6bZHnYq^*s5|UF&@m948l5@_PX7X5wTEE zYFx+nFB_^TwB=xdbg}mOhph&gv>D-m z*rWe}5-(+X`EW|IJS=9l;``@)zk2j-JymsI9%}n|rZ@2vD_E9?lHT`EyVas5+;*z5 z!wDV=k)$z`r^1H^5OP11OZ34|q;Oj4JGY(N#&lwG?X-oDA5mvrx!$OiWurrDl*(dQ zB8OBmH4f!L3e4-KYm1xbb;cH2LeTu=nIpsV&6)0-OA-eg6Ty#Rs~4ZD#SiQe{ zwQ((~6kS$*C%0#oPbr_sw{Y~PY(Xu5^Zu7F&u`o9pQc?~6Nys{9X`H!dHusD)F^|8 zGc}ok-TQF!?X{b+Hf+U`a$E#LDg;z1HCi=Akt3kP@T7gkdBvWnPB8K>W(~m0eYVBk6 z2qCOyBV#hUc-4X#b52()?A`=zr@;_{0C{_+3o*@I2i7LXdgy3CayWxV9^~ z!8|H+#2+#*PiW8mk5?XaelzQ3Nt-Uoik`?d^MQF1T~aj2?2))?S5Yg?sOn01a0JYW zl%JpcGVSh6B!YRLQ~D&%E8}JGC%(wl^L=K3LZ4 z^JdOF=d@B6#;)g|)$`Z0JkOci{Hl)Y%l48>k<(hs$@sQ4HA_A9YN8=F$qhtltPFLL}DpNP)*K+ViKZgh;$PP zU27JV?6YSpr(;YDNql!2%XeMb6mrrJy{KS9BpT>SCSv#A`NM&jisx}{kwGcsQc@y& z%Ifm|vR+Dgy~*2*Jt4;)x7(?(URtE*&8^gz-TTO2e=WcMT|TUwR?Zb)SSsh!VFf^p z+E`Ys5ED^aJFdS2t_%+x&G6!gAfj5TnkJ6#$RY=OL!_7rWGU9FEY(idF2&AD6)7b} z%9+^7l*pR;%elt3#~!pM;$oIF z@^~RK4@tU2{sq7Mmn`#N8(4pFA(kJQa*mS_&q$9E`L^98GlWk><4_!6(7}-Rx;z#+ z^>MzGHpbkDPHL>8de-`3+EbQ>2(IJ>IfG@floCTxQAsa4-EwLOhs{)Tm?&xc>+RR0 zk9};r&&a*hJZ9zLHVMC{Kbeyia~4CvlyR_xusgr|%<~mV)b5LS_}I4SuN1flEqHh! zeiNVmVLzYC`CN35_}$yfZC~D9+-219_~kjxvH7w#jS^@-ZmZ@BFyCT?YoyB9*vPKjpfX?VTC!E ziU^m5(}iy;SEm&ojkizW%;5Tl2}M~Ja&mj&-G$2qBW8NuaY}_$Omu9Hsy&`!lQ}bF zjqN#7QZ3V6nQ`wQ0*(Z$V?2FF)Z7=V-#x4y$M( zJ#r-nnIi5fnmDVbWbQo+m`SDtjA2=$Rz2vXK@heOscI%jj6G?hh#D1XrQE;wyf+L< zg~Glwf=I@JZwr|exvSofzkfUE#Jrb%09;? zSJBmPSB4i;-==EJx0zwSwCr2DhDX{mU$!|yFuz%Lr;Q-vB%v-%K#!U}?zvU|V~@n2 z7@O~Gg8#n6(c?6fqH~4>C3Aw16Dp>Z2duDtwU)~Xv@GYe&(nLZk8S;E>sL~1l*Osm znn^_DlqNxn5XLnrg8C2_Q#rEPjc{gCu^D;fS4=}fmOW9Hz;jW8(XTi8r zTpnS?`mI-KnWFA0qgc)1k{~Gt>BfxOtd*mKK1_@t0u{P5ItC*dgOV&pItD4IkZ|kw z_e}&dd@wuHuu3iLNhW8JC0dAxYpdt6f)!M#6)X20LIuft>XRN^sG=q+VoKF&W~QQ|a>OEQ5!E7AtW;`^ zbIE40wzTS^5@b(D?{3$frP7`lR|;6Aim{e+q{X;ShRD#kiu+Bgrc|lTJ;jJp*>3(e zjtZ#KitlNCAJ>Rao)=LQuZ}2^f*+GrerSsLZdCpFB>cBSlgsfM#-D^+_k`G{sE`>8 zoROV?Y|zvmt9*F;@Zm{w+v-!vx9h&=T4lND>3u6kMh|Pt#neN#u2S+E@tC6QgFaa& zb|UMP;bPsRl&C5(lww48Kjct!6{guD6qW^g!6|*Mb3)|(t8H9TK7$tEsZ|syu53Y#5Vd{ ze|zm(SeCLh%WcNYvM?O_cSHaHAOJ~3K~(m=z33Ru(s0RJ?$_7li<6y|RI2c_^2HfB z=`TO>X=58~gO?lo;N^{S{9Ol9kwWgQ5Q!=YRjI;0SQl!8b5T>J*TrzdWO+qDAa@;qw@66=!!*A>R zohu>|NhcD-XeA$!n(HkKmM*+Tl+d)$Desyb`|u1F^#FlDe!p#qREDqx8TY8tCrdL4 zXB5^%)kXExoXEcEG#xSbt7(&BQiI1;Yspj5BIbxiGU-WOXcbYy89OE62;NR^8v!bJ zO;#x^^&p=Zd7r5f>>YJZ1yi=XSA@)==jBidA|t#_pJTqxxo_LccKv*NdEQ>1hYuBM zEuY`|^UVL@Kk+~PkL7a8P~2sIPEWD#c8ddF|GxLvRD5Pxq<~6_s*0G3sYQT#Io3i6 z5o*z*W?Cdo)KpYM1rck4i3h0Eb{7D;A&vF{d1PG~liO!T>MeYPrf?k^sYqbF^f1lG zFW8f>{~#g+Ig!O8Y9twTytza{gQccuJ=Y-#k)%LIAo{QI%Rio3|4rs+K@iEz0yVM; zdo6uKkrg$f!6oBySsqT)*0Nj*zT1j?Sr)7;#csiEvZOtRxMqm&DSCJ^Xw`RCvBzx+MF zOFsP4{^QRd_D`R4zvm6^Biqa{P7AuDlNv0_aza&fr{BDsv=!44h)g8hz02p{-_DC= zt@WgjPc}>tjcsoGR8u^#vOb-fWicgP!mQLJ|_wDA5y?`+Q3 zZ#>_a!9MOzC+|Eyu{M?kchne@8#KNDL{&wVXgnsD1%VF_Y#Y}b*Yo)Hvr$dVU2iku zZ8S-ZJ+GUbOBV6hYnGZo_t-nfBEU5T%=n`ICv+y#sSR_KqK4oT(en&jI<&4~dlKDsuq?JrT)yz=MnPMg# z-uB{3IwuoDHcSgIX?^Hw3?a!B)`<+nU?R$xh|ock?LNK{rz&~E?A}2?^PZf2_@&0g zZ?p#<7UDanVWwzFS|S!E>~jvuXjXSCV|s?DXk=u@KmBpH%Fn*!@zJpygVy-!mzV2H z+-|pvAdQ@)-Djy8mxuHFk6*q$e;s~Rk!r2g6qD4VR%$7=HK~hfJzPPGl+w&fAT&WF zRi!NGN*wyKL+$pRg0Ej$Kl1cTZm;y6v56GKiJ3B^Xm&i9Lt>0*J#UdWr<9y1>8F~l znLMo73aZC<@dLEeBgzji!N0m^{o8iJ@~2sKhq6-DipnA;BDc&*7BHky z22+{}GrQsLGEbVzL#byIJAL?%57+a{tReA8t;WNF6RH6AHwLC;LiWs-}68J1J9L@zu-Uo z^8I^x{1iN$;`z5P-tjHHBSJ11$RHAHTrRp^O5Et5$8^<8ZD*Dl+nY!V=nzK4Nkx#` zTlm0N(>49fm8h@qdXt=XX|^t-&;Hy+u-a6GA}W$nC50k9?|izlu1HcVrpU%GKd?XY z$5%eRVjox+EEtnaTE$lOPBBQ1k{?yVIg;?s3uE5#kB7#7lF0hA4lrU(*( zq-b~#Emf?T3RZG=!E(+l87f4ULlH6u(?L-PBaSUSi9m!5d{Tv2?q0&VBf+{H;SD6@ zLL3mO-|Lw49vGlmB$4f={bm_^zmD-tlBj3wdygqD`t9|$7;B+eY7sIQK~&ar*?gHZ zw%ed_UdZpdKhJ9|In%pj9&EUXks&ek(2<5#zhTn7wEDNd{+HkX_dj`C-z}=m#nD*{ zp`IF)`dyLV5p|yUKqhwNuNlR#l1q(<^j*)ARkWS#=KGw}vHoVaDd!UF>R$8np5MOa zXNw__Xr62lV2)T&ic*^{eh;hwfJ z@kx19v2ED970cyhtE$b=&9&|?znP_^zANQR(Gy3ypFYA8b1()mkoB0n;CFfBe(hxm zt)@i~b5czTDSij0OuUqPgMp}|$&_dyvZz4srj$d`4!`;>|LZ^V>d4CJ%ov|Hk)M6} zbJO4M8}UNlX^KJ`x-g%ivIsV0U8+9e=y>t{+AlvlwbC9wh~FeOwp!;0-L6yKrbp#O|i9kuYXAFZ6IVe8#w zvlf2+iAcWsl2b+GJ0rAF*SlEuAiU(bijxSY;}fmlMGhEqh&U*xYIC;FTYALHE7#2z z%ZHPH>T!)+W)_$srzYvlsfQD7WCXqYo;iyheLx~5@=u@MUqGZHB7%qvF>OXMLgEcR zkJ+=T=3B^F>{8@nG)YAkV+0#mlZIA}=iqH-hJa|u)nd9`GE>xACre$V?}?%c-Xj;p znu5d-DG}PlR8B>zT248Ls$JPTrO*o2kVKsHdmpVCp-5o_HAp8QCaUZ~Ip)`3!0B{v zVLGa#GU+#!M!#w7*0<(Tv$WD~<3iaFqNkLlJ4zPCyZB5xk-3II-M22(8KNxLYv!0m zIaM&2eERm&_2rWqrkE+2Ij2-rX|;Svze%Q~gij4g`~5Gz>ZK~_>3d4aB>Z*QB;P`+ z)l;adn2rL57OG=Ae1lKsE&D#VoA}UE6D?Sx!u48FXUW@i#|7`VvQApbS3yP&qE}XO zcPu4cv$)UP1?qhP&rp#=#P>r@%%62i{Ckw{^4%gPs%op*YH>7K!yEBX&cko-*1E=S z!y{ZDw60m)1J-{_F?&vFfP}}>$zFpsxlq8kkf6IUVKlK~2S`&-6Kg6%T@t^$U>o2}6s`m8W zy7^MeX$BT@Xlo#LW{G%st! zCQAv@9p9(lwFNon9M9d47}`Z?#l=MR`*5`%j;iBpQ&Bb5<($^SR73I_am@^vM2|dc zt|m=*CsfIn(L>)=EgI+W3=t%fk!c!gX(k!Ww4S~VAwynD38*pDU2Rz-Gn{F((~@Ye zi=Ka@TwmIjp&)qCy12NyVIE6h(~?GMJO$P?>`aa&mK2*}L3s z(O;zRS!Nc6bBO79% zjKR1Olj5?Z3~{$iM^Vo^N37Jc?xW|TXfpb|4XKN~dmz$^Q%|wqv@X66de0DM6V@Dw zCMcO6SxWxJ8Tdnr@LyZ6e)z}o=UEM+DynLtnNkEqhKP#Xa$nI8YaO58n&er>f|d*j zPHrcyrutN^4RGH^s!}3ldbkJfIOxF$3l6S?-Xnjt5biMzb0RYZ$Gux-Q7f(b7$Pbv z8Kb)teQ4*kF3Wy>T`Z3qGm`)PANlp3@88YG%j2oqfBDt7t>ojG-#-8DskQf)b@yxD zGOjEGI#OvX)$szRnb6bBE*JAMZ=c6owf4ax#`0lZM&$o<9je}4-0Nx?GOt={+8MXx zX_lW=`J+xrSxXjScZz5!`PRqVzWwT-%cU-l3rodd4qi8!VR8pbR4I++yM)B1n6V8? zVK`}g_=2TSl>P9hIoGAyTlTa%3U^*iAu(ZSca)I@5ZbA=gVqd&i0zk1>y&ivi4_;BK@pAZWfK810Mw@-6!`(j+qyuP7< zoG3-Mo~M$fNCX5{RW(i3EVu0srPf-`YNlGMHPdRPnpKr%)(kZ(ox-AOlt{GiD@CrVWfyOt3@?3 zQrbf~HT@!)qyI7cwx~wZiE-oq`U8Lai@d(__1Dio|M}lMyuZk}_RsnHUjF8*huA;i zdAs=>JQ?J@lT=q~V}G0PKAcOjvPdbSrz(^FZNDOy$12m8Rmu8*`j>Tk*~wT#{9C)d zc%HqKD39&({`9oeT55SZnLrV?iFjU`j$L)yx+E?cEDQC-=NJ0MFTX^S46c)(enBay zfe=BfTvpWXtrG_r+&ht25W(%02-bz}_okd97Am}de%24~wXK1Xj<|e4UQ5gwNknj} zx;EC5DLF^3Esw$lF+Xp6WvuG|A8GH>V@Z}}=dJxZ$IR}%?jDhumG$USi!C%kKoCG^ zsQ;_KAaEo=kVb+8NrWhXWV5AyRafOBBHaBx>^%0~8eETLR#r*f4cf@V2R^dccFx*s zeJed#Neybrf*(m&KNS;*L{!zNu8>M79>S3+nSxZp3LMy12?uwFabAOnXe%&fW}2C# zbSKS?k>o^779xhrgfKXXnI?Ot_?(5QM&Us-# zv=Er)Ov>(KdL9=1i(la{e~bV5-{8MV9R71^9Jd{pSF{^qf*i*Kd}2)WiQ>5!?wKP~ zsHrNcum~HIny9T(s%Q~FL{%4-N@{8k%$4R;6yqhw zhv5Se(GjG%8d&JMV{fJG`{cL>gAR}W={vMNov<8;;4Be=BmM7{8Y>79oGWdBf>!`3y~2FcW`SAgicu# zwTO^&XLDxE8%U9k-5~N-)W=FryNhnI?t;s1l?_xDFP(?s)Br{9FgEez`ed(8U z-ekSRE{1>q@6Z{Kz~8?Dh5qlq{he8P*w*lCzp}U9_WNK1Cqz&e6hIle+zkV9{(fJ+ zAT5%h#nIH?3@oz{l_@6EWRi zhrNH)gCM6a0VBA-wW6LD3`c8N3Sc-I?%|`QqSm)20G9iO2Erh~6U;a)h(Hj6u{Ru# zSeLtGhT9EG1y~*)i8MwBb4>W%gRV5sJ#Kpxh7vo0YDCP45DH3wMrI2iOT>-(4j4g8 ziY47C^nc_Vc<=88Ak1vlb;Dx*f;mzEQkEmrB48pSoM*@&QErOn6hS&E3tUJT2ctPN zz$xefP_!T-YLga#iAXX%5_~iu*hwrSCc9^6ch)w^Bt4SZxg=Z|q?~sc?b~iZApi@| zF~uR3p~BM$$wAEZ*ju`Sm_wBHy6K|G&qpf2?uz^BYLa!ooYy z5k*yr7^I*AG7!z64%*?D$rXBFHq0^kNOwzP7S^YYOOP5VlN0zF18net9$0p2-N+dL>L5W~X8ZCzj0p+^rgj+s9WX1bXJIPn8#=PVkN-95x7pfm$#J ze)BC3C;WOrHAG?n>~HMQ1SsFMl>~^91U6XW(;0^aOT9-qa!g_pk-5)cBm>j&dWq>d zLF)>UJYW3WawPqnW3v>=^qAq9Bck=z;CrMKu@+b*t;w25`uzMbwtg61A`+@x>RcAA z)rBcJL1aLo^oU)!1+~mX?wuCSMEG13rJuX*|2}()iQbHNtFaZUE5tg=!Ev6=_WF=LI=)NkJ3?L@as=5^2gcsAoYQoA8 z0oZ{#lbj9}O&|rOLKrYy2V{Gz5o%YUVMNS%7s6>Vnm{_5$Gk;!@)=CbP7x$d6kMEc zBMD3yB%~HpfyK0!MuXniO$Bf_OtTU6#7mHF^=U`)&;Wp)H8+9(fJPsSI|)54FK z*IBF1^K2h3bd~L4iZ3Nk1rol1R&HE!noYv z^D}fozzhfa#GH6{0s=E}s8}iv0&aMH#rId75}QJWBD_zydmA_%5*RP%`F9_fIG4rm zBECxA*d5uz+cnJt;jeub8l(3)`V0>W*3?Do8d5$xci$!yGyiyU-P`4uMM|OVf$B<| z;RPN+pDzb-os&ssV1!goO@OdFjO8BdVL}JZq=g~{OU;$jD2Q-cP=qC5cRQotHiJZ& zyazRqfocg+*-B=~!wR83dL<2kfW4)pQ!y~X36UuG+joO7W?&}5;R9B2IzkNLh=~mJ z8!n7Fa5&<40!8BHqa!8}IqU3w%!D4KluFx5t6%?qj@y_mV^2;ZtP6@_+seb^muc@d zdwl-%7jt}5^bjeF_J>1TBnj{VE^oC|vCmnsY^QarCc3Cnc9US)RI6%Lsx+q>6)uW{ zkg*s=P!iNxj2tn#ScNi_!3C?p3b3LmT1VTFHvsUNV`gTk(IK-~mL9JSGr|zi1njXm znFh_1#pJj-h)9LEBedpWk2%8y6v>>xUBJ3$AwGA(w_pi8B zV1AQSKE494D2m4?h#?bmf(nV7Yd(v}0H za49Z=5aRT36v<5LGbboHoVkIO;=WI5Gn_C33qd3ZQH_p9Dzp{iykpGfZSo#iSjXT1 zuO+I9mV~1Ujz=)(bkOv0OedD$lz9iDgOb?;ebDWO%FqL@JCc!%ecWM5*bYd7x6f%b zL9w^U%(kIVyuQL1>==pNlR4|crdA#YLSve{jN~cVrugLW*wYNEsG?v0>`%UL%lY}d zZ4100Ya5B2PY-;oT+L_T?)*{td^a4Pt;eFIDrGZ!k4WVdMv-cAR1_X2Sd5H9coLDq zXL_V%im4i)Ku0i$-|`{}`1P&-ZZPIRBoX?E@Rs1Dnd~@H4ni)}k&}WrOBG`GL8lc$ zah*v(MFL4grwtQ60*Pe3hwbrG#=`F@p+8;}{!<1P-HoHRZDuTsa3Rv7bwql2L?xIJ zD>9>xj7Sv}WeNf*AB|VxBw~@GP>NfZmeIoRXK=t1k?2<_A?~Le0UJ!99kfr7kSBpH zgs$WV$H{|ILl!?s6R+*kvrwsXbMD$8_9Yuo;$6N*-5i zAMwR^2tqa7y)D^MA5aRFYUN$snC)2oJP~0231i-BV4B@Ufu(Dj^qj?0yhSZkINZ8$Pb=(z0Pe#~zI$AyT{o>mDORFw6^+ zX?RcK^zLKM^K0C0bRFEM-UjX6C?8ICIS(O!-CsUk_Kz=3UgS5w{V>{Ok;9@-C;9TJ zQDRPj>EW~q#ZD^ENfg;f- zEMg~Si&Oa`NrkqG*Bv*xXikaW``0m-)g7=T$J zeJXQ=Q%g1uo*?FggHb5Kl=rX7Okql9BHBmx!BsIGj?~PPBJVDB_&q8im_@}jNr?!? z6p&1gneLGy+$kx#3kU&xe?c00qIXbYF%*R|mId^=&Lji3S7d+~EzmozEqmZ}B9Vzs zi~99C$2E)j`E~TYUp~gZ<2vaw^D@21p^!bCRIlXtyXXGxhwCC+N*)f6pT;>Nj?3}a zKP!)=1J^M#W{P$bgAd|l0z6~P7$e3l=gzu{s>&vyjF~iP32`R@ z<{NID8GSa6eMjctOaUDGfHSPZ7!=sgkc1|bpn&htiEyS@;AM*HWG{beDTsk} zS)>VdqE6h`1(oMOqu5+U#OmxpT>tBTK9nzi{aYzi{PJjX*@y-4>_z590)D~lh>0vf zz!X){&sZNt55}6#DF}1Q#gdR7F{Ujo3%7evi%)L{x2!%uv z(%rsT>{QzG=$GAn9x6kHw}PWV6htsXE!Y+yAdF8}><#OROT*(MO2rBsRvap(^imH$E*~2fOFWqjd<$rrv^k4q_2O#1!TSNwH`ROnIKXGK~>2u_CLGmKc$9Qk&jG z79@n!VC8M+*o6r6$-Zok&_#OZu3|TOC@}NFuG*FDz9U~?B<#pb!{qpK_&*2!6*ECul7R;s7n%CX_ z;&<_H|1Msx`eay2dwRckmdnfY@o;>2_|>5VhKtge+1nuTvMkCjI!FkK*;>|R_GWrb zWy(d8th^(Zga(R4(6wPLC@Z!T_6Bw^;DPf*5!@xbTtEs=aAIDN>3zBnGLogDFiG{M zNjrgvEy=S|5`oCg`ZbvdNzUnecVQzNG8Rd;YEMwiJ^bo zJo{<*nLr>M4~KQDbty&JneO?n*^-RHiI^~aoP(Z>t(HwG9Fw^!lxCOyd}Hr<8$Jma zpk*!qU<+iR5c<6`rl2sigLhb>bT%fsLWEKhM}mcLp&%KG8z2B!Mum1_3y$Q@R={C8 zkM-2{^MCa#|1aOo(gh!^eV8Br_Hs=eB1X_v0L6TU5M+T?5WyByM%?BU$HQVp?LF)z z@*I5s#*RP)n-&$ZdHR=M^?w7oUUGN7%@B}rj<=d06Cq(T<;95U;i2x|-^T8jzj=B1 zbA=qS8kPbp0Kp2X;c`VLo({MMZUbT%gm+IkyuukQ$$U@tlPdl@>1imQs2>oj>v0pp&a4Y02Cu+_K}@Mi=$et3$vmgQSLU8flEj0sOy_G>DrMAHl#oeDlmm0S`Lc97;Q}BSz|_< zmzVzf9Fp04W|vJDd!Mft8#&kde}4P=-~I2G+qpcS3lNv|)${18%w=7f3I#+KkdShcL`yzjfE%_G>VgC?VG{_n z1}jj32ztJC;ki48C#CO+WLaWn5`u{r_4Kxu3y2~jJb+~4pIiy)pML1l-a5ziwoF%{zum<4f9pYTAr!+RaHgDx;A^~Hql9M|Y6?t^g2j!u-E;JTG-Z|$|!t>~&! znTtYoLDqy{$N0E&y>JnD;-q+b01J??g6`NVDlh`46HY6R1&y#bgx~2uP=XoSd~;?^ ze=BrR!3+w|YAzC@=?-KJi%5SyCrQqnBN3Dqewz_VMi7d%y6BzLj>Tf$3yrg-kC{2i zD@!?K*_=y)_aNZDJ~%4 zaAz=7K#Gd2#OW~-G!Zl=<-yz_k=fib>DB>3Qm|z?Fo?Uy?%byV&`8OULQJ`L8bb=Z z9(r&mb0%fhTJCy8_M6-qMoTs-hQ5EMH4uog-03uTz*e}=338gld}<8u{q?zh`mld^ ziSRfT2*eYP>V%IIlK+9`fB%2=-#p{jt9|u#S)|Na_T7K?yHD@Fs9!!Vzj(iF%U@O9 zX*;vfN;NUPFV^ zW-(p^l8Kq@latf^9I*o>Cj$yrqI*9|ARKDSD~aeX$M!bYs_Tfdw#D~o-@nAUIfC3kcHdM7GK9k@OBucQHb$F$q!V#H zqHfUD?~NZnlCJ*fLqx(%WTjSpc-Oa6P~|GVDwQD3{E+!pLg-LUqY#i16^Z5`yhYF6 zACQiA%QiruV~NE)e4n?>Il_FTSvU_Osj5 z!HH3Yma-CXSdNs3=0|8Jnr38jr09}YWzwLWGs_4XK|ML$Lwbl5a)Jr0!V|;cjx4B# zB49?|zjgs46opt2&+jjkIWHL;8I(q0akoWAYAW3gRgvIyx@WEC%$FM@Fe6*RL1N5I zMVsj)$EB%cP>M_+_nGx$CF>`X>xXgn!|(sU2H8)WpYH>!l;!E^#HEDlKosFbhGsTk z=BxsPPY6>|mWMTc&PGI((X}vP%yYy5C>n(e#2}e>gYoF71&BLR9{B;(3CXz4B%YGI z8n&V!d0vDpgMua{;ynB`NSP+XE1jH(R2Sq(2aQ>?L>t(Hp*dpS5PQa+c}_hE71|D+ zOSX1Lo??3_hr(uB3&}ZXPd#cdT1pM9ynnN2^V|n!X4`}6%&fKOM&UsMcOS1q zA8LKKVvg8z+d!Bp5jD1)=Wd!;l zBTzWQDLpWT@7Eaw)GBr$Jvf&j`Qg?1$&eC}`#J0W12HSnQfqm9+8^HW;SlkW7MTkO zK?gzyE9D^1kWHb2qPY-E`EDxIpnl2SxsNxf^X-P3P=_N5$-&rajy;vajmS`qe8w%t z2-@yVI-;e}$cP3n_fTCxOtff73{3FtHQJ6oDKL9-tq|fW5sqLwK9CkXtN^8`&z?CZ zJcMKRd3ou-d+i@zci(fRF=i_1Y4e*KJi0US{AS|&{eO8r|F_@Ye%tAE!Y{vg_{ApU zs;{3egdJ+_rMJHKU!Fd`Tz~n#WFTf=OA#^_D3Qo9d3d~#ch zLtdi?uoMVqSR&9hUM@_a;ZE$A^u{>oq(ChQ9@p-I ztV<9P&3n?zW55_@62&{;6Qg4?t(FPWg0PHxtytVGp!B0d`X4%w|0$yTo2iru#7xEN z)B6YADi=Li#jSUy1;HR7#>{z>W??IF`nX)=RCv<725UrQ+=2sS=;Hf?5_n*=H-?%T zG9iXd!QX%`0I}~Oo%J9r%%W1rXpvVSg4Nn}sDLtImCe1A95!qYzECnn5Yl5G}y_41o5 zwF!hV7oJcHqhx^(^dZI(6I`hZQqp%^=KOTkr_~-e0sLhjuOpFiT-YJ!D-J8_a)*YX z+}F&E84!Pi0*k%rT(iRrqvL#qC|Ge^F#?xc%$axYd$GuX&rAl=hbIt4GXn3A(Pr!( zFFmWFTik{eOOY53i!hxteEMi3fS%b2A%Iz~8_F7Ff&13zr*rB@T08%s!2>9ztfz5R*S))~+GEYmOP1sD(r$n8H{U$|_1|vt)t~<|mx7EC=AxUjkfwo<2TvLOqY?`j z6ELluE;%VOdvt!)ZA-S41vB~5k%_I~NYDaGI52iJ0vklY3q;@n3Q7VisV=F^j%?|9&~FTI($8EW_KmkA+ZEa)#d$Doh*!DT<`H3=|^a z?4Zd&_>9ohg|#pzsf_soI^G3*n4k`#Og&M)fOfaV>XT75S_n1yCYXYbHg>KxY9cy5 zrBr2RQbB~#;^E|c2Mz`~Z^3&?NPL`1qGszM1W=K>T79B8HgPN~ZChE@ir7}I9BX~b zGJ>X)8ANh-IY55#gx6cNSiaukHsZA@3p0ZsV3Iv2@F}&`09N0FL1=B&mu|frV$8_W!h7BMggu{x~ac$V2v8<>SfVY0P0gy@} za}25qhh&cFNDtwFMrIIso9U5r=$D5BFp zByS4m?@L#IIJth%;4{m1JiNUBd4G6^=Pht%nlnN-WRd+9^Eg>}q-(0r6y=CuO=5}H zfpgNhXT39(NCf&`-JK@&NnkI64(U5N@=iI^Om&pSupsX!D2n7$?F zhadu^Z}{;!Fh@p)qWj>}5mlj$TcZ)QQ?{Tw$ds0Cj+QeK9!PhK5gG6vaT&3D&hEqK zhfng$2b7a%Mv6zedwgy&`J;2{54VK>sH*z6@40VHTzh zL`tj-M=(_d#=Y)@QItkxpTbPln6VaOp%{?soGr@(ro#kPSZ=~f*?{AzzNb0@#3}0L zl^R1U|FdmBPm2e9LcJggA(Bx(C1hO z9l~po!&bM|4yR2w)Q1J%U!^<4NQjE~bGNTf_OrEr`;m;}iyGe&T|7Lrh_JwfCUnBMr7t)ov=LfudZDj>opm=pV3NdzL`6GEsJ zb>cd51U*)`5*NVdcb~+s3D9x?Ns@R9GSdn$BRn$Q!z1E$%iDzyoBr&`@7ACMJcj3v zKt`YQ+)-uRypcC}N=;j&975{d1wg+qV2OyTs_GB-!5_~uRb9%mz5m&5{en*?@6R*` zl0#rZPi5^gEs4WWC4|r;qd|l{@-oqoBD7Mf#9=|DtS*}bWh!eq#Tb%IRkK>Mpa+tp z5D27{gGN%)lFkHZCbfoZ2eCV7S-dszNlynHtGAG1bb8F!muMY*P!&9^R1L=W)(yX2 z{c_Ge;`KFvjOly#7+DF+Mx689cqv7SJipTSJ$Feg$1hK>A6|d^9MgzO2ICUrQ}@Ru zfAP-#=G*eG|NXZOa$4~9JG+eWKmF^=fALE#RT)`qG1}e^B_b4RssV{{AuVF7&M>Qq zBzD5gIlaFm-%+cJ3o|6oHv+I8U<^`3;&MYzc;dJr10LxenE*#)!3HZ{N-j);r7yV$ zogICKj4UPLb8>`w-=n)EYcMPYCOIAE^@{UejujMO zGO0-CtIG_3$#S4TMxs{Ooho}r^8BnW2jSoBa0Uk#KzRuenOZ zObzOhiClF0;7M_IDm6vJnVo}KDytC?Ji#&&M8YvU?UNxsll;!yNvNfJ`g9dzjOQyW z<#w3+&Pk*MBR3{SoUdSI(RsPV%WHbh^tp*gjL2I;zIq3rVv_Efri}cw+sl+ZL{j-; zJ$!xoW&3shAOEWfbxTux94~*_R(AYnYx!b{9Jal)KSTTS=ga@|F+RQcVN13n#_i6< zpa`CgOJ%Z*fF^R@Ujed8LBcE$&>)TJ7`U+(kkjzg zzG?0B!)NcuV%9&^ilskD^l#(p{^k)M4iE3YdjD`be!tf99dr~k{C=>CkpbrvDklR? zv_PqG?efw&nARkvOlUQlgaBQ`17w-wUYb{BuolX}BB1ZC^MjP4Qq(GQ&+x>EF`|Bb z9N(O&hbin(uukupK6#H!(c_va5kBXQjngSwP%wMqwa=GMYdIcuzU)G33E3=8i%s&E zUWy$ytEO~I9Igyh1s`|Gbw~n%)O;*pDImm^0WxD3PO+8UOsxAT}79=v-Bq&6} zi3sk4Z^5?+fFdD+&61hg@a|L!KOE=n#%m!EUS7y7mxZ^dTsJ4et;Lvhy&;kc#Zn_^ z^nMu^XVK%Pr(+LGxZ$3B1aA2(-0(TL;tOy^3@{`Y#1Mm?>FMgK&aTYLjBs}|Q`K|i!i7Zz zqav$s)J4D-u@sXdmtVerI$Oh`RMl5=zCOkmum8=L`qTgY7r%P^^SdKA~{rtTD>pwXz6QGl)D@>J=%5EwUt;x_(L-IDj_Ef1VDn&~) zlt$GUm#~dW)|xKf04q8M&5^fQs(3h|ZwN~tNrY5fjc`EI1H&;ZR3hL+sN`YF+k<-E zqL0KC?Ud6I<2j|9b@<(3r9gv zD9gNj^7_?sI<&*Wrs7p4CJ47}vy@4abYSdOD$G3BYgv?@cqjm(Cp%8B%D(62E!7y7jyaf!XF+r<#vaVg8ti4?>R0h^Q^K&DV&+{ zJnZbzZO5@5Wuw38*x}z^w{K!fPDL77mKrZln2&>ROOZM^xYnfzl-g<`Ch`QXHnx>@ z!t=$S_N-D*_q<=&NBjI3WIS$m?az;1?+^1q_+l!hNJ1JJIo4gUz+?XMVgL1`J#KBD zq7N)`Tc4K);B=2#-f*eb7M-G+OuT9&M*)X5?5sM$aI z-nWDw7F@pzzO1#)%X0Yii}S-z_HX|R*A}aSBTtYasdNDa9BJ#2lcr|Uc&teRmF}6l z9O(`gL1u1Uqr{eanlTaL9@I^O5deycLR8R!NTD!12znqwrkV($>#1Zr=+vw>*2q2l zveHAR6WhTRP(>zYWfgmKO_&_-tq)7@fFBO2;u(^{>(F-4LV0}5@6K)Wne+T`M-et%{`+5T_jUen{^k8t z8?bwsG-4_>1|=!GVIGi53q>V%DiV?&Fld`ulv&hE6!d;>#-vCo$dWN|HBl9lcL(!F zO_3a)8B|GSEX}t)ww@TM#26Hfgn9JP2oMrda$c||o>xvggjhE&59SkJT(~Se5AJJF zWocGRwBn&2Y43P7{N4GSex!r>D0BT7!2S1|P>4`fOKG2d_UY;FZaU0uSr8p8)x#nq zRSTqvkP#V!5}>;WWTr^Q0Ed)&g$oJ4Y{|5SHcPWsPbGp>&mz(Q4{4%DB@--JSW4xV z(Y?gp|Bp*~o2U#SJoaY~ZCu5|bta#;#3YAFMpbL>TfJSFn{aOJp3^tIUyYMCLJc)N zAF5q1s<1t@w03`}nu<^$6QYz;!|;5&VFKPfr!;@sP+4Cz_Fk4LK4%^^z6o`|T=t=@ zo|eSm*?4svfydCpS?3l~%H5QgkscIb7aTi6NrM+gvs%N0DJDJV$EZWMtB z0tvds4RnT)?~L!)4iN;iYQkd&=#t1D@I5bAd%DJDjUI{HN@NOnriFOyBd=RfkOIy& z`g+|i+xGmtZ-Zr7SdKC+oi*Me4&;5bz0X!3Ca;g8kd#u;+H`z)HGlC(+c*EoPd~)< zoL83u7IH-_OkwooNcTX|OlTpIm;)}T;sunNHJ~8XDRKoPuqSdrGUtYQG6p8C)DYnS zA|!w!Su~}hHdEDbMEFu=S}a4Zmpt!zUMa$dQ=Xa@S_EuMf+)DG*f+$8`^oj@3dfq3 zW5Z>aC>pJB&gWw zIn)h#p79r!^(|rg^~=xyhyVJs|MC}~Uv=&K57MUWT{3k(h#NfvVx-oJD4CWq*p@(z zOP~^`0&0!{bDvtLPZaM%Ysncd?=bKlLp<{`Finx3DX|VS%frd1DK5Kjk)h!uORzL| z?mcpJp|VGIgDLlveGm2=;l811dO}zIV&1<8_Fapnln5q@d&IjHA^+g$;P05h|3eej zyE-e8$ycvlzI^$x9FE7sjQ!%<-n+R&i)ck=j2$_Uib9s60-%YL)@?p6d}xI5xP*^JRy7k}g_2gv^7UgmA-6<3@9yd~XaQ^TH z$Actu?|it2)_26K8`LucUAZc4%xA@Il z`|b&C4(q<|m|I#{jHrc3MA~p3>gZ#8?&EUa*6s1_n|1A|2k63fba}TQ{7}pOVM+Dj zA3sW16p>b^!|`<*^EU!;T3*U1dc9x-?lqa3BcL%dIBC9fKL`n77am(4B#P>A``*xqJDqAN zQ{!Bvu{2dEj8NA@(Wc(J^nfO-=u~p+=}KoxWYlrUmSA_q(l}?$R#s6!3;XkmD>C1mIpDW(!YbPLoW6 z5jO@;IZko5qC>x15m8PHYZ|f7ZLT7g`)@8|j`=6|G8G{GVo=D#J&WcvftgP$>XJ_# ztI5M1Up_#9Za0K1svtE0k3ew0+|mbzrAL6I-hUse zMt?k&D5cEveERf@=g)pRe)yGN-p1S2uWmlHfg^Kuokd@?9D&CK%_8#ZaS53y8uIla zrxF=y!5$gAREdg6VsjKnj2P6UgycSg0xel6LG%HU$h9P~o0b}g=z~ptnxK;`OV%1b zSVdb=AAYge%-5?(WnU9RMO{@ASaW2`{Y&o=qcbEts0Gq9iEXDYnVw}&3s=u3 zZr5;4Ox7dR{YvQ;%A6KRk!_c~C#G=?JnjB;MIz;%sO`9TYNWuz_KugwQYTla}P^W7w$QdC<#{Ospn{onuR{qx+^(!8_K-%JQ1W6rbA2egB;ymJWtU0{_TeSdI(^?raVDy_D|>2CS_=j(6&qCb5%-af{@ z-pm+1zyWuUi%UhNh5!v{v=BCELNBREY=#3+;XzJvb3G>z9g8BstQ$? zqn=l-MJOt&FJ^u5NzRRjDJ6X0#0e?r8!%K8gJpjBNhx0(7JPDa@mL4Pdh=MBaO;1U zmP=^ZZ7h?si108aG%r1Rvdy6L76XD5Mr7Vk*an_RZJ~)Qa_u6*NqTI$hsuOn<2bQe zJa+T}FfYSYa;jO1XZILn@=)U1qmSW(cau*6?--re6=t|1+)$fcfwQL&S}8S#WH)Y+ zPd#g;R(FOJ_jLD&ydC3wBz*ZOX8w*;^#>5iAKvoh?+$d7!sO>)e)-Akm(Sna=jr+K z_^etOo>WxveajvOXO1Vo`BN?=%QSRO@n#nxmWI;7tpeJ(Qxmnw6A-7Y}9i@pRFOGSOTR zDJn8T?x?R%(MJTMkN$Yk`OOvc;>5M{SZdQ0m4|BIZ=!0~y}UZep=N}wT9-+5!nP+< zYr%D&K3(h*szo7Es%B)>G?z&+?E1}P`Qfts=_lpIJ(}_~$8Nlt70$E0y--Vb(>A4C z&<9`MW0_N^f$RtXtl>sc3i7%`i2GwaUZZzrjq8~QjeS7G9^YaqDaFHaI8_#zuzKbcnrjK+d$zovz|EJMQxrpeG4=5!&%jbrPfDL_`a}z$55t- z>O9SNUwrlaS6`Oze?@+4{iz-jONl+h20OWjd|L8ev5U7oVsB%_)6UV!y?kK1ooU;o(S=XdA_xv}Gg4|lKr z=;vR2_ZNS4E-g!uxd_HKY^n*+_QV+LcTo{l$;RP>rlOjmzIKbieMJG03{WKNjX4J- zQj!p0WF!65l^#9+;*qH9ayV1DPdaB#<721{kVXH@mFVGP?QWGesj^rehYS!XBR-h;v7yoULYMKysFZ`nK)cxLgO1bCiSD1E!<1c!I>Ou=-Fb`r{(&L%huU(7Zi? zMOC$&9v}7cELkN(>`qDpDs}NMRI(MXI7T5LkC^o9{cWBU${iM~2)_ zIoDjKak-W@$?;BBlY>%G+N7nbHVvswv?vY-dHs+T36t6Yfq_~uRY*k+w2EvUY1xlh$h3$`#@<$3(|l^QBoi@=7<1FCx^O3Ipod0I9X&?2$%wu zjGzMHnHhyl@>O^&EQE8TD9FU*A`)5yO$jO&2#;7VFaE$w%{(gd-!!A z%H2`&+Fmy60TH=7iFjhv*LVKckNGCT93HS;AW{e-5~Wt(cP@4M#jE`FxxYP^yB0|v zCKkcivrTLTS#ylklFI3;dH>}PfTPV?EnG6u?W^+WT|Y zhXb45pivM3$)$1t2gM{wVb!ctc#(12xoYot!k~ee`~ED?Fv8A z)co#mZMC*Gzx?{=mtTEVU;g#DKIS^c^Gde@#wDc{KL_d%r8bHIBWN07ouZ;t%_3}o z=jg%Kv^Ky6$dRyAr8}6))UaS~mP3~UO;D1Va!WEqohV7$F+ddAEZ#gZ5bMa;BT^2H z>UkR^9_A!--6@5`ij>lhWtcv{Rk+rsvf$x}(*z{e9qR@Uo(?!nKt(Btfu+5(4oO8T zXpO#snkjmk(W-2T)?#uc+O%Y>4b`)!u5jk=F$Jble2(6uk8Fy$(UTnR9t{q~qIG1x z?K~+?HJaYa+*XdDfDzp?Q>Frs7m?tvoAjT`tu*Y`S$7i@8df8K14h+x8VJ(Q-PavX(FaUErQ#T&PH5~M+txl zsNkRwAeah|R3RB)CMBB+APcigKab{#!pLx>n~TsBfCiy6Aqoi}$Ze#!9+xmAN_NYq zpj2FKJU!*%m`5eFE>eWPx;>ud%X@@J)B5ExzdcvA?4H|xGn>g$0lJ4QH4*ai5F_x- zAQ|SddN~zp5kaJ3stJ_4Q`{>UXowBA?e#F*b+5HV(cDZ<2k+NfE2_qb@%B1>_Gz3J z?gC35j@&vzNMh@xWSg=TNmzI|tY7Gf^V>XMc(qIC0=Vw?{) zOo!1lQBjps#NP4tf@5)pBt?qt7ip4Gy=;X_DHx3NB`uRZ`d-QyT5)%@tNSR}Ezrz? zWA#s8_~XUb=Zy3~%492jznV^&o~_B<9MjPp&^kPRr@+cvo&M4E>Z9Y+e>l0}4^>$2 zVwECNwcMRveEsvUfAyDtb^pU%e|q*NaJh7=R2HzLB(kR*DikPWNm@kq5OTVCek45g z?p=eLLLmYS5oJOo)`-rk#YZw!6r_2>AdJL5YEuHXnjBdPUERmXZ=d4+P`|iCWZJN2 z%eA%#^I>JmV!iLAJO?)>_l@*w3)(X)GuU~zl_jh^T{k-{gpiFuoQxLAN?o&ZPLov;E zS@rJ3a>PDTr@Xu4WyAR#d%$iCzr||-38pdv7V8$*p|xf!ayt6ca|q#PKRoNw_UEDK}GK$@AnI0WcL26L>w4eJ>;spwt3yT|F2bs53L?}^$! z>;Z2@)<**O4`0jQ8)Jz?N-3?i`Nda1d-}_-*Qej0KIQ$E8soC-Bu!LLC3?pi9tH(0 zWg?}}y}v!{LJw%EJXF1FF+641Qn16`tg=>QNE7+2B8E(jb;;6V1Od?in-9V*da@22 z1i^UR#aDo3Vq`;jC_&^TvfPDbb>lpdN+%1XN}jJ8AIQcX= z_V{5-A66aSy;VEZvDG{*aoIR8V|BToa{z?5qQ^z*Vkw|Fs||N|_jsSJJ|Yo)IMVvZ zo#y<(u{=p3i)vAAb^6KIU%hzs^6lN-bXsiPa`<}fH#5tWU`4p3s7HuED`oev@RKlw zp0vP$kW7OL@jExpoQTNSNfk5>v&EW2?X{2m43C@zyD=+kIOEH z+4qj#S;K~9h(8T`>V8RSmr~>g=F~}Ii@3V1D|*K|n6TbAh97OFKf0^96BT1t)T8IQLvV z0?3F)z)>Z)y|FRXTW}75GKpDKi!p{)v2+#YgrvEZ)KN-7bb@*Am2U5thDsPjK~o1IOEiA6dy-%%CLSbuS9;Y6Z~jz^JDqmKUz5Y zzL*zLy5G9O*Pngy`PV=B%`d-cr_=M}#khA>VGPeg)T(+Y#)L!PX~Z%Uxkg{3EGiTf zNfL^<75xDe5kb1&K*13~7oHs6)k=-KWS_ zMFk*Pa*QmBWyUq^%>`3Kz|GN=bBm6cV12;NfnhleRx9T_%=b~|J($10hyEy4eVD&K zY6(A-EWd9FZ=iQAzAT4_pZ@XFum59t{%%}$$_5=HMy=!s&44g(zw@B?Fblp+snrS^ zz#iO?0#;#Fbip3MfSRYKf!*MMG1`zS4l;l-yn^N|)GWC<(*>K9nk1zHbfGM>ObwLu zlng4;Qc5e+tTu3%F;{t*2&Ii|8nuc9ghHkYipB^j!0CvW4=4rQ5QGF&aheeu<|DR_ zy`vCqf+mniqz%>r7B$Bh5YRRWM6Kx|5crOSkQpu_$%1rJD02=lDU&k9ZKo05 zBwjp4bFR8ubcv8JYKdAhBRPe%;TU7M+imgkW5~ykCkcO>Ui5Dzj=onmymyGc+02Q!ip=xr zPyWfz|KtDjpW6Lz^@qp(yt0;p+nD$rX(z5RM9N6(f^ahFgaM3f;w}Q_NY|UBfj3jJ zo2Wa@vIC~+BZn6SRAavmvrITeCxQrf*?M4%Od|Vgu|7?hWfqChz<#x|$G)YTomZ53 z&d08ERdb5^>UQq!RIwT!FPMtFUStocD&0K7-Gvg$*e%CCeSS}s6reRq!Pc>L2r!^p z^16W{%52PGg?ovKEMk!f@B1uaC z5$N45pqgustNHUTEa~neu?UOc#holmJe{+<@0L|i3+EPnc=!E$WmPK-A%dCdjj;|y zWGjghN+4LpEV|`2;Zw``DD~hhkwm7J@_vAIi?9z1s}EbkKe(m-Fw{gOB8qA$_2Knr zZ+`kG>-WD-KjXN1bbt1Kjj*hitXb|`c8e|DqhnNSWhxomSDUKxJW45Gh6Ga)9s`^} zCf;iJE-i7?n|3q{Nr}}UK&e>!@VykWDZ9r$FdZS41#*AH)G!SDmPu)itT{sFDai8T zC69|=uCN_*%c)3HW`KpFG(#4gBpi5rB!W$Gy@CfwqHphz{3PZH-qANq743+zA-7;c zjb4$$s#f%7_beHqjZ=k1fo4Q%fQf`i1>&}B5ho*&nKhXfwxLWiX}o!o2aV$lD1}iX zp&3&WAqJ+_=5C~=D53pR=iARYb-6xJv1PJo_XDquCMQ+%=UDR-wu>H zy#vgw(IsjL)M4gknfT~h{uVPo7B~C@1r2{+g~fN4yh2gxPk!=8Kl%Ar-~Y|G_3lkP zU2`7-(@C9{l4+@s%uGp(+b<%Ah2E}{fN&r*TjrvnWk9rrJ&q{q2)h_RZ~ST;C2r8SLj_l=?7Z?GTn@vu9ub`r7{N zKAdF$a5)|Fb;{;^nEbh0@1?e&-sVuPUoYku8a>SExWTe@f=lCx4;lvk*h#|+5 z6htPbqQ{mb?@n@9#&4dByI+T%W|kW;A`qV6zjZ0~?&L8jg$bHRlBJ{|W{c~ZD7Y)w zhscY_NYOl0DiN9M3e|qzMabinQ*k8Bd>gwcbjj?2z+DS>zpVZ|Vs|w4ev!|PsZ$i~ zg?;Q#!?uFZS=wEc*{Sd2>_c7Xj|W&E!mvJ?MEsc5EjK2lmT8_}eEo~(Z~n4xZ`{rW zJvw~bRi%%tvkZ$ewN!@Wm zQ*`PGERB1Q3N{@{h~hZwsi7bmC2q`?MrCSIZF*{uhGAJtM2ad}NiCsBBr`=Ed&atf z;9*wt7|^@v9e+_5Y)|h@eegJ^yA(B7-u|;FKzc#! z&;SyiOd%DX8WJvKvenFpF{Co#9>#9??Mg=;Dw<{mLNQ=cGIpvWVBIBlpv2P}KRl(z z4u&=sjtIY8Tr6~Qrb~%^_os+%IMV4EJE)i|3dw@gOtgd=#Hqbs-7V6U?~>7n%9xKd zeSeUc{EwSqeIWe1N#2W^P1Et8{)<2T&wu{Q`MWpe?HPSk&|!rw%sEr^<^Y$mCQ1ky zXB(Zms7TQ!l7b?vNhAVErXx|fjd+XD$y?K0VQwi2P{Yi6znu-+u#l;YVUyB5P^Vmq zzC0SNKlbHeDk@5cjM>WZa=;q9L z4(zT=i%VxKS(U2rOh-Q4`SS{oRAtedNhO3fy55~~^gP}?EGIAEJk>9S&)t4_q=$a; z5V*OpXtJ_3w}EX%Kt#Spu9p}gt@La6Nbv~Ji`p2w+n$kHQBNqxK=u5+llu2bss|GS0Y zhtl>R*H#}uMMNaElvbx#pMC!H^MAU%{f#}o&2i3ZbnnAUp#|jZn1F+bR)wHv97OJ0 zr>94mkd=mDrl@2XL)a6O=AHVB7N?qpP@CCGh6ufCnrE6wk-3VhiKe>D4HH8QC~6s1 zF^Lovt;yz4nVO~Oa)^?oV=k^jNDgBYk>Vrey2_%Q7XYVu; z^o*ID?7RxdHm4RnPA=-3htzD-upDD}1aX58>U*Z+hXbq+o5X*3Klt%2;g6{fD&n{4 zyOb}!{OQmC^rwIG*WcE=w`KIQyA6|IYZVb5t^y|gYFQGqgo{=|Q=Y2UA_Lh3$h`e5 z9GUb)bjDx~ivo_GE^!?p#FYJP*NaQ5EF2drS=g}eBL>StCH(1mJYQ=o9+Ngf6FsRu zOiAQ-7khJ=UQOkGF5;ZjF5qSDZ*9JJWU>^F5sVZWPrJ^VQvuT-yFjy~U0oNKWkM_I z7F24%@lbm3SW*zX=Vp3$U?zd2Kuo3p*SvQ4~2Geln=(ml4WW%uWc zha{yB-M6OjUL|nSXT!M|#G)GF-K1rN-YiyyOh!aXZESOj#=Bmi z2UVzMT_Db;T2he#8zvPZkN}4(6Ni>SkR^x$MB-4g5K~D>F~`26Y6N9BESgB7CIVGc z)W^7GssMoic{A^%TbPMR77h75V@E%G1GOd-hUWsAR z(r!4ypU>ZP!)u2vQjhNeGt=Ew_hz26e-sEoz#}Efu0I-s3B*Jo>P+6endgV{^*-Nk z=Wkam4U5%ec{`m}k7fMN51bR{H#K&H{N%Pe?kLIDP>~*fI>n`H7V3`0KvKZN3bP|J z)0%?-#X&~GVCOdT5-%A&-~;EAdPMKa8PR5Qle4IOZ|m7kP1mj9zMMH_Bdw&4eu@-iL?# z`T&4upH^I(8nCn~=p0&Ou5C1{;;3XHxnOz1>8aY1uumbWKe`hI5O|IAdewYLRmbZJKMWsipeFN4c-O^iNL*?FQwtHZr{E0|nii+Q*;II;>B?d0e{Qd{ByhE<$s4wLr7 z%GB75Wzd_yyVcU&+Jz^tgLfnVGxA!FrGOr+@bIfB%2|AK(4`cf4*81P?^~$yecOl8i+^98BA}yND zO*a$dbz-se+Q&s*L%W!f5YB#AQJMi!$7&HTLJ z9P#Z#UDHI~haw=hr&CTYZZxwjZnTu`v%XokQ~CM)&|on51x{V>?9|dhLIFs(ZG70q zPufY{>KuR6aNp4 zfrrJvgO5S39p+NDTN|K{M81UYtwRDdaY{+IMUjj5C)f^~-=A z&Z1wOibtI~u7sb@u)a_c{vMEh0%b&yT>3)RPk;XB&wufYy#A2$p068EQ`~D)GpjPb zrc>?go;?&AE_VtB(;_Ep5Z!5tOV@6gvQbLnsT;B;t*xBmtwi=PbjO7GG!}>3varD* zg&PO1yLTw1zR*)`ST)W(GFFlDF>Ub-1d|50js?w|m6Ehlj*JckTk8}NC>g74-_6D6 zD;`$t)OE8KijHMbPbA7WGlW~3aJ)Y;22_gC}Ou3FEvbP)LVl+UW`ZH7Q_ckXvP zEqYvFbU|hLvZFVA+bx=5t(#8^qK%m|=SK&3;B)%b=WFHPwOszgqv}6bLI1YNa=Mwd zh#u|X^7L1K{qO(l|NGy^^Q#5#+nqs4x0n3_Hw#`Y%6y;dUIRXZ79}^D2Db0hoNE#8 z^ooM6xq1Q|dndbZJ`q0(FMxhy>H}9u7J*u7b zw)2QGugvG&8~tYsz{VSr4xjID?di$a#$#FCmcph1tX-A1 zkC|m|SiN3$lnKZmuJ(8-z%1;tNXDD${d*lzF^>8DtBLmb0QlI8_ty;CH>dpWg_rQN zadEcbDatwb9NXNtDlBS`Sf8dXB{%#Nj^C%+^hJmDMOXi|jnVHy)IpUXTZ{hi@c5^{ z_}lx3@ACdqyv;0i_+|30a?@UUE52>9xLpXk{gW=$6J$!0QkH!=lAPX#lxl?Y6&^AFsTgs(@@wz!*ML`YDk3l=Pn`9M} zEY;4sb6@S@O{vv)(u4e0kxVv$8e~=lZnR z36|iPbuY-RV-B_qmD_;rs?}$fn?Pu1ps~h$nQBWkS{|n6)Zn=7+l?r*b8DBiZacz? z1~;VUeQwv9TRr^b1aR)z)_@pcb1)t{Bxda|6Qg`?{q5?_=gc^aFCaj5o1AG&Yk%^M zez;?d{iQ@9tgQ>eYbZd~9Y1^HKRHX*>w@U=U?{clVWfAS6b+8d8CRXRU2vuaxwRb z89Ft&*?F~S+($XIbYAcKeR$ItoAHEhG`Hm;rMXpYW509GnEitF4f~lEpW5nAjn(Jl z_D@6iuP=k2n>75M4(s^g2Pj+bt@7PZe)_Y&`n&Pr`~7xBPQ{!7*KQ}D_loA#)!ud{ zaVt)aV!VT1EH;6L0(MuG{V^@VYC1K)8|~p@4Kp@dBl;@$v1Pw>gsHK5i`MDQ!wn6& z>vbr*!m%!B1|xHp+^M3xs(M2UL6!)j11-gEH7iXEyJ)oE=6ALvdQTrM-Pj z05#R52sRfCag5tdg37cvuCNeHH79062SJmJb<#AdcfAPz|{?&i~ z)!*N5^YJ0~FA5#)E)9>t3#+t(5wec zR+!VwV8#7*pU*?**3M=S6B?Y8gqulbC>&`ozFO_fsWKs1DY$$MM)(+a-Erxd&a5gKk*_xcc~AS(rZcd%BQYKZWmXpMd(k9_Q{e`bsy@8T-`s3* ze|xDpOv0T_5u{@-;!+tq_ zTZujms`^*Y*Cq`=dLDkU!1;Wb72#FhqPNz6_VYh~{o!x-mk&Ai{bk4L#)l=prBz!l zW+zKS>kV0E&fDa*xJ1Ci+|2Fdo>AWyT3JV|jtE@Sy5kI3<$c<6a;!&MeU2G#qTG~2 z3PE;Fn?gguV2D$PnGtH~hB!624uO=6W=6HJ5U8S8vC0&Ob3Bb$)>Ww56Q8jkD&CP6O#abVA)&ElB044A3Nn(ECCeZ|uJ=^bBwjqC7t7sgqd zR;fv|6YsFaZCNlSq(`sYZkT8bx@x32F?Lp?hqeu-dcX4|wc!0#5n0!qi5BQ*=CE_r zEI*4mq!seq4TP;x)~q!Y%A8B2V%u(+Syi8327lDv;|nd}zfhF(aSixi{>y*)QM;@! z+~AKtC6Qd#Q`Y^vU;Sq8`?hVjZHgt;@}^rA-_P+*y9a(pjpVy$9pjr8{&)40Texx*d5AV_c=nJINfwE(?|@clM|~=l8F9-)Ul%On7q{`#vw`-=5pU16!+6 zP54fQPVwEq6Wmex3_xo*({kZr?#DStu&w-@_ zKkK@FUcbJeV*SCM?qB1~%)*@>5z!)gU;py2{`yz{^H;Z*XM6wh>bGsqpY}EjmR7^v z`@WBU3IQnB5REkqDmT_hpHU&m53`#6!)EJJHw%w$y#YyWg?z><`fw+qOM= z^UHaTF$Nw_?yH9>_spHkrJ?!qX0`>Tk#?cIYABe1w=^}OXZZSL`O0t{`dKtX=!ltnK!{$}(&09U7L&s%>8AE0= zOO-`@wC)SH!eOm#6i{>tnUHx~Au$Q>>Ma{$+ieY;0zKWT=4Q97rR)8jx2yeR#e;K= zKpLd=SQDjk!T>D-bZSVT1xA{VTye*ob~&lz=u;7HeUT=1UB&Y$j)ym4O zXo=YOZH|A!ZvRoi{3j~R=ZD-E)#`usO8Ae>yn8#SG*xfkeEZjb^Na8P=RbV^!z(`A z?vukaX#pDvZ5bU2YZl7dpNIeCWQ+L}y)1$fpGym{B}yo$(wk{k8Y4WfNn%-?VXL=S zW=V9Dq^(-r=51OSAr5gd-bvZ=;5Znnvl>D(=Oka*A7NtdqrE*DK z<4AhC=sGO|z2n?*+gLEd&Wkwe`C9ihZ^bIIzJK;9nCz!-6eghk^a%wtb!?GJcDpFW3y923TJx za{hJA{HMM1p;UFR7QH-w^0Pm>{=5IU{pL4$zwZ0MUSni4V{>(b8+Y;hy;>mY4sJ*C zIo%@n8A~yHOtj_1``{F&X_Ji&OBaPl*Lj(e&y2Qcnv81A&mzs-tV>?z;jVCmD5Ds3 zMqdwdMIjb;W13VdNG4NTooP>DvABmsdU0CNmuat=p$Y}VuX=vP_1U_|n^XBJf!(|t z2n=GvLb9b+iKTgmd1WyIhat)Ln>}!sdb?hb*-UE}iwqfBqLQzxn0<{Jy^5GLs+fc{g8>E4+mVb;o?25Zk#K3@VaA!`&2yK9#Mu zjpeqnwpveXR+-$Nn%*tdXqV1t8Vt^`233Z;!&f)JDx0Cy3}G&1N@~QE+?%`uxbt~2 zM+8uAUT}vM6jKOO1nAbIEFI0gOT$i!+%*#+yPT`V#~`yg&Zqd@bz)=w$!U|4wLmie&ThPo6NM8 zSNUmLnjLxV9Y7i2%>3a8%qRc$iOBxVqg@{JyDMh;x$z`6=b$@bSwFnsvQ}o^_T`U$ zrggC~ale@va~PacOiHq+m9qeOHiQ>R2x%~zEQQHkjM|5pt5Bq7j(v~ifdJj~&6!=% zPAIP}XU$Zn<^KFWuh;$it>!KXfzhpXM8Ga?1M^zeDlQG(yikw}D4<(qaht9#dNjiVHQ`cq zF?$HCXR&+|ZlL&@b`mbDdX(UzB`KIpYKp~F$18!+-03A#P-In?AP-~7Q7#&!D(?*@ zOj=3Ji44GduTfrwSp9UuDG0L?OdhMUYTs$nNR3Gc!vS&ZZHC$rNXM!nca(S^u!eJ! z1$)$egBf}=m^?IwwmYwB?aU4#G=arF28oB6r+NquqGYr^PkqjT8XOB&x9AGv5K|@z zEoC^bQrTV%`01p_GY}eH@QEn3edj*LVc&kN=Dx<#k0vdB9iIBXL>&G4N_aF`EgBn( zoHgG*{p4@|)8GE;H}9|a`}3UJ>-8p6Z{B!V^r<^T+ikap<_X={LV)=}?vUM|ul=+v zC%L;tjF-J%B9`!wclB22jEA;3#|K!HH{-?#?eAY5zAk-jVXawsw7@owFb@{7%Ls01 z2bE+pE*(YmIQY}J4t~2b7Gm0+oCDkJ?-uUDj#+RsGu8E0|LyPly9e_rxj%&W$k!V_ zOdGOwK|{Ksb^PqD?xQ3m=505DnKfr@Gk$_NpL7a2Dkqe_b~mdr>iM-@9!Sa!Ed&~Z z)llga?mOM&UM7nLCaP+m+@?LA1kk}`eYo@NcwEF}IMtnFWnG8q?NlWfNB<=R#JqyX`D5&JVYEcp!si!V08VYN68^ z4$Zs7gU>D)i&`6va#KZltJZJ|C2M)y7wJo|VY;n+Nw0ivU8`%j)ZgOi= zLByE8k8RF*T=qZLY<;1W_@Y$(XdL0czQg)mP1ZkxJKEZo?D;2u^l$$2fBw7c>-~T1 zd6jnVt*>{>GiprfRsClRXHNLBaxpW!(7LO`N>#`Y(-yO?rMaJ0HTSdiX7f7Dv0S>Z z#tjxYJvLi`yW*JO9LQfGhdn(o(~xm$Ca44+FDqaOfTMCuzth@kZ3P(E> zjxN@=Gsm21So_-Y`M$JZ4e!yOR^D&EUf9DQE_{7$5%u8}l0BU5Y>2?QX&Z3&H)qub zinqZ`nAv)l2bUIYs(^2v2v|7Qb=)?0qf2AgmLhQJ^)h^E)=njcdBPxZBg*D|K&IP% z+(hP>7>S3Akm*+9zL8V)y5-1%tG8->i_=^m)gGsxhP9MFEp$Fd*cZgB&#TpswpV{B z;J)Bw`7vc+U;Fy)&;IE8%m1|h@LY3@4~f*gZuUrm;jp!}r$v^6P;T9_%e#9Rx^QuO zIP3f5_cOe~B$*r@j@B@Px3q2J>U?|hX4X5KJ8-NW3nbjiYM;z(r`C=uY=Lg75#|Lk zD;Q=866F6yR6ssn2KKlT6>Et3|QR|~JScPqB?l^-MRu-aK$(EG%d}X4wZwNz} zF3#){*`>CyBpxF?Rb`PFH(yWYfp($=ht*6mXiI6C$#IAW$>SvZVrldB80&K^{ph0R z52H2wv$BGPg+i*qQIciAP@Z&vQ5QZ#GLqI?99n+zgvaj9kOj&j+`y5V zw2?@tH~XlMBw&)_ydtay&CSfYO-y=k$D&$EojOfb!o%v9HCYhrWv2)S_T9|js7!4I z8k-;9-Uo?M=XHL#)@^)D0A7M!EV7u8l69N&Hmk>IP+J&no*zd%&GqeQr$pF4rHLNP z=7Yg-d>+pyD#O>T(Jz>Ozn?q$JID<%Gw6VmB&`pZ>1}^~R_;~P8WgNK&0s?&!)|^K zds^(V**R#ANm~%jtT#NkH>VlSi!SbOxt)JMt4wo7W8&C>8Y%yC)*A*KLgPvWUMQV>gRsaTGbQ zzf4PcbCsb=MGk0I4p?|l^Im;vv4%xR!XyNDXo@97JO8vBQF}%6oC#Vi-J3DV?H&?K zaKzeB;=TOT%;AJYTbr#0x4ezIm3QYg!SM4Eivg(Tt;(y&D@=a0Y0+D}J=J$uV?s8`!KitNLyF@h1AFg%Xb5K=fAXHQPYZ8{Nr6Sj-d3rn7H+!6S zg${Gl&rZSvVV^#Klza7s0oEUcvw!vo1Wc3xr#DXnzQ4TgubT&Pf=nu6LO19}-h~D= z`xwba3MIsEYX@u%Jvtr?;hJR$--yE_WHEc}6{tZYP%;4%8Z;OPN!De};4u5RKNiht zm?aSh6>JTRGzcE>IPMQHx7I(>#AuntxuK|>j1Y|b;PYNc6tQn2=_-+ywU@dCAq$Xt zmzwoXH;l?VHA<(@X;GDC=}5YsrBPT~62%nBD$df&hGj`gXtGcXE=xsJ9nrW=f@qa2 zxSHqc41*vCyfM7GXEWA>R!avxcX=!|q3r3c?7VGtzu(6glKgj&_&z~sUDqEKOMHIp z{coT({AeeCOgl`F1t+p9g^Mu+Yhl_*1veyA3NB% z7gqD93wJt`M!noLhP`_dAMA2s^VT{+e`9!ffT(@wyBFMNM9_?L+A}>mF66$6uv5e1 z$@^08KU6Uu8WF{s-<>iN^{vb83u zFH5n`=ZAm$i(lrxRps_;0OqSW3QGY{!KnG`5g#0vZq3{o-OZF$zF1ovbYGjqD!RMf z5=rc3mrjH#LATsBNjID335~=B3fQUZ6g0RuArf$v&oMKj1>i=Da19>(gDCMny$Y9w z1ga2lLFNX!q&YAPVKmuow=&HJ&bm)5!Io-nBTz**hC;?WeeDL12ukXv1(hACklISd=}Gz+BU6Lq6AUJ1X(I|lN<#UWrkB{SiSC3P|~J3 z+tK_*ccp4H!poMi`+d93IY0SOeSxK~M+(1-6Y~e1cI{u-SbZTalti(&#;TP|RXv{H z{LTOUA7@o2DLjAoo9|!!-RTsS+b%O{C)lEUDd-I-%&epzgHM2HwirCp%@?;N4xU^d zIvzt2GPH!qOhp#STzRY@TypK0Od*YrE zO{2yS!z^m8<#Ba~O`@663W#?n5%#cXh}RmO&0($KzH43d*lU}fcBZ|IECf z%Mjsci>+=;hh=+vstz3E&F7gyuPb!K;6Hm?8Ha~3WEtB&)uor{(|N6aM zx<7O{n8loSS=XnPFLUk_kA}r_wJ~SKvc13CO%MOoxr9?O+iNox0 ztXf?}?@HB}I2pWo8Jbm2Q_u}4FQNq6N9^w9;E|w{8s1Ds`7zmIouDvK2_n?sa}wMw z!YQ=S!y*T>ES%=x)NQkUS}ggz**j8Rv@q1t^mZj_-fB)@lrL4#WNLyUKnN5=EUPhS zht02*w7YJ~)z*3$QC+S|nmNrVH*d5xYuWbu*!RqocmU%IC!#O3Twfe}U-KCLg`oOp zu7qEoqW@UMgpaQ5zr85Bw>R&eigVwmSPcYaLSL+f=YHg^8{F;jj7gCkHE)&ka2|qt zz|sG7brAQ$D1FSjb~lU1w!Cdtv@#fKBPQe2y~9$fgW+TCvB%@$>mf?@*1N%?nFFnT z{M~44k8^`~$hG|34J5)Jx>&l`{IH3pW(aYlof}!PE+}ahuY=ZX>E6NDeLmlA( zgoPIOwI3HZtUxrFF@T4K>qjDwZF_y#DRFf_2S;Mxm8CIojQ=P(>b`SMLGyJ-l9^aO zCVKe8s@}DA?B8#;shyVLZLa6KyvfVExxBe+DVPBNEkWi}k@|er@cCu% zXycb<`NEL<3$*>K>(`Hd{}?p1*4C$Y1DyMfw~2X-j;Si^ZVejbmT^RwOj^Lc?P_t{ zE05eK&?3!B2>8Q_vs(a^juiS$E*H!K=#DiMrcS}2kM~n>V$Q>vfFw}n%_xvYU>*(% z4iC9gGC{}Ehb10Ky`iMwH76=-4DMG2Why2XlY1Bxrf4c*pCl|6Rml4xhXX-@qGU3Z zVeXToGU<+D))HC9obqA~bmM(ss!Vj@w6aB!99!ltO%_#^X2PObD3v3{LhUqo4+{)B z8)@cY-V)8)X;v$q?)Q1W-N)D^y4wM#FR=859Onxm>epMse<6_mu%Y|c>8zrF!{v;C zwRY63-0sr_7h#O%J>1Nykjdy?#Y$liQjJ5~5D-9(GW)Yfb+daSs|FF)PvMUCru8>r z21_#-11_W+N|NbI#kWTjukO^Qo53%c<5! zp1+yv+Z)!2_>_h7x%crWV4ctB^ZERvIQv35_^((F{<8<+*IS*|+xqx!!ZWX&3DG36 zY^K~xbaSTS&Ek)4r+^!~dkd5K1WH%{gEc!gZ|H6Y42nR?u0#@xOG216BN9E#j#Yrf ziMeC$%-sryY)cim?U;s1TNefpP(dVXD*QkiJEdMJC&m(M3I!4iB+XJissP_ zFoV^dmW12>{kFd(1z($Y_@%XXfz!!b*L{T07B>fqBE9)hlq?J;gnM(yI1AAZV>5~# zUX|SI;MC|=^aeNV#331L&cSHir1`QZS#EB@rTMvYOD)0H1cVGC_QC6@WZeeLc-K_A~sEBrcdOIxUd_4@unJNDN)V*tSBw3Ojc8>eK5%~bnT|GU^U5XMV zu1rSJ^#6Z}L^Fwcm`Kx-%bBScfXs}z?tb(kP&v6kb&@NE!5t)+Z*~i`-egh}SR@3nHS@laCLt)6 zT%T)=e0ri%-j(8#SYZXi(GrcIVTCHuO=bm1s2s>3pcGuFQicq5K9@DllNx24{V2R0 z%jc?4NYBBP)=}FKAmAjNGb?IF?mL|Xx4dmZ7IrF?8rPbrA`v zD2B*n&&aG)F(R_oy0}ItHa9Oqs&jEI!&HsrB>B)(+KuYZ&!^>b+0d)4oNjf_KVC?; zJ`F$Z{sL zP|zjgam|3uPG{To?I5km%9@R#l=Uxy&Z#jAC3Ap+h}p~xomxiij_utsKRzNVmk}dD z$K<|mQu*XoIDfdP=o3L!LCwrK9!J}Ci{jLI>^3zLTNQOTWO_(69lmfT>Kufr z!D-$$TKB+ZsSzb%j9doICBVBXYb;u_0@yoJH7bdWRp+6paq_wh?s`of_s0Zl$9kB? zxWsZ!Za#;KrDBb8PqUooobF@yZkg_%uwU486O4LY3tq>oE1Tifa`2j#`YIjg=Zsfh zt);hhr7sm_?z_8hhCJ5iQYZ_cIIH(qBj$l|!`x5?$sf zl>+9Kg$Uap)Lk260E~s}C1fgy0~iBQN)d!WA)4>HTWsO0-Rf43`c>KdpIS)mr_J+M;`;^(O}zuks%fgMlmveFZ~xu@JkRrg z`al2Q^ZWNa9+rbrwERZ2lkn%o+tZHrU-^jPPUKitt+Q?g1= zXJm0Vm9eIVlulByPRbQ#wEG!Cje=XDsuY>=;W-25hRE8_+WGkOSXuJWTI!xDB{C}o zSu5HSgg<2eW@!&k*j?anHT1V^hTE^(^12NlyoDQn=4J4!8^c>F>Gm0rBvn>b*711% zFaO8?#pu5+Qz}W7r%q7v4$b=uVf{21GNsytxg=pN2Vma2!%+aXJTDauLRm*W1HGX; zn`_uMpYdriTA5frVr_d7Q>D`y6v`+}$N*=FOu|YeBa~&;Crpt)hmEy_%-kf`ltdjnlG7$9ofMK;I)x?Z*qiA*d-Fi={S+A-Nw z%E-)hTq3OkDF{L4tT2#ORYkM8S`!L{A6xZFI94LmOS{u~J)KVLI;!$&dwmt3zS`Bi zRdl`85B`KgYCo;oZbE(i#YVFA-jjf;Ua+mZZ~o2S{_Q-?|M~yaJWJkRY=pQDo%GjKPSWzm5>^X)?G{kV6drMA9NG2oCh|;qFC*+ zYx^2mbz18(*5{ba-6%5>oIRm7QO$845kXg+m&3-hF?UYofq{K3_&; z+wbEjC#xIpW&!B5VfFb0Yup(dK*I<-jant8?{{)4iiSL$H6l-|33Xm;Sus>um>ZTX zsoI31Drqztnp@wv#Z*UKp5(Qj7i-WeIxAGA7?n$fnAYleSM$R%Jv`Zbmdki+C3=Of zZV7(ZKd)Xz*TL%At^P>t>8EWBZ#9Nr%BfXNdg1)(xYu9*5C67+_h!#dt)?gC`9zhx z8muIn4Qu2_p^f^kb4S9eDUm`}vW4IY!CI?=RS2dw!;P)wBCFc)b;6lK7OcrEL6v-5 zNaO|0ni@;ul0{g4-vB?CYm`gH53Eqo_ z<-#_Xl}4uM?4@R$U|wTML9LNeQ>WVYd0CdK+`!PU5@K#ozPAYgKMhIvDHzs|>>z*d zYeSPny!=d((GJJsbeu8;dY`+`({!9F1qrQ%S1q-kN2I)2l?r4xYsMxxMfzO>AXJj= z-9Zzm)FP$K8bPL1KuL*GZF_s~WJ5_hS1w_K(**h4D}&8_rkX*es9KW}4S8DEPpg&y z{P^p8uuy~qs#5K{JDONUXFV_Zv^tsR)c^)0C=;qYFU*bbYRtmA7EBIQ)-uNXr}5#W z=Swlhx}-xWfnyz)2DGV`MKR*}9G3wz&2IZvcU|u$&0I1#Il2i*X+13&m8pQ0`s&A= zAL97!^K^G&tDDgITl&H)xZ!#e{3=A+TKi*+8GcUl`a!^9!$vnREpNNyeZVtD)uJk; z5QULtLKLSC2Ua0OgPi7;PC$UFw4pY&X0z^aWwBu1u$yRJP%vf9%{D@*y346;*002BN{`SEi36x022`euSdOXV`?)(#zJc5ntLZcGa-5vRf4qKXKOtaG+b!f-$H zn}hX^kx0~e#Yret4Ll7!t)mKIP$?I|;&K{GE{{I(aq14IMu4zm6R45745be%9$f=@ z8u_^LZr0Q?Du<_h_&)Xzb^q?UA5Ux|p?~1ackNbJ#NpL!_0>uKZN|i(rCYrft5(%D zxO|)3Z)t!6r2BvQZ~mRN{+s{kL|cIz(5c)LQdQZ5TNjqX;~)bf-9_by6aZtc9V{+@ z1E|)~JGHD@={>ANi@P*S3-b5ya@ru5EYBgsy{AYd$vgb=yfVY1X9 z%$ikG3C1#51;b$6j2?`XqbgCdQHoNlDAhSw#TZ%=-Eh1sw#vv#0IE<0=Z<;ShWKTo zkw#&|>&e!mE;&;0>P)dRBBQL5Ue!{g0v^g5s_q+oVqa#BwNp;H8g*EL&(BYn%MxR# z^lH(3r5V4v7`|d){i*J0f1WGht4aQ9%(fll0J=KCQUTmbY(wSo9eVE{j)$k+Zh6{U zo09fyY=(7BO*PhwC7a905>C%Kh3_9)+Z_8R$F3t*4RBSOVAK$g4d1pt`|^K0_01Sm zE;D;*kX{1aoOvNls_^caF#_nsh3IVGbh`P2BSa}56_;`OaOtz>a!PW(o3LbFs^2-* zgi%f-bO{i3S;?7(93wt2W>(oj**8?Bs$1LD<)Tj)xoTbGdC@6yBpdTwbs9W&bjvj* z^;WdYn!p-N#~{I)nv9ag(@>|V$f{CxugfU&Ay2jH$2fcwci*1c@tIS7@t^u?x4PXr z-=2rpBk`5U`A>CO`#E6NhBJK8t4dN;O4GKv1MoNh`hTLe-_Xt4CI3EY;vx?z1=Yc< zD=)I=rFTc8I$;44C_qZqDHH)G_rUDyIJX$=-Fya3MZmOHDSY2SM<^9+$=33C%OR;tjyHBYN-s&o`o2Z$Veq}6wfP++^~*U!@#hjU0Y{+iE|5lD|R^w<{h9nCCBR#BHU{ z*7|O@d;Hz((*#%+*2Wn~ARp^_Str;2;54Kdsj*6y)9`L&^M34fAD;_VoXjSu48fqu ztO973fRjbGL*ppAsnPbm1rTB*VXUH5L-{!9@cV|!8d*RNnVUweA1~T>k^OG=skOTu z_oN%D;?u(2Bo+qPIwA#$w0*a!iNHDI@oY=R$XQk#Yy9q+QF6~y$RH!l$H&uH z)bA!ZDMwVTZfly{KXtwPt3e$f=ca(9?UgL+&2N;oY+zpKa2YZuLsue2X=F zwN<^<;=H}7{TVNVKXfs?Iw}7H_RKc9Lsj)R|Lxz>`)@fx)0uylj~_WMA~*sQv2!uv z0;c?u2=h*JNU|)DK^n}0`8oUuHd97Ya#?S(o}HvisMElf1*R$$>XNm#{c)|Lvss50 zWqLXE30l$MWn`13~$t~DbrwxEku1+3DuB_ zfK18~4N9#GrU_{xv)85tEJDseR187oR!*%0gX~QB63DDVSjpvd^Xh%tp?7POYEtwJ z&)ScLr_=dzIj>_#+Bl-O7LTu{s@p<(<<<8Gk)>Z2bbs~F+imylB(E>LhZm3wW@g@7 zn~ScjgM;OusYlwu?r zT*y(}tReTrSv878YX%URazjezP=+dP^7i1(foJ6i-+8;=Rij|sxmT{gd9>CvyLN7^ zX=FTI>;j}_piTbRjR)za@)zaRT|&;4+=ses#?;MRk-GI}*tyZv%P?HnYB zq|y#pm8Vp9hWn0cURB~kCpyDH6i*8Ybz&yX%2bwBr(D;@JM+U9Fp(pHvKk8ajpSp- zQ9K$Nh#)3Z)JXY8?73vo!_*skONeV$tfr7>?)PYtq?R%x3kc9^655oTy#xT6GBd^8 z=s_%+kX0^N3UYC7wQia5fDw}w0KLqROgX&GZrNKp*wA*UxuTEJl)Ewb{QP`AU&dG~ zb5qN|n$};Pe77#OuW+kB)$Z}nKpg!Ml=SwV_!Tve8DGQ_=4P#Twr0&~u0j?hoMXV9 z4mLy82yGosC6y##6bcF;0m_UB*bogifmL}95Hx7i`W$}Wbq?2#Nvp(mC|9#GNkT@Ar7F}KdJ6*X z@+K#ZY^}(07DQt~Dnu4jpmCbYEh>d7vnn?N;#o(`xCbG^`)5;M)Y( zms9%YtTvLMw`P6vdGc-&1%g-u-slEZvXPDBG-Pa(Yh+0PtvN_;oEB({-GNH1ib5!t z8cW2AHa8;-W)pKQuCkeQ#>iX-h#Ik;!yH=E_AV5&)=!I1W;>U_tn=?KI)}r?r*m^} zdoL8ss4Nsr)-BI#J)JqK0%#jnrW!H+>*w)l$t8@oKAtWg&y^`NnqzJ>CanYoGdY z1DRVk!!Laq{DVE~mGd`=tpW(Tx5GEz_QSU!k1-0;Qo01H7{cZ~z2%M!DOCYph|kGo zi-~{>IH{I2gBsLm1PD6K9RerQ>}muW;VH8=p`dkPWR6@;XGL-)M7ULi(KjPvlFToT zU*1f8jsCjrjk_ORvnA0cv?DR+@ECK(d_Kkbd^(>mV_i4O)or(WCFgoIw!hsn ze^v1OlWXZGHmo12Gt~pw${IIbmi((OFeCneB;ft-SdtMeqweVv|u-m#~c>v!wO5 zWtb?-*3dds;j?31DcR0716iC5g3cq?(vpg#OQ(p_SU)ehC@$mt{*=!F(3`_I@sQcW zjE7lk#p9(eYea+rK$g}uYvfuXR;{Tum(y4tV?CkBK(E~~cMo~@tIOfr({w!3`K4Rk zdN8~?4`1;Zt|W%H6?WaC{Ctt~PphjRne47zYg2bYnD)EM9&F zfXxVR&CuLvaH}P2Ei8#qxQvq63Ai>pP9tYqnT0YLWL~|yo78M_pEb@HL763lRFzH_ zMah(wbkL0Fz;Gm9(hLjR|8Xf5A)=Ip;ul9!xEH968Cp^lnvVu;j@`6vqa_eoWvos? zr9xI!CXq~JrBt0s2^=AyZ+8sJ-6lgrG$z%%*#X&OOtJP{r}Je!pEi_zY*teJOSgLE zn|7-_{UM{rD}ePA+>rmw4eJlmvTobz?SkM13^sFfYpv~ezU$VSxeI2^y>A(%U_%w6 zHuEOJnM;myyr`|$;zUp+WS|t6B0-QsWx@$1QtT!bCgUbobgF7S4>}>WZpw|vC37Hz zp}wEm!{j?-l$NSdrb47SH%SmWU+8~h)G~5NRa;+W8OXF@!dFnciDaO)b7dwp-+%LMJA4yas-aPN4pmXy1Y0G! znGu^gpMdQxIviC-sKBb1IduT$)>uv04p~W}G)(eLgL7LZ=GtTkVCebjyT%3>jy#l9Ev3n&9eqPsg>sD6^)hk};SDk5ZFN3e# zul|gqdi$A0c1xw%{=Bkj-j?8XZ)I-ozrTHW>(lP#>Oc@B~=R%CGxhAsH?prv034N}jND5Ge?>JA>cpNm< zW}`G2-LRiih!2;jXB<$`zDU>F8lkF zPf5G3Gp^-zE4#TJuU=sdKXe|x-B@&qd;kC-07*naR6YO2W~*1_bi0QBq3Qkw+*&~L z`@jCz^WpBdci(+%|LZWTr%#m^3Uvt=*JX6~DjMa@Ve+{ZX$y+-$!XLnrD3~5ub8?o zv}WubZpJVYDlP&NRo-1OOQL|p36|x9S4)>zHEI)H& z^%L$dz%30OLb1k+m`G)GqDk9KCl+KSm6~Km+aX8A5GhD7BOzo20I~rca+8W$z3SLMyORE8hX4E}k6g`YcN{lSCrcEY;8bmR5SuwAJgyWMoy zd28m~db8ebn%r4~85u*Y0ugIcCWzgviH?d=3ROBQLTzVlGV9jwdpmeMk6c8+CSxf+ zg>|ygjXs%8v_>9`vzwbyrE-{0Y_sYV`5cJyX37+6+BX{DXn?Y8GE~tF7`cY6Kw+F$ zWZJHAXPS*-|8C~ND-$yRW@q*;j5 zT$YGYRafQBEe!fr+q{+2^{2ONhD{yuOB{afmpd4@w|ylsUq1=klw~jDmG#z**1S!v zdux5apYQKZA3mHuyk8za4z{xC@;j?KhkLVfw|pE~s-@VSr3TfiJe8K5cAhE%Rf)+b zlkFP<>v`Z4Tvi!}N&xPrnC!A9*T^;2bF61+ zs`Q?1r@y+_{ku4RJLdbP?Jsa~vpjt9V7S$GU772*?(EmU+>+Y23cGSO|8cw3A30}z z734DeGHQ{8`M>(_r{mpkzxn?2|Ml)KH4%rtjqgEizjSdQ6zY8WXIsjO6H!TdOBKh+NKf)OuE0s{(Gpv&Yh zvLR#)DQQkbMHcBqxUd0rsLh_nIBmTN8LEO<6hs56lvxVUE|mr=wq9~nsT9jlnS4fc zX^QF@tzyoc$BN7Oe7;=9SR>+UDSY*fxn(fiB3AqT{+5LGcDejjXVJej)BR7n8{QJK zwr^(U?=OaC?Rq8ra+hh%r#`i5n(mJC-QDHG{ps`jcD$Po`_tcl9FNawqxFWVvqpWq z#8Ps=j3E?7t40jQQWeDu*a;|}gMlT6oly5S?KnnmQ?)KR)?!niPz4V0(9DgCXv8d> z3#3h^y|?eo4n%_v-Dj&M^1Ry4w612>4yF{n@l+(C8qbkP7#ZZQ!Kubvm#RW3-3m3H z17@5(9+!9?X{a@qv&NYzuiA}yXWzf8hj+DmH|D#G_p#kDKssOPB;FEaZo$#Fv(@cR z@GrR*{Fyzgwe~ff{`YHWlKPI*ez*VCUw!xw|NiO!``-;8b${VB#wCR6-rAm}8j(1| zDBD{$qm=~GGUeuJwe9SXLL|}IQCbUyNiG$wYN0!#6lHU(An7oYmMT-4H4@mIP+^;c z9BIlTn2ML19aBirK}&PW>&4WU1W+5$)yOJkRk3VSAciU= z;BOK4TezgP=C-`}inP{zds1_s_x*63?vLk>pU%63&xhsx=kuq}V_k}ib@M%QEGQ07 z8VYQkng}qLYO~`KBhhEtgi4S^DNj0A^*s@Af;(W<_!KtNcT&MJ;nYM#aw<(_Kq&e* zGxiXxGI3rNMTJc*Q6$hPmFB|4a_XG);9Q^IY>T`$6yC<#*r3bhos_LKp0XjBC7#lW)swo6=v|)V`XnUNIP65oG>xyVV~9 zkKXnyzW%b!Ediv{{9pCm!~OeT|N7&9_}|vw{zq?T-*IfdHN#q0cN>Z}95bYL9T{ecYAk8ZDyV_;hDv#YO{Q)%VkTy%RTB%DbwOH!=zws+9Ga2vZF5Mv zSu=BQ-aF@A+wIysw?5mhqxTY3P#PO9fEe7lCT67sIO&@kBebSUY=E2f7elyMae0rI z!_Kj}jWSV7aV-pCEn2Y`tdP0E@#X{)N;Q$H%Vl$aR#O>X%iC=kgtZ4pLd&9M%Fn+G~jX2vW}sKP4cxryqLiIP=HWfB8i zv7uKC=(4(0k?=1cau`T%z}8s7gkFq5GZs|jSYIU2Fugc)qpCgxxuhY)$#G;82uK zRt>UY4#6!TIQKh5Rc%ozC{Qjr)zQD7c~*Q};`5rb`>sdQ&~hD@&r1>h-86(S9|v2* zYo53}3_sNF9^Zaf`};cHt!-Z5vaP^>AHIDHi{6qLZpW*uW6Y26kN;_Qt3PRP_$o8X z?28I=TksH72{X3#{{9#relvdiU-0~!#)a-$L!&Co6uz*k+)=Yjp=i@Abjb~d&}yQ~ zY=NC2^FDid+SITnk;=4%^>m?C9UPpHE2atEp;UnT8T0}@!L_k9tb-Y{M%x%;)L`YH z2R6YP%7%d>6v|472GvH+x5@-IUvN@h>SmN$s#Vc7Wwpqz+*chU`?`)TNiZ|MAXb|v z>+AFH)?IZ^&EQx;3cT-s-xpB;A~3^VZyZ zYrXf~G@s_#``q@2c6Z;8_w)Vz^YO#wFZi(C4_SIg_Iw)t9)w{a3b$E^0B$ldTtN_=}abaQv7v7~L}vOb;v>R+6H{jVcL50)y#HZIP{#o6s^#$l7k4LP}JDP|>Vc z`3CPpy{ct4l#lF@JK!#BT9&w69yfwjW_}qRw(XZ+CC#@m=qp3M+Z3f&+`YFdu3wH5 z)BXZ=cKyy~a)f`FrgiLfk*Kueb21nceoRS09gm zzyRWl#{;P^YS!l7c|4xK{l1=lH{So3@#(+%<*6k-!#KEkt*7n2{p#4fwL{we$G2@_GjGj%>+>{ikL@(g z-0kgn=XZDhyZ7h!4Xx+pk>yoJ^U8ItXr1=Z98sgjS;%yk%`^xTDzScmeuwD+^B#S| z_y}*%iaMj+2@k9#Z3QUbfuus~qB;u!0_75>p0twwh?(7kU@)6UbB)7?1!dVKzkJ^rqpK3gnq(V|*qqqsx~ z71n4*q**g-*dXquJ8d@Y!Pd~Ny65C-W)r34YF0oetEpwxVouPx48X93+A?7-BsMp{ zf|?OVS%Hcz?_^6qZFGZ&hN=ukLrakKQbSFpsnW9M%DHq5?P6$I&dailh>R%JHXK~x z%UdeUEBB$>+uyC(|HgX1o_trn)mz@lFH}zLFFem*-Mep1X>P}>>usftX0*0VSIwu^ zTl1;Ew5@rXp8BLd)&8KnqkVWkKJV7gpJcA7BNmMFs4?F;ci^c;l~!4kNe*lTm{G`& z7$@kj!6W3*0wZcgtjOnq1XlDr_yRUDQ5P`5Kn41YY{&$Je1-xtSRp?n2eK#uWEO`k z7R$-FYnrFr?dovU-Ldu$I^Ju4SMwov`?2w!Nn*2{{{0>B6=-!G;BRNE>y_~Ob^YbH zK>+`Zy48>Otc~thRojQ>m8@cWuUl6mHluuR=1zBSMp$dlt&iQ^a{PXI`pl2-+v#KH zxp8d@XEN1J#i|ZW#xz8lErL*c+QD32`(|eH1~iB{-~pK_jYam#YGBa~2$Vy%VMm<0 z7^u?Nj7KP$(jYfjZqY#lmD++Q5TrI+(XKLJDs*Wc*`!_7KI<5oVrW?}>#~e7B2y|= z@w$}18LVD;rQJeQuPE%V@b&9X@RjEDm&O*_U!cxjL0Z?pyhS2j-3>`b#EZjW>%I47 zU3%-cZR_(iW13@k!12xw$NcmmpFU^0HJZk`2F3Z1TA6EbfhU^55;XLC1kR|zOGVq)*x1?85*)X ztWW`*vnl!rKYB$V?By`DO%hAaUb|$QtWi-?8OUZ3p;lEQ=q__HB~X@93s)Iwa^DPU zR0WmP1gGz$-A1~}oTWqIzOaw55w)zBWmz^@y|yqM8o%HGZvoI(u{XC3>-r0?ERV0( zpsic|kQDEqWyAWR?cu8va_e8O82wwTy6#-BGe%!t`d4qgx3-(6-lva!`qZZLe60N^ zK7YjN$;PwA#n$sEwlP}y z#}Fc64onDuf&-Bx8Ofqq_t9)bi)ia^s(Hq4hr=EZhuR%$f6x0n?e@_+THAtCUS!hSy%1bwS=xi*3G&Qq#2E0I4$_HAlr_L zwk|RXhTfLtaN0lMZt0iPyqx>!`|{XZYg2E#d7gUT@8vA&dca1 z&zuaHb-Cbqfde~&4QoRg+=1=zOymL*mT+RzQLw;(o&f<3+=DwbLBSl98RjPI<*oWu z`zdU$>5zv*9gjL3bU0|Y*M2VVY<~SL+09+}stvqFtZqm5>rL>jN9`48c*XCj!8-k5wj&#Da+@t_3EIxdPIuIR8CNfJ zs5mG!^%>1%|37OEcYVrWu?6|E1d`Yl+fGqDT?k z0D{8o0k<)4UA#3@NFP^{S$B(-o7q5!w9NE3MIt2BO z6PHuSiKDMZwbs_AT1ve|sczPl_>YOzZAsyFzwc)M^tS!+4WiwUvX`b|{)f(6egA;< z@05qHs_!e$e@VevA6%{VMS1uFuu{&s%en8mK6gXcZHD1u94@Y}uXn@6q4#-{Xv%3C zZOYT6WtLJXT>Ahl_V9uwFgdED1K7a<5k!LnL{NYNOyJctfjm-w*Ci)I3k*3?3X^pDe1>mhkr9UE8FXhAAqWkTXcssmqpOg5L zCRYD<0_jz!kZ)L-<{JfmWm{M$ltnd*uE!Ooqa>LZRTVCpmQq^fiPg39wxw2ip0ONd zDXGlbN;fTCLkeU<0+K)zIzh?^K{rI+ne@;OJXGokLMp&QJP4OWLZa%zLCheIMBFTxu~hGjsdufH77oNiRjz?SbLj0dqTYUZUqOUFf=9 z3H}j#{ca;lU!Q1uwe@pb&3UO!_F^hGrJPevxy#)uYz=)k_Wd{v+s)=`ySuo$y4vsd zhwj<2tF_BIW}Ajo#wdNOsVhttbEAr0Q5Fb+E7p6IiQoXOk`_Y%Av8l6IN(49Do`qv zNQJ2}b&51de}ZwWeec8In=Nm*I*yu?iqhBFiEeJ^e%)vI>ZRR|t#6F5msr(HD#J^z zp?|uf)&Jwx;j1GxUq6AsN^HOSCuSBQo=8|!RD`9ZPSUZeq*Qs9WmclnxHKXs%pOKs zQxo$rXLo5ewVKM()hV@_8V{mPki^ask(meXx6wZk zehcXVclRmXA?h7sPUcZ+tF_ct-K@6OS__Yxt9nGVhSH6={*AHp5>CB(uKCrp_fjl< z+d#>8@TTkQ6K%J556x^H+Pb}gXl6GQS5=p?eD#*3RF)S~w5BfSq3bq7zZv@NFl?{K z%iVr|*zb0Ee?0C@iWjn$r1fkYXNR(0bgC zVe4HWCQ{)nZRDjF>l3<8bLw(>;Z`UwWGce?ioTh#zdCdL($B9#)oshP+s0|PHPP=( zWq3_w_-`D7|N7;x1>*WAFp;pRiUzTe&MB$#B+NRIu*h;0qM3kFLs`Q?0ss!LzFM%m zH|`5msPVFBS)@P>Qni zh}~Lkt=3v+rdRroF= zN?)sJd&yz>W~Ovan>Vl}BCRzMDNYKs5dW;Gmg+)0Du`r8*=Kwi)AqJ6~!)D%1 zvftBTPSeu2nxpjrs?Y!fwm=!+7q`h+kb&_I(g|*^E4GY6f#oUHr@T+mjnSRb=DgIO z9G7c9dC;BS=RB^-n?)SBo=;Q4;_fx(&tN=?^Q|R)vwz)^=cq}V`usMLaXl? zuwE(;Zx3p%9iR1KtqJp`^6;iYthIhs2x&?=rIb@%%fp;g-*rQm$6*-ye(buORD{>d zBMX8FVUCF45O3R9?&j&OJN8EBcQQ@|BOxmG2%ct%=^B@fG)daPwH8m`evP{u6Z_OM-SwXbwQDJHDg`Lyr$a?=G#zpTav#y z6Yy#`@K0T0|9_*6zJyt~3mIl6`lD74Zq`~sGt2saDMUmwr_`?b@=`y4h%cVD$2(bS zZr%fTGRBN7&p2g~DiPiZCkp~7F&V|a@eB74qLC?s157}U5VT{Z z!?lxm+b5Uc>`P|Nyj3T5?Se9_x9BQ5kBwm{-q*G%)?4nawZ88dSiy+-k3#VFg`1c9 zfUkP~|JkF}zu!H)jaj!@Jl)iTFUou-Vm4+Wz(EnPu!d=}i|6grkMqZ$c8{N>GE>Cl zm>LqGz?tA=iwGPqkndo77uzkwVAr6Ee1`5Gb?2EGex#%lb)o@$v9 zlEj&1K`Sx$8|+j9)k+(Yn<|5%*o+t_vG z*~#wm%={$9a0kPN1_@@Q4oQ$R^1z$3K6S!L2rT4WgFvi8Zk_-O-KL1fV`9;`uJdQt zz9(B|II)ln4}!h^XawRX+dh`ggynfB3yz zJw2HgURuthMNsub~4a?}7nFnP~G#5hAK9Ld` zI}x$w^DWxqt-)G7PW5rLs|cmdTgshDCJpks_=&PqIXxw5)IcPhqJ`N!qfqXXdk*h> z=t44T4jHT@?6$nQXUm(rhL;}^ z$bgARoEqP8-a6-qbxQE-8@ex`N>j?|r3&%epz1cO!Z!^VzYaWIU*~{( z6}DE+b-RHGz+;`1ql7STBpi&Oa0&}=zARVIrw>1}Pd+`}KNWixbOhDo&bgvH^X?qo zJ){H?Fe58<8Hpopc=d*73GPBO*p7)xa_kb)d7~b0)4MdWhGa*9;Do>?8rE(9)d&m77^Y-3wdgtWi zbhD|$F!p_a!#CHjmzw&w+pqrz1p&PO(X?VuCDpMSYLc}`cCny&ioj(D=`+MjuM-}?+o zkS+K3GNO=s&zxO!05ma?bdzKwtV*<;pMC&54rasckAhu!6q5C8D=ckj+0 zeo!8LQNH}rFLx=HF^eQ`oEn+I`VMDr^LCr5g(l=TI$@>)pM5C{KoLHkN_TJUewgKy zxLdE;^?qF?6L$nbiWaJ@8Z7H?!a0W!h$X9}4J}Kgh@3dwTjfA7v5D=A)S9}~xR9ZG z3vJG&p&1s7QvBL*9&#VLCC&23`|_{K>NiTlOZxgtX!RNjp!zz;+^ZGh4ar*Z%fpEX zw4TVd=B;^~%JJ&i!>1qp{_2Ad403PBW2)79$bE`b z>e06Yau5{;D2*-yr?C@Fm>Psg1H?%aD1=2J&>@CCC-2dd8ucKvwyTugOUxIGY=l^B z+NV2`?qzSr*K@F~7N&XB76CM74~LoA-T-t!i@*Ka!U>6stDc>46ik;sUm`t*o^W@D zi@WokAGQbYO!wY8IlH^vZ2PXuIp5axZo6XKRsjEhMYV1hegKHpBQoyZN}Dd9J%0S& zdryA-?%~7V*M|@7^3tv^X`W8C3?1b$P{}I@(z5j@Dp@f~9#d9N9pe}{I;I$UNuAbx zMMl^8=5CUE9Xot)kftZf%}_lm1cadv1}Qm_3|#=poscL5XdXr^u@1d!M?eBKXJ$wN ziDwFuN@ez_PDN3IHqDnzxy8=vQ>Ql}Z?fDWmX$)?8vA@%Q~yS->UBn|*BY?C4YpqV zOz;Q~Z`MjHOD%Jq=jHJ9;b))!`rYe~f4@BWe0g$FA6?si8n%VX1k~Yf>&WVLl}y_o zXX#4|qA{rRm|`4|RY9D`p0Q9SPQob@!<5rW51RlZk`9VaL=$)YvXs#6zfAJxCXWIR5|BHeCaa0UNP_}Y$d}eG3?4q!>1v)UDuD^ou`hEkTS-0n z|wjQY|k!noM6k@4+lMht`5>*yOzlFMrfnm z4@Z7mNGI{t)K&ys#*Zf}TJwBv4@$ zSE8KOL#Kq*msG;n1A@WOAa|_IjtC3RT`6nG|G@iQ6jk6b!nb*Pk?wN zp?oJpO+q*+T5!tJr9=V^$su4^P(hgEvbHam`P0cDe1G7(TfH-C$Ak)FN5>N4MhnQA zU70(P_JCooOtk%>X4DeyDOFT<`yf&D|f2 z<2L8M%blu(yco}Um1@1jw*FjUYelP7*lX6zYN_-7^5W6^zkBxUe>;Bg{_^OdUtPxG zlBd1wCOZM+qJ>y`8wryh#w)+`=k(_+pVqW}=)t7%->s)r5W>!#9pni5!qP&MuM8?-+=x zg;i$)lM4`q+m3QXc&ifCWGPNZ$5r5sptnO#eccgZc5ySmsZrLq{-t1e%_Bkol(J<2 z>)qS1X05hbTA9l6*`v=s`|Z0=e)r4z^vgCqk9I+^Lpj=Ug12Ghaio-yP682VkY4x{ z-Z^iQ2ZdR*VxY+0*z2ye0?k0o(G$}#(a2~5I587s$V>`Ci&l^OX7!{$$5QD@iHo{C zsXlvm-sAqDKN-7s?lPPssCs=qu_|xD-r$ZBRD!^Ap6h0T_v^jP#q+??BAnqCa0EQ+ z60NF9JM5b)XfS@xXBT#Mjd~S_r|tSj_07K;PVU<<=G>{6sHo@-$@<2Lq(ADF{Tad5 z3RDqcZp~_~%do$ z3AXcc>BBqGy+O2Dok7B1crV|)*J}&wW{3BtZ}WNz2>PcIf9strcW-XZ>e5PWA`{$(B+#gAHsEZws1WV^K+)dqHSdd$kKpBQp^5B{5GGbv7;?t4uWcjNTzMCU6 zX)mQQGy1|wVbY!(79$OeloN;4JSI;R?$)>mth&0l8nu~CK(i?8t?5dkR*kqa4N+Pg z7e5|wa_PIrc6eGI{AIcOqj7tdbC*(f_1lBX|J_CCKLcUw>wamtwc5O0U0r6IV%+!m#(aIytt%fa{8$c$F&86%ykZbUhTb4jNuZIWa#0!x4p zBUOhkkW(T7s--)LlIWOmGGePvfuYIPpoDQCRxl9=8;@GWjrvU!K*NPIIKm8H-6j)4 zh=DPO5c9TkQDT9J5FF&SN|GQLvv3X}B+%+8xE7tQShFY#*Q1wfY%ZI>OibhX=~g4M#;LpK>iwH*6R*fD`$OC1BO>?r7oqG?jwjG@GGE2RACb`=_*EOp?t0>OO7T6n_v}HNKS>vHeYzFMSyUm9$gPnh~lfG z;t)k1L`7|?l-*-Ool7mKuB=R&^R~AW-A6o)gzV=`TgHPNC#M)QZAPU=ZNh#>iJ2*~ zQFYUbLFC@(LJ752O7`E| zVIjDViH{V=g@SQta+0{uX-I9Z)BumX&6FjbDzQd!Vuf~`D4Otm#D1aEF+?B&0|^sT zgE1#c8fXL$MB?PIFgVz_QEluI{SdoLcIBvxmrzdBgTbs!6vC|8T|59OVFeZx5$x@7 z)M3D>wa*V)E3-9Pyj<7zj*k!A^9orj$#VA_%(}hcb-QWvnouo$jk(o}Nl0@yZ?)BG zb$_`0?4x%-{^d^(5C1SddUp8YB7E0v_c1Lr*K`7bgA7!`l>hTkc1nDr z7_GSlP%1<*4(J9-La`3#7?{Bf$;64x8YL>_(43W7ShVXq8M}TErY&tMGF+_!&(D_vP*kTTw0nl`DKp`tthc1-BMq8p( znPH@o1tM_RvQP-+;9_BibUv8PXw~<-<#5%mpOxp2mUsU1=8eA?`fYM^%_*fdsjjv& zFL|QBD#rh*VAgG7Ra@CzUwr=C-+c0S|M=|P-^`C6+Ox+eJc%#muuPZL=W4Z1b5uli zB!CHtpgAgFCr`*A9ugS~!TE>4bf0d)F>El?H3` zVHi(AX-(2jXijhvN<<6Q8F1N%QS~9ZyX2QwTmqvVo< z1YiWOP9WuYfmW=8b)!y0YwFPz6j+U7aD@_556w&*DjKyh6Qy7vcftr(c9!7vjDYg2 zz1-;sW$xKC_JvjRPrBH6WJAx9v*eDEs2(Y1%oWuLL|sD4vdM6F1HgyAj!;Aw52}Z^K`wte!g5j zJ^9gp9#8K!ZRVY-ihVuhd^@kcD#rgwVAe{kR&jk-Bpd9KL)U z`&}-_!Zn|8I+uQKR!|maz<>q_FbJ4{ik#4IBaLd$Cu|eB*r76uv!pTUk9+PiwZxq= zh$!g3(52wAdU20X&0L*N6r)f_#7asWTZo`FsJJRJ1H|mKG}IDN5fVh}WpBxwAhCA9 zdKOba2+Cp@NHeFPBrQT|3;=Kf*h?c@sxdM%Gk4*IY(ehDsZ;hhl8x>*iC=_lqb)uy zZQ9|^k7#=j{-QgvX0n?fZbt>a+Q+C4aF`{0*HEiA1bHxfbE7H-rV<#FQHwAg#!qO60t=fvLdKz zaIhC^fJebxsq0A-xG5DY#jcL?va|hV`SD+$Jb2sPRC7*w)uq>Ne7Ch0nHm1ozyY%lzb^3_c|u2kMh}$hx!YK*I1K2MA$IC6<|5 z_k)v=c^n)>lro^iLEeZF8Ro^Ci!!rJ=dczLTod}lU2-xaQ>Ne!@j|)? zAq8!Q&YB5WLcJf@Jd_ZE7Qvxs$){>K1e$Y4QE`~tymR{xICZS}_tWMMQ$M5~?$M61h|MbKC{)^>sVRgq=Ik70oQ0P!#ff68MBREJS z&SI_@87KW|e}3XV%UI`ftkH}i3MMGwq+=a(%1mG~LQ*h63__}zl_Pv%^@0<{ z9YrUhAdgl&6x7I!tT$?w(*9)-L*#$FeZl#rCXB+T3jbw!n#!mk!8W=A9NcwZtL)a$`3A@}I#)OS58HEGd# zJG2TIg9SMw0bSp5ug;vi6Sph35=k@(2?)x{pmjr0m__rLw;LsupjdLUuGa~?}(6hh5aJJSp5uvIp;kp5-o5Jv>d-#0?#_IxD0ff7~=<>8;bt&`HCm+B6i@$&N z`MZaU&!)>K^>}GEac-KM=C=2=pZ za;sI-$itxH7AZ5aG8jxKaXr~ov{&lKXwAJ51(g=1#nLFJ=rzJIWRw=pNjbFgsiKFk z`f8&n74E_*P%9fT!Ho8eoXtEMbn&`7U~Wj0cRSi0?J(E<_32OkdOW%B?rB{YFk3hH zUos&3#?X8n%EMJIXsy(`Jbw7_gP;E0)1UwB@aZR)AAWN2@cDeblf^h%f2wD9lESzm z3(79q;@sino_dWrmO(Htr~m>?=-=q=hnqMRW~eD6#Mn#g-x|5^;;}%u@!{w1|NiIy?c&kz zrsEgO^tjH~ zgf53L5iwjqZc{9Cl$JJ1V^;&v%q9^=fEaK-xJUqsh%gf(b7ll8Ck|1L@M5%H5U!1l zp_#*MfU7UpGhG!KQ@Jc{MySG^I!CEiYrUAKhr4oledj;@AKQCxoAsXib;fcPwr;wI zHvI_0Oj-KRJB<==kKKTpeg$%*+EZ1(H#A4S;#K zE5jh0)07y^DsPxt^c=?{GGjO)J|V*#*DZ`mNjl-;(kq>1PU>@uW1(G74AM zR&EVPr|ZhyfW_brA|ef4b@U+7AVV`$BWBV}JWzOqG1jL|Ao56XBe+G7JGa(Ug`J$M zO+hS#Kodl$z`fNYcL|(m4<9_tYPY*$P6bU4}>>SMR>5%wx^^JkheJ2 z=*85Wj7QaB@b$o9Fapd%%|PMaLez5xF-4%6Y?9SNYbVD%tWp8ZuC>_`b%UKz4zV+|MkCI|MnNt!!PD9AC{{tS(e^vHTQ@C%oc49aimibiaYmt zb0UIh*R>mkH=qVGJNNJfOfpQq{d~@`kzVN7tX1ToAB+H~R=(TOUfV|pJ~sJZ&S{f5 zD}mrj?{Hw}$BD;ISdhe8P$qRGxCmGCmhuE88Kz>P>rJOnK`T4hDr2$o=* zn-c-y@X2eq^luRHx`=su*5S5;>o+>qeK%2|-#c2lzfe!B)nav;uHXOlKmFm|e>hxx zT&FL~{LGf!a(%3it5~pyA^-{}&6<|R%)E(OYniMlkYEN6I03+NXoy`+FVG4ER)|6b zq+o^%I|Ec8HEAMcfYNX$rHyu{nL}D}KNuOTHH05pl%Z~_ZHpz#*f$^2di1M>N{VoF znZ}J|4YKf7>r4nC6;9G?1bGOIJP5%;M01UBVxe)2aR8w@sVF5Qw_x#7JV4R-IQx?+ z7FlaE)|^j;M7^1L<7(N-$1F*>L^~%aM=uthdT!F(_x*+}aohRz@1{2GHV=NhIeTE8 zt-bA(G$P&3tKYU?_8nu^R}*=y)@7QHAN}e#AO6?>a{Y&2&0l`j9zSi@J3r1nJ7@Qh zHaT-}jp{zAutNlQPBOFCeWMncBX2|##5hWzMLoivFMQt1&ZaM}W+UO~-b#81e?HT> zbPom{r8)F;qnmByELjPFH|n?4kF;APho@Axl0Q%)*NX|h~OaUNDwh&c2I^WT7e{_1P|13cjpes z;EW)MAaxLeWFiC+HJB(^<-B;;U2B{_Xm2+o4yEU_Fv)3>k2Oh=IoSZ3w zf{gsoun}jX)FUC#JYXCmk+TR1NQ0C~2n-8h0zekgjFScvD+MQ3C@Zr>b67)lL`7TT zI8zNuiHQKN9?>NpPJKV2Hs+i=l|zg0aNs1XvRk-8g)9*%wZq(wjZZ9iiK)(?F7^6Z z`|)3&+@PChZ(b#@Tv-ln{>#K%fD|NZvUH$%_|Mla)`J3GrzgwPsv3&9*t`C`P zOhFE1n7H1RM39I?+$*t#P38pdBad23i8;U?jhIOWVWGUS=byyohjY7}yIvrSArY&p zhNx_l8WUM}-m@|>LsJMd6TkuHE@2$#dOx9wq}=0?pZ(EYJb~D=2{yyatb~LMB0ku0snzfDB6D z9xVX^Nl=DlFku}r(VQ7*9>gIzsgR=U`6QXLFu|EgH{D`JEi9^4Zzth7HbX_)z&(i9 z2C`pFiG`SulMzE|xQS+j=hRD3G!66sgTN8QEYyM#7OV;iHdwJNWSm6F;b4P#ou;~* zO_d##1P}Ts4Myzl0q9H#)!@vF8XTSd-c2AZs9`kg(v!O9F z)rhGgquUBmbcxsz2Bu(vfokyq`4=mp+-)m+@-Bkgm}cl#o>e#So2CV zsW2#$VjZ@Nby$@F%9K!p>Jbqn)E1aK#<%L4!EU`5Ip>$&pzj#7^m{}rbF;8&t<XzyIhr|L5`f$MfOg>=!MLK??-E(vV{2rW;OYl+Tz`W8oyi z?!k}_wgWdF?$}~T00kV-4jyQNMj(M?VhR9~AS?zqK$G?yB1jxW!L3Un>11fq+z;kP zC5Vg|UR!1M^RDaI*~n%Phc!p>eUPY}Z==^rRBcfweS58K#KtdO0*D_Vi(00i`n7Cee&Q? z5d>|O0_Ncek>CjPX(@)(JYsn&P>mn_#}^AOFKDmFt)#lf{@w)6Sb5C8hxKl|H%|M=pg?ebY)UamTqt+1RXHFq0he#dmnX*M%Nv*=)o z1~ai>#;Mup=?)q8rN0OWWq=`qGzc(<8rI?NGnL=r{m&`vQQ+U!9eW2^PD=D^W% zR7PN$r`cmq`H-Bb>>_iXro*8cd(|+D)=Zq)!VAsIXPc%lBg|<~S%Oy8QA={kyg&2O z%cQBP1xlrqL_wvP%@4;hDA6pHs3NXQJ`9X12#&GPUX40eK4^Kl%-=j9X^CpClxpQ< z9AKBmNWt&g6x!BQR)X8-CRBa%f3JF)nY+JCGu{Tgy?x~VePY&IwA#k<{Mobb{m~!) z{M-Nb+28))@~cny`gOzh?)%d`+4k9EtI>=;Pxj7qc)$6>>T9|qH`OATB5-;Vz9z2l z*`_07VoYWVjP8d3G{4vQJabJmUN=rt;Kn&OyK5ekx%2&_d67g3pgG|N3mQp>wF2Cm zL1=_vl;~kBAPd^ILJEUH5A$e(R}Rv>22$2$AY{rZxv6cNjy}u{EEa{Z7<6wg&8dB&mkuzhcOKE@@nf3 z^c68^6$u-K`}EFSWvBGXe5CEBQKu3Jr;FB02uB&pV8j@p!yI(D%fpT7h88j(a70)O z7^S`T7Y2pTM}n#pt)`jHRM%eJT10ER#!qxwLZX8fc08%Yz~0XqrkGdP1#VT#346Rw$1u@k-M;sGBpem|J?mbY5_`uy3m@BPbv^~s<9$?G5dpnv?aKRm>?-rb;``{k4KWiTP>s1L8I)_X?ZMCdQrJ+}FdeR-s7SUe)%Z zPsd(sKmOwbCimkF)(s{0^gb|8WYG6JbA~n0dUHWGsDe|(AZZpF;AKd z*@>(y0uZG!1h)nP8iY+@w6Z-N3w?55fmYbIXC>kAP4zcq*4v?b_eQBTf9~CCjyaCFXX%nXtwvRhB z8Q~yp5cC<9tOj#yNL;Z=K@qP9Zre;YJK%469uu zLxF(HNQcUZVU<9oGU&`IQ;ze)!>imbPp0NJ71;Z_jb5ujL>$~(#0i-Y>9<6Ssj|aR zUo+ z1g%Zm7Y~J2kE40B4`;1g)xrPZsN*b$+H57kZ~xg7x@GdP<#@erYps{6OT|{p%Z=-( zXDd$~x5=B*W2&s1!yNDb6T;YP#j!JAo8OPB*kec(P4KMqUOd`K{YK zCscV81E(AN!0qMGczLZ}{XUmpo)7=%h%qn)!x%@v+@vs&GK2>_(lBy#!23G&E0KyC zq)=nj=$A1rEo24to=R5Hbbfpo%j44z{$RV}_TARz_oLk?X02r!;HWV?tPHK7b2>!ux)ae?-4Nul-afSou&USnDzUduvB|+ZH;Yg*X8lY-~UfP{EPo^|M;tAd$v4&uI*8eE0?Wb zGKLQC!GlioCIUDKYsG9fqnhhcbvA!5+LW@P*6ccPF5Loz2BH zL30S!SRj0=XtJpy2&+6}+?Q6Gqf)@wu0#SLCy&Xjp{y!Xy)a6!@HWlhRMo=8$cRF9 zB{VR$N^nbuFdZkGolhrtND!R?(?%Lq9vy4ubsbBMFD_U%wy-$)QLs@C+TA?QdT&S) z47W3%xE-03A=((uRIS73R-DiiSH$U<*M2CCHEUt}))8Cg#(dr}03%D8M(i3Q*L(k~ zr2ikl`W<1`TXksf>+9Dqzw<|b{OPy<`0|q6~6`N(p6r_`6bMx7e&?-b5a<C3fI)i`t?fhB3mD-86UTKv zOmq=BN95?5oMoDP>w^UW0u2Hs6On{pAmS{GC60@%b;izsT)%))~u+zV-8PZ*{S{TVq1r%PZMX#`zsrlfsHU z&)JqKreLFqdq-|CFjudn&;Sq6kqO(`cQQ?TC7aXRoz1jHz*GcV zu(1C>wBm8=FRwi}-afVW&9*CLez;*@RjZPG&vY$aR&S^j&A4S(w}rmL zGI&PyVMhnx??iOqK}7T+yE;y`ap3$|Om1G?lva$=AAVW1^L78=S3QQmZOqzBZu;Zp z;XnPmKmEZU|GS6p|0q8HWc~cLE-P}Kp&I!GWqTQVg59(e{&|%CL4rt-N*}`V{5z$}` zZbbLPk$t5^)EgpYs8TQ^n=>lYcQ+W!Y_dHMFgH~8G6tx$m_V=w&E%yjm<4obZ6Ig(-QX8@BX{PtoZ#6SNbyFs;@7e|NMu4 z`6n+w{mJ?ADfwz!UZbwaKGrfp+lH_lkXtTG&hSI?sYpW*0h?gW>!t9I=!b*%3&?mn zGYZ~xP9##G!-zRhfC?_U$q545V?_#Z8|xZVn7M_+O*M*To@10MQAwL5!Q>3K6XRqa zZI?7<(I*DHc__?WKARhT%^bDKw#pU2jM;+A#-EZrP{yzt9zfS*7eb#^T(R}mQpZ&UCzWvJ%Q)UlH&5DlsLN##h+rcQx6O~{v$@L6 zNca(Lb~`ec<#6_+ou-jIfz51!$?ZS_db#S+=`>IqU|t|43w-%ZQ-CoyLndMy+j_a? zQcrGA?;j5nqXyCCLD9v8sFDqu8xJSGnpAUV$?LvtbEfTYcjVi$v}+U`vEeCsm!1p(AsMy1sa&*a3cw0a5}nM7~rU7s~Xes zYFi4LCf8~jHG0}Kt3hU(yoR?^K_$XH`r;64EgqVi5(zI*F$KPH%!Gy!H6I(4 zIC^cgSKIRPi#)3_R(H{a557Efzs~miYU$2fyT(5-KkJP^bZpo4^26`{=sW-SzkL3; z-#vf)@jI8tabD2}YfNG1t_7fKPE5ebaB#ZdhQ6Ttm?loMp(_B5tjiV=aI-@o;YZ(} z(zsNE_*st^(8=td-697-Mwt+YXzx$`VI9}8K3nEb&-PBoVcz<7Xgb=i-7J-`3>~~; z-Ij~iaXQVDrq-eBiU!Dh<49tjNEnJKmi%BaFG;en26upvfZP!VY}TeWB4rUlCCNee zbr>w*-dtm24SE9`HJoq>a8wC~Z4?VknqYgj4r;D4^F1yLPFfAG5^OE87)9UmYCO)? zk_#Jy9HU%kV}-o;&q^*o?pXBJk^Y+pWB2a-)^keZcf1MiGk(2^VaR^D-v8_efAQ=W z-+g%TtH;Ne(!Hj$s#nj+z1?M{bOl0TsOyM3SO6(mw>zUUucD!pR<*sX(|Z>1kPX|p zDV4z;NkqULm3VRs3p68*Fn9N6lafhAGmCIP&eNTkH5O;71~gQlxzwQnI<5J1Ll0wE z2-%_TZI0<+?)wJ{CYMXPC*$wYOef2dy41U!j+{J~vj~5BGnU?#$_}kp-W*`*Q`j7}ZMAHz%8o6!Q5Xf$sgXgJ z!6%@(gfWB`C2uk}4O+YtR_k)U-+uW~lr~t=0PgF;*UG{0WeUwM$@zz@0B?x)9KEj} z{rsc9{D1z{>;L?{^RGU>>koBVYh7B&iC3ep`w59&=<^Kp<(l43K}dZHx1AHoWu!~&JyL&A)%MBzH=$}*mi~?$UGY2L z1*=juYOH;`tmlt@_BX%$$zQ&H{qbXcKBkN6%ILPPw$&JCbNL4t3rdK0(N0)}Sm7=d z(aa25$2h>}8rO9`AMDemys9-j!i)d~kcb8+kN`2yD1oeKP6i<`6P%~1wH7p(RV}WT z@TwKH?OQ#RsS*^B`$U_F{X1?oRx5I9g)kJ2ERNo-G{r2{2-oez(;eEO#jbS0zL&Uz zBju6NfbcZb#*rGy!|YFPHF+pG2sU^nM6V?3FqBMbx(B3eJIGcNhpp6?3}=X>kXeQ3E|e0|p7R zhTONpAl(ec<}`>v5?}yC72GYsA_5*3$VkD+a)G0q8;8aUsLC1}QB(n$RXMs<$ePTQ zTdAh`;H{C#>A)I<4{Dv=d^2pAZJDh>dnOYs7>W%qIH~ z{%P6cm2HX-h>_JRPDo%n*r?(LKcI+t26x*!9C8qXU@e>$0rPM#7^x&sy_6c~U0Kk3 zjh=M2W6&ov2u1YFZkZ}#zuh@d(%2+7gH)8Mx!MVFXw$(6(9Mb{M^_($&}MPoeLqB_ zBa94`8BxeRwcE|yh;bWHaG{T6gDw{oIGr>($HweZs#29q5wO!iG>LAjv}I+*^58_v+=W!4i7JG@A~=E3wn3SK>-E?Z~`WPU;#?aPeQ$r!Od{q@EbMPj2pE-=fN=lI}V?$+Z` zuuZkWz|WvzP@ zoqKaO0;I>mQOuqw$Y7Ejjxm{GT{9n*mWts|QneGEU(0&jhpexL6#cdmx8rwGa4=k|FeXv(9!=mhlwP4%>h2w;Fhd9CvG5fgxQevBx zP|Prg-3u?e&Xxz)ZE54s!XrGG2H!JZ2*Yj@qZuU`6no8;g+-7dxVzDixurUD(?~)v zuN)v+b8jbaGvH3swy9sm$y!5z>|-cUtS}F4IvsC@L7)!wr%L^zQ#JJZTK_+ur_UScg{DH zDti{rrB%9&IJmRAz?owRMkfZ!rs7f!7+;jT{r<21{kP9Q{;6I(zsW_<*Suf18V(kU;Izk_!AWSeQ=TRoy4ws!JFVHsT5pRMg5 zFFYPu;wafLmB>PsLj{y^7ZHF4SP@HFT4k0&M=7Sn#d3={5MDxQ*Z_QjHEcVFB^(>< zfC9K+jDTm8v_enZ~G=|B{CozDozV0Kihvi6xmEMrEl2PU?HWc3Hs~h9C}ZSRjLH`!FF$o`ZwSsWNvp4&jjv|W{KFT+_?@Cv zsWP+YxGoRB_{pC?|MZ71zxedw{z3D#>|(iLtJ;Q09KoUOg0R#W3VS% zM4LT^)xN}=E|M`(8(AKk66U~KjHS)cBvgJ!Nn=kATQ^kt#$FsytR zdX{=l!?v^#<^z&-eXu$JM03coZAhRU5CbCQNJAxEkeM|btI5O=5|SaHpdV|*z%bAp zBPB01jD$l5R2EEB+8dx^iS|aNpYTS*4pksZdb4-};g$vor7Gm^8IOt0tooAj$}hwi znt<&~1uW#1t;O(n23XKuA2e$8v3~li?>+nF_g=mD_~G%zvOTuLm0n(`&vX4E z=WhrE4ZGpt<{eBOd_@G>2ed$&UGf@|V1_E7f$xD{Hp*<^3cpy*fo<&iw>R=&!rVX% zz?yp)J&FnvETJ;D+QU7R1E{f8UnE3KJ%`Z<7Y*iB9XT+rs6-qXVK$jfg7$pLFbtp! z!2pNCXi37!QU?pwxm;1eFt*8Pmf}8B6Kn?( z%BruQwZkwT6v*?+k&xkdh;1NC2|<~qZMee^Q6G42#6w3fJ2>{kds+4Tdj0g8o6BmP zye9J#wcX>P+2L68>FP6SyD-aWf9GQO_H_Q2ya#<*DLBsO^H2WlKR*88`{z$ST_5jn zYrQ-!)#avRvO@v_n1I{aZ~vF}^nW|P{L9M#g;eT%kJAK(F`#9nMRLd(@6J}rtxpGY z(n`zob)}B8b9Q@TlwYpb>D`(SM@&!L++xe6j<=lu`R(-06HiBVp>=QC17&pCXz7#J zWo0UFM+Hb&!Z(A}$R$VA!@wt(Eb!$1&P^?AS?&X6ZX;Ubh7niyiGIRJSYQ$QhSqU3 zNEkvISf-H(GXor0wa>vCoQ@VpTPZf1?y&Xb+Og1KwC4LeW=edsSwQqC?X&(+79iST zKAcJkn@dKeiS)#q(w#tw*if7KL2RYbS|ze-t$eJlsl7iE0Nwjn39PS9Tfaq_@$Uq% z>P;qe?g8zuUVZY>Prvix*)Lvx{QUZGkK-y!V^vpwNnCXONb|ek6KukCM9ee*7mkl> zKEgh19>|5t;skYIAOe1X8uC@?Qfz^HpaD(Da)$sE_Ehbi9`bO=B+&+75;7&*s}__s zGBx@YO49onnd!7)Y+#{sTdh`&#VvfgX>n`qNN_BRg>f6nNyngtlLk+Xv0iL$RYz8t z$O?-F3t*-#=!hwo zZVHmxh%tD-KxlWfZA7u=RtI^b$XtfGNwgFMKeppHEYDS{^*s8sRqu-Lv#zf&9T10X zHy1idh~{6vMZbz%U(*f#o%pq9S!U%n)?fYLM_>HacOE|a<@xi^ZMjx;WR7h_vn?gy ziL<38a+2ny^1Ew2-vAbBAp~qI=BlS3It^pX$EBYX7T~VNZ9F`gIP~yryT01^w9S@> zcMoy0=^HnSw6j4=&2!ptgFTs=H%9CVM9VXo#sxV>FGARH6AOJ~3 zK~$DbuXa4v04>T;Iabv?N0#j2ipBZ#Q1V(A+a^Q}mTfDBIAu-E;|2!Uz&6k~c)$g7 zjE+h}Y%tYUVC{DW05qwmTQ3WsnMZ^GFs)403nUFtr=uBB&OL%T^~U8-f?|-ga6=eb zqz!NkW9;ELr7RH27GB0w4-Zr}tBPLb%7;GY(yeMApnlD}zdaaL_0=)_A4q1!?_jpt zX;fv^Hn!_>|BIjg#TTFb^!)Joy1oY194ohhC`GJ?L~eRqu`E~y!tHjl$$fI|w#TZXs=5F)8Usp@PEV5r)@G?Px1)kn zt)*E?wIiq+qbvn)HBg3h>TdF>)ey+cl)0Z6H`DrZ+df|p?;JSi^+oUftW)yIiI?a0 z`n36pX2$&`V9&U)uQC*0qp|+J_w2V(mLta(pFRKdFaG@DXFq><_B=1=qYqd5(F~To z)*bjt4mog|Y#yi=%dw9}OCgmG4B(n*Yj))!%zN=7o@h^PeaMzMzvDjH@qL%?(NEGM z-d1Z-=gi9%A39y@!xA6F;dIcTrQ68STDrBgdgJ`=G-<4lsJ=%H8%=L~=e`e| z;I3tAolmB1$$4spEI2D^u!xDWh#i>%ZQs;ED`lXH$SOBgmXv)AN!a7yb9dsXigIL* z+AdTPoQ@y1`6=0qUONe0#z7q;o6$h}?B!TXncK2eHfzo1n3T0~WY|$CWRYg0dr>*k z=qNhy3tx)Is?NTeVb}~v!y($X)#!ynqMqODj9fOM;;t<( zJAGgxoHj=}P%xP$i#cjOYT0U8KB* zuPN29ZUJwbS^vJ%DJg4Qua}Sh>Th3s_itYQ^5gp#U-Wf3MwY4p;lzd$@EVX{fmt>? zu%-<(V>^(|EZ7cQ9`f94B-B9GyWb49wpKYfe{-_S7^(7p{MLN>Cr6z}t?BPL4^iG3 z!w*o7^RFI{fB3|Xfz#x}eXH&BtF-Z3#_3RiW{wA0PxA-exok_wJ+KaVXjhz=p&f7s zOb7UDJ}g?ZC~E-(o9$V8m;g4Esgec=n25&y4t&Aa3|aLa-IEDj4{kCGry*C_#cJCl2rSVA0kfB84hGeyoL@E<=(ra{Uft$)h14iW{7?Jh7oOo z8B!=$yi0opi1y^rEuAZw5uQMpgKcko(;JlqO2{?MAzbNERfSPwKuqPHxgX|I2@Y#D zt{h3A9q!tElVp%qc=`L zMwwXzU@+e;fYbnrGyp*#%T~?dGbxqlFdE#-H3Von*;60qN8WFHaext+i?>G!Jj`=! zf>-!BFI)=BTBR*Z$fLL0LkDcO8k)X&!}BPFPE^;XRDY=L;M2h#K3?J$=4MXY0n7eA zp7l31IQuVEweR4)Z=e10m!JIkpTGLWM<4&{+4K7cE?aZmItrkwMPSQs01nM&r-OSV zlWa0j1tU;69NO`2I$Y{}f1M`y33@Nv&B1a~-x!Y8WXV(5(frUjhncxUTc$eS8|`r7 z)}~o;Y=HwgE4TjG{bm~50Jk{BV2z_S&2`P}Fdm9B>mciKQKs$=*&kr#)4TK|XYg){ zZ+)W)zZ=ASX(2 zX9;1|qOx!7XXM=LBxqgNw-eS^r|-8VtY6a@|JUMI{Fc#bFS)GIb6nSlU;g5+UcLCm z`SG*scHftW$_r0fUL(_&%1z^`>##H*nwdH|#xef=QO2bHFISo^*${GouN|HK`4ZM?0mV5DU+SEWN1M^lL z-97G})_P`++WNS3Uq&qhx%kX6J4)la#@%6*8N$|@Z$n-hkL+`6(eFP#w}ZWDSKs~P z_ICo-SN$1Z;Wuk%Ima01hlij4$3MS*^y3%5eD>+YLuX;KH^|f8PLEL%ATAJ z^2}^uP%Xv>6?z$$ieBImG_R@n?b zVe4V=;YYw8C0pJ7YHbMbb;~9|Nn@7 z5m}_jBCDvXJ7YX2Gb8qP_tg(^a9Ju*YKl~|VKBVF41gsfJ>1v$Cb`eUGF1X`&`>MZ z6`F`dZscI@X!GC?Xnx2@$spIA9QX z(5j{>U!DwSs_Lcds$#81DGiI1>TUnnarSl!ud=(bVuribUXmh!iRh`NsTgcblWG^o zjL69SS;{-t>!(*&YpSMZfA}K(L%{WqT>Jm^L&?gF9KZY9zkB|hUp@c+`|o~y_q=b2 zd_|sJV$1+!R;DC4zyelK1TnIbVoYLPbX`=U#)n~D^PVTy>#XgHamD;Z8RPuQ{mahh zEU2k&Z)e=cdS1-bn(2dhK3FHxwV9O)D8lV&Fth#gH7=KU8k(t>2Ad}2cHcMgH!0^< zC-MXl%1N}HDnD6sLURUvh%A`1u2=8w$*3wcT@8o>&rzYIKs`lG1h(e+RepQ5cGuG> z=EerF&$ttl5mxi4giwUq3L5q!MH|Jzrdcy0L~s~)fYF;(QK>2gQ==(O&+8BYN~N(t zriN*VEWk{$Dkk&bc%(8iq#tc>0-+q`EJx0aw>ATol4D2SlKQj0!QJPa?tWZ_e*|>? zv#a;N-@rN|bq^QL5y^19zWe5PfBEU-?{3$hw)@AK8+->?Gj^SO$C0qw4yhEtLas1{ zInXdR&{M2r;r;|_W$u1L25^KR1FnZh{fJAvTWX;f#xVQv_)3zpouTt$IRP}Gi6n(`O-BgQk0nt7qPy&x|pjh zE-->IO~n@IB3QbxkR`f^i_R3`%fG-E5YRwZ(4hu_RwS*CPkOs@P-K_2l{lDc-YTp` z!Eh^Im#DPLY%7|GsF?^&n)~!u#Tvt!Qv`0QTA#M@-94VGwApHSY&@&}si|3^RAO1M zy_>v+eyyyge7E-3*V}_zb8|CyJ1#6cz>DJnJ?_B+S^uxV3!=zketiGo?XUjR_Ra6! zfAjsP+mp_DUhp4YH~oHI1!v-TfCHF701FWzs(@3Q%1jjI7R#dJ7M{ig%omA|dkIjZ z?mvkI`E|6fD9pS|^JRI}AfS{il%+|z6(mRsi?%pk+3A9DO+C^7!z1rEQ^(_L%&X*% z+f#k}JU&kSYT*~F8hAO0duwgB*M!#GB_}ypsQX@s@!{FlR$rgWhms-=R;GxR!&yC* z(nEFDk{Qa6)4$#lvu0Mkf;;n8ELMm})5A##5d{<`zyM#2&gzXy=<&%Js}wGpVqHlE zL>=C>fJ|)*paF%Z0p>4C8&tw12^PEdX(0eXMHQ*aOqHU!%p>#FR8%Ck$VT=Vs;c`K zf5^$0*|B6Dq~Sjs^YHICu;h?3yvRi7HtxUw-Cw?Y`|IoTPy6lt*snA8kx^A+lsQ(1 zDH@=J85p2J6+tWxD456{LkL2Fn#VZ-J=}E;bG+n*8N3~exSO!mi$=)Roms5Nn0e$g zW>#UwG{GDUAQB3g9UL#B;0DA$Mbn5P0!mnG4Ck1-8uA&!1h_OheCfza>}pc+RC>~e zE+S%G)T*RRNE7O^=&E{z)ntBd#Sl4nQA6-3f<7c0w0gO*QB=hqRzOinVPjmb@Vno}^|KqD! zmDi!o?QE7c?gMre?QOo}{^i!z=I-9y{4<{QPw3SjJ{~{k!GC6Da-ZY-U;o|q`+s=; z?)&-i!+DIg>K9-8dE!>wfiqt67<*ineroChH_H;BTJt~s z6PA~)X(!#&=1<$h{~mb2`SILamohb}Rk#?|ZoTn&@M*IZShXstz@_ys*T|=7-`kr- zY^{2d*RN+?RL$RSnRkWy<6|uJwC-1LpHsKGi|StWe=s)GRlHBGH` z#4XfBa!TF{9y9dVuvA;~h%mE=_(QDoc$xkGro%d>Rq>FC&JXW@|NZa(@^<}UyS}|Y zU-#R%kDSSE8&y!CDM+}3I07$Wj%HAWH>jcsDDVa`)UhQwBGDYZLjgJ3m5yFD6K^I( z(IP2gWM$@yh?dFS*(;m)0yIded;a3C3i*+jwgFe$$Itb8E+L<;Sn?e{>}N;huG5 z$jprQKmPRoSHF7t``>Lpz13}e8PS`!C%wPl4mlkG1`S+X2(hM@lW7Svv~!Lum3H#J zs;bPuya#9X6QR=9g&3tNwu`rnr~x~BTrqT-h5c{6z4GC{o>s0+yo*XnT9uql7GP28 zvaf;}5rQGyCsp-~Wa4%l}v5?T7Fxs_xs<@Bi^XJw1JU zzrMX+KW(4xfoM|Z*a8d$;06;wA%q*;VSpXeO3;>bT5hMj47qi9Ah3RFSDWwQAON$9D)6n*vDskTp|Nmn1Kc~Ac+_dpo~2%qpC?h z4|{&uj%ZRWO60gPt|HRgNh;mCY(govrd>g@RKy{|LLMd1q7m{p*i^_jk|Vem6dSiu>IYO}M?^KY|8401mjIH9bz+(?w60 zMwKF2xvtB@E5w%T$y9aDGR5Op-8=GH6zXfxRr%P>Bc$IuCN7u+{g`DFv5=XPlpl|SUcqD2*N*) zGd~O@2K{_F_6Bb_(nAfJS!J%Es2^w$IAdn9avq|TWMQ8e6ADCPpD18VxTET29UcQn zs9^*ma1gs~$kY*zIUyfYm!_8<+L&cBa=x$lsO{93N3%1^tD1}XvZ8g?)De&-U8zE8 zYC(ZYL6k~B&7?I-?nnX&CyJ<|STjI7%LP)UqADuN;Ed#~ghRBu?2-3Pgm9^)DQ7<4 zQ-x6NOZ#H24fW|Gu8j{3Vs)Qli)3*QY+sEsi z5vV!&gc`tW;Btgus1{2V0{CRz;TQL|fYmRppCvv`M#VN?|MJA^eR*hpQJ!*tp6hG# zuQF~#Kn-&CoW!~0QfOUqsj=v#*{WPT->lrPIv`<~x_!I(SEYTn^Tn(+D|HEO^T)eA zc763VN~H@{&YF_V+9f`0`QdH*#Un)h+y!29BaGMukhS{bDdbvd6JyFrvYo}6G*K579Uz$k1)x9{-Lz^FO*o`dV6JE?>8UY_ zQKb=afbM@du>Ocm{v#K}zhues|0Ua1k&zi0Pfzc@`R!kQ`ta@T`gYr%CwI0g7KD0B zze5C85XXIkJ;FLFF$*i8M?Z7J;ngjNHF$>{d?L}0UCfRGHt-0QBMO9=s8uCnikhNQ zP)sK097#QLt#Tq0Gm(iAAQ6du9LPOHkO2~|7z2k=cwLbr20!)F$!;oF!Fjb~YUH?W z?+Z`nm(%h}?PBg~PHpg(f>y(V0MG_{heP!UPddV-1Pm2ZLLy(-i{s<)g)d1HKvC3C z&?D@P6xUN-m7Lj71ot&)eP4+#XHa_pNm|o8Hu&9LGpJSVHtNC`H(qV~X5P%ax$o}&vTE7S zIO`$6Igrkbx$oPzzxta`zy6y~-+cGO5AU|yePkr7lLD;388~#5x2)HT_LIr+rQB+g z($frnN~86Me+aZ%=)(utfN~oDNj&A_7r}2`UC)h6)^`BNZTA z(Fz$DGUB@AGr}Ge#+k%*&X2`ge|Xc*Uz?vy&D9i8R1w_*fij|-x*jcdNAsY9IP}e# zA`NQ6bdWOy1RB|1*6*081L-Wxfh45i$eC1w6;&8gC2EKu++`oy%^uI8f@KkFXoJXR z7VqyC)HjRz8XxYw?eehr3`DKug}}#?k5ZBdC!Pl z#@6%+e6zQ;x3QbI*37K^{6ot7J{aJ-l&A#}8 z*TBd7{{Gq5SJXXI3=1Zq4a1DB7BIEMLTTi~6%G(jHEG*XHqE=BrHFg_wYiARwBfb*FmKm0A8a1;bQ&ilC zJl!CNS(Y!th5H>8L?ZGjbFrvTurS+p+8E6Q>_*oky?5E8)HQ3J~((4cqB z9dZVNEpYM!LzhT+(<-fIh!S#LM4h|~QAx&bz1NqI_UQa_vmA64RlGTAGIO9cb;B^3 zqkVajS7*$w*T^ktSv%v?Zm+%n>3OiadUZ$6u|J!fSHIon!<@6Vm~&3|F{b;Ra~>z* zv1Glh;izrw-~aXBKL6(LpTGO@_UU87uxl-@mRX||=&rqm0FJ4*HhRtI&HS-r-)h^TA*Y60)(E**&D;Lrt^G-(Bn7F5 zKyPLy+Q`UNrNa+pC8Oq{qIgO3 z6*1TKa^7!yTtD<>fvkGCZaustOf4d1WND^F#4)6f3-RYA>koCL|E(+je=xlK--ccl zKa+zQl=*1aQB`k*MqntX&z-u4}oEU;S^6NTW(L0V1D^YYm zdIOJ;HMqh)gIQ*-W@>_f%E9s?3sA%iGP6*{5flXzRhWSpK%w#_UbYGaL?8nDL;{Op z7G{Eprl@=Y&bC4dT9fBpxHkRpUfR3ryPRZw{h<8;NoZD7=+WFI#X1(eBWDhWHnpZz zsfmadp+{rS(vM~*6%$q+!GVo}0Rc>)XY>w9q~LM_I$)3$5;#^bC6Yv+q1Y*-AYCl@ zdSL|iLX6sPIe`v6=J4UI`Jov68MY`QYQFp7hmZgHS5LqHww~V0c7Kde(#Q^6 zF1|`U>{yyCCpY5$Jm-e(9{b?QQCXr~ADSrdZ=VRRudTgag10Gx5ETQ9Q}m?E!vchL zEu@{aFUpaAF_W}2a=C*wrs~?@m>-^&FCNuS&>i~}N{x_YdU9F-03ZNKL_t&`P?Oif zo~fg7V?j|AiQHriURBr2c>Z8fvUu60vhLr!vmZa{Ys%Sz0W`Lvg2~8)=!_CL0OqV3 z0&=EVV~%WBIwJ1l z(}TY(qsZKqEb}V+%-2(e=+a7OwEOkR z`}FoeSQt#j)XYq3Fg4O7WQ=hv-4Ss-630{VuUoSG-vC{a|3nVv?e^i@-~Re~|2X4$ z?$^vI2zun6O4fC%R5duTo*@YlurLcESUVIjhc&czWQM^Snxh*^Ucf9@5mOU0YYA90 z0gB;WktKqNM4?!>9jzfIVgQDiIMU0GbB{!PCIt5#2m6r(3!iRq1qw}ZUU9@|TSv(P z?Qws8zkiSu*A)+!)!NEQASfM3_@T!qG%8)qnN-;olcc!D*eT)5h0@BJ3P`B9iir$G zsub0L0+h|+DiC1eD6cj>ehXEQ&*{w8ixu1pX3NnKTlHbj8C6p*XFDzTfBY%lZ+#;! zO%{bf1NrS!KJWGQSx(EiZ~kU2b-Y?3hLD0q?TlvK@X!wRtt+b-oG1|eEbq}7I7#QJ88lOTfJ@*E^5`!R@Z4~Eta{<)%ZO0mE;KX z#=e&qMD6h_w3@fg)S4zEr3xeH!qr$+(5x~W(iUi^h&%vi8S(5voX*?|O<5mfu9lb| zpL}ZnKfekTtwlZ;r|6OJ3}l5QYE;geHxU4qaTirz9RqgI-wMT8cQgsF%*=g+G5<1qYL;_yE! z$nt+1+zzs`GAn-g?jPR2`)=Fc-^Zs>1Cl6I0W8%-%StQ`G_(ckFVP7;kQ*Y<8z?Wr z$wOeZI9dlk_o144TN?lsWr?{d4(P^|$EZv;LKTo$y3F|jOIJ2vK+@18$}tvEY$aY$z=q;izWy^5NcBiT%7<=zp3D1n-a zYB8lLq*Gj6^kw2Wsw8hBi7X_Af+U3k!0b@Ezlgqz$F7D6sK4|<5%9k0RTtOgENf%z z+C}brZCYK*SNr8Jv_C<>f@H-QT2K=|Ej+!R^KJ!XRTVN}#WHH2b2KPAta*YpgM}LT z(nVF9%A#Xy?Rt-M%ogqC!Hk#@EoRI%%}uA8>zL!?+qXac^{=kK|0X`Y-`_vo#ys*d z8sMh$R!dhGOd=*(;Z0T0o5rZ8PwXjLkp_L{auacX0L8P;{0ICn^VjQ5!x)j!G)^5pIIgC zq=zNGs*a4<-1XA?pZpU2L2jSw>8(CnyEI+T`F8l_)s&Uok-?XD2}A^0WRmmqceN^r z*k#;9D{_t)Rd+JTS*jp%Zct&FU(QF*<6{QkS&-1oO*K9Bozd9WA}#yYAE z4jK*tX{hF9ct(u<`8)iwTmK!NiKacNEFQ+paDSS6cQ0pB_l8s zW{5x~4k^Ro>CeQN*y5!|wFnVZVGrDQG=(YliEZMfaA5J5T~B_($J$n)J6ax6;THFCjn5vH9*7avYu%6!V*$I zK_*6`uQ+`Qm`(4+{ zL4(v@d7t^?m{(devBVdOHxAK6gQbYnHd}8qr^FrOX<6>qIc8huoU`?am@|5h1H6bC zA~K@(x&Qdv-+cJnUvEGDh)+-V`96iqceI^6JvYOf_w)%Su&Ug+<=)5bQ{( zAc3ck$iJ4?eZG2SWV92^7HTeEb=H)plo4}d-BLxho7i%C=<}KLcHOqqVWx;H2|Eu(9~R0VI{4R!a1tco2RM}BC}|q z3uwnl%n^*Lt+$JLJM7Jn2JiA>l_W?cF$N}KN1H%ER9J_r$VoYPD3%BcMFT{uM4B3b znKdC)p>UGV6Xx=8QcgaVoz9&1alPBCRWIF&X}iAtgx12)hA~7gP4|i_SxhrE>4ii} zZniy(?{ki5En?1?5iuit&an>>$%?Fae){z#&&l`CtqT80Fdg&uI8>u zPI-IHHP}1BqOvA3>)h3a#TT>0e&dHbW81#?^A&E=6qdxuWq0xYEk6CYEw6pq*Z7E# zJe`R4Ko6W5ldVL%iUC6SsHL#>jUVI<8ZN*>h@vtKkjuM`ROV4r&?F}YMuA@sVG)NR?R}9EQ_pAA!&>uLgGH=m=S6VBSnac zs(HMGk3uFBK_O)~0;H9~mLMyqpftr)N@(gegYtyLp3|DTb?5>v6mQN+*?m(#ow~}> zDfXh7Ls+*`k#h%AVNFybYP-WHm>7j9J@rFZR3vcdztR~gVn~r@S|*Wfkzr|b&M`)7 z|AZ18`iA2?{Fis}{%bd^IsmMS%zfN{`u?}K+Yk5s$62>P=1gI>M=&5eS^@%_V8T~O z0uyovukc4auI5V9S|26zXhjDI6}VyP1~E}pfvJ%y>Z&ktsOH?r$~eTK%tQocVotR7 zvSdX9iJYi>`I8SAJ__3a3o`-YzN0w?z=@f-Z3u%0&MTxqU>43B><9&4}qY2^DUiSj$QkdyGiUu=Oh%?9djw`X7O(=QP-A~JHuj2YQ;#*`rtj=8`6 z{kPA5`*(c)!0pDlubmp$f&nD30g}~zvB(qgaYo=1@!eLJiG?^RP7UW*e*U7xJ^rlC zql{2avOUSR^ZnbH$XY#2ffcvs_iumv z?bx3pwus%`vxa%`9){usSl%H6bwvsK8>oOA840j)MM9yt&AAbF7zW*M#k1}`6a6%iaU?q2<5c*~F zH#&bDTAY>h_VUu~U0^7o}q_B>_oC!5r zRwcBNnkNL$O=RS40*XaxQYlr)=M7yUR`VrGvSKHNB-VxQ$ucpDfGUQ{0z-LZ(wJ+7rb>!L zm1Wfdy|>n0u!7H$m&0&+(1rgJy}SQw)eJbY8KUyThi{*sej0fVj$+LF-d~9jnuUa| zbb$!efCbi(01FZ553nhs6t#-19o5hrwxD%bJG37vYTjI+OKU1hr0UTGlMx&V*JCN6 z9>EWVtQSGUbw8N6m%-N^W1vZPE=Rl+)%K}N*`sWr{?D9zJK>T-fs5QN)z69eX~-utVrS95!dcd)?d$g z>NDn?y&VWvj4?EI#&~}JcK^qJ)cdFXdY{)VM=8rpmd3GjB~;{0!EdtNON34E0Njaj zI7R_8oF2@ZJJ43M*BuM`7nfD}u--G}r|;+UyZgwoy@z+4FSM^q8te>s6-Qsu9+gUa zFrF$_NyoYhpMN{CsKMWc2tres+=Csa#nuk1Tqh|Cz3LtzxD+N&zMhSn5r z%^p^fr<|6xF!IisHJLN>JW^*Qt3m{XFv(J=2_z`!4=|7Gp0OVh3?r&(O`(>OQzWHg ziW}i(#5g*zMOB2H!)gQX!^Sz5Bth|F>S zpdpx^Z=ZO->Yu*RR}Wb`jEWb#i6B)RCY3LK2GKh5@C~Y*g&P+&QPOt!A5V_#- zm9%EeQHtvo|My$`$3MrPIjmvscsP+_;s%J&RL$Kp>ZLRyCXiiY&LpMCBiDgMB{K1J zd%>;dXQ2IH30Ytw3lX?)*b}gqg= zT&ZkiNU2c7IT3TOHRc$<5m_u1EwMZ(C5qAF^)z2E^M2+{TD^%BYBT4E@%(4s+RLZ8 zU3tCkuQ?~r9p-XU>sBL>6Y?CQ#iFUadv9{#^H!JRMG-t-FeXkrWHntB6Dly1eo|~Q zUgVqK_J=Rq^|9Pb4D}2-llOvirBZ<9&ZHZNGCgbn0wA$%_ z>vYggYbX^nKfT)OvYs&_`i@orGe-&pK}e0=>NS<6yX%=BzCf>>KZZrcKADHBz2=^h zaa3;+RYmAQwT_$=6=;p?oEasjeiwN+#~;C^GTj-X!s%K{C#NWoB7m4j1;tDZ6fG?} zBx95WOqtZGS)j79%z77XhzX6l^K#G9%wy$ls-D|xK7GuOeyK(0}TuCfBtj)FaI1e@!?B+xJOL< z7yqgM_kUl^nrPD__Y6rAoO1@iVvwRPISySGUm62WSwWju4}x5hZ}Z74N>p`3?3fKAa&9B6Z-;WN0dkM@CTy z4I-1x=tnZs#05tnNRZn$U-pvprPVfgUbHzHl-Ep%H+xVBID=OpcRo0jdVlKg&wK1M zW~EC)3t|wNzP8wg#Fep+G25KSMrg+LXsRXM%FAGE zb2+ORsAb*kX?}5ZVgn0dz{hV>k#8SboJ}45!S&S4Wc~W=4>NbPdp~`l<9ZQiOvIl7 zXZlweXUJ;H$z7F%E=Q*t(3O+w=R76VbAnf?D+W^U%*}ESxmw1h-%HHz)Ecz|L=~2HVA}Y9bVLK%X zoP=g%SR6~_*8Y5HSU>&wYv8nhCj*N()T^re@rOUz_NU-p6}fLY0u~X(!sGNY_Zfl{ zAOjHqF%%FqxgGaMU|lg1|LQZ$!9wnG6{RE*Ht!&@-Dpo}m zgCU2VJ&}cd!>pUu9)U42C$0nS0NNbxc4ADt4vdK+_QV!w4KqQ-K2ZrX?1~W>#25FF z75kj6fTc@Ht6G}7I!r`xlvHLo)PthgY+VR}y5w$$(aTPDRzXVbVy<)*7c`gUZVj6QE$b z#^Wd9J>ULEr~b>%7ne;$+%omf>H$%&n$!U*d<8d*E3Utf{DAXs2~Mm9-aFbM@foGD zRd)E-=eUGD7KV>e{?O;xZ6bdSgbYf3V*7do1 zpEA|X>gU*X?xVD-m~-dp&DgJ*l}!Mh%cnDa(KCOP8 zHgm8Z|1FR#|4r|Mb^FYfRr`4T?pObM-yg^IF)y$C>z+o=sGaE63^nU^(4SDk7X)x# zk%TJD(c00OhJX66@Grkd4PfGnug~AS(?9s`GB5f6{L7dB>HO6{{4eWwzM9?J42Za^ zR|K=jngIr8Vw*tSoSzZ5*>rrfBrezEl7>1O-FY-`V+LLa5=bEO_IYMu4>-^|zHm&z zHgPf>EqLPAdpEPg0%{@>2L`1neU|m!p{6laAe5Zd0BP4kH&Y<#1R7LLlmgO4^o9g0 zffUS+vlVIE*w=Ov0qh{L9w5}h*hC*t3EB91fdOY@H(-Gq#Y;#i4BVgUY17krUMJU6 zp)2=k9&b;eFemYkwKbSz#>Aw#c%JE$z)i zZP(hAncC0Q-bpSagS1PASg3hgQWN+gA8klVV?Hct{ycrCEl= z5Zw7_{i^frovT?Ca*yTYA{{46^9t5W#>>^tXse1VOA=G`lrygTYvyF7D=C!>MrckQ zQ}l%P;PxSQ+g}EjNU2d68!)se3DSxs6|g zkjSWv-h5h^xr=%`!5V2<%$f=nYgq+@Sef;rP}EN+w3Q?$CCg!qQQL)><9hMS)gJEj z;jN!n-3yN|BCzvWAy5%9U5ai36a19w&7(mQRSLKwkSWGvWdK-K9@gStm);Mf!>{*3 z|JxUZ{F!8j(1W^#hocQsIgZpwc5e9I%B6<6F7DmDaQ=kjxgcZ7> z1@6jMYZwl9X|8j|E{am$#8OvxJtIx#4BB8Pit`QS@snIBi=!E-l{_lt0k!iTWQo_S zb%PzK5V439O82T_U6n_d5Y3I%bk&@jh*FY!;br1=);{ds3$VqKy*|#o%iMw-J~y#z zk53={>2rO0-oAaQk*5b(z+H}7bVkWVv!g%IR=s|%ZLfY0+_9@j zv3CWfF-~u+oxE4a@0Z^J*W_syHKts@yFkM3v|Q}o?H4`ODeya$^XIiV1#+x}uhx5CjTB zuySVEV7>NL%e)*ZGqYyM*nTwHgwEQ_DTrg?8)iS7NRP>N$XI__ zcmKQbVIB42HyZNXzyJ1MU!Q*5AD{Lg#`axZKUbaW^ntQ~Sz}~AlC5fkzJagU622eU z5SZSW$f6)|YVv07-+c3+uRs3DV|?0h{txi>E55t)`FQ#Eay66Vh~R?I{d_JJx~c4Q$F*Bwt+xM1Xs(XuBZahYg_B&v>Q0}9y35zzw!Q&5f) ztQ}pTuQ#>vX4bC+eoOx;b+hR2tA_4dne zs*9*PBxx#;gT9J_0%#zR1vnr_b?VJwDF$@J1Q)Dw{IrNF)-HLTfBJ2i+Q0V|MWio# zPzq9MZB=f3of3t8)7HuxDrDO@A$L75S9McsSUMC6DOEMiIq6z-X~g0#%*nV;J2#zz zgbX5f!-BahE-|Arj|ZulQn0avwg zsUMLQac>l=N$ZQ4YGz-0i4;mtOMh565*h3Hl&HSmWeH4c+h&DPi=;|z*ANk=DIiXQ zOnRSl2dR=3m!wYq%5jHto7<&Wvs8gGD~%IJ$j3&iP@_;qZ<1m)ZJ#qTDMJuBt2rXW z721e78buUIH6bAsQiLL@GG?e6E377uDpi`u0P71}eU|*FX4it_vym+w*JtnmkkQ;itAjw#(D!ahk95 zc{{Z~c=??V+nwbRH>i?hSpk6xCT`Q`x`Tx>1knUy$igJ{#2!H5t}f9s3-{24{BGoT#n=HQ`#AbNk(UzF#d)`eEP{?MT%F6J z-Vh=MmWW$=qb@9mK$0+lDqs*pP2>h^&;|wSU^5u%@Z&pdL2Td-OPS<)(trOKq9{KK zq<;SYOaV>X`*-zx!KbHsdE#B8C{-|sy$nj#V4C)WNh6S=+*->FxO2Y7`2N*aGgXFg zhMjE64MoPWCH9{^SmCL2M&Lrs_d4gLEe(%4E`=XreJvGgGb}32Ymt3|d-X59?wh`Skau@>zsTuc z`$<)dO_+8zcPW@ivjaz{yb(@IpacZkp#{o;OU5A++>Tmu%Qs~J1p#}jS+uppk%Iz> z@?=SwRun)XrJBq82imw`t;0wi!qg1S*9$C5C&wG3#zK$H&?%YH&~@EMXnF7 zCe6*y-N@Pjir+PR=Y`5UX(!94nx98E;;h>b!@thR70letot=HBGsqjsfQ)ij83s0zqJWU&%e3CWBB3TQZhe|7LU3zbEUWClQ) zgCbc#v#3=X!fRlptBPoeRH1D_HOa|sX4RZASsO9}<)$jriitv~9>NUD zlugxysv?SFDrY5ynoQ|VkdlcMhLjeaLM@=kS=gU>4g7FvyRP4Suy^ltIl-D{ssNJ^ z6NZQ3M8Hd;;ROzPvl(ZiNZf9qkpS;E$J_h@N|L zNtM7{%+3p&=)2y&==QG37}}+Mb+7B$*9SYT)|-i`skxhUsG_ZfRP8b1 z`FXiqF?N-xs7$nu=He%nnP%D=O+6$4Gm#|`sjhPp$lSJ>5|NcsB_X!$HJH{q zpsGxXEydVW^fG2dUH1fM!w%Jm*&4kLC{snjKqE-a%BqISNMns7p=!|MdTka?tg2xg^F>*omcUv@V9dWGd*w=49&vAg|tA0!x+*Zt+= z=Re!#%j6cVvR7P+O@PYC85jd@Xe%JdL;xb_4NJqJ{2m2eB4~anS%eEt66b#Em!6y( z0@ybQ_v^JDbegiY6iGERJAJ?Lhi`eR{KXyKEI5o-DcIxaKm`c`nb-o`z)VEoI&K{I zkub+d%pFLe9gOu`9UdFbXPobD)aKa$$M|DxkKj8lzksfa?DBB-FYgz!b+tR#eKR|$ ztF2x7o%IE6k!6t@uC&ErC-ts`ev1pZ`iGek>TOH2a2P4gCE0wI@Kvjz-D*@uu_iMQxxgYsb?hUbpLK4zk3${y&VCYq-=wOp2}Pst&y%mY zoLz#P=>>JvrKH1FtqMU~KA41Jf>kEX)LC0LvA)ttZtWXHS#5#JeBKBXV0qW(Oj%UZ zoQ`W@=}6a;>#FUxHr^#&I%bZ_4F$F1K_XQJu|kPam;r(bS7>F-P42;Urt&M2c|6!(1(aXMNZGQI_kYGV5Dy)JM0uenfQpeQFp9on$ zUj}cC^-OpFc~1Rx#P{D|V9CwXP>~T?FVEk=&4acP0O5w_$Utwf zhGyvP)_eoKbxF`siYhe4n>+jph8b~rt!{S;ngk zwm-Pm`K8VccMc@>Ko;t!a~2IT5rS*rX}|dx#?eSPK>|lhYa9jEzyYeltx9J-BNbdQ zK4WcYA7F1`cPP{4w78m%sR~(4PF)miUcF)IVrzI`x^3YPV zA`+5g+w=2F#g3ZenoPO_o&2EniF06GDx&5tIk1142Y_A-40-uH`dQ@t%9$qSO@WlV zhK#(FUd-B^xr<`E&g~`om%@e&o6j?zD5-Z}i(0pH*@I(^G6zIOO%J~#%F23EZGy~w z7ga`q!BT5oM92hSYFPvVf=VL^6EsoLjG{6|9vGrZ?Atz5SW?t1jTn{1OjgWb6e^NH z!6Rf3WKBZHEQ+Qr)(!r}^L5Y3%DHOZo=pw|mOM)B5CT?V+`M=qh^|D)vneYeFSjv$rnG zsiG(zg_^2bV+=*qF(YpQV5o^ynbH(?IQk%Un4GI__gka#NGys7S}5hemAm;pJ;Pz40;@9;nT*Z93ZjQ{jw$Pi4)ifbT*mE?{BS{GIU;--C3NM4?N?)>3NkZ3x$$#33ZUB#{35-fo( zi^PT+B}SCEp(sI)VpF=2lm*dH&o{v>D;UX&gE*vR#o8`c*)Ek+w1DzfePw&!q-n&g zhIE*rNWZgw79n{`4&=~-F;^WW-{mw*0GUd~(X7V3<8s?{MUXqW|z5rWM z%HE`(1!t7({Ts&vu!!6%t%-TH+g?Lj6ZJZZDN$l-()Y_%40@6hLK7^i5*j4y*mfNw z%o0OknGqDyc;neBnOO`}zjy6$=8QAL9nR=+$C};-+6~MslXak@D zfoND8?(cAR+&j9WIb@=rak{s@xT|YXPgZI5#=q5gG2~|Fh6Q5f9fC&Y*)MvtgD<>W}raz+NabNF-TFG!7Zu)kiPU#dNb{Q~cB&c~fEBPOL``LYYm?$jjoUTOhcK@;nCTEta~ z(mM3OISoaVvZyp9rf>!%s!A74!O?iDV#!d|QpsfGP?Zvms-h*qvdOHnOp6*pt+IrV zA~R=-fDzaRF7pNi-?H`?Zb;DprfN*t#&y)Fq!h1-CZM4u$`Oeml2~|)yA1$)u^)87 ztixU`5Hh0Rgm{rMcM(?BlqurcJ8W^Na7SU}E?Kc}Lc%r8<`|eS0@Et)kI=QSSnSv* zy@~bOvI@9{P>d-~zFo?UbP=OYp&rDv#B>oiOVgu!f#AMxJ2!|DF>*!jzO9siA7 z4Ut*o^Yh1-$4@gZbsCV6inH70MIuZpuRGKLpzE#bCVr}QD8&f0!+CHxx(N#0;0+|c zd5?ee5AfgpSNLCl5C6yiD;Gce>Hg!VE4SFsa_6lI%Gfn~pM|vZLQtfr-j}m!RdSm8 z@^)UID`bojkU_fRu3=1wLL71%BgjK|H{c31U;?j@FHw1%y3r=Oqm@}wUaC$#X)$04 z@0y~#6i$oQA~>Or{JL{Ooyb8E3dGe^OqJSIS`zLK6~-iR@Z=8?e;pti7R-f(m^XWV zB(?zyuOO|>B(xP9eRZpy2XqlbDzP9rL#m= z0V!~x+wxH3rK+@P6;Mh$rGz9QNhn0r)z(%S3`7L8GNXz!l9ZVlmwg>$e;V=}vQZbX zkdHHnmuHN^-B+NQzVGpk#%tj<;+1-jXn_;ZVTQ*)uE*znFEqvSH16JG6|oh%2;@=% zZ6}sWGi-~|wNF`HoTz;~(vbFxj@}@y6DYRR%G`^kP$=7aDkQ|*J9BTka9BlQ&b$)c z%cES5w%kk`k6e9X4+Jq|z?Lh+ zy6&ZWWECp*jG2k|Cnyks{b&F%@F*b$1|UH$kYK9JNHK*_p_#)JMehZLuz0++T?NZY z`dh}#+>s&$DP~nL1tL6QNA+#ymC+rk(hQWuczWT-Cpj%x&!sJ|QQHd|{KH+H?AK;q4e%+l<4qE@OjKV-y2V7Ja5<> zyW*M{1?k{1wl*A*C=hr77MLF^S&S*E#S*<+(Hj$d9ef8Y9U{=C?;mnqoW@G7C$T0~ z_4!eH(>G_R-)di(RwyNsrY;EPEGh&7^60YXaV;xmkrW;qbs(pxKn-vEQMjsEnOE&6 zN|K5Yq@-HH#kLwr?}G4JjnJfkJ#)+Y(glT)P@@V6L4%$%hU&sm z;tSSOTwg_Yh?SZ&6K}*(Nb!?Zp%_t_36T+#udgy^?%}8k?tl>IGcvIav^P+dc`dZ0 z!$nfHOj0P2k+cK_o8iq@SQgA@Y_Hh<2&d1K1#WzZ?7PVqGl6AkzL*Tf>R2E>U_wZB zwMD3=qNvoG5}Wjb4CDz-fP#@dN>CWIsf%EuGAe@GR>fSTRuzX@gEWe&GR8;|s2`Q@ zvt&#{Y$S6^rc~)nx$Mjd6vpIb$378>%OOe#4xAJnTc)xy=bp1_H%JP!&)Vnk*q;bp)|h7`JPm z*H5DR&nK+E&|m-8WpsW6TSM^xSZ+_xKaTx%TrVT`p)(;`w=eiOvR2`~p&6<`0~F#= zz!a+JH$xBPR%{F{)S<*X+?%9S>2H0F|Mq@9y^PBRFPHeE@9SB)G@P8 zzze{ml^dI4o|(jSZQg{cF~v|b=Hu}D&U*(F!kU5Aj^~HHUZKeSDw^_s4Z1<35>_tU zwySK@I@C=><9ZQSZ3<~*1`<&Q$xH<)ESRt7f@4mxPKv-%2ZOv`GDJ@I6_9~(xuQbv zTb=J%DaCS@0lo-Jgek5McO}Jj;4Qz$5h2N#B zuD+Z^N!{TF@6wGZ))WC<2ni{p@ygr>XXYlddphOb*(!0E5y1jA0vd@(Pe{f#(vn8% zKKDos+MYgV%nec4Cia1C0{|MRpt2$dv~x_3VvdX^bW@@jH}+8mR8bQW_c_vCfdoN^!X z<`ihgd7dS%uA}T5%gKPjZBh&xNTj9@(!hiQHA*)Dm z%Bk1!B*@Iqlwe065n6Pj(#VmfN-w8w{r=6 z4r?8uqJ>%G^H|>A+r6P5y>ccAZw@eGQw&jN3biUQ^1AwhnUt%kCKcdM6|qOHeMSj& zQ9lspoiOyG8ZHz2Mr^4Hf!-TFea=UUeWA<3wUAm=6q&Y|KJvy6qj>=k=?vQ)V^H&%kbb`q~-L@hZDWeYHX?85U!L&Q2{Un>cpdoR39sM3 zd@gv$`Ha)K-}h3>#Z{2%JBpQ$4pWfQwFXU&;)%$^(gHW+(Xo2y?gbF4czD3F;=1E~ zM{EK?)u_o?%VqXu$??3!-do#nHoRRqcGe(QIj?@d)XQ_&>JQ8R&)T~+NtPtZd8%ga zeojPWW?i~xW;s~Q0t*rpKJbMU;s1Z)FCYYb;*MZ}z4Y{@sxl+uoa1h$eDJ85#tavn z1<=yc4=qyFmyGl@Q&aua#?GtaC{aErl5V7uyV2uFSv#FBR8WxvQ2-63Mog4jk+sZZ z9vH8wL1RS7POv6(d1&m3&X=bwMRC~svkR%nKA%c357|XYjGlDSz+?@fajhhfhPAK) z9PrsTmW(j3X)&yunQ%bIOxk*Mjl@udWJ>3e$hk{Skz#g`Ny?-WczA|Q7{CvoVHMYo zdP2VgcMwRR6f6g#qg~(wmuJkfC0|h9qpZ{*%<59@?1ecL@}S8UjhphC{eqFN-WCXb zgg5I*Z%$%*(!*si7)Kj)x7x@-Ct*@(2*@O8CIil}y5uo%baerlBXF%rKm1XhA%YC0 z^}dbt6o3-Q9(fFGBctb#j_^dL)P>-K3o;UWA`JJCe791rTQ7#yu{P*HYmeAQwTGL5 zLNV+Ed*W$957Z6_Ue$^TIRe!+CT+lICZH=iSyJ;`bji|+(^vunD2O4e0|v)HkfSuZ z7>l%&*cH_xgFUkl^>p02q&QbDi&+VqdGFbTQsq#N3CK|;&nsXUuvs&QOv$B)@pHfE zbT<54!1|{Sg@49_^#?4nLV3TxZujdp_G27zjNBtB7Qyyp<&HJEtbcf z&WQjjAM{%SMwE&vh0>i$5Vc_$=m%!krW>5NZ7{>j3GZL<>u(idKV0+ej@un?_v14s z&8nXZP78`pk3}qw+_t}XkLcI|C2oP8V8F+tt^x^MfesPph6+5dP)87B&&VC#;9iVg zW1L#KET<$tUo$G6Th_`5%Q6nI)basX8(58|V^473?q0m`oHoA#q`4KFIR=N!-}|Ld=HZ226MHiN|zb?m#_`?u`El;ny7;dAYn)B z1ARmrwiJsThxtMs#tHy*!Q1E&@miK9fYFPIy+e`xh?4SY$W5PEBnvHMDTqY%xQ*;1 z?&wQPx*0Rsvjj`1??Yqc&=DgewfDH*dMcUdDFwEU`+;M_{lGR5Ko5+0Rd-o*H&lc1 z@lo#`BLKk*!m;geLmDbj8}{XTH48+@{)980UoWu#O#A|fe6fcRRxSQn*Er- zr)Kp>0@lyptp7r&u>9GX9HbOEuGcU7xDOpY`p68+V;>QmNKZGo0HIYVuq9eUpW~|| z62+lFI*K5{3yjE|C6F{4X$ob^j84==Wy3Deuq=o~5h5Ui`*fz{WkG9rzMuy_zv0Ur zKYYgb!cx#24zz*=JiEU85pQ>?0)|}}6>lAHuei@wc?Yh*0M4j@31^}_!4}Lan#lBF zsP3mFt^-@}V}qHMqP}H)A`G#idlaL|=un9$%d*H6`z|fYTPaI8Rh&{e0#?nHNR}cY zCG*0?Aq;PoKCnl>!5calgm+Khnv|DOEBYZIu#z=z8#acOaA~jwf?d zfHZm_vS?89ymeNlRnXF1rDk?SmsbZ;5kitN=ZcgY1;~`ij0~2fO*YE!v9$C4d2Hxc zounCpTpLb~mlJy6^^Rr1ANfL4001BWNklHA?5*ufN3*nxhee=mW)&W9qXLDe|aC60mo`k|s_}CAy%IW=SE} z+DciiIL!<&8mxd7G$mmLG-+Z(k$FV6K%|X1Z%FcKaL#I44Apli2VP{QSWhbu7!;7k zB6lAlxEUN%Ny^82Hp^==elK4AUdHz}P*NmKWD{QAhTZMWmNAIBDb-1k0g zM1Zod{1YI7f!l#m-~=2sQ4{rR+u+ncWoU$mQqd|B=&5EJk);@Atfz+K{$eZF{q_pbo1~sB1MvKBiw7F+x!Sl^l#s7DSHQ0XCQu6@mQnYUh*QJxiQ? z2``>b2^L2V)7oeNtDVltQ;uDgY&FFMIgj*c5j$^hRtlak$l;NlAt7lnD5&6&DT16X zJE$XvMrI6Q7=UB8PflsqY#w)%3h)kEe?&(MCWsxE3)XL8hUXo(1M%JC!Prj>0(vGuPfG?!*htx*{nRol#akLcx299gsE-ca@vgqE3L-Z zj$?$45PACa`l-*L1rUjmc-t|ApMF66N8p==YhVd9{DgY=DJ4;+i=gy{{yTF?c$? z!yY&~ue8q_MjxN9*--umw)e89HTw}>M4v~0P7KTZtqC*o2#)#8W(r2mm=1nsX!!YG z|C?+Lf0)yxG5U7@l6}`W7+DKOI)SuXToda11z64FryXYVZL9 zt+6;^jGhUWV%a6Hr4CfY1{$sh+~HH?0d5EOfqO>^BLN`C1KF;?7>~b+zyNmQcRxPz zH)a#Nf}Dw*$&=~80AA33jrUJ@x1cqA+29rGU&9b?1}~Qab9dlyn%km<+WzLt?TcwW zJ^#Atm#w{w^5pt(x(&sVd2|%!kOn|X7{UGMfg)*$A?hoDgM_&U05epUg%I7~1#Wm*Vb26r zPt^Ci80N_;10vRj9=Lx&bF3BWIKQADF@DVD}k#BLt0P6Yl0Ff;JUbOPdF#L*NidkGa*1BpJ}`iX0iKl4H!} zX4`axBBU{lxc3NHAJHS>wL<-f+kQ15`G}5f9bfLab?iHI2cCdW$E@sxk)|uw|Et#j z<6ph5X8;fCku|^&hQUXoY}S}35Q>U2Pl9vMajt+F&8@gsdIJj>pecc5p&TVL1i_lO zvn$6D9ubJh?z`KKWhi!*0lnUB?{(nlp?~MRFBLGV% z5g|Chj2VcC@v|Z8|C5UKM=9t(--q>pBOm*AzrRLwL?2r>7v8cAUl+R`F{I)+Iy8`u z)vyvqm_4#Mn9~jaAa9Sr$sS|b9-vaf+bcfbXgsQg0V4s&$9LE^e0oJ&aawTih=H}C z9C*E>6-1)c=~zNDWPt^GM?Q#Sj{;YXuTJ;=pC=_xuz!Vj-=LjwGMHe2zTxvg+wpEi zJV9%v3R`oS?p@cO*?BtKT29}bHr}`Iug7=dr{lh5eZIGsdj9JVd_VlM`iC`B*f%Xk0kn28DJ32V9SDNH??vS}}IquaMAIjE^ec z)cjDhninu-5h$Qi12832-;=B20Cuow&h!1YvsWOzAgoBHx!b4T25u5z9Y0;$cWktLThc)25ZdZH9G!$y7`fb#31@aNL|pTqF`v$KSl$>-x3+sGs4 zDfNJUr)6DO4{uOl-(iWRKJ=r~;07BAAZITr5wj|_pcZ(;7(hb~(In|O@cDJzk7I2p zjUvo(I-?Z8@GRH{Ct9F)FiFGt|MKkB`az-Qhr{eSLMG$<8ayt! zA(s^hLt*B~634J6$Vyvv=lI7j+Qg&k3vvn!3sE6K>X1r_(!hMpYMZzift(WzlMgdy83m!V>VuE`Y#w6N&Q)FBfE@HuM8#a6<-2JY8@) z;W$8{9~cA0VFhnHs^J)TI$`g)9=Pr}EqLm9?f7_pI4$8uyS{u|VP4J)QpfdxX9| zs+h3RJAibDj${fZRHiXAeCAyt1z-V!EC>;hIYgT2m?{;4RQ3^*wUHy?#u4L(-~HVf zNf7XiL0YTLP~Wac2KJ7hUeW&!Gl7HyzxrR?4BvnH{OezR{P%zR6PMI-Mpo|8N1rUY z*?2kdRbTKhXyWkc9-3qRZ1_? zDue1uet6a^Ea8`DwKiB(UE@A@aL8LmYp5;=>;efnm6J#*gr?IaC7a-|pU+u88@Tf4 zJK)cq4L^U8{!0%QA9u*FZ&vC!_82|Khzx09N3MI&0!80?t_1o__FDB$G%|;ygVTdV>}7~D`APX;Flk9>F^t#&sfhmolqQ4OZa&8 z<;6=aN*kkGoLj;M&r7|K0@l_4a;@JUUY#)SvU})_1mozX=lJdS;~#%oUe@+6-rF}H zP%2QsBKfTD$P@v1)1@g*qw~w5j9f0{n6)K&@1S@n?xB0n(=$Il%QB3qK%|Tbq-?;f zrcNF0%ssPbB#aFne)2vMbQl^vu7`iS&?QA2k)S=FGDC~=!R39~*YUsp+YkTv1>?sb%Ti(h?;1v-Qe(V-?%f~J3kD8C8%_(XV8(Zv!wX6+ zwRtNjrMNj^rIfmq+8R)(X<;!2Q-g{~IhZnxF%8A0Vq?&Xg65vji)y4dwAC()_K4*i zwSq4Bcs=@0GY{9>FV5apjU%gNLI!{~2ND8_|wu(W9FeA==4@mD~%dH z|EuOI4iW1L6W-p?Di((pK&XyLjQ%Jk9D!p)06lT<@B($XVLuQ=?QqhN!R;M9~fS#Ybw~WAQG>eeNMx^P;{m`j^WP}l_OK$gE z45v#TTlxTyk$~gDem4~#OqF?(cyKC=W~Q(rvyqIQCYWSjk}nkn5|)NEDj=q3 zi2H`VDh~xBQa$oM6mKzZhHA?R(Z?ZOcOJHXfA6n%e_G2gKIDEhH+%m9=5SN`OlqV+ zl%%ITlPP6LGsvOGUihazhCjLz{#R&N^S1%0h~tPOETo=9It_hX^ZZgnd!MkL00xpc zUr-w&p_xShMnHf$YQpfSpLm=?=M$E=UUgYfseLl70?+4pgam};VK2~HExJZ32eyKv z<33=-@`Sx3H=GIpSOp0U>>V#BWR9&vjOwq|SNZK+P&c8sR; zh2G2zc25Rt$iBlW|Ks0Nv+usg$+DUq z`*90YsoJQ;>dMCc(>9hhXzjGZLuQK3Oq`6%`wRh=b0NxzpYAf^d`inSz${8t-vtvL zP#n3xMFhbjH@cB9Gms?1N;BJO3@(Kz&^6*ajE`<)YS@#VTW())=@3yH%0e#4Ap)hq z7t}MIxc^SCKlNPQ0_6k~d8&Nm7yR_=<-C@>0G(8=t?`;zjdF;1ZQfT`y z9gA75ww2S8>585{6attr*i5qsP#IAlIV|%>t5K&OC-0a(Sex&6YArfaV^GoFEqM2D@%)1S^bbOe``-_J#+Se1zx($;#OK7XD)xf6&wRgEV%yM( z?zk+dLUW7*Xb%oJ2{RRt?ryD=YDlMp#Y?T_ln`wwHo!(6Mi)S9U}c!&a9a=+JsG8x zi#3EP_90L19@o9!d)_N$Q(gu@sU^p6MenMn)n- zQ_T9)?e9-f4S!liQU07@j--S#)#K>n=wsp)@(57_i@ane7JqpE)-$|3E*jGpYDA1j zuCM^bP$znHX2qvUB*;*FI@{C$vtrb8I%f~in$eV&89gB#5zN?S1_NWEvS9?!Q3{Y) z4E@0MhE`BcAP^2aK;Uvl-f<)rVkvlf0XkkT_4%pRF~)`loT&xYF2xw5rZKGsuNTX8{{*oUM>j=DA>a6a4Aik>cN#m)431<1B$?_3di z;1D8+M06_!q0FyCr!87)LNdZjU5ai}ze=+_Vbf2CnDO~beA=>kE=&8D@8bhZ7DrkS z)X)Oa5CTF*!BDCq@;GReRkh~7ta$`lO*2JLxpD*$_f)Lo=tCBBt!M?Mx>qB~>D#Bg zr2B9WTD@Uu7&pZ!GpK{P>$qD~EZ_27(|DV%NTz4MBd(|g%f*&ov_!uwk#9I&_i
    >WtL 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 FV1m4~x=sK9 diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.gif b/htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.gif deleted file mode 100644 index 010b487d9383f988fd960f7858c6c25743700cae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21022 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 diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.jpg b/htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.jpg deleted file mode 100644 index 6d9b8fd807682a1a66b404caa61d5db8719afa60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32732 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�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 I!{3$v2faPUy#N3J diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.png b/htdocs/includes/tecnickcom/tcpdf/examples/images/logo_example.png deleted file mode 100644 index 13799452be3cc5783f9b23e9c8341bd8fa454a50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19411 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

    {-sjr}eS;VA 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 - - - - - - - - - - - - - - - - - diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_cell.png b/htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_cell.png deleted file mode 100644 index 98a1553a82e1b325aa41217923081e63509ca3c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38415 zcmb5Wc|6pA^gpVIBviJLrNm@kN;LK@gtu%7A=#p`j}9fhkKIH`mI$HjyJ750 zc4n;EckX-Y^SzJzd;IRbk9+@^G4r0+>%7nFEYH_@opav89s;V=7g#QkkdRQTt10V} zkdT4I*LhOt%DBV08}#RltFEdd$(OEc1QHTbl82i5DkNt}C@zp+x1I^0%2bNl34Y1<>8jx+8v@@otc?=nL|D zA4%Y4rz8|K((%;ruOza?ByyiUZkh)0+$K@@m~)+kPCAD~q0mJ@iBYD2RfB;<`760n zz9QUIMoyYU^)s&)HHk(RiAFw3K#=Dl4V`KRz3NAD?XYt|0=;G$iJ|L#HI+m$F)~wY zdfm??&j1n&qW~G5#CvdZD-{Z(;zy52NbIE^>S~iXh_IW)kvQ{^I18{oDWr7dBSCPI zxU=wB#E|%qkoZvXTSmNmESIIO&Smvo=-F5D*Jsc9^O-$06?k5p`iT3^i?<|isjY3T zav$l-I={XisC*-oGvJwjoSCx}GAHx}T+PE%5m9#cExno#Qq80A=6fy;Kj+6mFjqI1 zQfn*zcwWG-PTRjsG?B|N#K|oL=I!eh;0cA!uCN5gG8E`O|-cb zTHf?+xoV=7bcTQmC~uM=XBMxfoGu<58iaYn@-oi6#@o9niWbOGb4hvvV5D_(A6a5J z3qw#2aTV^V#)cT3nD@~-pY$D)3m$(~s|gDW$k0O+(eC)a_D5G*e6wfX|c~rhu zDmukK`-e-B^XXf=SKrKElsh1c!&{P)-u}1{SE7`I$p*{i!pc%&zx1NMR%ca7z5eMJ zRvVsQD~T>0FDm&O`|EvSy;xMUb4OueW@T-5b!lSr8?Z6Cyj38j!y~>u{zpw!VSU|D zWkp(VaCWapQS)4OZ(39T^-lv~Ev-$T`t!1F3x_M)Tib2x zo9nw9>sx!ZtGj=W4qEq4+V>82Pft2ePWw(yk2I(Rmm$ZXbW$^NB_R>wBEHUeHAxq10YnugydjL&FpyiUk`r6;gMB5n|wo>yX0 z(l~nMTp?vq%D149C*z*BTedelBe!kuB)|8o?WPc8X=OQ1+F$fU@9xS9GX!y-@6Ed9 zLw1QQ0Jub^kWTmSbqPpw&isF#{eS=S|9ap5ZTA1u&wJ-N&z}W3 z&j-rGh_8PpiR3vE)_saBX$*RTC%ri$!+lF`7TqPj&k@W-D{-8 z-6wL(M^A4I>9{D$HCxk}Im#2x(yU6s90|00S8RH`Ie#BVO>ZC<=6JvSo@rrNI;O0q zCVB#&%I(d>+WWk(RnF?3XH`O`=H9P>$orU~Wt&xH_6PIGcB$_;uZ!l94khpnxBjhY zO-%rZT;W#eo1fc@(exD~iym;flWDKpqf4b)WbNbet_R;>?J`C{pO4QB8uRoenTT*u z$;=E@HgfXJL|0WLbYmOk_~>}@k+-cM=Ob7rO{P3wjcYEl!j!%mZdgD*G>~ zX2lcwR@AR>zfZJFKAeuN<@46+qgj1V9X87KBvL$tmR5`tjBj0AH#@<&l>w=o@?N+b z6j{lHjr)4j1Sx`4EkD3mtZIPc!xCS-z zVdlE<%gT7MM#~&P_9x3iAm4S6b!IiW2}8mB0cgKj&bkmAY@FH%A4uetRfJ{ivr)>~ zltyRrRIrVe^OEU#^V)Ap%gVH*Bf_=%F1@*Et=Oa9eS_Pn!toZoLG=0E6Vm~wGyN_a z(poVtMSYxYz&i^9z0^kd$e3d;8M9R9G4(-{V2!mX$p6klH}bV_aCI zqTaVXMT9nNSRJyF4|c&XOP$Uz^4{0d)o1hEdMs%0CYVi31Y}&2geQsU^?gSeFEfmh z^MiubLTEAVI9O0 q;#*P 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 diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_logo.jpg b/htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_logo.jpg deleted file mode 100644 index 257f8fb6d93386e014b4e2b3f7fdfb863f658ff8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17633 zcmeIYWmH_z(l*$*1b24`jYEQy;L?qRZW@OqXmFPR3GUiJH}24lYj6T2xFx||f+V;T z2qD05@B6+p_kQzd*0*N<%)0xWKl`lOr=C^2YVF!j)&2bacK{h!4WtIZco+g00sz4M z5$^Y)!|8w2_CjdD!prwV^9=nHDQQC^5ARR}GOdA*f%B=jzJX6jVPjLvl+x$Pxf5;) z==A!70+#<9000gy9zFpUHX-Ie5So$$Ft9K&ad2=+h#z6%J>dK&09=3t9ytXiJ3f`7 zWy%8t_vCs48ZK@zB^9W?Rchhn2{kRp6A4KVPcQF=#^wj@Qii_Bw9ivBAro};$_7U1 zALi~C0Yq3B54OM}2gm~&b7Xt$tDjN#Nk`xGEGG`~+pfSn^Ho+nxMF!Y2L?*sh;0&c z)d!>+nM!K=S`IHJe4ez+lo-_arcl+S&S)wrC|Ok*D#{WzswsX03=7x6)_+1k!npO- zGTN3&iOJag%p)Mpd05h6_@oLuu556(@olnMld%dCd)CEzhK(+ggcH#N!5C}9|49!s zl6e;@EGe^scPNj#3oP3jV+k1fN z6J0RXXoYp5Duvo4{A|1tHBQ!$(9p!{oNQdXfE>wz!GI|Ow6CH1j;24;Ov+4!3rU_p zgTJVjj>kNee55s0ss``bQZ)TGsFF%f^mN7bvx6t)6s5D2ppK=#rE}S4xY@;s-=MRU z>Nl;@9G^MU4AQ`^@lj#cZ)r6Bt8e}D3!-XtBf8`GRaQ!4sQRASn_ zN66nsZnHUuV;imaRo3n&)>>_&*y!N-k6`odsPfH=0M%cCl7qkGtOFnEW#naK+yA$2 zb*BGXVgKJhNPPY5&yBLc$Drp%IR8=kAH)8~eI5ez|EEEsH;@xS$@mtBM3iM&NBH>e z`(~LVdClbs`JO8YW?4vZ8);NLR#JL?Ue{g0>jZLQV&rTD@nFjGoqtNUn91sN0(U95vYhGShbdZh=q|DU+S+y3bVM#BY zS-bHMw6L8YgB!GH(gY`9yBY)?P2%;X_jr>0eLKcE`jta&x-3T;Yly0RSr_;k<4gAX zG&4i@;r4Nk4Z-BhSrN?9<5$_?`(N*6l7fV53M&OgJ5TROx`&C?T)Vo0dL$2FnT%_! z-}nE*r)_WcxBqem&KP8{eE#-Tcr4!eaQ$lN9#A}Z+hjF`0)pwR*TL5wAL>LvT#Xk8 zOoWee^c4Muqvx#+bql-1>?*l-D;&z8H&*0N=)S)c1(3-64jgLryi)63o6FYQ^@k*= zSB}{W_n}}Yk)ne1VnxIa7%0m};EqOwLTlS}@r>k1nZ))@G$vMBo{i}D1}=Cp6!Y2- zmN!+RqcroTTnl7ImZM}mDHxT%0EM2SBq%nhXhNZi{TATj+hn)xqlBpLT8Yxhi%Zqs z{B{YJyN`?cnsf4~rLgaO-+o)KT|Qwk<9^@frFdIuxAgbi@g6W@S%-q${VT=*j`eRV zjHE#?onN4KE;`)a;TYcoh_dentVY8QM~g@gP1V-6vtQlmQAhA4{i~iCoiF=9nuN81 zE-S9jiIp5- zh{T{{D*Nmz4bqhn;o@oL3WnH;`Gyny0sX*g>#^E*XWkM$##ODdF(5o57| z>@L5sI93RqjfbUEfBR1LWmZR(feVMv`&k{qlSZ7=~}g9DEuFrLFQ+M4>LmvqFN zNX=$}v{l17jnTBGRe_J4xEU#^0ss+!WI~>Oa-XlzFZYt7aA;~rK2Oq&3~v)d!7>^0 zF*#^97{FU&X`7<+O1bXDD4o{eQkrl~SOF0ucu0O4wL*C_CHmrABM7zo3+StIcQK~- zcanA2U+>>tJW_rsU4?bACZYSA#Nc1F)oA=XXaniLtw0GmfB7Qo^t19=tCwj%T06VQ zW=2K?gUhl+fm}3%w?)`MDj2Y(G9^0r39?a(9Oo|snd~6FxQJ~u(PLnRqkXOh07J(% z)5JwvQH)Drbi2;PR{Ao#;0KnA=2dS8nP4!ZO9`qhMXdl1nicnTxAv;-bT^rMR>)x& z*Swt9^dnk9_tck4C7dgUQY4z{rw!N2hZJ}ZCcr|2kOLDSr~C>x1%YH&fj+DO~I%c%&m&!)Z7>mUX5LnTR@ds35{%S^1rJW zGK{;XQs%8gIZ7w5!h?B4f>kqjli+|vP)PVY0H;B<+v1gY$=?Y> z^A1_35wea=wPjHXvf2@|vo-phRG+VeW}lQrwXj4+<@QlL*gHXA*EQn?4J)iZ4zgUG zmAzo9+bcHrX&NACsWHKM%Pk9j>hMLT4D$t9(d*%N*vXS`-y}tVq3s#3dXOG(84E8{ zO*GZC$G)o(ugquDI)7Ap?tR!CM-55v-xXS2=}7kZRUV=W!O$&G%8@LPj)wg&j%*oY zjF@Ci&?q0W_@wD7imCTS3Nsd@oX}Xpi-Va0EiP9`-05YhEIDKtub=?xcd{E@_?L)t zQ|vaGHiWz=Q#DyqE>ns2*drRU(6k>|2Aex`Yqv%OLrYSVVht4UP(nNTtC_JuS<1J< zFaB){=7j(4fO&lTj{~M+=iz{H3L3GMYaQ(8XZv>_sc<=6o}OwUJ(Nwm{&->27w13m zp}^)SF3<1AsHi?NI3&rPUzGP`7|dH}GC26uXZlj#x^TM9<~2o#YVL&-us^jz_meyio&TUO*AVe7dEDg3>@3tiJH z-VguKT!WyCzMzqN0Bi&BgY|b?MWDiMVO*dvn;+H;m=-PCi`K6;=IJg2 zM2BF1Gf0_V2gRhR zCoWg>c&0wxF=k&{j!l3z7d0CK`52mz39Uh&PDuRvAZWZ_f7t8v(aN=s9xq`b>qWax zus|$52MHZVW+GorvI6${8bK5XqKBqhPmrNoz17G^pCLeR-e#q@rh$n-xr4y-^)Xpk zt%bcIK&?n>e?5M7QYXeMp@^`NfhDCH9Dy<@*XxH8@x`vU9>n^=FCai%rcCX~vFKy* za!v4M_Tx7Y?DAI~FrwX2pArhhk)bLk-NG^02Ek`TX^km6P6II zA5)Iica6mvpQKaWQdRRc%9m}th{volxfQuS2TtnovCQ|e9fy)k&P=(kP??xZgy>n8 zO6#ZLCol`U;=4yJC}Ir2Nv3L=gE1c4D>xi&!rqgbW9|AXnrL>rY6}|8m~zaysv*_p zj4PjM!&HO>Unc9pk#wFYsoZ5cv65=A6PrZOutBH7`0vvs(F|=CjiK*KI#;Pq{DXt6 zOULmqm4UGW$I=Iel@0}JtWIkbl= z!WJ1MwYp|_4#}{W*plCuQ)onxfYA=R^-g@|g*sN#2Se2|llsq#8o6Df3@}W|4GLgm zw!`yaU8wm2iEOnB_V}H?T-EVch#}I5p%a{1%=;wYa{2=&*k4?3YTm0z+@y^jSy++l z;sE8AIcV(4^7-8pY-&SjI-;Uf7Z%@P76S;bjQbpWcYalTq-7+j=b;vJJp8!i zkp=W&&nr{Y({vudigs_}r^grS&`)(+urX~_`Q(+Zs9e;bPNIyiumujiKA}TnkOF4T zU(=*cZo%Ul>RFV-IhP4V$LBa}rq!#cC)o4<>~YnA(H^$8-%R*3v*m5eLIOMuxroo+3=!#JOu$NvxhVy?HN8i0 zaDNp?+HlCVP8LVKh8fM9)?bwo+QOu%G3kk&1?QWhBjGYy0Q_JQnneZnd|pSc;4Qhoud#j*?dzIh zbuO>HHFO--C|CzZr?oc;HSAzw2mYigQAMN%xmdO0)y1mv{aPQ%XiKN(Jl4WkB5nC* zId`eBD|~8d|86t6qSi`}3*uF*i2^SOf2z=q-++4;2DCzZ%oKN(qZi!qP<(W2EU>FD zk3l)%!X0boKEYph@?n9S_l)`GIOD0ab3fWbSyTfQW$7u%6e@?N5Q?v*TChyzZE;_K(l z6`ScR`)Zr{A{z>4(j(*0$T%|r!*(5>X!?Cxgq3h>@+uM#nkYU54<7l?%dbs)lATLV z#)v2maf1#a!e=d7J^?i!aN2&ghxai$ zIkw}_x3d@fiE8(EEspmwLN^0!ELCfUZOqgfbL=J%snSOJ%lI`_a(!lT`jEqGzOXGW zlW12mt!#;fo)s&Fb zQc@jL=F<=3vTA})tID(08S5rVpkURELdIxvfh?5`!Nx-|d{KC0`w|-k?h|Usic)$W zdwg{cUC@P9iHaVJTf6s;=X*QR67S>S^bet-@7`C%)?kxiW#E*fO?7f5R+HVIFrytBn;JG77?gC|+*$mZnH@kHIFk$B zLJb?2X$cX{DHMB6FIFRKc^P}=r-(U~n`FlJkWqo^<*E@H+1$GVxU)v zg;IK&hTqB*Qb^m%C3DENKuZf6X(O0>CdgJ)CsNr*?*Y2q$~Sn#F5k)S#y42~+cgX& zZhO|6R>yiLk^lKYa=_=sn(R`vYvh}-AN}}p*2l*95XrkWLf`}ztKc# z-lt@_)S?i*H&s{x@+K>xFnWZ~i($iUkLShLWX^TLJrSVkXsfd{sKweSv^i7&M0uu( z(^W1CTEhEX_QZ~3`9YW44xZH3OU!3g)DST&bRwnDS(TyZluxZ%!ZRUD3rixjTO0$z zwz#!}SgR?EbY@%Hzr{c}@iv}$0guKlKJZFOWQql4pKlnk{tQFEF;ABRmdqt_OmTJB>ifa0oe$C*!8?jkH6?|5Gt&h(dLTh5j9A@zM6xKU~O z?9s7)olBn(@8^v+%b2YUiQIQwlb`2!9ojSn8HpUGA6`}H?P_>bx_!`2vzdY|a)nX5 zujo1frw;@wkAA}eOuoaFA}fsK#DJ%ZLn==uWHo}B!j(ms*grnO7)9XqVD*WY3I7WK z*qiuUcwYMN^>C@;FiF+Ih{NhCqu!-B6dr+mpbZ%tR1Q<`mPEel83Qu{JNHN`ek z;c--vV`Av)7g}ks3a{T^A@Jk zPS(JHv$`Q_ZDr!dsLE#9#Aw8y5@Qcd=jh0yT8<{}?WtHPxJRuZOk(8v|dg7vZ zMp{wbOVjb`Z>_HWU^e_+*j}Yuf6a+J|1{O!hkF2;^Um;3DH$H`J)r-K-WlE@k?E-) z)(}gD?#GZVQhh$30fW+3Ipr_$jRRMMzh&+LT;lXyf3EKV_-jp2Yu9%{VYO$B4601f(hKQGIZ&0I%5e`iDrSaE3d#)ao92F5`0JR#PYE7*IsqZ&}$Ly~2Sis}b zPc0yi3$#X19UogAz4OiNg7Y}x^U*#}$dR*H=XuaC5{Z;2GqntYBYP;J)ZtVeN_Ii# z?#qw0y-QAey0$3B1E-p2fc~@-2$K(JX3#*?UO$b+^zld6xR>+nM1{6I#!Y5~Y?ubG zOI_ZT#e^5&sAg$ay^DI^$sSz5GlZK^-mQ*B)jDVC+OQe;yD%d-z)E>2#P1!4oB~r3 zCtQE6s_Vc+)j*Rgs(1?BHNiZ-3CT6VKLtMU3{xy-UiRP!vq|v~m2!5WsY=@FYR$aG z+c0?P99utPu_?fi&f89!$(AVwos6FXM8|^2Vz^>~$y5-KSO_JEN)M<9;u?Y`KTQSd zX+;3>p@;&ETPQM5B?ZLw@TOL!yiEaZfaE~WmILUN$QH?#>@=O55rz0lO1j}(*eHCk z0vL)2rhxyWfR9CvJPfCy;TTgHTNNeLtR@-m#jTFGnbn3VdUq6bPJP~Q@+xaF(uZLB zf*`=d19S{Pv>tY799~if&^pCh z3}V%F%!=3-zQqaOqPLZH$9pTC>{6ovtb!JuZL<$H(B&TO^FI6sIgpV zuLy!7s=?Tfax$VUk5yy@Xtlvt28joQu7r(|Hq$P~G>1ak4k~4*i?L&2y2-_?y>?n6_>s$1EAmbp^2${B`bhJRsq?aI01dh97NZl$8F zB@l%K1<(gehNC#A^zni<02pw(m5Ta^4sL7n-wAEQB{sR1rYTp>GfyZTxT!I)C)6jC zzDArox0zL&lwcMW#aSDeEAZkYxe}eC1S%glR-*KSV^Ly-TJHT%W5a>EX?pvB&mLp(DBJxYEJ8C(Q-T2nI(Pvx8^Q~=1Qtqu7lc|<=U<52q&w>AIGu5WE zh8e7JGaAQEX(WXJi>c+1`HQohaLcf|$sZxh$}2}c6+P`SF|sXclGi|muRM9`lI)&j zW81J2URxd!0Dk0|X{8=MTqY%N1_xW;PI$GrKTf4DGIYvg-nla(z|C@s)B$_J;nPs8f9=`Td5 zHkv`jTN+zna3ntzGg`NmskrT(y)Z&M{jw|H*;FE;>Q;?fr{oL0H+>UBG2%yh;XtZP zzz_8L69GwKZw5+IsT-nWE?^0;sS=tu;z+SE)$sJy=kKqi)6>nr#c<3QU}7i4MZH|0 zhKZ0^i!P7B%c(vw*P&qj znQbUmZ&VeB4Nw&L`3|A8cjvTq9pZ+$^>w3pl;9EIDe*6axz6%RnnUI~b!c7ALPbqW z#uv>ulPnrCOG=|4n}TZ9enGGT)WlQoe0*{|;@jKZ=5*AX@|0quKhh4R+}`O6rVu_u zu05wLXPG1&Z+im7U+b?vC|vMyM=JfJ(ukv@RSIoKivjf*% zmmZSe(}?T4td*HbrS?B~e<{oEx>Ii=Bpgt9O4FQ);woyAwbD)=NrzChn&YB;7183cCkfgvDHq zN8N=?MePT$Uh$_=7~pO^JtE&^p|`YY;@aSF80oCuolPNziD`1ErD#0r`}Bj1Wp+0v zr^&4C#*0=rtk0sR&OmT{@pps3{!Au@MEd(mS94-LEP~*K8vIC)Au=L1hzRv#8(umE zY>zPoY5rsnY~6hhl@Eud`eKjMg`Gq{5u|r_k=4|-3zoDqh}rFg6@D3!q6`N~kz-&` zPxaosjU!PWpfAJSV3FAx$4>W67tk(l#V-XBToz823sRGuLIH%+QsJeq>gjg;F(Q{mdqF_)Ji@RAMR?%ig)3+oigs48B+*r;Fk3zwPi7(taJKv7Wcn zg%BB=QpMkmS4ruxVr0vA)UM=@Us+b`7v=%+@nfj8;a+I2W03FGn*ERrcq!)BZWwRg z2TgCYbT)9gD$cv!BU<)VOc=9RqZK)^(b1M|SUmK19Km|~#in3kclrRN_}bbBsxib8 zuap;lt7i6I_9fzH>~*fXT54`u@_{7Wg^;4CTDcG;#sa3otz$9?h?O~ynr{q<-jzH> zI=owc*<4nwe?ybx&dhTsR{bJ7Zgz(1c;d}>>W)8h`D;Hc+s@AJnzO8LJyq|h3aqG1 z>lhww)a3t>Fl~Jnu6L>0;h|!wCH{T=$L~8!8D@?7-wSGvY$+#j&#(RKhJ?+(&LN!#zvDW;hk zuq17p)*t?K(Az6>LAj`xk8C5k8_QKjy!*-u%1fLiE1}|W+13f!e}`d|J2k4{WU_qK zH~Qw0Xy``05NIDg0X}^+7MLZNy zkmpA>n+ZWuns@CJo(+Eb++M?<&r2#C(&w3@T~l;p0r=)~v}7?v&O0}~@E;FP@U(VG z0;9?0mzrAx#B|@7izTZlecrz43_E~Rj$YuiWmf`3toj-0<)qJ13OP3l1 zhkb4bA%5-7Eex5w!)Qg)ejs8h7OKl6GaD=}z^oowZ8H0iJsu_?2E+c1^RJOx4%=eY zH;okZ4Y__%8qH7|YLf1RA9a22)2d6&d` zIg_M=K=E3nMgYMgmi&V++|3|&71@6m`RZDXOa5(Y@Ij$F%sXffd^;i}@@T^LulLT) zO{3%Qw2q`=(!bTTzx&gFBP!+k{{gEKOXQ)_KM@pf925ioF!oa646g$2rw}0f>dc|* zEnV6z{;QvVy#D?QyPfe}p0{xS<64}w0dK!pD> zHRg7g6qOzu-A|yJU+w2n+i#{dUp5G2>~^V59|#o;6*EbrNNsBxwo_(qy$3Qbi9FVV zlvtq=oU-#P)?6P@4!b_Jr6OVMt2<*d4SY<7WZNoEu$z33WYzd1)m23=#GO|ANT<^! zhLBN-f5yZqIvI_*-(A zkwmcwi5~jlu?iYw3`ZWY#Bilq$v@5&)~*Jo~r8MEQM&zY^cIE z;t)Cz=G|y3Rqr59jR+I8IFHN}4~`C-2~BFX&|u1J5lPMZ0t7r6xJyU~4%X#lQQe0* z7OP2qTogAEh~-|fHsj7DUscqsbGR@rcQ2)&kuY4m?Vv&c%unmASK3}C#xBNPi!nRmdb=)$S#p)xpB~k z*mma=U`UDe$q=xm>$4 z<(wc|!ieuCj6GuSy%0*KCB~*D1xC_?z#q6X35=zE92=2NQST$|X*w6+#;6aSjC1)~ zLF-^==NY*(V=F$n5`MmJ_GJ;V==r%Q&tpmx&)f>-BKmcyg}Kvy;lq*TD`j|UDoIfe zp(Aps5vdyQ*o1F^g*M=0o;-j7lZ}#eX}P45#Y*WH7A-f3=;2B`iE$t4kPpmZ;dx{R zjg2TqukE*mk`EMoMX%jKqpj(sAghqC`YF5|5-4u2JByoPkh)`ca^Sl93l?czee=-> zEgp!zj>{9ep64e3>wk30k{WX%&0*uJPbwNl$RF}gv`lP8VQ>sOlMvG?=O-DEP?wUf z2LRv@m)Cph>#W*hKP`ijz|rbSEVvjfMv)3BSL#igJ1F^BH-zrZbzqE_Jf%o^%Vh0* zKKfW2c__BZ0I7F%Y#4C)QQ7!IW~o$vEm<=G96}#!LqoJE+y6&g4a}w*|G>GEJpKDa z?u<-gs`ANi?KpTwC;p`^1Ic>C_wAKWzoe~=t67AI;6gAf9)?zo6n$)x*rezxGxw}3 zWmmgGL#@r0SN}>lSF4=pe7cnAb@W*=>savCrLTt(_TSm$7#;PaU89?|E z7)s22{*^opF}#Yz9kMjt4S1lS*d@(vrUb({{iosf9#~#fR8WSBQCobW>f7eb5bh?K zbTdAaCBNzF+2O}}jvBMxjK1Pag>HnIs>`z`|&jg@>IDoIwvCK<`R^vClVPB$OH;?@4tZB}pVI%tWg z=}1+8%-!He5xtMGA=JICYpttPKge(-Bge3xJUXq?I@)|+dHeX`BD`=9kU#Wql9Y=o zTJpYz^42CoOoC;1t` z^}F6+uYr^c(8cwYpoGAXhp`dRM=s;2b@WS_Q*~4Mw_L zdg^k)B}cD(v&(tSznLzug;MIm6JB2_@|x(>{@I+`(gB-g6?DarU(go=&K2rxa zYnw6ePf#!hh22rr4>X%p?jp+IZ-GuLci zu<%=K;V$I!B^WR#gEs#SO`zh_i5@XeIbddPKyyTBdla?xb7n+gG7(w;gT<<_nh)$G zpU1AN<}J4?%dwAHT^3p5v@iP(NZc&(Nhs|xN%di?C~W3gy0ggqoNP)k|M;p%C@~{~ z%p@xY7nVDK(lE1J9a^a>bFdFkac7cZeyg>GHBzc7mjh(bjw^|Bp_2ES7R-E#&@Jn! zpqb$lwed8pHE+PYz0a7W+8tF6%Y+^N<@aTA|2 zO)io0xh1Bm0mzCB>)}+y07(4if6qKED1GRR-Dub?ihp)M5ZglaG@?38Vqu1T%f>Y` zvO+W=om1%AC|h@*cu>S!E0*s`yndGEqZYwQy-cmD?1ge^`WWu7dusaU<+NX6qVYw? zEH%aH{7eJnBAKcP={^+|PZmho)eG_YeN~PXo4y)lmzq*>AlngzsUA65r^zqD@y#Qu zTrikovB{}5#rYmkC|;B`=6ex^1|!rhCrb4;=P##fB}xdhhqJyIbPGuv=`7pv#c778 zFD=?Yf3XNfOcRJ<+Fd++duPC#FD$%o zkA5-t^wl~TSN!52=~%OCU_5awt>Gv;bSl-5(HR{(WSVkZm{&2Q0XolZNVJ+$v|_V@ zM~NxD|DF*+jxofqF2BNFLc7vIeGhnblvJ|s<1$=)K-uv8nRCz?e`KRb8J;#pNmGDa zWXbcz=L1t;M_pRO_jx^y7r?=@{yH^Mb1#%7VpQ{o1M@k&Inu??16Fp0M@#!sPQfq3 zDN;7as%?Nw6cSA&Au**_8umC>F8x7sH^sX$Nk^j_=iRLAj|0qosaH4_TA#YyZDqo< ze8P045xB!r$!_bgaU2rQP!%aM5-Y}ljOZCba10ZYdm16jenqCiEhM)wsc}Ss-NVQ^iCg#{SCQMruqBNWESyXT{yY*$nqmn zvU98d2Q9v^-~Zj>>yP*G`8DgsLl;|fmA@AXs7#at1Vh5e)5M!S&hgwuD<$?jygF;F z$DJ0aY2E4vOav5SIFfaWB8RYjOL+g$QlcOpm8TPd>0oW>jl~Rfs06=hXFz)Mzs<&JZ7CbmA9Qz3=u^-Ay_?C_D&(od?4b*J{ zMevN&*qUecK-YmrM`yy|D@Vu0gHs<5)vfR~ZiC~rrAf@=TAjE80p#LvbJxIan6|M@ zuy*gu?RWbJ=uYc_*fvT*-?2%j(n2!5>Eqn#@`pvJbd5YtSV8pDy`-5V22{IeP{_f9z^8DvF0 zZHG2idnmmStw78R8fA7Wh?zUon`+Q6%c0!aB^AGN!pMVHln^LnmRFMiH>zykWTPv= zG10&qS!y!?D>5+Q=T^({NZrydN`#UYb;Dpw&;Q!Wa1@;uh%*nC4%%RlZ_e!|9jH|` z(F4JpAI)PR_6W4B=M*#0UW!QO5f2BRDiq%xpZN(w!B32g41+}G4iLq{1`PKLE|Nd1 zI@B9*6HAl|tZ(S@2(JAT6^is-psM?)qHkJS%C9rZ&^ErPp#$Y@|_@aMRQp=dq} zAW?fb8#;!FTS85@Ur1GCJ6T;I_BBs@wUd7K%GEeKr*BcIQ%tPNZfjhNmNGu|UR-)0 zh~9nl-Ga(hHD@eagPPk3)EK!WVK1w{e~K#mqddhtRl-YP zg3oSZi(9Wx_KVn9E_wnz57^XRvV=02k>74;r6JA4&GC_@HXc=q?n_=iaJA&)Ze>?B z2If}#E7ZDqD(VqBHO3fNDdUr_Xt*RwBudgB z)@eAEwbxjI6j>s84STH_`ieT`=XS10vt&niz1^ylGt$Yq*wNtYVnFNHTo!-o`UCzy z!(Do%k1Nn$I|TO&^hgqt@nPDy)f8oHnV~mnmIP*VZr0HazKj7Yy&bYmKrjp^!L0{@ zq7zN)>{T6iZVxGzIWkmiAn5KUD*9>w!q#9JXmP{6){j@BQc-!h@z`47Qx))#VeDL2 z`COeJNbai1AJ4JJ!s;#URSmRxR0SZEP>RQGvVjgf^lGQkV=gV0M7h;U&u3TX=UOUX zJM9|;dem%jeFNUIL265%7W_!Dr$NXXK__f^HYl*cO}6FV;%CfZViTSRU7OjSh7!_U zSAo?>hg~2447vtA?+rv)-Q9{OuHFSk-trFK{@D@*``-gL2!d|3SvRBZI0t_*Ig;M# zigsUP-UIFd1}zWdsGN5}r&s8wF)7Op@ZbIe>Bjj+w%pP3(Jtax4Kjd=R$0Xbb|!|( z+fR6LDfK{<%kfc|6b3oR6tU3sMM8H#h-#t5$@-#;AddO5N(@RkAX!q&C{&YxsEAj> zqhS~`x1@iF)a3>W&RaOmsom8W=Dh~lY)_{Jg}sQf(?es!eV@?uEzZ2~Xu$W(oG$#RTZE8X{3RuH zqs=VoKBY5e5)enXAQ4(gR`H?9={Hnha>eXBu)m)2zON2~I;gUH}Pe4GUUKf$b3h-p0G}B8s@N@CoAbqApPCbJdfsgd6)j_@&7H zB*tt4xg8Q0Dv2vp^xZedmtT*MyaTu`zn@u+i%Cn_wLedQcvYNeQjhf885pWk;qV_c z%p1qsZ&Vv&xfxHhY?lT!U7;`EmV@;)X(%5`&9DDIWD2XPkZR)Gw7UJI-xFUry&hen z4ahTFf9SROX$6t3OpdN`r%pW%5BN@W&Pqz#`Msi2EAgh>(*jlIoLa?|-1pd!Oza-e zRppBMWsFwx5wp>bADQlDV|OXwKcWK3a)nj4CDnsVegL6h+guJpb zw#n!V+RchM$$63Hy8CAPm=i-Zwe4M6VBl%L;=gNE7fbza zxL{yxE8=fk`0g>~kL*9j*EfUIIDGlD63k-n9UK`+GM_gw{SUU!|AF?fSO2lv|BJrH z`tIKd{_@rrC|YWyzYb$K&UqWv|gJ;!Ymc`=${=M z-EdI_tfWsY7z^O+(+mPm-3{5W65o3Fd1N5?a>j(slS_e|_r~eN28k;G@Z%nk31f1M zG#j9Nlra6(U!Jq*ZJcp%f_QU=TN33TW1Qzi$Pd-TX5%Q2+Xi zOVN%kbkUwiX)NMYe`jyn2^;vKeYxemfH2u276)^qZ@m$^#6!{`j6y)tn?ob`DX-OFb{RUHQ(5G z4U=o_Q%@4Od@Dzf3qyH`(}xRk3pA&Y)G1L`kx6-3i%w-5SAyc3UzKZnqe^Y;%+kRy zBsM1Lir4=0z$5vhI&xl;-#M?bR-@0No&mx8$7WY+54F4ISLSaBqa$c7Scge1^PN77 L%PbHD-7owf_cIG8 diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_signature.png b/htdocs/includes/tecnickcom/tcpdf/examples/images/tcpdf_signature.png deleted file mode 100644 index a4f06372511767e05e8350826aa825022ad14258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67931 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 diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/testsvg.svg b/htdocs/includes/tecnickcom/tcpdf/examples/images/testsvg.svg deleted file mode 100644 index fd8314e3484..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/images/testsvg.svg +++ /dev/null @@ -1,328 +0,0 @@ - - - - - TCPDF SVG EXAMPLE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - www.tcpdf.org - - - - - - - - SVG - diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/images/tux.svg b/htdocs/includes/tecnickcom/tcpdf/examples/images/tux.svg deleted file mode 100644 index de8c8696886..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/images/tux.svg +++ /dev/null @@ -1,1487 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/index.php b/htdocs/includes/tecnickcom/tcpdf/examples/index.php deleted file mode 100644 index 75125235e72..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/index.php +++ /dev/null @@ -1,115 +0,0 @@ -'; -?> - - - - - -TCPDF Examples - - - - - - - - -

    TCPDF Examples

    - -

    PDF

    - -
      -
    1. Simple PDF with default Header and Footer: [PDF]
    2. -
    3. Simple PDF without Header and Footer: [PDF]
    4. -
    5. Custom Header and Footer: [PDF]
    6. -
    7. Cell stretching: [PDF]
    8. -
    9. Multicell: [PDF]
    10. -
    11. WriteHTML and RTL support: [PDF]
    12. -
    13. Independent columns with WriteHTMLCell: [PDF]
    14. -
    15. External UTF-8 text file: [PDF]
    16. -
    17. Image: [PDF]
    18. -
    19. Multiple columns: [PDF]
    20. -
    21. Colored Tables: [PDF]
    22. -
    23. Graphic Functions: [PDF]
    24. -
    25. Graphic Transformations: [PDF]
    26. -
    27. Javascript and Forms: [PDF]
    28. -
    29. Bookmarks (Table of Content): [PDF]
    30. -
    31. Document Encryption: [PDF]
    32. -
    33. Independent columns with MultiCell: [PDF]
    34. -
    35. Persian and Arabic language on RTL document: [PDF]
    36. -
    37. Non unicode / Alternative config file: [PDF]
    38. -
    39. Multicell complex alignment: [PDF]
    40. -
    41. writeHTML alignment: [PDF]
    42. -
    43. CMYK colors: [PDF]
    44. -
    45. Page Groups: [PDF]
    46. -
    47. Object Visibility and Layers: [PDF]
    48. -
    49. Object Transparency: [PDF]
    50. -
    51. Text Rendering Modes and Text Clipping: [PDF]
    52. -
    53. 1D Barcodes: [PDF]
    54. -
    55. Multiple page formats: [PDF]
    56. -
    57. Set PDF viewer display preferences: [PDF]
    58. -
    59. Colour gradients: [PDF]
    60. -
    61. Pie Chart Graphic: [PDF]
    62. -
    63. EPS/AI vectorial image: [PDF]
    64. -
    65. Mixed font types (TrueType Unicode, core, CID-0): [PDF]
    66. -
    67. Clipping masks: [PDF]
    68. -
    69. Line styles with cells and multicells: [PDF]
    70. -
    71. Text Annotations: [PDF]
    72. -
    73. Spot Colors: [PDF]
    74. -
    75. NON-embedded CID-0 CJK font: [PDF]
    76. -
    77. HTML Justification: [PDF]
    78. -
    79. Booklet (double-sided pages): [PDF]
    80. -
    81. File attachment: [PDF]
    82. -
    83. Image with Alpha Channel Transparency: [PDF]
    84. -
    85. Disk caching: [PDF]
    86. -
    87. Move, Copy and Delete page: [PDF]
    88. -
    89. Table Of Content with Bookmarks: [PDF]
    90. -
    91. Text hyphenation: [PDF]
    92. -
    93. Transactions and UNDO: [PDF]
    94. -
    95. Table header and rowspan: [PDF]
    96. -
    97. TCPDF methods in HTML: [PDF]
    98. -
    99. 2D Barcode (QR-Code, Datamatrix ECC200 and PDF417): [PDF]
    100. -
    101. Full page background: [PDF]
    102. -
    103. Digital Signature Certification: [PDF]
    104. -
    105. Javascript functions: [PDF]
    106. -
    107. XHTML Form: [PDF]
    108. -
    109. Font Dump: [PDF]
    110. -
    111. Crop Marks and Registration Marks: [PDF]
    112. -
    113. Cell vertical alignments and borders: [PDF]
    114. -
    115. SVG Image: [PDF]
    116. -
    117. Table Of Content with HTML templates: [PDF]
    118. -
    119. Advanced page settings: [PDF]
    120. -
    121. XHTML + CSS: [PDF]
    122. -
    123. XObject Templates: [PDF]
    124. -
    125. Text stretching and spacing (tracking/kerning): [PDF]
    126. -
    127. No-write page regions: [PDF]
    128. -
    129. PDF/A-1b (ISO 19005-1:2005) document: [PDF]
    130. -
    - -

    Barcodes

    - -
      -
    1. 1D barcode HTML format [HTML]
    2. -
    3. 1D barcode PNG format [PNG]
    4. -
    5. 1D barcode SVG format [SVG]
    6. -
    7. 1D barcode SVG INLINE format [SVG INLINE]
    8. - -
    9. 2D datamatrix barcode HTML format [HTML]
    10. -
    11. 2D datamatrix barcode PNG format [PNG]
    12. -
    13. 2D datamatrix barcode SVG format [SVG]
    14. -
    15. 2D datamatrix barcode SVG INLINE format [SVG INLINE]
    16. - -
    17. 2D pdf417 barcode HTML format [HTML]
    18. -
    19. 2D pdf417 barcode PNG format [PNG]
    20. -
    21. 2D pdf417 barcode SVG format [SVG]
    22. -
    23. 2D pdf417 barcode SVG INLINE format [SVG INLINE]
    24. - -
    25. 2D qrcode barcode HTML format [HTML]
    26. -
    27. 2D qrcode barcode PNG format [PNG]
    28. -
    29. 2D qrcode barcode SVG format [SVG]
    30. -
    31. 2D qrcode barcode SVG INLINE format [SVG INLINE]
    32. -
    - - - diff --git a/htdocs/includes/tecnickcom/tcpdf/examples/lang/afr.php b/htdocs/includes/tecnickcom/tcpdf/examples/lang/afr.php deleted file mode 100644 index 367b7e87f0b..00000000000 --- a/htdocs/includes/tecnickcom/tcpdf/examples/lang/afr.php +++ /dev/null @@ -1,44 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : This is a command line script to generate TCPDF fonts. -// -//============================================================+ - -/** - * @file - * This is a command line script to generate TCPDF fonts.
    - * @package com.tecnick.tcpdf - * @version 1.0.000 - */ - -if (php_sapi_name() != 'cli') { - echo 'You need to run this command from console.'; - exit(1); -} - -$tcpdf_include_dirs = array(realpath(dirname(__FILE__).'/../tcpdf.php'), '/usr/share/php/tcpdf/tcpdf.php', '/usr/share/tcpdf/tcpdf.php', '/usr/share/php-tcpdf/tcpdf.php', '/var/www/tcpdf/tcpdf.php', '/var/www/html/tcpdf/tcpdf.php', '/usr/local/apache2/htdocs/tcpdf/tcpdf.php'); -foreach ($tcpdf_include_dirs as $tcpdf_include_path) { - if (@file_exists($tcpdf_include_path)) { - require_once($tcpdf_include_path); - break; - } -} - -/** - * Display help guide for this command. - */ -function showHelp() { - $help = <<'', 'enc'=>'', 'flags'=>32, 'outpath'=>K_PATH_FONTS, 'platid'=>3, 'encid'=>1, 'addcbbox'=>false, 'link'=>false); - -// short input options -$sopt = ''; -$sopt .= 't:'; -$sopt .= 'e:'; -$sopt .= 'f:'; -$sopt .= 'o:'; -$sopt .= 'p:'; -$sopt .= 'n:'; -$sopt .= 'b'; -$sopt .= 'l'; -$sopt .= 'i:'; -$sopt .= 'h'; - -// long input options -$lopt = array(); -$lopt[] = 'type:'; -$lopt[] = 'enc:'; -$lopt[] = 'flags:'; -$lopt[] = 'outpath:'; -$lopt[] = 'platid:'; -$lopt[] = 'encid:'; -$lopt[] = 'addcbbox'; -$lopt[] = 'link'; -$lopt[] = 'fonts:'; -$lopt[] = 'help'; - -// parse input options -$inopt = getopt($sopt, $lopt); - -// import options (with some sanitization) -foreach ($inopt as $opt => $val) { - switch ($opt) { - case 't': - case 'type': { - if (in_array($val, array('TrueTypeUnicode', 'TrueType', 'Type1', 'CID0JP', 'CID0KR', 'CID0CS', 'CID0CT'))) { - $options['type'] = $val; - } - break; - } - case 'e': - case 'enc': { - $options['enc'] = $val; - break; - } - case 'f': - case 'flags': { - $options['flags'] = intval($val); - break; - } - case 'o': - case 'outpath': { - $options['outpath'] = realpath($val); - if (substr($options['outpath'], -1) != '/') { - $options['outpath'] .= '/'; - } - break; - } - case 'p': - case 'platid': { - $options['platid'] = min(max(1, intval($val)), 3); - break; - } - case 'n': - case 'encid': { - $options['encid'] = min(max(0, intval($val)), 10); - break; - } - case 'b': - case 'addcbbox': { - $options['addcbbox'] = true; - break; - } - case 'l': - case 'link': { - $options['link'] = true; - break; - } - case 'i': - case 'fonts': { - $options['fonts'] = explode(',', $val); - break; - } - case 'h': - case 'help': - default: { - showHelp(); - break; - } - } // end of switch -} // end of while loop - -if (empty($options['fonts'])) { - echo "ERROR: missing input fonts (try --help for usage)\n\n"; - exit(2); -} - -// check the output path -if (!is_dir($options['outpath']) OR !is_writable($options['outpath'])) { - echo "ERROR: Can't write to ".$options['outpath']."\n\n"; - exit(3); -} - -echo "\n>>> Converting fonts for TCPDF:\n"; - -echo '*** Output dir set to '.$options['outpath']."\n"; - -// check if there are conversion errors -$errors = false; - -foreach ($options['fonts'] as $font) { - $fontfile = realpath($font); - $fontname = TCPDF_FONTS::addTTFfont($fontfile, $options['type'], $options['enc'], $options['flags'], $options['outpath'], $options['platid'], $options['encid'], $options['addcbbox'], $options['link']); - if ($fontname === false) { - $errors = true; - echo "--- ERROR: can't add ".$font."\n"; - } else { - echo "+++ OK : ".$fontfile.' added as '.$fontname."\n"; - } -} - -if ($errors) { - echo "--- Process completed with ERRORS!\n\n"; - exit(4); -} - -echo ">>> Process successfully completed!\n\n"; -exit(0); - -//============================================================+ -// END OF FILE -//============================================================+ From 5904f33039b55dbabfb660e3b464eff1305ff1f3 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 22 Apr 2016 11:44:23 +0200 Subject: [PATCH 40/50] Fix bank statement display --- htdocs/compta/bank/releve.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/bank/releve.php b/htdocs/compta/bank/releve.php index 8ef53f26203..7a7941da64d 100644 --- a/htdocs/compta/bank/releve.php +++ b/htdocs/compta/bank/releve.php @@ -325,7 +325,7 @@ else $sql = "SELECT b.rowid, b.dateo as do, b.datev as dv,"; $sql.= " b.amount, b.label, b.rappro, b.num_releve, b.num_chq, b.fk_type,"; $sql.= " b.fk_bordereau,"; - $sql.= " bc.number,"; + $sql.= " bc.ref,"; $sql.= " ba.rowid as bankid, ba.ref as bankref, ba.label as banklabel"; $sql.= " FROM ".MAIN_DB_PREFIX."bank_account as ba"; $sql.= ", ".MAIN_DB_PREFIX."bank as b"; @@ -376,7 +376,7 @@ else $link=''; if ($objp->fk_bordereau>0) { $remisestatic->id = $objp->fk_bordereau; - $remisestatic->ref = $objp->number; + $remisestatic->ref = $objp->ref; $link = ' '.$remisestatic->getNomUrl(1); } print ''.$type_label.' '.($objp->num_chq?$objp->num_chq:'').$link.''; From 72ef11f5934af0203e05be578b941507c473ba93 Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 22 Apr 2016 11:59:55 +0200 Subject: [PATCH 41/50] Fix bank submenu error --- htdocs/core/menus/standard/eldy.lib.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 5dfd3a230e9..13af259290c 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1324,6 +1324,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu // We update newmenu for special dynamic menus if (!empty($user->rights->banque->lire) && $mainmenu == 'bank') // Entry for each bank account { + require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; + $sql = "SELECT rowid, label, courant, rappro"; $sql.= " FROM ".MAIN_DB_PREFIX."bank_account"; $sql.= " WHERE entity = ".$conf->entity; From 7515b2ba7bf78118bf270b70d48355fd15df8247 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 12:11:57 +0200 Subject: [PATCH 42/50] NEW Add a parameter on graph function to show a generic graph when no data are available. --- htdocs/core/class/dolgraph.class.php | 14 +- htdocs/core/lib/functions.lib.php | 12 +- htdocs/langs/en_US/main.lang | 1 + htdocs/projet/card.php | 8 +- htdocs/projet/graph_opportunities.inc.php | 6 +- htdocs/theme/eldy/img/nographyet.svg | 875 ++++++++++++++++++++++ htdocs/theme/eldy/style.css.php | 13 +- htdocs/theme/md/img/nographyet.svg | 875 ++++++++++++++++++++++ htdocs/theme/md/style.css.php | 13 +- 9 files changed, 1804 insertions(+), 13 deletions(-) create mode 100644 htdocs/theme/eldy/img/nographyet.svg create mode 100644 htdocs/theme/md/img/nographyet.svg diff --git a/htdocs/core/class/dolgraph.class.php b/htdocs/core/class/dolgraph.class.php index 0b713de80ff..a4ee48f256b 100644 --- a/htdocs/core/class/dolgraph.class.php +++ b/htdocs/core/class/dolgraph.class.php @@ -600,7 +600,7 @@ class DolGraph /** - * Build a graph onto disk using Artichow library + * Build a graph onto disk using Artichow library and return img string to it * * @param string $file Image file name to use if we save onto disk * @param string $fileurl Url path to show image if saved onto disk @@ -779,7 +779,7 @@ class DolGraph /** - * Build a graph onto disk using JFlot library. Input when calling this method should be: + * Build a graph using JFlot library. Input when calling this method should be: * $this->data = array(array( 0=>'labelxA', 1=>yA), array('labelxB',yB)); or * $this->data = array(array('label'=>'labelxA','data'=>yA), array('labelxB',yB)); // TODO Syntax not supported. Removed when dol_print_graph_removed * $this->data = array(array(0=>'labelxA',1=>yA1,...,n=>yAn), array('labelxB',yB1,...yBn)); // when there is n series to show for each x @@ -788,9 +788,10 @@ class DolGraph * $this->mode = 'depth' ??? * $this->bgcolorgrid * $this->datacolor + * $this->shownodatagraph * * @param string $file Image file name to use to save onto disk (also used as javascript unique id) - * @param string $fileurl Url path to show image if saved onto disk + * @param string $fileurl Url path to show image if saved onto disk. Never used here. * @return void */ private function draw_jflot($file,$fileurl) @@ -849,7 +850,14 @@ class DolGraph $this->stringtoshow =''."\n"; if (! empty($this->title)) $this->stringtoshow.='
    '.$this->title.'
    '; + if (! empty($this->shownographyet)) + { + $this->stringtoshow.='
    '; + $this->stringtoshow.='
    '.$langs->trans("NotEnoughDataYet").'
    '; + return; + } $this->stringtoshow.='
    '."\n"; + $this->stringtoshow.=''; } - else print 'BadValueForPArameterType'; + else print 'BadValueForParameterType'; } } diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index adae0e1800e..4b69e2c0dde 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -28,6 +28,7 @@ NoTemplateDefined=No template defined for this email type AvailableVariables=Available substitution variables NoTranslation=No translation NoRecordFound=No record found +NotEnoughDataYet=Not enough data NoError=No error Error=Error Errors=Errors diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index b59d725fecd..9f9dbc3bd2c 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -454,7 +454,7 @@ if ($action == 'create' && $user->rights->projet->creer) // Ref $suggestedref=($_POST["ref"]?$_POST["ref"]:$defaultref); - print ''.$langs->trans("Ref").''; + print ''.$langs->trans("Ref").''; print ' '.$form->textwithpicto('', $langs->trans("YouCanCompleteRef", $suggestedref)); print ''; @@ -532,7 +532,7 @@ if ($action == 'create' && $user->rights->projet->creer) // Description print ''.$langs->trans("Description").''; print ''; - print ''; + print ''; print ''; // Other options @@ -650,7 +650,7 @@ else // Ref $suggestedref=$object->ref; - print ''.$langs->trans("Ref").''; + print ''.$langs->trans("Ref").''; print ''; print ' '.$form->textwithpicto('', $langs->trans("YouCanCompleteRef", $suggestedref)); print ''; @@ -721,7 +721,7 @@ else // Description print ''.$langs->trans("Description").''; print ''; - print ''; + print ''; print ''; // Other options diff --git a/htdocs/projet/graph_opportunities.inc.php b/htdocs/projet/graph_opportunities.inc.php index 558bd7307ee..199840bb1c6 100644 --- a/htdocs/projet/graph_opportunities.inc.php +++ b/htdocs/projet/graph_opportunities.inc.php @@ -16,6 +16,7 @@ if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) $i = 0; $totalnb=0; + $totaloppnb=0; $totalamount=0; $ponderated_opp_amount=0; $valsnb=array(); @@ -32,6 +33,7 @@ if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) $valsnb[$obj->opp_status]=$obj->nb; $valsamount[$obj->opp_status]=$obj->opp_amount; $totalnb+=$obj->nb; + if ($obj->opp_status) $totaloppnb+=$obj->nb; $totalamount+=$obj->opp_amount; $ponderated_opp_amount+=$obj->ponderated_opp_amount; } @@ -71,8 +73,8 @@ if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) if ($conf->use_javascript_ajax) { print ''; - $data=array('series'=>$dataseries); - dol_print_graph('stats',400,180,$data,1,'pie',0,'',0); + $data=array('series'=>$dataseries); + dol_print_graph('stats',400,180,$data,1,'pie',0,'',0,$totaloppnb?0:1); print ''; } //if ($totalinprocess != $total) diff --git a/htdocs/theme/eldy/img/nographyet.svg b/htdocs/theme/eldy/img/nographyet.svg new file mode 100644 index 00000000000..ba3b9faf92a --- /dev/null +++ b/htdocs/theme/eldy/img/nographyet.svg @@ -0,0 +1,875 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Icon Set Graph + 2012-09-06T20:29:21 + Check others icons on my "Minimal Icon Set" collection.\nSet of simple icons useful for gui design and applications use interface. Icons representing various graph and plotting + https://openclipart.org/detail/172197/icon-set-graph-by-mi_brami-172197 + + + mi_brami + + + + + Icon + area + b&w + barcode + bars + black + data + graph + gray + icon + pie + plot + round + scatter + table + transparent + white + xy + + + + + + + + + + + diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index f7519e16f61..91fa27e5c33 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -2878,9 +2878,20 @@ td.legendLabel { padding: 2px 2px 2px 0 !important; } .logo_setup { - content:url(); + content:url(); /* content is used to best fit the container */ display: inline-block; } +.nographyet +{ + content:url(); + display: inline-block; + opacity: 0.1; + background-repeat: no-repeat; +} +.nographyettext +{ + opacity: 0.5; +} div.titre { font-family: ; diff --git a/htdocs/theme/md/img/nographyet.svg b/htdocs/theme/md/img/nographyet.svg new file mode 100644 index 00000000000..ba3b9faf92a --- /dev/null +++ b/htdocs/theme/md/img/nographyet.svg @@ -0,0 +1,875 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + Icon Set Graph + 2012-09-06T20:29:21 + Check others icons on my "Minimal Icon Set" collection.\nSet of simple icons useful for gui design and applications use interface. Icons representing various graph and plotting + https://openclipart.org/detail/172197/icon-set-graph-by-mi_brami-172197 + + + mi_brami + + + + + Icon + area + b&w + barcode + bars + black + data + graph + gray + icon + pie + plot + round + scatter + table + transparent + white + xy + + + + + + + + + + + diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 9b5bbc5966e..35c1220a0b8 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -2707,9 +2707,20 @@ td.legendLabel { padding: 2px 2px 2px 0 !important; } .logo_setup { - content:url(); + content:url(); /* content is used to best fit the container */ display: inline-block; } +.nographyet +{ + content:url(); + display: inline-block; + opacity: 0.1; + background-repeat: no-repeat; +} +.nographyettext +{ + opacity: 0.5; +} div.titre { font-family: ; From 366db31a9ed11f1d405a235ee2edf1fb97a4dd12 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 13:38:44 +0200 Subject: [PATCH 43/50] Make css more simple --- htdocs/accountancy/admin/productaccount.php | 4 +- htdocs/contact/list.php | 2 +- htdocs/core/lib/usergroups.lib.php | 90 ++++++++++----------- htdocs/theme/eldy/style.css.php | 38 ++++----- htdocs/theme/md/style.css.php | 81 +++++++++++-------- 5 files changed, 113 insertions(+), 102 deletions(-) diff --git a/htdocs/accountancy/admin/productaccount.php b/htdocs/accountancy/admin/productaccount.php index d6f21960a49..80ed3f6fb47 100644 --- a/htdocs/accountancy/admin/productaccount.php +++ b/htdocs/accountancy/admin/productaccount.php @@ -263,9 +263,9 @@ if ($result) { print "\n"; - print '
    '; + print '
    '; - print "
    \n"; + print "

    \n"; if (! empty($msg)) { print $msg; diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 702ecb2042f..ac54e1aaa5f 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -483,7 +483,7 @@ if ($result) print ''; print ''; } - if (! empty($arrayfields['p.lastname']['checked'])) + if (! empty($arrayfields['p.firstname']['checked'])) { print ''; print ''; diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 8b9c6c3406f..dd135c10b24 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -479,7 +479,7 @@ function show_theme($fuser,$edit=0,$foruserprofile=false) if ($color) print ''; else print $langs->trans("Default"); } - print '   ('.$langs->trans("Default").': 7882aa, '.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; + print '   ('.$langs->trans("Default").': 515870, '.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print ''; } @@ -535,6 +535,50 @@ function show_theme($fuser,$edit=0,$foruserprofile=false) print ''; } + // Text LinkColor + if ($foruserprofile) + { + /*$var=!$var; + print ''; + print ''.$langs->trans("TopMenuBackgroundColor").''; + print ''.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_TOPMENU_BACK1:$langs->trans("Default")).''; + print 'conf->THEME_ELDY_TOPMENU_BACK1)?" checked":""); + print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo + print '> '.$langs->trans("UsePersonalValue").''; + print ''; + if ($edit) + { + print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''),'THEME_ELDY_TOPMENU_BACK1','formcolor',1).' '; + } + else + { + $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''); + if ($color) print ''; + else print ''; + } + if ($edit) print '
    ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; + print '';*/ + } + else + { + $var=!$var; + print ''; + print ''.$langs->trans("LinkColor").''; + print ''; + if ($edit) + { + print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTLINK,array()),''),'THEME_ELDY_TEXTLINK','formcolor',1).' '; + } + else + { + $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTLINK,array()),''); + if ($color) print ''; + else print $langs->trans("Default"); + } + print '   ('.$langs->trans("Default").': 000078, '.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; + print ''; + } + // Use Hover $var=!$var; if ($foruserprofile) @@ -579,50 +623,6 @@ function show_theme($fuser,$edit=0,$foruserprofile=false) print ''; } - // TopMenuBackgroundColor - if ($foruserprofile) - { - /*$var=!$var; - print ''; - print ''.$langs->trans("TopMenuBackgroundColor").''; - print ''.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_TOPMENU_BACK1:$langs->trans("Default")).''; - print 'conf->THEME_ELDY_TOPMENU_BACK1)?" checked":""); - print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo - print '> '.$langs->trans("UsePersonalValue").''; - print ''; - if ($edit) - { - print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''),'THEME_ELDY_TOPMENU_BACK1','formcolor',1).' '; - } - else - { - $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1,array()),''); - if ($color) print ''; - else print ''; - } - if ($edit) print '
    ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; - print '';*/ - } - else - { - $var=!$var; - print ''; - print ''.$langs->trans("LinkColor").''; - print ''; - if ($edit) - { - print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTLINK,array()),''),'THEME_ELDY_TEXTLINK','formcolor',1).' '; - } - else - { - $color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTLINK,array()),''); - if ($color) print ''; - else print $langs->trans("Default"); - } - print '   ('.$langs->trans("Default").': 000078, '.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; - print ''; - } - print ''; } diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 91fa27e5c33..bbef40dde32 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -79,7 +79,7 @@ $dol_use_jmobile=$conf->dol_use_jmobile; //var_dump($user->conf->THEME_ELDY_RGB); // Colors -$colorbackhmenu1='120,130,170'; // topmenu +$colorbackhmenu1='110,120,160'; // topmenu $colorbackvmenu1='255,255,255'; // vmenu $colortopbordertitle1='40,40,40'; // top border of title $colorbacktitle1='230,230,230'; // title of tables,list @@ -97,14 +97,15 @@ $colortext='0,0,0'; $colortextlink='0,0,120'; $fontsize='13'; $fontsizesmaller='11'; -$usegradient=1; -$useboldtitle=1; +$usegradienttop=(isset($conf->global->THEME_ELDY_TOPMENU_BACK1)?0:1); +$usegradienttitle=(isset($conf->global->THEME_ELDY_BACKTITLE1)?0:1); +$useboldtitle=(isset($conf->global->THEME_ELDY_USEBOLDTITLE)?$conf->global->THEME_ELDY_USEBOLDTITLE:1); // Case of option always editable if (! isset($conf->global->THEME_ELDY_BACKBODY)) $conf->global->THEME_ELDY_BACKBODY=$colorbackbody; -if (! isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) $conf->global->THEME_ELDY_TOPMENU_BACK1='120,130,170'; +if (! isset($conf->global->THEME_ELDY_TOPMENU_BACK1)) $conf->global->THEME_ELDY_TOPMENU_BACK1=$colorbackhmenu1; if (! isset($conf->global->THEME_ELDY_BACKTITLE1)) $conf->global->THEME_ELDY_BACKTITLE1=$colorbacktitle1; -if (! isset($conf->global->THEME_ELDY_USE_HOVER)) $conf->global->THEME_ELDY_USE_HOVER=='238,246,252'; +if (! isset($conf->global->THEME_ELDY_USE_HOVER)) $conf->global->THEME_ELDY_USE_HOVER==$colorbacklinepairhover; if (! isset($conf->global->THEME_ELDY_TEXTTITLENOTAB)) $conf->global->THEME_ELDY_TEXTTITLENOTAB=$colortexttitlenotab; if (! isset($conf->global->THEME_ELDY_TEXTLINK)) $conf->global->THEME_ELDY_TEXTLINK=$colortextlink; @@ -803,7 +804,7 @@ div#id-top { display:none; background: rgb(); - + background-image: linear-gradient(top, rgba(255,255,255,.1) 0%, rgba(0,0,0,.4) 100%); background-image: -o-linear-gradient(top, rgba(255,255,255,.1) 0%, rgba(0,0,0,.4) 100%); background-image: -moz-linear-gradient(top, rgba(255,255,255,.1) 0%, rgba(0,0,0,.4) 100%); @@ -882,7 +883,7 @@ ul.tmenu { /* t r b l */ } ul.tmenu li { /* We need this to have background color when menu entry wraps on new lines */ background: rgb(); - + background-image: linear-gradient(top, rgba(255,255,255,.1) 0%, rgba(0,0,0,.4) 100%); background-image: -o-linear-gradient(top, rgba(255,255,255,.1) 0%, rgba(0,0,0,.4) 100%); background-image: -moz-linear-gradient(top, rgba(255,255,255,.1) 0%, rgba(0,0,0,.4) 100%); @@ -2205,17 +2206,8 @@ table.liste, table.noborder, table.formdoc, div.noborder { } table.liste tr, table.noborder tr, div.noborder form { border-top-color: #FEFEFE; - - border-right-width: 1px; - border-right-color: #BBB; - border-right-style: solid; - - border-left-width: 1px; - border-left-color: #BBB; - border-left-style: solid; min-height: 20px; } - table.liste th, table.noborder th { padding: 10px 2px 10px 3px; /* t r b l */ } @@ -2526,13 +2518,13 @@ div.liste_titre { padding-top: 2px; padding-bottom: 2px; - border-right-width: 1px; + /*border-right-width: 1px; border-right-color: #BBB; border-right-style: solid; border-left-width: 1px; border-left-color: #BBB; - border-left-style: solid; + border-left-style: solid;*/ border-top-width: 1px; border-top-color: #BBB; @@ -2560,13 +2552,14 @@ div.liste_titre, tr.liste_titre, tr.liste_titre_sel, form.liste_titre, form.list color: #000 !important;*/ /* TO MATCH ELDY */ - /*background: rgb();*/ - + background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); background-image: linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + + background: rgb(); font-weight: ; @@ -2712,13 +2705,14 @@ tr.box_titre { color: #000 !important;*/ /* TO MATCH ELDY */ - /* background: rgb(); */ - + background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); background-image: linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(,0.3) 100%); + + background: rgb(); color: rgb(); diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 35c1220a0b8..b79b5c2404a 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -82,7 +82,8 @@ $dol_use_jmobile=$conf->dol_use_jmobile; // Colors $colorbackhmenu1='0,0,80'; // topmenu $colorbackvmenu1='255,255,255'; // vmenu -$colorbacktitle1='230,230,230'; // title of array +$colortopbordertitle1='40,40,40'; // top border of tables-lists title +$colorbacktitle1='230,230,230'; // title of tables-lists $colorbacktabcard1='255,255,255'; // card $colorbacktabactive='234,234,234'; $colorbacklineimpair1='255,255,255'; // line impair @@ -97,8 +98,8 @@ $colortext='0,0,0'; $colortextlink='0,0,120'; $fontsize='13'; $fontsizesmaller='11'; -$usegradient=1; -$useboldtitle=1; +$usegradient=0; +$useboldtitle=(isset($conf->global->THEME_ELDY_USEBOLDTITLE)?$conf->global->THEME_ELDY_USEBOLDTITLE:1); // Case of option always editable if (! isset($conf->global->THEME_ELDY_BACKBODY)) $conf->global->THEME_ELDY_BACKBODY=$colorbackbody; @@ -343,7 +344,7 @@ input:-moz-placeholder { color:#ccc; } legend { margin-bottom: 8px; } -fieldset { border: 1px solid #AAAAAA !important; box-shadow: 2px 2px 3px #f4f4f4; } +fieldset { border: 1px solid #AAAAAA !important; } .button, sbmtConnexion { @@ -1714,11 +1715,13 @@ div.tabBar { background: rgb(); + /* -moz-box-shadow: 3px 3px 4px #f4f4f4; -webkit-box-shadow: 3px 3px 4px #f4f4f4; box-shadow: 3px 3px 4px #f4f4f4; + */ } div.tabsAction { @@ -2043,17 +2046,29 @@ table.liste, table.noborder, table.formdoc, div.noborder { border-collapse: separate !important; border-spacing: 0px; - border-width: 1px; - border-color: #BBB; - border-style: solid; + border-top-width: 1px; + border-top-color: rgb(); + border-top-style: solid; +/* border-right-width: 1px; + border-right-color: #BBB; + border-right-style: solid; + + border-left-width: 1px; + border-left-color: #BBB; + border-left-style: solid; +*/ + border-bottom-width: 1px; + border-bottom-color: #BBB; + border-bottom-style: solid; + margin: 0px 0px 8px 0px; /* -moz-box-shadow: 2px 2px 4px #CCC; -webkit-box-shadow: 2px 2px 4px #CCC; box-shadow: 2px 2px 4px #CCC; */ - box-shadow: 0 0 3px rgba(0,0,0,0.16); + /* box-shadow: 0 0 3px rgba(0,0,0,0.16); */ -moz-border-radius: 0.1em; -webkit-border-radius: 0.1em; @@ -2350,24 +2365,28 @@ div.liste_titre { padding-top: 2px; padding-bottom: 2px; - border-right-width: 1px; + /*border-right-width: 1px; border-right-color: #BBB; border-right-style: solid; border-left-width: 1px; border-left-color: #BBB; - border-left-style: solid; + border-left-style: solid;*/ border-top-width: 1px; border-top-color: #BBB; border-top-style: solid; } div.liste_titre_bydiv { + border-top-width: 1px; + border-top-color: rgb(); + border-top-style: solid; + box-shadow: none; border-collapse: collapse; display: table; padding: 2px 0px 2px 0; - width: calc(100% - 1px); /* 1px more, i don't know why */ + width: 100%; /* 1px more, i don't know why */ } tr.liste_titre, tr.liste_titre_sel, form.liste_titre, form.liste_titre_sel, table.dataTable.tr { @@ -2376,20 +2395,19 @@ tr.liste_titre, tr.liste_titre_sel, form.liste_titre, form.liste_titre_sel, tabl div.liste_titre, tr.liste_titre, tr.liste_titre_sel, form.liste_titre, form.liste_titre_sel, table.dataTable thead tr { /* TO MATCH BOOTSTRAP */ - background: #ddd; + /* background: #ddd; */ /* TO MATCH ELDY */ - /* - background: rgb(); - background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); - background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); - background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); - background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); - background-image: linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); + background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + + background: rgb(); font-weight: ; - */ color: rgb(); font-family: ; @@ -2495,7 +2513,7 @@ div.tabBar .noborder { } span.boxstatstext { - opacity: 0.8; + opacity: 0.9; line-height: 18px; } span.boxstatsindicator { @@ -2525,27 +2543,26 @@ span.dashboardlineko { .box { padding-right: 0px; padding-left: 0px; - padding-bottom: 4px; + padding-bottom: 12px; } tr.box_titre { height: 26px !important; /* TO MATCH BOOTSTRAP */ - background: #ddd; - color: #000 !important; + /*background: #ddd; + color: #000 !important; */ /* TO MATCH ELDY */ - /* - background: rgb(); - background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); - background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); - background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); - background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); - background-image: linear-gradient(bottom, rgba(0,0,0,0.3) 0%, rgba(250,250,250,0.3) 100%); + background-image: -o-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: -moz-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: -webkit-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: -ms-linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + background-image: linear-gradient(bottom, rgba(0,0,0,0.1) 0%, rgba(250,250,250,0.3) 100%); + + background: rgb(); - */ background-repeat: repeat-x; color: rgb(); From 2cc24db6a28adba86231f2e633fe08f5f1f3bbb4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 13:45:54 +0200 Subject: [PATCH 44/50] Fix typo --- htdocs/core/lib/agenda.lib.php | 2 +- htdocs/langs/en_US/agenda.lang | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/htdocs/core/lib/agenda.lib.php b/htdocs/core/lib/agenda.lib.php index 7e02cbe4679..bfd9314f945 100644 --- a/htdocs/core/lib/agenda.lib.php +++ b/htdocs/core/lib/agenda.lib.php @@ -76,7 +76,7 @@ function print_actions_filter($form, $canedit, $status, $year, $month, $day, $sh print $langs->trans("ActionsToDoBy").'   '; print ''; print $form->select_dolusers($filtert, 'usertodo', 1, '', ! $canedit, '', '', 0, 0, 0, '', 0, '', 'maxwidth300'); - if (empty($conf->dol_optimize_smallscreen)) print '   '.$langs->trans("or") . ' '.$langs->trans("Group").'   '; + if (empty($conf->dol_optimize_smallscreen)) print '   '.$langs->trans("or") . ' '.$langs->trans("ToUserOfGroup").'   '; print $form->select_dolgroups($usergroupid, 'usergroup', 1, '', ! $canedit); print ''; diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang index 760fde2686d..a01e0c6c412 100644 --- a/htdocs/langs/en_US/agenda.lang +++ b/htdocs/langs/en_US/agenda.lang @@ -17,6 +17,7 @@ MyEvents=My events OtherEvents=Other events ListOfActions=List of events Location=Location +ToUserOfGroup=To any user in group EventOnFullDay=Event on all day(s) SearchAnAction= Search an event/task MenuToDoActions=All incomplete events From 25b7f0ab625fdb1da0107932486d74a2c918d4ea Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 17:11:12 +0200 Subject: [PATCH 45/50] FIX Remove a total that has no sense --- htdocs/compta/charges/index.php | 6 +- htdocs/compta/sociales/charges.php | 72 +++++++++++-------- .../sociales/class/chargesociales.class.php | 17 ++++- 3 files changed, 63 insertions(+), 32 deletions(-) diff --git a/htdocs/compta/charges/index.php b/htdocs/compta/charges/index.php index 1a0760d1fd3..b90e7cac3cb 100644 --- a/htdocs/compta/charges/index.php +++ b/htdocs/compta/charges/index.php @@ -200,7 +200,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) $i++; } print ''.$langs->trans("Total").''; - print ''.price($total).""; + print ''; // A total here has no sense print ' '; print ' '; print ' '; @@ -278,7 +278,7 @@ if (! empty($conf->tax->enabled) && $user->rights->tax->charges->lire) $i++; } print ''.$langs->trans("Total").''; - print ''.price($total).""; + print ''.price($total).''; print ' '; print ' '; print ''.price($total).""; @@ -463,7 +463,7 @@ if (! empty($conf->salaries->enabled) && $user->rights->salaries->read) $i++; } print ''.$langs->trans("Total").''; - print ''.""; + print ''; // A total here has no sense print ' '; print ' '; print ''.price($total).""; diff --git a/htdocs/compta/sociales/charges.php b/htdocs/compta/sociales/charges.php index 2a9894be87a..abcb5e0ad06 100644 --- a/htdocs/compta/sociales/charges.php +++ b/htdocs/compta/sociales/charges.php @@ -39,6 +39,7 @@ $socid = GETPOST('socid','int'); if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'tax', $id, 'chargesociales','charges'); +$object = new ChargeSociales($db); @@ -49,19 +50,32 @@ $result = restrictedArea($user, 'tax', $id, 'chargesociales','charges'); /* *************************************************************************** */ // Classify paid -if ($action == 'confirm_paid' && $confirm == 'yes') +if ($action == 'confirm_paid' && $user->rights->tax->charges->creer && $confirm == 'yes') { - $chargesociales = new ChargeSociales($db); - $chargesociales->fetch($id); - $result = $chargesociales->set_paid($user); + $object->fetch($id); + $result = $object->set_paid($user); +} + +if ($action == 'reopen' && $user->rights->tax->charges->creer) { + $result = $object->fetch($id); + if ($object->paye) + { + $result = $object->set_unpaid($user); + if ($result > 0) + { + header('Location: ' . $_SERVER["PHP_SELF"] . '?id=' . $id); + exit(); + } else { + setEventMessages($object->error, $object->errors, 'errors'); + } + } } // Delete social contribution if ($action == 'confirm_delete' && $confirm == 'yes') { - $chargesociales=new ChargeSociales($db); - $chargesociales->fetch($id); - $result=$chargesociales->delete($user); + $object->fetch($id); + $result=$object->delete($user); if ($result > 0) { header("Location: index.php"); @@ -69,7 +83,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes') } else { - setEventMessages($chargesociales->error, $chargesociales->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } @@ -77,8 +91,8 @@ if ($action == 'confirm_delete' && $confirm == 'yes') // Add social contribution if ($action == 'add' && $user->rights->tax->charges->creer) { - $dateech=@dol_mktime(GETPOST('echhour'),GETPOST('echmin'),GETPOST('echsec'),GETPOST('echmonth'),GETPOST('echday'),GETPOST('echyear')); - $dateperiod=@dol_mktime(GETPOST('periodhour'),GETPOST('periodmin'),GETPOST('periodsec'),GETPOST('periodmonth'),GETPOST('periodday'),GETPOST('periodyear')); + $dateech=dol_mktime(GETPOST('echhour'),GETPOST('echmin'),GETPOST('echsec'),GETPOST('echmonth'),GETPOST('echday'),GETPOST('echyear')); + $dateperiod=dol_mktime(GETPOST('periodhour'),GETPOST('periodmin'),GETPOST('periodsec'),GETPOST('periodmonth'),GETPOST('periodday'),GETPOST('periodyear')); $amount=price2num(GETPOST('amount')); $actioncode=GETPOST('actioncode'); if (! $dateech) @@ -108,18 +122,16 @@ if ($action == 'add' && $user->rights->tax->charges->creer) } else { - $chargesociales=new ChargeSociales($db); + $object->type=$actioncode; + $object->lib=GETPOST('label'); + $object->date_ech=$dateech; + $object->periode=$dateperiod; + $object->amount=$amount; - $chargesociales->type=$actioncode; - $chargesociales->lib=GETPOST('label'); - $chargesociales->date_ech=$dateech; - $chargesociales->periode=$dateperiod; - $chargesociales->amount=$amount; - - $id=$chargesociales->create($user); + $id=$object->create($user); if ($id <= 0) { - setEventMessages($chargesociales->error, $chargesociales->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); $action='create'; } } @@ -153,18 +165,17 @@ if ($action == 'update' && ! $_POST["cancel"] && $user->rights->tax->charges->cr } else { - $chargesociales=new ChargeSociales($db); - $result=$chargesociales->fetch($id); + $result=$object->fetch($id); - $chargesociales->lib=GETPOST('label'); - $chargesociales->date_ech=$dateech; - $chargesociales->periode=$dateperiod; - $chargesociales->amount=price2num($amount); + $object->lib=GETPOST('label'); + $object->date_ech=$dateech; + $object->periode=$dateperiod; + $object->amount=price2num($amount); - $result=$chargesociales->update($user); + $result=$object->update($user); if ($result <= 0) { - setEventMessages($chargesociales->error, $chargesociales->errors, 'errors'); + setEventMessages($object->error, $object->errors, 'errors'); } } } @@ -178,7 +189,6 @@ if ($action == 'confirm_clone' && $confirm == 'yes' && ($user->rights->tax->char $originalId = $id; - $object = new ChargeSociales($db); $object->fetch($id); if ($object->id > 0) @@ -499,6 +509,12 @@ if ($id > 0) { print "
    \n"; + // Reopen + if ($object->paye && $user->rights->tax->charges->creer) + { + print "id&action=reopen\">".$langs->trans("ReOpen").""; + } + // Edit if ($object->paye == 0 && $user->rights->tax->charges->creer) { diff --git a/htdocs/compta/sociales/class/chargesociales.class.php b/htdocs/compta/sociales/class/chargesociales.class.php index 7712fd09029..1499c79d683 100644 --- a/htdocs/compta/sociales/class/chargesociales.class.php +++ b/htdocs/compta/sociales/class/chargesociales.class.php @@ -339,7 +339,22 @@ class ChargeSociales extends CommonObject if ($return) return 1; else return -1; } - + /** + * Remove tag payed on social contribution + * + * @param User $user Object user making change + * @return int <0 if KO, >0 if OK + */ + function set_unpaid($user) + { + $sql = "UPDATE ".MAIN_DB_PREFIX."chargesociales SET"; + $sql.= " paye = 0"; + $sql.= " WHERE rowid = ".$this->id; + $return = $this->db->query($sql); + if ($return) return 1; + else return -1; + } + /** * Retourne le libelle du statut d'une charge (impaye, payee) * From 0ef1be93642d66a110d881ab78cd5852b2526a8c Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 18:07:34 +0200 Subject: [PATCH 46/50] Prepare 3.9.1 --- ChangeLog | 65 +++++++++++++++++++++++++++++++++++++++++ htdocs/filefunc.inc.php | 2 +- 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 84d05ba8ea7..120c19ca5e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,71 @@ Upgrading to any other version or any other database system is abolutely require make a Dolibarr upgrade. +***** ChangeLog for 3.9.1 compared to 3.9.* ***** +FIX: #3815 Call to undefined function local_by_date(). +FIX: #3815 With higher quality +FIX: #4424 Missing email of user popup in supplier orders area +FIX: #4442 Missing translation in Banks menu +FIX: #4737 Bank transacion type selector translation is cropped +FIX: #4742 Able to delete a supplier invoice with a registered payment +FIX: #4743 UI glitch in project summary page +FIX: #4747 Missing UI background when registering a supplier invoice payment +FIX: #4748 Supplier invoice payment confirmation amount is not translated +FIX: #4766 VAT not shown in supplier invoice popup +FIX: #4784 +FIX: #4809 Duplicate functions with different content +FIX: #4812 +FIX: #4839 +FIX: #4851 Project selector in supplier invoices shows the project label twice +FIX: #4870 +FIX: #4874 SQL error when listing users +FIX: #4880 +FIX: #4961 +FIX: #4989 +FIX: A not enabled field for list must not into fields to add +FIX: Bad color of message password changed +FIX: Bad error and style message when changing its own login +FIX: Bad function name call on delete +FIX: Bad include and param for project numbering module call +FIX: bad translation language loaded FIX: When changing thirdparty on event card, the showempty option of contact was lost. FIX: Bad placeholder shown on combo to select a thirdparty. +FIX: Bad vat definition when using POS module +FIX: Box disabled because bugged +FIX: Can not select a commercial on the creation of a third +FIX: Check of EAN13 barcode when mask was set to use 13 digits instead of 12 +FIX: correct display of minimum buying price +FIX: Creation of thumb image for size "small" was not done. +FIX: Damn, where was the project ref ? +FIX: Default vat is not set correctly when an error occured and we use VAT identified by a code. +FIX: dont retrieve new buying price on margin display +FIX: Duplicate records into export +FIX: Each time we edit a line, we loose the unit price. +FIX: Email templates not compatible with Multicompany +FIX: Export must use a left join to not loose lines +FIX: fetchAllEMailTemplate +FIX: Filter/search on extrafields on lists +FIX: finished parameters not used +FIX: Generated thumbs must always use the png format so using thumbs can work. +FIX: Hook resprint be printed +FIX: image extension must be in lower case +FIX: Missing clean of criteria +FIX: Missing database escaping on supplier price insert/update +FIX: Missing function +FIX: Multiprice generator didn't recalculate prices if only the price_base_type property changes +FIX: Not removing code into vatrate. +FIX: Not showing sellprice properly on product list +FIX: Parsing of amount to pay vat +FIX: PHPCS +FIX: PMP is deprecated at warehouse level +FIX: real min buying price +FIX: Same term to create than other objects +FIX: Some records were lost into margin per product report +FIX: systematic rounding causes prices to be updated without reason +FIX: Template email must take care of positino column +FIX: VAT rate can be negative. Example spain selling to morroco. +FIX: When cloning an order the order result from clone must be now +FIX: When using option Price per level, when adding a predefined product, the vat for customer was not correctly set. + + ***** ChangeLog for 3.9.0 compared to 3.8.* ***** For users: NEW: A new and more modern look for "eldy" theme. diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php index bf7357fb2e1..db8a5869914 100644 --- a/htdocs/filefunc.inc.php +++ b/htdocs/filefunc.inc.php @@ -31,7 +31,7 @@ */ if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE','Dolibarr'); -if (! defined('DOL_VERSION')) define('DOL_VERSION','3.9.0'); +if (! defined('DOL_VERSION')) define('DOL_VERSION','3.9.1'); if (! defined('EURO')) define('EURO',chr(128)); From a99b7ddee6958848a41b4bea79e35a79578ab655 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 18:12:31 +0200 Subject: [PATCH 47/50] Fix PHPCS --- htdocs/core/class/commonobject.class.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index a4dca05ce82..941f9dddd27 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -4230,12 +4230,14 @@ abstract class CommonObject } else return 0; } + /** * Update an exta field value for the current object. * Data to describe values to insert/update are stored into $this->array_options=array('options_codeforfield1'=>'valueforfield1', 'options_codeforfield2'=>'valueforfield2', ...) * This function delte record with all extrafields and insert them again from the array $this->array_options. - * $key key of the extrafield - * @return int -1=error, O=did nothing, 1=OK + * + * @param string $key Key of the extrafield + * @return int -1=error, O=did nothing, 1=OK */ function updateExtraField($key) { From bfc5be1aadab908cb82f5954fcfde06b9f7a2deb Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 19:07:32 +0200 Subject: [PATCH 48/50] FIX Fix and move dolGetFirstLine function into main FIX Hang on ->client not defined --- htdocs/core/class/html.form.class.php | 4 +-- htdocs/core/lib/functions.lib.php | 26 ++++++++++++++++++- htdocs/core/lib/functions2.lib.php | 20 -------------- htdocs/core/lib/pdf.lib.php | 2 +- .../fichinter/doc/pdf_soleil.modules.php | 6 ++--- htdocs/fichinter/list.php | 5 ++-- htdocs/fourn/commande/card.php | 2 +- htdocs/langs/en_US/interventions.lang | 2 +- 8 files changed, 36 insertions(+), 31 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 820db4f308f..f4b8bfc610c 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2060,7 +2060,7 @@ class Form if (! empty($conf->use_javascript_ajax) && ! empty($conf->global->PRODUIT_USE_SEARCH_TO_SELECT)) { - if (!empty($conf->global->SUPPLIERORDER_WITH_NOPRICEDEFINED)) + if (!empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) { print ''; } @@ -2071,7 +2071,7 @@ class Form } else { - if (!empty($conf->global->SUPPLIERORDER_WITH_NOPRICEDEFINED)) + if (!empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) { print ''; print ''; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index c4e6b3b7fea..0634d4c6746 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -4285,6 +4285,29 @@ function dol_string_nohtmltag($StringHtml,$removelinefeed=1,$pagecodeto='UTF-8') } +/** + * Return first line of text. Cut will depends if content is HTML or not. + * + * @param string $text Input text + * @return string Output text + * @see dol_nboflines_bis + */ +function dolGetFirstLineOfText($text) +{ + if (dol_textishtml($text)) + { + $firstline=preg_replace('/]*>.*$/s','',$text); // The s pattern modifier means the . can match newline characters + $firstline=preg_replace('/]*>.*$/s','',$firstline); // The s pattern modifier means the . can match newline characters + + } + else + { + $firstline=preg_replace('/[\n\r].*/','',$text); + } + return $firstline.((strlen($firstline) != strlen($text))?'...':''); +} + + /** * Replace CRLF in string with a HTML BR tag * @@ -4292,6 +4315,7 @@ function dol_string_nohtmltag($StringHtml,$removelinefeed=1,$pagecodeto='UTF-8') * @param int $nl2brmode 0=Adding br before \n, 1=Replacing \n by br * @param bool $forxml false=Use
    , true=Use
    * @return string String encoded + * @see dol_nboflines, dolGetFirstLineOfText */ function dol_nl2br($stringtoencode,$nl2brmode=0,$forxml=false) { @@ -4429,7 +4453,7 @@ function dol_string_is_good_iso($s) * @param string $s String to check * @param int $maxchar Not yet used * @return int Number of lines - * @see dol_nboflines_bis + * @see dol_nboflines_bis, dolGetFirstLineOfText */ function dol_nboflines($s,$maxchar=0) { diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index e9ec126e328..5de04c6718e 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -30,26 +30,6 @@ // Enable this line to trace path when function is called. //print xdebug_print_function_stack('Functions2.lib was called');exit; -/** - * Return first line of text. Cut will depends if content is HTML or not. - * - * @param string $text Input text - * @return string Output text - * @see dol_nboflines_bis - */ -function dolGetFirstLineOfText($text) -{ - if (dol_textishtml($text)) - { - $firstline=preg_replace('/]*>.*$/s','',$text); // The s pattern modifier means the . can match newline characters - } - else - { - $firstline=preg_replace('/[\n\r].*/','',$text); - } - return $firstline.((strlen($firstline) != strlen($text))?'...':''); -} - /** * Same function than javascript unescape() function but in PHP. * diff --git a/htdocs/core/lib/pdf.lib.php b/htdocs/core/lib/pdf.lib.php index 51cb77ea1a4..6e4c77fe1d2 100644 --- a/htdocs/core/lib/pdf.lib.php +++ b/htdocs/core/lib/pdf.lib.php @@ -358,7 +358,7 @@ function pdfBuildThirdpartyName($thirdparty, Translate $outputlangs, $includeali } elseif ($thirdparty instanceof Contact) { $socname = $thirdparty->socname; } else { - throw new InvalidArgumentException(); + throw new InvalidArgumentException('Parameter 1=$thirdparty is not a Societe nor Contact'); } return $outputlangs->convToOutputCharset($socname); diff --git a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php index 08c08474981..f95608fee05 100644 --- a/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php +++ b/htdocs/core/modules/fichinter/doc/pdf_soleil.modules.php @@ -615,12 +615,12 @@ class pdf_soleil extends ModelePDFFicheinter if ($usecontact && !empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $thirdparty = $object->contact; } else { - $thirdparty = $object->client; + $thirdparty = $object->thirdparty; } - $carac_client_name= pdfBuildThirdpartyName($thirdparty, $outputlangs); + $carac_client_name=pdfBuildThirdpartyName($thirdparty, $outputlangs); - $carac_client=pdf_build_address($outputlangs, $this->emetteur, $object->client, (isset($object->contact)?$object->contact:''), $usecontact, 'target',$object); + $carac_client=pdf_build_address($outputlangs, $this->emetteur, $object->thirdparty, (isset($object->contact)?$object->contact:''), $usecontact, 'target',$object); // Show recipient $widthrecbox=100; diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php index d86c2b86274..88224a487cf 100644 --- a/htdocs/fichinter/list.php +++ b/htdocs/fichinter/list.php @@ -227,10 +227,11 @@ if ($result) $companystatic->client=$objp->client; print $companystatic->getNomUrl(1,'',44); print ''; - print ''.dol_htmlentitiesbr(dol_trunc($objp->description,20)).''; + print ''.dol_trunc(dolGetFirstLineOfText($objp->description),48).''; if (empty($conf->global->FICHINTER_DISABLE_DETAILS)) { - print ''.dol_htmlentitiesbr(dol_trunc($objp->descriptiondetail,20)).''; + //print ''.dol_trunc(dol_escape_htmltag(dolGetFirstLineOfText($objp->descriptiondetail)),48).''; + print ''.dolGetFirstLineOfText($objp->descriptiondetail).''; print ''.dol_print_date($db->jdate($objp->dp),'dayhour')."\n"; print ''.convertSecondToTime($objp->duree).''; } diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php index 509b4ca0437..8b9c6267b18 100644 --- a/htdocs/fourn/commande/card.php +++ b/htdocs/fourn/commande/card.php @@ -346,7 +346,7 @@ if (empty($reshook)) { $productsupplier = new ProductFournisseur($db); - if (empty($conf->global->SUPPLIERORDER_WITH_NOPRICEDEFINED)) + if (empty($conf->global->SUPPLIER_ORDER_WITH_NOPRICEDEFINED)) { $idprod=0; if (GETPOST('idprodfournprice') == -1 || GETPOST('idprodfournprice') == '') $idprod=-99; // Same behaviour than with combolist. When not select idprodfournprice is now -99 (to avoid conflict with next action that may return -1, -2, ...) diff --git a/htdocs/langs/en_US/interventions.lang b/htdocs/langs/en_US/interventions.lang index 2d3a1d5a4a3..cf93bd3d2b1 100644 --- a/htdocs/langs/en_US/interventions.lang +++ b/htdocs/langs/en_US/interventions.lang @@ -52,7 +52,7 @@ ArcticNumRefModelDesc1=Generic number model ArcticNumRefModelError=Failed to activate PacificNumRefModelDesc1=Return numero with format %syymm-nnnn where yy is year, mm is month and nnnn is a sequence with no break and no return to 0 PacificNumRefModelError=An intervention card starting with $syymm already exists and is not compatible with this model of sequence. Remove it or rename it to activate this module. -PrintProductsOnFichinter=Print products on intervention card +PrintProductsOnFichinter=Print also lines of type "product" (not only services) on intervention card PrintProductsOnFichinterDetails=interventions generated from orders InterventionStatistics=Statistics of interventions NbOfinterventions=Nb of intervention cards From 051c5f415e17ae0395be7258223c7405ef9e5514 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 20:00:37 +0200 Subject: [PATCH 49/50] Fix API access protection check #5053 --- htdocs/api/class/api_access.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/api/class/api_access.class.php b/htdocs/api/class/api_access.class.php index a8ceef4a232..9d29c60e26a 100644 --- a/htdocs/api/class/api_access.class.php +++ b/htdocs/api/class/api_access.class.php @@ -122,7 +122,10 @@ class DolibarrApiAccess implements iAuthenticate $userClass::setCacheIdentifier(static::$role); Resources::$accessControlFunction = 'DolibarrApiAccess::verifyAccess'; - return in_array(static::$role, (array) static::$requires) || static::$role == 'admin'; + + $requirefortest = static::$requires; + if (! is_array($requirefortest)) $requirefortest=explode(',',$requirefortest); + return in_array(static::$role, (array) static::$requirefortest) || static::$role == 'admin'; } /** From 980f3d522fbfd01d4f67bce8a6cfcd7552f546da Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 22 Apr 2016 20:09:42 +0200 Subject: [PATCH 50/50] Prepare 3.9.1 --- ChangeLog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 120c19ca5e7..2ab1185a65c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,8 +13,7 @@ make a Dolibarr upgrade. ***** ChangeLog for 3.9.1 compared to 3.9.* ***** -FIX: #3815 Call to undefined function local_by_date(). -FIX: #3815 With higher quality +FIX: #3815 Call to undefined function local_by_date() FIX: #4424 Missing email of user popup in supplier orders area FIX: #4442 Missing translation in Banks menu FIX: #4737 Bank transacion type selector translation is cropped @@ -33,6 +32,7 @@ FIX: #4874 SQL error when listing users FIX: #4880 FIX: #4961 FIX: #4989 +FIX: If oauth has never been activated two tables are missing and printing is not working FIX: A not enabled field for list must not into fields to add FIX: Bad color of message password changed FIX: Bad error and style message when changing its own login