Issues (1752)

Security Analysis    not enabled

This project does not seem to handle request data directly as such no vulnerable execution paths were found.

  Cross-Site Scripting
Cross-Site Scripting enables an attacker to inject code into the response of a web-request that is viewed by other users. It can for example be used to bypass access controls, or even to take over other users' accounts.
  File Exposure
File Exposure allows an attacker to gain access to local files that he should not be able to access. These files can for example include database credentials, or other configuration files.
  File Manipulation
File Manipulation enables an attacker to write custom data to files. This potentially leads to injection of arbitrary code on the server.
  Object Injection
Object Injection enables an attacker to inject an object into PHP code, and can lead to arbitrary code execution, file exposure, or file manipulation attacks.
  Code Injection
Code Injection enables an attacker to execute arbitrary code on the server.
  Response Splitting
Response Splitting can be used to send arbitrary responses.
  File Inclusion
File Inclusion enables an attacker to inject custom files into PHP's file loading mechanism, either explicitly passed to include, or for example via PHP's auto-loading mechanism.
  Command Injection
Command Injection enables an attacker to inject a shell command that is execute with the privileges of the web-server. This can be used to expose sensitive data, or gain access of your server.
  SQL Injection
SQL Injection enables an attacker to execute arbitrary SQL code on your database server gaining access to user data, or manipulating user data.
  XPath Injection
XPath Injection enables an attacker to modify the parts of XML document that are read. If that XML document is for example used for authentication, this can lead to further vulnerabilities similar to SQL Injection.
  LDAP Injection
LDAP Injection enables an attacker to inject LDAP statements potentially granting permission to run unauthorized queries, or modify content inside the LDAP tree.
  Header Injection
  Other Vulnerability
This category comprises other attack vectors such as manipulating the PHP runtime, loading custom extensions, freezing the runtime, or similar.
  Regex Injection
Regex Injection enables an attacker to execute arbitrary code in your PHP process.
  XML Injection
XML Injection enables an attacker to read files on your local filesystem including configuration files, or can be abused to freeze your web-server process.
  Variable Injection
Variable Injection enables an attacker to overwrite program variables with custom data, and can lead to further vulnerabilities.
Unfortunately, the security analysis is currently not available for your project. If you are a non-commercial open-source project, please contact support to gain access.

