da-idiot Posted March 8, 2005 Share Posted March 8, 2005 Has anyone experienced there computer freezing after trying to click save to generate the pdf files? My computer keeps freezing while trying to generate the pdf files, It is as if the fpdf is being run on my computer. But it is not. It is on the server. I checked my commit charge for windows and it was well above the limit and i then get a warning telling me that my virtual memory is set to low and it is being set higher by windows. I am using mozilla firefox 1.0 browser. This is very strange. Any ideas as to why this happens? Thanx Quote Link to comment Share on other sites More sharing options...
da-idiot Posted March 8, 2005 Share Posted March 8, 2005 The catalog is also not being generated. I get no errors, All that happens is the script completely freezes my browser. This is on my server with ssh access so i check top and the script seems to be getting run because my server is using 62% processor time until it times out or appears to finish. I then check my catalogues folder but it is not there. Quote Link to comment Share on other sites More sharing options...
da-idiot Posted March 9, 2005 Share Posted March 9, 2005 When I click save to start generating the catalog My processor shhots to 100% The commit charge is Peak 1524448 Limit 1528544 Available memory drops from 670 MB free to 2MB free page file usage goes above 1 GB Once the script seems to stop running it all goes back to normal with no generated catalog or any errors. I will really appreciate any ideas anyone could shoot at this as I have tried everything I know to do. Quote Link to comment Share on other sites More sharing options...
da-idiot Posted March 9, 2005 Share Posted March 9, 2005 Sorry for all the posts Found this error in the error logs. PHP Warning: feof(): supplied argument is not a valid stream resource in /home/fridgemags/lsws/html/admin/pdf_fpdf.php on line 1495 PHP Warning: fread(): supplied argument is not a valid stream resource in /home/fridgemags/lsws/html/admin/pdf_fpdf.php on line 1496 We are having nasty weather here so I have to power down for now. I will check in later. Thanx in advance for any info on these errors. Quote Link to comment Share on other sites More sharing options...
da-idiot Posted March 9, 2005 Share Posted March 9, 2005 Ok I can now sort of generate the pdf. Ity works fine if i do it without images. Everything lays out ok. If i produce it with images on, it will produce the pdf file without spitting images out at me. But When you open the pdf Acrobat reader gives the following errors and the file is all garbled. Error 1 A drawing error occured. Error 2 Insufficient data for an image. My questions What data does it need to draw an image? The default images show up but are garbled. You can download the pdf from http://www.fridgemags.com/catalogues/catalog_1.pdf PLease please help me. I have customers flooding me with requests for an offline printable catalog. Thanx Quote Link to comment Share on other sites More sharing options...
da-idiot Posted March 9, 2005 Share Posted March 9, 2005 here tis how the catalog looks without images http://www.fridgemags.com/catalogues/catalog_2.pdf Quote Link to comment Share on other sites More sharing options...
Guest Posted March 9, 2005 Share Posted March 9, 2005 Ok I can now sort of generate the pdf. Ity works fine if i do it without images. Everything lays out ok. If i produce it with images on, it will produce the pdf file without spitting images out at me. But When you open the pdf Acrobat reader gives the following errors and the file is all garbled. Error 1 A drawing error occured. Error 2 Insufficient data for an image. My questions What data does it need to draw an image? The default images show up but are garbled. You can download the pdf from http://www.fridgemags.com/catalogues/catalog_1.pdf PLease please help me. I have customers flooding me with requests for an offline printable catalog. Thanx <{POST_SNAPBACK}> You must have fixed this??? Because the file looks good to me from here. -= Dave =- Quote Link to comment Share on other sites More sharing options...
da-idiot Posted March 10, 2005 Share Posted March 10, 2005 Yes I got it fixed, Long nite staring at source code. :'( What I changed. In /admin/pdf_catalogue.php line 173 change: $destination =DIR_FS_CATALOG."catalogues/"; To $destination=DIR_FS_CATALOG."catalogues/"; Notice the extra space after $destination And also implemented a fix found earlier in the forum. in /admin/pdf_fpdf.php around line 1475 change if(!$a) print('Missing or incorrect image file: '.$file); $file=DIR_S_CATALOG.DIR_WS_IMAGES.DEFAULT_IMAGE; To if(!$a) { print('Missing or incorrect image file: '.$file); $file=DIR_S_CATALOG.DIR_WS_IMAGES.DEFAULT_IMAGE; } Notice the missing brackets. CREDIT goes to TooLoo for the second fix above. Thanx This is what worked for me. I hope it will work for some of you having problems. Quote Link to comment Share on other sites More sharing options...
jrdaniels0 Posted March 12, 2005 Share Posted March 12, 2005 da_idiot, Thanks for that fix it works great. I was having the same problem as you. Quote Link to comment Share on other sites More sharing options...
da-idiot Posted March 13, 2005 Share Posted March 13, 2005 Glad I could help :D Quote Link to comment Share on other sites More sharing options...
Guest Posted April 17, 2005 Share Posted April 17, 2005 in my admin section when i try to create my pdf, this is what i get Warning: fopen(/home/user/public_html/distro/../pdf_catalogs/mtw_catalog_1.pdf): failed to open stream: No such file or directory in /home/user/public_html/distro/admin/pdf_fpdf.php on line 1052FPDF error: Unable to create output file: /home/user/public_html/distro/../pdf_catalogs/mtw_catalog_1.pdf on my site when i click my "download catalog" link, that page displays this: TEXT_PDF_DESCRIPTION Warning: filesize(): Stat failed for catalogues/catalog_1.pdf (errno=2 - No such file or directory) in /home/user/public_html/distro/pdf_catalogue_info.php on line 89 Downloadable catalogue (0.00 Mo) anyone have an idea what i missing or need to fix? much thanks.. Quote Link to comment Share on other sites More sharing options...
DefelRadar Posted May 1, 2005 Share Posted May 1, 2005 Hello everyone! I new to osCommerce and have been trying to fully mod the package the way I want before taking the site live and have run into a problem with the PDF Catalog 1.5.9 contrib. It seems to work ok if I use gif images but the images appear to come in full size and overlap. The problem I am having is with the jpg images everytime I try to create the catalog it gives me these warnings: Warning: imagecreatetruecolor(): Invalid image dimensions in admin/pdf_catalogue.php on line 190 Warning: imagecopyresized(): supplied argument is not a valid Image resource in admin/pdf_catalogue.php on line 191 Warning: imagejpeg(): supplied argument is not a valid Image resource in admin/pdf_catalogue.php on line 193 PDF Catalog(s) Generation This is what the code looks like around the section where the warnings are occuring $array=explode("/", $path); $last=sizeof($array); $size = getimagesize($path); if($size[0] > $size[1]) { $im=imagecreatetruecolor($width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR); imagecopyresized($im, $src, 0, 0, 0, 0,$width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR, $size[0], $size[1]); } else { $im=imagecreatetruecolor($height/PDF_TO_MM_FACTOR,$width/PDF_TO_MM_FACTOR); imagecopyresized($im, $src, 0, 0, 0, 0, $height/PDF_TO_MM_FACTOR, $width/PDF_TO_MM_FACTOR, $size[0], $size[1]); } if(!imagejpeg($im, $destination.$array[$last-1])) { exit(); } $path=$destination.$array[$last-1]; $this->SetLineWidth(1); I've tried various tweaks found in this thread but none have seemed to work. An addition note my osCommerce package is not a standard install. The admin and catalog are seperate folders. If anyone could help me out it would be greatly appreciated!! Quote Link to comment Share on other sites More sharing options...
purplenikki Posted May 3, 2005 Share Posted May 3, 2005 hi can anyone tell me how to put my company logo in the pdf catalog, i only sem to be able to get the text up not the actual image file my logo is saved as many thanks nikki :thumbsup: Quote Link to comment Share on other sites More sharing options...
Rolex888 Posted May 5, 2005 Share Posted May 5, 2005 Does anyone know how I can change my footer text that appears in the pdf? Everything works fine and looks fine but I just want to edit the text at the bottom of each page. Right now it says "Put here your footer text sales@mydomain.com" Quote Link to comment Share on other sites More sharing options...
Guest Posted May 24, 2005 Share Posted May 24, 2005 When I click save to start generating the catalog My processor shhots to 100% The commit charge is Peak 1524448 Limit 1528544 Available memory drops from 670 MB free to 2MB free page file usage goes above 1 GB Once the script seems to stop running it all goes back to normal with no generated catalog or any errors. I will really appreciate any ideas anyone could shoot at this as I have tried everything I know to do. <{POST_SNAPBACK}> Hi, I have the same problem, can you tell me the solution, please???? Thank you :blink: Quote Link to comment Share on other sites More sharing options...
Guest Posted May 25, 2005 Share Posted May 25, 2005 Hellow i'm having the following problem could any1 help me pleez Warning: fopen(/images/oscommerce.gif): failed to open stream: No such file or directory in admin\pdf_fpdf.php on line 1493 Warning: feof(): supplied argument is not a valid stream resource in admin\pdf_fpdf.php on line 1495 The last problem occures about 100 times so the result is that i get a huge list of problems Quote Link to comment Share on other sites More sharing options...
higgalls Posted May 27, 2005 Share Posted May 27, 2005 Hey, I am having a few problems with this modification. I have edited the look of it quite a bit to make it look better, but I believe these problems happened before I modified anything. My main problem at the moment is when I set it to resize images, it comes up with errors. I edited the php.ini file and uncommented the extension=php_gd2.dll so that it would load the GD2 library. Now, I am getting the following errors: Warning: imagecreate() [function.imagecreate]: Invalid image dimensions in c:\Inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 194 Warning: imagecopyresized(): supplied argument is not a valid Image resource in c:\Inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 195 Warning: imagejpeg(): supplied argument is not a valid Image resource in c:\Inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 200 Does anyone have any idea on how to fix it? My code has been modified to firstly check whether the picture actually exists so that it will just then replace the file with another file. The code is the following: <?php /******************************************************************************/ /* PDF Catalogs v.1.56 for osCommerce v.2.2 MS2 */ /* */ /* by Antonios THROUVALAS (antonios@throuvalas.net), April 2004 */ /* by Nicolas Hilly (n.hilly@laposte.net), August 2004 */ /* by Christophe Buchi (chris@butch.ch), September 2004 /* */ /* Based on PDF Catalogs v.1.4 by gurvan.riou@laposte.net */ /* */ /* Uses FPDF (http://www.fpdf.org), Version 1.52, by Olivier PLATHEY */ /* */ /* Credit goes also to: */ /* - Yamasoft (http://www.yamasoft.com/php-gif.zip) for their GIF class, */ /* - Jerome FENAL (jerome.fenal@logicacmg.com) for introducing GIF Support */ /* in the FPDF Class, */ /* - The osC forums members (www.oscommerce.com/forums)! */ /* */ /* Please donate to the osCommerce Core Team! */ /* Freeware, You may use, modify and redistribute this software as you wish! */ /******************************************************************************/ //define('FPDF_FONTPATH','font/'); require('pdf_config.php'); require('pdf_fpdf.php'); require('includes/application_top.php'); set_time_limit(120); $products_index_array; class PDF extends FPDF { //Colonne courante var $col=0; //Ordonn?e du d?but des colonnes var $y0; var $categories_string_spe = ''; var $categories_string = ''; var $categories_id = ''; var $levels = ''; var $parent_category_name; var $ifw = 0; //internal width margin for the products (image and text) description var $text_fw = 0; //text width for the products (text) description var $ifh = 0; //internal height margin for the products description var $products_index_array; var $products_index_list=''; function Header() { //Background Color $background_color_table=explode(",",BACKGROUND_COLOR); $this->SetFillColor($background_color_table[0], $background_color_table[1], $background_color_table[2]); $this->ifw = $this->fw * 0.95; // A4 portrait = 200 $this->ifh = $this->fh * 0.87; // A4 portrait = 260 $this->Rect(0,0,$this->fw,$this->fh,F); // Draw background //Logo: If LOGO_IMAGE defined, show image with logo, else show text if (PDF_LOGO) { $this->Image(DIR_FS_CATALOG.DIR_WS_IMAGES.PDF_LOGO,16,8,0,29); } else { $this->SetFont('Arial','B',18); $this->SetLineWidth(0); $w=$this->GetStringWidth(PDF_TITLE)+6; //$this->SetX((210-$w)/2); $this->SetFillColor(100,100,100); $this->Cell($w,9,PDF_TITLE,0,0,'C'); } //Ann?e en cour $aujourdhui = getdate(); $annee = strftime(PDF_DATE_FORMAT); $this->SetFont('Arial','I',12); $this->SetTextColor(255,255,255); $this->Cell(0,8,$annee." ",0,1,'R'); if (PDF_LOGO) { $this->Ln(20); } else { $this->Ln(2); } $x=$this->GetX(); $y=$this->GetY(); // $this->Line($x,$y,$this->ifw,$y); // $this->Ln(3); //Sauvegarde de l'ordonn?e // $this->y0=$this->GetY(); } function Footer() { //Pied de page $this->SetY(-15); $x=$this->GetX(); $y=$this->GetY(); $this->SetLineWidth(0.2); $this->Line($x,$y,$this->ifw,$y); $this->SetFont('Arial','I',8); $this->Cell(0,10,'Page '.$this->PageNo().'/{nb} ',0,0,'R'); } function CheckPageBreak($h) { //Si la hauteur h provoque un d?bordement, saut de page manuel if($this->GetY()+$h>$this->PageBreakTrigger) $this->AddPage($this->CurOrientation); } function NbLines($w,$txt) { //Calcule le nombre de lignes qu'occupe un MultiCell de largeur w $cw=&$this->CurrentFont['cw']; if($w==0) $w=$this->w-$this->rMargin-$this->x; $wmax=($w-2*$this->cMargin)*1000/$this->FontSize; $s=str_replace("\r",'',$txt); $nb=strlen($s); if($nb>0 and $s[$nb-1]=="\n") $nb--; $sep=-1; $i=0; $j=0; $l=0; $nl=1; while($i<$nb) { $c=$s[$i]; if($c=="\n") { $i++; $sep=-1; $j=$i; $l=0; $nl++; continue; } if($c==' ') $sep=$i; $l+=$cw[$c]; if($l>$wmax) { if($sep==-1) { if($i==$j) $i++; } else $i=$sep+1; $sep=-1; $j=$i; $l=0; $nl++; } else $i++; } return $nl; } function LineString($x,$y,$txt,$cellheight) { //calculate the width of the string $stringwidth=$this->GetStringWidth($txt); //calculate the width of an alpha/numerical char $numberswidth=$this->GetStringWidth('1'); $xpos=($x+$numberswidth); $ypos=($y+($cellheight/2)); $this->Line($xpos,$ypos,($xpos+$stringwidth),$ypos); } function ShowImage(&$width,&$height,$link,$path) { $width=min($width,MAX_IMAGE_WIDTH); $height=min($height,MAX_IMAGE_HEIGHT); if(RESIZE_IMAGES) { $destination=DIR_FS_CATALOG."catalogues/"; if(substr(strtolower($path), (strlen($path)-4),4)==".jpg" || substr(strtolower($path), (strlen($path)-5),5)==".jpeg") { // if (!file_exists($path)) // { // $path=DIR_FS_CATALOG.DIR_WS_IMAGES."top3.jpg"; // } $src=imagecreatefromjpeg($path); } else if (substr(strtolower($path), (strlen($path)-4),4)==".png") { $src=imagecreatefrompng($path); } else { echo "Only PNG and JPEG"; exit(); } $array=explode("/", $path); $last=sizeof($array); $size = getimagesize($path); if($size[0] > $size[1]) { $im=imagecreate($width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR); imagecopyresized($im, $src, 0, 0, 0, 0,$width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR, $size[0], $size[1]); } else { $im=imagecreate($height/PDF_TO_MM_FACTOR,$width/PDF_TO_MM_FACTOR); imagecopyresized($im, $src, 0, 0, 0, 0, $height/PDF_TO_MM_FACTOR, $width/PDF_TO_MM_FACTOR, $size[0], $size[1]); } if(!imagejpeg($im, $destination.$array[$last-1])) { exit(); } $path=$destination.$array[$last-1]; $this->SetLineWidth(1); $this->Cell($width+3,$height,"",1,0); $this->SetLineWidth(0.2); $this->Image($path,($this->GetX()-$width), $this->GetY(), $width, $height,'',$link); $this->SetFont('Arial','',8); unlink($path); } else { $this->SetLineWidth(1); // NH $this->Cell($width,$height,"",1,0); $this->Cell($width+3,$height,"",SIZE_BORDER_IMAGE,0); $this->SetLineWidth(0.2); //NH $this->Image($path,($this->GetX()-$width), $this->GetY(), $width, $height,'',$link); $this->Image($path,($this->GetX()-$width), $this->GetY(),$width ,'' ,'',$link); $this->SetFont('Arial','',8); } } //Rangement de l'arbre (Level est le niveau de sous-categorie) function Order($cid, $level, $foo, $cpath) { if ($cid != 0) { if($level>1) { $nbspaces=7; $dessinrep="|___ "; //j'inverse le dessin $revstring = strrev($dessinrep); //je lui ajoute nbspace pour chaque niveau de sous-repertoire $revstring .= str_repeat(" ",$nbspaces*($level-2)); //je r?inverse la chaine $this->categories_string_spe .= strrev($revstring); } $this->levels .=$level." "; $this->categories_id .= $cid." "; $this->categories_string .= $foo[$cid]['name']; $this->categories_string_spe .= $foo[$cid]['name']; if (SHOW_COUNTS) { $products_in_category = tep_products_in_category_count($cid,'false'); if ($products_in_category > 0) { $this->categories_string_spe .= ' (' . $products_in_category . ')'; } } $this->categories_string .= "\n"; $this->categories_string_spe .= "\n"; } //Parcourir l'arbre des categories (lecture de la table de hachage comme en Perl) if (sizeof($foo) > 0 ) { foreach ($foo as $key => $value) { if ($foo[$key]['parent'] == $cid) { $this->Order($key, $level+1, $foo, $cid); } } } } function ParentsName($current_category_level,$i,&$categorieslevelsarray, &$categoriesnamearray) { $k=$i; while($k>0) { if($categorieslevelsarray[$k] == ($current_category_level-1)) { $this->$parent_category_name=$categoriesnamearray[$k]; break; } $k--; } } function CalculatedSpace($y1,$y2,$imageheight) { //Si les commentaires sont - importants que l'image au niveau de l'espace d'affichage if(($h2=$y2-$y1) < $imageheight) { $this->Ln(($imageheight-$h2)+3); } else { $this->Ln(3); } } function PrepareIndex($name,$manufacturer,$category) { $this->products_index_array[] = array ( 'name' => substr($name,0,55), 'manufacturer' => substr($manufacturer,0,20), //'category' => substr($category,0,18), 'page' => $this->PageNo()); } function DrawIndex() { //5 = hauteur des cellules $h= 5 * sizeof($this->products_index_array) ."<br>"; if($h< $this->ifh) { $this->CheckPageBreak($h); } $this->AddPage(); $this->Ln(5); // echo "<br>HHHH sizeof= " . sizeof($this->products_index_array); if (!function_exists(CompareIndex)) { function CompareIndex($a, $B) { // return strcmp($a['name'], $b['name']); return strncasecmp($a['name'],$b['name'],8); // seulement les 8 premiers caracteres } } usort($this->products_index_array, CompareIndex); $this->SetFont('Courier','B',11); $this->Cell(1,11,"",0,0); $this->MultiCell($this->ifw,11,PDF_INDEX_HEADER,0,'C'); $this->SetFont('Courier','',11); if (strlen(INDEX_SEPARATOR) < 1) { $index_separator=" "; } else { $index_separator=INDEX_SEPARATOR; } foreach ($this->products_index_array as $key => $value) { if (strlen($value['manufacturer']) > 0) { $ligne_index = str_pad($value['name']." - ". $value['manufacturer'],53,$index_separator,STR_PAD_RIGHT); } else { $ligne_index = str_pad($value['name'],53,$index_separator,STR_PAD_RIGHT); } $ligne_index .= str_pad($value['category'],18,$index_separator,STR_PAD_LEFT); $ligne_index .= str_pad($value['page'], 5, $index_separator, STR_PAD_LEFT); $this->Cell(1,6,"",0,0); $this->MultiCell(0,6,$ligne_index,0,'C'); // echo "<br>HHHH : " . $ligne_index; } // echo "<br>HHHH wpt =" .$this->wPt . " fw =" . $this->fw. " ifw =" . $this->ifw ." text_fw =" . $this->text_fw; // echo "<br>HHHH hpt =" .$this->hPt . " fh =" . $this->fh. " ifh =" . $this->ifh; } function DrawCells($data_array) { $totallines=0; for($i=2;$i<(sizeof($data_array)-1);$i++) { $totallines+=$this->NbLines(($this->ifw -$data_array[0]),$data_array[$i]); } //5 = hauteur des cellules $h=5*($totallines+1)."<br>"; //si la description du produit ne prend pas toute la page if($h< $this->ifh) { $this->CheckPageBreak($h); } if(SHOW_PRODUCTS_LINKS) { // NH DIR_WS_CATALOG $link=HTTP_CATALOG_SERVER . DIR_WS_CATALOG ."product_info.php?products_id=".$data_array[10]."&language=".$data_array[11]; } else { $link=''; } if(SHOW_IMAGES && strlen($data_array[12])) { //If Small Image Width and Small Image Height are defined if(strlen($data_array[0])>1 && strlen($data_array[1])>1) { $this->ShowImage($data_array[0],$data_array[1],$link,$data_array[12]); $y1=$this->GetY(); } //If only Small Image Width is defined else if(strlen($data_array[0])>1 && strlen($data_array[1])) { if (!file_exists($data_array[12])) { $data_array[12] = DIR_FS_CATALOG.DIR_WS_IMAGES."top3.jpg"; } $heightwidth=getimagesize($data_array[12]); $data_array[0]=$data_array[0]; $data_array[1]=$heightwidth[1]*PDF_TO_MM_FACTOR; $this->ShowImage($data_array[0],$data_array[1],$link,$data_array[12]); $y1=$this->GetY(); } //If only Small Image Height is defined else if(strlen($data_array[0]) && strlen($data_array[1])>1) { $heightwidth=getimagesize($data_array[12]); $data_array[0]=$width=$heightwidth[0]*PDF_TO_MM_FACTOR; $data_array[1]=$data_array[1]; $this->ShowImage($data_array[0],$data_array[1],$link,$data_array[12]); $y1=$this->GetY(); } else { $heightwidth=getimagesize($data_array[12]); $data_array[0]=$heightwidth[0]*PDF_TO_MM_FACTOR; $data_array[1]=$heightwidth[1]*PDF_TO_MM_FACTOR; $this->ShowImage($data_array[0],$data_array[1],$link,$data_array[12]); $y1=$this->GetY(); } //Margin=10 $this->SetX(10); } else { $data_array[0]=$data_array[1]=0; $y1=$this->GetY(); $this->SetFont('Arial','',8); } // Calcul l'espace libre a droite de l'image $this->text_fw = $this->ifw - 18 - $data_array[0]; if(SHOW_NAME) { if(strlen($data_array[2])) { // Cell(marge gauche, hauteur, text, bordure, ) $this->Cell($data_array[0]+6,5,"",0,0); $x=$this->GetX(); $y=$this->GetY(); $name_color_table=explode(",",NAME_COLOR); $this->SetFillColor($name_color_table[0],$name_color_table[1],$name_color_table[2]); $this->MultiCell($this->text_fw,5,$data_array[2],PRODUCTS_BORDER,'L',1); } } if(SHOW_MODEL) { if(strlen($data_array[3])) { $this->Cell($data_array[0]+6,5,"",0,0); $this->MultiCell($this->text_fw,5,"Model No: ".$data_array[3],PRODUCTS_BORDER,'L'); } } if(SHOW_DATE_ADDED) { if(strlen($data_array[4])) { $this->Cell($data_array[0]+6,5,"",0,0); $this->MultiCell($this->text_fw,5,$data_array[4],PRODUCTS_BORDER,'L'); } } if(SHOW_MANUFACTURER) { if(strlen($data_array[5])) { $this->Cell($data_array[0]+6,5,"",0,0); $this->SetFont('Arial','I'); $this->MultiCell($this->text_fw,5,$data_array[5],PRODUCTS_BORDER,'L'); $this->SetFont('Arial',''); } } // NH si il n'y a pas de bordure, ajout d'un petit separateur if (!PRODUCTS_BORDER) { $this->Cell($data_array[0]+6,2,"",0,0); $x=$this->GetX(); $y=$this->GetY(); $this->MultiCell($this->text_fw,1,"",0,'C'); //$this->LineString($x+3,$y," ",2); $this->Line($x+4,$y,$x+15,$y); } if(SHOW_DESCRIPTION) { if(strlen($data_array[6])) { $this->Cell($data_array[0]+6,5,"",0,0); $this->MultiCell($this->text_fw,5,$data_array[6],PRODUCTS_BORDER,'L'); } } if(SHOW_TAX_CLASS_ID) { if(strlen($data_array[7])) { $this->Cell($data_array[0]+6,5,"",0,0); $this->MultiCell($this->text_fw,5,$data_array[7],PRODUCTS_BORDER,'L'); } } if(VAT) { $vatprice=sprintf("%01.".DIGITS_AFTER_DOT."f",((VAT/100)*$data_array[9])+$data_array[9]); $vatspecialsprice=sprintf("%01.".DIGITS_AFTER_DOT."f",((VAT/100)*$data_array[8])+$data_array[8]); } else { $vatprice=sprintf("%01.".DIGITS_AFTER_DOT."f",$data_array[9]); $vatspecialsprice=sprintf("%01.".DIGITS_AFTER_DOT."f",$data_array[8]); } if(SHOW_PRICES) { // NH si il n'y a pas de bordure, ajout d'un petit separateur if (!PRODUCTS_BORDER) { $this->Cell($data_array[0]+6,2,"",0,0); $x=$this->GetX(); $y=$this->GetY(); $this->MultiCell($this->text_fw,1,"",0,'C'); //$this->LineString($x+3,$y," ",2); $this->Line($x+4,$y,$x+15,$y); } if(strlen($data_array[8])) //If special price { $this->Cell($data_array[0]+6,5,"",0,0); $x=$this->GetX(); $y=$this->GetY(); $specials_price_color_table=explode(",",SPECIALS_PRICE_COLOR); $this->SetTextColor($specials_price_color_table[0],$specials_price_color_table[1],$specials_price_color_table[2]); $this->SetFont('Arial','B',''); if(CURRENCY_RIGHT_OR_LEFT == 'R') { $this->MultiCell($this->text_fw,5,$vatprice.CURRENCY."\t\t\t".$vatspecialsprice.CURRENCY,PRODUCTS_BORDER,'L'); // le rajout d'un param ,1 remplie la couleur de fond ); } else if (CURRENCY_RIGHT_OR_LEFT == 'L') { $this->MultiCell($this->text_fw,5,CURRENCY.$vatprice."\t\t\t".CURRENCY.$vatspecialsprice,PRODUCTS_BORDER,'L'); // le rajout d'un param ,1 remplie la couleur de fond ); } else { echo "<b>Choose L or R for CURRENCY_RIGHT_OR_LEFT</b>"; exit(); } $this->LineString($x,$y,"Price: ".$vatprice.CURRENCY,5); } else if(strlen($data_array[9])) { $this->Cell($data_array[0]+6,5,"",0,0); if(CURRENCY_RIGHT_OR_LEFT == 'R') { $this->MultiCell($this->text_fw,5,"Price: ".$vatprice.CURRENCY,PRODUCTS_BORDER,'L'); }else if(CURRENCY_RIGHT_OR_LEFT == 'L') { $this->MultiCell($this->text_fw,5,"Price: ".CURRENCY.$vatprice,PRODUCTS_BORDER,'L'); } else { echo "<b>Choose L or R for CURRENCY_RIGHT_OR_LEFT</b>"; exit(); } } $this->SetTextColor(0,0,0); } $y2=$this->GetY(); //si la description du produit ne prend pas toute la page if($h< $this->ifh) { $this->CalculatedSpace($y1,$y2,$data_array[1]); } else { $this->Ln(5); } } function CategoriesTree($languages_id,$languages_code) { //selectionne toute les categories $query = "SELECT c.categories_id, cd.categories_name, c.parent_id FROM " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd WHERE c.categories_id = cd.categories_id and cd.language_id='" . $languages_id ."' ORDER by sort_order, cd.categories_name"; $categories_query = tep_db_query($query); while ($categories = tep_db_fetch_array($categories_query)) { //Table de hachage $foo[$categories['categories_id']] = array( 'name' => $categories['categories_name'], 'parent' => $categories['parent_id']); } $this->Order(0, 0, $foo, ''); //$this->AddPage(); $this->TitreChapitre(""); if (SHOW_INTRODUCTION) { $this->Ln(18); $file= DIR_FS_CATALOG_LANGUAGES . tep_get_languages_directory($languages_code) . '/pdf_define_intro.php'; // echo "<br>HHHH " . $file; if (file_exists($file)) { $file_array = @file($file); $file_contents = @implode('', $file_array); $this->MultiCell(0,6,strip_tags($file_contents),$this->ifw,1,'J'); } } $this->SetFont('Arial','',DIRECTORIES_TREE_FONT_SIZE); if (SHOW_TREE) { $this->Ln(320); $this->MultiCell(0,6,$this->categories_string_spe,0,1,'L'); } } function CategoriesListing($languages_id, $languages_code) { $this->products_index_array=array(); $this->products_index_list=''; $this->index_lenght=0; //Recuperation de toutes les categories dans l'ordre $categoriesidarray=explode(" ",$this->categories_id); $categoriesnamearray=explode("\n",$this->categories_string); $categorieslevelsarray=explode(" ",$this->levels); //Convertion pixels -> mm $imagewidth=SMALL_IMAGE_WIDTH*PDF_TO_MM_FACTOR; $imageheight=SMALL_IMAGE_HEIGHT*PDF_TO_MM_FACTOR; for($i=0; $i<sizeof($categoriesidarray)-1; $i++) { $category_count_products = tep_products_in_category_count($categoriesidarray[$i],'false'); if (!((!SHOW_EMPTY_CATEGORIES) and ($category_count_products < 1))) { $taille=0; $current_category_id=$categoriesidarray[$i]; $current_category_name=$categoriesnamearray[$i]; $current_category_level=$categorieslevelsarray[$i]; $requete_prod="select p.products_id, pd.products_name, pd.products_description, p.products_image, p.products_model, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, p.products_date_added, m.manufacturers_name from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . $languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and p2c.categories_id='".$current_category_id."' order by pd.products_name, p.products_date_added DESC"; $SHOW_catalog_query = tep_db_query($requete_prod); while ($print_catalog = tep_db_fetch_array($SHOW_catalog_query)) { $print_catalog_array[$taille++] = array( 'id' => $print_catalog['products_id'], 'name' => $print_catalog['products_name'], 'description' => $print_catalog['products_description'], 'model' => $print_catalog['products_model'], 'image' => $print_catalog['products_image'], 'price' => $print_catalog['products_price'], 'specials_price' => $print_catalog['specials_new_products_price'], 'tax_class_id' => $print_catalog['products_tax_class_id'], 'date_added' => tep_date_long($print_catalog['products_date_added']), 'manufacturer' => $print_catalog['manufacturers_name']); } //recherche le nom de la categorie pere $this->$parent_category_name=''; $this->ParentsName($current_category_level,$i,$categorieslevelsarray, $categoriesnamearray); if (($current_category_level == 1) and (CATEGORIES_PAGE_SEPARATOR)) { $this->AddPage(); $this->Ln(120); $this->SetFont('Arial','',12); $titles_color_table=explode(",",CENTER_TITLES_CELL_COLOR); $this->SetFillColor($titles_color_table[0], $titles_color_table[1], $titles_color_table[2]); $this->Cell(45,5,"",0,0); $this->MultiCell(100,10,$current_category_name,1,'C',1); } if ($taille > 0) { // categorie non vide $this->AddPage(); if (strlen($this->$parent_category_name) > 0 ) { $this->TitreChapitre($this->$parent_category_name. CATEGORIES_SEPARATOR .$current_category_name); } else { $this->TitreChapitre($current_category_name); } $this->Ln(3); // NH $this->SetFont('Arial','',11); for($j=0; $j<$taille; $j++ ) { // NH si pas d'image definie, image par default if (strlen($print_catalog_array[$j]['image']) > 0) { $imagepath=DIR_FS_CATALOG.DIR_WS_IMAGES.$print_catalog_array[$j]['image']; } else { $imagepath=DIR_FS_CATALOG.DIR_WS_IMAGES.'/'.DEFAULT_IMAGE; } $id=$print_catalog_array[$j]['id']; $name=rtrim(strip_tags($print_catalog_array[$j]['name'])); $model=rtrim(strip_tags($print_catalog_array[$j]['model'])); $description=rtrim(strip_tags($print_catalog_array[$j]['description'])); $manufacturer=rtrim(strip_tags($print_catalog_array[$j]['manufacturer'])); $price=rtrim(strip_tags($print_catalog_array[$j]['price'])); $specials_price=rtrim(strip_tags($print_catalog_array[$j]['specials_price'])); $tax_class_id=rtrim(strip_tags($print_catalog_array[$j]['tax_class_id'])); $date_added=rtrim(strip_tags($print_catalog_array[$j]['date_added'])); $data_array=array($imagewidth,$imageheight,$name,$model,$date_added,$manufacturer,$description,$tax_class_id,$specials_price,$price,$id,$languages_code,$imagepath); $this->Ln(PRODUCTS_SEPARATOR); // NH blank space before the products description cells $this->DrawCells($data_array); if (SHOW_INDEX) { switch (INDEX_EXTRA_FIELD) { case 1 : $this->PrepareIndex($name,$manufacturer,$current_category_name); break; case 2 : $this->PrepareIndex($name,$model,$current_category_name); break; case 3 : $this->PrepareIndex($name,$date_added,$current_category_name); break; // default : $this->PrepareIndex($name,"",$current_category_name); default : $this->PrepareIndex($name,"",""); } } } } } } } function NewProducts($languages_id, $languages_code) { $products_new_query_raw = "select p.products_id, pd.products_name, pd.products_description, p.products_image, p.products_model, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, p.products_date_added, m.manufacturers_name from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . $languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id order by p.products_date_added DESC, pd.products_name"; $products_new_query = tep_db_query($products_new_query_raw); while($products_new = tep_db_fetch_array($products_new_query)) { $products_new_array[] = array('id' => $products_new['products_id'], 'name' => $products_new['products_name'], 'image' => $products_new['products_image'], 'description' => $products_new['products_description'], 'model' => $products_new['products_model'], 'price' => $products_new['products_price'], 'specials_price' => $products_new['specials_new_products_price'], 'tax_class_id' => $products_new['products_tax_class_id'], 'date_added' => tep_date_long($products_new['products_date_added']), 'manufacturer' => $products_new['manufacturers_name']); } $this->AddPage(); $this->Ln(120); $this->SetFont('Arial','',12); $new_color_table=explode(",",NEW_CELL_COLOR); $this->SetFillColor($new_color_table[0], $new_color_table[1], $new_color_table[2]); $this->Cell(45,5,"",0,0); $this->MultiCell(100,10,NEW_TITLE,1,'C',1); $this->Ln(100); //Convertion pixels -> mm $imagewidth=SMALL_IMAGE_WIDTH*PDF_TO_MM_FACTOR; $imageheight=SMALL_IMAGE_HEIGHT*PDF_TO_MM_FACTOR; for($nb=0; $nb<MAX_DISPLAY_PRODUCTS_NEW; $nb++) { $id=$products_new_array[$nb]['id']; $name=rtrim(strip_tags($products_new_array[$nb]['name'])); $model=rtrim(strip_tags($products_new_array[$nb]['model'])); $description=rtrim(strip_tags($products_new_array[$nb]['description'])); $manufacturer=rtrim(strip_tags($products_new_array[$nb]['manufacturer'])); $price=rtrim(strip_tags($products_new_array[$nb]['price'])); $specials_price=rtrim(strip_tags($products_new_array[$nb]['specials_price'])); $tax_class_id=rtrim(strip_tags($products_new_array[$nb]['tax_class_id'])); $date_added=rtrim(strip_tags($products_new_array[$nb]['date_added'])); $imagepath=DIR_FS_CATALOG.DIR_WS_CATALOG_IMAGES.$products_new_array[$nb]['image']; $data_array=array($imagewidth,$imageheight,$model,$name,$date_added,$manufacturer,$description,$tax_class_id,$specials_price,$price,$id,$languages_code,$imagepath); if (!file_exists($data_array[12])) { $data_array[12]=DIR_FS_CATALOG.DIR_WS_IMAGES."top3.jpg"; } $this->DrawCells($data_array); } } function TitreChapitre($lib) { //Titre $this->SetFont('Arial','',12); $titles_color_table=explode(",",HIGHT_TITLES_CELL_COLOR); $this->SetFillColor($titles_color_table[0], $titles_color_table[1], $titles_color_table[2]); $this->Cell(0,6,$lib,$this->ifw,1,'L',1); $this->Ln(2); //Sauvegarde de l'ordonn?e $this->y0=$this->GetY(); } } ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"> <title><?php echo TITLE; ?></title> <link rel="stylesheet" type="text/css" href="includes/stylesheet.css"> <script language="javascript" src="includes/general.js"></script> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"> <!-- header //--> <?php require(DIR_WS_INCLUDES . 'header.php'); ?> <!-- header_eof //--> <!-- body //--> <table border="0" width="100%" cellspacing="2" cellpadding="2"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"> <table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft"> <!-- left_navigation //--> <?php require(DIR_WS_INCLUDES . 'column_left.php'); ?> <!-- left_navigation_eof //--> </table> </td> <!-- body_text //--> <td width="100%" valign="top"> <table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td> <table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo HEADING_TITLE; ?></td> <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td> </tr> </table> </td> </tr> <?php switch ($HTTP_GET_VARS['action']) { case 'save': $languages = tep_get_languages(); $languages_string = ''; // $i=1; for ($i=0; $i<sizeof($languages); $i++) { $pdf=new PDF(); $pdf->Open(); $pdf->SetDisplayMode("real"); $pdf->AliasNbPages(); if(SHOW_NEW_PRODUCTS) $pdf->NewProducts($languages[$i]['id'],$languages[$i]['code']); $pdf->CategoriesTree($languages[$i]['id'],$languages[$i]['code']); $pdf->CategoriesListing($languages[$i]['id'],$languages[$i]['code']); if (SHOW_INDEX) { $pdf->DrawIndex(); } $pdf->Output(DIR_FS_CATALOG . DIR_WS_PDF_CATALOGS . PDF_FILENAME . "_" . $languages[$i]['id'].".pdf",false); } ?> <tr> <td> <table> <tr> <td class="main"><br> <? echo PDF_GENERATED . " <font color=red>".$i. "</font>"; ?></td> </tr> </table> </td> </tr> <?php break; default: echo '<tr><td class="main"><br><br><br> ' . PDF_PRE_GENERATED . ' '; echo tep_draw_form('language', FILENAME_PDF_CATALOGUE, 'action=save'); echo tep_image_submit('button_save.gif', IMAGE_SAVE) . ' <a href="' . tep_href_link(FILENAME_PDF_CATALOGUE, 'lngdir=' . $HTTP_GET_VARS['lngdir']) . '">'; echo "</td></tr></form>"; } ?> </table> </td> <!-- body_text_eof //--> </tr> </table> <!-- body_eof //--> <!-- footer //--> <?php require(DIR_WS_INCLUDES . 'footer.php'); ?> <!-- footer_eof //--> <br> </body> </html> <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?> Quote Link to comment Share on other sites More sharing options...
happydance Posted June 6, 2005 Share Posted June 6, 2005 Help. When I hit "Generate PDF catalog", it is using every ounce of my system and keeps timing out before a catalog file is created. I've gone back through the readme and done everything they say to do. Does anyone have any suggestions on what to do? Carol@myhappydance.com Quote Link to comment Share on other sites More sharing options...
happydance Posted June 6, 2005 Share Posted June 6, 2005 Does anyone know how I can change my footer text that appears in the pdf? Everything works fine and looks fine but I just want to edit the text at the bottom of each page. Right now it says "Put here your footer text sales@mydomain.com" <{POST_SNAPBACK}> Hi, I think I am having the same problem. Did you guys ever find an answer? carol@myhappydance.com Quote Link to comment Share on other sites More sharing options...
npereira Posted June 6, 2005 Share Posted June 6, 2005 Hi, I think I am having the same problem. Did you guys ever find an answer? carol@myhappydance.com <{POST_SNAPBACK}> Im getting the same thing... now, all of a sudden i start to get : Fatal error: Call to undefined function: tep_get_languages_directory() in /home2/shopott/public_html/admin/pdf_catalogue.php on line 541 Does anyone have this running and can submit the lastest FIXED files? Quote Link to comment Share on other sites More sharing options...
npereira Posted June 7, 2005 Share Posted June 7, 2005 Im getting the same thing... now, all of a sudden i start to get : Fatal error: Call to undefined function: tep_get_languages_directory() in /home2/shopott/public_html/admin/pdf_catalogue.php on line 541 Does anyone have this running and can submit the lastest FIXED files? <{POST_SNAPBACK}> Is there anyone still supporting this or os there an alternative contrib that will do the same? Quote Link to comment Share on other sites More sharing options...
detsouvalas Posted June 7, 2005 Author Share Posted June 7, 2005 Is there anyone still supporting this or os there an alternative contrib that will do the same? <{POST_SNAPBACK}> Search through the contributions section for 'PDF', you may find something similar ... ! As there seems to be a lot of interest for this contribution again, I think I will give it a second try, although this means a lot of work ... reading through the forums to see the latest different problems and browsing through the different versions of this contribution and try to combine everything in something that has as less errors as possible! But all this will take some time to be done ... ! :) Regards, Antonios Quote Antonios Link to comment Share on other sites More sharing options...
higgalls Posted June 16, 2005 Share Posted June 16, 2005 Hey, I mentioned this earlier, but this is the problem I am having. When I go to create the PDF Catalog with Image Resize being turned on (and I only have JPG's in my catalog which are in the format of '/02/2004.jpg' or '/01/1543.jpg' etc). Now, my first question is, does the code automatically go to strip out any of the slashes? or is that whole '/02/2004.jpg' path being passed through to the code? The errors I am recieving are the following: Warning: imagecreate(): Invalid image dimensions in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 193 Warning: imagecopyresized(): supplied argument is not a valid Image resource in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 194 Warning: imagejpeg(): supplied argument is not a valid Image resource in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 196 The lines of code it is refering to is here: if($size[0] > $size[1]) { $im=imagecreate($width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR); imagecopyresized($im, $src, 0, 0, 0, 0,$width/PDF_TO_MM_FACTOR, $height/PDF_TO_MM_FACTOR, $size[0], $size[1]); } else { $im=imagecreate($height/PDF_TO_MM_FACTOR,$width/PDF_TO_MM_FACTOR); imagecopyresized($im, $src, 0, 0, 0, 0, $height/PDF_TO_MM_FACTOR, $width/PDF_TO_MM_FACTOR, $size[0], $size[1]); } if(!imagejpeg($im, $destination.$array[$last-1])) { exit(); } Now, it is the 2 lines after the '} else {' lines, and the 'if(!imagejpeg...' lines that it says has the problem. If I comment out those lines, I get the following errors: Warning: unlink(c:/Inetpub/wwwroot/catalog/catalogues/pixel_trans.jpg): No such file or directory in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 206 Warning: unlink(c:/Inetpub/wwwroot/catalog/catalogues/pixel_trans.jpg): No such file or directory in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 206 Warning: unlink(c:/Inetpub/wwwroot/catalog/catalogues/pixel_trans.jpg): No such file or directory in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 206 Warning: imagecreate(): Invalid image dimensions in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 190 Warning: imagecopyresized(): supplied argument is not a valid Image resource in c:\inetpub\wwwroot\catalog\admin\pdf_catalogue.php on line 191 Warning: getimagesize(c:/Inetpub/wwwroot/catalog/catalogues/1695.jpg): failed to open stream: No such file or directory in c:\inetpub\wwwroot\catalog\admin\pdf_fpdf.php on line 1475 Missing or incorrect image file: c:/Inetpub/wwwroot/catalog/catalogues/1695.jpgFPDF error: Not a JPEG file: /catalog/images/pixel_trans.jpg Now, the pixel_trans.jpg image does actually exist in the images/ directory, and If I copy it into the catalogues/ directory and then run the script, it deletes it from the catalogues/ directory before ending and displaying the errors. Now, I am running PHP 4.3.10, on IIS 5.1 on Windows XP Professional edition. I have the GD library installed, and this is what the 'Server_info.php' file says about GD: GD Support enabled GD Version bundled (2.0.28 compatible) FreeType Support enabled FreeType Linkage with freetype GIF Read Support enabled GIF Create Support enabled JPG Support enabled PNG Support enabled WBMP Support enabled XBM Support enabled Any help would be GREATLY appreciated. I now have every product having an image (those that don't have an actual product image just display pixel_trans.jpg which is a 1x1 pixel white image). Cheers, Chris :) Quote Link to comment Share on other sites More sharing options...
iriza Posted June 19, 2005 Share Posted June 19, 2005 peteravu,Check if that is what you are looking for ... if yes, it's not perfect but should be a good working base! <{POST_SNAPBACK}> ------------------------------ Hello, I installed this script yesterday, and, after I fixed a few bugs (solution found in this forum), it works great, thank you very much. But I'm very interested to add attributes. I found this post about some solution, but unfortunatelly I cannot download the file. It seems like it is not there anymore. If you still have this file somewhere, could you, please post it again. Thanks in advance Quote Link to comment Share on other sites More sharing options...
AverageJoe Posted June 20, 2005 Share Posted June 20, 2005 Just setup this contribution and ironed out the tep_get_languages_directory() error and the problem with my system going to 100% cpu usage, but I guess I should have read that it doesn't support attributes (damn you 10 pages of comments :P). In any case, has anyone found a workaround for listing attributes? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.