shareyourfingerprint/print.php
2014-10-18 02:55:45 +02:00

232 lines
No EOL
6.2 KiB
PHP

<?php
require('fpdf17/dashed_rect.php');
require_once 'const.php';
//Settare a false prima di uppare e true per il debug
$debug=false;
//Stampo il testo
function printText($label,$value,$nline,$nx,$ny,$string=""){
global $pdf,$Xinit,$Ymargin,$Ypadding,$spaceWidth,
$XcellsWidth,$YcellsDepth,$fontType,$fontSize;
$pdf->SetFont($fontType,'B',$fontSize);
//Spostamento in base alla posizione della cella nella colonna
$Xcol=$XcellsWidth*($nx-1);
//Spostamento in base alla lunghezza della parola precedente,
//deve essere seguita dopo il settaggio del font
$Xword=$pdf->GetStringWidth($string);
//Spostamento in base alla posizione della cella tra le righe
$YInLine=$Ypadding*$nline;
$Yrow=$YcellsDepth*($ny-1);
//Spostamento in base alla posizione della linea all'interno della cella
$YInLine=$Ypadding*$nline;
//Print della label
$pdf->Text(
$Xinit+$Xcol+$Xword,
$Ymargin+$YInLine+$Yrow,
$label
);
$string.=$label;
$pdf->SetFont($fontType,'',$fontSize);
$Xword=$pdf->GetStringWidth($string);
//Print del valore
$pdf->Text(
$Xinit+$Xcol+$Xword+$spaceWidth*2,
$Ymargin+$YInLine+$Yrow,
$value
);
$string.=$value;
return $string;
}
//Stampo il contorno
function printBorder($nx,$ny){
global $pdf,$Xmargin,$XcellsWidth,$Ymargin,$YcellsDepth,$borderWidth;
$pdf->SetDrawColor(100);
$pdf->DashedRect(
$Xmargin+$XcellsWidth*($nx-1),
$Ymargin+$YcellsDepth*($ny-1),
$Xmargin+$XcellsWidth*$nx,
$Ymargin+$YcellsDepth*$ny,
$borderWidth,13
);
}
//Raccolgo i dati
$labels=Array();
$values=Array();
if(!$debug){
foreach ($_POST as $label => $value ){
if($value!=""){
$labels[$label]=str_replace("ids", "ID(s)", str_replace("_", " ", ucfirst($label))).": ";
$new_value=$value;
if($label=='user_ids')
$new_value=explode(',', trim($value));
$values[$label]=$new_value;
}
}
} else {
require_once 'debug.php';
}
$pdf=new PDF_DashedRect();
$pdf->AddPage();
for($c=1;$c<$maxcell;$c++) {
for($l=1;$l<$maxline;$l++){
//TODO:Sgrezzare il codice che si ripete Nmila volte
$bck_labels=$labels;
$bck_values=$values;
$row=1;
if(isset($labels['nickname'])){
$div="";
if(isset($labels['key_server'])){
$div=" - ";
$key2="key_server";
} else if(isset($labels['key_size'])){
$div=" - ";
$key2="key_size";
} else if(isset($labels['expire_date'])){
$div=" - ";
$key2="expire_date";
}
$str=printText($labels['nickname'],$values['nickname'].$div,$row,$c,$l);
unset($labels['nickname']);
unset($values['nickname']);
if($div==" - "){
$str=printText($labels[$key2],$values[$key2],$row,$c,$l,$str);
unset($labels[$key2]);
unset($values[$key2]);
}
$row++;
} else if(isset($labels['key_server'])) {
$div="";
if(isset($labels['key_size'])){
$div=" - ";
$key2="key_size";
} else if(isset($labels['expire_date'])){
$div=" - ";
$key2="expire_date";
}
$str=printText($labels['key_server'],$values['key_server'].$div,$row,$c,$l);
unset($labels['key_server']);
unset($values['key_server']);
if($div==" - "){
$str=printText($labels[$key2],$values[$key2],$row,$c,$l,$str);
unset($labels[$key2]);
unset($values[$key2]);
}
$row++;
} else if(isset($labels['key_size'])){
$div="";
if(isset($labels['expire_date'])){
$div=" - ";
$key2="expire_date";
}
$str=printText($labels['key_size'],$values['key_size'].$div,$row,$c,$l);
unset($labels['key_size']);
unset($values['key_size']);
if($div==" - "){
$str=printText($labels[$key2],$values[$key2],$row,$c,$l,$str);
unset($labels[$key2]);
unset($values[$key2]);
}
$row++;
}
//TODO: la prima volta misura 0, MISTERO DELLA FEDE!
//var_dump($pdf->GetStringWidth($labels['fingerprint']." ".$values['fingerprint']));
if($pdf->GetStringWidth($labels['fingerprint']." ".$values['fingerprint'])>=$XcellsWidth){
$swap=preg_replace('/ /','',$values['fingerprint']);
$values['fingerprint']=$swap;
}
$str=printText($labels['fingerprint'],$values['fingerprint'],$row,$c,$l);
$row++;
if(isset($labels['key_size'])){
$div="";
if(isset($labels['expire_date'])){
$div=" - ";
$key2="expire_date";
}
$str=printText($labels['key_size'],$values['key_size'].$div,$row,$c,$l);
unset($labels['key_size']);
unset($values['key_size']);
if($div==" - "){
$str=printText($labels[$key2],$values[$key2],$row,$c,$l,$str);
unset($labels[$key2]);
unset($values[$key2]);
}
$row++;
} else if(isset($labels['expire_date'])){
$div="";
$str=printText($labels['expire_date'],$values['expire_date'].$div,$row,$c,$l);
unset($labels['expire_date']);
unset($values['expire_date']);
$row++;
}
$divider=" - ";
$n_user_ids=count($values['user_ids']);
if($n_user_ids==1){
printText($labels['user_ids'],$values['user_ids'][0],$row,$c,$l);
} else {
$str="";
for($i=0;$i<$n_user_ids;$i++){
if($i==0){
$str.=printText($labels['user_ids'],$values['user_ids'][$i],$row,$c,$l);
// echo "div:".$labels['user_ids']." uid:".$values['user_ids'][$i]." i:".$i." row:".$row." c:".$c." l:".$l." str:".$str."\n";
} else {
$div=$divider;
if($str==""){
$div="";
}
// echo "div:".$div." uid:".$values['user_ids'][$i]." i:".$i." row:".$row." c:".$c." l:".$l." str:".$str."\n";
$str.=printText($div,$values['user_ids'][$i],$row,$c,$l,$str);
}
$Xmove=$pdf->GetStringWidth($str);
if($i+1<$n_user_ids){
if($Xmove+$pdf->GetStringWidth($divider.$values['user_ids'][$i+1])>=$XcellsWidth){
$str="";
$row++;
}
}
}
}
//Ripristino i valori iniziali il giro successivo visto che uso unset
// sugli elementi dell'array
$labels=$bck_labels;
$values=$bck_values;
//Se ci sono troppe righe dentro una cella, vanno diminite il numero
// di celle in una colonna
//TODO: far qualcosa del genere anche se le righe dentro una cella
// sono poche
if($row>5 && $l==1 && $c==1){
$n_dif=$row-5;
//TODO: Trovare una funzione che cali in modo migliore
$maxline-=4+(2*$n_dif);
$YcellsDepth+=$Ypadding*$n_dif;
}
printBorder($c,$l);
//exit;
}
}
//Disegno le forbicine
$pdf->Image($img_path."cut_me.png",$Ymargin-2,2,3,3,"PNG");
$file_name_pdf="fingerprint_".$values['fingerprint'].".pdf";
$pdf->Output($file_name_pdf,'I');
?>