class/doc-markdown.php (3 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * @package		fwolflib
4
 * @subpackage	class
5
 * @copyright	Copyright © 2009-2010, Fwolf
6
 * @author		Fwolf <[email protected]>
7
 * @since		2009-04-12
8
 */
9
10
11
require_once(dirname(__FILE__) . '/fwolflib.php');
12
13
14
/**
15
 * Display text document writing by MarkDown markup language.
16
 *
17
 * Need jQuery locate at /js/jquery.js
18
 *
19
 * @deprecated  Use Fwlib\Html\TextDocument\Markdown
20
 * @package		fwolflib
21
 * @subpackage	class
22
 * @copyright	Copyright © 2009-2013, Fwolf
23
 * @author		Fwolf <[email protected]>
24
 * @since		2009-04-12
25
 * @version		$Id$
26
 */
27
class DocMarkdown extends Fwolflib {
0 ignored issues
show
Deprecated Code introduced by
The class Fwolflib has been deprecated with message: Use classes in Fwlib namespace, see PSR-0/1/2

This class, trait or interface has been deprecated. The supplier of the file has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the type will be removed from the class and what other constant to use instead.

Loading history...
28
	/**
29
	 * Some config vars
30
	 * @var	array
31
	 */
32
	public $aCfg = array(
33
		// Using 'Google AJAX Libraries API' now
34
		// http://code.google.com/apis/ajaxlibs/
35
		'path_jquery'	=> 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js',
36
//		'path_jquery'	=> '/js/jquery.js',
37
	);
38
39
	/**
40
	 * Stored css styles
41
	 * @var array
42
	 */
43
	protected $aCss = array();
44
45
	/**
46
	 * Stored css styles for print
47
	 * @var array
48
	 */
49
	protected $aCssPrint = array();
50
51
	/**
52
	 * Footer text
53
	 * @var array
54
	 */
55
	protected $aFooter = array();
56
57
	/**
58
	 * Header text
59
	 * @var array
60
	 */
61
	protected $aHeader = array();
62
63
	/**
64
	 * Document infomation
65
	 *
66
	 * Will display out by sequence of their index,
67
	 * Do NOT change there sequence.
68
	 * @var array
69
	 */
70
	public $aInfo = array(
71
		'title'			=> "Document title(aInfo['title'])",
72
		'author'		=> "Document author(aInfo['author'])",
73
		'authormail'	=> "Document author's mail(aInfo['authormail'])",
74
		'keywords'		=> "Keywords used in html <meta>(aInfo['keywords'])",
75
		'description'	=> "Description used in html <meta>(aInfo['description'])",
76
77
		// Above part can be set (aBody[]) in doc script.
78
		// Below 2 parts can be rewritten in __construct of subclass
79
80
		// Verinfo part
81
		'package'		=> "Phpdoc style package(aInfo['package'])",
82
		'subpackage'	=> "Phpdoc style subpackage(aInfo['subpackage'])",
83
		'copyright1'	=> "Copyright show in verinfo(aInfo['copyright1'])",
84
		'since'			=> "When is this file born(aInfo['since'])",
85
		'version'		=> "\$Id\$",
86
		// Footer part
87
		'copyright2'	=> array(
88
			"Copyright show in footer(aInfo['copyright2'])",
89
			"Will display in footer by list style.",
90
		),
91
	);
92
93
	/**
94
	 * Body text
95
	 *
96
	 * Will display out by sequence of their index if is array,
97
	 * or easy output if is string.
98
	 * @var mixed
99
	 */
100
	public $aBody = array();
101
102
	/**
103
	 * Document styles profiles
104
	 *
105
	 * Combined css, header, footer profile together
106
	 * @var array
107
	 */
108
	protected $aStyle = array(
109
		'default'	=> array(
110
			'css'		=> 'default',
111
			'cssprint'	=> 'default',
112
			'header'	=> 'default',
113
			'footer'	=> 'default',
114
		),
115
	);
116
117
	/**
118
	 * Which style profile to use
119
	 * @var string
120
	 */
121
	public $sStyle = 'default';
122
123
124
	/**
125
	 * construct
126
	 *
127
	 * @var param	string	$path_markdown	Include path of MarkDown(Extra) lib
128
	 */
129
	public function __construct($path_markdown = 'markdown.php') {
130
		// Include Markdown lib
131
		if (empty($path_markdown))
132
			$path_markdown = 'adodb/adodb.inc.php';
133
		require_once($path_markdown);
134
135
		// Do data initialize
136
		$this->SetCss();
137
		$this->SetCssPrint();
138
		$this->SetHeader();
139
		$this->SetFooter();
140
141
		$this->SetInfoFwolflib();
142
	} // end of class __construct
143
144
145
	/**
146
	 * Echo $this->GetOutput()
147
	 */
148
	public function Display() {
149
		echo $this->GetOutput();
150
	} // end of func Display
151
152
153
	/**
154
	 * Generate output html
155
	 * @return string
156
	 */
157
	public function GenOutputHtml() {
158
		$s = '';
159
		$s .= $this->GenOutputHtmlHeader();
160
		$s .= $this->GenOutputHtmlBody();
161
		$s .= $this->GenOutputHtmlFooter();
162
		return $s;
163
	} // end of func GenOutputHtml
164
165
166
	/**
167
	 * Generate output html body part
168
	 * @return string
169
	 */
170
	protected function GenOutputHtmlBody() {
171
		if (empty($this->aBody)) {
172
			return '';
173
		}
174
		elseif (is_string($this->aBody)) {
175
			return Markdown($this->aBody);
176
		}
177
		else {
178
			// Disp array by sequence of their index
179
			ksort($this->aBody);
180
			$s = '';
181
			foreach ($this->aBody as $k => $v) {
182
				$s .= Markdown($v);
183
			}
184
			return $s;
185
		}
186
	} // end of func GenOutputHtmlBody
187
188
189
	/**
190
	 * Generate output html header part
191
	 * @return string
192
	 */
193
	protected function GenOutputHtmlFooter() {
194
		$s = $this->aFooter[$this->aStyle[$this->sStyle]['footer']];
195
		// Footer copyright
196
		$ar = $this->aInfo['copyright2'];
197
		$s_copyright2 = '';
198
		if (!empty($ar)) {
199
			foreach ($ar as $v) {
200
				$s_t = Markdown($v);
201 View Code Duplication
				if ('<p>' == substr($s_t, 0, 3))
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
202
					$s_t = trim(substr($s_t, 3, strlen($s_t) - 8));
203
				$s_copyright2 .= "<li>" . $s_t . "</li>\n";
204
			}
205
		}
206
		$s = str_replace('{copyright2}', $s_copyright2, $s);
207
		return $s;
208
		// Apply aInfo in
209
210
	} // end of func GenOutputHtmlFooter
211
212
213
	/**
214
	 * Generate output html header part
215
	 * @return string
216
	 */
217
	protected function GenOutputHtmlHeader() {
218
		// Apply aInfo in
219
		$s = $this->aHeader[$this->aStyle[$this->sStyle]['header']];
220
		$ar_keys = array(
221
			'{info.title}',
222
			'{info.author}',
223
			'{info.authormail}',
224
			'{info.keywords}',
225
			'{info.description}',
226
			'{info.package}',
227
			'{info.subpackage}',
228
			'{info.copyright1}',
229
			'{info.since}',
230
			'{info.version}',
231
			);
232
		$s = str_replace($ar_keys, $this->aInfo, $s);
233
		// Css
234
		$s = str_replace('{css}', $this->aCss[$this->aStyle[$this->sStyle]['css']], $s);
235
		$s = str_replace('{cssprint}', $this->aCssPrint[$this->aStyle[$this->sStyle]['cssprint']], $s);
236
		return $s;
237
	} // end of func GenOutputHtmlHeader
238
239
240
	/**
241
	 * Gen soucecode output
242
	 * @return string
243
	 */
244
	protected function GenOutputSourcecode() {
245
		// Add <pre>
246
		$s = "<pre>\n";
247
		// Add title
248
		$s .= "{$this->aInfo['title']}\n====================\n\n";
249
250
		// Verinfo, grab from $this->aHeader
251
		// identify by <div id="verinfo"><pre>
252
		$s_header = $this->GenOutputHtmlHeader();
253
		$i = preg_match('/<div id="verinfo"><pre>(.*)<\/pre><\/div>/s',
254
			$s_header, $ar);
255
		if (0 < $i) {
256
			$s_verinfo = $ar[1];
257
			$s_verinfo = strip_tags($s_verinfo);
258
			$s_verinfo = str_replace('	', ' ', $s_verinfo);
259
			$s .= $s_verinfo . "\n\n";
260
		}
261
262
		// Output body
263
		ksort($this->aBody);
264
		foreach ($this->aBody as $k => $v) {
265
			$s .= htmlspecialchars($v) . "\n";
266
		}
267
268
		// Add </pre>
269
		$s .= "</pre>\n";
270
		return $s;
271
	} // end of func GenOutputSourcecode
272
273
274
	/**
275
	 * Get output content
276
	 * @return string
277
	 */
278
	public function GetOutput() {
279
		// Sourcecode output
280
		if (isset($_GET['view']) && 'sourcecode' == $_GET['view'])
281
			return $this->GenOutputSourcecode();
282
		else
283
			return $this->GenOutputHtml();
284
	} // end of func GetOutput
285
286
287
	/**
288
	 * Store css data to array
289
	 */
290
	protected function SetCss() {
291
		$this->aCss['default'] = '
292
html, body, div, span, applet,
293
    object, iframe, h1, h2, h3, h4, h5, h6,
294
    p, blockquote, pre, a, abbr, acronym,
295
    address, big, cite, code, del, dfn, em,
296
    font, img, ins, kbd, q, s, samp, small, strike,
297
    strong, sub, sup, tt, var, dd, dl, dt,
298
    li, ol, ul, fieldset, form, label, legend,
299
    table, caption, tbody, tfoot, thead,
300
    tr, th, td {
301
      margin: 0;
302
      padding: 0;
303
      border: 0;
304
      font-weight: inherit;
305
      font-style: inherit;
306
      font-size: 100%;
307
      line-height: 1.2em;
308
      font-family: inherit;
309
      text-align: left;
310
      vertical-align: baseline;
311
    }
312
313
    a img, :link img, :visited img {
314
    	border: 0;
315
    }
316
317
    table {
318
    	border-collapse: collapse;
319
    	border-spacing: 0;
320
    }
321
322
    ol, ul {
323
    	list-style: none;
324
    }
325
326
    q:before, q:after,
327
    blockquote:before, blockquote:after {
328
    	content: "";
329
    }
330
/*
331
    注意两点,这里定义了背景色和前景色,这是标准要求的,是网页可用性的一个基本方面,大家可以执行修改。
332
333
    第二点,就是font-size的问题,为了让网页更好的支持网页缩放功能,应该使用em来替换px,这样会让ie6等上古浏览器也能良好的支持网页缩放。浏览器的默认字体高都是16px,所以未经调整的浏览器在显示1em=16px。换算过来的话也就是说1px=0.0625em,也就是12px =0.75em, 10px=0.625em,通过1px=0.0625em大家可以在CSS编写时通过px转换成em。
334
*/
335
    body {background-color: #FFFFFF;}
336
    body, p, td, th, li
337
    {
338
     font-family: "宋体", verdana, helvetica, sans-serif;
339
     font-size: 0.875em;
340
     line-height: 1.5em;
341
     color: #000000;
342
    }
343
/*
344
	-------- Styles come from other framework
345
	My change
346
*/
347
	h1, h2, h3 {
348
		font-weight: bold;
349
		font-family: "SimHei", inherit;
350
	}
351
	h1 {
352
		font-size: 2em;
353
		line-height: 3em;
354
	}
355
	h2 {
356
		background-color: #8BB98B;
357
		font-size: 1.5em;
358
		line-height: 1.5em;
359
		margin-bottom: 0.35em;
360
		margin-left: 1em;
361
		margin-right: 1em;
362
		margin-top: 0.65em;
363
	}
364
	h3 {
365
		font-size: 1.3em;
366
		line-height: 2em;
367
		margin-bottom: 0.1em;
368
		margin-left: 1.154em;
369
		margin-top: 0.2em;
370
	}
371
	h4, h5, h6 {
372
		font-family: "FangSong", inherit;
373
		font-size: 1.15em;
374
		line-height: 2em;
375
		margin-left: 1.364em;
376
	}
377
	p, td, th, li, dt, dd {
378
		font-size: 1em;
379
		line-height: 2em;
380
		margin-left: 3em;
381
	}
382
	dt:after {
383
		content: ":";
384
	}
385
	dd {
386
		margin-left: 6em;
387
	}
388
    pre {
389
    	margin-left: 5em;
390
    }
391
    th {
392
    	font-weight: bold;
393
    	text-align: center;
394
    }
395
	th, td {
396
		padding-left: 0.5em;
397
		padding-right: 0.5em;
398
	}
399
/*
400
	-------- Styles come from other framework
401
	End
402
*/
403
404
405
body {
406
	background-color: rgb(204, 232, 207);
407
}
408
code {
409
	color: #900;
410
	font-size: 1em;
411
}
412
abbr, acronym {
413
	cursor: help;
414
}
415
416
/* Title and list */
417
h1 {
418
	text-align:center;
419
}
420
div.list {
421
	line-height: 1.2em;
422
}
423
/* general unorder list */
424
ul.gen li {
425
	list-style-type: disc;
426
}
427
428
/* link color method 1
429
	a:hover, span.showhide_link:hover {background-color: #bcf; color: #f34;} */
430
a {
431
	text-decoration: none;
432
}
433
a:hover {
434
	background-color: #b50394;
435
	color: #fff;
436
}
437
438
#footer li{
439
	line-height: 1.5em;
440
	margin-right: 1em;
441
	text-align: center;
442
}
443
444
/* Version info */
445
#verinfo {
446
	display: none;
447
	line-height: 1.2em;
448
	background-color: #ded9af;
449
	width: 50em;	/* 需要根据内容大小适当调整 */
450
	border: solid black 1px;
451
	position: absolute;
452
	overflow: hidden;
453
	z-index: 100;
454
	margin: -1em 0em 0em 1em;
455
}
456
#verinfo pre{
457
	/*margin: 0em 0em 0em -2em;*/
458
	margin: 0em 0em 0em -2.5em;
459
}
460
#showhide_verinfo {
461
	position: absolute;
462
	top: 0.5em; left: 0.5em;
463
}
464
465
/* To solve problem: img tag in <a> have bgcolor. */
466
a.img {
467
	background-color: transparent !important;
468
	background-color: #000;
469
}
470
471
/* Footer icon and copyright text. */
472
div#footer img, div#footer span.spacer {
473
	float: left;
