Umzug zu gitlab
This commit is contained in:
		
							
								
								
									
										3
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # xls_export # | ||||
|  | ||||
| Fork der Erweiterung xls_export aus dem Contao Extension Repository (https://contao.org/de/extension-list/view/xls_export.de.html). Der Fork wurde erzeugt, um die Erweiterung im Composer veröffentlichen zu können. | ||||
							
								
								
									
										38
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| { | ||||
| 	"name":"cgo-it/xls_export", | ||||
| 	"description":"xls_export extension for the Contao Open Source CMS", | ||||
| 	"keywords":["contao", "excel"], | ||||
| 	"type":"contao-module", | ||||
| 	"license":"GPL", | ||||
| 	"authors":[ | ||||
| 		{ | ||||
| 			"name":"cgo IT", | ||||
| 			"email":"info@cgo-it.de", | ||||
| 			"homepage":"https://cgo-it.de", | ||||
| 			"role":"Developer" | ||||
| 		} | ||||
| 	], | ||||
| 	"support": { | ||||
| 		"email": "info@cgo-it.de", | ||||
| 		"issues": "https://bitbucket.org/cgo-it/contao-xls_export/issues?status=new&status=open", | ||||
| 		"source": "https://bitbucket.org/cgo-it/contao-xls_export/src" | ||||
| 	}, | ||||
| 	"require":{ | ||||
| 		"php":">=5.3", | ||||
| 		"contao/core":">=3.0", | ||||
| 		"contao-community-alliance/composer-plugin": "~2.0" | ||||
| 	}, | ||||
| 	"replace": { | ||||
| 		"cgo-it/xls_export": "self.version" | ||||
| 	}, | ||||
|     "conflict": { | ||||
| 			"contao/core": "2.11.*" | ||||
| 	}, | ||||
| 	"extra":{ | ||||
| 		"contao": { | ||||
| 			"sources":{ | ||||
| 				"":"system/modules/xls_export" | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										7
									
								
								config/autoload.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								config/autoload.ini
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
|  | ||||
| ;; | ||||
| ; Configure what you want the autoload creator to register | ||||
| ;; | ||||
| register_namespaces = true | ||||
| register_classes    = true | ||||
| register_templates  = true | ||||
							
								
								
									
										28
									
								
								config/autoload.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								config/autoload.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| <?php | ||||
|  | ||||
| /** | ||||
|  * Contao Open Source CMS | ||||
|  *  | ||||
|  * Copyright (C) 2005-2012 Leo Feyer | ||||
|  *  | ||||
|  * @package xls_export | ||||
|  * @link    http://contao.org | ||||
|  * @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Register the classes | ||||
|  */ | ||||
| ClassLoader::addClasses(array | ||||
| ( | ||||
| 	// Classes | ||||
| 	'xls_bof'          => 'system/modules/xls_export/vendor/biff.php', | ||||
| 	'fat_class'        => 'system/modules/xls_export/vendor/fat.php', | ||||
| 	'xls_font'         => 'system/modules/xls_export/vendor/font.php', | ||||
| 	'xls_mergedcells'  => 'system/modules/xls_export/vendor/mergedcells.php', | ||||
| 	'xls_palette'      => 'system/modules/xls_export/vendor/palette.php', | ||||
| 	'xls_picture'      => 'system/modules/xls_export/vendor/picture.php', | ||||
| 	'xls_xf'           => 'system/modules/xls_export/vendor/xf.php', | ||||
| 	'xlsexport'        => 'system/modules/xls_export/vendor/xls_export.php', | ||||
| )); | ||||
							
								
								
									
										322
									
								
								vendor/biff.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										322
									
								
								vendor/biff.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,322 @@ | ||||
| <?php | ||||
| 	define ("XLSDATA_BYTE",     1,true); | ||||
| 	define ("XLSDATA_SHORT",    2,true); | ||||
| 	define ("XLSDATA_LONG",     3,true); | ||||
| 	define ("XLSDATA_FLOAT",    4,true); | ||||
| 	define ("XLSDATA_STRING",   5,true); | ||||
| 	define ("XLSDATA_LSTRING",  6,true); | ||||
| 	define ("XLSDATA_STRING1",  7,true); | ||||
| 	define ("XLSDATA_DATA32BIT",8,true); | ||||
| 	 | ||||
| 	define ("XLS_BIFF5",0x0809); | ||||
| 	define ("XLS_BIFF_EOF",0x000a); | ||||
| 	define ("WORKBOOK_SHEET",0x0010); | ||||
| 	 | ||||
| 	define ("BIFF_WORKBOOKGLOBALS",0x0005); | ||||
| 	define ("BIFF_CALCCOUNT",0x000c); | ||||
| 	define ("BIFF_CALCMODE",0x000d); | ||||
| 	define ("BIFF_PRECISION",0x000e); | ||||
| 	define ("BIFF_REFMODE",0x000f); | ||||
| 	define ("BIFF_DELTA",0x0010); | ||||
| 	define ("BIFF_ITERATION",0x0011); | ||||
| 	define ("BIFF_PROTECT",0x0012); | ||||
| 	define ("BIFF_PASSWORD",0x0013); | ||||
| 	define ("BIFF_PAGEHEADER",0x0014); | ||||
| 	define ("BIFF_PAGEFOOTER",0x0015); | ||||
| 	define ("BIFF_EXTERNALREFERENCESCOUNT",0x0016); | ||||
| 	define ("BIFF_EXTERNSHEET",0x0017); | ||||
| 	define ("BIFF_DEFINEDNAME",0x0018); | ||||
| 	define ("BIFF_WINDOWPROTECT",0x0019); | ||||
| 	define ("BIFF_SELECTION",0x001d); | ||||
| 	define ("BIFF_DATEMODE",0x0022); | ||||
| 	define ("BIFF_LEFTMARGIN",0x0026); | ||||
| 	define ("BIFF_RIGHTMARGIN",0x0027); | ||||
| 	define ("BIFF_TOPMARGIN",0x0028); | ||||
| 	define ("BIFF_BOTTOMMARGIN",0x0029); | ||||
| 	define ("BIFF_PRINTHEADERS",0x002a); | ||||
| 	define ("BIFF_PRINTGRIDLINES",0x002b); | ||||
| 	define ("BIFF_FONT",0x0031); | ||||
| 	define ("BIFF_CONTINUE",0x003c); | ||||
| 	define ("BIFF_WINDOW1",0x003d); | ||||
| 	define ("BIFF_BACKUP",0x0040); | ||||
| 	define ("BIFF_DEFCOLWIDTH",0x0055); | ||||
| 	define ("BIFF_WRITEACCESS",0x005c); | ||||
| 	define ("BIFF_OBJECT",0x005d); | ||||
| 	define ("BIFF_SAVERECALC",0x005f); | ||||
| 	define ("BIFF_COLINFO",0x007d); | ||||
| 	define ("BIFF_IMAGEDATA",0x007f); | ||||
| 	define ("BIFF_GUTS",0x0080); | ||||
| 	define ("BIFF_SHEETPR",0x0081); | ||||
| 	define ("BIFF_GRIDSET",0x0082); | ||||
| 	define ("BIFF_HCENTER",0x0083); | ||||
| 	define ("BIFF_VCENTER",0x0084); | ||||
| 	define ("BIFF_BOUNDSHEET",0x0085); | ||||
| 	define ("BIFF_COUNTRY",0x008c); | ||||
| 	define ("BIFF_OBJECTDISPLAYOPTIONS",0x008d); | ||||
| 	define ("BIFF_PALETTE",0x0092); | ||||
| 	define ("BIFF_FUNCTIONGROUPCOUNT",0x009c); | ||||
| 	define ("BIFF_PAGESETUP",0x00a1); | ||||
| 	define ("BIFF_TOOLBARHEADER",0x00bf);			// undocumented | ||||
| 	define ("BIFF_TOOLBAREND",0x00c0);				// undocumented | ||||
| 	define ("BIFF_MENURECORDGROUP",0x00c1); | ||||
| 	define ("BIFF_DBCELL",0x00d7); | ||||
| 	define ("BIFF_BOOKBOOL",0x00da); | ||||
| 	define ("BIFF_XFRECORD",0x00e0); | ||||
| 	define ("BIFF_INTERFACEHEADER",0x00e1); | ||||
| 	define ("BIFF_INTERFACEEND",0x00e2); | ||||
| 	define ("BIFF_MERGEDCELLS",0x00e5); | ||||
| 	 | ||||
| /* | ||||
| 016FH = 367 = ASCII | ||||
| 01B5H = 437 = IBM PC CP-437 (US) | ||||
| 02D0H = 720 = IBM PC CP-720 (OEM Arabic) | ||||
| 02E1H = 737 = IBM PC CP-737 (Greek) | ||||
| 0307H = 775 = IBM PC CP-775 (Baltic) | ||||
| 0352H = 850 = IBM PC CP-850 (Latin I) | ||||
| 0354H = 852 = IBM PC CP-852 (Latin II (Central European)) | ||||
| 0357H = 855 = IBM PC CP-855 (Cyrillic) | ||||
| 0359H = 857 = IBM PC CP-857 (Turkish) | ||||
| 035AH = 858 = IBM PC CP-858 (Multilingual Latin I with Euro) | ||||
| 035CH = 860 = IBM PC CP-860 (Portuguese) | ||||
| 035DH = 861 = IBM PC CP-861 (Icelandic) | ||||
| 035EH = 862 = IBM PC CP-862 (Hebrew) | ||||
| 035FH = 863 = IBM PC CP-863 (Canadian (French)) | ||||
| 0360H = 864 = IBM PC CP-864 (Arabic) | ||||
| 0361H = 865 = IBM PC CP-865 (Nordic) | ||||
| 0362H = 866 = IBM PC CP-866 (Cyrillic (Russian)) | ||||
| 0365H = 869 = IBM PC CP-869 (Greek (Modern)) | ||||
| 036AH = 874 = Windows CP-874 (Thai) | ||||
| 03A4H = 932 = Windows CP-932 (Japanese Shift-JIS) | ||||
| 03A8H = 936 = Windows CP-936 (Chinese Simplified GBK) | ||||
| 03B5H = 949 = Windows CP-949 (Korean (Wansung)) | ||||
| 03B6H = 950 = Windows CP-950 (Chinese Traditional BIG5) | ||||
| 04B0H = 1200 = UTF-16 (BIFF8) | ||||
| 04E2H = 1250 = Windows CP-1250 (Latin II) (Central European) | ||||
| 04E3H = 1251 = Windows CP-1251 (Cyrillic) | ||||
| 04E4H = 1252 = Windows CP-1252 (Latin I) (BIFF4-BIFF5) | ||||
| 04E5H = 1253 = Windows CP-1253 (Greek) | ||||
| 04E6H = 1254 = Windows CP-1254 (Turkish) | ||||
| 04E7H = 1255 = Windows CP-1255 (Hebrew) | ||||
| 04E8H = 1256 = Windows CP-1256 (Arabic) | ||||
| 04E9H = 1257 = Windows CP-1257 (Baltic) | ||||
| 04EAH = 1258 = Windows CP-1258 (Vietnamese) | ||||
| 0551H = 1361 = Windows CP-1361 (Korean (Johab)) | ||||
| 2710H = 10000 = Apple Roman | ||||
| 8000H = 32768 = Apple Roman | ||||
| 8001H = 32769 = Windows CP-1252 (Latin I) (BIFF2-BIFF3) | ||||
| */ | ||||
| 	define ("BIFF_CODEPAGE",0x0042); | ||||
| 	 | ||||
| 	define ("BIFF_REFRESHALL",0x01b7); | ||||
| 	define ("BIFF_DIMENSIONS",0x0200); | ||||
| 	define ("BIFF_NUMBER",0x0203); | ||||
| 	define ("BIFF_LABEL",0x0204); | ||||
| 	define ("BIFF_ROW",0x0208); | ||||
| 	define ("BIFF_INDEX",0x020b); | ||||
| 	define ("BIFF_DEFAULTROWHEIGHT",0x0225); | ||||
| 	define ("BIFF_WINDOW2",0x023e); | ||||
| 	define ("BIFF_STYLEINFORMATION",0x0293); | ||||
| 	define ("BIFF_FORMAT",0x041e); | ||||
| 	define ("BIFF_SHEETPROTECTION",0x0867); | ||||
| 	 | ||||
| 	class xls_bof { | ||||
| 		var $data = null; | ||||
| 		var $size = 0; | ||||
| 		var $type = null; | ||||
| 		 | ||||
| 		public function __construct($aboftype=-1) { | ||||
| 			if ($aboftype==-1) { die("Error"); } | ||||
| 			$this->data = array(); | ||||
| 			$this->type = $aboftype; | ||||
| 		} | ||||
| 		 | ||||
| 		public function append($adatatype, $adatarec) { | ||||
| 			$new = array(); | ||||
| 			$new["type"] = $adatatype; | ||||
| 			$new["data"] = $adatarec; | ||||
| 			$this->data[] = $new; | ||||
| 		} | ||||
| 		 | ||||
| 		public function clear($aboftype=-1) { | ||||
| 			if ($aboftype==-1) { die("Error"); } | ||||
| 			$this->type = $aboftype; | ||||
| 			$this->data = array(); | ||||
| 			return true; | ||||
| 		} | ||||
| 		 | ||||
| 		public function fetch() { | ||||
| 			$output = ""; | ||||
| 			foreach ($this->data as $key => $datarec) { | ||||
| 				switch ($datarec["type"]) { | ||||
| 					case XLSDATA_BYTE :	$output .= pack("C",$datarec["data"]); | ||||
| 										$this->size+=1; | ||||
| 										break; | ||||
| 										 | ||||
| 					case XLSDATA_SHORT:	$output .= pack("v",$datarec["data"]); | ||||
| 										$this->size+=2; | ||||
| 										break; | ||||
|  | ||||
| 					case XLSDATA_LONG : $output .= pack("V",$datarec["data"]); | ||||
| 										$this->size+=4; | ||||
| 										break; | ||||
| 					 | ||||
| 					case XLSDATA_FLOAT: $output .= pack("d",$datarec["data"]); | ||||
| 										$this->size+=8; | ||||
| 										break; | ||||
| 					 | ||||
| 					case XLSDATA_DATA32BIT :  | ||||
| 										$ldata = $datarec["data"]; | ||||
| 										$b3 = $ldata & 0xff; | ||||
| 										$b2 = ($ldata >> 8) & 0xff; | ||||
| 										$b1 = ($ldata >> 16) & 0xff; | ||||
| 										$b0 = ($ldata >> 24) & 0xff; | ||||
| 										$output .= pack("CCCC",$b0,$b1,$b2,$b3); | ||||
| 										$this->size+=4; | ||||
| 										break; | ||||
| 					 | ||||
| 					case XLSDATA_STRING: | ||||
| 										$output .= pack("C",strlen($datarec["data"])); | ||||
| 										$this->size++; | ||||
| 										if (strlen($datarec["data"])==0) { | ||||
| 											$output .= pack("C",0x00); | ||||
| 											$this->size++; | ||||
| 											break; | ||||
| 										} | ||||
| 					 | ||||
| 					case XLSDATA_STRING1: | ||||
| 										$this->size+=strlen($datarec["data"]); | ||||
| 										//$output .= pack("C",$datarec["data"]); | ||||
| 										$output .= $datarec["data"]; | ||||
| 										break; | ||||
| 					case XLSDATA_LSTRING: | ||||
| 										$output .= pack("v",strlen($datarec["data"])); | ||||
| 										$this->size++; | ||||
| 										$this->size++; | ||||
| 										$this->size+=strlen($datarec["data"]); | ||||
| 										//$output .= pack("C",$datarec["data"]); | ||||
| 										$output .= $datarec["data"]; | ||||
| 										break; | ||||
| 				} | ||||
| 			} | ||||
| 			return pack("vv",$this->bof,$this->size).$output; | ||||
| 		} | ||||
| 		 | ||||
| 		public function save($afilehd) { | ||||
| 			$this->bof = $this->type; | ||||
| 			$this->size = 0; | ||||
| 			$tmp = $this->fetch(); | ||||
| 			if ($this->size<2080) { | ||||
| 				fwrite($afilehd,$tmp); | ||||
| 			} | ||||
| 			else { | ||||
| 				if (defined("BIFFDEBUG")) { | ||||
| 					echo "long record - size : ".$this->size."<br>"; | ||||
| 				} | ||||
| 				$wcount = $this->size; | ||||
| 				$tmptype = $this->type; | ||||
| 				$tmp = substr($tmp,4); | ||||
| 				$tmparr = str_split($tmp,2076); | ||||
| 				if (defined("BIFFDEBUG")) { | ||||
| 					echo "create parts : ".count($tmparr)."<br>"; | ||||
| 				} | ||||
| 				$tmpout = ""; | ||||
| 				foreach ($tmparr as $key => $datapart) { | ||||
| 					if (defined("BIFFDEBUG")) { | ||||
| 						echo "part ($key) size : ".strlen($datapart)."<br>"; | ||||
| 					} | ||||
| 					$tmpout = pack("vv",$tmptype,strlen($datapart)).$datapart; | ||||
| 					fwrite($afilehd,$tmpout); | ||||
| 					$tmptype = BIFF_CONTINUE; | ||||
| 				} | ||||
| 				unset($tmparr); | ||||
| 			} | ||||
| 			return true; | ||||
| 		} | ||||
| 		 | ||||
| 		public function workbookxfrecords($afilehd) { | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0x00,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0001,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0001,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0002,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0002,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0xfff5,0xf4,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0x0001,0x00,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0001,0x002b,0xfff5,0xf8,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0001,0x0029,0xfff5,0xf8,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0001,0x002c,0xfff5,0xf8,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0001,0x002a,0xfff5,0xf8,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0001,0x0009,0xfff5,0xf8,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0x0001,0x10,0x000020c0); | ||||
| 			$this->workbookonexfdata($afilehd,0x0000,0x0000,0x0001,0x50,0x00000488); | ||||
| 		} | ||||
| 		 | ||||
| 		public function workbookonexfdata($afilehd, $fontindex, $formatindex, $xftype, $textorientation, $colorindexs) { | ||||
| 			$this->clear(BIFF_XFRECORD); | ||||
| 			$this->append(XLSDATA_SHORT,$fontindex); | ||||
| 			$this->append(XLSDATA_SHORT,$formatindex); | ||||
| 			$this->append(XLSDATA_SHORT,$xftype); | ||||
| 			$this->append(XLSDATA_BYTE,0x20);				/* alignment | ||||
| 														   bits mask | ||||
| 															2-0 07H XF_HOR_ALIGN ? Horizontal alignment | ||||
| 																0 General | ||||
| 																1 Left | ||||
| 																2 Centred | ||||
| 																3 Right | ||||
| 																4 Filled | ||||
| 																5 Justified (BIFF4-BIFF8) | ||||
| 																6 Centred across selection (BIFF4-BIFF8) | ||||
| 																7 Distributed (BIFF8, available in Excel 10.0 (Excel XP) and later only) | ||||
| 															3 08H 1 = Text is wrapped at right border | ||||
| 															6-4 70H XF_VERT_ALIGN ? Vertical alignment | ||||
| 																0 Top | ||||
| 																1 Centred | ||||
| 																2 Bottom | ||||
| 																3 Justified (BIFF5-BIFF8) | ||||
| 																4 Distributed (BIFF8, available in Excel 10.0 (Excel XP) and later only) | ||||
| 															*/			 | ||||
| 			$this->append(XLSDATA_BYTE,$textorientation);	/*  | ||||
| 															bits mask | ||||
| 															1-0 03H XF_ORIENTATION ? Text orientation | ||||
| 																0 Not rotated | ||||
| 																1 Letters are stacked top-to-bottom, but not rotated | ||||
| 																2 Text is rotated 90 degrees counterclockwise | ||||
| 																3 Text is rotated 90 degrees clockwise | ||||
| 															7-2 FCH XF_USED_ATTRIB ? Used attributes | ||||
| 																0 01H Flag for number format | ||||
| 																1 02H Flag for font | ||||
| 																2 04H Flag for horizontal and vertical alignment, text wrap, indentation, orientation, rotation, and text direction | ||||
| 																3 08H Flag for border lines | ||||
| 																4 10H Flag for background area style | ||||
| 																5 20H Flag for cell protection (cell locked and formula hidden) | ||||
| 															*/ | ||||
| 			$this->append(XLSDATA_LONG,$colorindexs);		/* Cell border lines and background area: | ||||
| 															Bit     Mask       Contents | ||||
| 															6-0   0000007FH Colour index for pattern colour | ||||
| 															13-7  00003F80H Colour index for pattern background | ||||
| 															21-16 003F0000H Fill pattern  | ||||
| 															24-22 01C00000H Bottom line style  | ||||
| 															31-25 FE000000H Colour index for bottom line colour | ||||
| 															*/ | ||||
| 			$this->append(XLSDATA_LONG,0);					/* Line styles | ||||
| 															Bit     Mask       Contents | ||||
| 															2-0   00000007H Top line style | ||||
| 															5-3   00000038H Left line style | ||||
| 															8-6   000001C0H Right line style | ||||
| 															15-9  0000FE00H Colour index for top line colour | ||||
| 															22-16 007F0000H Colour index for left line colour | ||||
| 															29-23 3F800000H Colour index for right line colour | ||||
| 															*/ | ||||
| 			$this->save($afilehd); | ||||
| 		} | ||||
| 		 | ||||
| 	} | ||||
| ?> | ||||
							
								
								
									
										53
									
								
								vendor/fat.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/fat.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| <?php | ||||
| 	class fat_class { | ||||
| 		var $streamsize = null; | ||||
| 		var $rootstorageoffset = null; | ||||
| 		var $fatchain = array(); | ||||
| 		var $fatsectorcount = null; | ||||
| 		 | ||||
| 		public function __construct($afilehd, $astreamsize, $arootstorageoffset) { | ||||
| 			$this->streamsize = $astreamsize; | ||||
| 			$this->rootstorageoffset = $arootstorageoffset; | ||||
| 			 | ||||
| 			if ($this->streamsize>=0x1000) { | ||||
| 				$streamsectors = $this->streamsize >> 9; | ||||
| 				$streamsectors += (($this->streamsize & 0x1ff)>0 ? 1 : 0); | ||||
| 			} | ||||
| 			else { | ||||
| 				$streamsectors = ($this->rootstorageoffset+0x100) >> 9; | ||||
| 				$streamsectors += ((($this->rootstorageoffset+0x100) & 0x1ff)>0 ? 1 : 0); | ||||
| 				$streamsectors--; | ||||
| 			} | ||||
| 			while ($streamsectors>1) { | ||||
| 				$this->fatchain[] = count($this->fatchain)+1;		// allocate next sector; | ||||
| 				$streamsectors--; | ||||
| 			} | ||||
| 			$this->fatchain[] = 0xfffffffe;							// last sector of stream | ||||
| 			if ($this->streamsize>=0x1000) { | ||||
| 				$this->fatchain[] = 0xfffffffe;							// rootstorage , used one sector | ||||
| 			} | ||||
| 			$this->fatchain[] = 0xfffffffe;							// minifat , used one sector | ||||
| 			$this->fatchain[] = 0xfffffffe;							// directory , used one sector | ||||
| 			 | ||||
| 			$fatsize1 = (count($this->fatchain) >> 7) + (((count($this->fatchain) & 0x7f)>0) ? 1 : 0); | ||||
| 			$fatsize0 = $fatsize1; | ||||
| 			while ($fatsize1) { | ||||
| 				$this->fatchain[] = 0xfffffffd;							// fat , used nn sector | ||||
| 				$fatsize1--; | ||||
| 			} | ||||
| 			$this->fatsectorcount = (count($this->fatchain) >> 7)+(((count($this->fatchain) & 0x7f)>0) ? 1 : 0); | ||||
| 			if ($this->fatsectorcount!=$fatsize0) { $this->fatchain[] = 0xfffffffd; } | ||||
| 			$reqbytes = 128-(count($this->fatchain) & 0x7f); | ||||
| 			$fatfill = array_fill(count($this->fatchain),$reqbytes,0xffffffff); | ||||
| 			$this->fatchain = array_merge($this->fatchain,$fatfill); | ||||
| 			 | ||||
| 			$output = ""; | ||||
| 			$count = 0; | ||||
| 			foreach ($this->fatchain as $key => $sectorid) { | ||||
| 				$output .= pack("V",$sectorid); | ||||
| 				$count += 4; | ||||
| 			} | ||||
| 			fwrite($afilehd,$output,$count); | ||||
| 		} | ||||
| 	} | ||||
| ?> | ||||
							
								
								
									
										117
									
								
								vendor/font.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								vendor/font.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | ||||
| <?php | ||||
| 	define ("XLSFONT_NORMAL",0x0190); | ||||
| 	define ("XLSFONT_BOLD",0x02bc); | ||||
| 	 | ||||
| 	define ("XLSFONT_ESCAPE_NONE",0x0000); | ||||
| 	define ("XLSFONT_ESCAPE_SUPERSCRIPT",0x0001); | ||||
| 	define ("XLSFONT_ESCAPE_SUBSCRIPT",0x0002); | ||||
| 	 | ||||
| 	define ("XLSFONT_UNDERLINE_NONE",0x00); | ||||
| 	define ("XLSFONT_UNDERLINE_SINGLE",0x01); | ||||
| 	define ("XLSFONT_UNDERLINE_DOUBLE",0x02); | ||||
| 	define ("XLSFONT_UNDERLINE_SINGLEACC",0x21); | ||||
| 	define ("XLSFONT_UNDERLINE_DOUBLEACC",0x22); | ||||
| 	 | ||||
| 	define ("XLSFONT_FAMILY_NORMAL",0x00); | ||||
| 	define ("XLSFONT_FAMILY_ROMAN",0x01); | ||||
| 	define ("XLSFONT_FAMILY_SWISS",0x02); | ||||
| 	define ("XLSFONT_FAMILY_MODERN",0x03); | ||||
| 	define ("XLSFONT_FAMILY_SCRIPT",0x04); | ||||
| 	define ("XLSFONT_FAMILY_DECORATIVE",0x05); | ||||
| 	 | ||||
| 	define ("XLSFONT_STYLE_ITALIC",0x0002); | ||||
| 	define ("XLSFONT_STYLE_STRIKEOUT",0x0008); | ||||
| 	define ("XLSFONT_STYLE_OUTLINED",0x0010); | ||||
| 	define ("XLSFONT_STYLE_SHADOWED",0x0020); | ||||
| 	define ("XLSFONT_STYLE_CONDENSED",0x0040); | ||||
| 	 | ||||
| 	define ("XLSFONT_CHARACTERSET_LATIN",0x00); | ||||
| 	define ("XLSFONT_CHARACTERSET_SYSTEMDEFAULT",0x01); | ||||
| 	define ("XLSFONT_CHARACTERSET_SYMBOL",0x02); | ||||
| 	define ("XLSFONT_CHARACTERSET_ROMAN",0x4d); | ||||
| 	define ("XLSFONT_CHARACTERSET_JAPANESE",0x80); | ||||
| 	define ("XLSFONT_CHARACTERSET_KOREAN_HANGUL",0x81); | ||||
| 	define ("XLSFONT_CHARACTERSET_KOREAN_JOHAB",0x82); | ||||
| 	define ("XLSFONT_CHARACTERSET_CHINESE_SIMPLIFIED",0x86); | ||||
| 	define ("XLSFONT_CHARACTERSET_CHINESE_TRADITIONAL",0x88); | ||||
| 	define ("XLSFONT_CHARACTERSET_GREEK",0xa1); | ||||
| 	define ("XLSFONT_CHARACTERSET_TURKISH",0xa2); | ||||
| 	define ("XLSFONT_CHARACTERSET_VIETNAMESE",0xa3); | ||||
| 	define ("XLSFONT_CHARACTERSET_HEBREW",0xb1); | ||||
| 	define ("XLSFONT_CHARACTERSET_ARABIC",0xb2); | ||||
| 	define ("XLSFONT_CHARACTERSET_BALTIC",0xba); | ||||
| 	define ("XLSFONT_CHARACTERSET_CYRILLIC",0xcc); | ||||
| 	define ("XLSFONT_CHARACTERSET_THAI",0xde); | ||||
| 	define ("XLSFONT_CHARACTERSET_LATIN2",0xee);		// central european | ||||
| 	define ("XLSFONT_CHARACTERSET_LATIN1",0xff); | ||||
| 	 | ||||
| 	class xls_font { | ||||
| 		var $font_array = null; | ||||
| 		 | ||||
| 		public function xls_font() {		// constructor | ||||
| 			$this->font_array = array(); | ||||
| 			$this->append(null); | ||||
| 		} | ||||
| 		 | ||||
| 		public function append($params) { | ||||
| 			$font["name"] = (isset($params["name"]) ? $params["name"] : XLSFILE_DEFAULT_FONTNAME); | ||||
| 			$font["height"] = (isset($params["height"]) ? $params["height"]*20 : XLSFILE_DEFAULT_FONTHEIGHT); | ||||
| 			$font["weight"] = (isset($params["weight"]) ? $params["weight"] : XLSFONT_NORMAL); | ||||
| 			$font["color"] = (isset($params["color"]) ? $params["color"] : XLSFILE_DEFAULT_FGCOLOR); | ||||
| 			$font["underline"] = (isset($params["underline"]) ? $params["underline"] : XLSFONT_UNDERLINE_NONE); | ||||
| 			$font["escapement"] = (isset($params["escapement"]) ? $params["escapement"] : XLSFONT_ESCAPE_NONE); | ||||
| 			$font["family"] = (isset($params["family"]) ? $params["family"] : XLSFONT_FAMILY_NORMAL); | ||||
| 			$font["style"] = (isset($params["style"]) ? $params["style"] : 0x0000); | ||||
| 			$font["characterset"] = XLSFILE_CHARACTERSET; | ||||
| 			$s = serialize($font); | ||||
| 			unset($font); | ||||
| 			$fontidx = array_search($s,$this->font_array); | ||||
| 			if ($fontidx===false) { | ||||
| 				$this->font_array[] = $s; | ||||
| 				$fontidx = array_search($s,$this->font_array); | ||||
| 			} | ||||
| 			if ($fontidx>0) { | ||||
| 				$fontidx += 5;	// first 5 reserved, +5 for user defined font | ||||
| 			} | ||||
| 			$fontidx += (($fontidx==4) ? 1 : 0); | ||||
| 			return $fontidx; | ||||
| 		} | ||||
| 		 | ||||
| 		public function save($filehandle,$xls_biffobject) { | ||||
| 			$font0 = unserialize($this->font_array[0]); | ||||
| 			$xls_biffobject->clear(BIFF_FONT); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$font0["height"]); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$font0["style"]); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$font0["color"]); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$font0["weight"]); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$font0["escapement"]); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,$font0["underline"]); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,$font0["family"]); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,$font0["characterset"]);		 | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,0x0000); | ||||
| 			$xls_biffobject->append(XLSDATA_STRING,$font0["name"]); | ||||
| 			$repeatdefault = 4; | ||||
| 			while ($repeatdefault>0) { | ||||
| 				$xls_biffobject->save($filehandle); | ||||
| 				$repeatdefault--; | ||||
| 			} | ||||
| 			$i=0; | ||||
| 			while ($i!=count($this->font_array)) { | ||||
| 				$font0 = unserialize($this->font_array[$i]); | ||||
| 				$xls_biffobject->clear(BIFF_FONT); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$font0["height"]); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$font0["style"]); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$font0["color"]); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$font0["weight"]); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$font0["escapement"]); | ||||
| 				$xls_biffobject->append(XLSDATA_BYTE,$font0["underline"]); | ||||
| 				$xls_biffobject->append(XLSDATA_BYTE,$font0["family"]); | ||||
| 				$xls_biffobject->append(XLSDATA_BYTE,$font0["characterset"]);		 | ||||
| 				$xls_biffobject->append(XLSDATA_BYTE,0x0000);		 | ||||
| 				$xls_biffobject->append(XLSDATA_STRING,$font0["name"]); | ||||
| 				$xls_biffobject->save($filehandle); | ||||
| 				$i++; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| ?> | ||||
							
								
								
									
										34
									
								
								vendor/mergedcells.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								vendor/mergedcells.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| <?php | ||||
