zhangguidong 2 năm trước cách đây
mục cha
commit
6a8e9335d9
100 tập tin đã thay đổi với 6877 bổ sung0 xóa
  1. BIN
      public/hybrid/html/.DS_Store
  2. BIN
      public/hybrid/html/js/.DS_Store
  3. BIN
      public/static/.DS_Store
  4. BIN
      public/web/h5/hybrid/html/.DS_Store
  5. BIN
      public/web/h5/hybrid/html/js/.DS_Store
  6. BIN
      public/web/h5/static/.DS_Store
  7. 91 0
      vendor/aliyuncs/oss-sdk-php/samples/BucketCname.php
  8. 98 0
      vendor/aliyuncs/oss-sdk-php/samples/BucketEncryption.php
  9. 116 0
      vendor/aliyuncs/oss-sdk-php/samples/BucketPayment.php
  10. 123 0
      vendor/aliyuncs/oss-sdk-php/samples/BucketPolicy.php
  11. 112 0
      vendor/aliyuncs/oss-sdk-php/samples/BucketTags.php
  12. 61 0
      vendor/aliyuncs/oss-sdk-php/samples/BucketTransferAcceleration.php
  13. 235 0
      vendor/aliyuncs/oss-sdk-php/samples/BucketVersion.php
  14. 145 0
      vendor/aliyuncs/oss-sdk-php/samples/BucketWorm.php
  15. 366 0
      vendor/aliyuncs/oss-sdk-php/samples/ObjectTagging.php
  16. 105 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameTokenInfo.php
  17. 147 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfoV2.php
  18. 73 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/TransferAccelerationConfig.php
  19. 19 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CreateBucketCnameTokenResult.php
  20. 19 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketCnameTokenResult.php
  21. 22 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketTransferAccelerationResult.php
  22. 72 0
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsV2Result.php
  23. 31 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameTokenInfoTest.php
  24. 61 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketTransferAccelerationResultTest.php
  25. 154 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsV2ResultTest.php
  26. 61 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCnameTest.php
  27. 40 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTransferAccelerationTest.php
  28. 175 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientListObjectsV2Test.php
  29. 56 0
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TransferAccelerationConfigTest.php
  30. 52 0
      vendor/guzzlehttp/psr7/src/UriComparator.php
  31. 39 0
      vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php
  32. 11 0
      vendor/myclabs/php-enum/SECURITY.md
  33. 35 0
      vendor/myclabs/php-enum/psalm.xml
  34. 54 0
      vendor/myclabs/php-enum/src/PHPUnit/Comparator.php
  35. BIN
      vendor/oygza/aliyun-php-sdk-afs/src/.DS_Store
  36. BIN
      vendor/oygza/aliyun-php-sdk-afs/src/aliyun/.DS_Store
  37. 32 0
      vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Color.php
  38. 77 0
      vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Color/BIFF5.php
  39. 77 0
      vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Color/BIFF8.php
  40. 31 0
      vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Color/BuiltIn.php
  41. 28 0
      vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/ErrorCode.php
  42. 36 0
      vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Style/Border.php
  43. 41 0
      vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Style/FillPattern.php
  44. 178 0
      vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet/Dimension.php
  45. 90 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DAVERAGE.php
  46. 90 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DCOUNT.php
  47. 86 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DGET.php
  48. 89 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DMAX.php
  49. 89 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DMIN.php
  50. 87 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DPRODUCT.php
  51. 90 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DSTDEV.php
  52. 90 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DSTDEVP.php
  53. 90 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DVAR.php
  54. 90 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DVARP.php
  55. 83 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/DateTime/DATE.php
  56. 76 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/DateTime/DATEVALUE.php
  57. 81 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/DateTime/TIME.php
  58. 72 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/DateTime/TIMEVALUE.php
  59. 51 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/index.php
  60. 42 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader01.php
  61. 50 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader02.php
  62. 51 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader03.php
  63. 47 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader04.php
  64. 51 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader05.php
  65. 54 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader06.php
  66. 55 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader07.php
  67. 55 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader08.php
  68. 71 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader09.php
  69. 82 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader10.php
  70. 91 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader11.php
  71. 94 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader12.php
  72. 60 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader13.php
  73. 105 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader14.php
  74. 71 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader15.php
  75. 46 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader16.php
  76. 52 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader17.php
  77. 50 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader18.php
  78. 53 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader19.php
  79. 4 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example1.csv
  80. 4 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example1.tsv
  81. BIN
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example1.xls
  82. 223 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example2.csv
  83. BIN
      vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example2.xls
  84. 93 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/exampleWorkBookReader01.php
  85. 52 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/exampleWorkBookReader02.php
  86. 80 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/exampleWorkBookReader03.php
  87. 55 0
      vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/exampleWorkBookReader04.php
  88. BIN
      vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/sampleData/example1.xls
  89. BIN
      vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/sampleData/example1.xlsx
  90. BIN
      vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/sampleData/example2.xls
  91. 50 0
      vendor/phpoffice/phpexcel/Documentation/Examples/index.php
  92. 377 0
      vendor/phpoffice/phpexcel/Documentation/FunctionListByCategory.txt
  93. 381 0
      vendor/phpoffice/phpexcel/Documentation/FunctionListByName.txt
  94. BIN
      vendor/phpoffice/phpexcel/Documentation/Functionality Cross-Reference.xls
  95. BIN
      vendor/phpoffice/phpexcel/Documentation/PHPExcel AutoFilter Reference developer documentation.doc
  96. BIN
      vendor/phpoffice/phpexcel/Documentation/PHPExcel Function Reference developer documentation.doc
  97. BIN
      vendor/phpoffice/phpexcel/Documentation/PHPExcel User Documentation - Reading Spreadsheet Files.doc
  98. BIN
      vendor/phpoffice/phpexcel/Documentation/PHPExcel developer documentation.doc
  99. 51 0
      vendor/phpoffice/phpexcel/Documentation/assets/ClassDiagrams/Architecture.cd
  100. BIN
      vendor/phpoffice/phpexcel/Documentation/assets/ClassDiagrams/Architecture.png

BIN
public/hybrid/html/.DS_Store


BIN
public/hybrid/html/js/.DS_Store


BIN
public/static/.DS_Store


BIN
public/web/h5/hybrid/html/.DS_Store


BIN
public/web/h5/hybrid/html/js/.DS_Store


BIN
public/web/h5/static/.DS_Store


+ 91 - 0
vendor/aliyuncs/oss-sdk-php/samples/BucketCname.php