474
	margin-top: 0.2em;
475
}
476
div#footer ul#copyright {
477
	float: right;
478
	margin-right: 0%;
479
	margin-top: 0%;
480
	text-align: center;
481
}
482
hr {
483
	border: 0px;
484
	height: 1px;
485
	color: #B0C4DE;
486
	background-color: #B0C4DE;	 /* LightSteelBlue = #B0C4DE */
487
}
488
#ads_bottom {
489
	text-align: center;
490
}
491
492
493
/* Auto numbered list(article), usually used in doc */
494
.article {counter-reset: c-level1} /* top c_lever need not reset */
495
.article h2 {counter-reset: c-level2}
496
.article h3 {counter-reset: c-level3}
497
.article h4 {counter-reset: c-level4}
498
.article h2:before {
499
	/*display: marker; */
500
	content: "§ " counter(c-level1, decimal) " ";
501
	counter-increment: c-level1 1
502
}
503
.article h3:before {
504
	/*display: marker; */
505
	content: "§ " counter(c-level1) "." counter(c-level2, decimal) " ";
506
	counter-increment: c-level2 1
507
}
508
.article h4:before {
509
	/*display: marker; */
510
	content: "§ " counter(c-level1) "." counter(c-level2, decimal) "." counter(c-level3, decimal) " ";
511
	counter-increment: c-level3 1
512
}
513
.article h5:before {
514
	/*display: marker; */
515
	content: "§ " counter(c-level1) "." counter(c-level2, decimal) "." counter(c-level3, decimal) "." counter(c-level4, decimal) " ";
516
	counter-increment: c-level4 1
517
}
518
.article li {
519
	list-style-type: disc;
520
	margin-left: 6em;
521
}
522
.article table {
523
	margin-left: 4em;
524
}
525
.article p {
526
	text-indent: 2em;
527
}
528
/* p in li need not margin/indent, it will display as same as li */
529
.article li p {
530
	margin-left: 0em;
531
	text-indent: 0em;
532
}
533
534
535
/* Temportary debug can apply this class */
536
.debug {
537
	border: 2px solid red;
538
}
539
540
541
/* Single line table in div, printable */
542
.single_line table, .single_line td, .single_line th {
543
	border: 1px solid black;
544
	border-collapse: collapse;
545
}
546
		';