| 	class xls_mergedcells { | ||||
| 		var $merged_array = null; | ||||
| 		 | ||||
| 		public function xls_mergedcells() { | ||||
| 			$this->merged_array=array(); | ||||
| 		} | ||||
| 		 | ||||
| 		public function merge_cells($arowfirst, $arowlast, $acolfirst, $acollast) { | ||||
| 			$this->merged_array[]=array("rowfirst" => $arowfirst, "rowlast" => $arowlast, "colfirst" => $acolfirst, "collast" => $acollast); | ||||
| 		} | ||||
| 		 | ||||
| 		public function findpos($arow,$acol) { | ||||
| 			foreach ($this->merged_array as $key => $data) { | ||||
| 				if ((($arow>=$data["rowfirst"]) && ($arow<=$data["rowlast"])) && (($acol>=$data["colfirst"]) && ($acol<=$data["collast"]))) { | ||||
| 					return array("row" => $data["rowfirst"],"col" => $data["colfirst"]); | ||||
| 				} | ||||
| 			} | ||||
| 			return false; | ||||
| 		} | ||||
| 		 | ||||
| 		public function save($filehandle,$xls_biffobject) { | ||||
| 			$xls_biffobject->clear(BIFF_MERGEDCELLS); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,count($this->merged_array)); | ||||
| 			foreach ($this->merged_array as $key => $data) { | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$data["rowfirst"]); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$data["rowlast"]); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$data["colfirst"]); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$data["collast"]); | ||||
| 			} | ||||
| 			$xls_biffobject->save($filehandle); | ||||
| 		} | ||||
| 	} | ||||
| ?> | ||||
							
								
								
									
										294
									
								
								vendor/palette.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										294
									
								
								vendor/palette.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,294 @@ | ||||
