1
|
|
|
<?php |
2
|
|
|
//============================================================+ |
3
|
|
|
// File name : c128aobject.php |
4
|
|
|
// Begin : 2002-07-31 |
5
|
|
|
// Last Update : 2004-12-29 |
6
|
|
|
// Author : Karim Mribti [[email protected]] |
7
|
|
|
// Version : 0.0.8a 2001-04-01 (original code) |
8
|
|
|
// License : GNU LGPL (Lesser General Public License) 2.1 |
9
|
|
|
// http://www.gnu.org/copyleft/lesser.txt |
10
|
|
|
// Source Code : http://www.mribti.com/barcode/ |
11
|
|
|
// |
12
|
|
|
// Description : Code 128-A Barcode Render Class for PHP using |
13
|
|
|
// the GD graphics library. |
14
|
|
|
// Code 128-A is a continuous, multilevel and |
15
|
|
|
// include all upper case alphanumeric characters |
16
|
|
|
// and ASCII control characters. |
17
|
|
|
// |
18
|
|
|
// NOTE: |
19
|
|
|
// This version contains changes by Nicola Asuni: |
20
|
|
|
// - porting to PHP4 |
21
|
|
|
// - code style and formatting |
22
|
|
|
// - automatic php documentation in PhpDocumentor Style |
23
|
|
|
// (www.phpdoc.org) |
24
|
|
|
// - minor bug fixing |
25
|
|
|
//============================================================+ |
26
|
|
|
|
27
|
|
|
/** |
28
|
|
|
* Code 128-A Barcode Render Class for PHP using the GD graphics library.<br> |
29
|
|
|
* Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters. |
30
|
|
|
* @author Karim Mribti, Nicola Asuni |
31
|
|
|
* @name BarcodeObject |
32
|
|
|
* @package com.tecnick.tcpdf |
33
|
|
|
* @version 0.0.8a 2001-04-01 (original code) |
34
|
|
|
* @since 2001-03-25 |
35
|
|
|
* @license http://www.gnu.org/copyleft/lesser.html LGPL |
36
|
|
|
*/ |
37
|
|
|
|
38
|
|
|
/** |
39
|
|
|
* Code 128-A Barcode Render Class for PHP using the GD graphics library.<br> |
40
|
|
|
* Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters. |
41
|
|
|
* @author Karim Mribti, Nicola Asuni |
42
|
|
|
* @name BarcodeObject |
43
|
|
|
* @package com.tecnick.tcpdf |
44
|
|
|
* @version 0.0.8a 2001-04-01 (original code) |
45
|
|
|
* @since 2001-03-25 |
46
|
|
|
* @license http://www.gnu.org/copyleft/lesser.html LGPL |
47
|
|
|
*/ |
48
|
|
View Code Duplication |
class C128AObject extends BarcodeObject { |
|
|
|
|
49
|
|
|
|
50
|
|
|
/** |
51
|
|
|
* Class Constructor. |
52
|
|
|
* @param int $Width Image width in pixels. |
53
|
|
|
* @param int $Height Image height in pixels. |
54
|
|
|
* @param int $Style Barcode style. |
55
|
|
|
* @param int $Value value to print on barcode. |
56
|
|
|
*/ |
57
|
|
|
function C128AObject($Width, $Height, $Style, $Value) { |
|
|
|
|
58
|
|
|
$this->BarcodeObject($Width, $Height, $Style); |
59
|
|
|
$this->mValue = $Value; |
|
|
|
|
60
|
|
|
$this->mChars = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"; |
|
|
|
|
61
|
|
|
$this->mCharSet = array ( |
|
|
|
|
62
|
|
|
"212222", /* 00 */ |
63
|
|
|
"222122", /* 01 */ |
64
|
|
|
"222221", /* 02 */ |
65
|
|
|
"121223", /* 03 */ |
66
|
|
|
"121322", /* 04 */ |
67
|
|
|
"131222", /* 05 */ |
68
|
|
|
"122213", /* 06 */ |
69
|
|
|
"122312", /* 07 */ |
70
|
|
|
"132212", /* 08 */ |
71
|
|
|
"221213", /* 09 */ |
72
|
|
|
"221312", /* 10 */ |
73
|
|
|
"231212", /* 11 */ |
74
|
|
|
"112232", /* 12 */ |
75
|
|
|
"122132", /* 13 */ |
76
|
|
|
"122231", /* 14 */ |
77
|
|
|
"113222", /* 15 */ |
78
|
|
|
"123122", /* 16 */ |
79
|
|
|
"123221", /* 17 */ |
80
|
|
|
"223211", /* 18 */ |
81
|
|
|
"221132", /* 19 */ |
82
|
|
|
"221231", /* 20 */ |
83
|
|
|
"213212", /* 21 */ |
84
|
|
|
"223112", /* 22 */ |
85
|
|
|
"312131", /* 23 */ |
86
|
|
|
"311222", /* 24 */ |
87
|
|
|
"321122", /* 25 */ |
88
|
|
|
"321221", /* 26 */ |
89
|
|
|
"312212", /* 27 */ |
90
|
|
|
"322112", /* 28 */ |
91
|
|
|
"322211", /* 29 */ |
92
|
|
|
"212123", /* 30 */ |
93
|
|
|
"212321", /* 31 */ |
94
|
|
|
"232121", /* 32 */ |
95
|
|
|
"111323", /* 33 */ |
96
|
|
|
"131123", /* 34 */ |
97
|
|
|
"131321", /* 35 */ |
98
|
|
|
"112313", /* 36 */ |
99
|
|
|
"132113", /* 37 */ |
100
|
|
|
"132311", /* 38 */ |
101
|
|
|
"211313", /* 39 */ |
102
|
|
|
"231113", /* 40 */ |
103
|
|
|
"231311", /* 41 */ |
104
|
|
|
"112133", /* 42 */ |
105
|
|
|
"112331", /* 43 */ |
106
|
|
|
"132131", /* 44 */ |
107
|
|
|
"113123", /* 45 */ |
108
|
|
|
"113321", /* 46 */ |
109
|
|
|
"133121", /* 47 */ |
110
|
|
|
"313121", /* 48 */ |
111
|
|
|
"211331", /* 49 */ |
112
|
|
|
"231131", /* 50 */ |
113
|
|
|
"213113", /* 51 */ |
114
|
|
|
"213311", /* 52 */ |
115
|
|
|
"213131", /* 53 */ |
116
|
|
|
"311123", /* 54 */ |
117
|
|
|
"311321", /* 55 */ |
118
|
|
|
"331121", /* 56 */ |
119
|
|
|
"312113", /* 57 */ |
120
|
|
|
"312311", /* 58 */ |
121
|
|
|
"332111", /* 59 */ |
122
|
|
|
"314111", /* 60 */ |
123
|
|
|
"221411", /* 61 */ |
124
|
|
|
"431111", /* 62 */ |
125
|
|
|
"111224", /* 63 */ |
126
|
|
|
"111422", /* 64 */ |
127
|
|
|
"121124", /* 65 */ |
128
|
|
|
"121421", /* 66 */ |
129
|
|
|
"141122", /* 67 */ |
130
|
|
|
"141221", /* 68 */ |
131
|
|
|
"112214", /* 69 */ |
132
|
|
|
"112412", /* 70 */ |
133
|
|
|
"122114", /* 71 */ |
134
|
|
|
"122411", /* 72 */ |
135
|
|
|
"142112", /* 73 */ |
136
|
|
|
"142211", /* 74 */ |
137
|
|
|
"241211", /* 75 */ |
138
|
|
|
"221114", /* 76 */ |
139
|
|
|
"413111", /* 77 */ |
140
|
|
|
"241112", /* 78 */ |
141
|
|
|
"134111", /* 79 */ |
142
|
|
|
"111242", /* 80 */ |
143
|
|
|
"121142", /* 81 */ |
144
|
|
|
"121241", /* 82 */ |
145
|
|
|
"114212", /* 83 */ |
146
|
|
|
"124112", /* 84 */ |
147
|
|
|
"124211", /* 85 */ |
148
|
|
|
"411212", /* 86 */ |
149
|
|
|
"421112", /* 87 */ |
150
|
|
|
"421211", /* 88 */ |
151
|
|
|
"212141", /* 89 */ |
152
|
|
|
"214121", /* 90 */ |
153
|
|
|
"412121", /* 91 */ |
154
|
|
|
"111143", /* 92 */ |
155
|
|
|
"111341", /* 93 */ |
156
|
|
|
"131141", /* 94 */ |
157
|
|
|
"114113", /* 95 */ |
158
|
|
|
"114311", /* 96 */ |
159
|
|
|
"411113", /* 97 */ |
160
|
|
|
"411311", /* 98 */ |
161
|
|
|
"113141", /* 99 */ |
162
|
|
|
"114131", /* 100 */ |
163
|
|
|
"311141", /* 101 */ |
164
|
|
|
"411131" /* 102 */ |
165
|
|
|
); |
166
|
|
|
} |
167
|
|
|
|
168
|
|
|
/** |
169
|
|
|
* Returns the character index. |
170
|
|
|
* @param char $char character. |
171
|
|
|
* @return int character index or -1 in case of error. |
172
|
|
|
* @access private |
173
|
|
|
*/ |
174
|
|
|
function GetCharIndex($char) { |
|
|
|
|
175
|
|
|
for ($i=0;$i<64;$i++) { |
176
|
|
|
if ($this->mChars[$i] == $char) { |
177
|
|
|
return $i; |
178
|
|
|
} |
179
|
|
|
} |
180
|
|
|
return -1; |
181
|
|
|
} |
182
|
|
|
|
183
|
|
|
/** |
184
|
|
|
* Returns the bar size. |
185
|
|
|
* @param int $xres Horizontal resolution. |
186
|
|
|
* @param char $char Character. |
187
|
|
|
* @return int barcode size. |
188
|
|
|
* @access private |
189
|
|
|
*/ |
190
|
|
|
function GetBarSize($xres, $char) { |
|
|
|
|
191
|
|
|
switch ($char) { |
192
|
|
|
case '1': { |
193
|
|
|
$cVal = BCD_C128_BAR_1; |
194
|
|
|
break; |
195
|
|
|
} |
196
|
|
|
case '2': { |
197
|
|
|
$cVal = BCD_C128_BAR_2; |
198
|
|
|
break; |
199
|
|
|
} |
200
|
|
|
case '3': { |
201
|
|
|
$cVal = BCD_C128_BAR_3; |
202
|
|
|
break; |
203
|
|
|
} |
204
|
|
|
case '4': { |
205
|
|
|
$cVal = BCD_C128_BAR_4; |
206
|
|
|
break; |
207
|
|
|
} |
208
|
|
|
default: { |
209
|
|
|
$cVal = 0; |
210
|
|
|
} |
211
|
|
|
} |
212
|
|
|
return $cVal * $xres; |
213
|
|
|
} |
214
|
|
|
|
215
|
|
|
/** |
216
|
|
|
* Returns barcode size. |
217
|
|
|
* @param int $xres Horizontal resolution. |
218
|
|
|
* @return barcode size. |
|
|
|
|
219
|
|
|
* @access private |
220
|
|
|
*/ |
221
|
|
|
function GetSize($xres) { |
|
|
|
|
222
|
|
|
$len = strlen($this->mValue); |
223
|
|
|
|
224
|
|
|
if ($len == 0) { |
225
|
|
|
$this->mError = "Null value"; |
|
|
|
|
226
|
|
|
return false; |
227
|
|
|
} |
228
|
|
|
$ret = 0; |
229
|
|
|
for ($i=0;$i<$len;$i++) { |
230
|
|
|
if (($id = $this->GetCharIndex($this->mValue[$i])) == -1) { |
231
|
|
|
$this->mError = "C128A not include the char '".$this->mValue[$i]."'"; |
|
|
|
|
232
|
|
|
return false; |
233
|
|
|
} else { |
234
|
|
|
$cset = $this->mCharSet[$id]; |
235
|
|
|
$ret += $this->GetBarSize($xres, $cset[0]); |
236
|
|
|
$ret += $this->GetBarSize($xres, $cset[1]); |
237
|
|
|
$ret += $this->GetBarSize($xres, $cset[2]); |
238
|
|
|
$ret += $this->GetBarSize($xres, $cset[3]); |
239
|
|
|
$ret += $this->GetBarSize($xres, $cset[4]); |
240
|
|
|
$ret += $this->GetBarSize($xres, $cset[5]); |
241
|
|
|
} |
242
|
|
|
} |
243
|
|
|
|
244
|
|
|
/* length of Check character */ |
245
|
|
|
$cset = $this->GetCheckCharValue(); |
246
|
|
|
$CheckSize = 0; |
247
|
|
|
for ($i=0;$i<6;$i++) { |
248
|
|
|
$CheckSize += $this->GetBarSize($cset[$i], $xres); |
|
|
|
|
249
|
|
|
} |
250
|
|
|
$StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres; |
251
|
|
|
$StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres; |
252
|
|
|
return $StartSize + $ret + $CheckSize + $StopSize; |
253
|
|
|
} |
254
|
|
|
|
255
|
|
|
/** |
256
|
|
|
* Returns the check-char value. |
257
|
|
|
* @return string. |
|
|
|
|
258
|
|
|
* @access private |
259
|
|
|
*/ |
260
|
|
|
function GetCheckCharValue() { |
|
|
|
|
261
|
|
|
$len = strlen($this->mValue); |
262
|
|
|
$sum = 103; // 'A' type; |
263
|
|
|
for ($i=0;$i<$len;$i++) { |
264
|
|
|
$sum += $this->GetCharIndex($this->mValue[$i]) * ($i+1); |
265
|
|
|
} |
266
|
|
|
$check = $sum % 103; |
267
|
|
|
return $this->mCharSet[$check]; |
268
|
|
|
} |
269
|
|
|
|
270
|
|
|
/** |
271
|
|
|
* Draws the start code. |
272
|
|
|
* @param int $DrawPos Drawing position. |
273
|
|
|
* @param int $yPos Vertical position. |
274
|
|
|
* @param int $ySize Vertical size. |
275
|
|
|
* @param int $xres Horizontal resolution. |
276
|
|
|
* @return int drawing position. |
277
|
|
|
* @access private |
278
|
|
|
*/ |
279
|
|
|
function DrawStart($DrawPos, $yPos, $ySize, $xres) { |
|
|
|
|
280
|
|
|
/* Start code is '211412' */ |
281
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('2', $xres) , $ySize); |
|
|
|
|
282
|
|
|
$DrawPos += $this->GetBarSize('2', $xres); |
|
|
|
|
283
|
|
|
$DrawPos += $this->GetBarSize('1', $xres); |
|
|
|
|
284
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('1', $xres) , $ySize); |
|
|
|
|
285
|
|
|
$DrawPos += $this->GetBarSize('1', $xres); |
|
|
|
|
286
|
|
|
$DrawPos += $this->GetBarSize('4', $xres); |
|
|
|
|
287
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('1', $xres) , $ySize); |
|
|
|
|
288
|
|
|
$DrawPos += $this->GetBarSize('1', $xres); |
|
|
|
|
289
|
|
|
$DrawPos += $this->GetBarSize('2', $xres); |
|
|
|
|
290
|
|
|
return $DrawPos; |
291
|
|
|
} |
292
|
|
|
|
293
|
|
|
/** |
294
|
|
|
* Draws the stop code. |
295
|
|
|
* @param int $DrawPos Drawing position. |
296
|
|
|
* @param int $yPos Vertical position. |
297
|
|
|
* @param int $ySize Vertical size. |
298
|
|
|
* @param int $xres Horizontal resolution. |
299
|
|
|
* @return int drawing position. |
300
|
|
|
* @access private |
301
|
|
|
*/ |
302
|
|
|
function DrawStop($DrawPos, $yPos, $ySize, $xres) { |
|
|
|
|
303
|
|
|
/* Stop code is '2331112' */ |
304
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('2', $xres) , $ySize); |
|
|
|
|
305
|
|
|
$DrawPos += $this->GetBarSize('2', $xres); |
|
|
|
|
306
|
|
|
$DrawPos += $this->GetBarSize('3', $xres); |
|
|
|
|
307
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('3', $xres) , $ySize); |
|
|
|
|
308
|
|
|
$DrawPos += $this->GetBarSize('3', $xres); |
|
|
|
|
309
|
|
|
$DrawPos += $this->GetBarSize('1', $xres); |
|
|
|
|
310
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('1', $xres) , $ySize); |
|
|
|
|
311
|
|
|
$DrawPos += $this->GetBarSize('1', $xres); |
|
|
|
|
312
|
|
|
$DrawPos += $this->GetBarSize('1', $xres); |
|
|
|
|
313
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('2', $xres) , $ySize); |
|
|
|
|
314
|
|
|
$DrawPos += $this->GetBarSize('2', $xres); |
|
|
|
|
315
|
|
|
return $DrawPos; |
316
|
|
|
} |
317
|
|
|
|
318
|
|
|
/** |
319
|
|
|
* Draws the check-char code. |
320
|
|
|
* @param int $DrawPos Drawing position. |
321
|
|
|
* @param int $yPos Vertical position. |
322
|
|
|
* @param int $ySize Vertical size. |
323
|
|
|
* @param int $xres Horizontal resolution. |
324
|
|
|
* @return int drawing position. |
325
|
|
|
* @access private |
326
|
|
|
*/ |
327
|
|
|
function DrawCheckChar($DrawPos, $yPos, $ySize, $xres) { |
|
|
|
|
328
|
|
|
$cset = $this->GetCheckCharValue(); |
329
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[0], $xres) , $ySize); |
|
|
|
|
330
|
|
|
$DrawPos += $this->GetBarSize($cset[0], $xres); |
|
|
|
|
331
|
|
|
$DrawPos += $this->GetBarSize($cset[1], $xres); |
|
|
|
|
332
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[2], $xres) , $ySize); |
|
|
|
|
333
|
|
|
$DrawPos += $this->GetBarSize($cset[2], $xres); |
|
|
|
|
334
|
|
|
$DrawPos += $this->GetBarSize($cset[3], $xres); |
|
|
|
|
335
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[4], $xres) , $ySize); |
|
|
|
|
336
|
|
|
$DrawPos += $this->GetBarSize($cset[4], $xres); |
|
|
|
|
337
|
|
|
$DrawPos += $this->GetBarSize($cset[5], $xres); |
|
|
|
|
338
|
|
|
return $DrawPos; |
339
|
|
|
} |
340
|
|
|
|
341
|
|
|
/** |
342
|
|
|
* Draws the barcode object. |
343
|
|
|
* @param int $xres Horizontal resolution. |
344
|
|
|
* @return bool true in case of success. |
345
|
|
|
*/ |
346
|
|
|
function DrawObject($xres) { |
|
|
|
|
347
|
|
|
$len = strlen($this->mValue); |
348
|
|
|
if (($size = $this->GetSize($xres))==0) { |
349
|
|
|
return false; |
350
|
|
|
} |
351
|
|
|
|
352
|
|
|
if ($this->mStyle & BCS_ALIGN_CENTER) $sPos = (integer)(($this->mWidth - $size ) / 2); |
353
|
|
|
else if ($this->mStyle & BCS_ALIGN_RIGHT) $sPos = $this->mWidth - $size; |
354
|
|
|
else $sPos = 0; |
355
|
|
|
|
356
|
|
|
/* Total height of bar code -Bars only- */ |
357
|
|
|
if ($this->mStyle & BCS_DRAW_TEXT) $ysize = $this->mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - $this->GetFontHeight($this->mFont); |
358
|
|
|
else $ysize = $this->mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2; |
359
|
|
|
|
360
|
|
|
/* Draw text */ |
361
|
|
|
if ($this->mStyle & BCS_DRAW_TEXT) { |
362
|
|
|
if ($this->mStyle & BCS_STRETCH_TEXT) { |
363
|
|
|
for ($i=0;$i<$len;$i++) { |
364
|
|
|
$this->DrawChar($this->mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i, |
365
|
|
|
$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, $this->mValue[$i]); |
366
|
|
|
} |
367
|
|
|
} else {/* Center */ |
368
|
|
|
$text_width = $this->GetFontWidth($this->mFont) * strlen($this->mValue); |
369
|
|
|
$this->DrawText($this->mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres), |
370
|
|
|
$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, $this->mValue); |
371
|
|
|
} |
372
|
|
|
} |
373
|
|
|
|
374
|
|
|
$cPos = 0; |
375
|
|
|
$DrawPos = $this->DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); |
376
|
|
|
do { |
377
|
|
|
$c = $this->GetCharIndex($this->mValue[$cPos]); |
378
|
|
|
$cset = $this->mCharSet[$c]; |
379
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[0], $xres) , $ysize); |
|
|
|
|
380
|
|
|
$DrawPos += $this->GetBarSize($cset[0], $xres); |
|
|
|
|
381
|
|
|
$DrawPos += $this->GetBarSize($cset[1], $xres); |
|
|
|
|
382
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[2], $xres) , $ysize); |
|
|
|
|
383
|
|
|
$DrawPos += $this->GetBarSize($cset[2], $xres); |
|
|
|
|
384
|
|
|
$DrawPos += $this->GetBarSize($cset[3], $xres); |
|
|
|
|
385
|
|
|
$this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[4], $xres) , $ysize); |
|
|
|
|
386
|
|
|
$DrawPos += $this->GetBarSize($cset[4], $xres); |
|
|
|
|
387
|
|
|
$DrawPos += $this->GetBarSize($cset[5], $xres); |
|
|
|
|
388
|
|
|
$cPos++; |
389
|
|
|
} while ($cPos<$len); |
390
|
|
|
$DrawPos = $this->DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); |
391
|
|
|
$DrawPos = $this->DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); |
|
|
|
|
392
|
|
|
return true; |
393
|
|
|
} |
394
|
|
|
} |
395
|
|
|
|
396
|
|
|
//============================================================+ |
397
|
|
|
// END OF FILE |
398
|
|
|
//============================================================+ |
399
|
|
|
?> |
|
|
|
|
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.