upgrade flowplayer, jquery, jquery ui, jquery validate
[indybay:indybay-active.git] / website / faultlines / subscribers / readme.php
1 <?php\r
2 //===================================================================================================\r
3 // this is the php file which creates the readme.pdf file, this is not seriously \r
4 // suggested as a good way to create such a file, nor a great example of prose,\r
5 // but hopefully it will be useful\r
6 //\r
7 // adding ?d=1 to the url calling this will cause the pdf code itself to ve echoed to the \r
8 // browser, this is quite useful for debugging purposes.\r
9 // there is no option to save directly to a file here, but this would be trivial to implement.\r
10 //\r
11 // note that this file comprisises both the demo code, and the generator of the pdf documentation\r
12 //\r
13 //===================================================================================================\r
14 \r
15 \r
16 // don't want any warnings turning up in the pdf code if the server is set to 'anal' mode.\r
17 //error_reporting(7);\r
18 error_reporting(E_ALL);\r
19 set_time_limit(1800);\r
20 \r
21 include 'class.ezpdf.php';\r
22 \r
23 // define a clas extension to allow the use of a callback to get the table of contents, and to put the dots in the toc\r
24 class Creport extends Cezpdf {\r
25 \r
26 var $reportContents = array();\r
27 \r
28 function Creport($p,$o){\r
29   $this->Cezpdf($p,$o);\r
30 }\r
31 \r
32 function rf($info){\r
33   // this callback records all of the table of contents entries, it also places a destination marker there\r
34   // so that it can be linked too\r
35   $tmp = $info['p'];\r
36   $lvl = $tmp[0];\r
37   $lbl = rawurldecode(substr($tmp,1));\r
38   $num=$this->ezWhatPageNumber($this->ezGetCurrentPageNumber());\r
39   $this->reportContents[] = array($lbl,$num,$lvl );\r
40   $this->addDestination('toc'.(count($this->reportContents)-1),'FitH',$info['y']+$info['height']);\r
41 }\r
42 \r
43 function dots($info){\r
44   // draw a dotted line over to the right and put on a page number\r
45   $tmp = $info['p'];\r
46   $lvl = $tmp[0];\r
47   $lbl = substr($tmp,1);\r
48   $xpos = 520;\r
49 \r
50   switch($lvl){\r
51     case '1':\r
52       $size=16;\r
53       $thick=1;\r
54       break;\r
55     case '2':\r
56       $size=12;\r
57       $thick=0.5;\r
58       break;\r
59   }\r
60 \r
61   $this->saveState();\r
62   $this->setLineStyle($thick,'round','',array(0,10));\r
63   $this->line($xpos,$info['y'],$info['x']+5,$info['y']);\r
64   $this->restoreState();\r
65   $this->addText($xpos+5,$info['y'],$size,$lbl);\r
66 \r
67 \r
68 }\r
69 \r
70 \r
71 }\r
72 // I am in NZ, so will design my page for A4 paper.. but don't get me started on that.\r
73 // (defaults to legal)\r
74 // this code has been modified to use ezpdf.\r
75 \r
76 //$pdf = new Cezpdf('a4','portrait');\r
77 $pdf = new Creport('a4','portrait');\r
78 \r
79 $pdf -> ezSetMargins(50,70,50,50);\r
80 \r
81 // put a line top and bottom on all the pages\r
82 $all = $pdf->openObject();\r
83 $pdf->saveState();\r
84 $pdf->setStrokeColor(0,0,0,1);\r
85 $pdf->line(20,40,578,40);\r
86 $pdf->line(20,822,578,822);\r
87 $pdf->addText(50,34,6,'http://ros.co.nz/pdf - http://www.sourceforge.net/projects/pdf-php');\r
88 $pdf->restoreState();\r
89 $pdf->closeObject();\r
90 // note that object can be told to appear on just odd or even pages by changing 'all' to 'odd'\r
91 // or 'even'.\r
92 $pdf->addObject($all,'all');\r
93 \r
94 $pdf->ezSetDy(-100);\r
95 \r
96 //$mainFont = './fonts/Helvetica.afm';\r
97 $mainFont = './fonts/Times-Roman.afm';\r
98 $codeFont = './fonts/Courier.afm';\r
99 // select a font\r
100 $pdf->selectFont($mainFont);\r
101 \r
102 $pdf->ezText("PHP Pdf Creation\n",30,array('justification'=>'centre'));\r
103 $pdf->ezText("Module-free creation of Pdf documents\nfrom within PHP\n",20,array('justification'=>'centre'));\r
104 $pdf->ezText("developed by R&OS Ltd\n<c:alink:http://www.ros.co.nz/pdf/>http://www.ros.co.nz/pdf</c:alink>",18,array('justification'=>'centre'));\r
105 $pdf->ezText("\n<c:alink:http://sourceforge.net/projects/pdf-php>http://sourceforge.net/projects/pdf-php</c:alink>\n\nversion 0.09",18,array('justification'=>'centre'));\r
106 \r
107 $pdf->ezSetDy(-100);\r
108 // modified to use the local file if it can\r
109 \r
110 $pdf->openHere('Fit');\r
111 \r
112 function ros_logo(&$pdf,$x,$y,$height,$wl=0,$wr=0){\r
113   $pdf->saveState();\r
114   $h=100;\r
115   $factor = $height/$h;\r
116   $pdf->selectFont('./fonts/Helvetica-Bold.afm');\r
117   $text = 'R&OS';\r
118   $ts=100*$factor;\r
119   $th = $pdf->getFontHeight($ts);\r
120   $td = $pdf->getFontDecender($ts);\r
121   $tw = $pdf->getTextWidth($ts,$text);\r
122   $pdf->setColor(0.6,0,0);\r
123   $z = 0.86;\r
124   $pdf->filledRectangle($x-$wl,$y-$z*$h*$factor,$tw*1.2+$wr+$wl,$h*$factor*$z);\r
125   $pdf->setColor(1,1,1);\r
126   $pdf->addText($x,$y-$th-$td,$ts,$text);\r
127   $pdf->setColor(0.6,0,0);\r
128   $pdf->addText($x,$y-$th-$td,$ts*0.1,'http://www.ros.co.nz');\r
129   $pdf->restoreState();\r
130   return $height;\r
131 }\r
132 \r
133 ros_logo($pdf,150,$pdf->y-100,80,150,200);\r
134 $pdf->selectFont($mainFont);\r
135 \r
136 /*\r
137 if (file_exists('ros.jpg')){\r
138   $pdf->addJpegFromFile('ros.jpg',199,$pdf->y-100,200,0);\r
139 } else {\r
140   // comment out these two lines if you do not have GD jpeg support\r
141   // I couldn't quickly see a way to test for this support from the code.\r
142   // you could also copy the file from the locatioin shown and put it in the directory, then \r
143   // the code above which doesn't use GD will be activated.\r
144   $img = ImageCreatefromjpeg('http://www.ros.co.nz/pdf/ros.jpg');\r
145   $pdf-> addImage($img,199,$pdf->y-100,200,0);\r
146 }\r
147 */\r
148 //-----------------------------------------------------------\r
149 // load up the document content\r
150 $data=file('./data.txt');\r
151 \r
152 // try adding the faq's to the document, this will not work for people re-building the file from the \r
153 // download as I am not going to put in the faq file with that\r
154 $faqFile = '../ros/pdf/faqs.inc';\r
155 if (file_exists($faqFile)){\r
156   // then the file is there.\r
157   $data[] = "#NP\n";\r
158   $data[] = "1<FAQs>\n";\r
159   include($faqFile);\r
160   foreach($faqs as $v){\r
161     $data[] = "2<".$v['t'].">\n";\r
162     // these are some VERY rough conversions, I am not recommending others do this\r
163     $s = array('<br>','<p>','<pre>','</pre>','<ul>','</ul>','<li>');\r
164     $r = array("\n","\n\n","\n#C","\n#c","","","   - ");\r
165     if (is_array($v['d'])){\r
166       $tmp='';\r
167       foreach($v['d'] as $section){\r
168         $tmp.=$section."\n\n";\r
169       }\r
170     } else {\r
171       $tmp = $v['d'];\r
172     }\r
173     $tmp = str_replace($s,$r,$tmp);\r
174     $bits = explode("\n",$tmp);\r
175     foreach($bits as $bit){\r
176       $data[] = $bit."\n";\r
177     }\r
178   }\r
179 }\r
180 \r
181 $pdf->ezNewPage();\r
182 \r
183 $pdf->ezStartPageNumbers(500,28,10,'','',1);\r
184 \r
185 $size=12;\r
186 $height = $pdf->getFontHeight($size);\r
187 $textOptions = array('justification'=>'full');\r
188 $collecting=0;\r
189 $code='';\r
190 \r
191 foreach ($data as $line){\r
192   // go through each line, showing it as required, if it is surrounded by '<>' then \r
193   // assume that it is a title\r
194   $line=chop($line);\r
195   if (strlen($line) && $line[0]=='#'){\r
196     // comment, or new page request\r
197     switch($line){\r
198       case '#NP':\r
199         $pdf->ezNewPage();\r
200         break;\r
201       case '#C':\r
202         $pdf->selectFont($codeFont);\r
203         $textOptions = array('justification'=>'left','left'=>20,'right'=>20);\r
204         $size=10;\r
205         break;\r
206       case '#c':\r
207         $pdf->selectFont($mainFont);\r
208         $textOptions = array('justification'=>'full');\r
209         $size=12;\r
210         break;\r
211       case '#X':\r
212         $collecting=1;\r
213         break;\r
214       case '#x':\r
215         $pdf->saveState();\r
216         eval($code);\r
217         $pdf->restoreState();\r
218         $pdf->selectFont($mainFont);\r
219         $code='';\r
220         $collecting=0;\r
221         break;\r
222     }\r
223   } else if ($collecting){\r
224     $code.=$line;\r
225 //  } else if (((strlen($line)>1 && $line[1]=='<') || (strlen($line) && $line[0]=='<')) && $line[strlen($line)-1]=='>') {\r
226   } else if (((strlen($line)>1 && $line[1]=='<') ) && $line[strlen($line)-1]=='>') {\r
227     // then this is a title\r
228     switch($line[0]){\r
229       case '1':\r
230         $tmp = substr($line,2,strlen($line)-3);\r
231         $tmp2 = $tmp.'<C:rf:1'.rawurlencode($tmp).'>';\r
232         $pdf->ezText($tmp2,26,array('justification'=>'centre'));\r
233         break;\r
234       default:\r
235         $tmp = substr($line,2,strlen($line)-3);\r
236         // add a grey bar, highlighting the change\r
237         $tmp2 = $tmp.'<C:rf:2'.rawurlencode($tmp).'>';\r
238         $pdf->transaction('start');\r
239         $ok=0;\r
240         while (!$ok){\r
241           $thisPageNum = $pdf->ezPageCount;\r
242           $pdf->saveState();\r
243           $pdf->setColor(0.9,0.9,0.9);\r
244           $pdf->filledRectangle($pdf->ez['leftMargin'],$pdf->y-$pdf->getFontHeight(18)+$pdf->getFontDecender(18),$pdf->ez['pageWidth']-$pdf->ez['leftMargin']-$pdf->ez['rightMargin'],$pdf->getFontHeight(18));\r
245           $pdf->restoreState();\r
246           $pdf->ezText($tmp2,18,array('justification'=>'left'));\r
247           if ($pdf->ezPageCount==$thisPageNum){\r
248             $pdf->transaction('commit');\r
249             $ok=1;\r
250           } else {\r
251             // then we have moved onto a new page, bad bad, as the background colour will be on the old one\r
252             $pdf->transaction('rewind');\r
253             $pdf->ezNewPage();\r
254           }\r
255         }\r
256         break;\r
257     }\r
258   } else {\r
259     // then this is just text\r
260     // the ezpdf function will take care of all of the wrapping etc.\r
261     $pdf->ezText($line,$size,$textOptions);\r
262   }\r
263   \r
264 }\r
265 \r
266 $pdf->ezStopPageNumbers(1,1);\r
267 \r
268 // now add the table of contents, including internal links\r
269 $pdf->ezInsertMode(1,1,'after');\r
270 $pdf->ezNewPage();\r
271 $pdf->ezText("Contents\n",26,array('justification'=>'centre'));\r
272 $xpos = 520;\r
273 $contents = $pdf->reportContents;\r
274 foreach($contents as $k=>$v){\r
275   switch ($v[2]){\r
276     case '1':\r
277       $y=$pdf->ezText('<c:ilink:toc'.$k.'>'.$v[0].'</c:ilink><C:dots:1'.$v[1].'>',16,array('aright'=>$xpos));\r
278 //      $y=$pdf->ezText($v[0].'<C:dots:1'.$v[1].'>',16,array('aright'=>$xpos));\r
279       break;\r
280     case '2':\r
281       $pdf->ezText('<c:ilink:toc'.$k.'>'.$v[0].'</c:ilink><C:dots:2'.$v[1].'>',12,array('left'=>50,'aright'=>$xpos));\r
282       break;\r
283   }\r
284 }\r
285 \r
286 \r
287 if (isset($d) && $d){\r
288   $pdfcode = $pdf->ezOutput(1);\r
289   $pdfcode = str_replace("\n","\n<br>",htmlspecialchars($pdfcode));\r
290   echo '<html><body>';\r
291   echo trim($pdfcode);\r
292   echo '</body></html>';\r
293 } else {\r
294   $pdf->ezStream();\r
295 }\r
296 ?>