| <?php | ||||
| 	class xls_palette { | ||||
| 		var $htmlcolorarray = array("aliceblue" => "#f0f8ff", | ||||
| 									"antiquewhite" => "#faebd7", | ||||
| 									"aqua" => "#00ffff", | ||||
| 									"aquamarine" => "#7fffd4", | ||||
| 									"azure" => "#f0ffff", | ||||
| 									"beige" => "#f5f5dc", | ||||
| 									"bisque" => "#ffe4c4", | ||||
| 									"black" => "#000000", | ||||
| 									"blanchedalmond" => "#ffebcd", | ||||
| 									"blue" => "#0000ff", | ||||
| 									"blueviolet" => "#8a2be2", | ||||
| 									"brown" => "#a52a2a", | ||||
| 									"burlywood" => "#deb887", | ||||
| 									"cadetblue" => "#5f9ea0", | ||||
| 									"chartreuse" => "#7fff00", | ||||
| 									"chocolate" => "#d2691e", | ||||
| 									"coral" => "#ff7f50", | ||||
| 									"cornflowerblue" => "#6495ed", | ||||
| 									"cornsilk" => "#fff8dc", | ||||
| 									"crimson" => "#dc143c", | ||||
| 									"cyan" => "#00ffff", | ||||
| 									"darkblue" => "#00008b", | ||||
| 									"darkcyan" => "#008b8b", | ||||
| 									"darkgoldenrod" => "#b8860b", | ||||
| 									"darkgray" => "#a9a9a9", | ||||
| 									"darkgrey" => "#a9a9a9", | ||||
| 									"darkgreen" => "#006400", | ||||
| 									"darkkhaki" => "#bdb76b", | ||||
| 									"darkmagenta" => "#8b008b", | ||||
| 									"darkolivegreen" => "#556b2f", | ||||
| 									"darkorange" => "#ff8c00", | ||||
| 									"darkorchid" => "#9932cc", | ||||
| 									"darkred" => "#8b0000", | ||||
| 									"darksalmon" => "#e9967a", | ||||
| 									"darkseagreen" => "#8fbc8f", | ||||
| 									"darkslateblue" => "#483d8b", | ||||
| 									"darkslategray" => "#2f4f4f", | ||||
| 									"darkslategrey" => "#2f4f4f", | ||||
| 									"darkturquoise" => "#00ced1", | ||||
| 									"darkviolet" => "#9400d3", | ||||
| 									"deeppink" => "#ff1493", | ||||
| 									"deepskyblue" => "#00bfff", | ||||
| 									"dimgray" => "#696969", | ||||
| 									"dimgrey" => "#696969", | ||||
| 									"dodgerblue" => "#1e90ff", | ||||
| 									"firebrick" => "#b22222", | ||||
| 									"floralwhite" => "#fffaf0", | ||||
| 									"forestgreen" => "#228b22", | ||||
| 									"fuchsia" => "#ff00ff", | ||||
| 									"gainsboro" => "#dcdcdc", | ||||
| 									"ghostwhite" => "#f8f8ff", | ||||
| 									"gold" => "#ffd700", | ||||
| 									"goldenrod" => "#daa520", | ||||
| 									"gray" => "#808080", | ||||
| 									"grey" => "#808080", | ||||
| 									"green" => "#008000", | ||||
| 									"greenyellow" => "#adff2f", | ||||
| 									"honeydew" => "#f0fff0", | ||||
| 									"hotpink" => "#ff69b4", | ||||
| 									"indianred" => "#cd5c5c", | ||||
| 									"indigo" => "#4b0082", | ||||
| 									"ivory" => "#fffff0", | ||||
| 									"khaki" => "#f0e68c", | ||||
| 									"lavender" => "#e6e6fa", | ||||
| 									"lavenderblush" => "#fff0f5", | ||||
| 									"lawngreen" => "#7cfc00", | ||||
| 									"lemonchiffon" => "#fffacd", | ||||
| 									"lightblue" => "#add8e6", | ||||
| 									"lightcoral" => "#f08080", | ||||
| 									"lightcyan" => "#e0ffff", | ||||
| 									"lightgoldenrodyellow" => "#fafad2", | ||||
| 									"lightgray" => "#d3d3d3", | ||||
| 									"lightgrey" => "#d3d3d3", | ||||
| 									"lightgreen" => "#90ee90", | ||||
| 									"lightpink" => "#ffb6c1", | ||||
| 									"lightsalmon" => "#ffa07a", | ||||
| 									"lightseagreen" => "#20b2aa", | ||||
| 									"lightskyblue" => "#87cefa", | ||||
| 									"lightslategray" => "#778899", | ||||
| 									"lightslategrey" => "#778899", | ||||
| 									"lightsteelblue" => "#b0c4de", | ||||
| 									"lightyellow" => "#ffffe0", | ||||
| 									"lime" => "#00ff00", | ||||
| 									"limegreen" => "#32cd32", | ||||
| 									"linen" => "#faf0e6", | ||||
| 									"magenta" => "#ff00ff", | ||||
| 									"maroon" => "#800000", | ||||
| 									"mediumaquamarine" => "#66cdaa", | ||||
| 									"mediumblue" => "#0000cd", | ||||
| 									"mediumorchid" => "#ba55d3", | ||||
| 									"mediumpurple" => "#9370d8", | ||||
| 									"mediumseagreen" => "#3cb371", | ||||
| 									"mediumslateblue" => "#7b68ee", | ||||
| 									"mediumspringgreen" => "#00fa9a", | ||||
| 									"mediumturquoise" => "#48d1cc", | ||||
| 									"mediumvioletred" => "#c71585", | ||||
| 									"midnightblue" => "#191970", | ||||
| 									"mintcream" => "#f5fffa", | ||||
| 									"mistyrose" => "#ffe4e1", | ||||
| 									"moccasin" => "#ffe4b5", | ||||
| 									"navajowhite" => "#ffdead", | ||||
| 									"navy" => "#000080", | ||||
| 									"oldlace" => "#fdf5e6", | ||||
| 									"olive" => "#808000", | ||||
| 									"olivedrab" => "#6b8e23", | ||||
| 									"orange" => "#ffa500", | ||||
| 									"orangered" => "#ff4500", | ||||
| 									"orchid" => "#da70d6", | ||||
| 									"palegoldenrod" => "#eee8aa", | ||||
| 									"palegreen" => "#98fb98", | ||||
| 									"paleturquoise" => "#afeeee", | ||||
| 									"palevioletred" => "#d87093", | ||||
| 									"papayawhip" => "#ffefd5", | ||||
| 									"peachpuff" => "#ffdab9", | ||||
| 									"peru" => "#cd853f", | ||||
| 									"pink" => "#ffc0cb", | ||||
| 									"plum" => "#dda0dd", | ||||
| 									"powderblue" => "#b0e0e6", | ||||
| 									"purple" => "#800080", | ||||
| 									"red" => "#ff0000", | ||||
| 									"rosybrown" => "#bc8f8f", | ||||
| 									"royalblue" => "#4169e1", | ||||
| 									"saddlebrown" => "#8b4513", | ||||
| 									"salmon" => "#fa8072", | ||||
| 									"sandybrown" => "#f4a460", | ||||
| 									"seagreen" => "#2e8b57", | ||||
| 									"seashell" => "#fff5ee", | ||||
| 									"sienna" => "#a0522d", | ||||
| 									"silver" => "#c0c0c0", | ||||
| 									"skyblue" => "#87ceeb", | ||||
| 									"slateblue" => "#6a5acd", | ||||
| 									"slategray" => "#708090", | ||||
| 									"slategrey" => "#708090", | ||||
| 									"snow" => "#fffafa", | ||||
| 									"springgreen" => "#00ff7f", | ||||
| 									"steelblue" => "#4682b4", | ||||
| 									"tan" => "#d2b48c", | ||||
| 									"teal" => "#008080", | ||||
| 									"thistle" => "#d8bfd8", | ||||
| 									"tomato" => "#ff6347", | ||||
| 									"turquoise" => "#40e0d0", | ||||
| 									"violet" => "#ee82ee", | ||||
| 									"wheat" => "#f5deb3", | ||||
| 									"white" => "#ffffff", | ||||
| 									"whitesmoke" => "#f5f5f5", | ||||
| 									"yellow" => "#ffff00", | ||||
| 									"yellowgreen" => "#9acd32"); | ||||
| 		 | ||||
| 		var	$palette_array = array(	0x000000, | ||||
| 									0xffffff, | ||||
| 									0xff0000, | ||||
| 									0x00ff00, | ||||
| 									0x0000ff, | ||||
| 									0xffff00, | ||||
| 									0xff00ff, | ||||
| 									0x00ffff, | ||||
| 									0x800000, | ||||
| 									0x008000, | ||||
| 									0x000080, | ||||
| 									0x808000, | ||||
| 									0x800080, | ||||
| 									0x008080, | ||||
| 									0xc0c0c0, | ||||
| 									0x808080, | ||||
| 									0x9999ff, | ||||
| 									0x993366, | ||||
| 									0xffffcc, | ||||
| 									0xccffff, | ||||
| 									0x660066, | ||||
| 									0xff8080, | ||||
| 									0x0066cc, | ||||
| 									0xccccff, | ||||
| 									0x000080, | ||||
| 									0xff00ff, | ||||
| 									0xffff00, | ||||
| 									0x00ffff, | ||||
| 									0x800080, | ||||
| 									0x800000, | ||||
| 									0x008080, | ||||
| 									0x0000ff, | ||||
| 									0x00ccff, | ||||
| 									0xccffff, | ||||
| 									0xccffcc, | ||||
| 									0xffff99, | ||||
| 									0x99ccff, | ||||
| 									0xff99cc, | ||||
| 									0xcc99ff, | ||||
| 									0xffcc99, | ||||
| 									0x3366ff, | ||||
| 									0x33cccc, | ||||
| 									0x99cc00, | ||||
| 									0xffcc00, | ||||
| 									0xff9900, | ||||
| 									0xff6600, | ||||
| 									0x666699, | ||||
| 									0x969696, | ||||
| 									0x003366, | ||||
| 									0x339966, | ||||
| 									0x003300, | ||||
| 									0x333300, | ||||
| 									0x993300, | ||||
| 									0x993366, | ||||
| 									0x333399, | ||||
| 									0xc7c7c7 | ||||
| 									); | ||||
| 		public function getcoloridx($acolor) { | ||||
| 			if (is_array($acolor)) { | ||||
| 				$red = $acolor["red"]; | ||||
| 				$green = $acolor["green"]; | ||||
| 				$blue = $acolor["blue"]; | ||||
| 				return $this->findcolor($red,$green,$blue); | ||||
| 			} | ||||
| 			else if (!is_numeric($acolor)) { | ||||
| 				if ($acolor{0}=="#") { | ||||
| 					return $this->findhtmlcolor($acolor); | ||||
| 				} | ||||
| 				else { | ||||
| 					return $this->findnamedcolor($acolor); | ||||
| 				} | ||||
| 			} | ||||
| 			else { | ||||
| 				$red   = ($acolor & 0x00ff0000) >> 16; | ||||
| 				$green = ($acolor & 0x0000ff00) >> 8; | ||||
| 				$blue  = ($acolor & 0x000000ff); | ||||
| 				return $this->findcolor($red,$green,$blue); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		public function findnamedcolor($colorname) { | ||||
| 			if (!isset($this->htmlcolorarray[strtolower($colorname)])) { die("unknown color name."); } | ||||
| 			return $this->findhtmlcolor($this->htmlcolorarray[strtolower($colorname)]); | ||||
| 		} | ||||
| 		 | ||||
| 		public function findhtmlcolor($htmlcolor) { | ||||
| 			$red = hexdec(substr($htmlcolor,1,2)); | ||||
| 			$green = hexdec(substr($htmlcolor,3,2)); | ||||
| 			$blue = hexdec(substr($htmlcolor,5,2)); | ||||
| 			return $this->findcolor($red,$green,$blue); | ||||
| 		} | ||||
| 		 | ||||
| 		public function findcolor($ared,$agreen,$ablue) { | ||||
| 			$rgbval = 0; | ||||
| 			$rgbval = ($ared<<16) | ($agreen << 8) | ($ablue << 0); | ||||
| 			// before allocate, check the color in the array | ||||
| 			// if found, return colorindex | ||||
| 			$colorindex = array_search($rgbval,$this->palette_array); | ||||
| 			if ($colorindex===false) { | ||||
| 				return $colorindex; | ||||
| 				//$colorindex = count($this->palette_array); | ||||
| 				//$this->palette_array[] = $rgbval; | ||||
| 			} | ||||
| 			$colorindex += 8; | ||||
| 			return $colorindex; | ||||
| 		} | ||||
| 		 | ||||
| 		public function change_color($idx,$color) { | ||||
| 			$oldidx = $this->getcoloridx($color); | ||||
| 			if ($oldidx!==false) { return $oldidx; } | ||||
| 				if (is_array($color)) { | ||||
| 				$red = $acolor["red"]; | ||||
| 				$green = $acolor["green"]; | ||||
| 				$blue = $acolor["blue"]; | ||||
| 				$rgbval = ($red<<16) | ($green << 8) | ($blue << 0); | ||||
| 				$this->palette_array[$idx-8] = $rgbval; | ||||
| 			} | ||||
| 			else if (!is_numeric($color)) { | ||||
| 				if ($color{0}=="#") { | ||||
| 					$rgbval = hexdec(substr($color,1)); | ||||
| 					$this->palette_array[$idx-8] = $rgbval; | ||||
| 				} | ||||
| 				else { | ||||
| 					if (!isset($this->htmlcolorarray[strtolower($color)])) { die("unknown color name."); } | ||||
| 					$this->palette_array[$idx-8] = hexdec(substr($this->htmlcolorarray[strtolower($color)],1)); | ||||
| 				} | ||||
| 			} | ||||
| 			else { | ||||
| 				$this->palette_array[$idx-8] = $color; | ||||
| 			} | ||||
| 			return $idx; | ||||
| 		} | ||||
| 		 | ||||
| 		public function save($filehandle,$xls_biffobject) { | ||||
| 			$xls_biffobject->clear(BIFF_PALETTE); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,count($this->palette_array)); | ||||
| 			foreach ($this->palette_array as $key => $color_data) { | ||||
| 				$tmp = $color_data<<8; | ||||
| 				$xls_biffobject->append(XLSDATA_DATA32BIT,$tmp); | ||||
| 			} | ||||
| 			$xls_biffobject->save($filehandle); | ||||
| 		} | ||||
| 	} | ||||
| ?> | ||||
							
								
								
									
										230
									
								
								vendor/picture.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								vendor/picture.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,230 @@ | ||||
| <?php | ||||
| 	/*  | ||||
| offs  size  data        		content | ||||
| --------------------------------------- | ||||
| 0000 , 02 : 5d 00 				biff type, Object | ||||
| 0002 , 02 : 42 00       		record length | ||||
| 0004 , 04 : 01 00 00 00 		count of the objects in the file | ||||
| 0008 , 02 : 08 00				object type , 8 = picture | ||||
| 000a , 02 : 01 00 				object ID | ||||
| 000c , 02 : 14 06 				grbit | ||||
| 									bit0		: =1, if the object selected | ||||
| 									bit1		: =1, if the object moves and sizes with the cells | ||||
| 									bit2		: =1, if the object moves with the cells | ||||
| 									bit3		: reserved | ||||
| 									bit4		: =1, if the object is locked when the sheet is protected | ||||
| 									bit5..6		: reserved | ||||
| 									bit7		: =1, if the object is part of a group of objects | ||||
| 									bit8		: =1, if the object is hidden | ||||
| 									bit9		: =1, if the object is visible | ||||
| 									bit10		: =1, if the object is printable | ||||
| 									bit11..15	: reserved | ||||
| 000e , 02 : 01 00 				col-left | ||||
| 0010 , 02 : 00 00 				x position in left column | ||||
| 0012 , 02 : 01 00				row-top | ||||
| 0014 , 02 : 00 00 				y position in top row | ||||
| 0016 , 02 : 01 00 				col-right | ||||
| 0018 , 02 : 30 00 				x position in right column | ||||
| 001a , 02 : 01 00 				row-bottom | ||||
| 001c , 02 : 26 00 				y position in bottom row | ||||
| 001e , 02 : 00 00 				fmla structure length | ||||
| 0020 , 04 : 00 00 05 00	00 00	reserved , must be zero ? | ||||
| 									word-offset 0 : = 0 | ||||
| 									word offset 1 : = 0x0005 | ||||
| 									word-offset 2 : = 0 | ||||
| 0026 , 01 : 09 					background color index | ||||
| 0027 , 01 : 09					foreground color index | ||||
| 0028 , 01 : 00 					fill pattern | ||||
| 0029 , 01 : 00 					auto fill, bit0 = 1 if the automatic fill is turned on | ||||
| 002a , 01 : 08 					line color index | ||||
| 002b , 01 : ff 					line style index | ||||
| 002c , 01 : 01 					line weight | ||||
| 002d , 01 : 00 					auto border, bit0 = 1 if the automatic borderis turned on | ||||
| 002e , 02 : 00 00 				frame style | ||||
| 									bit0		: =1 , if the rectangle has rounded corners | ||||
| 									bit1		: =1 , if the rectangle has a shadow border | ||||
| 									bit2..9 	: diameter of the oval (actualy a circle) that defines the rounded corners (if bit1 set) | ||||
| 									bit10..15	: unused | ||||
| 0030 , 02 : 09 00 				image format | ||||
| 0032 , 04 : b9 10 05 37 		reserved, must be zero ? wtf ??? | ||||
| 0036 , 02 : 00 00 				length of the picture FMLA structure | ||||
| 0038 , 02 : 00 00 				reserved | ||||
| 003a , 02 : 01 00 				grbit | ||||
| 									bit0 	 : =0 if user manualy sizes picture  by dragging a handle | ||||
| 									bit1 	 : =1 if FMLA structure is a DDE reference | ||||
| 									bit2 	 : =1 if the picture is from a DDE link, and the only available representation of the picture is an icon | ||||
| 									bit3..15 : unused, must be zero ... | ||||
| 003c , 04 : 00 00 00 00 		reserved | ||||
| 0040 , 01 : 05 					length of the name | ||||
| 0041 , nn : 4b e9 70 20 31 		name ,maybe contain a padding byte to force word boundary allignment (=K<>p 1) | ||||
|  | ||||
| 0000 , 02 : 7f 00 				biff type, ImageData | ||||
| 0002 , 02 : 44 00 				record length | ||||
| 0004 , 02 : 09 00 				image format, 9 = windows bitmap format , 24bit truecolor | ||||
| 0006 , 02 : 01 00 				enviroment from which file was written, 1= windows | ||||
| 0008 , 04 : 3c 00 00 00 		image data length | ||||
| 000a ....							image data | ||||
| 			 | ||||
| 			0c 00 00 00 04 00 04 00 01 00 18 00  | ||||
| 			ff 00 00 ff ff ff ff ff ff 00 00 00  | ||||
| 			ff ff ff ff 00 00 00 00 00 ff ff ff  | ||||
| 			ff ff ff 00 00 ff 00 ff 00 ff ff ff  | ||||
| 			00 00 ff ff ff ff ff ff ff 00 ff 00 | ||||
| 	 | ||||
| 	*/ | ||||
| 	 | ||||
| 	class xls_picture { | ||||
| 		var $picture_array = null; | ||||
| 		var $filename = null; | ||||
| 		var $bgcolor = null; | ||||
| 		var $bgcolorrgb = null; | ||||
| 		var $fgcolor = null; | ||||
| 		var $objectid = null; | ||||
| 		var $firstrow = null; | ||||
| 		var $firstcol = null; | ||||
| 		var $lastrow = null; | ||||
| 		var $lastcol = null; | ||||
| 		var $imageright = null; | ||||
| 		var $imagebottom = null; | ||||
| 		var $imagewidth = null; | ||||
| 		var $imageheight = null; | ||||
| 		 | ||||
| 		function xls_picture($afilename, $abgcolor, $afgcolor, $abgcolorrgb, $aobjectid, $arow, $acol) { | ||||
| 			$this->picture_array = array(); | ||||
| 			$this->filename = $afilename; | ||||
| 			 | ||||
| 			$tmp = explode(".",$afilename); | ||||
| 			if (count($tmp)<2) { die("missing filename extension."); } | ||||
| 			if (!file_exists($afilename)) { die("file does not exist."); } | ||||
| 			 | ||||
| 			$this->bgcolor = $abgcolor; | ||||
| 			$this->bgcolorrgb = $abgcolorrgb; | ||||
| 			$this->fgcolor = $afgcolor; | ||||
| 			$this->objectid = $aobjectid; | ||||
| 			$this->firstrow = $arow; | ||||
| 			$this->firstcol = $acol; | ||||
| 		} | ||||
| 		 | ||||
| 		function scanimgline($imagehd, $line, $width, $bgcolor) { | ||||
| 			for ($x=0; $x!=$width; $x++) { | ||||
| 				$colorindex = imagecolorat($imagehd, $x, $line); | ||||
| 				$rgb = imagecolorsforindex($imagehd, $colorindex); | ||||
| 				if ($rgb["alpha"]!=0) { | ||||
| 					$dstR = $bgcolor >> 16 & 0xFF; | ||||
| 					$dstG = $bgcolor >> 8 & 0xFF; | ||||
| 					$dstB = $bgcolor & 0xFF; | ||||
| 				 | ||||
| 					$rgb["red"]   = (($rgb["red"]   * (0xFF-$rgb["alpha"])) >> 8) + (($dstR * $rgb["alpha"]) >> 8); | ||||
| 					$rgb["green"] = (($rgb["green"] * (0xFF-$rgb["alpha"])) >> 8) + (($dstG * $rgb["alpha"]) >> 8); | ||||
| 					$rgb["blue"]  = (($rgb["blue"]  * (0xFF-$rgb["alpha"])) >> 8) + (($dstB * $rgb["alpha"]) >> 8); | ||||
| 				} | ||||
| 				$this->picture_array[] = $rgb["blue"]; | ||||
| 				$this->picture_array[] = $rgb["green"]; | ||||
| 				$this->picture_array[] = $rgb["red"]; | ||||
| 				/* | ||||
| 				$this->picture_array[] = ($colorindex >> 16) & 0x0ff; | ||||
| 				$this->picture_array[] = ($colorindex >> 8) & 0x0ff; | ||||
| 				$this->picture_array[] = $colorindex & 0x0ff; | ||||
| 				*/ | ||||
| 			} | ||||
| 			if ((count($this->picture_array) & 0x3)!=0) { | ||||
| 				$fsize = count($this->picture_array) & 0x3; | ||||
| 				$reqbytes = 0x4 - $fsize; | ||||
| 				while ($reqbytes>0) { | ||||
| 					$this->picture_array[] = 0; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		function loaddata() { | ||||
| 			$tmp = explode(".",$this->filename); | ||||
| 			$ext = strtolower($tmp[count($tmp)-1]); | ||||
| 			switch ($ext) { | ||||
| 				case "bmp"	:	die("Windows BitMaP file not supported."); | ||||
| 								break; | ||||
| 				case "gif"	:	$img=imagecreatefromgif($this->filename); | ||||
| 								break; | ||||
| 				case "jpg"	: | ||||
| 				case "jpeg"	:	$img=imagecreatefromjpeg($this->filename); | ||||
| 								break; | ||||
| 				case "png"	:	$img=imagecreatefrompng($this->filename); | ||||
| 								break; | ||||
| 				case "xbm"	:	$img=imagecreatefromxbm($this->filename); | ||||
| 								break; | ||||
| 				case "xpm"	:	$img=imagecreatefromxpm($this->filename); | ||||
| 								break; | ||||
| 				default	:	die("Invalid / unknown filetype (extension)."); | ||||
| 							break; | ||||
| 			} | ||||
| 			$this->imagewidth = imagesx($img); | ||||
| 			$this->imageheight = imagesy($img); | ||||
| 			$y=$this->imageheight; | ||||
| 			while ($y>0) { | ||||
| 				$y--; | ||||
| 				$this->scanimgline($img, $y, $this->imagewidth, $this->bgcolorrgb); | ||||
| 			} | ||||
| 			imagedestroy($img); | ||||
| 		} | ||||
| 		 | ||||
| 		function save($filehandle,$xls_biffobject) { | ||||
| 			$xls_biffobject->clear(BIFF_OBJECT); | ||||
| 			$xls_biffobject->append(XLSDATA_LONG,1);					// one object | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,8);					// obj,type = picture | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->objectid); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0x0614); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->firstcol); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->firstrow); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->lastcol); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->imageright); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->lastrow); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->imagebottom); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0); | ||||
| 			 | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0x0005); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0); | ||||
| 			 | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,$this->bgcolor); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,$this->fgcolor); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,0); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,0); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,8); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,0xff); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,1); | ||||
| 			$xls_biffobject->append(XLSDATA_BYTE,0); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0x0009); | ||||
| 			//$xls_biffobject->append(XLSDATA_LONG,0x370510b9); | ||||
| 			$xls_biffobject->append(XLSDATA_LONG,0x00000000); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0x0001); | ||||
| 			$xls_biffobject->append(XLSDATA_LONG,0x0000); | ||||
| 			 | ||||
| 			$s = "Picture".$this->objectid; | ||||
| 			$xls_biffobject->append(XLSDATA_STRING,$s); | ||||
| 			$xls_biffobject->save($filehandle); | ||||
| 			 | ||||
| 			$xls_biffobject->clear(BIFF_IMAGEDATA); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0x0009); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,0x0001); | ||||
| 			$xls_biffobject->append(XLSDATA_LONG,count($this->picture_array)+12); | ||||
| 			 | ||||
| 			if (defined("PICTUREDEBUG")) { | ||||
| 				echo "picture size : ".count($this->picture_array)." (".dechex(count($this->picture_array)).")<br>\n"; | ||||
| 			} | ||||
| 			$xls_biffobject->append(XLSDATA_LONG,0x0000000c); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->imagewidth); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,$this->imageheight); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,1); | ||||
| 			$xls_biffobject->append(XLSDATA_SHORT,24); | ||||
| 			 | ||||
| 			foreach ($this->picture_array as $data) { | ||||
| 				$xls_biffobject->append(XLSDATA_BYTE,$data); | ||||
| 			} | ||||
| 			$xls_biffobject->save($filehandle); | ||||
| 		} | ||||
| 	} | ||||
| ?> | ||||
							
								
								
									
										238
									
								
								vendor/xf.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								vendor/xf.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,238 @@ | ||||