@@ -0,0 +1,91 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+
+//*******************************Simple Usage ***************************************************************
+
+// Add Canme record
+$myDomain = '<yourDomainName>';
+$ossClient->addBucketCname($bucket, $myDomain);
+
+// View cname records
+$cnameConfig = $ossClient->getBucketCname($bucket);
+Common::println("bucket $bucket cname:" . $cnameConfig->serializeToXml());
+
+// Delete bucket cname
+$myDomain = '<yourDomainName>';
+$ossClient->deleteBucketCname($bucket,$myDomain);
+Common::println("bucket $bucket cname deleted");
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+addBucketCname($ossClient, $bucket);
+getBucketCname($ossClient, $bucket);
+deleteBucketCname($ossClient, $bucket);
+
+/**
+ * Set bucket cname
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function addBucketCname($ossClient, $bucket)
+{
+	// Set up a custom domain name.
+	$myDomain = '<yourDomainName>';
+	try {
+		$ossClient->addBucketCname($bucket, $myDomain);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get bucket cname
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getBucketCname($ossClient, $bucket)
+{
+    try {
+		$cnameConfig = $ossClient->getBucketCname($bucket);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+    print($cnameConfig->serializeToXml() . "\n");
+}
+
+/**
+ * Delete bucket cname
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function deleteBucketCname($ossClient, $bucket)
+{
+	$myDomain = '<yourDomainName>';
+    try {
+		$ossClient->deleteBucketCname($bucket, $myDomain);
+    } catch (OssException $e) {
+        printf(__FUNCTION__ . ": FAILED\n");
+        printf($e->getMessage() . "\n");
+        return;
+    }
+    print(__FUNCTION__ . ": OK" . "\n");
+}

+ 98 - 0
vendor/aliyuncs/oss-sdk-php/samples/BucketEncryption.php

@@ -0,0 +1,98 @@
+<?php
+
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+use OSS\Model\ServerSideEncryptionConfig;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* Simple Usage****************************************************************
+
+// Configure Bucket encryption
+// Set Bucket's default server-side encryption method to OSS fully managed encryption (SSE-OSS).
+$config = new ServerSideEncryptionConfig("AES256");
+// Set Bucket's default server-side encryption method to KMS, and do not specify a CMK ID.
+//$config = new ServerSideEncryptionConfig("KMS");
+// Set Bucket's default server-side encryption method to KMS, and specify the CMK ID.
+//$config = new ServerSideEncryptionConfig("KMS", "your kms id");
+$ossClient->putBucketEncryption($bucket, $config);
+Common::println("bucket $bucket encryoption created");
+
+$config = $ossClient->getBucketEncryption($bucket);
+Common::println("bucket $bucket encryoption:".$config->serializeToXml());
+
+$config = $ossClient->deleteBucketEncryption($bucket);
+Common::println("bucket $bucket encryoption has deleted");
+
+//******************************* For complete usage, see the following functions ****************************************************
+putBucketEncryption($ossClient, $bucket);
+getBucketEncryption($ossClient, $bucket);
+deleteBucketEncryption($ossClient, $bucket);
+
+/**
+ * Configure Bucket encryption
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+
+function putBucketEncryption($ossClient,$bucket){
+	try {
+		// Set Bucket's default server-side encryption method to OSS fully managed encryption (SSE-OSS).
+		$config = new ServerSideEncryptionConfig("AES256");
+		// Set Bucket's default server-side encryption method to KMS, and do not specify a CMK ID.
+		//$config = new ServerSideEncryptionConfig("KMS");
+		// Set Bucket's default server-side encryption method to KMS, and specify the CMK ID.
+		//$config = new ServerSideEncryptionConfig("KMS", "your kms id");
+		$ossClient->putBucketEncryption($bucket, $config);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get Bucket encryption
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+
+function getBucketEncryption($ossClient,$bucket){
+	try {
+		$config = $ossClient->getBucketEncryption($bucket);
+		print($config->getSSEAlgorithm());
+		print($config->getKMSMasterKeyID());
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Delete Bucket encryption
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+
+function deleteBucketEncryption($ossClient,$bucket){
+	try {
+		$ossClient->deleteBucketEncryption($bucket);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+

+ 116 - 0
vendor/aliyuncs/oss-sdk-php/samples/BucketPayment.php

@@ -0,0 +1,116 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* Simple Usage****************************************************************
+
+//Set requester payment mode
+$ossClient->putBucketRequestPayment($bucket, "Requester");
+
+//Get requester payment mode configuration
+$payer = $ossClient->getBucketRequestPayment($bucket);
+Common::println("bucket $bucket Payer:".$payer.PHP_EOL);
+
+//Third-party paid access to Object
+$options = array(
+	OssClient::OSS_HEADERS => array(
+		OssClient::OSS_REQUEST_PAYER => 'requester',
+	));
+
+$content = "hello";
+$object = "object";
+
+//PutObject interface to specify the payer
+$ossClient->putObject($bucket, $object, $content, $options);
+
+// GetObject interface to specify the payer
+$ossClient->getObject($bucket, $object, $options);
+
+// DeleteObject interface to specify the payer
+$ossClient->deleteObject($bucket, $object, $options);
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+putBucketRequestPayment($ossClient,$bucket);
+getBucketRequestPayment($ossClient,$bucket);
+setObjectPayment($ossClient,$bucket);
+
+/**
+ * Set requester payment mode
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function putBucketRequestPayment($ossClient, $bucket)
+{
+	try {
+		$ossClient->putBucketRequestPayment($bucket, "Requester");
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Get payment mode of bucket
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function getBucketRequestPayment($ossClient, $bucket)
+{
+	try {
+		$payer = $ossClient->getBucketRequestPayment($bucket);
+		print("bucket $bucket Payer:".$payer.PHP_EOL);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Set payment mode of object
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function setObjectPayment($ossClient,$bucket){
+	// Specify the payment model for the requester.
+	$options = array(
+		OssClient::OSS_HEADERS => array(
+			OssClient::OSS_REQUEST_PAYER => 'requester',
+		));
+	
+	try {
+		
+		$content = "hello";
+		$object = "object";
+		//PutObject interface to specify the payer
+		$ossClient->putObject($bucket, $object, $content, $options);
+		// GetObject interface to specify the payer
+		$ossClient->getObject($bucket, $object, $options);
+		// DeleteObject interface to specify the payer
+		$ossClient->deleteObject($bucket, $object, $options);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+

+ 123 - 0
vendor/aliyuncs/oss-sdk-php/samples/BucketPolicy.php

@@ -0,0 +1,123 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* Simple Usage****************************************************************
+
+// Set Bucket Policy
+// Authorization strategy.
+$policy = <<< BBBB
+{
+  "Version":"1",
+  "Statement":[
+  {
+    "Action":[
+    "oss:PutObject",
+    "oss:GetObject"
+  ],
+    "Effect":"Allow",
+    "Resource":["acs:oss:*:*:*/user1/*"]
+  }
+  ]
+}
+BBBB;
+$ossClient->putBucketPolicy($bucket, $policy);
+
+// Get bucket pllicy
+$policy = $ossClient->getBucketPolicy($bucket);
+Common::println("bucket $bucket policy: " . $policy);
+
+
+// Delete bucket pllicy
+$policy = $ossClient->deleteBucketPolicy($bucket);
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+putBucketPolicy($ossClient, $bucket);
+getBucketPolicy($ossClient, $bucket);
+deleteBucketPolicy($ossClient, $bucket);
+
+/**
+ * Set Bucket Policy
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function putBucketPolicy($ossClient, $bucket)
+{
+	$policy = <<< BBBB
+{
+  "Version":"1",
+  "Statement":[
+  {
+    "Action":[
+    "oss:PutObject",
+    "oss:GetObject"
+  ],
+    "Effect":"Allow",
+    "Resource":["acs:oss:*:*:*/user1/*"]
+  }
+  ]
+}
+BBBB;
+	
+	try {
+		$ossClient->putBucketPolicy($bucket, $policy);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Get Bucket Policy
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function getBucketPolicy($ossClient, $bucket)
+{
+	try {
+		$policy = $ossClient->getBucketPolicy($bucket);
+		print($policy);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Delete Bucket Policy
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function deleteBucketPolicy($ossClient, $bucket)
+{
+	try {
+		$ossClient->deleteBucketPolicy($bucket);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}

+ 112 - 0
vendor/aliyuncs/oss-sdk-php/samples/BucketTags.php

@@ -0,0 +1,112 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+use OSS\Model\TaggingConfig;
+use OSS\Model\Tag;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* Simple Usage****************************************************************
+
+// Set bucket tag
+$config = new TaggingConfig();
+$config->addTag(new Tag("key1", "value1"));
+$config->addTag(new Tag("key2", "value2"));
+$ossClient->putBucketTags($bucket, $config);
+
+// Get bucket tags
+$config = $ossClient->getBucketTags($bucket);
+Common::println("bucket $bucket tags: ".$config->serializeToXml());
+
+// Delete bucket tags
+
+// Delete the specified tag of the bucket.
+$tags = array();
+$tags[] = new Tag("key1", "value1");
+$tags[] = new Tag("key2", "value2");
+$ossClient->deleteBucketTags($bucket, $tags);
+
+// Delete all tags in the bucket.
+$ossClient->deleteBucketTags($bucket);
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+putBucketTags($ossClient, $bucket);
+getBucketTags($ossClient, $bucket);
+deleteBucketTags($ossClient, $bucket);
+
+
+/**
+ * Create bucket tag
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function putBucketTags($ossClient, $bucket)
+{
+	try {
+		// 设置Bucket标签。
+		$config = new TaggingConfig();
+		$config->addTag(new Tag("key1", "value1"));
+		$config->addTag(new Tag("key2", "value2"));
+		$ossClient->putBucketTags($bucket, $config);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * get bucket tag
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function getBucketTags($ossClient, $bucket)
+{
+	try {
+		$config = $ossClient->getBucketTags($bucket);
+		print_r($config->getTags());
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * delete bucket tag
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function deleteBucketTags($ossClient, $bucket)
+{
+	try {
+		// Delete the specified tag of the bucket.
+		$tags = array();
+		$tags[] = new Tag("key1", "value1");
+		$tags[] = new Tag("key2", "value2");
+		$ossClient->deleteBucketTags($bucket, $tags);
+		
+		// Delete all tags in the bucket.
+		//$ossClient->deleteBucketTags($bucket);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+

+ 61 - 0
vendor/aliyuncs/oss-sdk-php/samples/BucketTransferAcceleration.php

@@ -0,0 +1,61 @@
+<?php
+
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* Simple Usage****************************************************************
+
+// set <tran></tran>sfer acceleration
+$enabled = true; // set true to enable transfer acceleration; set false to disalbe transfer acceleration
+$ossClient->putBucketTransferAcceleration($bucket, $enabled);
+printf('putBucketTransferAcceleration SUCCESS' . "\n");
+
+
+// get transfer acceleration
+$result  = $ossClient->getBucketTransferAcceleration($bucket);
+printf('getBucketTransferAcceleration Status:%s'."\n",$result);
+
+
+//******************************* For complete usage, see the following functions ****************************************************
+putBucketTransferAcceleration($ossClient,$bucket);
+getBucketTransferAcceleration($bucket);
+
+/**
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name string
+ * @param $enabled string
+ */
+function putBucketTransferAcceleration($ossClient, $bucket, $enabled)
+{
+	try{
+		$enabled = true; // set true to enable transfer acceleration; set false to disalbe transfer acceleration
+		$ossClient->putBucketTransferAcceleration($bucket,$enabled);
+		printf('putBucketTransferAcceleration SUCCESS' . "\n");
+	} catch(OssException $e) {
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name string
+ */
+function getBucketTransferAcceleration($ossClient, $bucket)
+{
+	try{
+		$result = $ossClient->getBucketTransferAcceleration($bucket);
+		printf('getBucketTransferAcceleration Status:%s'."\n",$result);
+	} catch(OssException $e) {
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}

+ 235 - 0
vendor/aliyuncs/oss-sdk-php/samples/BucketVersion.php

@@ -0,0 +1,235 @@
+<?php
+
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* Simple Usage****************************************************************
+
+//Set Bucket version control status
+//Set the storage space version control to enable version control (Enabled) or suspend version control (Suspended).
+$ossClient->putBucketVersioning($bucket, "Enabled");
+Common::println("bucket $bucket version Enabled");
+// show all object list
+$option = array(
+	OssClient::OSS_KEY_MARKER => null,
+	OssClient::OSS_VERSION_ID_MARKER => null
+);
+$bool = true;
+while ($bool) {
+	$result = $ossClient->listObjectVersions($bucket, $option);
+	## View the version information of the listed object.
+	foreach ($result->getObjectVersionList() as $key => $info) {
+		Common::println("key name: " . $info->getKey());
+		Common::println("versionid: " . $info->getVersionId());
+		Common::println("Is latest: " . $info->getIsLatest());
+	}
+	
+	## View the version information that lists the deletion flags.
+	foreach ($result->getDeleteMarkerList() as $key => $info) {
+		Common::println("del_maker key name: " . $info->getKey());
+		Common::println("del_maker versionid: " . $info->getVersionId());
+		Common::println("del_maker Is latest: " . $info->getIsLatest());
+	}
+	
+	if ($result->getIsTruncated() === 'true') {
+		$option = array(
+			OssClient::OSS_KEY_MARKER => $result->getNextKeyMarker(),
+			OssClient::OSS_VERSION_ID_MARKER => $result->getNextVersionIdMarker()
+		);
+	} else {
+		$bool = false;
+	}
+}
+
+// show the prefix object
+
+$option = array(
+	OssClient::OSS_KEY_MARKER => null,
+	OssClient::OSS_VERSION_ID_MARKER => null,
+	OssClient::OSS_PREFIX => "test"
+);
+$bool = true;
+while ($bool) {
+	$result = $ossClient->listObjectVersions($bucket, $option);
+	## View the version information of the listed object.
+	foreach ($result->getObjectVersionList() as $key => $info) {
+		Common::println("key name: " . $info->getKey());
+		Common::println("versionid: " . $info->getVersionId());
+		Common::println("Is latest: " . $info->getIsLatest());
+	}
+	
+	## View the version information that lists the deletion flags.
+	foreach ($result->getDeleteMarkerList() as $key => $info) {
+		Common::println("del_maker key name: " . $info->getKey());
+		Common::println("del_maker versionid: " . $info->getVersionId());
+		Common::println("del_maker Is latest: " . $info->getIsLatest());
+	}
+	
+	if ($result->getIsTruncated() === 'true') {
+		$option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker();
+		$option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker();
+	} else {
+		$bool = false;
+	}
+}
+
+// list the number of objects
+
+$option = array(
+	OssClient::OSS_KEY_MARKER => null,
+	OssClient::OSS_VERSION_ID_MARKER => null,
+	OssClient::OSS_MAX_KEYS => 200
+);
+
+$result = $ossClient->listObjectVersions($bucket, $option);
+## View the version information of the listed object.
+foreach ($result->getObjectVersionList() as $key => $info) {
+	Common::println("key name: " . $info->getKey());
+	Common::println("versionid: " . $info->getVersionId());
+	Common::println("Is latest: " . $info->getIsLatest());
+}
+
+## View the version information that lists the deletion flags.
+foreach ($result->getDeleteMarkerList() as $key => $info) {
+	Common::println("del_maker key name: " . $info->getKey());
+	Common::println("del_maker versionid: " . $info->getVersionId());
+	Common::println("del_maker Is latest: " . $info->getIsLatest());
+}
+
+
+// show root folder list
+$option = array(
+	OssClient::OSS_KEY_MARKER => null,
+	OssClient::OSS_VERSION_ID_MARKER => null,
+	OssClient::OSS_DELIMITER => "/",
+);
+$bool = true;
+while ($bool) {
+	$result = $ossClient->listObjectVersions($bucket, $option);
+	## View the version information of the listed object.
+	foreach ($result->getObjectVersionList() as $key => $info) {
+		Common::println("key name: " . $info->getKey());
+		Common::println("versionid: " . $info->getVersionId());
+		Common::println("Is latest: " . $info->getIsLatest());
+	}
+	
+	## View the version information that lists the deletion flags.
+	foreach ($result->getDeleteMarkerList() as $key => $info) {
+		Common::println("del_maker key name: " . $info->getKey());
+		Common::println("del_maker versionid: " . $info->getVersionId());
+		Common::println("del_maker Is latest: " . $info->getIsLatest());
+	}
+	
+	if ($result->getIsTruncated() === 'true') {
+		$option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker();
+		$option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker();
+	} else {
+		$bool = false;
+	}
+}
+
+//  Show subfolder objects list
+$option = array(
+	OssClient::OSS_KEY_MARKER => null,
+	OssClient::OSS_VERSION_ID_MARKER => null,
+	OssClient::OSS_DELIMITER => "/",
+	OssClient::OSS_PREFIX => "test/",
+);
+$bool = true;
+while ($bool) {
+	$result = $ossClient->listObjectVersions($bucket, $option);
+	## View the version information of the listed object.
+	foreach ($result->getObjectVersionList() as $key => $info) {
+		Common::println("key name: " . $info->getKey());
+		Common::println("versionid: " . $info->getVersionId());
+		Common::println("Is latest: " . $info->getIsLatest());
+	}
+	
+	## View the version information that lists the deletion flags.
+	foreach ($result->getDeleteMarkerList() as $key => $info) {
+		Common::println("del_maker key name: " . $info->getKey());
+		Common::println("del_maker versionid: " . $info->getVersionId());
+		Common::println("del_maker Is latest: " . $info->getIsLatest());
+	}
+	
+	if ($result->getIsTruncated() === 'true') {
+		$option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker();
+		$option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker();
+	} else {
+		$bool = false;
+	}
+}
+
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+listObjectVersions($ossClient, $bucket);
+putBucketVersioning($ossClient, $bucket);
+/**
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function listObjectVersions($ossClient, $bucket)
+{
+	try {
+		$option = array(
+			OssClient::OSS_KEY_MARKER => null,
+			OssClient::OSS_VERSION_ID_MARKER => null,
+		);
+		$bool = true;
+		while ($bool) {
+			$result = $ossClient->listObjectVersions($bucket, $option);
+			## View the version information of the listed object.
+			foreach ($result->getObjectVersionList() as $key => $info) {
+				Common::println("key name: " . $info->getKey());
+				Common::println("versionid: " . $info->getVersionId());
+				Common::println("Is latest: " . $info->getIsLatest());
+			}
+			
+			## View the version information that lists the deletion flags.
+			foreach ($result->getDeleteMarkerList() as $key => $info) {
+				Common::println("del_maker key name: " . $info->getKey());
+				Common::println("del_maker versionid: " . $info->getVersionId());
+				Common::println("del_maker Is latest: " . $info->getIsLatest());
+			}
+			
+			if ($result->getIsTruncated() === 'true') {
+				$option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker();
+				$option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker();
+			} else {
+				$bool = false;
+			}
+		}
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Enabled or Suspended bucket version
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function putBucketVersioning($ossClient, $bucket)
+{
+	try {
+		//Set the storage space version control to enable version control (Enabled) or suspend version control (Suspended).
+		$ossClient->putBucketVersioning($bucket, "Enabled");
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}

+ 145 - 0
vendor/aliyuncs/oss-sdk-php/samples/BucketWorm.php

@@ -0,0 +1,145 @@
+<?php
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+$bucket = Common::getBucketName();
+
+//******************************* Simple Usage****************************************************************
+
+// Create a new compliance retention policy:
+// The specified object protection days are 30 days.
+$wormId = $ossClient->initiateBucketWorm($bucket, 30);
+Common::println("bucket $bucket wormId: " . $wormId.PHP_EOL);
+
+// Cancel an unlocked compliance retention policy
+$ossClient->abortBucketWorm($bucket);
+
+//Lock compliant retention policy
+$wormId = $ossClient->initiateBucketWorm($bucket, 30);
+$ossClient->completeBucketWorm($bucket, $wormId);
+
+// Get compliant retention policy
+$config = $ossClient->getBucketWorm($bucket);
+Common::println("WormId:".$config->getWormId().PHP_EOL);
+Common::println("State:". $config->getState().PHP_EOL);
+Common::println("Day:". $config->getDay().PHP_EOL);
+
+// Extend the retention days of objects
+$wormId = "<yourWormId>";
+// Extend the retention days of objects in the locked compliance retention policy to 120 days.
+$ossClient->extendBucketWorm($bucket, $wormId, 120);
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+initiateBucketWorm($ossClient, $bucket);
+abortBucketWorm($ossClient, $bucket);
+completeBucketWorm($ossClient, $bucket);
+getBucketWorm($ossClient, $bucket);
+extendBucketWorm($ossClient, $bucket);
+
+/**
+ * Set Bucket Worm Ploicy
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function initiateBucketWorm($ossClient, $bucket)
+{
+	try {
+		$wormId = $ossClient->initiateBucketWorm($bucket,30);
+		print("bucket $bucket wormId: " . $wormId.PHP_EOL);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Cancel an unlocked compliance retention policy
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket Name of the bucket to create
+ * @return null
+ */
+function abortBucketWorm($ossClient, $bucket)
+{
+	try {
+		$ossClient->abortBucketWorm($bucket);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Complete Bucket Worm
+ * @param $ossClient $ossClient OssClient instance
+ * @param $bucket $bucket Name of the bucket to create
+ */
+function completeBucketWorm($ossClient, $bucket)
+{
+	try {
+		$wormId = $ossClient->initiateBucketWorm($bucket, 30);
+		$ossClient->completeBucketWorm($bucket, $wormId);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Get Bucket Worm
+ * @param $ossClient $ossClient OssClient instance
+ * @param $bucket $bucket Name of the bucket to create
+ */
+function getBucketWorm($ossClient, $bucket)
+{
+	try {
+		$config = $ossClient->getBucketWorm($bucket);
+		
+		printf("WormId:%s\n", $config->getWormId());
+		printf("State:%s\n", $config->getState());
+		printf("Day:%d\n", $config->getDay());
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Extend the retention days of objects
+ * @param $ossClient $ossClient OssClient instance
+ * @param $bucket $bucket Name of the bucket to create
+ */
+function extendBucketWorm($ossClient, $bucket)
+{
+	$wormId = "<yourWormId>";
+	try {
+		$ossClient->ExtendBucketWorm($bucket, $wormId, 120);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}

+ 366 - 0
vendor/aliyuncs/oss-sdk-php/samples/ObjectTagging.php

@@ -0,0 +1,366 @@
+<?php
+
+require_once __DIR__ . '/Common.php';
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+use OSS\Core\OssUtil;
+use OSS\Model\TaggingConfig;
+use OSS\Model\Tag;
+
+$bucket = Common::getBucketName();
+$ossClient = Common::getOssClient();
+if (is_null($ossClient)) exit(1);
+//******************************* Simple usage ***************************************************************
+
+// Upload Object add tag
+$object = "b.file";
+$options = array(
+	OssClient::OSS_HEADERS => array(
+		'x-oss-tagging' => 'key1=value1&key2=value2&key3=value3',
+	)
+);
+$result = $ossClient->putObject($bucket, $object, __FILE__,$options);
+Common::println("b.file is created");
+Common::println("tag is:".$result['oss-requestheaders']['x-oss-tagging']);
+
+// Add object tags when uploading parts
+
+$object = "b.file";
+$file = __FILE__;
+$options = array(
+	OssClient::OSS_CHECK_MD5 => true,
+	OssClient::OSS_PART_SIZE => 1,
+	OssClient::OSS_HEADERS => array(
+		'x-oss-tagging' => 'key1=value1&key2=value2&key3=value3',
+	),
+);
+$result = $ossClient->multiuploadFile($bucket, $object, $file, $options);
+Common::println("b.file is created");
+Common::println("tag is:".$result['oss-requestheaders']['x-oss-tagging']);
+
+// get tags from object
+
+$object = "a.txt";
+$result = $ossClient->getObjectTagging($bucket,$object);
+printf($object.'tags is: '.$result->serializeToXml().PHP_EOL);
+
+
+// Add or change object tags to uploaded objects
+$config = new TaggingConfig();
+$config->addTag(new Tag("key1", "value1"));
+$config->addTag(new Tag("key2", "value2"));
+
+$ossClient->putObjectTagging($bucket, $object, $config);
+// Add object tags when uploading
+$object = "a.txt";
+$filePath = "D:\\localpath\\b.txt";
+$filePath1 = "D:\\localpath\\c.txt";
+$options = array(
+	OssClient::OSS_HEADERS => array(
+		'x-oss-tagging' => 'key1=value1&key2=value2',
+	)
+);
+$position = $ossClient->appendObject($bucket, $object,'content one',0,$options);
+printf('Content one append object Success'.PHP_EOL);
+$position = $ossClient->appendObject($bucket, $object, 'content two',$position,$options);
+printf('Content two append object Success'.PHP_EOL);
+
+// delete tags
+$object = "g.file";
+$ossClient->deleteObjectTagging($bucket, $object);
+printf($object.' tags has deleted'.PHP_EOL);
+
+// Copy a small file
+$fromBucket = $bucket;
+$fromObject = "a.file";
+$toBucket = $bucket;
+$toObject = $fromObject . '.copy';
+$options = array(
+	OssClient::OSS_HEADERS => array(
+		'x-oss-tagging-directive' => 'Replace',
+		'x-oss-tagging'=>'key1=value1&key2=value2&key3=value3',
+	));
+$ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options);
+$config = $ossClient->getObjectTagging($bucket, $toObject);
+Common::println('object tags is:'.$config->serializeToXml());
+
+// Copy a large file
+$fromBucket = $bucket;
+$fromObject = "a.file";
+$toBucket = $bucket;
+$toObject = $fromObject . '.copy';
+$options = array(
+	OssClient::OSS_HEADERS => array(
+		'x-oss-tagging'=>'key1=value1&key2=value2&key3=value3',
+	));
+
+$part_size = 256*1024*1024;
+$objectMeta = $ossClient->getObjectMeta($fromBucket, $fromObject);
+$length = $objectMeta['content-length'];
+$upload_id = $ossClient->initiateMultipartUpload($toBucket, $toObject,$options);
+$pieces = $ossClient->generateMultiuploadParts($length, $part_size);
+$response_upload_part = array();
+$copyId = 1;
+$upload_position = 0;
+foreach ($pieces as $i => $piece) {
+	$from_pos = $upload_position + (integer)$piece['seekTo'];
+	$to_pos = (integer)$piece['length'] + $from_pos - 1;
+	$up_options = array(
+		'start' => $from_pos,
+		'end' => $to_pos,
+	);
+	$response_upload_part[] = $ossClient->uploadPartCopy( $fromBucket, $fromObject, $toBucket, $toObject, $copyId, $upload_id, $up_options);
+	printf("initiateMultipartUpload, uploadPartCopy - part#{$copyId} OK\n");
+	$copyId = $copyId + 1;
+}
+$upload_parts = array();
+foreach ($response_upload_part as $i => $etag) {
+	$upload_parts[] = array(
+		'PartNumber' => ($i + 1),
+		'ETag' => $etag,
+	);
+}
+$result = $ossClient->completeMultipartUpload($toBucket, $toObject, $upload_id, $upload_parts);
+$config = $ossClient->getObjectTagging($bucket, $toObject);
+Common::println($toObject.' tags is:'.$config->serializeToXml());
+
+
+
+//******************************* For complete usage, see the following functions ****************************************************
+
+putObject($ossClient,$bucket);
+multiuploadFile($ossClient,$bucket);
+appendObject($ossClient,$bucket);
+putObjectTagging($ossClient,$bucket);
+getObjectTagging($ossClient,$bucket);
+deleteObjectTagging($ossClient,$bucket);
+copyObjectSmall($ossClient,$bucket);
+copyObjectLarge($ossClient,$bucket);
+/**
+ *  Upload Object add tag
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name
+ */
+function putObject($ossClient,$bucket){
+	$object = "b.file";
+	$options = array(
+		OssClient::OSS_HEADERS => array(
+			'x-oss-tagging' => 'key1=value1&key2=value2&key3=value3',
+		));
+	try {
+		// 通过简单上传的方式上传Object。
+		$result = $ossClient->putObject($bucket, $object, __FILE__,$options);
+		Common::println("b.file is created".PHP_EOL);
+		Common::println("tag is:".$result['oss-requestheaders']['x-oss-tagging'].PHP_EOL);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Add object tags when uploading parts
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name
+ */
+function multiuploadFile($ossClient,$bucket){
+	$object = "b.file";
+	$file = __FILE__;
+	$options = array(
+		OssClient::OSS_CHECK_MD5 => true,
+		OssClient::OSS_PART_SIZE => 1,
+		OssClient::OSS_HEADERS => array(
+			'x-oss-tagging' => 'key1=value1&key2=value2&key3=value3',
+		),
+	);
+	
+	try {
+		$result = $ossClient->multiuploadFile($bucket, $object, $file, $options);
+		Common::println("b.file is created".PHP_EOL);
+		Common::println("tag is:".$result['oss-requestheaders']['x-oss-tagging'].PHP_EOL);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Add object tags when uploading
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name string
+ */
+function appendObject($ossClient,$bucket){
+	$object = "g.file";
+	$content_array = array('Hello OSS', 'Hi OSS');
+	$options = array(
+		OssClient::OSS_HEADERS => array(
+			'x-oss-tagging' => 'key1=value1&key2=value2',
+		));
+	
+	try {
+		$position = $ossClient->appendObject($bucket, $object, $content_array[0], 0, $options);
+		printf($content_array[0].' append object Success'.PHP_EOL);
+		$position = $ossClient->appendObject($bucket, $object, $content_array[1], $position);
+		printf($content_array[1].' append object Success'.PHP_EOL);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name string
+ * @throws OssException
+ */
+function putObjectTagging($ossClient,$bucket){
+	$object = "g.file";
+	$config = new TaggingConfig();
+	$config->addTag(new Tag("key1", "value1"));
+	$config->addTag(new Tag("key2", "value2"));
+	
+	try {
+		$ossClient->putObjectTagging($bucket, $object, $config);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * get object tags
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name string
+ */
+function getObjectTagging($ossClient,$bucket){
+	$object = "g.file";
+	try {
+		$config = $ossClient->getObjectTagging($bucket, $object);
+		printf($object." tags is:".$config->serializeToXml().PHP_EOL);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * get object tags
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name string
+ */
+function deleteObjectTagging($ossClient,$bucket){
+	$object = "g.file";
+	try {
+		$ossClient->deleteObjectTagging($bucket, $object);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Copy small files
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name string
+ */
+function copyObjectSmall($ossClient,$bucket){
+	$fromBucket = $bucket;
+	$fromObject = "a.file";
+	$toBucket = $bucket;
+	$toObject = $fromObject . '.copy';
+	$options = array(
+		OssClient::OSS_HEADERS => array(
+			'x-oss-tagging-directive' => 'Replace',
+			'x-oss-tagging'=>'key1=value1&key2=value2&key3=value3',
+		));
+	
+	try {
+		$ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $options);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	$config = $ossClient->getObjectTagging($bucket, $toObject);
+	Common::println('object tags is:'.$config->serializeToXml());
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Copy a large file
+ * @param $ossClient OssClient
+ * @param $bucket bucket_name string
+ */
+function copyObjectLarge($ossClient,$bucket){
+	$fromBucket = $bucket;
+	$fromObject = "a.file";
+	$toBucket = $bucket;
+	$toObject = $fromObject . '.copy';
+	$options = array(
+		OssClient::OSS_HEADERS => array(
+			'x-oss-tagging'=>'key1=value1&key2=value2&key3=value3',
+		));
+	
+	$part_size = 256*1024*1024;
+	try{
+		$objectMeta = $ossClient->getObjectMeta($fromBucket, $fromObject);
+		$length = $objectMeta['content-length'];
+		$upload_id = $ossClient->initiateMultipartUpload($toBucket, $toObject,$options);
+		$pieces = $ossClient->generateMultiuploadParts($length, $part_size);
+		$response_upload_part = array();
+		$copyId = 1;
+		$upload_position = 0;
+		foreach ($pieces as $i => $piece) {
+			$from_pos = $upload_position + (integer)$piece['seekTo'];
+			$to_pos = (integer)$piece['length'] + $from_pos - 1;
+			$up_options = array(
+				'start' => $from_pos,
+				'end' => $to_pos,
+			);
+			$response_upload_part[] = $ossClient->uploadPartCopy( $fromBucket, $fromObject, $toBucket, $toObject, $copyId, $upload_id, $up_options);
+			printf("initiateMultipartUpload, uploadPartCopy - part#{$copyId} OK\n");
+			$copyId = $copyId + 1;
+		}
+		$upload_parts = array();
+		foreach ($response_upload_part as $i => $etag) {
+			$upload_parts[] = array(
+				'PartNumber' => ($i + 1),
+				'ETag' => $etag,
+			);
+		}
+		$result = $ossClient->completeMultipartUpload($toBucket, $toObject, $upload_id, $upload_parts);
+		printf('copy success'. "\n");
+	} catch(OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+		
+		
+	}
+	$config = $ossClient->getObjectTagging($bucket, $toObject);
+	Common::println($toObject.' tags is:'.$config->serializeToXml());
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+

+ 105 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/CnameTokenInfo.php

@@ -0,0 +1,105 @@
+<?php
+
+namespace OSS\Model;
+
+
+/**
+ * Cname token info class.
+ *
+ * Class CnameTokenInfo
+ * @package OSS\Model
+ */
+class CnameTokenInfo
+{
+    /**
+     * Get bucket name
+     *
+     * @return string
+     */
+    public function getBucket()
+    {
+        return $this->bucket;
+    }
+
+    /**
+     * Get cname
+     *
+     * @return string
+     */
+    public function getCname()
+    {
+        return $this->cname;
+    }
+
+    /**
+     * Get token.
+     *
+     * @return string
+     */
+    public function getToken()
+    {
+        return $this->token;
+    }
+
+    /**
+     * Get expireTime.
+     *
+     * @return string
+     */
+    public function getExpireTime()
+    {
+        return $this->expireTime;
+    }
+
+    /**
+     * Parse cname token from the xml.
+     *
+     * @param string $strXml
+     * @throws OssException
+     * @return null
+     */
+    public function parseFromXml($strXml)
+    {
+        $xml = simplexml_load_string($strXml);
+        if (isset($xml->Bucket) ) {
+            $this->bucket = strval($xml->Bucket);
+        }
+        if (isset($xml->Cname) ) {
+            $this->cname = strval($xml->Cname);
+        }
+        if (isset($xml->Token) ) {
+            $this->token = strval($xml->Token);
+        }
+        if (isset($xml->ExpireTime) ) {
+            $this->expireTime = strval($xml->ExpireTime);
+        }
+    }
+    
+    /**
+     * bucket name
+     *
+     * @var string
+     */
+    private $bucket;
+    /**
+     * cname
+     *
+     * @var string
+     */
+    private $cname;
+
+    /**
+     * token
+     *
+     * @var string
+     */
+    private $token;
+
+    /**
+     * expire time
+     *
+     * @var string
+     */
+    private $expireTime;
+
+}

+ 147 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfoV2.php

@@ -0,0 +1,147 @@
+<?php
+
+namespace OSS\Model;
+
+/**
+ * Class ObjectListInfoV2
+ *
+ * The class of return value of ListObjectsV2
+ *
+ * @package OSS\Model
+ */
+class ObjectListInfoV2
+{
+    /**
+     * ObjectListInfoV2 constructor.
+     *
+     * @param string $bucketName
+     * @param string $prefix
+     * @param int $maxKeys
+     * @param string $delimiter
+     * @param null $isTruncated
+     * @param array $objectList
+     * @param array $prefixList
+     * @param string $continuationToken
+     * @param string $nextContinuationToken
+     * @param string $startAfter
+     * @param int $keyCount
+     */
+    public function __construct($bucketName, $prefix, $maxKeys, $delimiter, $isTruncated, array $objectList, array $prefixList, $continuationToken, $nextContinuationToken, $startAfter, $keyCount)
+    {
+        $this->bucketName = $bucketName;
+        $this->prefix = $prefix;
+        $this->maxKeys = $maxKeys;
+        $this->delimiter = $delimiter;
+        $this->isTruncated = $isTruncated;
+        $this->objectList = $objectList;
+        $this->prefixList = $prefixList;
+        $this->continuationToken = $continuationToken;
+        $this->nextContinuationToken = $nextContinuationToken;
+        $this->startAfter = $startAfter;
+        $this->keyCount = $keyCount;
+    }
+
+    /**
+     * @return string
+     */
+    public function getBucketName()
+    {
+        return $this->bucketName;
+    }
+
+    /**
+     * @return string
+     */
+    public function getPrefix()
+    {
+        return $this->prefix;
+    }
+
+    /**
+     * @return int
+     */
+    public function getMaxKeys()
+    {
+        return $this->maxKeys;
+    }
+
+    /**
+     * @return string
+     */
+    public function getDelimiter()
+    {
+        return $this->delimiter;
+    }
+
+    /**
+     * @return mixed
+     */
+    public function getIsTruncated()
+    {
+        return $this->isTruncated;
+    }
+
+    /**
+     * Get the ObjectInfo list.
+     *
+     * @return ObjectInfo[]
+     */
+    public function getObjectList()
+    {
+        return $this->objectList;
+    }
+
+    /**
+     * Get the PrefixInfo list
+     *
+     * @return PrefixInfo[]
+     */
+    public function getPrefixList()
+    {
+        return $this->prefixList;
+    }
+
+    /**
+     * @return string
+     */
+    public function getContinuationToken()
+    {
+        return $this->continuationToken;
+    }
+    
+    /**
+     * @return string
+     */
+    public function getNextContinuationToken()
+    {
+        return $this->nextContinuationToken;
+    }
+    
+    /**
+     * @return string
+     */
+    public function getStartAfter()
+    {
+        return $this->startAfter;
+    }
+
+    /**
+     * @return int
+     */
+    public function getKeyCount()
+    {
+        return $this->keyCount;
+    }
+
+    private $bucketName = "";
+    private $prefix = "";
+    private $maxKeys = 0;
+    private $delimiter = "";
+    private $isTruncated = null;
+    private $objectList = array();
+    private $prefixList = array();
+    private $nextContinuationToken = "";
+    private $continuationToken = "";
+    private $startAfter = "";
+    private $keyCount = 0;
+}

+ 73 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/TransferAccelerationConfig.php

@@ -0,0 +1,73 @@
+<?php
+
+namespace OSS\Model;
+
+use OSS\Core\OssException;
+
+/**
+ * Class TransferAccelerationConfig
+ * @package OSS\Model
+ */
+class TransferAccelerationConfig implements XmlConfig
+{
+	/**
+	 * Parse TransferAccelerationConfig from the xml.
+	 * @param string $strXml
+	 * @throws OssException
+	 * @return null
+	 */
+	public function parseFromXml($strXml)
+	{
+		$xml = simplexml_load_string($strXml);
+		if (isset($xml->Enabled)) {
+			$this->enabled = (strval($xml->Enabled) === 'TRUE' || strval($xml->Enabled) === 'true') ? true : false;
+		}
+	}
+	
+	/**
+	 * Serialize the object into xml string.
+	 *
+	 * @return string
+	 */
+	public function serializeToXml()
+	{
+		$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><TransferAccelerationConfiguration></TransferAccelerationConfiguration>');
+		if (isset($this->enabled)) {
+			if($this->enabled === true){
+				$xml->addChild('Enabled','true');
+			} else {
+				$xml->addChild('Enabled','false');
+			}
+		}
+		return $xml->asXML();
+	}
+	
+	public function __toString()
+	{
+		return $this->serializeToXml();
+	}
+	
+	
+	/**
+	 * @return bool
+	 */
+	public function getEnabled()
+	{
+		return $this->enabled;
+	}
+	
+    /**
+     * @param boolean enabled
+     */
+    public function setEnabled($enabled)
+    {
+        $this->enabled = $enabled;
+    }
+
+	/**
+	 * @var $enabled boolean
+	 */
+	private $enabled = false;
+}
+
+

+ 19 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/CreateBucketCnameTokenResult.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace OSS\Result;
+
+use OSS\Model\CnameTokenInfo;
+
+class CreateBucketCnameTokenResult extends Result
+{
+    /**
+     * @return CnameConfig
+     */
+    protected function parseDataFromResponse()
+    {
+        $content = $this->rawResponse->body;
+        $info = new CnameTokenInfo();
+        $info->parseFromXml($content);
+        return $info;
+    }
+}

+ 19 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketCnameTokenResult.php

@@ -0,0 +1,19 @@
+<?php
+
+namespace OSS\Result;
+
+use OSS\Model\CnameTokenInfo;
+
+class GetBucketCnameTokenResult extends Result
+{
+    /**
+     * @return CnameConfig
+     */
+    protected function parseDataFromResponse()
+    {
+        $content = $this->rawResponse->body;
+        $info = new CnameTokenInfo();
+        $info->parseFromXml($content);
+        return $info;
+    }
+}

+ 22 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketTransferAccelerationResult.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace OSS\Result;
+use OSS\Model\TransferAccelerationConfig;
+
+/**
+ * Class GetBucketTransferAccelerationResult
+ * @package OSS\Result
+ */
+class GetBucketTransferAccelerationResult extends Result
+{
+	/**
+	 * @return bool
+	 */
+	protected function parseDataFromResponse()
+	{
+		$content = $this->rawResponse->body;
+		$config = new TransferAccelerationConfig();
+		$config->parseFromXml($content);
+		return $config->getEnabled();
+	}
+}

+ 72 - 0
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsV2Result.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace OSS\Result;
+
+use OSS\Core\OssUtil;
+use OSS\Model\ObjectInfo;
+use OSS\Model\ObjectListInfoV2;
+use OSS\Model\PrefixInfo;
+
+/**
+ * Class ListObjectsV2Result
+ * @package OSS\Result
+ */
+class ListObjectsV2Result extends Result
+{
+    /**
+     * Parse the xml data returned by the ListObjectsV2 interface
+     *
+     * return ObjectListInfoV2
+     */
+    protected function parseDataFromResponse()
+    {
+        $xml = new \SimpleXMLElement($this->rawResponse->body);
+        $encodingType = isset($xml->EncodingType) ? strval($xml->EncodingType) : "";
+        $objectList = $this->parseObjectList($xml, $encodingType);
+        $prefixList = $this->parsePrefixList($xml, $encodingType);
+        $bucketName = isset($xml->Name) ? strval($xml->Name) : "";
+        $prefix = isset($xml->Prefix) ? strval($xml->Prefix) : "";
+        $prefix = OssUtil::decodeKey($prefix, $encodingType);
+        $maxKeys = isset($xml->MaxKeys) ? intval($xml->MaxKeys) : 0;
+        $delimiter = isset($xml->Delimiter) ? strval($xml->Delimiter) : "";
+        $delimiter = OssUtil::decodeKey($delimiter, $encodingType);
+        $isTruncated = isset($xml->IsTruncated) ? strval($xml->IsTruncated) : "";
+        $continuationToken = isset($xml->ContinuationToken) ? strval($xml->ContinuationToken) : "";
+        $nextContinuationToken = isset($xml->NextContinuationToken) ? strval($xml->NextContinuationToken) : "";
+        $startAfter = isset($xml->StartAfter) ? strval($xml->StartAfter) : "";
+        $startAfter =  OssUtil::decodeKey($startAfter, $encodingType);
+        $keyCount = isset($xml->KeyCount) ? intval($xml->KeyCount) : 0;
+        return new ObjectListInfoV2($bucketName, $prefix, $maxKeys, $delimiter, $isTruncated, $objectList, $prefixList, $continuationToken, $nextContinuationToken, $startAfter, $keyCount);
+    }
+
+    private function parseObjectList($xml, $encodingType)
+    {
+        $retList = array();
+        if (isset($xml->Contents)) {
+            foreach ($xml->Contents as $content) {
+                $key = isset($content->Key) ? strval($content->Key) : "";
+                $key = OssUtil::decodeKey($key, $encodingType);
+                $lastModified = isset($content->LastModified) ? strval($content->LastModified) : "";
+                $eTag = isset($content->ETag) ? strval($content->ETag) : "";
+                $type = isset($content->Type) ? strval($content->Type) : "";
+                $size = isset($content->Size) ? strval($content->Size) : "0";
+                $storageClass = isset($content->StorageClass) ? strval($content->StorageClass) : "";
+                $retList[] = new ObjectInfo($key, $lastModified, $eTag, $type, $size, $storageClass);
+            }
+        }
+        return $retList;
+    }
+
+    private function parsePrefixList($xml, $encodingType)
+    {
+        $retList = array();
+        if (isset($xml->CommonPrefixes)) {
+            foreach ($xml->CommonPrefixes as $commonPrefix) {
+                $prefix = isset($commonPrefix->Prefix) ? strval($commonPrefix->Prefix) : "";
+                $prefix = OssUtil::decodeKey($prefix, $encodingType);
+                $retList[] = new PrefixInfo($prefix);
+            }
+        }
+        return $retList;
+    }
+}

+ 31 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/CnameTokenInfoTest.php

@@ -0,0 +1,31 @@
+<?php
+
+namespace OSS\Tests;
+
+
+use OSS\Model\CnameTokenInfo;
+use OSS\Core\OssException;
+
+class CnameTokenInfoTest extends \PHPUnit\Framework\TestCase
+{
+    private $xml1 = <<<BBBB
+<?xml version="1.0" encoding="utf-8"?>
+<CnameToken>
+  <Bucket>bucket</Bucket>
+  <Cname>www.foo.com</Cname>
+  <Token>1234</Token>
+  <ExpireTime>20150101</ExpireTime>
+</CnameToken>
+BBBB;
+
+    public function testFromXml()
+    {
+        $info = new CnameTokenInfo();
+        $info->parseFromXml($this->xml1);
+
+        $this->assertEquals('bucket', $info->getBucket());
+        $this->assertEquals('www.foo.com', $info->getCname());
+        $this->assertEquals('1234', $info->getToken());
+        $this->assertEquals('20150101', $info->getExpireTime());
+    }
+}

+ 61 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/GetBucketTransferAccelerationResultTest.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Result\GetBucketTransferAccelerationResult;
+use OSS\Http\ResponseCore;
+
+class GetBucketTransferAccelerationResultTest extends \PHPUnit\Framework\TestCase
+{
+
+    private $validXml = <<<BBBB
+<TransferAccelerationConfiguration>
+<Enabled>true</Enabled>
+</TransferAccelerationConfiguration>
+BBBB;
+    private $validXml1 = <<<BBBB
+<TransferAccelerationConfiguration>
+<Enabled>false</Enabled>
+</TransferAccelerationConfiguration>
+BBBB;
+
+    private $invalidXml2 = <<<BBBB
+<?xml version="1.0" ?>
+<TransferAccelerationConfiguration>
+</TransferAccelerationConfiguration>
+BBBB;
+
+    public function testParseValidXml()
+    {
+        $response = new ResponseCore(array(), $this->validXml, 200);
+        $result = new GetBucketTransferAccelerationResult($response);
+        $this->assertTrue($result->isOK());
+        $this->assertNotNull($result->getData());
+        $this->assertNotNull($result->getRawResponse());
+        $enabled = $result->getData();
+        $this->assertEquals(true, $enabled);
+    }
+
+    public function testParseValidXml1()
+    {
+        $response = new ResponseCore(array(), $this->validXml1, 200);
+        $result = new GetBucketTransferAccelerationResult($response);
+        $this->assertTrue($result->isOK());
+        $this->assertNotNull($result->getData());
+        $this->assertNotNull($result->getRawResponse());
+        $enabled = $result->getData();
+        $this->assertEquals(false, $enabled);
+    }
+
+    public function testParseInvalidXml2()
+    {
+        $response = new ResponseCore(array(), $this->invalidXml2, 200);
+        $result = new GetBucketTransferAccelerationResult($response);
+        $this->assertTrue($result->isOK());
+        $this->assertNotNull($result->getData());
+        $this->assertNotNull($result->getRawResponse());
+        $this->assertNotNull($result->getRawResponse()->body);
+        $enabled = $result->getData();
+        $this->assertEquals(false, $enabled);
+    }
+}

+ 154 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/ListObjectsV2ResultTest.php

@@ -0,0 +1,154 @@
+<?php
+
+namespace OSS\Tests;
+
+
+use OSS\Result\ListObjectsV2Result;
+use OSS\Http\ResponseCore;
+
+class ListObjectsV2ResultTest extends \PHPUnit\Framework\TestCase
+{
+
+    private $validXml1 = <<<BBBB
+<?xml version="1.0" encoding="UTF-8"?>
+<ListBucketResult>
+  <Name>testbucket-hf</Name>
+  <Prefix></Prefix>
+  <StartAfter></StartAfter>
+  <MaxKeys>1000</MaxKeys>
+  <Delimiter>/</Delimiter>
+  <IsTruncated>false</IsTruncated>
+  <CommonPrefixes>
+    <Prefix>oss-php-sdk-test/</Prefix>
+  </CommonPrefixes>
+  <CommonPrefixes>
+    <Prefix>test/</Prefix>
+  </CommonPrefixes>
+</ListBucketResult>
+BBBB;
+
+    private $validXml2 = <<<BBBB
+<?xml version="1.0" encoding="UTF-8"?>
+<ListBucketResult>
+  <Name>testbucket-hf</Name>
+  <Prefix>oss-php-sdk-test/</Prefix>
+  <StartAfter>xx</StartAfter>
+  <MaxKeys>1000</MaxKeys>
+  <Delimiter>/</Delimiter>
+  <IsTruncated>false</IsTruncated>
+  <Contents>
+    <Key>oss-php-sdk-test/upload-test-object-name.txt</Key>
+    <LastModified>2015-11-18T03:36:00.000Z</LastModified>
+    <ETag>"89B9E567E7EB8815F2F7D41851F9A2CD"</ETag>
+    <Type>Normal</Type>
+    <Size>13115</Size>
+    <StorageClass>Standard</StorageClass>
+  </Contents>
+  <KeyCount>1</KeyCount>
+</ListBucketResult>
+BBBB;
+
+    private $validXmlWithEncodedKey = <<<BBBB
+<?xml version="1.0" encoding="UTF-8"?>
+<ListBucketResult>
+  <Name>testbucket-hf</Name>
+  <EncodingType>url</EncodingType>
+  <Prefix>php%2Fprefix</Prefix>
+  <StartAfter>php%2Fmarker</StartAfter>
+  <ContinuationToken>1gJiYw--</ContinuationToken>
+  <NextContinuationToken>CgJiYw--</NextContinuationToken>
+  <MaxKeys>1000</MaxKeys>
+  <Delimiter>%2F</Delimiter>
+  <IsTruncated>true</IsTruncated>
+  <Contents>
+    <Key>php/a%2Bb</Key>
+    <LastModified>2015-11-18T03:36:00.000Z</LastModified>
+    <ETag>"89B9E567E7EB8815F2F7D41851F9A2CD"</ETag>
+    <Type>Normal</Type>
+    <Size>13115</Size>
+    <StorageClass>Standard</StorageClass>
+    <Owner>
+      <ID>cname_user</ID>
+      <DisplayName>cname_user</DisplayName>
+    </Owner>
+  </Contents>
+  <KeyCount>1</KeyCount>
+</ListBucketResult>
+BBBB;
+
+    public function testParseValidXml1()
+    {
+        $response = new ResponseCore(array(), $this->validXml1, 200);
+        $result = new ListObjectsV2Result($response);
+        $this->assertTrue($result->isOK());
+        $this->assertNotNull($result->getData());
+        $this->assertNotNull($result->getRawResponse());
+        $objectListInfo = $result->getData();
+        $this->assertEquals(2, count($objectListInfo->getPrefixList()));
+        $this->assertEquals(0, count($objectListInfo->getObjectList()));
+        $this->assertEquals('testbucket-hf', $objectListInfo->getBucketName());
+        $this->assertEquals('', $objectListInfo->getPrefix());
+        $this->assertEquals('', $objectListInfo->getStartAfter());
+        $this->assertEquals(1000, $objectListInfo->getMaxKeys());
+        $this->assertEquals('/', $objectListInfo->getDelimiter());
+        $this->assertEquals('false', $objectListInfo->getIsTruncated());
+        $this->assertEquals(0, $objectListInfo->getKeyCount());
+        $prefixes = $objectListInfo->getPrefixList();
+        $this->assertEquals('oss-php-sdk-test/', $prefixes[0]->getPrefix());
+        $this->assertEquals('test/', $prefixes[1]->getPrefix());
+    }
+
+    public function testParseValidXml2()
+    {
+        $response = new ResponseCore(array(), $this->validXml2, 200);
+        $result = new ListObjectsV2Result($response);
+        $this->assertTrue($result->isOK());
+        $this->assertNotNull($result->getData());
+        $this->assertNotNull($result->getRawResponse());
+        $objectListInfo = $result->getData();
+        $this->assertEquals(0, count($objectListInfo->getPrefixList()));
+        $this->assertEquals(1, count($objectListInfo->getObjectList()));
+        $this->assertEquals('testbucket-hf', $objectListInfo->getBucketName());
+        $this->assertEquals('oss-php-sdk-test/', $objectListInfo->getPrefix());
+        $this->assertEquals('xx', $objectListInfo->getStartAfter());
+        $this->assertEquals(1000, $objectListInfo->getMaxKeys());
+        $this->assertEquals('/', $objectListInfo->getDelimiter());
+        $this->assertEquals('false', $objectListInfo->getIsTruncated());
+        $this->assertEquals(1, $objectListInfo->getKeyCount());
+        $objects = $objectListInfo->getObjectList();
+        $this->assertEquals('oss-php-sdk-test/upload-test-object-name.txt', $objects[0]->getKey());
+        $this->assertEquals('2015-11-18T03:36:00.000Z', $objects[0]->getLastModified());
+        $this->assertEquals('"89B9E567E7EB8815F2F7D41851F9A2CD"', $objects[0]->getETag());
+        $this->assertEquals('Normal', $objects[0]->getType());
+        $this->assertEquals(13115, $objects[0]->getSize());
+        $this->assertEquals('Standard', $objects[0]->getStorageClass());
+    }
+
+    public function testParseValidXmlWithEncodedKey()
+    {
+        $response = new ResponseCore(array(), $this->validXmlWithEncodedKey, 200);
+        $result = new ListObjectsV2Result($response);
+        $this->assertTrue($result->isOK());
+        $this->assertNotNull($result->getData());
+        $this->assertNotNull($result->getRawResponse());
+        $objectListInfo = $result->getData();
+        $this->assertEquals(0, count($objectListInfo->getPrefixList()));
+        $this->assertEquals(1, count($objectListInfo->getObjectList()));
+        $this->assertEquals('testbucket-hf', $objectListInfo->getBucketName());
+        $this->assertEquals('php/prefix', $objectListInfo->getPrefix());
+        $this->assertEquals('php/marker', $objectListInfo->getStartAfter());
+        $this->assertEquals('CgJiYw--', $objectListInfo->getNextContinuationToken());
+        $this->assertEquals('1gJiYw--', $objectListInfo->getContinuationToken());
+        $this->assertEquals(1000, $objectListInfo->getMaxKeys());
+        $this->assertEquals('/', $objectListInfo->getDelimiter());
+        $this->assertEquals('true', $objectListInfo->getIsTruncated());
+        $this->assertEquals(1, $objectListInfo->getKeyCount());
+        $objects = $objectListInfo->getObjectList();
+        $this->assertEquals('php/a+b', $objects[0]->getKey());
+        $this->assertEquals('2015-11-18T03:36:00.000Z', $objects[0]->getLastModified());
+        $this->assertEquals('"89B9E567E7EB8815F2F7D41851F9A2CD"', $objects[0]->getETag());
+        $this->assertEquals('Normal', $objects[0]->getType());
+        $this->assertEquals(13115, $objects[0]->getSize());
+        $this->assertEquals('Standard', $objects[0]->getStorageClass());
+    }
+}

+ 61 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketCnameTest.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\OssClient;
+use OSS\Core\OssException;
+use OSS\Model\CnameConfig;
+use OSS\Model\CnameTokenInfo;
+
+require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
+
+
+class OssClientBucketCnameTest extends TestOssClientBase
+{
+    public function testBucketCname()
+    {
+        $bucketName = $this->bucket . '-cname';
+        $client = new OssClient(
+            getenv('OSS_ACCESS_KEY_ID'),
+            getenv('OSS_ACCESS_KEY_SECRET'),
+            "oss-ap-southeast-2.aliyuncs.com", false);
+
+        $client->createBucket($bucketName);
+
+        try {
+            $info1 = $client->createBucketCnameToken($bucketName, "www.example.com");
+            $this->assertEquals("www.example.com", $info1->getCname());
+            $this->assertEquals($bucketName, $info1->getBucket());
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+
+        try {
+            $info2 = $client->getBucketCnameToken($bucketName, "www.example.com");
+            $this->assertEquals("www.example.com", $info2->getCname());
+            $this->assertEquals($bucketName, $info2->getBucket());
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+
+        try {
+            $result = $client->addBucketCname($bucketName, "www.example.com");
+        } catch (OssException $e) {
+            $this->assertEquals('NeedVerifyDomainOwnership', $e->getErrorCode());
+        }
+
+        try {
+            $config = $client->getBucketCname($bucketName);
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+
+        try {
+            $result = $client->deleteBucketCname($bucketName, "www.example.com");
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+
+        $client->deleteBucket($bucketName);
+    }
+}

+ 40 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientBucketTransferAccelerationTest.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Core\OssException;
+
+require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
+
+
+class OssClientBucketTransferAccelerationTest extends TestOssClientBase
+{
+    public function testBucket()
+    {
+        try {
+            Common::waitMetaSync();
+            $status = $this->ossClient->getBucketTransferAcceleration($this->bucket);
+            $this->assertTrue(false);
+        } catch (OssException $e) {
+            $this->assertEquals("NoSuchTransferAccelerationConfiguration", $e->getErrorCode());
+        }
+
+        try {
+            $this->ossClient->putBucketTransferAcceleration($this->bucket, true);
+            Common::waitMetaSync();
+            $status = $this->ossClient->getBucketTransferAcceleration($this->bucket);
+            $this->assertEquals(true, $status);
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+
+        try {
+            $this->ossClient->putBucketTransferAcceleration($this->bucket, false);
+            Common::waitMetaSync();
+            $status = $this->ossClient->getBucketTransferAcceleration($this->bucket);
+            $this->assertEquals(false, $status);
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+    }
+}

+ 175 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientListObjectsV2Test.php

@@ -0,0 +1,175 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Core\OssException;
+use OSS\OssClient;
+
+require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestOssClientBase.php';
+
+
+class OssClientListObjectsV2Test extends TestOssClientBase
+{
+    protected function setUp(): void
+    {
+        parent::setUp();
+        //folder
+        for ($i = 0; $i < 12; $i++) {
+            $key = 'folder/'. sprintf("%02d",$i);
+            $this->ossClient->putObject($this->bucket, $key, "content");
+        }
+        //test
+        for ($i = 0; $i < 8; $i++) {
+            $key = 'test/'. sprintf("%02d",$i);
+            $this->ossClient->putObject($this->bucket, $key, "content");
+        }
+        //work
+        for ($i = 0; $i < 5; $i++) {
+            $key = 'work/'. sprintf("%02d",$i);
+            $this->ossClient->putObject($this->bucket, $key, "content");
+        }
+        //sub++
+        for ($i = 0; $i < 3; $i++) {
+            $key = 'sub++/'. sprintf("%02d",$i);
+            $this->ossClient->putObject($this->bucket, $key, "content");
+        }
+
+        //file++
+        for ($i = 0; $i < 2; $i++) {
+            $key = 'file++'. sprintf("%02d",$i);
+            $this->ossClient->putObject($this->bucket, $key, "content");
+        }
+
+    }
+
+    protected function tearDown(): void
+    {
+        parent::tearDown();
+    }
+    public function testListObjectsDefault()
+    {
+        try {
+            $listObjectInfo = $this->ossClient->listObjectsV2($this->bucket);
+            $objectList = $listObjectInfo->getObjectList();
+            $prefixList = $listObjectInfo->getPrefixList();
+            $this->assertNotNull($objectList);
+            $this->assertNotNull($prefixList);
+            $this->assertTrue(is_array($objectList));
+            $this->assertTrue(is_array($prefixList));
+            $this->assertEquals((2), count($objectList));
+            $this->assertEquals(4, count($prefixList));
+
+            $this->assertEquals('file++00', $objectList[0]->getKey());
+            $this->assertEquals('file++01', $objectList[1]->getKey());
+
+            $this->assertEquals('folder/', $prefixList[0]->getPrefix());
+            $this->assertEquals('sub++/', $prefixList[1]->getPrefix());
+            $this->assertEquals('test/', $prefixList[2]->getPrefix());
+            $this->assertEquals('work/', $prefixList[3]->getPrefix());
+
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+    }
+
+
+    public function testListObjectsWithPrefix()
+    {
+        /**
+         * List the files in your bucket.
+         */
+        $prefix = 'folder/';
+        $delimiter = '';
+        $maxkeys = 1000;
+        $options = array(
+            'delimiter' => $delimiter,
+            'prefix' => $prefix,
+            'max-keys' => $maxkeys,
+        );
+
+        try {
+            $listObjectInfo = $this->ossClient->listObjectsV2($this->bucket, $options);
+            $objectList = $listObjectInfo->getObjectList();
+            $prefixList = $listObjectInfo->getPrefixList();
+            $this->assertNotNull($objectList);
+            $this->assertNotNull($prefixList);
+            $this->assertTrue(is_array($objectList));
+            $this->assertTrue(is_array($prefixList));
+            $this->assertEquals(12, count($objectList));
+            $this->assertEquals(0, count($prefixList));
+
+            $this->assertEquals('folder/00', $objectList[0]->getKey());
+            $this->assertEquals('folder/01', $objectList[1]->getKey());
+            $this->assertEquals('folder/11', $objectList[11]->getKey());
+
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+    }
+
+
+    public function testListObjectsWithMaxKeysAndMarker()
+    {
+        $count = 0;
+        $options = array(
+            'delimiter' => '',
+            'max-keys' => 2,
+        );
+
+        while (true) {
+            try {
+
+                $listObjectInfo = $this->ossClient->listObjectsV2($this->bucket, $options);
+            } catch (OssException $e) {
+                $this->assertTrue(false);
+            }
+            $options[OssClient::OSS_CONTINUATION_TOKEN] = $listObjectInfo->getNextContinuationToken();
+            $listObject = $listObjectInfo->getObjectList();
+            $count += count($listObject);
+            $this->assertEquals(2, count($listObject));
+            if ($listObjectInfo->getIsTruncated() !== "true") {
+                break;
+            }
+        }
+        $this->assertEquals(12 + 8 + 5 + 3 + 2, $count);
+    }
+
+
+    public function testListObjectsWithStartAfter()
+    {
+        $count = 0;
+        $options = array(
+            'delimiter' => '',
+            'start-after' => 'folder/11',
+            'max-keys' => 1,
+        );
+        while (true) {
+            try {
+                $listObjectInfo = $this->ossClient->listObjectsV2($this->bucket, $options);
+            } catch (OssException $e) {
+                $this->assertTrue(false);
+            }
+            $options[OssClient::OSS_CONTINUATION_TOKEN] = $listObjectInfo->getNextContinuationToken();
+            $listObject = $listObjectInfo->getObjectList();
+            $count += count($listObject);
+            $this->assertEquals(1, count($listObject));
+            if ($listObjectInfo->getIsTruncated() !== "true") {
+                break;
+            }
+        }
+        $this->assertEquals(8 + 5 + 3, $count);
+        $options2 = array(
+            'delimiter' => '',
+            'start-after' => 'folder/11',
+            'max-keys' => 5,
+        );
+        try {
+            $listObjectInfo = $this->ossClient->listObjectsV2($this->bucket, $options2);
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+        $listObject = $listObjectInfo->getObjectList();
+        $this->assertEquals(5, count($listObject));
+        $this->assertEquals("true", $listObjectInfo->getIsTruncated());
+    }
+}

+ 56 - 0
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/TransferAccelerationConfigTest.php

@@ -0,0 +1,56 @@
+<?php
+
+namespace OSS\Tests;
+
+use OSS\Model\TransferAccelerationConfig;
+
+class TransferAccelerationConfigTest extends \PHPUnit\Framework\TestCase
+{
+
+    private $validXml = <<<BBBB
+<?xml version="1.0" encoding="utf-8"?>
+<TransferAccelerationConfiguration>
+<Enabled>true</Enabled>
+</TransferAccelerationConfiguration>
+BBBB;
+    private $validXml1 = <<<BBBB
+<?xml version="1.0" encoding="utf-8"?>
+<TransferAccelerationConfiguration>
+<Enabled>false</Enabled>
+</TransferAccelerationConfiguration>
+BBBB;
+
+    private $invalidXml1 = <<<BBBB
+<?xml version="1.0" encoding="utf-8"?>
+<TransferAccelerationConfiguration>
+</TransferAccelerationConfiguration>
+BBBB;
+
+    public function testParseValidXml()
+    {
+        $transferConfig = new TransferAccelerationConfig();
+        $transferConfig->parseFromXml($this->validXml);
+        $this->assertEquals($this->cleanXml($this->validXml), $this->cleanXml(strval($transferConfig)));
+        $this->assertEquals(true,$transferConfig->getEnabled());
+    }
+
+    public function testValidXml1()
+    {
+        $transferConfig = new TransferAccelerationConfig();
+        $transferConfig->parseFromXml($this->validXml1);
+        $this->assertEquals($this->cleanXml($this->validXml1), $this->cleanXml(strval($transferConfig)));
+        $this->assertEquals(false,$transferConfig->getEnabled());
+    }
+
+    public function testInvalidXml1()
+    {
+        $transferConfig = new TransferAccelerationConfig();
+        $transferConfig->parseFromXml($this->invalidXml1);
+        $this->assertEquals(false,$transferConfig->getEnabled());
+    }
+
+    private function cleanXml($xml)
+    {
+        return str_replace("\n", "", str_replace("\r", "", $xml));
+    }
+}

+ 52 - 0
vendor/guzzlehttp/psr7/src/UriComparator.php

@@ -0,0 +1,52 @@
+<?php
+
+declare(strict_types=1);
+
+namespace GuzzleHttp\Psr7;
+
+use Psr\Http\Message\UriInterface;
+
+/**
+ * Provides methods to determine if a modified URL should be considered cross-origin.
+ *
+ * @author Graham Campbell
+ */
+final class UriComparator
+{
+    /**
+     * Determines if a modified URL should be considered cross-origin with
+     * respect to an original URL.
+     */
+    public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool
+    {
+        if (\strcasecmp($original->getHost(), $modified->getHost()) !== 0) {
+            return true;
+        }
+
+        if ($original->getScheme() !== $modified->getScheme()) {
+            return true;
+        }
+
+        if (self::computePort($original) !== self::computePort($modified)) {
+            return true;
+        }
+
+        return false;
+    }
+
+    private static function computePort(UriInterface $uri): int
+    {
+        $port = $uri->getPort();
+
+        if (null !== $port) {
+            return $port;
+        }
+
+        return 'https' === $uri->getScheme() ? 443 : 80;
+    }
+
+    private function __construct()
+    {
+        // cannot be instantiated
+    }
+}

+ 39 - 0
vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php

@@ -0,0 +1,39 @@
+<?php declare(strict_types=1);
+
+/*
+ * This file is part of the Monolog package.
+ *
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Monolog\Formatter;
+
+use DateTimeInterface;
+use Monolog\LogRecord;
+
+/**
+ * Encodes message information into JSON in a format compatible with Cloud logging.
+ *
+ * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry
+ *
+ * @author Luís Cobucci <lcobucci@gmail.com>
+ */
+final class GoogleCloudLoggingFormatter extends JsonFormatter
+{
+    /** {@inheritdoc} **/
+    public function format(array $record): string
+    {
+        // Re-key level for GCP logging
+        $record['severity'] = $record['level_name'];
+        $record['timestamp'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED);
+
+        // Remove keys that are not used by GCP
+        unset($record['level'], $record['level_name'], $record['datetime']);
+
+        return parent::format($record);
+    }
+}
+

+ 11 - 0
vendor/myclabs/php-enum/SECURITY.md

@@ -0,0 +1,11 @@
+# Security Policy
+
+## Supported Versions
+
+Only the latest stable release is supported.
+
+## Reporting a Vulnerability
+
+To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security).
+
+Tidelift will coordinate the fix and disclosure.

+ 35 - 0
vendor/myclabs/php-enum/psalm.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<psalm
+    totallyTyped="true"
+    resolveFromConfigFile="true"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="https://getpsalm.org/schema/config"
+    xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
+>
+    <projectFiles>
+        <directory name="src" />
+        <directory name="static-analysis" />
+        <ignoreFiles>
+            <directory name="vendor" />
+            <directory name="src/PHPUnit" />
+        </ignoreFiles>
+    </projectFiles>
+
+    <issueHandlers>
+        <MixedAssignment errorLevel="info" />
+
+        <ImpureStaticProperty>
+            <!-- self::$... usages in Enum are used to populate an internal cache, and cause no side-effects -->
+            <errorLevel type="suppress">
+                <file name="src/Enum.php"/>
+            </errorLevel>
+        </ImpureStaticProperty>
+
+        <ImpureVariable>
+            <!-- $this usages in Enum point themselves to an immutable instance -->
+            <errorLevel type="suppress">
+                <file name="src/Enum.php"/>
+            </errorLevel>
+        </ImpureVariable>
+    </issueHandlers>
+</psalm>

+ 54 - 0
vendor/myclabs/php-enum/src/PHPUnit/Comparator.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace MyCLabs\Enum\PHPUnit;
+
+use MyCLabs\Enum\Enum;
+use SebastianBergmann\Comparator\ComparisonFailure;
+
+/**
+ * Use this Comparator to get nice output when using PHPUnit assertEquals() with Enums.
+ *
+ * Add this to your PHPUnit bootstrap PHP file:
+ *
+ * \SebastianBergmann\Comparator\Factory::getInstance()->register(new \MyCLabs\Enum\PHPUnit\Comparator());
+ */
+final class Comparator extends \SebastianBergmann\Comparator\Comparator
+{
+    public function accepts($expected, $actual)
+    {
+        return $expected instanceof Enum && (
+                $actual instanceof Enum || $actual === null
+            );
+    }
+
+    /**
+     * @param Enum $expected
+     * @param Enum|null $actual
+     *
+     * @return void
+     */
+    public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false)
+    {
+        if ($expected->equals($actual)) {
+            return;
+        }
+
+        throw new ComparisonFailure(
+            $expected,
+            $actual,
+            $this->formatEnum($expected),
+            $this->formatEnum($actual),
+            false,
+            'Failed asserting that two Enums are equal.'
+        );
+    }
+
+    private function formatEnum(Enum $enum = null)
+    {
+        if ($enum === null) {
+            return "null";
+        }
+
+        return get_class($enum)."::{$enum->getKey()}()";
+    }
+}

BIN
vendor/oygza/aliyun-php-sdk-afs/src/.DS_Store


BIN
vendor/oygza/aliyun-php-sdk-afs/src/aliyun/.DS_Store


+ 32 - 0
vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Color.php

@@ -0,0 +1,32 @@
+<?php
+
+class PHPExcel_Reader_Excel5_Color
+{
+    /**
+     * Read color
+     *
+     * @param int $color Indexed color
+     * @param array $palette Color palette
+     * @return array RGB color value, example: array('rgb' => 'FF0000')
+     */
+    public static function map($color, $palette, $version)
+    {
+        if ($color <= 0x07 || $color >= 0x40) {
+            // special built-in color
+            return PHPExcel_Reader_Excel5_Color_BuiltIn::lookup($color);
+        } elseif (isset($palette) && isset($palette[$color - 8])) {
+            // palette color, color index 0x08 maps to pallete index 0
+            return $palette[$color - 8];
+        } else {
+            // default color table
+            if ($version == PHPExcel_Reader_Excel5::XLS_BIFF8) {
+                return PHPExcel_Reader_Excel5_Color_BIFF8::lookup($color);
+            } else {
+                // BIFF5
+                return PHPExcel_Reader_Excel5_Color_BIFF5::lookup($color);
+            }
+        }
+
+        return $color;
+    }
+}

+ 77 - 0
vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Color/BIFF5.php

@@ -0,0 +1,77 @@
+<?php
+
+class PHPExcel_Reader_Excel5_Color_BIFF5
+{
+    protected static $map = array(
+        0x08 => '000000',
+        0x09 => 'FFFFFF',
+        0x0A => 'FF0000',
+        0x0B => '00FF00',
+        0x0C => '0000FF',
+        0x0D => 'FFFF00',
+        0x0E => 'FF00FF',
+        0x0F => '00FFFF',
+        0x10 => '800000',
+        0x11 => '008000',
+        0x12 => '000080',
+        0x13 => '808000',
+        0x14 => '800080',
+        0x15 => '008080',
+        0x16 => 'C0C0C0',
+        0x17 => '808080',
+        0x18 => '8080FF',
+        0x19 => '802060',
+        0x1A => 'FFFFC0',
+        0x1B => 'A0E0F0',
+        0x1C => '600080',
+        0x1D => 'FF8080',
+        0x1E => '0080C0',
+        0x1F => 'C0C0FF',
+        0x20 => '000080',
+        0x21 => 'FF00FF',
+        0x22 => 'FFFF00',
+        0x23 => '00FFFF',
+        0x24 => '800080',
+        0x25 => '800000',
+        0x26 => '008080',
+        0x27 => '0000FF',
+        0x28 => '00CFFF',
+        0x29 => '69FFFF',
+        0x2A => 'E0FFE0',
+        0x2B => 'FFFF80',
+        0x2C => 'A6CAF0',
+        0x2D => 'DD9CB3',
+        0x2E => 'B38FEE',
+        0x2F => 'E3E3E3',
+        0x30 => '2A6FF9',
+        0x31 => '3FB8CD',
+        0x32 => '488436',
+        0x33 => '958C41',
+        0x34 => '8E5E42',
+        0x35 => 'A0627A',
+        0x36 => '624FAC',
+        0x37 => '969696',
+        0x38 => '1D2FBE',
+        0x39 => '286676',
+        0x3A => '004500',
+        0x3B => '453E01',
+        0x3C => '6A2813',
+        0x3D => '85396A',
+        0x3E => '4A3285',
+        0x3F => '424242',
+    );
+
+    /**
+     * Map color array from BIFF5 built-in color index
+     *
+     * @param int $color
+     * @return array
+     */
+    public static function lookup($color)
+    {
+        if (isset(self::$map[$color])) {
+            return array('rgb' => self::$map[$color]);
+        }
+        return array('rgb' => '000000');
+    }
+}

+ 77 - 0
vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Color/BIFF8.php

@@ -0,0 +1,77 @@
+<?php
+
+class PHPExcel_Reader_Excel5_Color_BIFF8
+{
+    protected static $map = array(
+        0x08 => '000000',
+        0x09 => 'FFFFFF',
+        0x0A => 'FF0000',
+        0x0B => '00FF00',
+        0x0C => '0000FF',
+        0x0D => 'FFFF00',
+        0x0E => 'FF00FF',
+        0x0F => '00FFFF',
+        0x10 => '800000',
+        0x11 => '008000',
+        0x12 => '000080',
+        0x13 => '808000',
+        0x14 => '800080',
+        0x15 => '008080',
+        0x16 => 'C0C0C0',
+        0x17 => '808080',
+        0x18 => '9999FF',
+        0x19 => '993366',
+        0x1A => 'FFFFCC',
+        0x1B => 'CCFFFF',
+        0x1C => '660066',
+        0x1D => 'FF8080',
+        0x1E => '0066CC',
+        0x1F => 'CCCCFF',
+        0x20 => '000080',
+        0x21 => 'FF00FF',
+        0x22 => 'FFFF00',
+        0x23 => '00FFFF',
+        0x24 => '800080',
+        0x25 => '800000',
+        0x26 => '008080',
+        0x27 => '0000FF',
+        0x28 => '00CCFF',
+        0x29 => 'CCFFFF',
+        0x2A => 'CCFFCC',
+        0x2B => 'FFFF99',
+        0x2C => '99CCFF',
+        0x2D => 'FF99CC',
+        0x2E => 'CC99FF',
+        0x2F => 'FFCC99',
+        0x30 => '3366FF',
+        0x31 => '33CCCC',
+        0x32 => '99CC00',
+        0x33 => 'FFCC00',
+        0x34 => 'FF9900',
+        0x35 => 'FF6600',
+        0x36 => '666699',
+        0x37 => '969696',
+        0x38 => '003366',
+        0x39 => '339966',
+        0x3A => '003300',
+        0x3B => '333300',
+        0x3C => '993300',
+        0x3D => '993366',
+        0x3E => '333399',
+        0x3F => '333333',
+    );
+
+   /**
+     * Map color array from BIFF8 built-in color index
+     *
+     * @param int $color
+     * @return array
+     */
+    public static function lookup($color)
+    {
+        if (isset(self::$map[$color])) {
+            return array('rgb' => self::$map[$color]);
+        }
+        return array('rgb' => '000000');
+    }
+}

+ 31 - 0
vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Color/BuiltIn.php

@@ -0,0 +1,31 @@
+<?php
+
+class PHPExcel_Reader_Excel5_Color_BuiltIn
+{
+    protected static $map = array(
+        0x00 => '000000',
+        0x01 => 'FFFFFF',
+        0x02 => 'FF0000',
+        0x03 => '00FF00',
+        0x04 => '0000FF',
+        0x05 => 'FFFF00',
+        0x06 => 'FF00FF',
+        0x07 => '00FFFF',
+        0x40 => '000000', // system window text color
+        0x41 => 'FFFFFF', // system window background color
+    );
+
+    /**
+     * Map built-in color to RGB value
+     *
+     * @param int $color Indexed color
+     * @return array
+     */
+    public static function lookup($color)
+    {
+        if (isset(self::$map[$color])) {
+            return array('rgb' => self::$map[$color]);
+        }
+        return array('rgb' => '000000');
+    }
+}

+ 28 - 0
vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/ErrorCode.php

@@ -0,0 +1,28 @@
+<?php
+
+class PHPExcel_Reader_Excel5_ErrorCode
+{
+    protected static $map = array(
+        0x00 => '#NULL!',
+        0x07 => '#DIV/0!',
+        0x0F => '#VALUE!',
+        0x17 => '#REF!',
+        0x1D => '#NAME?',
+        0x24 => '#NUM!',
+        0x2A => '#N/A',
+    );
+
+    /**
+     * Map error code, e.g. '#N/A'
+     *
+     * @param int $code
+     * @return string
+     */
+    public static function lookup($code)
+    {
+        if (isset(self::$map[$code])) {
+            return self::$map[$code];
+        }
+        return false;
+    }
+}

+ 36 - 0
vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Style/Border.php

@@ -0,0 +1,36 @@
+<?php
+
+class PHPExcel_Reader_Excel5_Style_Border
+{
+    protected static $map = array(
+        0x00 => PHPExcel_Style_Border::BORDER_NONE,
+        0x01 => PHPExcel_Style_Border::BORDER_THIN,
+        0x02 => PHPExcel_Style_Border::BORDER_MEDIUM,
+        0x03 => PHPExcel_Style_Border::BORDER_DASHED,
+        0x04 => PHPExcel_Style_Border::BORDER_DOTTED,
+        0x05 => PHPExcel_Style_Border::BORDER_THICK,
+        0x06 => PHPExcel_Style_Border::BORDER_DOUBLE,
+        0x07 => PHPExcel_Style_Border::BORDER_HAIR,
+        0x08 => PHPExcel_Style_Border::BORDER_MEDIUMDASHED,
+        0x09 => PHPExcel_Style_Border::BORDER_DASHDOT,
+        0x0A => PHPExcel_Style_Border::BORDER_MEDIUMDASHDOT,
+        0x0B => PHPExcel_Style_Border::BORDER_DASHDOTDOT,
+        0x0C => PHPExcel_Style_Border::BORDER_MEDIUMDASHDOTDOT,
+        0x0D => PHPExcel_Style_Border::BORDER_SLANTDASHDOT,
+    );
+
+    /**
+     * Map border style
+     * OpenOffice documentation: 2.5.11
+     *
+     * @param int $index
+     * @return string
+     */
+    public static function lookup($index)
+    {
+        if (isset(self::$map[$index])) {
+            return self::$map[$index];
+        }
+        return PHPExcel_Style_Border::BORDER_NONE;
+    }
+}

+ 41 - 0
vendor/phpoffice/phpexcel/Classes/PHPExcel/Reader/Excel5/Style/FillPattern.php

@@ -0,0 +1,41 @@
+<?php
+
+class PHPExcel_Reader_Excel5_Style_FillPattern
+{
+    protected static $map = array(
+        0x00 => PHPExcel_Style_Fill::FILL_NONE,
+        0x01 => PHPExcel_Style_Fill::FILL_SOLID,
+        0x02 => PHPExcel_Style_Fill::FILL_PATTERN_MEDIUMGRAY,
+        0x03 => PHPExcel_Style_Fill::FILL_PATTERN_DARKGRAY,
+        0x04 => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRAY,
+        0x05 => PHPExcel_Style_Fill::FILL_PATTERN_DARKHORIZONTAL,
+        0x06 => PHPExcel_Style_Fill::FILL_PATTERN_DARKVERTICAL,
+        0x07 => PHPExcel_Style_Fill::FILL_PATTERN_DARKDOWN,
+        0x08 => PHPExcel_Style_Fill::FILL_PATTERN_DARKUP,
+        0x09 => PHPExcel_Style_Fill::FILL_PATTERN_DARKGRID,
+        0x0A => PHPExcel_Style_Fill::FILL_PATTERN_DARKTRELLIS,
+        0x0B => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTHORIZONTAL,
+        0x0C => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTVERTICAL,
+        0x0D => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTDOWN,
+        0x0E => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTUP,
+        0x0F => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTGRID,
+        0x10 => PHPExcel_Style_Fill::FILL_PATTERN_LIGHTTRELLIS,
+        0x11 => PHPExcel_Style_Fill::FILL_PATTERN_GRAY125,
+        0x12 => PHPExcel_Style_Fill::FILL_PATTERN_GRAY0625,
+    );
+
+    /**
+     * Get fill pattern from index
+     * OpenOffice documentation: 2.5.12
+     *
+     * @param int $index
+     * @return string
+     */
+    public static function lookup($index)
+    {
+        if (isset(self::$map[$index])) {
+            return self::$map[$index];
+        }
+        return PHPExcel_Style_Fill::FILL_NONE;
+    }
+}

+ 178 - 0
vendor/phpoffice/phpexcel/Classes/PHPExcel/Worksheet/Dimension.php

@@ -0,0 +1,178 @@
+<?php
+
+/**
+ * PHPExcel_Worksheet_Dimension
+ *
+ * Copyright (c) 2006 - 2015 PHPExcel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * @category   PHPExcel
+ * @package    PHPExcel_Worksheet
+ * @copyright  Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
+ * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
+ * @version    ##VERSION##, ##DATE##
+ */
+abstract class PHPExcel_Worksheet_Dimension
+{
+    /**
+     * Visible?
+     *
+     * @var bool
+     */
+    private $visible = true;
+
+    /**
+     * Outline level
+     *
+     * @var int
+     */
+    private $outlineLevel = 0;
+
+    /**
+     * Collapsed
+     *
+     * @var bool
+     */
+    private $collapsed = false;
+
+    /**
+     * Index to cellXf. Null value means row has no explicit cellXf format.
+     *
+     * @var int|null
+     */
+    private $xfIndex;
+
+    /**
+     * Create a new PHPExcel_Worksheet_Dimension
+     *
+     * @param int $pIndex Numeric row index
+     */
+    public function __construct($initialValue = null)
+    {
+        // set dimension as unformatted by default
+        $this->xfIndex = $initialValue;
+    }
+
+    /**
+     * Get Visible
+     *
+     * @return bool
+     */
+    public function getVisible()
+    {
+        return $this->visible;
+    }
+
+    /**
+     * Set Visible
+     *
+     * @param bool $pValue
+     * @return PHPExcel_Worksheet_Dimension
+     */
+    public function setVisible($pValue = true)
+    {
+        $this->visible = $pValue;
+        return $this;
+    }
+
+    /**
+     * Get Outline Level
+     *
+     * @return int
+     */
+    public function getOutlineLevel()
+    {
+        return $this->outlineLevel;
+    }
+
+    /**
+     * Set Outline Level
+     *
+     * Value must be between 0 and 7
+     *
+     * @param int $pValue
+     * @throws PHPExcel_Exception
+     * @return PHPExcel_Worksheet_Dimension
+     */
+    public function setOutlineLevel($pValue)
+    {
+        if ($pValue < 0 || $pValue > 7) {
+            throw new PHPExcel_Exception("Outline level must range between 0 and 7.");
+        }
+
+        $this->outlineLevel = $pValue;
+        return $this;
+    }
+
+    /**
+     * Get Collapsed
+     *
+     * @return bool
+     */
+    public function getCollapsed()
+    {
+        return $this->collapsed;
+    }
+
+    /**
+     * Set Collapsed
+     *
+     * @param bool $pValue
+     * @return PHPExcel_Worksheet_Dimension
+     */
+    public function setCollapsed($pValue = true)
+    {
+        $this->collapsed = $pValue;
+        return $this;
+    }
+
+    /**
+     * Get index to cellXf
+     *
+     * @return int
+     */
+    public function getXfIndex()
+    {
+        return $this->xfIndex;
+    }
+
+    /**
+     * Set index to cellXf
+     *
+     * @param int $pValue
+     * @return PHPExcel_Worksheet_Dimension
+     */
+    public function setXfIndex($pValue = 0)
+    {
+        $this->xfIndex = $pValue;
+        return $this;
+    }
+
+    /**
+     * Implement PHP __clone to create a deep clone, not just a shallow copy.
+     */
+    public function __clone()
+    {
+        $vars = get_object_vars($this);
+        foreach ($vars as $key => $value) {
+            if (is_object($value)) {
+                $this->$key = clone $value;
+            } else {
+                $this->$key = $value;
+            }
+        }
+    }
+}

+ 90 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DAVERAGE.php

@@ -0,0 +1,90 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DAVERAGE</h1>
+<h2>Returns the average of selected database entries.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The Average yield of Apple trees over 10\' in height');
+$worksheet->setCellValue('B12', '=DAVERAGE(A4:E10,"Yield",A1:B2)');
+
+$worksheet->setCellValue('A13', 'The Average age of all Apple and Pear trees in the orchard');
+$worksheet->setCellValue('B13', '=DAVERAGE(A4:E10,3,A1:A3)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:B2',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DAVERAGE() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DAVERAGE() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 90 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DCOUNT.php

@@ -0,0 +1,90 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DCOUNT</h1>
+<h2>Counts the cells that contain numbers in a database.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The Number of Apple trees over 10\' in height');
+$worksheet->setCellValue('B12', '=DCOUNT(A4:E10,"Yield",A1:B2)');
+
+$worksheet->setCellValue('A13', 'The Number of Apple and Pear trees in the orchard');
+$worksheet->setCellValue('B13', '=DCOUNT(A4:E10,3,A1:A3)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:B2',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DCOUNT() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DCOUNT() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 86 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DGET.php

@@ -0,0 +1,86 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DGET</h1>
+<h2>Extracts a single value from a column of a list or database that matches conditions that you specify.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The height of the Apple tree between 10\' and 16\' tall');
+$worksheet->setCellValue('B12', '=DGET(A4:E10,"Height",A1:F2)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+echo 'ALL' . '<br /><br />';
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DMAX() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A2',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DMAX() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 89 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DMAX.php

@@ -0,0 +1,89 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DMAX</h1>
+<h2>Returns the maximum value from selected database entries.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The tallest tree in the orchard');
+$worksheet->setCellValue('B12', '=DMAX(A4:E10,"Height",A4:E10)');
+
+$worksheet->setCellValue('A13', 'The Oldest apple tree in the orchard');
+$worksheet->setCellValue('B13', '=DMAX(A4:E10,3,A1:A2)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+echo 'ALL' . '<br /><br />';
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DMAX() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A2',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DMAX() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 89 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DMIN.php

@@ -0,0 +1,89 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DMIN</h1>
+<h2>Returns the minimum value from selected database entries.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The shortest tree in the orchard');
+$worksheet->setCellValue('B12', '=DMIN(A4:E10,"Height",A4:E10)');
+
+$worksheet->setCellValue('A13', 'The Youngest apple tree in the orchard');
+$worksheet->setCellValue('B13', '=DMIN(A4:E10,3,A1:A2)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+echo 'ALL' . '<br /><br />';
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DMIN() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A2',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DMIN() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 87 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DPRODUCT.php

@@ -0,0 +1,87 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DPRODUCT</h1>
+<h2>Multiplies the values in a column of a list or database that match conditions that you specify.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The product of the yields of all Apple trees over 10\' in the orchard');
+$worksheet->setCellValue('B12', '=DPRODUCT(A4:E10,"Yield",A1:B2)');
+
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+echo 'ALL' . '<br /><br />';
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DMAX() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A2',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DMAX() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 90 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DSTDEV.php

@@ -0,0 +1,90 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DSTDEV</h1>
+<h2>Estimates the standard deviation based on a sample of selected database entries.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The estimated standard deviation in the yield of Apple and Pear trees');
+$worksheet->setCellValue('B12', '=DSTDEV(A4:E10,"Yield",A1:A3)');
+
+$worksheet->setCellValue('A13', 'The estimated standard deviation in height of Apple and Pear trees');
+$worksheet->setCellValue('B13', '=DSTDEV(A4:E10,2,A1:A3)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DSTDEV() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DSTDEV() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 90 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DSTDEVP.php

@@ -0,0 +1,90 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DSTDEVP</h1>
+<h2>Calculates the standard deviation based on the entire population of selected database entries.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The standard deviation in the yield of Apple and Pear trees');
+$worksheet->setCellValue('B12', '=DSTDEVP(A4:E10,"Yield",A1:A3)');
+
+$worksheet->setCellValue('A13', 'The standard deviation in height of Apple and Pear trees');
+$worksheet->setCellValue('B13', '=DSTDEVP(A4:E10,2,A1:A3)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DSTDEVP() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DSTDEVP() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 90 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DVAR.php

@@ -0,0 +1,90 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DVAR</h1>
+<h2>Estimates variance based on a sample from selected database entries.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The estimated variance in the yield of Apple and Pear trees');
+$worksheet->setCellValue('B12', '=DVAR(A4:E10,"Yield",A1:A3)');
+
+$worksheet->setCellValue('A13', 'The estimated variance in height of Apple and Pear trees');
+$worksheet->setCellValue('B13', '=DVAR(A4:E10,2,A1:A3)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DVAR() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DVAR() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 90 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/Database/DVARP.php

@@ -0,0 +1,90 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DVARP</h1>
+<h2>Calculates variance based on the entire population of selected database entries,</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$database = array( array( 'Tree',  'Height', 'Age', 'Yield', 'Profit' ),
+                   array( 'Apple',  18,       20,    14,      105.00  ),
+                   array( 'Pear',   12,       12,    10,       96.00  ),
+                   array( 'Cherry', 13,       14,     9,      105.00  ),
+                   array( 'Apple',  14,       15,    10,       75.00  ),
+                   array( 'Pear',    9,        8,     8,       76.80  ),
+                   array( 'Apple',   8,        9,     6,       45.00  ),
+                 );
+$criteria = array( array( 'Tree',      'Height', 'Age', 'Yield', 'Profit', 'Height' ),
+                   array( '="=Apple"', '>10',    NULL,  NULL,    NULL,     '<16'    ),
+                   array( '="=Pear"',  NULL,     NULL,  NULL,    NULL,     NULL     )
+                 );
+
+$worksheet->fromArray( $criteria, NULL, 'A1' );
+$worksheet->fromArray( $database, NULL, 'A4' );
+
+$worksheet->setCellValue('A12', 'The variance in the yield of Apple and Pear trees');
+$worksheet->setCellValue('B12', '=DVARP(A4:E10,"Yield",A1:A3)');
+
+$worksheet->setCellValue('A13', 'The variance in height of Apple and Pear trees');
+$worksheet->setCellValue('B13', '=DVARP(A4:E10,2,A1:A3)');
+
+
+echo '<hr />';
+
+
+echo '<h4>Database</h4>';
+
+$databaseData = $worksheet->rangeToArray('A4:E10',null,true,true,true);
+var_dump($databaseData);
+
+
+echo '<hr />';
+
+
+// Test the formulae
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A12")->getValue() .'<br />';
+echo 'DVARP() Result is ' . $worksheet->getCell("B12")->getCalculatedValue() .'<br /><br />';
+
+echo '<h4>Criteria</h4>';
+
+$criteriaData = $worksheet->rangeToArray('A1:A3',null,true,true,true);
+var_dump($criteriaData);
+
+echo $worksheet->getCell("A13")->getValue() .'<br />';
+echo 'DVARP() Result is ' . $worksheet->getCell("B13")->getCalculatedValue();
+
+
+?>
+<body>
+</html>

+ 83 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/DateTime/DATE.php

@@ -0,0 +1,83 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DATE</h1>
+<h2>Returns the serial number of a particular date.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$testDates = array(	array(2012,3,26),	array(2012,2,29),	array(2012,4,1),	array(2012,12,25),
+					array(2012,10,31),	array(2012,11,5),	array(2012,1,1),	array(2012,3,17),
+					array(2011,2,29),	array(7,5,3),		array(2012,13,1),	array(2012,11,45),
+					array(2012,0,0),	array(2012,1,0),	array(2012,0,1),
+					array(2012,-2,2),	array(2012,2,-2),	array(2012,-2,-2),
+				  );
+$testDateCount = count($testDates);
+
+$worksheet->fromArray($testDates,NULL,'A1',true);
+
+for ($row = 1; $row <= $testDateCount; ++$row) {
+	$worksheet->setCellValue('D'.$row, '=DATE(A'.$row.',B'.$row.',C'.$row.')');
+	$worksheet->setCellValue('E'.$row, '=D'.$row);
+}
+$worksheet->getStyle('E1:E'.$testDateCount)
+          ->getNumberFormat()
+          ->setFormatCode('yyyy-mmm-dd');
+
+
+echo '<hr />';
+
+
+// Test the formulae
+?>
+<table border="1" cellspacing="0">
+	<tr>
+		<th colspan="3">Date Value</th>
+		<th rowspan="2" valign="bottom">Formula</th>
+		<th rowspan="2" valign="bottom">Excel DateStamp</th>
+		<th rowspan="2" valign="bottom">Formatted DateStamp</th>
+	</tr>
+	<tr>
+		<th>Year</th>
+		<th>Month</th>
+		<th>Day</th>
+	<tr>
+	<?php
+	for ($row = 1; $row <= $testDateCount; ++$row) {
+		echo '<tr>';
+		    echo '<td>' , $worksheet->getCell('A'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('B'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('C'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('D'.$row)->getValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('D'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('E'.$row)->getFormattedValue() , '</td>';
+		echo '</tr>';
+	}
+	?>
+</table>

+ 76 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/DateTime/DATEVALUE.php

@@ -0,0 +1,76 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>DATEVALUE</h1>
+<h2>Converts a date in the form of text to a serial number.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$testDates = array(	'26 March 2012',	'29 Feb 2012',	'April 1, 2012',	'25/12/2012',
+					'2012-Oct-31',		'5th November',	'January 1st',		'April 2012',
+					'17-03',			'03-2012',		'29 Feb 2011',		'03-05-07',
+					'03-MAY-07',		'03-13-07',
+				  );
+$testDateCount = count($testDates);
+
+for($row = 1; $row <= $testDateCount; ++$row) {
+	$worksheet->setCellValue('A'.$row, $testDates[$row-1]);
+	$worksheet->setCellValue('B'.$row, '=DATEVALUE(A'.$row.')');
+	$worksheet->setCellValue('C'.$row, '=B'.$row);
+}
+
+$worksheet->getStyle('C1:C'.$testDateCount)
+          ->getNumberFormat()
+          ->setFormatCode('yyyy-mmm-dd');
+
+
+echo '<hr />';
+
+
+// Test the formulae
+?>
+<p><strong>Warning: </strong>The PHPExcel DATEVALUE() function accepts a wider range of date formats than MS Excel's DATEFORMAT() function.</p>
+<table border="1" cellspacing="0">
+	<tr>
+		<th>Date String</th>
+		<th>Formula</th>
+		<th>Excel DateStamp</th>
+		<th>Formatted DateStamp</th>
+	</tr>
+	<?php
+	for ($row = 1; $row <= $testDateCount; ++$row) {
+		echo '<tr>';
+		    echo '<td>' , $worksheet->getCell('A'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('B'.$row)->getValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('B'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('C'.$row)->getFormattedValue() , '</td>';
+		echo '</tr>';
+	}
+	?>
+</table>

+ 81 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/DateTime/TIME.php

@@ -0,0 +1,81 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>TIME</h1>
+<h2>Returns the serial number of a particular time.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$testDates = array(	array(3,15),		array(13,15),	array(15,15,15),	array(3,15,30),
+					array(15,15,15),	array(5),		array(9,15,0),		array(9,15,-1),
+					array(13,-14,-15),	array(0,0,-1)
+				  );
+$testDateCount = count($testDates);
+
+$worksheet->fromArray($testDates,NULL,'A1',true);
+
+for ($row = 1; $row <= $testDateCount; ++$row) {
+	$worksheet->setCellValue('D'.$row, '=TIME(A'.$row.',B'.$row.',C'.$row.')');
+	$worksheet->setCellValue('E'.$row, '=D'.$row);
+}
+$worksheet->getStyle('E1:E'.$testDateCount)
+          ->getNumberFormat()
+          ->setFormatCode('hh:mm:ss');
+
+
+echo '<hr />';
+
+
+// Test the formulae
+?>
+<table border="1" cellspacing="0">
+	<tr>
+		<th colspan="3">Date Value</th>
+		<th rowspan="2" valign="bottom">Formula</th>
+		<th rowspan="2" valign="bottom">Excel TimeStamp</th>
+		<th rowspan="2" valign="bottom">Formatted TimeStamp</th>
+	</tr>
+	<tr>
+		<th>Hour</th>
+		<th>Minute</th>
+		<th>Second</th>
+	<tr>
+	<?php
+	for ($row = 1; $row <= $testDateCount; ++$row) {
+		echo '<tr>';
+		    echo '<td>' , $worksheet->getCell('A'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('B'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('C'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('D'.$row)->getValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('D'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('E'.$row)->getFormattedValue() , '</td>';
+		echo '</tr>';
+	}
+	?>
+</table>

+ 72 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/DateTime/TIMEVALUE.php

@@ -0,0 +1,72 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Examples</title>
+
+</head>
+<body>
+
+<h1>TIMEVALUE</h1>
+<h2>Converts a time in the form of text to a serial number.</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../../Classes/');
+
+/** Include PHPExcel */
+include 'PHPExcel.php';
+
+
+// Create new PHPExcel object
+$objPHPExcel = new PHPExcel();
+$worksheet = $objPHPExcel->getActiveSheet();
+
+// Add some data
+$testDates = array(	'3:15',	'13:15',	'15:15:15',	'3:15 AM',	'3:15 PM',	'5PM',	'9:15AM',	'13:15AM'
+				  );
+$testDateCount = count($testDates);
+
+for($row = 1; $row <= $testDateCount; ++$row) {
+	$worksheet->setCellValue('A'.$row, $testDates[$row-1]);
+	$worksheet->setCellValue('B'.$row, '=TIMEVALUE(A'.$row.')');
+	$worksheet->setCellValue('C'.$row, '=B'.$row);
+}
+
+$worksheet->getStyle('C1:C'.$testDateCount)
+          ->getNumberFormat()
+          ->setFormatCode('hh:mm:ss');
+
+
+echo '<hr />';
+
+
+// Test the formulae
+?>
+<table border="1" cellspacing="0">
+	<tr>
+		<th>Time String</th>
+		<th>Formula</th>
+		<th>Excel TimeStamp</th>
+		<th>Formatted TimeStamp</th>
+	</tr>
+	<?php
+	for ($row = 1; $row <= $testDateCount; ++$row) {
+		echo '<tr>';
+		    echo '<td>' , $worksheet->getCell('A'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('B'.$row)->getValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('B'.$row)->getFormattedValue() , '</td>';
+			echo '<td>' , $worksheet->getCell('C'.$row)->getFormattedValue() , '</td>';
+		echo '</tr>';
+	}
+	?>
+</table>

+ 51 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Calculations/index.php

@@ -0,0 +1,51 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Calculation Function Examples</title>
+
+</head>
+<body>
+
+<?php
+
+echo '<h1>PHPExcel Calculation Function Examples</h1>';
+
+$exampleTypeList = glob('./*',GLOB_ONLYDIR);
+
+foreach($exampleTypeList as $exampleType) {
+
+	echo '<h2>' . pathinfo($exampleType,PATHINFO_BASENAME) . ' Function Examples</h2>';
+
+	$exampleList = glob('./'.$exampleType.'/*.php');
+
+	foreach($exampleList as $exampleFile) {
+		$fileData = file_get_contents($exampleFile);
+
+		$h1Pattern = '#<h1>(.*?)</h1>#';
+		$h2Pattern = '#<h2>(.*?)</h2>#';
+
+		if (preg_match($h1Pattern, $fileData, $out)) {
+			$h1Text = $out[1];
+			$h2Text = (preg_match($h2Pattern, $fileData, $out)) ? $out[1] : '';
+
+			echo '<a href="',$exampleFile,'">',$h1Text,'</a><br />';
+			if ($h2Text > '') {
+				echo $h2Text,'<br />';
+			}
+		}
+
+	}
+}
+
+?>
+<body>
+</html>

+ 42 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader01.php

@@ -0,0 +1,42 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #01</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #01</h1>
+<h2>Simple File Reader using PHPExcel_IOFactory::load()</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileName = './sampleData/example1.xls';
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory to identify the format<br />';
+$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
+
+
+echo '<hr />';
+
+$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+var_dump($sheetData);
+
+
+?>
+<body>
+</html>

+ 50 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader02.php

@@ -0,0 +1,50 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #02</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #02</h1>
+<h2>Simple File Reader using a Specified Reader</h2>
+<?php
+
+$inputFileName = './sampleData/example1.xls';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using PHPExcel_Reader_Excel5<br />';
+$objReader = new PHPExcel_Reader_Excel5();
+//	$objReader = new PHPExcel_Reader_Excel2007();
+//	$objReader = new PHPExcel_Reader_Excel2003XML();
+//	$objReader = new PHPExcel_Reader_OOCalc();
+//	$objReader = new PHPExcel_Reader_SYLK();
+//	$objReader = new PHPExcel_Reader_Gnumeric();
+//	$objReader = new PHPExcel_Reader_CSV();
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+var_dump($sheetData);
+
+
+?>
+<body>
+</html>

+ 51 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader03.php

@@ -0,0 +1,51 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #03</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #03</h1>
+<h2>Simple File Reader using the PHPExcel_IOFactory to Return a Reader</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'SYLK';
+//	$inputFileType = 'Gnumeric';
+//	$inputFileType = 'CSV';
+$inputFileName = './sampleData/example1.xls';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+var_dump($sheetData);
+
+
+?>
+<body>
+</html>

+ 47 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader04.php

@@ -0,0 +1,47 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #04</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #04</h1>
+<h2>Simple File Reader using the PHPExcel_IOFactory to Identify a Reader to Use</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileName = './sampleData/example1.xls';
+
+$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
+echo 'File ',pathinfo($inputFileName,PATHINFO_BASENAME),' has been identified as an ',$inputFileType,' file<br />';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with the identified reader type<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+var_dump($sheetData);
+
+
+?>
+<body>
+</html>

+ 51 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader05.php

@@ -0,0 +1,51 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #05</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #05</h1>
+<h2>Simple File Reader using the "Read Data Only" Option</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+echo 'Turning Formatting off for Load<br />';
+$objReader->setReadDataOnly(true);
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+var_dump($sheetData);
+
+
+?>
+<body>
+</html>

+ 54 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader06.php

@@ -0,0 +1,54 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #06</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #06</h1>
+<h2>Simple File Reader Loading All WorkSheets</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+echo 'Loading all WorkSheets<br />';
+$objReader->setLoadAllSheets();
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
+$loadedSheetNames = $objPHPExcel->getSheetNames();
+foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
+	echo $sheetIndex,' -> ',$loadedSheetName,'<br />';
+}
+
+
+?>
+<body>
+</html>

+ 55 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader07.php

@@ -0,0 +1,55 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #07</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #07</h1>
+<h2>Simple File Reader Loading a Single Named WorkSheet</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+$sheetname = 'Data Sheet #2';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+echo 'Loading Sheet "',$sheetname,'" only<br />';
+$objReader->setLoadSheetsOnly($sheetname);
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
+$loadedSheetNames = $objPHPExcel->getSheetNames();
+foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
+	echo $sheetIndex,' -> ',$loadedSheetName,'<br />';
+}
+
+
+?>
+<body>
+</html>

+ 55 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader08.php

@@ -0,0 +1,55 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #08</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #08</h1>
+<h2>Simple File Reader Loading Several Named WorkSheets</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+$sheetnames = array('Data Sheet #1','Data Sheet #3');
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+echo 'Loading Sheet',((count($sheetnames) == 1) ? '' : 's'),' "',implode('" and "',$sheetnames),'" only<br />';
+$objReader->setLoadSheetsOnly($sheetnames);
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
+$loadedSheetNames = $objPHPExcel->getSheetNames();
+foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
+	echo $sheetIndex,' -> ',$loadedSheetName,'<br />';
+}
+
+
+?>
+<body>
+</html>

+ 71 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader09.php

@@ -0,0 +1,71 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #09</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #09</h1>
+<h2>Simple File Reader Using a Read Filter</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+$sheetname = 'Data Sheet #3';
+
+
+class MyReadFilter implements PHPExcel_Reader_IReadFilter
+{
+	public function readCell($column, $row, $worksheetName = '') {
+		// Read rows 1 to 7 and columns A to E only
+		if ($row >= 1 && $row <= 7) {
+			if (in_array($column,range('A','E'))) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
+
+$filterSubset = new MyReadFilter();
+
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+echo 'Loading Sheet "',$sheetname,'" only<br />';
+$objReader->setLoadSheetsOnly($sheetname);
+echo 'Loading Sheet using filter<br />';
+$objReader->setReadFilter($filterSubset);
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+var_dump($sheetData);
+
+
+?>
+<body>
+</html>

+ 82 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader10.php

@@ -0,0 +1,82 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #10</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #10</h1>
+<h2>Simple File Reader Using a Configurable Read Filter</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+$sheetname = 'Data Sheet #3';
+
+
+class MyReadFilter implements PHPExcel_Reader_IReadFilter
+{
+	private $_startRow = 0;
+
+	private $_endRow = 0;
+
+	private $_columns = array();
+
+	public function __construct($startRow, $endRow, $columns) {
+		$this->_startRow	= $startRow;
+		$this->_endRow		= $endRow;
+		$this->_columns		= $columns;
+	}
+
+	public function readCell($column, $row, $worksheetName = '') {
+		if ($row >= $this->_startRow && $row <= $this->_endRow) {
+			if (in_array($column,$this->_columns)) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
+
+$filterSubset = new MyReadFilter(9,15,range('G','K'));
+
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+echo 'Loading Sheet "',$sheetname,'" only<br />';
+$objReader->setLoadSheetsOnly($sheetname);
+echo 'Loading Sheet using configurable filter<br />';
+$objReader->setReadFilter($filterSubset);
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+var_dump($sheetData);
+
+
+?>
+<body>
+</html>

+ 91 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader11.php

@@ -0,0 +1,91 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #11</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #11</h1>
+<h2>Reading a Workbook in "Chunks" Using a Configurable Read Filter (Version 1)</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example2.xls';
+
+
+/**  Define a Read Filter class implementing PHPExcel_Reader_IReadFilter  */
+class chunkReadFilter implements PHPExcel_Reader_IReadFilter
+{
+	private $_startRow = 0;
+
+	private $_endRow = 0;
+
+	/**  We expect a list of the rows that we want to read to be passed into the constructor  */
+	public function __construct($startRow, $chunkSize) {
+		$this->_startRow	= $startRow;
+		$this->_endRow		= $startRow + $chunkSize;
+	}
+
+	public function readCell($column, $row, $worksheetName = '') {
+		//  Only read the heading row, and the rows that were configured in the constructor
+		if (($row == 1) || ($row >= $this->_startRow && $row < $this->_endRow)) {
+			return true;
+		}
+		return false;
+	}
+}
+
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+/**  Create a new Reader of the type defined in $inputFileType  **/
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+
+
+echo '<hr />';
+
+
+/**  Define how many rows we want for each "chunk"  **/
+$chunkSize = 20;
+
+/**  Loop to read our worksheet in "chunk size" blocks  **/
+for ($startRow = 2; $startRow <= 240; $startRow += $chunkSize) {
+	echo 'Loading WorkSheet using configurable filter for headings row 1 and for rows ',$startRow,' to ',($startRow+$chunkSize-1),'<br />';
+	/**  Create a new Instance of our Read Filter, passing in the limits on which rows we want to read  **/
+	$chunkFilter = new chunkReadFilter($startRow,$chunkSize);
+	/**  Tell the Reader that we want to use the new Read Filter that we've just Instantiated  **/
+	$objReader->setReadFilter($chunkFilter);
+	/**  Load only the rows that match our filter from $inputFileName to a PHPExcel Object  **/
+	$objPHPExcel = $objReader->load($inputFileName);
+
+	//	Do some processing here
+
+	$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+	var_dump($sheetData);
+	echo '<br /><br />';
+}
+
+
+?>
+<body>
+</html>

+ 94 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader12.php

@@ -0,0 +1,94 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #12</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #12</h1>
+<h2>Reading a Workbook in "Chunks" Using a Configurable Read Filter (Version 2)</h2>
+<?php
+
+/**  Set Include path to point at the PHPExcel Classes folder  **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/**  Include PHPExcel_IOFactory  **/
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example2.xls';
+
+
+/**  Define a Read Filter class implementing PHPExcel_Reader_IReadFilter  */
+class chunkReadFilter implements PHPExcel_Reader_IReadFilter
+{
+	private $_startRow = 0;
+
+	private $_endRow = 0;
+
+	/**  Set the list of rows that we want to read  */
+	public function setRows($startRow, $chunkSize) {
+		$this->_startRow	= $startRow;
+		$this->_endRow		= $startRow + $chunkSize;
+	}
+
+	public function readCell($column, $row, $worksheetName = '') {
+		//  Only read the heading row, and the rows that are configured in $this->_startRow and $this->_endRow
+		if (($row == 1) || ($row >= $this->_startRow && $row < $this->_endRow)) {
+			return true;
+		}
+		return false;
+	}
+}
+
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+/**  Create a new Reader of the type defined in $inputFileType  **/
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+
+
+echo '<hr />';
+
+
+/**  Define how many rows we want to read for each "chunk"  **/
+$chunkSize = 20;
+/**  Create a new Instance of our Read Filter  **/
+$chunkFilter = new chunkReadFilter();
+
+/**  Tell the Reader that we want to use the Read Filter that we've Instantiated  **/
+$objReader->setReadFilter($chunkFilter);
+
+/**  Loop to read our worksheet in "chunk size" blocks  **/
+for ($startRow = 2; $startRow <= 240; $startRow += $chunkSize) {
+	echo 'Loading WorkSheet using configurable filter for headings row 1 and for rows ',$startRow,' to ',($startRow+$chunkSize-1),'<br />';
+	/**  Tell the Read Filter, the limits on which rows we want to read this iteration  **/
+	$chunkFilter->setRows($startRow,$chunkSize);
+	/**  Load only the rows that match our filter from $inputFileName to a PHPExcel Object  **/
+	$objPHPExcel = $objReader->load($inputFileName);
+
+	//	Do some processing here
+
+	$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+	var_dump($sheetData);
+	echo '<br /><br />';
+}
+
+
+?>
+<body>
+</html>

+ 60 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader13.php

@@ -0,0 +1,60 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #13</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #13</h1>
+<h2>Simple File Reader for Multiple CSV Files</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'CSV';
+$inputFileNames = array('./sampleData/example1.csv','./sampleData/example2.csv');
+
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+$inputFileName = array_shift($inputFileNames);
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' into WorkSheet #1 using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objPHPExcel = $objReader->load($inputFileName);
+$objPHPExcel->getActiveSheet()->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME));
+foreach($inputFileNames as $sheet => $inputFileName) {
+	echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' into WorkSheet #',($sheet+2),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+	$objReader->setSheetIndex($sheet+1);
+	$objReader->loadIntoExisting($inputFileName,$objPHPExcel);
+	$objPHPExcel->getActiveSheet()->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME));
+}
+
+
+echo '<hr />';
+
+echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
+$loadedSheetNames = $objPHPExcel->getSheetNames();
+foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
+	echo '<b>Worksheet #',$sheetIndex,' -> ',$loadedSheetName,'</b><br />';
+	$objPHPExcel->setActiveSheetIndexByName($loadedSheetName);
+	$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+	var_dump($sheetData);
+	echo '<br /><br />';
+}
+
+
+?>
+<body>
+</html>

+ 105 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader14.php

@@ -0,0 +1,105 @@
+<?php
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #15</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #14</h1>
+<h2>Reading a Large CSV file in "Chunks" to split across multiple Worksheets</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'CSV';
+$inputFileName = './sampleData/example2.csv';
+
+/**  Define a Read Filter class implementing PHPExcel_Reader_IReadFilter  */
+class chunkReadFilter implements PHPExcel_Reader_IReadFilter
+{
+	private $_startRow = 0;
+
+	private $_endRow = 0;
+
+	/**  Set the list of rows that we want to read  */
+	public function setRows($startRow, $chunkSize) {
+		$this->_startRow	= $startRow;
+		$this->_endRow		= $startRow + $chunkSize;
+	}
+
+	public function readCell($column, $row, $worksheetName = '') {
+		//  Only read the heading row, and the rows that are configured in $this->_startRow and $this->_endRow
+		if (($row == 1) || ($row >= $this->_startRow && $row < $this->_endRow)) {
+			return true;
+		}
+		return false;
+	}
+}
+
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+/**  Create a new Reader of the type defined in $inputFileType  **/
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+
+
+echo '<hr />';
+
+
+/**  Define how many rows we want to read for each "chunk"  **/
+$chunkSize = 100;
+/**  Create a new Instance of our Read Filter  **/
+$chunkFilter = new chunkReadFilter();
+
+/**  Tell the Reader that we want to use the Read Filter that we've Instantiated  **/
+/**    and that we want to store it in contiguous rows/columns  **/
+$objReader->setReadFilter($chunkFilter)
+		  ->setContiguous(true);
+
+
+/**  Instantiate a new PHPExcel object manually  **/
+$objPHPExcel = new PHPExcel();
+
+/**  Set a sheet index  **/
+$sheet = 0;
+/**  Loop to read our worksheet in "chunk size" blocks  **/
+/**  $startRow is set to 2 initially because we always read the headings in row #1  **/
+for ($startRow = 2; $startRow <= 240; $startRow += $chunkSize) {
+	echo 'Loading WorkSheet #',($sheet+1),' using configurable filter for headings row 1 and for rows ',$startRow,' to ',($startRow+$chunkSize-1),'<br />';
+	/**  Tell the Read Filter, the limits on which rows we want to read this iteration  **/
+	$chunkFilter->setRows($startRow,$chunkSize);
+
+    /**  Increment the worksheet index pointer for the Reader  **/
+    $objReader->setSheetIndex($sheet);
+	/**  Load only the rows that match our filter into a new worksheet in the PHPExcel Object  **/
+    $objReader->loadIntoExisting($inputFileName,$objPHPExcel);
+    /**  Set the worksheet title (to reference the "sheet" of data that we've loaded)  **/
+    /**    and increment the sheet index as well  **/
+    $objPHPExcel->getActiveSheet()->setTitle('Country Data #'.(++$sheet));
+}
+
+
+echo '<hr />';
+
+echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
+$loadedSheetNames = $objPHPExcel->getSheetNames();
+foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
+	echo '<b>Worksheet #',$sheetIndex,' -> ',$loadedSheetName,'</b><br />';
+	$objPHPExcel->setActiveSheetIndexByName($loadedSheetName);
+	$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,false,false,true);
+	var_dump($sheetData);
+	echo '<br />';
+}
+
+?>
+<body>
+</html>

+ 71 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader15.php

@@ -0,0 +1,71 @@
+<?php
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #15</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #15</h1>
+<h2>Simple File Reader for Tab-Separated Value File using the Advanced Value Binder</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
+
+
+$inputFileType = 'CSV';
+$inputFileName = './sampleData/example1.tsv';
+
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' into WorkSheet #1 using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader->setDelimiter("\t");
+$objPHPExcel = $objReader->load($inputFileName);
+$objPHPExcel->getActiveSheet()->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME));
+
+
+echo '<hr />';
+
+echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded<br /><br />';
+$loadedSheetNames = $objPHPExcel->getSheetNames();
+foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
+	echo '<b>Worksheet #',$sheetIndex,' -> ',$loadedSheetName,' (Formatted)</b><br />';
+	$objPHPExcel->setActiveSheetIndexByName($loadedSheetName);
+	$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+	var_dump($sheetData);
+	echo '<br />';
+}
+
+echo '<hr />';
+
+foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
+	echo '<b>Worksheet #',$sheetIndex,' -> ',$loadedSheetName,' (Unformatted)</b><br />';
+	$objPHPExcel->setActiveSheetIndexByName($loadedSheetName);
+	$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,false,true);
+	var_dump($sheetData);
+	echo '<br />';
+}
+
+echo '<hr />';
+
+foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
+	echo '<b>Worksheet #',$sheetIndex,' -> ',$loadedSheetName,' (Raw)</b><br />';
+	$objPHPExcel->setActiveSheetIndexByName($loadedSheetName);
+	$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,false,false,true);
+	var_dump($sheetData);
+	echo '<br />';
+}
+
+?>
+<body>
+</html>

+ 46 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader16.php

@@ -0,0 +1,46 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #16</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #16</h1>
+<h2>Handling Loader Exceptions using Try/Catch</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileName = './sampleData/example_1.xls';
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory to identify the format<br />';
+try {
+	$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
+} catch(PHPExcel_Reader_Exception $e) {
+	die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
+}
+
+
+echo '<hr />';
+
+$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
+var_dump($sheetData);
+
+
+?>
+<body>
+</html>

+ 52 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader17.php

@@ -0,0 +1,52 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #17</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #17</h1>
+<h2>Simple File Reader Loading Several Named WorkSheets</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+
+
+/**  Read the list of Worksheet Names from the Workbook file  **/
+echo 'Read the list of Worksheets in the WorkBook<br />';
+$worksheetNames = $objReader->listWorksheetNames($inputFileName);
+
+echo 'There are ',count($worksheetNames),' worksheet',((count($worksheetNames) == 1) ? '' : 's'),' in the workbook<br /><br />';
+foreach($worksheetNames as $worksheetName) {
+	echo $worksheetName,'<br />';
+}
+
+
+?>
+<body>
+</html>

+ 50 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader18.php

@@ -0,0 +1,50 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #18</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #18</h1>
+<h2>Reading list of WorkSheets without loading entire file</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' information using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+$worksheetNames = $objReader->listWorksheetNames($inputFileName);
+
+echo '<h3>Worksheet Names</h3>';
+echo '<ol>';
+foreach ($worksheetNames as $worksheetName) {
+	echo '<li>', $worksheetName, '</li>';
+}
+echo '</ol>';
+
+?>
+<body>
+</html>

+ 53 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/exampleReader19.php

@@ -0,0 +1,53 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reader Example #19</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reader Example #19</h1>
+<h2>Reading WorkSheet information without loading entire file</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+//	$inputFileType = 'Excel2007';
+//	$inputFileType = 'Excel2003XML';
+//	$inputFileType = 'OOCalc';
+//	$inputFileType = 'Gnumeric';
+$inputFileName = './sampleData/example1.xls';
+
+echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' information using IOFactory with a defined reader type of ',$inputFileType,'<br />';
+
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+$worksheetData = $objReader->listWorksheetInfo($inputFileName);
+
+echo '<h3>Worksheet Information</h3>';
+echo '<ol>';
+foreach ($worksheetData as $worksheet) {
+	echo '<li>', $worksheet['worksheetName'], '<br />';
+	echo 'Rows: ', $worksheet['totalRows'], ' Columns: ', $worksheet['totalColumns'], '<br />';
+	echo 'Cell Range: A1:', $worksheet['lastColumnLetter'], $worksheet['totalRows'];
+	echo '</li>';
+}
+echo '</ol>';
+
+?>
+<body>
+</html>

+ 4 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example1.csv

@@ -0,0 +1,4 @@
+First Name,Last Name,Nationality,Gender,Date of Birth,Time of Birth,Date/Time,PHP Coder,Sanity %Age
+Mark,Baker,British,M,19-Dec-1960,01:30,=E2+F2,TRUE,32%
+Toni,Baker,British,F,24-Nov-1950,20:00,=E3+F3,FALSE,95%
+Rachel,Baker,British,F,7-Dec-1982,00:15,=E4+F4,FALSE,100%

+ 4 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example1.tsv

@@ -0,0 +1,4 @@
+First Name	Last Name	Nationality	Gender	Date of Birth	Time of Birth	Date/Time	PHP Coder	Sanity %Age
+Mark	Baker	British	M	19-Dec-1960	01:30	=E2+F2	TRUE	32%
+Toni	Baker	British	F	24-Nov-1950	20:00	=E3+F3	FALSE	95%
+Rachel	Baker	British	F	7-Dec-1982	00:15	=E4+F4	FALSE	100%

BIN
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example1.xls


+ 223 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example2.csv

@@ -0,0 +1,223 @@
+"City","Country","Latitude","Longitude"
+"Kabul","Afghanistan",34.528455,69.171703
+"Tirane","Albania",41.33,19.82
+"Algiers","Algeria",36.752887,3.042048
+"Pago Pago","American Samoa",-14.27933,-170.700897
+"Andorra la Vella","Andorra",42.507531,1.521816
+"Luanda","Angola",-8.838333,13.234444
+"Buenos Aires","Argentina",-34.608417,-58.373161
+"Yerevan","Armenia",40.183333,44.516667
+"Oranjestad","Aruba",12.52458,-70.026459
+"Canberra","Australia",-35.3075,149.124417
+"Vienna","Austria",48.208333,16.373056
+"Baku","Azerbaijan",40.379571,49.891233
+"Nassau","Bahamas",25.06,-77.345
+"Manama","Bahrain",26.216667,50.583333
+"Dhaka","Bangladesh",23.709921,90.407143
+"Bridgetown","Barbados",13.096111,-59.608333
+"Minsk","Belarus",53.9,27.566667
+"Brussels","Belgium",50.846281,4.354727
+"Belmopan","Belize",17.251389,-88.766944
+"Thimphu","Bhutan",27.466667,89.641667
+"La Paz","Bolivia",-16.49901,-68.146248
+"Sarajevo","Bosnia and Herzegovina",43.8476,18.3564
+"Gaborone","Botswana",-24.65411,25.908739
+"Brasilia","Brazil",-15.780148,-47.92917
+"Road Town","British Virgin Islands",18.433333,-64.616667
+"Bandar Seri Begawan","Brunei Darussalam",4.9431,114.9425
+"Sofia","Bulgaria",42.697626,23.322284
+"Ouagadougou","Burkina Faso",12.364637,-1.533864
+"Bujumbura","Burundi",-3.361378,29.359878
+"Phnom Penh","Cambodia",11.55,104.916667
+"Yaounde","Cameroon",3.866667,11.516667
+"Ottawa","Canada",45.423494,-75.697933
+"Praia","Cape Verde",14.920833,-23.508333
+"George Town","Cayman Islands",19.286932,-81.367439
+"Bangui","Central African Republic",4.361698,18.555975
+"N'Djamena","Chad",12.104797,15.044506
+"Santiago","Chile",-33.42536,-70.566466
+"Beijing","China",39.904667,116.408198
+"Bogota","Colombia",4.647302,-74.096268
+"Moroni","Comoros",-11.717216,43.247315
+"Brazzaville","Congo",-4.266667,15.283333
+"San Jose","Costa Rica",9.933333,-84.083333
+"Yamoussoukro","Cote d'Ivoire",6.816667,-5.283333
+"Zagreb","Croatia",45.814912,15.978515
+"Havana","Cuba",23.133333,-82.366667
+"Nicosia","Cyprus",35.166667,33.366667
+"Prague","Czech Republic",50.087811,14.42046
+"Kinshasa","Congo",-4.325,15.322222
+"Copenhagen","Denmark",55.676294,12.568116
+"Djibouti","Djibouti",11.588,43.145
+"Roseau","Dominica",15.301389,-61.388333
+"Santo Domingo","Dominican Republic",18.5,-69.983333
+"Dili","East Timor",-8.566667,125.566667
+"Quito","Ecuador",-0.229498,-78.524277
+"Cairo","Egypt",30.064742,31.249509
+"San Salvador","El Salvador",13.69,-89.190003
+"Malabo","Equatorial Guinea",3.75,8.783333
+"Asmara","Eritrea",15.33236,38.92617
+"Tallinn","Estonia",59.438862,24.754472
+"Addis Ababa","Ethiopia",9.022736,38.746799
+"Stanley","Falkland Islands",-51.700981,-57.84919
+"Torshavn","Faroe Islands",62.017707,-6.771879
+"Suva","Fiji",-18.1416,178.4419
+"Helsinki","Finland",60.169813,24.93824
+"Paris","France",48.856667,2.350987
+"Cayenne","French Guiana",4.9227,-52.3269
+"Papeete","French Polynesia",-17.535021,-149.569595
+"Libreville","Gabon",0.390841,9.453644
+"Banjul","Gambia",13.453056,-16.5775
+"T'bilisi","Georgia",41.716667,44.783333
+"Berlin","Germany",52.523405,13.4114
+"Accra","Ghana",5.555717,-0.196306
+"Athens","Greece",37.97918,23.716647
+"Nuuk","Greenland",64.18362,-51.721407
+"Basse-Terre","Guadeloupe",15.998503,-61.72202
+"Guatemala","Guatemala",14.641389,-90.513056
+"St. Peter Port","Guernsey",49.458858,-2.534752
+"Conakry","Guinea",9.537029,-13.67847
+"Bissau","Guinea-Bissau",11.866667,-15.6
+"Georgetown","Guyana",6.804611,-58.154831
+"Port-au-Prince","Haiti",18.539269,-72.336408
+"Tegucigalpa","Honduras",14.082054,-87.206285
+"Budapest","Hungary",47.498406,19.040758
+"Reykjavik","Iceland",64.135338,-21.89521
+"New Delhi","India",28.635308,77.22496
+"Jakarta","Indonesia",-6.211544,106.845172
+"Tehran","Iran",35.696216,51.422945
+"Baghdad","Iraq",33.3157,44.3922
+"Dublin","Ireland",53.344104,-6.267494
+"Jerusalem","Israel",31.7857,35.2007
+"Rome","Italy",41.895466,12.482324
+"Kingston","Jamaica",17.992731,-76.792009
+"St. Helier","Jersey",49.190278,-2.108611
+"Amman","Jordan",31.956578,35.945695
+"Astana","Kazakhstan",51.10,71.30
+"Nairobi","Kenya",-01.17,36.48
+"Tarawa","Kiribati",01.30,173.00
+"Seoul","South Korea",37.31,126.58
+"Kuwait City","Kuwait",29.30,48.00
+"Bishkek","Kyrgyzstan",42.54,74.46
+"Riga","Latvia",56.53,24.08
+"Beirut","Lebanon",33.53,35.31
+"Maseru","Lesotho",-29.18,27.30
+"Monrovia","Liberia",06.18,-10.47
+"Vaduz","Liechtenstein",47.08,09.31
+"Vilnius","Lithuania",54.38,25.19
+"Luxembourg","Luxembourg",49.37,06.09
+"Antananarivo","Madagascar",-18.55,47.31
+"Lilongwe","Malawi",-14.00,33.48
+"Kuala Lumpur","Malaysia",03.09,101.41
+"Male","Maldives",04.00,73.28
+"Bamako","Mali",12.34,-07.55
+"Valletta","Malta",35.54,14.31
+"Fort-de-France","Martinique",14.36,-61.02
+"Nouakchott","Mauritania",-20.10,57.30
+"Mamoudzou","Mayotte",-12.48,45.14
+"Mexico City","Mexico",19.20,-99.10
+"Palikir","Micronesia",06.55,158.09
+"Chisinau","Moldova",47.02,28.50
+"Maputo","Mozambique",-25.58,32.32
+"Yangon","Myanmar",16.45,96.20
+"Windhoek","Namibia",-22.35,17.04
+"Kathmandu","Nepal",27.45,85.20
+"Amsterdam","Netherlands",52.23,04.54
+"Willemstad","Netherlands Antilles",12.05,-69.00
+"Noumea","New Caledonia",-22.17,166.30
+"Wellington","New Zealand",-41.19,174.46
+"Managua","Nicaragua",12.06,-86.20
+"Niamey","Niger",13.27,02.06
+"Abuja","Nigeria",09.05,07.32
+"Kingston","Norfolk Island",-45.20,168.43
+"Saipan","Northern Mariana Islands",15.12,145.45
+"Oslo","Norway",59.55,10.45
+"Masqat","Oman",23.37,58.36
+"Islamabad","Pakistan",33.40,73.10
+"Koror","Palau",07.20,134.28
+"Panama City","Panama",09.00,-79.25
+"Port Moresby","Papua New Guinea",-09.24,147.08
+"Asuncion","Paraguay",-25.10,-57.30
+"Lima","Peru",-12.00,-77.00
+"Manila","Philippines",14.40,121.03
+"Warsaw","Poland",52.13,21.00
+"Lisbon","Portugal",38.42,-09.10
+"San Juan","Puerto Rico",18.28,-66.07
+"Doha","Qatar",25.15,51.35
+"Bucuresti","Romania",44.27,26.10
+"Moskva","Russian Federation",55.45,37.35
+"Kigali","Rawanda",-01.59,30.04
+"Basseterre","Saint Kitts and Nevis",17.17,-62.43
+"Castries","Saint Lucia",14.02,-60.58
+"Saint-Pierre","Saint Pierre and Miquelon",46.46,-56.12
+"Apia","Samoa",-13.50,-171.50
+"San Marino","San Marino",43.55,12.30
+"Sao Tome","Sao Tome and Principe",00.10,06.39
+"Riyadh","Saudi Arabia",24.41,46.42
+"Dakar","Senegal",14.34,-17.29
+"Freetown","Sierra Leone",08.30,-13.17
+"Bratislava","Slovakia",48.10,17.07
+"Ljubljana","Slovenia",46.04,14.33
+"Honiara","Solomon Islands",-09.27,159.57
+"Mogadishu","Somalia",02.02,45.25
+"Pretoria","South Africa",-25.44,28.12
+"Madrid","Spain",40.25,-03.45
+"Khartoum","Sudan",15.31,32.35
+"Paramaribo","Suriname",05.50,-55.10
+"Mbabane","Swaziland",-26.18,31.06
+"Stockholm","Sweden",59.20,18.03
+"Bern","Switzerland",46.57,07.28
+"Damascus","Syrian Arab Republic",33.30,36.18
+"Dushanbe","Tajikistan",38.33,68.48
+"Bangkok","Thailand",13.45,100.35
+"Lome","Togo",06.09,01.20
+"Nuku'alofa","Tonga",-21.10,-174.00
+"Tunis","Tunisia",36.50,10.11
+"Ankara","Turkey",39.57,32.54
+"Ashgabat","Turkmenistan",38.00,57.50
+"Funafuti","Tuvalu",-08.31,179.13
+"Kampala","Uganda",00.20,32.30
+"Kiev","Ukraine",50.30,30.28
+"Abu Dhabi","United Arab Emirates",24.28,54.22
+"London","United Kingdom",51.36,-00.05
+"Dodoma","Tanzania",-06.08,35.45
+"Washington DC","United States of America",39.91,-77.02
+"Montevideo","Uruguay",-34.50,-56.11
+"Tashkent","Uzbekistan",41.20,69.10
+"Port-Vila","Vanuatu",-17.45,168.18
+"Caracas","Venezuela",10.30,-66.55
+"Hanoi","Viet Nam",21.05,105.55
+"Belgrade","Yugoslavia",44.50,20.37
+"Lusaka","Zambia",-15.28,28.16
+"Harare","Zimbabwe",-17.43,31.02
+"St. John's","Antigua and Barbuda",17.08,-61.50
+"Porto Novo","Benin",06.30,02.47
+"Hamilton","Bermuda"","32.18,-64.48
+"Avarua","Cook Islands",-21.12,-159.46
+"St. George's","Grenada",12.04,-61.44
+"Agaña","Guam",13.28,144.45
+"Victoria","Hong Kong",22.16,114.13
+"Tokyo","Japan",35.40,139.45
+"Pyongyang","North Korea",39.00,125.47
+"Vientiane","Laos",17.59,102.38
+"Tripoli","Libya",32.54,013.11
+"Skopje","Macedonia",42.00,021.28
+"Majuro","Marshall Islands",07.05,171.08
+"Port Louis","Mauritius",-20.10,57.30
+"Monaco","Monaco",43.44,007.25
+"Ulan Bator","Mongolia",47.54,106.52
+"Plymouth","Montserrat",16.44,-62.14
+"Rabat","Morocco",34.02,-06.51
+"Alofi","Niue",-14.27,-178.05
+"Saint-Denis","Réunion",-20.52,55.27
+"Victoria","Seychelles",-04.38,55.28
+"Singapore","Singapore",01.18,103.50
+"Colombo","Sri Lanka",06.55,79.52
+"Kingstown","St Vincent and the Grenadines",13.12,-61.14
+"Taipei","Taiwan",25.50,121.32
+"Port-of-Spain","Trinidad and Tobago",10.38,-61.31
+"Cockburn Harbour","Turks and Caicos Islands",21.30,-71.30
+"Charlotte Amalie","US Virgin Islands",18.22,-64.56
+"Vatican City","Vatican State",41.54,12.27
+"Laàyoune","Western Sahara",27.10,-13.11
+"San'a","Yemen",15.24,44.14

BIN
vendor/phpoffice/phpexcel/Documentation/Examples/Reader/sampleData/example2.xls


+ 93 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/exampleWorkBookReader01.php

@@ -0,0 +1,93 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reading WorkBook Data Example #01</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reading WorkBook Data Example #01</h1>
+<h2>Read the WorkBook Properties</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+$inputFileName = './sampleData/example1.xls';
+
+/**  Create a new Reader of the type defined in $inputFileType  **/
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+/**  Load $inputFileName to a PHPExcel Object  **/
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+/**  Read the document's creator property  **/
+$creator = $objPHPExcel->getProperties()->getCreator();
+echo '<b>Document Creator: </b>',$creator,'<br />';
+
+/**  Read the Date when the workbook was created (as a PHP timestamp value)  **/
+$creationDatestamp = $objPHPExcel->getProperties()->getCreated();
+/**  Format the date and time using the standard PHP date() function  **/
+$creationDate = date('l, d<\s\up>S</\s\up> F Y',$creationDatestamp);
+$creationTime = date('g:i A',$creationDatestamp);
+echo '<b>Created On: </b>',$creationDate,' at ',$creationTime,'<br />';
+
+/**  Read the name of the last person to modify this workbook  **/
+$modifiedBy = $objPHPExcel->getProperties()->getLastModifiedBy();
+echo '<b>Last Modified By: </b>',$modifiedBy,'<br />';
+
+/**  Read the Date when the workbook was last modified (as a PHP timestamp value)  **/
+$modifiedDatestamp = $objPHPExcel->getProperties()->getModified();
+/**  Format the date and time using the standard PHP date() function  **/
+$modifiedDate = date('l, d<\s\up>S</\s\up> F Y',$modifiedDatestamp);
+$modifiedTime = date('g:i A',$modifiedDatestamp);
+echo '<b>Last Modified On: </b>',$modifiedDate,' at ',$modifiedTime,'<br />';
+
+/**  Read the workbook title property  **/
+$workbookTitle = $objPHPExcel->getProperties()->getTitle();
+echo '<b>Title: </b>',$workbookTitle,'<br />';
+
+/**  Read the workbook description property  **/
+$description = $objPHPExcel->getProperties()->getDescription();
+echo '<b>Description: </b>',$description,'<br />';
+
+/**  Read the workbook subject property  **/
+$subject = $objPHPExcel->getProperties()->getSubject();
+echo '<b>Subject: </b>',$subject,'<br />';
+
+/**  Read the workbook keywords property  **/
+$keywords = $objPHPExcel->getProperties()->getKeywords();
+echo '<b>Keywords: </b>',$keywords,'<br />';
+
+/**  Read the workbook category property  **/
+$category = $objPHPExcel->getProperties()->getCategory();
+echo '<b>Category: </b>',$category,'<br />';
+
+/**  Read the workbook company property  **/
+$company = $objPHPExcel->getProperties()->getCompany();
+echo '<b>Company: </b>',$company,'<br />';
+
+/**  Read the workbook manager property  **/
+$manager = $objPHPExcel->getProperties()->getManager();
+echo '<b>Manager: </b>',$manager,'<br />';
+
+
+?>
+<body>
+</html>

+ 52 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/exampleWorkBookReader02.php

@@ -0,0 +1,52 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reading WorkBook Data Example #02</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reading WorkBook Data Example #02</h1>
+<h2>Read a list of Custom Properties for a WorkBook</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel2007';
+$inputFileName = './sampleData/example1.xlsx';
+
+/**  Create a new Reader of the type defined in $inputFileType  **/
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+/**  Load $inputFileName to a PHPExcel Object  **/
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+/**  Read an array list of any custom properties for this document  **/
+$customPropertyList = $objPHPExcel->getProperties()->getCustomProperties();
+
+echo '<b>Custom Property names: </b><br />';
+foreach($customPropertyList as $customPropertyName) {
+	echo $customPropertyName,'<br />';
+}
+
+
+
+?>
+<body>
+</html>

+ 80 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/exampleWorkBookReader03.php

@@ -0,0 +1,80 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reading WorkBook Data Example #03</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reading WorkBook Data Example #03</h1>
+<h2>Read Custom Property Values for a WorkBook</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel2007';
+$inputFileName = './sampleData/example1.xlsx';
+
+/**  Create a new Reader of the type defined in $inputFileType  **/
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+/**  Load $inputFileName to a PHPExcel Object  **/
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+/**  Read an array list of any custom properties for this document  **/
+$customPropertyList = $objPHPExcel->getProperties()->getCustomProperties();
+
+echo '<b>Custom Properties: </b><br />';
+/**  Loop through the list of custom properties  **/
+foreach($customPropertyList as $customPropertyName) {
+	echo '<b>',$customPropertyName,': </b>';
+	/**  Retrieve the property value  **/
+	$propertyValue = $objPHPExcel->getProperties()->getCustomPropertyValue($customPropertyName);
+	/**  Retrieve the property type  **/
+	$propertyType = $objPHPExcel->getProperties()->getCustomPropertyType($customPropertyName);
+
+	/**  Manipulate properties as appropriate for display purposes  **/
+	switch($propertyType) {
+		case 'i' :	//	integer
+			$propertyType = 'integer number';
+			break;
+		case 'f' :	//	float
+			$propertyType = 'floating point number';
+			break;
+		case 's' :	//	string
+			$propertyType = 'string';
+			break;
+		case 'd' :	//	date
+			$propertyValue = date('l, d<\s\up>S</\s\up> F Y g:i A',$propertyValue);
+			$propertyType = 'date';
+			break;
+		case 'b' :	//	boolean
+			$propertyValue = ($propertyValue) ? 'TRUE' : 'FALSE';
+			$propertyType = 'boolean';
+			break;
+	}
+
+	echo $propertyValue,' (',$propertyType,')<br />';
+}
+
+
+
+?>
+<body>
+</html>

+ 55 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/exampleWorkBookReader04.php

@@ -0,0 +1,55 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Reading WorkBook Data Example #04</title>
+
+</head>
+<body>
+
+<h1>PHPExcel Reading WorkBook Data Example #04</h1>
+<h2>Get a List of the Worksheets in a WorkBook</h2>
+<?php
+
+/** Include path **/
+set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
+
+/** PHPExcel_IOFactory */
+include 'PHPExcel/IOFactory.php';
+
+
+$inputFileType = 'Excel5';
+$inputFileName = './sampleData/example2.xls';
+
+/**  Create a new Reader of the type defined in $inputFileType  **/
+$objReader = PHPExcel_IOFactory::createReader($inputFileType);
+/**  Load $inputFileName to a PHPExcel Object  **/
+$objPHPExcel = $objReader->load($inputFileName);
+
+
+echo '<hr />';
+
+echo 'Reading the number of Worksheets in the WorkBook<br />';
+/**  Use the PHPExcel object's getSheetCount() method to get a count of the number of WorkSheets in the WorkBook  */
+$sheetCount = $objPHPExcel->getSheetCount();
+echo 'There ',(($sheetCount == 1) ? 'is' : 'are'),' ',$sheetCount,' WorkSheet',(($sheetCount == 1) ? '' : 's'),' in the WorkBook<br /><br />';
+
+echo 'Reading the names of Worksheets in the WorkBook<br />';
+/**  Use the PHPExcel object's getSheetNames() method to get an array listing the names/titles of the WorkSheets in the WorkBook  */
+$sheetNames = $objPHPExcel->getSheetNames();
+foreach($sheetNames as $sheetIndex => $sheetName) {
+	echo 'WorkSheet #',$sheetIndex,' is named "',$sheetName,'"<br />';
+}
+
+
+?>
+<body>
+</html>

BIN
vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/sampleData/example1.xls


BIN
vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/sampleData/example1.xlsx


BIN
vendor/phpoffice/phpexcel/Documentation/Examples/Reading WorkBook Data/sampleData/example2.xls


+ 50 - 0
vendor/phpoffice/phpexcel/Documentation/Examples/index.php

@@ -0,0 +1,50 @@
+<?php
+
+error_reporting(E_ALL);
+set_time_limit(0);
+
+date_default_timezone_set('Europe/London');
+
+?>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+
+<title>PHPExcel Examples</title>
+
+</head>
+<body>
+
+<?php
+
+$exampleTypeList = glob('./*',GLOB_ONLYDIR);
+
+foreach($exampleTypeList as $exampleType) {
+
+	echo '<h1>PHPExcel ' . pathinfo($exampleType,PATHINFO_BASENAME) . ' Examples</h1>';
+
+	$exampleList = glob('./'.$exampleType.'/*.php');
+
+	foreach($exampleList as $exampleFile) {
+		$fileData = file_get_contents($exampleFile);
+
+		$h1Pattern = '#<h1>(.*?)</h1>#';
+		$h2Pattern = '#<h2>(.*?)</h2>#';
+
+		if (preg_match($h1Pattern, $fileData, $out)) {
+			$h1Text = $out[1];
+			$h2Text = (preg_match($h2Pattern, $fileData, $out)) ? $out[1] : '';
+
+			echo '<a href="',$exampleFile,'">',$h1Text,'</a><br />';
+			if (($h2Text > '') &&
+				(pathinfo($exampleType,PATHINFO_BASENAME) != 'Calculations')) {
+				echo $h2Text,'<br />';
+			}
+		}
+
+	}
+}
+
+?>
+<body>
+</html>

+ 377 - 0
vendor/phpoffice/phpexcel/Documentation/FunctionListByCategory.txt

@@ -0,0 +1,377 @@
+CATEGORY_CUBE
+	CUBEKPIMEMBER           ***  Not yet Implemented
+	CUBEMEMBER              ***  Not yet Implemented
+	CUBEMEMBERPROPERTY      ***  Not yet Implemented
+	CUBERANKEDMEMBER        ***  Not yet Implemented
+	CUBESET                 ***  Not yet Implemented
+	CUBESETCOUNT            ***  Not yet Implemented
+	CUBEVALUE               ***  Not yet Implemented
+
+CATEGORY_DATABASE
+	DAVERAGE                PHPExcel_Calculation_Database::DAVERAGE
+	DCOUNT                  PHPExcel_Calculation_Database::DCOUNT
+	DCOUNTA                 PHPExcel_Calculation_Database::DCOUNTA
+	DGET                    PHPExcel_Calculation_Database::DGET
+	DMAX                    PHPExcel_Calculation_Database::DMAX
+	DMIN                    PHPExcel_Calculation_Database::DMIN
+	DPRODUCT                PHPExcel_Calculation_Database::DPRODUCT
+	DSTDEV                  PHPExcel_Calculation_Database::DSTDEV
+	DSTDEVP                 PHPExcel_Calculation_Database::DSTDEVP
+	DSUM                    PHPExcel_Calculation_Database::DSUM
+	DVAR                    PHPExcel_Calculation_Database::DVAR
+	DVARP                   PHPExcel_Calculation_Database::DVARP
+
+CATEGORY_DATE_AND_TIME
+	DATE                    PHPExcel_Calculation_DateTime::DATE
+	DATEDIF                 PHPExcel_Calculation_DateTime::DATEDIF
+	DATEVALUE               PHPExcel_Calculation_DateTime::DATEVALUE
+	DAY                     PHPExcel_Calculation_DateTime::DAYOFMONTH
+	DAYS360                 PHPExcel_Calculation_DateTime::DAYS360
+	EDATE                   PHPExcel_Calculation_DateTime::EDATE
+	EOMONTH                 PHPExcel_Calculation_DateTime::EOMONTH
+	HOUR                    PHPExcel_Calculation_DateTime::HOUROFDAY
+	MINUTE                  PHPExcel_Calculation_DateTime::MINUTEOFHOUR
+	MONTH                   PHPExcel_Calculation_DateTime::MONTHOFYEAR
+	NETWORKDAYS             PHPExcel_Calculation_DateTime::NETWORKDAYS
+	NOW                     PHPExcel_Calculation_DateTime::DATETIMENOW
+	SECOND                  PHPExcel_Calculation_DateTime::SECONDOFMINUTE
+	TIME                    PHPExcel_Calculation_DateTime::TIME
+	TIMEVALUE               PHPExcel_Calculation_DateTime::TIMEVALUE
+	TODAY                   PHPExcel_Calculation_DateTime::DATENOW
+	WEEKDAY                 PHPExcel_Calculation_DateTime::DAYOFWEEK
+	WEEKNUM                 PHPExcel_Calculation_DateTime::WEEKOFYEAR
+	WORKDAY                 PHPExcel_Calculation_DateTime::WORKDAY
+	YEAR                    PHPExcel_Calculation_DateTime::YEAR
+	YEARFRAC                PHPExcel_Calculation_DateTime::YEARFRAC
+
+CATEGORY_ENGINEERING
+	BESSELI                 PHPExcel_Calculation_Engineering::BESSELI
+	BESSELJ                 PHPExcel_Calculation_Engineering::BESSELJ
+	BESSELK                 PHPExcel_Calculation_Engineering::BESSELK
+	BESSELY                 PHPExcel_Calculation_Engineering::BESSELY
+	BIN2DEC                 PHPExcel_Calculation_Engineering::BINTODEC
+	BIN2HEX                 PHPExcel_Calculation_Engineering::BINTOHEX
+	BIN2OCT                 PHPExcel_Calculation_Engineering::BINTOOCT
+	COMPLEX                 PHPExcel_Calculation_Engineering::COMPLEX
+	CONVERT                 PHPExcel_Calculation_Engineering::CONVERTUOM
+	DEC2BIN                 PHPExcel_Calculation_Engineering::DECTOBIN
+	DEC2HEX                 PHPExcel_Calculation_Engineering::DECTOHEX
+	DEC2OCT                 PHPExcel_Calculation_Engineering::DECTOOCT
+	DELTA                   PHPExcel_Calculation_Engineering::DELTA
+	ERF                     PHPExcel_Calculation_Engineering::ERF
+	ERFC                    PHPExcel_Calculation_Engineering::ERFC
+	GESTEP                  PHPExcel_Calculation_Engineering::GESTEP
+	HEX2BIN                 PHPExcel_Calculation_Engineering::HEXTOBIN
+	HEX2DEC                 PHPExcel_Calculation_Engineering::HEXTODEC
+	HEX2OCT                 PHPExcel_Calculation_Engineering::HEXTOOCT
+	IMABS                   PHPExcel_Calculation_Engineering::IMABS
+	IMAGINARY               PHPExcel_Calculation_Engineering::IMAGINARY
+	IMARGUMENT              PHPExcel_Calculation_Engineering::IMARGUMENT
+	IMCONJUGATE             PHPExcel_Calculation_Engineering::IMCONJUGATE
+	IMCOS                   PHPExcel_Calculation_Engineering::IMCOS
+	IMDIV                   PHPExcel_Calculation_Engineering::IMDIV
+	IMEXP                   PHPExcel_Calculation_Engineering::IMEXP
+	IMLN                    PHPExcel_Calculation_Engineering::IMLN
+	IMLOG10                 PHPExcel_Calculation_Engineering::IMLOG10
+	IMLOG2                  PHPExcel_Calculation_Engineering::IMLOG2
+	IMPOWER                 PHPExcel_Calculation_Engineering::IMPOWER
+	IMPRODUCT               PHPExcel_Calculation_Engineering::IMPRODUCT
+	IMREAL                  PHPExcel_Calculation_Engineering::IMREAL
+	IMSIN                   PHPExcel_Calculation_Engineering::IMSIN
+	IMSQRT                  PHPExcel_Calculation_Engineering::IMSQRT
+	IMSUB                   PHPExcel_Calculation_Engineering::IMSUB
+	IMSUM                   PHPExcel_Calculation_Engineering::IMSUM
+	OCT2BIN                 PHPExcel_Calculation_Engineering::OCTTOBIN
+	OCT2DEC                 PHPExcel_Calculation_Engineering::OCTTODEC
+	OCT2HEX                 PHPExcel_Calculation_Engineering::OCTTOHEX
+
+CATEGORY_FINANCIAL
+	ACCRINT                 PHPExcel_Calculation_Financial::ACCRINT
+	ACCRINTM                PHPExcel_Calculation_Financial::ACCRINTM
+	AMORDEGRC               PHPExcel_Calculation_Financial::AMORDEGRC
+	AMORLINC                PHPExcel_Calculation_Financial::AMORLINC
+	COUPDAYBS               PHPExcel_Calculation_Financial::COUPDAYBS
+	COUPDAYS                PHPExcel_Calculation_Financial::COUPDAYS
+	COUPDAYSNC              PHPExcel_Calculation_Financial::COUPDAYSNC
+	COUPNCD                 PHPExcel_Calculation_Financial::COUPNCD
+	COUPNUM                 PHPExcel_Calculation_Financial::COUPNUM
+	COUPPCD                 PHPExcel_Calculation_Financial::COUPPCD
+	CUMIPMT                 PHPExcel_Calculation_Financial::CUMIPMT
+	CUMPRINC                PHPExcel_Calculation_Financial::CUMPRINC
+	DB                      PHPExcel_Calculation_Financial::DB
+	DDB                     PHPExcel_Calculation_Financial::DDB
+	DISC                    PHPExcel_Calculation_Financial::DISC
+	DOLLARDE                PHPExcel_Calculation_Financial::DOLLARDE
+	DOLLARFR                PHPExcel_Calculation_Financial::DOLLARFR
+	DURATION                ***  Not yet Implemented
+	EFFECT                  PHPExcel_Calculation_Financial::EFFECT
+	FV                      PHPExcel_Calculation_Financial::FV
+	FVSCHEDULE              PHPExcel_Calculation_Financial::FVSCHEDULE
+	INTRATE                 PHPExcel_Calculation_Financial::INTRATE
+	IPMT                    PHPExcel_Calculation_Financial::IPMT
+	IRR                     PHPExcel_Calculation_Financial::IRR
+	ISPMT                   PHPExcel_Calculation_Financial::ISPMT
+	MDURATION               ***  Not yet Implemented
+	MIRR                    PHPExcel_Calculation_Financial::MIRR
+	NOMINAL                 PHPExcel_Calculation_Financial::NOMINAL
+	NPER                    PHPExcel_Calculation_Financial::NPER
+	NPV                     PHPExcel_Calculation_Financial::NPV
+	ODDFPRICE               ***  Not yet Implemented
+	ODDFYIELD               ***  Not yet Implemented
+	ODDLPRICE               ***  Not yet Implemented
+	ODDLYIELD               ***  Not yet Implemented
+	PMT                     PHPExcel_Calculation_Financial::PMT
+	PPMT                    PHPExcel_Calculation_Financial::PPMT
+	PRICE                   PHPExcel_Calculation_Financial::PRICE
+	PRICEDISC               PHPExcel_Calculation_Financial::PRICEDISC
+	PRICEMAT                PHPExcel_Calculation_Financial::PRICEMAT
+	PV                      PHPExcel_Calculation_Financial::PV
+	RATE                    PHPExcel_Calculation_Financial::RATE
+	RECEIVED                PHPExcel_Calculation_Financial::RECEIVED
+	SLN                     PHPExcel_Calculation_Financial::SLN
+	SYD                     PHPExcel_Calculation_Financial::SYD
+	TBILLEQ                 PHPExcel_Calculation_Financial::TBILLEQ
+	TBILLPRICE              PHPExcel_Calculation_Financial::TBILLPRICE
+	TBILLYIELD              PHPExcel_Calculation_Financial::TBILLYIELD
+	USDOLLAR                ***  Not yet Implemented
+	VDB                     ***  Not yet Implemented
+	XIRR                    PHPExcel_Calculation_Financial::XIRR
+	XNPV                    PHPExcel_Calculation_Financial::XNPV
+	YIELD                   ***  Not yet Implemented
+	YIELDDISC               PHPExcel_Calculation_Financial::YIELDDISC
+	YIELDMAT                PHPExcel_Calculation_Financial::YIELDMAT
+
+CATEGORY_INFORMATION
+	CELL                    ***  Not yet Implemented
+	ERROR.TYPE              PHPExcel_Calculation_Functions::ERROR_TYPE
+	INFO                    ***  Not yet Implemented
+	ISBLANK                 PHPExcel_Calculation_Functions::IS_BLANK
+	ISERR                   PHPExcel_Calculation_Functions::IS_ERR
+	ISERROR                 PHPExcel_Calculation_Functions::IS_ERROR
+	ISEVEN                  PHPExcel_Calculation_Functions::IS_EVEN
+	ISLOGICAL               PHPExcel_Calculation_Functions::IS_LOGICAL
+	ISNA                    PHPExcel_Calculation_Functions::IS_NA
+	ISNONTEXT               PHPExcel_Calculation_Functions::IS_NONTEXT
+	ISNUMBER                PHPExcel_Calculation_Functions::IS_NUMBER
+	ISODD                   PHPExcel_Calculation_Functions::IS_ODD
+	ISREF                   ***  Not yet Implemented
+	ISTEXT                  PHPExcel_Calculation_Functions::IS_TEXT
+	N                       PHPExcel_Calculation_Functions::N
+	NA                      PHPExcel_Calculation_Functions::NA
+	TYPE                    PHPExcel_Calculation_Functions::TYPE
+	VERSION                 PHPExcel_Calculation_Functions::VERSION
+
+CATEGORY_LOGICAL
+	AND                     PHPExcel_Calculation_Logical::LOGICAL_AND
+	FALSE                   PHPExcel_Calculation_Logical::FALSE
+	IF                      PHPExcel_Calculation_Logical::STATEMENT_IF
+	IFERROR                 PHPExcel_Calculation_Logical::IFERROR
+	NOT                     PHPExcel_Calculation_Logical::NOT
+	OR                      PHPExcel_Calculation_Logical::LOGICAL_OR
+	TRUE                    PHPExcel_Calculation_Logical::TRUE
+
+CATEGORY_LOOKUP_AND_REFERENCE
+	ADDRESS                 PHPExcel_Calculation_LookupRef::CELL_ADDRESS
+	AREAS                   ***  Not yet Implemented
+	CHOOSE                  PHPExcel_Calculation_LookupRef::CHOOSE
+	COLUMN                  PHPExcel_Calculation_LookupRef::COLUMN
+	COLUMNS                 PHPExcel_Calculation_LookupRef::COLUMNS
+	GETPIVOTDATA            ***  Not yet Implemented
+	HLOOKUP                 PHPExcel_Calculation_LookupRef::HLOOKUP
+	HYPERLINK               PHPExcel_Calculation_LookupRef::HYPERLINK
+	INDEX                   PHPExcel_Calculation_LookupRef::INDEX
+	INDIRECT                PHPExcel_Calculation_LookupRef::INDIRECT
+	LOOKUP                  PHPExcel_Calculation_LookupRef::LOOKUP
+	MATCH                   PHPExcel_Calculation_LookupRef::MATCH
+	OFFSET                  PHPExcel_Calculation_LookupRef::OFFSET
+	ROW                     PHPExcel_Calculation_LookupRef::ROW
+	ROWS                    PHPExcel_Calculation_LookupRef::ROWS
+	RTD                     ***  Not yet Implemented
+	TRANSPOSE               PHPExcel_Calculation_LookupRef::TRANSPOSE
+	VLOOKUP                 PHPExcel_Calculation_LookupRef::VLOOKUP
+
+CATEGORY_MATH_AND_TRIG
+	ABS                     abs
+	ACOS                    acos
+	ACOSH                   acosh
+	ASIN                    asin
+	ASINH                   asinh
+	ATAN                    atan
+	ATAN2                   PHPExcel_Calculation_MathTrig::REVERSE_ATAN2
+	ATANH                   atanh
+	CEILING                 PHPExcel_Calculation_MathTrig::CEILING
+	COMBIN                  PHPExcel_Calculation_MathTrig::COMBIN
+	COS                     cos
+	COSH                    cosh
+	DEGREES                 rad2deg
+	EVEN                    PHPExcel_Calculation_MathTrig::EVEN
+	EXP                     exp
+	FACT                    PHPExcel_Calculation_MathTrig::FACT
+	FACTDOUBLE              PHPExcel_Calculation_MathTrig::FACTDOUBLE
+	FLOOR                   PHPExcel_Calculation_MathTrig::FLOOR
+	GCD                     PHPExcel_Calculation_MathTrig::GCD
+	INT                     PHPExcel_Calculation_MathTrig::INT
+	LCM                     PHPExcel_Calculation_MathTrig::LCM
+	LN                      log
+	LOG                     PHPExcel_Calculation_MathTrig::LOG_BASE
+	LOG10                   log10
+	MDETERM                 PHPExcel_Calculation_MathTrig::MDETERM
+	MINVERSE                PHPExcel_Calculation_MathTrig::MINVERSE
+	MMULT                   PHPExcel_Calculation_MathTrig::MMULT
+	MOD                     PHPExcel_Calculation_MathTrig::MOD
+	MROUND                  PHPExcel_Calculation_MathTrig::MROUND
+	MULTINOMIAL             PHPExcel_Calculation_MathTrig::MULTINOMIAL
+	ODD                     PHPExcel_Calculation_MathTrig::ODD
+	PI                      pi
+	POWER                   PHPExcel_Calculation_MathTrig::POWER
+	PRODUCT                 PHPExcel_Calculation_MathTrig::PRODUCT
+	QUOTIENT                PHPExcel_Calculation_MathTrig::QUOTIENT
+	RADIANS                 deg2rad
+	RAND                    PHPExcel_Calculation_MathTrig::RAND
+	RANDBETWEEN             PHPExcel_Calculation_MathTrig::RAND
+	ROMAN                   PHPExcel_Calculation_MathTrig::ROMAN
+	ROUND                   round
+	ROUNDDOWN               PHPExcel_Calculation_MathTrig::ROUNDDOWN
+	ROUNDUP                 PHPExcel_Calculation_MathTrig::ROUNDUP
+	SERIESSUM               PHPExcel_Calculation_MathTrig::SERIESSUM
+	SIGN                    PHPExcel_Calculation_MathTrig::SIGN
+	SIN                     sin
+	SINH                    sinh
+	SQRT                    sqrt
+	SQRTPI                  PHPExcel_Calculation_MathTrig::SQRTPI
+	SUBTOTAL                PHPExcel_Calculation_MathTrig::SUBTOTAL
+	SUM                     PHPExcel_Calculation_MathTrig::SUM
+	SUMIF                   PHPExcel_Calculation_MathTrig::SUMIF
+	SUMIFS                  ***  Not yet Implemented
+	SUMPRODUCT              PHPExcel_Calculation_MathTrig::SUMPRODUCT
+	SUMSQ                   PHPExcel_Calculation_MathTrig::SUMSQ
+	SUMX2MY2                PHPExcel_Calculation_MathTrig::SUMX2MY2
+	SUMX2PY2                PHPExcel_Calculation_MathTrig::SUMX2PY2
+	SUMXMY2                 PHPExcel_Calculation_MathTrig::SUMXMY2
+	TAN                     tan
+	TANH                    tanh
+	TRUNC                   PHPExcel_Calculation_MathTrig::TRUNC
+
+CATEGORY_STATISTICAL
+	AVEDEV                  PHPExcel_Calculation_Statistical::AVEDEV
+	AVERAGE                 PHPExcel_Calculation_Statistical::AVERAGE
+	AVERAGEA                PHPExcel_Calculation_Statistical::AVERAGEA
+	AVERAGEIF               PHPExcel_Calculation_Statistical::AVERAGEIF
+	AVERAGEIFS              ***  Not yet Implemented
+	BETADIST                PHPExcel_Calculation_Statistical::BETADIST
+	BETAINV                 PHPExcel_Calculation_Statistical::BETAINV
+	BINOMDIST               PHPExcel_Calculation_Statistical::BINOMDIST
+	CHIDIST                 PHPExcel_Calculation_Statistical::CHIDIST
+	CHIINV                  PHPExcel_Calculation_Statistical::CHIINV
+	CHITEST                 ***  Not yet Implemented
+	CONFIDENCE              PHPExcel_Calculation_Statistical::CONFIDENCE
+	CORREL                  PHPExcel_Calculation_Statistical::CORREL
+	COUNT                   PHPExcel_Calculation_Statistical::COUNT
+	COUNTA                  PHPExcel_Calculation_Statistical::COUNTA
+	COUNTBLANK              PHPExcel_Calculation_Statistical::COUNTBLANK
+	COUNTIF                 PHPExcel_Calculation_Statistical::COUNTIF
+	COUNTIFS                ***  Not yet Implemented
+	COVAR                   PHPExcel_Calculation_Statistical::COVAR
+	CRITBINOM               PHPExcel_Calculation_Statistical::CRITBINOM
+	DEVSQ                   PHPExcel_Calculation_Statistical::DEVSQ
+	EXPONDIST               PHPExcel_Calculation_Statistical::EXPONDIST
+	FDIST                   ***  Not yet Implemented
+	FINV                    ***  Not yet Implemented
+	FISHER                  PHPExcel_Calculation_Statistical::FISHER
+	FISHERINV               PHPExcel_Calculation_Statistical::FISHERINV
+	FORECAST                PHPExcel_Calculation_Statistical::FORECAST
+	FREQUENCY               ***  Not yet Implemented
+	FTEST                   ***  Not yet Implemented
+	GAMMADIST               PHPExcel_Calculation_Statistical::GAMMADIST
+	GAMMAINV                PHPExcel_Calculation_Statistical::GAMMAINV
+	GAMMALN                 PHPExcel_Calculation_Statistical::GAMMALN
+	GEOMEAN                 PHPExcel_Calculation_Statistical::GEOMEAN
+	GROWTH                  PHPExcel_Calculation_Statistical::GROWTH
+	HARMEAN                 PHPExcel_Calculation_Statistical::HARMEAN
+	HYPGEOMDIST             PHPExcel_Calculation_Statistical::HYPGEOMDIST
+	INTERCEPT               PHPExcel_Calculation_Statistical::INTERCEPT
+	KURT                    PHPExcel_Calculation_Statistical::KURT
+	LARGE                   PHPExcel_Calculation_Statistical::LARGE
+	LINEST                  PHPExcel_Calculation_Statistical::LINEST
+	LOGEST                  PHPExcel_Calculation_Statistical::LOGEST
+	LOGINV                  PHPExcel_Calculation_Statistical::LOGINV
+	LOGNORMDIST             PHPExcel_Calculation_Statistical::LOGNORMDIST
+	MAX                     PHPExcel_Calculation_Statistical::MAX
+	MAXA                    PHPExcel_Calculation_Statistical::MAXA
+	MAXIF                   PHPExcel_Calculation_Statistical::MAXIF
+	MEDIAN                  PHPExcel_Calculation_Statistical::MEDIAN
+	MEDIANIF                ***  Not yet Implemented
+	MIN                     PHPExcel_Calculation_Statistical::MIN
+	MINA                    PHPExcel_Calculation_Statistical::MINA
+	MINIF                   PHPExcel_Calculation_Statistical::MINIF
+	MODE                    PHPExcel_Calculation_Statistical::MODE
+	NEGBINOMDIST            PHPExcel_Calculation_Statistical::NEGBINOMDIST
+	NORMDIST                PHPExcel_Calculation_Statistical::NORMDIST
+	NORMINV                 PHPExcel_Calculation_Statistical::NORMINV
+	NORMSDIST               PHPExcel_Calculation_Statistical::NORMSDIST
+	NORMSINV                PHPExcel_Calculation_Statistical::NORMSINV
+	PEARSON                 PHPExcel_Calculation_Statistical::CORREL
+	PERCENTILE              PHPExcel_Calculation_Statistical::PERCENTILE
+	PERCENTRANK             PHPExcel_Calculation_Statistical::PERCENTRANK
+	PERMUT                  PHPExcel_Calculation_Statistical::PERMUT
+	POISSON                 PHPExcel_Calculation_Statistical::POISSON
+	PROB                    ***  Not yet Implemented
+	QUARTILE                PHPExcel_Calculation_Statistical::QUARTILE
+	RANK                    PHPExcel_Calculation_Statistical::RANK
+	RSQ                     PHPExcel_Calculation_Statistical::RSQ
+	SKEW                    PHPExcel_Calculation_Statistical::SKEW
+	SLOPE                   PHPExcel_Calculation_Statistical::SLOPE
+	SMALL                   PHPExcel_Calculation_Statistical::SMALL
+	STANDARDIZE             PHPExcel_Calculation_Statistical::STANDARDIZE
+	STDEV                   PHPExcel_Calculation_Statistical::STDEV
+	STDEVA                  PHPExcel_Calculation_Statistical::STDEVA
+	STDEVP                  PHPExcel_Calculation_Statistical::STDEVP
+	STDEVPA                 PHPExcel_Calculation_Statistical::STDEVPA
+	STEYX                   PHPExcel_Calculation_Statistical::STEYX
+	TDIST                   PHPExcel_Calculation_Statistical::TDIST
+	TINV                    PHPExcel_Calculation_Statistical::TINV
+	TREND                   PHPExcel_Calculation_Statistical::TREND
+	TRIMMEAN                PHPExcel_Calculation_Statistical::TRIMMEAN
+	TTEST                   ***  Not yet Implemented
+	VAR                     PHPExcel_Calculation_Statistical::VARFunc
+	VARA                    PHPExcel_Calculation_Statistical::VARA
+	VARP                    PHPExcel_Calculation_Statistical::VARP
+	VARPA                   PHPExcel_Calculation_Statistical::VARPA
+	WEIBULL                 PHPExcel_Calculation_Statistical::WEIBULL
+	ZTEST                   PHPExcel_Calculation_Statistical::ZTEST
+
+CATEGORY_TEXT_AND_DATA
+	ASC                     ***  Not yet Implemented
+	BAHTTEXT                ***  Not yet Implemented
+	CHAR                    PHPExcel_Calculation_TextData::CHARACTER
+	CLEAN                   PHPExcel_Calculation_TextData::TRIMNONPRINTABLE
+	CODE                    PHPExcel_Calculation_TextData::ASCIICODE
+	CONCATENATE             PHPExcel_Calculation_TextData::CONCATENATE
+	DOLLAR                  PHPExcel_Calculation_TextData::DOLLAR
+	EXACT                   ***  Not yet Implemented
+	FIND                    PHPExcel_Calculation_TextData::SEARCHSENSITIVE
+	FINDB                   PHPExcel_Calculation_TextData::SEARCHSENSITIVE
+	FIXED                   PHPExcel_Calculation_TextData::FIXEDFORMAT
+	JIS                     ***  Not yet Implemented
+	LEFT                    PHPExcel_Calculation_TextData::LEFT
+	LEFTB                   PHPExcel_Calculation_TextData::LEFT
+	LEN                     PHPExcel_Calculation_TextData::STRINGLENGTH
+	LENB                    PHPExcel_Calculation_TextData::STRINGLENGTH
+	LOWER                   PHPExcel_Calculation_TextData::LOWERCASE
+	MID                     PHPExcel_Calculation_TextData::MID
+	MIDB                    PHPExcel_Calculation_TextData::MID
+	PHONETIC                ***  Not yet Implemented
+	PROPER                  PHPExcel_Calculation_TextData::PROPERCASE
+	REPLACE                 PHPExcel_Calculation_TextData::REPLACE
+	REPLACEB                PHPExcel_Calculation_TextData::REPLACE
+	REPT                    str_repeat
+	RIGHT                   PHPExcel_Calculation_TextData::RIGHT
+	RIGHTB                  PHPExcel_Calculation_TextData::RIGHT
+	SEARCH                  PHPExcel_Calculation_TextData::SEARCHINSENSITIVE
+	SEARCHB                 PHPExcel_Calculation_TextData::SEARCHINSENSITIVE
+	SUBSTITUTE              PHPExcel_Calculation_TextData::SUBSTITUTE
+	T                       PHPExcel_Calculation_TextData::RETURNSTRING
+	TEXT                    PHPExcel_Calculation_TextData::TEXTFORMAT
+	TRIM                    PHPExcel_Calculation_TextData::TRIMSPACES
+	UPPER                   PHPExcel_Calculation_TextData::UPPERCASE
+	VALUE                   PHPExcel_Calculation_TextData::VALUE

+ 381 - 0
vendor/phpoffice/phpexcel/Documentation/FunctionListByName.txt

@@ -0,0 +1,381 @@
+ABS                     CATEGORY_MATH_AND_TRIG          abs
+ACCRINT                 CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::ACCRINT
+ACCRINTM                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::ACCRINTM
+ACOS                    CATEGORY_MATH_AND_TRIG          acos
+ACOSH                   CATEGORY_MATH_AND_TRIG          acosh
+ADDRESS                 CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::CELL_ADDRESS
+AMORDEGRC               CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::AMORDEGRC
+AMORLINC                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::AMORLINC
+AND                     CATEGORY_LOGICAL                PHPExcel_Calculation_Logical::LOGICAL_AND
+AREAS                   CATEGORY_LOOKUP_AND_REFERENCE   ***  Not yet Implemented
+ASC                     CATEGORY_TEXT_AND_DATA          ***  Not yet Implemented
+ASIN                    CATEGORY_MATH_AND_TRIG          asin
+ASINH                   CATEGORY_MATH_AND_TRIG          asinh
+ATAN                    CATEGORY_MATH_AND_TRIG          atan
+ATAN2                   CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::REVERSE_ATAN2
+ATANH                   CATEGORY_MATH_AND_TRIG          atanh
+AVEDEV                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::AVEDEV
+AVERAGE                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::AVERAGE
+AVERAGEA                CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::AVERAGEA
+AVERAGEIF               CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::AVERAGEIF
+AVERAGEIFS              CATEGORY_STATISTICAL            ***  Not yet Implemented
+
+BAHTTEXT                CATEGORY_TEXT_AND_DATA          ***  Not yet Implemented
+BESSELI                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::BESSELI
+BESSELJ                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::BESSELJ
+BESSELK                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::BESSELK
+BESSELY                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::BESSELY
+BETADIST                CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::BETADIST
+BETAINV                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::BETAINV
+BIN2DEC                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::BINTODEC
+BIN2HEX                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::BINTOHEX
+BIN2OCT                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::BINTOOCT
+BINOMDIST               CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::BINOMDIST
+
+CEILING                 CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::CEILING
+CELL                    CATEGORY_INFORMATION            ***  Not yet Implemented
+CHAR                    CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::CHARACTER
+CHIDIST                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::CHIDIST
+CHIINV                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::CHIINV
+CHITEST                 CATEGORY_STATISTICAL            ***  Not yet Implemented
+CHOOSE                  CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::CHOOSE
+CLEAN                   CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::TRIMNONPRINTABLE
+CODE                    CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::ASCIICODE
+COLUMN                  CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::COLUMN
+COLUMNS                 CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::COLUMNS
+COMBIN                  CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::COMBIN
+COMPLEX                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::COMPLEX
+CONCATENATE             CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::CONCATENATE
+CONFIDENCE              CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::CONFIDENCE
+CONVERT                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::CONVERTUOM
+CORREL                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::CORREL
+COS                     CATEGORY_MATH_AND_TRIG          cos
+COSH                    CATEGORY_MATH_AND_TRIG          cosh
+COUNT                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::COUNT
+COUNTA                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::COUNTA
+COUNTBLANK              CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::COUNTBLANK
+COUNTIF                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::COUNTIF
+COUNTIFS                CATEGORY_STATISTICAL            ***  Not yet Implemented
+COUPDAYBS               CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::COUPDAYBS
+COUPDAYS                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::COUPDAYS
+COUPDAYSNC              CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::COUPDAYSNC
+COUPNCD                 CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::COUPNCD
+COUPNUM                 CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::COUPNUM
+COUPPCD                 CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::COUPPCD
+COVAR                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::COVAR
+CRITBINOM               CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::CRITBINOM
+CUBEKPIMEMBER           CATEGORY_CUBE                   ***  Not yet Implemented
+CUBEMEMBER              CATEGORY_CUBE                   ***  Not yet Implemented
+CUBEMEMBERPROPERTY      CATEGORY_CUBE                   ***  Not yet Implemented
+CUBERANKEDMEMBER        CATEGORY_CUBE                   ***  Not yet Implemented
+CUBESET                 CATEGORY_CUBE                   ***  Not yet Implemented
+CUBESETCOUNT            CATEGORY_CUBE                   ***  Not yet Implemented
+CUBEVALUE               CATEGORY_CUBE                   ***  Not yet Implemented
+CUMIPMT                 CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::CUMIPMT
+CUMPRINC                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::CUMPRINC
+
+DATE                    CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::DATE
+DATEDIF                 CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::DATEDIF
+DATEVALUE               CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::DATEVALUE
+DAVERAGE                CATEGORY_DATABASE               PHPExcel_Calculation_Database::DAVERAGE
+DAY                     CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::DAYOFMONTH
+DAYS360                 CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::DAYS360
+DB                      CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::DB
+DCOUNT                  CATEGORY_DATABASE               PHPExcel_Calculation_Database::DCOUNT
+DCOUNTA                 CATEGORY_DATABASE               PHPExcel_Calculation_Database::DCOUNTA
+DDB                     CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::DDB
+DEC2BIN                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::DECTOBIN
+DEC2HEX                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::DECTOHEX
+DEC2OCT                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::DECTOOCT
+DEGREES                 CATEGORY_MATH_AND_TRIG          rad2deg
+DELTA                   CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::DELTA
+DEVSQ                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::DEVSQ
+DGET                    CATEGORY_DATABASE               PHPExcel_Calculation_Database::DGET
+DISC                    CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::DISC
+DMAX                    CATEGORY_DATABASE               PHPExcel_Calculation_Database::DMAX
+DMIN                    CATEGORY_DATABASE               PHPExcel_Calculation_Database::DMIN
+DOLLAR                  CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::DOLLAR
+DOLLARDE                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::DOLLARDE
+DOLLARFR                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::DOLLARFR
+DPRODUCT                CATEGORY_DATABASE               PHPExcel_Calculation_Database::DPRODUCT
+DSTDEV                  CATEGORY_DATABASE               PHPExcel_Calculation_Database::DSTDEV
+DSTDEVP                 CATEGORY_DATABASE               PHPExcel_Calculation_Database::DSTDEVP
+DSUM                    CATEGORY_DATABASE               PHPExcel_Calculation_Database::DSUM
+DURATION                CATEGORY_FINANCIAL              ***  Not yet Implemented
+DVAR                    CATEGORY_DATABASE               PHPExcel_Calculation_Database::DVAR
+DVARP                   CATEGORY_DATABASE               PHPExcel_Calculation_Database::DVARP
+
+EDATE                   CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::EDATE
+EFFECT                  CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::EFFECT
+EOMONTH                 CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::EOMONTH
+ERF                     CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::ERF
+ERFC                    CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::ERFC
+ERROR.TYPE              CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::ERROR_TYPE
+EVEN                    CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::EVEN
+EXACT                   CATEGORY_TEXT_AND_DATA          ***  Not yet Implemented
+EXP                     CATEGORY_MATH_AND_TRIG          exp
+EXPONDIST               CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::EXPONDIST
+
+FACT                    CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::FACT
+FACTDOUBLE              CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::FACTDOUBLE
+FALSE                   CATEGORY_LOGICAL                PHPExcel_Calculation_Logical::FALSE
+FDIST                   CATEGORY_STATISTICAL            ***  Not yet Implemented
+FIND                    CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::SEARCHSENSITIVE
+FINDB                   CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::SEARCHSENSITIVE
+FINV                    CATEGORY_STATISTICAL            ***  Not yet Implemented
+FISHER                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::FISHER
+FISHERINV               CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::FISHERINV
+FIXED                   CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::FIXEDFORMAT
+FLOOR                   CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::FLOOR
+FORECAST                CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::FORECAST
+FREQUENCY               CATEGORY_STATISTICAL            ***  Not yet Implemented
+FTEST                   CATEGORY_STATISTICAL            ***  Not yet Implemented
+FV                      CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::FV
+FVSCHEDULE              CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::FVSCHEDULE
+
+GAMMADIST               CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::GAMMADIST
+GAMMAINV                CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::GAMMAINV
+GAMMALN                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::GAMMALN
+GCD                     CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::GCD
+GEOMEAN                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::GEOMEAN
+GESTEP                  CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::GESTEP
+GETPIVOTDATA            CATEGORY_LOOKUP_AND_REFERENCE   ***  Not yet Implemented
+GROWTH                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::GROWTH
+
+HARMEAN                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::HARMEAN
+HEX2BIN                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::HEXTOBIN
+HEX2DEC                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::HEXTODEC
+HEX2OCT                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::HEXTOOCT
+HLOOKUP                 CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::HLOOKUP
+HOUR                    CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::HOUROFDAY
+HYPERLINK               CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::HYPERLINK
+HYPGEOMDIST             CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::HYPGEOMDIST
+
+IF                      CATEGORY_LOGICAL                PHPExcel_Calculation_Logical::STATEMENT_IF
+IFERROR                 CATEGORY_LOGICAL                PHPExcel_Calculation_Logical::IFERROR
+IMABS                   CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMABS
+IMAGINARY               CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMAGINARY
+IMARGUMENT              CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMARGUMENT
+IMCONJUGATE             CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMCONJUGATE
+IMCOS                   CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMCOS
+IMDIV                   CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMDIV
+IMEXP                   CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMEXP
+IMLN                    CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMLN
+IMLOG10                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMLOG10
+IMLOG2                  CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMLOG2
+IMPOWER                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMPOWER
+IMPRODUCT               CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMPRODUCT
+IMREAL                  CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMREAL
+IMSIN                   CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMSIN
+IMSQRT                  CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMSQRT
+IMSUB                   CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMSUB
+IMSUM                   CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::IMSUM
+INDEX                   CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::INDEX
+INDIRECT                CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::INDIRECT
+INFO                    CATEGORY_INFORMATION            ***  Not yet Implemented
+INT                     CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::INT
+INTERCEPT               CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::INTERCEPT
+INTRATE                 CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::INTRATE
+IPMT                    CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::IPMT
+IRR                     CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::IRR
+ISBLANK                 CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_BLANK
+ISERR                   CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_ERR
+ISERROR                 CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_ERROR
+ISEVEN                  CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_EVEN
+ISLOGICAL               CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_LOGICAL
+ISNA                    CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_NA
+ISNONTEXT               CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_NONTEXT
+ISNUMBER                CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_NUMBER
+ISODD                   CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_ODD
+ISPMT                   CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::ISPMT
+ISREF                   CATEGORY_INFORMATION            ***  Not yet Implemented
+ISTEXT                  CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::IS_TEXT
+
+JIS                     CATEGORY_TEXT_AND_DATA          ***  Not yet Implemented
+
+KURT                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::KURT
+
+LARGE                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::LARGE
+LCM                     CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::LCM
+LEFT                    CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::LEFT
+LEFTB                   CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::LEFT
+LEN                     CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::STRINGLENGTH
+LENB                    CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::STRINGLENGTH
+LINEST                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::LINEST
+LN                      CATEGORY_MATH_AND_TRIG          log
+LOG                     CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::LOG_BASE
+LOG10                   CATEGORY_MATH_AND_TRIG          log10
+LOGEST                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::LOGEST
+LOGINV                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::LOGINV
+LOGNORMDIST             CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::LOGNORMDIST
+LOOKUP                  CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::LOOKUP
+LOWER                   CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::LOWERCASE
+
+MATCH                   CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::MATCH
+MAX                     CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::MAX
+MAXA                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::MAXA
+MAXIF                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::MAXIF
+MDETERM                 CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::MDETERM
+MDURATION               CATEGORY_FINANCIAL              ***  Not yet Implemented
+MEDIAN                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::MEDIAN
+MEDIANIF                CATEGORY_STATISTICAL            ***  Not yet Implemented
+MID                     CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::MID
+MIDB                    CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::MID
+MIN                     CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::MIN
+MINA                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::MINA
+MINIF                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::MINIF
+MINUTE                  CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::MINUTEOFHOUR
+MINVERSE                CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::MINVERSE
+MIRR                    CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::MIRR
+MMULT                   CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::MMULT
+MOD                     CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::MOD
+MODE                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::MODE
+MONTH                   CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::MONTHOFYEAR
+MROUND                  CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::MROUND
+MULTINOMIAL             CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::MULTINOMIAL
+
+N                       CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::N
+NA                      CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::NA
+NEGBINOMDIST            CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::NEGBINOMDIST
+NETWORKDAYS             CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::NETWORKDAYS
+NOMINAL                 CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::NOMINAL
+NORMDIST                CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::NORMDIST
+NORMINV                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::NORMINV
+NORMSDIST               CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::NORMSDIST
+NORMSINV                CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::NORMSINV
+NOT                     CATEGORY_LOGICAL                PHPExcel_Calculation_Logical::NOT
+NOW                     CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::DATETIMENOW
+NPER                    CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::NPER
+NPV                     CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::NPV
+
+OCT2BIN                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::OCTTOBIN
+OCT2DEC                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::OCTTODEC
+OCT2HEX                 CATEGORY_ENGINEERING            PHPExcel_Calculation_Engineering::OCTTOHEX
+ODD                     CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::ODD
+ODDFPRICE               CATEGORY_FINANCIAL              ***  Not yet Implemented
+ODDFYIELD               CATEGORY_FINANCIAL              ***  Not yet Implemented
+ODDLPRICE               CATEGORY_FINANCIAL              ***  Not yet Implemented
+ODDLYIELD               CATEGORY_FINANCIAL              ***  Not yet Implemented
+OFFSET                  CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::OFFSET
+OR                      CATEGORY_LOGICAL                PHPExcel_Calculation_Logical::LOGICAL_OR
+
+PEARSON                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::CORREL
+PERCENTILE              CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::PERCENTILE
+PERCENTRANK             CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::PERCENTRANK
+PERMUT                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::PERMUT
+PHONETIC                CATEGORY_TEXT_AND_DATA          ***  Not yet Implemented
+PI                      CATEGORY_MATH_AND_TRIG          pi
+PMT                     CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::PMT
+POISSON                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::POISSON
+POWER                   CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::POWER
+PPMT                    CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::PPMT
+PRICE                   CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::PRICE
+PRICEDISC               CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::PRICEDISC
+PRICEMAT                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::PRICEMAT
+PROB                    CATEGORY_STATISTICAL            ***  Not yet Implemented
+PRODUCT                 CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::PRODUCT
+PROPER                  CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::PROPERCASE
+PV                      CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::PV
+
+QUARTILE                CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::QUARTILE
+QUOTIENT                CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::QUOTIENT
+
+RADIANS                 CATEGORY_MATH_AND_TRIG          deg2rad
+RAND                    CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::RAND
+RANDBETWEEN             CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::RAND
+RANK                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::RANK
+RATE                    CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::RATE
+RECEIVED                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::RECEIVED
+REPLACE                 CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::REPLACE
+REPLACEB                CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::REPLACE
+REPT                    CATEGORY_TEXT_AND_DATA          str_repeat
+RIGHT                   CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::RIGHT
+RIGHTB                  CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::RIGHT
+ROMAN                   CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::ROMAN
+ROUND                   CATEGORY_MATH_AND_TRIG          round
+ROUNDDOWN               CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::ROUNDDOWN
+ROUNDUP                 CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::ROUNDUP
+ROW                     CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::ROW
+ROWS                    CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::ROWS
+RSQ                     CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::RSQ
+RTD                     CATEGORY_LOOKUP_AND_REFERENCE   ***  Not yet Implemented
+
+SEARCH                  CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::SEARCHINSENSITIVE
+SEARCHB                 CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::SEARCHINSENSITIVE
+SECOND                  CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::SECONDOFMINUTE
+SERIESSUM               CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SERIESSUM
+SIGN                    CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SIGN
+SIN                     CATEGORY_MATH_AND_TRIG          sin
+SINH                    CATEGORY_MATH_AND_TRIG          sinh
+SKEW                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::SKEW
+SLN                     CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::SLN
+SLOPE                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::SLOPE
+SMALL                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::SMALL
+SQRT                    CATEGORY_MATH_AND_TRIG          sqrt
+SQRTPI                  CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SQRTPI
+STANDARDIZE             CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::STANDARDIZE
+STDEV                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::STDEV
+STDEVA                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::STDEVA
+STDEVP                  CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::STDEVP
+STDEVPA                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::STDEVPA
+STEYX                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::STEYX
+SUBSTITUTE              CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::SUBSTITUTE
+SUBTOTAL                CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SUBTOTAL
+SUM                     CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SUM
+SUMIF                   CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SUMIF
+SUMIFS                  CATEGORY_MATH_AND_TRIG          ***  Not yet Implemented
+SUMPRODUCT              CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SUMPRODUCT
+SUMSQ                   CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SUMSQ
+SUMX2MY2                CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SUMX2MY2
+SUMX2PY2                CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SUMX2PY2
+SUMXMY2                 CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::SUMXMY2
+SYD                     CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::SYD
+
+T                       CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::RETURNSTRING
+TAN                     CATEGORY_MATH_AND_TRIG          tan
+TANH                    CATEGORY_MATH_AND_TRIG          tanh
+TBILLEQ                 CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::TBILLEQ
+TBILLPRICE              CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::TBILLPRICE
+TBILLYIELD              CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::TBILLYIELD
+TDIST                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::TDIST
+TEXT                    CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::TEXTFORMAT
+TIME                    CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::TIME
+TIMEVALUE               CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::TIMEVALUE
+TINV                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::TINV
+TODAY                   CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::DATENOW
+TRANSPOSE               CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::TRANSPOSE
+TREND                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::TREND
+TRIM                    CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::TRIMSPACES
+TRIMMEAN                CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::TRIMMEAN
+TRUE                    CATEGORY_LOGICAL                PHPExcel_Calculation_Logical::TRUE
+TRUNC                   CATEGORY_MATH_AND_TRIG          PHPExcel_Calculation_MathTrig::TRUNC
+TTEST                   CATEGORY_STATISTICAL            ***  Not yet Implemented
+TYPE                    CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::TYPE
+
+UPPER                   CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::UPPERCASE
+USDOLLAR                CATEGORY_FINANCIAL              ***  Not yet Implemented
+
+VALUE                   CATEGORY_TEXT_AND_DATA          PHPExcel_Calculation_TextData::VALUE
+VAR                     CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::VARFunc
+VARA                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::VARA
+VARP                    CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::VARP
+VARPA                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::VARPA
+VDB                     CATEGORY_FINANCIAL              ***  Not yet Implemented
+VERSION                 CATEGORY_INFORMATION            PHPExcel_Calculation_Functions::VERSION
+VLOOKUP                 CATEGORY_LOOKUP_AND_REFERENCE   PHPExcel_Calculation_LookupRef::VLOOKUP
+
+WEEKDAY                 CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::DAYOFWEEK
+WEEKNUM                 CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::WEEKOFYEAR
+WEIBULL                 CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::WEIBULL
+WORKDAY                 CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::WORKDAY
+
+XIRR                    CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::XIRR
+XNPV                    CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::XNPV
+
+YEAR                    CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::YEAR
+YEARFRAC                CATEGORY_DATE_AND_TIME          PHPExcel_Calculation_DateTime::YEARFRAC
+YIELD                   CATEGORY_FINANCIAL              ***  Not yet Implemented
+YIELDDISC               CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::YIELDDISC
+YIELDMAT                CATEGORY_FINANCIAL              PHPExcel_Calculation_Financial::YIELDMAT
+
+ZTEST                   CATEGORY_STATISTICAL            PHPExcel_Calculation_Statistical::ZTEST

BIN
vendor/phpoffice/phpexcel/Documentation/Functionality Cross-Reference.xls


BIN
vendor/phpoffice/phpexcel/Documentation/PHPExcel AutoFilter Reference developer documentation.doc


BIN
vendor/phpoffice/phpexcel/Documentation/PHPExcel Function Reference developer documentation.doc


BIN
vendor/phpoffice/phpexcel/Documentation/PHPExcel User Documentation - Reading Spreadsheet Files.doc


BIN
vendor/phpoffice/phpexcel/Documentation/PHPExcel developer documentation.doc


+ 51 - 0
vendor/phpoffice/phpexcel/Documentation/assets/ClassDiagrams/Architecture.cd

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1">
+  <Font Name="Tahoma" Size="8.25" />
+  <Class Name="ClassDiagrams.PHPExcel" Collapsed="true">
+    <Position X="3.5" Y="0.5" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>Classes\PHPExcel.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAA=</HashCode>
+    </TypeIdentifier>
+    <ShowAsAssociation>
+      <Property Name="Worksheets" />
+    </ShowAsAssociation>
+  </Class>
+  <Class Name="ClassDiagrams.Worksheet" Collapsed="true">
+    <Position X="0.5" Y="0.5" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>Classes\Worksheet.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Interface Name="ClassDiagrams.PHPExcel_Reader_IReader" Collapsed="true">
+    <Position X="2.25" Y="2.5" Width="2" />
+    <TypeIdentifier>
+      <FileName>Classes\IReader.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+    </TypeIdentifier>
+    <ShowAsAssociation>
+      <Property Name="reads" />
+    </ShowAsAssociation>
+    <AssociationLine Name="reads" Type="ClassDiagrams.PHPExcel">
+      <MemberNameLabel ManuallyPlaced="true" ManuallySized="true">
+        <Position X="0.152" Y="1.279" Height="0.16" Width="0.597" />
+      </MemberNameLabel>
+    </AssociationLine>
+  </Interface>
+  <Interface Name="ClassDiagrams.PHPExcel_Writer_IWriter" Collapsed="true">
+    <Position X="4.5" Y="2.5" Width="2" />
+    <TypeIdentifier>
+      <FileName>Classes\IWriter.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAA=</HashCode>
+    </TypeIdentifier>
+    <ShowAsAssociation>
+      <Property Name="writes" />
+    </ShowAsAssociation>
+    <AssociationLine Name="writes" Type="ClassDiagrams.PHPExcel">
+      <MemberNameLabel ManuallyPlaced="true" ManuallySized="true">
+        <Position X="-1.002" Y="1.298" Height="0.16" Width="0.764" />
+      </MemberNameLabel>
+    </AssociationLine>
+  </Interface>
+</ClassDiagram>

BIN
vendor/phpoffice/phpexcel/Documentation/assets/ClassDiagrams/Architecture.png


Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác