summaryrefslogtreecommitdiffstats
path: root/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php632
-rw-r--r--vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php205
-rw-r--r--vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/DocumentGenerator.php97
3 files changed, 934 insertions, 0 deletions
diff --git a/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php
new file mode 100644
index 0000000..db18268
--- /dev/null
+++ b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php
@@ -0,0 +1,632 @@
+<?php
+
+namespace PhpOffice\PhpSpreadsheet\Document;
+
+class Properties
+{
+ /** constants */
+ const PROPERTY_TYPE_BOOLEAN = 'b';
+ const PROPERTY_TYPE_INTEGER = 'i';
+ const PROPERTY_TYPE_FLOAT = 'f';
+ const PROPERTY_TYPE_DATE = 'd';
+ const PROPERTY_TYPE_STRING = 's';
+ const PROPERTY_TYPE_UNKNOWN = 'u';
+
+ /**
+ * Creator.
+ *
+ * @var string
+ */
+ private $creator = 'Unknown Creator';
+
+ /**
+ * LastModifiedBy.
+ *
+ * @var string
+ */
+ private $lastModifiedBy;
+
+ /**
+ * Created.
+ *
+ * @var int
+ */
+ private $created;
+
+ /**
+ * Modified.
+ *
+ * @var int
+ */
+ private $modified;
+
+ /**
+ * Title.
+ *
+ * @var string
+ */
+ private $title = 'Untitled Spreadsheet';
+
+ /**
+ * Description.
+ *
+ * @var string
+ */
+ private $description = '';
+
+ /**
+ * Subject.
+ *
+ * @var string
+ */
+ private $subject = '';
+
+ /**
+ * Keywords.
+ *
+ * @var string
+ */
+ private $keywords = '';
+
+ /**
+ * Category.
+ *
+ * @var string
+ */
+ private $category = '';
+
+ /**
+ * Manager.
+ *
+ * @var string
+ */
+ private $manager = '';
+
+ /**
+ * Company.
+ *
+ * @var string
+ */
+ private $company = 'Microsoft Corporation';
+
+ /**
+ * Custom Properties.
+ *
+ * @var string
+ */
+ private $customProperties = [];
+
+ /**
+ * Create a new Document Properties instance.
+ */
+ public function __construct()
+ {
+ // Initialise values
+ $this->lastModifiedBy = $this->creator;
+ $this->created = time();
+ $this->modified = time();
+ }
+
+ /**
+ * Get Creator.
+ *
+ * @return string
+ */
+ public function getCreator()
+ {
+ return $this->creator;
+ }
+
+ /**
+ * Set Creator.
+ *
+ * @param string $creator
+ *
+ * @return $this
+ */
+ public function setCreator($creator)
+ {
+ $this->creator = $creator;
+
+ return $this;
+ }
+
+ /**
+ * Get Last Modified By.
+ *
+ * @return string
+ */
+ public function getLastModifiedBy()
+ {
+ return $this->lastModifiedBy;
+ }
+
+ /**
+ * Set Last Modified By.
+ *
+ * @param string $pValue
+ *
+ * @return $this
+ */
+ public function setLastModifiedBy($pValue)
+ {
+ $this->lastModifiedBy = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get Created.
+ *
+ * @return int
+ */
+ public function getCreated()
+ {
+ return $this->created;
+ }
+
+ /**
+ * Set Created.
+ *
+ * @param int|string $time
+ *
+ * @return $this
+ */
+ public function setCreated($time)
+ {
+ if ($time === null) {
+ $time = time();
+ } elseif (is_string($time)) {
+ if (is_numeric($time)) {
+ $time = (int) $time;
+ } else {
+ $time = strtotime($time);
+ }
+ }
+
+ $this->created = $time;
+
+ return $this;
+ }
+
+ /**
+ * Get Modified.
+ *
+ * @return int
+ */
+ public function getModified()
+ {
+ return $this->modified;
+ }
+
+ /**
+ * Set Modified.
+ *
+ * @param int|string $time
+ *
+ * @return $this
+ */
+ public function setModified($time)
+ {
+ if ($time === null) {
+ $time = time();
+ } elseif (is_string($time)) {
+ if (is_numeric($time)) {
+ $time = (int) $time;
+ } else {
+ $time = strtotime($time);
+ }
+ }
+
+ $this->modified = $time;
+
+ return $this;
+ }
+
+ /**
+ * Get Title.
+ *
+ * @return string
+ */
+ public function getTitle()
+ {
+ return $this->title;
+ }
+
+ /**
+ * Set Title.
+ *
+ * @param string $title
+ *
+ * @return $this
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+
+ return $this;
+ }
+
+ /**
+ * Get Description.
+ *
+ * @return string
+ */
+ public function getDescription()
+ {
+ return $this->description;
+ }
+
+ /**
+ * Set Description.
+ *
+ * @param string $description
+ *
+ * @return $this
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+
+ return $this;
+ }
+
+ /**
+ * Get Subject.
+ *
+ * @return string
+ */
+ public function getSubject()
+ {
+ return $this->subject;
+ }
+
+ /**
+ * Set Subject.
+ *
+ * @param string $subject
+ *
+ * @return $this
+ */
+ public function setSubject($subject)
+ {
+ $this->subject = $subject;
+
+ return $this;
+ }
+
+ /**
+ * Get Keywords.
+ *
+ * @return string
+ */
+ public function getKeywords()
+ {
+ return $this->keywords;
+ }
+
+ /**
+ * Set Keywords.
+ *
+ * @param string $keywords
+ *
+ * @return $this
+ */
+ public function setKeywords($keywords)
+ {
+ $this->keywords = $keywords;
+
+ return $this;
+ }
+
+ /**
+ * Get Category.
+ *
+ * @return string
+ */
+ public function getCategory()
+ {
+ return $this->category;
+ }
+
+ /**
+ * Set Category.
+ *
+ * @param string $category
+ *
+ * @return $this
+ */
+ public function setCategory($category)
+ {
+ $this->category = $category;
+
+ return $this;
+ }
+
+ /**
+ * Get Company.
+ *
+ * @return string
+ */
+ public function getCompany()
+ {
+ return $this->company;
+ }
+
+ /**
+ * Set Company.
+ *
+ * @param string $company
+ *
+ * @return $this
+ */
+ public function setCompany($company)
+ {
+ $this->company = $company;
+
+ return $this;
+ }
+
+ /**
+ * Get Manager.
+ *
+ * @return string
+ */
+ public function getManager()
+ {
+ return $this->manager;
+ }
+
+ /**
+ * Set Manager.
+ *
+ * @param string $manager
+ *
+ * @return $this
+ */
+ public function setManager($manager)
+ {
+ $this->manager = $manager;
+
+ return $this;
+ }
+
+ /**
+ * Get a List of Custom Property Names.
+ *
+ * @return array of string
+ */
+ public function getCustomProperties()
+ {
+ return array_keys($this->customProperties);
+ }
+
+ /**
+ * Check if a Custom Property is defined.
+ *
+ * @param string $propertyName
+ *
+ * @return bool
+ */
+ public function isCustomPropertySet($propertyName)
+ {
+ return isset($this->customProperties[$propertyName]);
+ }
+
+ /**
+ * Get a Custom Property Value.
+ *
+ * @param string $propertyName
+ *
+ * @return mixed
+ */
+ public function getCustomPropertyValue($propertyName)
+ {
+ if (isset($this->customProperties[$propertyName])) {
+ return $this->customProperties[$propertyName]['value'];
+ }
+ }
+
+ /**
+ * Get a Custom Property Type.
+ *
+ * @param string $propertyName
+ *
+ * @return string
+ */
+ public function getCustomPropertyType($propertyName)
+ {
+ if (isset($this->customProperties[$propertyName])) {
+ return $this->customProperties[$propertyName]['type'];
+ }
+ }
+
+ /**
+ * Set a Custom Property.
+ *
+ * @param string $propertyName
+ * @param mixed $propertyValue
+ * @param string $propertyType
+ * 'i' : Integer
+ * 'f' : Floating Point
+ * 's' : String
+ * 'd' : Date/Time
+ * 'b' : Boolean
+ *
+ * @return $this
+ */
+ public function setCustomProperty($propertyName, $propertyValue = '', $propertyType = null)
+ {
+ if (
+ ($propertyType === null) || (!in_array($propertyType, [self::PROPERTY_TYPE_INTEGER,
+ self::PROPERTY_TYPE_FLOAT,
+ self::PROPERTY_TYPE_STRING,
+ self::PROPERTY_TYPE_DATE,
+ self::PROPERTY_TYPE_BOOLEAN,
+ ]))
+ ) {
+ if ($propertyValue === null) {
+ $propertyType = self::PROPERTY_TYPE_STRING;
+ } elseif (is_float($propertyValue)) {
+ $propertyType = self::PROPERTY_TYPE_FLOAT;
+ } elseif (is_int($propertyValue)) {
+ $propertyType = self::PROPERTY_TYPE_INTEGER;
+ } elseif (is_bool($propertyValue)) {
+ $propertyType = self::PROPERTY_TYPE_BOOLEAN;
+ } else {
+ $propertyType = self::PROPERTY_TYPE_STRING;
+ }
+ }
+
+ $this->customProperties[$propertyName] = [
+ 'value' => $propertyValue,
+ 'type' => $propertyType,
+ ];
+
+ 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;
+ }
+ }
+ }
+
+ public static function convertProperty($propertyValue, $propertyType)
+ {
+ switch ($propertyType) {
+ case 'empty': // Empty
+ return '';
+
+ break;
+ case 'null': // Null
+ return null;
+
+ break;
+ case 'i1': // 1-Byte Signed Integer
+ case 'i2': // 2-Byte Signed Integer
+ case 'i4': // 4-Byte Signed Integer
+ case 'i8': // 8-Byte Signed Integer
+ case 'int': // Integer
+ return (int) $propertyValue;
+
+ break;
+ case 'ui1': // 1-Byte Unsigned Integer
+ case 'ui2': // 2-Byte Unsigned Integer
+ case 'ui4': // 4-Byte Unsigned Integer
+ case 'ui8': // 8-Byte Unsigned Integer
+ case 'uint': // Unsigned Integer
+ return abs((int) $propertyValue);
+
+ break;
+ case 'r4': // 4-Byte Real Number
+ case 'r8': // 8-Byte Real Number
+ case 'decimal': // Decimal
+ return (float) $propertyValue;
+
+ break;
+ case 'lpstr': // LPSTR
+ case 'lpwstr': // LPWSTR
+ case 'bstr': // Basic String
+ return $propertyValue;
+
+ break;
+ case 'date': // Date and Time
+ case 'filetime': // File Time
+ return strtotime($propertyValue);
+
+ break;
+ case 'bool': // Boolean
+ return $propertyValue == 'true';
+
+ break;
+ case 'cy': // Currency
+ case 'error': // Error Status Code
+ case 'vector': // Vector
+ case 'array': // Array
+ case 'blob': // Binary Blob
+ case 'oblob': // Binary Blob Object
+ case 'stream': // Binary Stream
+ case 'ostream': // Binary Stream Object
+ case 'storage': // Binary Storage
+ case 'ostorage': // Binary Storage Object
+ case 'vstream': // Binary Versioned Stream
+ case 'clsid': // Class ID
+ case 'cf': // Clipboard Data
+ return $propertyValue;
+
+ break;
+ }
+
+ return $propertyValue;
+ }
+
+ public static function convertPropertyType($propertyType)
+ {
+ switch ($propertyType) {
+ case 'i1': // 1-Byte Signed Integer
+ case 'i2': // 2-Byte Signed Integer
+ case 'i4': // 4-Byte Signed Integer
+ case 'i8': // 8-Byte Signed Integer
+ case 'int': // Integer
+ case 'ui1': // 1-Byte Unsigned Integer
+ case 'ui2': // 2-Byte Unsigned Integer
+ case 'ui4': // 4-Byte Unsigned Integer
+ case 'ui8': // 8-Byte Unsigned Integer
+ case 'uint': // Unsigned Integer
+ return self::PROPERTY_TYPE_INTEGER;
+
+ break;
+ case 'r4': // 4-Byte Real Number
+ case 'r8': // 8-Byte Real Number
+ case 'decimal': // Decimal
+ return self::PROPERTY_TYPE_FLOAT;
+
+ break;
+ case 'empty': // Empty
+ case 'null': // Null
+ case 'lpstr': // LPSTR
+ case 'lpwstr': // LPWSTR
+ case 'bstr': // Basic String
+ return self::PROPERTY_TYPE_STRING;
+
+ break;
+ case 'date': // Date and Time
+ case 'filetime': // File Time
+ return self::PROPERTY_TYPE_DATE;
+
+ break;
+ case 'bool': // Boolean
+ return self::PROPERTY_TYPE_BOOLEAN;
+
+ break;
+ case 'cy': // Currency
+ case 'error': // Error Status Code
+ case 'vector': // Vector
+ case 'array': // Array
+ case 'blob': // Binary Blob
+ case 'oblob': // Binary Blob Object
+ case 'stream': // Binary Stream
+ case 'ostream': // Binary Stream Object
+ case 'storage': // Binary Storage
+ case 'ostorage': // Binary Storage Object
+ case 'vstream': // Binary Versioned Stream
+ case 'clsid': // Class ID
+ case 'cf': // Clipboard Data
+ return self::PROPERTY_TYPE_UNKNOWN;
+
+ break;
+ }
+
+ return self::PROPERTY_TYPE_UNKNOWN;
+ }
+}
diff --git a/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php
new file mode 100644
index 0000000..291e5aa
--- /dev/null
+++ b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php
@@ -0,0 +1,205 @@
+<?php
+
+namespace PhpOffice\PhpSpreadsheet\Document;
+
+use PhpOffice\PhpSpreadsheet\Shared\PasswordHasher;
+
+class Security
+{
+ /**
+ * LockRevision.
+ *
+ * @var bool
+ */
+ private $lockRevision = false;
+
+ /**
+ * LockStructure.
+ *
+ * @var bool
+ */
+ private $lockStructure = false;
+
+ /**
+ * LockWindows.
+ *
+ * @var bool
+ */
+ private $lockWindows = false;
+
+ /**
+ * RevisionsPassword.
+ *
+ * @var string
+ */
+ private $revisionsPassword = '';
+
+ /**
+ * WorkbookPassword.
+ *
+ * @var string
+ */
+ private $workbookPassword = '';
+
+ /**
+ * Create a new Document Security instance.
+ */
+ public function __construct()
+ {
+ }
+
+ /**
+ * Is some sort of document security enabled?
+ *
+ * @return bool
+ */
+ public function isSecurityEnabled()
+ {
+ return $this->lockRevision ||
+ $this->lockStructure ||
+ $this->lockWindows;
+ }
+
+ /**
+ * Get LockRevision.
+ *
+ * @return bool
+ */
+ public function getLockRevision()
+ {
+ return $this->lockRevision;
+ }
+
+ /**
+ * Set LockRevision.
+ *
+ * @param bool $pValue
+ *
+ * @return $this
+ */
+ public function setLockRevision($pValue)
+ {
+ $this->lockRevision = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get LockStructure.
+ *
+ * @return bool
+ */
+ public function getLockStructure()
+ {
+ return $this->lockStructure;
+ }
+
+ /**
+ * Set LockStructure.
+ *
+ * @param bool $pValue
+ *
+ * @return $this
+ */
+ public function setLockStructure($pValue)
+ {
+ $this->lockStructure = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get LockWindows.
+ *
+ * @return bool
+ */
+ public function getLockWindows()
+ {
+ return $this->lockWindows;
+ }
+
+ /**
+ * Set LockWindows.
+ *
+ * @param bool $pValue
+ *
+ * @return $this
+ */
+ public function setLockWindows($pValue)
+ {
+ $this->lockWindows = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get RevisionsPassword (hashed).
+ *
+ * @return string
+ */
+ public function getRevisionsPassword()
+ {
+ return $this->revisionsPassword;
+ }
+
+ /**
+ * Set RevisionsPassword.
+ *
+ * @param string $pValue
+ * @param bool $pAlreadyHashed If the password has already been hashed, set this to true
+ *
+ * @return $this
+ */
+ public function setRevisionsPassword($pValue, $pAlreadyHashed = false)
+ {
+ if (!$pAlreadyHashed) {
+ $pValue = PasswordHasher::hashPassword($pValue);
+ }
+ $this->revisionsPassword = $pValue;
+
+ return $this;
+ }
+
+ /**
+ * Get WorkbookPassword (hashed).
+ *
+ * @return string
+ */
+ public function getWorkbookPassword()
+ {
+ return $this->workbookPassword;
+ }
+
+ /**
+ * Set WorkbookPassword.
+ *
+ * @param string $pValue
+ * @param bool $pAlreadyHashed If the password has already been hashed, set this to true
+ *
+ * @return $this
+ */
+ public function setWorkbookPassword($pValue, $pAlreadyHashed = false)
+ {
+ if (!$pAlreadyHashed) {
+ $pValue = PasswordHasher::hashPassword($pValue);
+ }
+ $this->workbookPassword = $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;
+ }
+ }
+ }
+}
diff --git a/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/DocumentGenerator.php b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/DocumentGenerator.php
new file mode 100644
index 0000000..91b4650
--- /dev/null
+++ b/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/DocumentGenerator.php
@@ -0,0 +1,97 @@
+<?php
+
+namespace PhpOffice\PhpSpreadsheet;
+
+use PhpOffice\PhpSpreadsheet\Calculation\Category;
+use PhpOffice\PhpSpreadsheet\Calculation\Functions;
+use ReflectionClass;
+use UnexpectedValueException;
+
+class DocumentGenerator
+{
+ /**
+ * @param array[] $phpSpreadsheetFunctions
+ */
+ public static function generateFunctionListByCategory(array $phpSpreadsheetFunctions): string
+ {
+ $result = "# Function list by category\n";
+ foreach (self::getCategories() as $categoryConstant => $category) {
+ $result .= "\n";
+ $result .= "## {$categoryConstant}\n";
+ $result .= "\n";
+ $lengths = [20, 42];
+ $result .= self::tableRow($lengths, ['Excel Function', 'PhpSpreadsheet Function']) . "\n";
+ $result .= self::tableRow($lengths, null) . "\n";
+ foreach ($phpSpreadsheetFunctions as $excelFunction => $functionInfo) {
+ if ($category === $functionInfo['category']) {
+ $phpFunction = self::getPhpSpreadsheetFunctionText($functionInfo['functionCall']);
+ $result .= self::tableRow($lengths, [$excelFunction, $phpFunction]) . "\n";
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ private static function getCategories(): array
+ {
+ return (new ReflectionClass(Category::class))->getConstants();
+ }
+
+ private static function tableRow(array $lengths, ?array $values = null): string
+ {
+ $result = '';
+ foreach (array_map(null, $lengths, $values ?? []) as $i => [$length, $value]) {
+ $pad = $value === null ? '-' : ' ';
+ if ($i > 0) {
+ $result .= '|' . $pad;
+ }
+ $result .= str_pad($value ?? '', $length, $pad);
+ }
+
+ return rtrim($result, ' ');
+ }
+
+ private static function getPhpSpreadsheetFunctionText($functionCall): string
+ {
+ if (is_string($functionCall)) {
+ return $functionCall;
+ }
+ if ($functionCall === [Functions::class, 'DUMMY']) {
+ return '**Not yet Implemented**';
+ }
+ if (is_array($functionCall)) {
+ return "\\{$functionCall[0]}::{$functionCall[1]}";
+ }
+
+ throw new UnexpectedValueException(
+ '$functionCall is of type ' . gettype($functionCall) . '. string or array expected'
+ );
+ }
+
+ /**
+ * @param array[] $phpSpreadsheetFunctions
+ */
+ public static function generateFunctionListByName(array $phpSpreadsheetFunctions): string
+ {
+ $categoryConstants = array_flip(self::getCategories());
+ $result = "# Function list by name\n";
+ $lastAlphabet = null;
+ foreach ($phpSpreadsheetFunctions as $excelFunction => $functionInfo) {
+ $lengths = [20, 31, 42];
+ if ($lastAlphabet !== $excelFunction[0]) {
+ $lastAlphabet = $excelFunction[0];
+ $result .= "\n";
+ $result .= "## {$lastAlphabet}\n";
+ $result .= "\n";
+ $result .= self::tableRow($lengths, ['Excel Function', 'Category', 'PhpSpreadsheet Function']) . "\n";
+ $result .= self::tableRow($lengths, null) . "\n";
+ }
+ $category = $categoryConstants[$functionInfo['category']];
+ $phpFunction = self::getPhpSpreadsheetFunctionText($functionInfo['functionCall']);
+ $result .= self::tableRow($lengths, [$excelFunction, $category, $phpFunction]) . "\n";
+ }
+
+ return $result;
+ }
+}