| <?php | ||||
| 	define ("XLSXF_TYPE_PROT_CELLLOCKED",    0x01); | ||||
| 	define ("XLSXF_TYPE_PROT_FORMULAHIDDEN", 0x02); | ||||
| 	define ("XLSXF_TYPE_PROT_STYLEXF",       0x04); | ||||
| 	define ("XLSXF_TYPE_PROT_F123PREFIX",    0x08); | ||||
| 	 | ||||
| 	define ("XLSXF_USEDATTRIB_ATRNUM"  ,0x04); | ||||
| 	define ("XLSXF_USEDATTRIB_ATRFONT" ,0x08); | ||||
| 	define ("XLSXF_USEDATTRIB_ATRALC"  ,0x10); | ||||
| 	define ("XLSXF_USEDATTRIB_ATRBDR"  ,0x20); | ||||
| 	define ("XLSXF_USEDATTRIB_ATRPAT"  ,0x40); | ||||
| 	define ("XLSXF_USEDATTRIB_ATRPROT" ,0x80); | ||||
| 	 | ||||
| 	// horizontal allignment | ||||
| 	define ("XLSXF_HALLIGN_GENERAL", 0x00); | ||||
| 	define ("XLSXF_HALLIGN_LEFT"   , 0x01); | ||||
| 	define ("XLSXF_HALLIGN_CENTER" , 0x02); | ||||
| 	define ("XLSXF_HALLIGN_RIGHT"  , 0x03); | ||||
| 	define ("XLSXF_HALLIGN_FILL"   , 0x04); | ||||
| 	define ("XLSXF_HALLIGN_JUSTIFY", 0x05); | ||||
| 	define ("XLSXF_HALLIGN_CACROSS", 0x06);	// center across selection | ||||
| 	//define ("XLSXF_HALLIGN_DISTRIBUTED", 0x07); not used in BIFF5 , available in Excel 10.0 (Excel XP) and later | ||||
| 	 | ||||
| 	// vertical allignment | ||||
| 	define ("XLSXF_VALLIGN_TOP"    , 0x00); | ||||
| 	define ("XLSXF_VALLIGN_CENTER" , 0x10); | ||||
| 	define ("XLSXF_VALLIGN_BOTTOM" , 0x20); | ||||
| 	define ("XLSXF_VALLIGN_JUSTIFY", 0x30); | ||||
| 	//define ("XLSXF_VALLIGN_DISTRIBUTED", 0x40); not used in BIFF5 , available in Excel 10.0 (Excel XP) and later | ||||
| 	 | ||||
| 	define ("XLSXF_WRAPTEXT", 0x08);	// wrap text at right border | ||||
| 	 | ||||
| 	define ("XLSXF_TEXTROTATION_NOROTATION",       0x00); | ||||
| 	define ("XLSXF_TEXTROTATION_UPRIGHT",          0x01);	// text appears top-to-bottom; letters are upright. | ||||
| 	define ("XLSXF_TEXTROTATION_COUNTERCLOCKWISE", 0x02); // text is rotated 90 degrees counterclockwise | ||||
| 	define ("XLSXF_TEXTROTATION_CLOCKWISE",        0x03); // text is rotated 90 degrees clockwise | ||||
| 	 | ||||
| 	define ("XLSXF_BORDER_NOBORDER", 0x00); | ||||
| 	define ("XLSXF_BORDER_THIN",     0x01); | ||||
| 	define ("XLSXF_BORDER_MEDIUM",   0x02); | ||||
| 	define ("XLSXF_BORDER_DASHED",   0x03); | ||||
| 	define ("XLSXF_BORDER_DOTTED",   0x04); | ||||
| 	define ("XLSXF_BORDER_THICK",    0x05); | ||||
| 	define ("XLSXF_BORDER_DOUBLE",   0x06); | ||||
| 	define ("XLSXF_BORDER_HAIR",     0x07); | ||||
| 	 | ||||
| 	/* | ||||
| 	not used in BIFF5 , available in BIFF8 (Excel 10.0 / Excel XP) and later | ||||
| 	define ("XLSXF_BORDER_MEDIUMDASHED",     0x08); | ||||
| 	define ("XLSXF_BORDER_THINDASHDOT",      0x09); | ||||
| 	define ("XLSXF_BORDER_MEDIUMDASHDOT",    0x0a); | ||||
| 	define ("XLSXF_BORDER_THINDASHDOTDOT",   0x0b); | ||||
| 	define ("XLSXF_BORDER_MEDIUMDASHDOTDOT", 0x0c); | ||||
| 	define ("XLSXF_BORDER_SLANTEDDASHDOT",   0x0d); | ||||
| 	*/	 | ||||
| 	 | ||||
| 	class xls_xf { | ||||
| 		var	$xf_array = null; | ||||
| 		var $defaultxf = null; | ||||
| 		 | ||||
| 		public function xls_xf() { | ||||
| 			$this->xf_array = array(); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4, "fontindex" => 1)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4, "fontindex" => 1)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4, "fontindex" => 2)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4, "fontindex" => 2)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf4)); | ||||
| 			$this->append(array("forced"=>1)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x2b)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x29)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x2c)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x2a)); | ||||
| 			$this->append(array("forced"=>1, "parentxfindex" => 0xffffff, "xftype" => XLSXF_TYPE_PROT_STYLEXF, "flagsforce" => 0xf8, "fontindex" => 1, "formatindex" => 0x09)); | ||||
| 			$this->defaultxf = $this->append(array("forced"=>1, "flagsforce" => 0x50, "patternbgcolor" => 0x88, "patterncolor" => 0x08, "fillpattern" => 0)); | ||||
| 		} | ||||
| 		 | ||||
| 		public function append($params) { | ||||
| 			$xf = array("fontindex" => 0x00, | ||||
| 						"formatindex" => 0x00, | ||||
| 						"parentxfindex" => 0x0, | ||||
| 						"xftype" => XLSXF_TYPE_PROT_CELLLOCKED, | ||||
| 						"allign" => XLSXF_VALLIGN_BOTTOM | XLSXF_HALLIGN_GENERAL, | ||||
| 						"flags"  => 0x00, | ||||
| 						"rotate" => XLSXF_TEXTROTATION_NOROTATION, | ||||
| 						"patterncolor" 		=> 0x40, | ||||
| 						"patternbgcolor" 	=> 0xc0, | ||||
| 						"fillpattern" 		=> 0x00, | ||||
| 						"bordertop" 		=> XLSXF_BORDER_NOBORDER, | ||||
| 						"bordertopcolor" 	=> 0x0000, | ||||
| 						"borderbottom" 		=> XLSXF_BORDER_NOBORDER, | ||||
| 						"borderbottomcolor" => 0x0000, | ||||
| 						"borderleft" 		=> XLSXF_BORDER_NOBORDER, | ||||
| 						"borderleftcolor" 	=> 0x0000, | ||||
| 						"borderright" 		=> XLSXF_BORDER_NOBORDER, | ||||
| 						"borderrightcolor" 	=> 0x0000 | ||||
| 					   ); | ||||
| 			if (is_array($params)) { | ||||
| 				foreach ($params as $key => $param) { | ||||
| 					switch ($key) { | ||||
| 						case "formatindex"		:	$xf[$key]=$param; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRNUM; | ||||
| 													break; | ||||
| 													 | ||||
| 						case "fontindex"		:	$xf[$key]=$param; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRFONT; | ||||
| 													break; | ||||
| 													 | ||||
| 						case "rotate"			:	$xf[$key]=$param; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRALC; | ||||
| 													break; | ||||
| 						case "xftype"			:	 | ||||
| 													$xf[$key]=$xf[$key] | $param; | ||||
| 													break; | ||||
| 													 | ||||
| 						case "parentxfindex"	:	$xf[$key]=$param; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRNUM; | ||||
| 													break; | ||||
| 													 | ||||
| 						case "patterncolor"		:	$xf[$key] = $param;	// foreground color definied with font | ||||
| 													break; | ||||
| 						 | ||||
| 						case "patternbgcolor"	:	$xf[$key]=$param; | ||||
| 													$xf["patterncolor"]=0x08; | ||||
| 													if ($xf["fillpattern"]==0x00) { $xf["fillpattern"]=0x01; } | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRPAT | XLSXF_USEDATTRIB_ATRALC; | ||||
| 													break; | ||||
| 						case "fillpattern"		:	$xf[$key]=$param; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRPAT; | ||||
| 													break; | ||||
| 													 | ||||
| 						case "hallign"			:	 | ||||
| 													$i = $xf["allign"]&0xf8; | ||||
| 													$i = $i | $param; | ||||
| 													$xf["allign"] = $i; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRFONT; | ||||
| 													break; | ||||
| 													 | ||||
| 						case "vallign"			:	$i = $xf["allign"]&0x1f; | ||||
| 													$i = $i | $param; | ||||
| 													$xf["allign"] = $i; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRFONT; | ||||
| 													break; | ||||
| 													 | ||||
| 						case "textwrap"			:	$xf["allign"]=$xf["allign"] | XLSXF_WRAPTEXT; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRFONT; | ||||
| 													break; | ||||
| 						 | ||||
| 						case "border"			:	$xf["bordertop"]=$param; | ||||
| 													$xf["borderbottom"]=$param; | ||||
| 													$xf["borderleft"]=$param; | ||||
| 													$xf["borderright"]=$param; | ||||
| 													$param=0x0008;					// default border color = black | ||||
| 						case "bordercolor"		:	$xf["bordertopcolor"]=$param; | ||||
| 													$xf["borderbottomcolor"]=$param; | ||||
| 													$xf["borderleftcolor"]=$param; | ||||
| 													$xf["borderrightcolor"]=$param; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRBDR; | ||||
| 													break; | ||||
| 													 | ||||
| 						case "bordertop"		: | ||||
| 						case "borderbottom"		: | ||||
| 						case "borderleft"		: | ||||
| 						case "borderright"		: | ||||
| 													$xf[$key]=$param; | ||||
| 													$colorkey = $key."color"; | ||||
| 													if ($xf[$colorkey]==0x0000) { $xf[$colorkey]=0x0009; } | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRBDR; | ||||
| 													break; | ||||
| 						case "bordertopcolor"	: | ||||
| 						case "borderbottomcolor": | ||||
| 						case "borderleftcolor": | ||||
| 						case "borderrightcolor": | ||||
| 													$xf[$key]=$param; | ||||
| 													$xf["flags"]=$xf["flags"] | XLSXF_USEDATTRIB_ATRBDR; | ||||
| 													break; | ||||
| 					} | ||||
| 				} | ||||
| 				if (count($this->xf_array)==0) { | ||||
| 					$xf["flags"] = 0; | ||||
| 				} | ||||
| 				if ($xf["parentxfindex"]==0xffffff) { | ||||
| 					$xf["flags"] = $xf["flags"] & 0xf7; | ||||
| 				} | ||||
| 				if (isset($params["flagsforce"])) { | ||||
| 					$xf["flags"] = $params["flagsforce"]; | ||||
| 				} | ||||
| 			} | ||||
| 			$s = serialize($xf); | ||||
| 			$xfindex = array_search($s,$this->xf_array); | ||||
| 			if (($xfindex===false) || (isset($params["forced"]))) { | ||||
| 				$xfindex = count($this->xf_array); | ||||
| 				$this->xf_array[] = $s; | ||||
| 				if (defined("XFDEBUG")) { | ||||
| 					$xfindex = array_search($s,$this->xf_array); | ||||
| 					echo "new XF record , index : $xfindex\n"; | ||||
| 					echo "new XF record : $s \n"; | ||||
| 				} | ||||
| 			} | ||||
| 			return $xfindex; | ||||
| 		} | ||||
| 		 | ||||
| 		public function save($filehandle,$xls_biffobject) { | ||||
| 			foreach ($this->xf_array as $xfindex => $tmp) { | ||||
| 				$xfrec = unserialize($tmp); | ||||
| 				$xls_biffobject->clear(BIFF_XFRECORD); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$xfrec["fontindex"]); | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$xfrec["formatindex"]); | ||||
| 				$i = ($xfrec["parentxfindex"]<<4) | $xfrec["xftype"]; | ||||
| 				$xls_biffobject->append(XLSDATA_SHORT,$i); | ||||
| 				$xls_biffobject->append(XLSDATA_BYTE,$xfrec["allign"]); | ||||
| 				$i = $xfrec["rotate"] | $xfrec["flags"]; | ||||
| 				$xls_biffobject->append(XLSDATA_BYTE,$i); | ||||
| 				 | ||||
| 				$i = $xfrec["patternbgcolor"] | ($xfrec["patterncolor"] << 7); | ||||
| 				$i = (($i == 0) ? 0x20c0 : $i);										// magic number if no colors defined | ||||
| 				$i = $i | ($xfrec["fillpattern"] << 16); | ||||
| 				$i = $i | ($xfrec["borderbottom"] << 22); | ||||
| 				$i = $i | ($xfrec["borderbottomcolor"] << 25); | ||||
| 				$xls_biffobject->append(XLSDATA_LONG,$i); | ||||
| 				 | ||||
| 				$i = $xfrec["bordertop"] | ($xfrec["borderleft"] << 3) | ($xfrec["borderright"] << 6); | ||||
| 				$i = $i | ($xfrec["bordertopcolor"] << 9) | ($xfrec["borderleftcolor"] << 16) | ($xfrec["borderrightcolor"] << 23); | ||||
| 				$xls_biffobject->append(XLSDATA_LONG,$i); | ||||
| 				$xls_biffobject->save($filehandle); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| ?> | ||||
							
								
								
									
										1414
									
								
								vendor/xls_export.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1414
									
								
								vendor/xls_export.php
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user