547
	} // end of func SetCss
548
549
550
	/**
551
	 * Store css for print data to array
552
	 */
553
	protected function SetCssPrint() {
554
		$this->aCssPrint['default'] = '
555
#header, #footer, #navigation, #menu, #right_sidebar, #left_sidebar
556
{display:none;}
557
			';
558
	} // end of func SetCssPrint
559
560
561
	/**
562
	 * Store footer data to array
563
	 */
564
	protected function SetFooter() {
565
		$this->aFooter['default'] = "
566
</div>
567
	<script type=\"text/javascript\">
568
	/**
569
	 * Set Display/Hide action to special verinfo div
570
	 */
571
	function SetSvninfo()
572
	{
573
		var obj = $('#showhide_verinfo').children(':first-child');
574
		//$('#showhide_verinfo').mouseover(function(e) {
575
		obj.mouseover(function(e) {
576
			SwitchDisplay('#verinfo', 'block', e);
577
			// Fix position
578
			if ('static' != $('#verinfo').css('position'))
579
				$('#verinfo').css('margin', '0em 0em 0em 0em');
580
		});
581
		//$('#showhide_verinfo').mouseout(function(e) {
582
		obj.mouseout(function(e) {
583
			SwitchDisplay('#verinfo', 'none', e);
584
		});
585
		//$('#showhide_verinfo').children(':first-child').click(function() {
586
		//$('#showhide_verinfo a').click(function() {
587
		obj.click(function() {
588
			SwitchPosition('#verinfo');
589
			// And reset position when static position
590
			// Style same with define in default.css
591
			if ('static' == $('#verinfo').css('position'))
592
				$('#verinfo').css('margin', '-1em 0em 0em 1em');
593
			return false;
594
		});
595
	} // end of func SetSvninfo
596
597
598
	/**
599
	 * 显示/隐藏指定的对象(style.display方式)
600
	 * @param	string	id		对象selector, jQuery format
601
	 * @param	string	value	指定block/none,如省略则自动切换
602
	 * @param	object	e		事件,用于捕捉鼠标位置等,可省略
603
	 */
604
	function SwitchDisplay(id, value, e)
605
	{
606
		var obj = $(id);
607
		//如果对象定位方式是static,就是已经采用非浮动方式显示,则跳过处理
608
		if ('static' == obj.css('position')) return null;
609
610
		// Reference: http://www.quirksmode.org/js/events_properties.html
611
		if (!e) var e = window.event;
612
		// 定位,可选
613
		if (e.pageX || e.pageY) {
614
			posx = e.pageX;
615
			posy = e.pageY;
616
		}
617
		else if (e.clientX || e.clientY) {
618
			posx = e.clientX + document.body.scrollLeft
619
				+ document.documentElement.scrollLeft;
620
			posy = e.clienty + document.body.scrollTop
621
				+ document.documentElement.scrollTop;
622
		}
623
		//obj.css('top', e.clientX);
624
		//obj.css('left', e.clientY);
625
		obj.css('left', posx);
626
		obj.css('top', posy);
627
628
		//显示/隐藏
629
		if (('' == obj.css('display'))
630
			|| ('block' == value)
631
			|| ('none' == obj.css('display'))
632
			//|| (undefined == obj.css('display'))
633
			)
634
			obj.css('display', 'block');
635
		else if (('block' == obj.css('display')) || ('none' == value))
636
			obj.css('display', 'none');
637
	} // end of function SwitchDisplay
638
639
640
	/**
641
	 * 切换对象的定位方式
642
	 * @param	string	id		对象selector, jQuery format
643
	 * @param	string	value	指定static/absolute,如省略则自动切换
644
	 */
645
	function SwitchPosition(id, value)
646
	{
647
		var obj = $(id);
648
		if (('' == obj.css('position'))
649
			|| ('static' == value)
650
			|| ('absolute' == obj.css('position')))
651
			obj.css('position', 'static');
652
		else if (('static' == obj.css('position'))
653
			|| ('absolute' == value))
654
			obj.css('position', 'absolute');
655
	} // end of function SwitchPosition
656
657
658
	// Auto set property
659
	SetSvninfo();
660
661
	</script>
662
663
	<div id=\"footer\">
664
		<hr />
665
		<ul id=\"copyright\">
666
			{copyright2}
667
		</ul>
668
	</div>
669
670
</body>
671
</html>
672
		";
673
	} // end of func SetFooter
674
675
676
	/**
677
	 * Store header data to array
678
	 */
679
	protected function SetHeader() {
680
		$this->aHeader['default'] = '<?' . 'xml version="1.0" encoding="utf-8"?>
681
<!DOCTYPE html
682
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
683
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
684
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
685
686
<head>
687
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
688
	<meta http-equiv="Content-Language" content="utf-8" />
689
	<meta name="Author" content="{info.author}" />
690
	<meta name="Keywords" content="{info.keywords}" />
691
	<meta name="Description" content="{info.description}" />
692
693
	<style type="text/css" media="screen, print">
694
	<!--
695
		{css}
696
	-->
697
	</style>
698
	<style type="text/css" media="print">
699
	<!--
700
		{cssprint}
701
	-->
702
	</style>
703
704
	<script type="text/javascript"
705
		src="' . $this->aCfg['path_jquery'] . '">
706
	</script>
707
708
	<title>{info.title}</title>
709
710
</head>
711
<body>
712
<div class="article">
713
714
	<h1>{info.title}</h1>
715
716
	<div id="showhide_verinfo">
717
		<a href="">[v]</a>&nbsp; &nbsp; &nbsp; &nbsp;
718
		<a href="?view=sourcecode" title="View Sourcecode">[s]</a>
719
	</div>
720
721
	<div id="verinfo"><pre>
722
	/**
723
	 * {info.title}
724
	 *
725
	 * @package     {info.package}
726
	 * @subpackage  {info.subpackage}
727
	 * @copyright   {info.copyright1}
728
	 * @author      {info.author} &lt;<a href="mailto:{info.authormail}" tabindex="1">{info.authormail}</a>&gt;
729
	 * @since       {info.since}
730
	 * @version     {info.version}
731
	 */</pre></div>
732
		';
733
	} // end of func SetHeader
734
735
736
	/**
737
	 * Set info array
738
	 */
739
	public function SetInfoFwolflib() {
740
		$this->aInfo['package']		= "fwolflib";
741
		$this->aInfo['subpackage']	= "doc";
742
		$this->aInfo['copyright1']	= "Copyright &copy; 2009, Fwolf";
743
		$this->aInfo['since']		= "2009-04-19";
744
		$this->aInfo['version']		= "\$Id\$";
745
		$this->aInfo['copyright2']	= array(
746
			'Copyright &copy; 2009, Fwolf',
747
			'All Rights Reserved.',
748
		);
749
	} // end of func SetInfoFwolflib
750
} // end of class DocMarkdown
751
?>
0 ignored issues
show
It is not recommended to use PHP's closing tag ?> in files other than templates.

Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore.

A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever.

Loading history...
752