Subiendo proyecto completo sin restricciones de git ignore
This commit is contained in:
551
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php
vendored
Normal file
551
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Properties.php
vendored
Normal file
@@ -0,0 +1,551 @@
|
||||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheet\Document;
|
||||
|
||||
use DateTime;
|
||||
use PhpOffice\PhpSpreadsheet\Shared\IntOrFloat;
|
||||
|
||||
class Properties
|
||||
{
|
||||
/** constants */
|
||||
public const PROPERTY_TYPE_BOOLEAN = 'b';
|
||||
public const PROPERTY_TYPE_INTEGER = 'i';
|
||||
public const PROPERTY_TYPE_FLOAT = 'f';
|
||||
public const PROPERTY_TYPE_DATE = 'd';
|
||||
public const PROPERTY_TYPE_STRING = 's';
|
||||
public const PROPERTY_TYPE_UNKNOWN = 'u';
|
||||
|
||||
private const VALID_PROPERTY_TYPE_LIST = [
|
||||
self::PROPERTY_TYPE_BOOLEAN,
|
||||
self::PROPERTY_TYPE_INTEGER,
|
||||
self::PROPERTY_TYPE_FLOAT,
|
||||
self::PROPERTY_TYPE_DATE,
|
||||
self::PROPERTY_TYPE_STRING,
|
||||
];
|
||||
|
||||
/**
|
||||
* Creator.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $creator = 'Unknown Creator';
|
||||
|
||||
/**
|
||||
* LastModifiedBy.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $lastModifiedBy;
|
||||
|
||||
/**
|
||||
* Created.
|
||||
*
|
||||
* @var float|int
|
||||
*/
|
||||
private $created;
|
||||
|
||||
/**
|
||||
* Modified.
|
||||
*
|
||||
* @var float|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 = '';
|
||||
|
||||
/**
|
||||
* Custom Properties.
|
||||
*
|
||||
* @var array{value: mixed, type: string}[]
|
||||
*/
|
||||
private $customProperties = [];
|
||||
|
||||
private string $hyperlinkBase = '';
|
||||
|
||||
/**
|
||||
* Create a new Document Properties instance.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Initialise values
|
||||
$this->lastModifiedBy = $this->creator;
|
||||
$this->created = self::intOrFloatTimestamp(null);
|
||||
$this->modified = $this->created;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Creator.
|
||||
*/
|
||||
public function getCreator(): string
|
||||
{
|
||||
return $this->creator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Creator.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setCreator(string $creator): self
|
||||
{
|
||||
$this->creator = $creator;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Last Modified By.
|
||||
*/
|
||||
public function getLastModifiedBy(): string
|
||||
{
|
||||
return $this->lastModifiedBy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Last Modified By.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setLastModifiedBy(string $modifiedBy): self
|
||||
{
|
||||
$this->lastModifiedBy = $modifiedBy;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|float|int|string $timestamp
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
private static function intOrFloatTimestamp($timestamp)
|
||||
{
|
||||
if ($timestamp === null) {
|
||||
$timestamp = (float) (new DateTime())->format('U');
|
||||
} elseif (is_string($timestamp)) {
|
||||
if (is_numeric($timestamp)) {
|
||||
$timestamp = (float) $timestamp;
|
||||
} else {
|
||||
$timestamp = (string) preg_replace('/[.][0-9]*$/', '', $timestamp);
|
||||
$timestamp = (string) preg_replace('/^(\\d{4})- (\\d)/', '$1-0$2', $timestamp);
|
||||
$timestamp = (string) preg_replace('/^(\\d{4}-\\d{2})- (\\d)/', '$1-0$2', $timestamp);
|
||||
$timestamp = (float) (new DateTime($timestamp))->format('U');
|
||||
}
|
||||
}
|
||||
|
||||
return IntOrFloat::evaluate($timestamp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Created.
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
public function getCreated()
|
||||
{
|
||||
return $this->created;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Created.
|
||||
*
|
||||
* @param null|float|int|string $timestamp
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setCreated($timestamp): self
|
||||
{
|
||||
$this->created = self::intOrFloatTimestamp($timestamp);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Modified.
|
||||
*
|
||||
* @return float|int
|
||||
*/
|
||||
public function getModified()
|
||||
{
|
||||
return $this->modified;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Modified.
|
||||
*
|
||||
* @param null|float|int|string $timestamp
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setModified($timestamp): self
|
||||
{
|
||||
$this->modified = self::intOrFloatTimestamp($timestamp);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Title.
|
||||
*/
|
||||
public function getTitle(): string
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Title.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setTitle(string $title): self
|
||||
{
|
||||
$this->title = $title;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Description.
|
||||
*/
|
||||
public function getDescription(): string
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Description.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setDescription(string $description): self
|
||||
{
|
||||
$this->description = $description;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Subject.
|
||||
*/
|
||||
public function getSubject(): string
|
||||
{
|
||||
return $this->subject;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Subject.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setSubject(string $subject): self
|
||||
{
|
||||
$this->subject = $subject;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Keywords.
|
||||
*/
|
||||
public function getKeywords(): string
|
||||
{
|
||||
return $this->keywords;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Keywords.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setKeywords(string $keywords): self
|
||||
{
|
||||
$this->keywords = $keywords;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Category.
|
||||
*/
|
||||
public function getCategory(): string
|
||||
{
|
||||
return $this->category;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Category.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setCategory(string $category): self
|
||||
{
|
||||
$this->category = $category;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Company.
|
||||
*/
|
||||
public function getCompany(): string
|
||||
{
|
||||
return $this->company;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Company.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setCompany(string $company): self
|
||||
{
|
||||
$this->company = $company;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Manager.
|
||||
*/
|
||||
public function getManager(): string
|
||||
{
|
||||
return $this->manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set Manager.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setManager(string $manager): self
|
||||
{
|
||||
$this->manager = $manager;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a List of Custom Property Names.
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getCustomProperties(): array
|
||||
{
|
||||
return array_keys($this->customProperties);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a Custom Property is defined.
|
||||
*/
|
||||
public function isCustomPropertySet(string $propertyName): bool
|
||||
{
|
||||
return array_key_exists($propertyName, $this->customProperties);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a Custom Property Value.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getCustomPropertyValue(string $propertyName)
|
||||
{
|
||||
if (isset($this->customProperties[$propertyName])) {
|
||||
return $this->customProperties[$propertyName]['value'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a Custom Property Type.
|
||||
*
|
||||
* @return null|string
|
||||
*/
|
||||
public function getCustomPropertyType(string $propertyName)
|
||||
{
|
||||
return $this->customProperties[$propertyName]['type'] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $propertyValue
|
||||
*/
|
||||
private function identifyPropertyType($propertyValue): string
|
||||
{
|
||||
if (is_float($propertyValue)) {
|
||||
return self::PROPERTY_TYPE_FLOAT;
|
||||
}
|
||||
if (is_int($propertyValue)) {
|
||||
return self::PROPERTY_TYPE_INTEGER;
|
||||
}
|
||||
if (is_bool($propertyValue)) {
|
||||
return self::PROPERTY_TYPE_BOOLEAN;
|
||||
}
|
||||
|
||||
return self::PROPERTY_TYPE_STRING;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a Custom Property.
|
||||
*
|
||||
* @param mixed $propertyValue
|
||||
* @param string $propertyType
|
||||
* 'i' : Integer
|
||||
* 'f' : Floating Point
|
||||
* 's' : String
|
||||
* 'd' : Date/Time
|
||||
* 'b' : Boolean
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setCustomProperty(string $propertyName, $propertyValue = '', $propertyType = null): self
|
||||
{
|
||||
if (($propertyType === null) || (!in_array($propertyType, self::VALID_PROPERTY_TYPE_LIST))) {
|
||||
$propertyType = $this->identifyPropertyType($propertyValue);
|
||||
}
|
||||
|
||||
if (!is_object($propertyValue)) {
|
||||
$this->customProperties[$propertyName] = [
|
||||
'value' => self::convertProperty($propertyValue, $propertyType),
|
||||
'type' => $propertyType,
|
||||
];
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private const PROPERTY_TYPE_ARRAY = [
|
||||
'i' => self::PROPERTY_TYPE_INTEGER, // Integer
|
||||
'i1' => self::PROPERTY_TYPE_INTEGER, // 1-Byte Signed Integer
|
||||
'i2' => self::PROPERTY_TYPE_INTEGER, // 2-Byte Signed Integer
|
||||
'i4' => self::PROPERTY_TYPE_INTEGER, // 4-Byte Signed Integer
|
||||
'i8' => self::PROPERTY_TYPE_INTEGER, // 8-Byte Signed Integer
|
||||
'int' => self::PROPERTY_TYPE_INTEGER, // Integer
|
||||
'ui1' => self::PROPERTY_TYPE_INTEGER, // 1-Byte Unsigned Integer
|
||||
'ui2' => self::PROPERTY_TYPE_INTEGER, // 2-Byte Unsigned Integer
|
||||
'ui4' => self::PROPERTY_TYPE_INTEGER, // 4-Byte Unsigned Integer
|
||||
'ui8' => self::PROPERTY_TYPE_INTEGER, // 8-Byte Unsigned Integer
|
||||
'uint' => self::PROPERTY_TYPE_INTEGER, // Unsigned Integer
|
||||
'f' => self::PROPERTY_TYPE_FLOAT, // Real Number
|
||||
'r4' => self::PROPERTY_TYPE_FLOAT, // 4-Byte Real Number
|
||||
'r8' => self::PROPERTY_TYPE_FLOAT, // 8-Byte Real Number
|
||||
'decimal' => self::PROPERTY_TYPE_FLOAT, // Decimal
|
||||
's' => self::PROPERTY_TYPE_STRING, // String
|
||||
'empty' => self::PROPERTY_TYPE_STRING, // Empty
|
||||
'null' => self::PROPERTY_TYPE_STRING, // Null
|
||||
'lpstr' => self::PROPERTY_TYPE_STRING, // LPSTR
|
||||
'lpwstr' => self::PROPERTY_TYPE_STRING, // LPWSTR
|
||||
'bstr' => self::PROPERTY_TYPE_STRING, // Basic String
|
||||
'd' => self::PROPERTY_TYPE_DATE, // Date and Time
|
||||
'date' => self::PROPERTY_TYPE_DATE, // Date and Time
|
||||
'filetime' => self::PROPERTY_TYPE_DATE, // File Time
|
||||
'b' => self::PROPERTY_TYPE_BOOLEAN, // Boolean
|
||||
'bool' => self::PROPERTY_TYPE_BOOLEAN, // Boolean
|
||||
];
|
||||
|
||||
private const SPECIAL_TYPES = [
|
||||
'empty' => '',
|
||||
'null' => null,
|
||||
];
|
||||
|
||||
/**
|
||||
* Convert property to form desired by Excel.
|
||||
*
|
||||
* @param mixed $propertyValue
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public static function convertProperty($propertyValue, string $propertyType)
|
||||
{
|
||||
return self::SPECIAL_TYPES[$propertyType] ?? self::convertProperty2($propertyValue, $propertyType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert property to form desired by Excel.
|
||||
*
|
||||
* @param mixed $propertyValue
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
private static function convertProperty2($propertyValue, string $type)
|
||||
{
|
||||
$propertyType = self::convertPropertyType($type);
|
||||
switch ($propertyType) {
|
||||
case self::PROPERTY_TYPE_INTEGER:
|
||||
$intValue = (int) $propertyValue;
|
||||
|
||||
return ($type[0] === 'u') ? abs($intValue) : $intValue;
|
||||
case self::PROPERTY_TYPE_FLOAT:
|
||||
return (float) $propertyValue;
|
||||
case self::PROPERTY_TYPE_DATE:
|
||||
return self::intOrFloatTimestamp($propertyValue);
|
||||
case self::PROPERTY_TYPE_BOOLEAN:
|
||||
return is_bool($propertyValue) ? $propertyValue : ($propertyValue === 'true');
|
||||
default: // includes string
|
||||
return $propertyValue;
|
||||
}
|
||||
}
|
||||
|
||||
public static function convertPropertyType(string $propertyType): string
|
||||
{
|
||||
return self::PROPERTY_TYPE_ARRAY[$propertyType] ?? self::PROPERTY_TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
public function getHyperlinkBase(): string
|
||||
{
|
||||
return $this->hyperlinkBase;
|
||||
}
|
||||
|
||||
public function setHyperlinkBase(string $hyperlinkBase): self
|
||||
{
|
||||
$this->hyperlinkBase = $hyperlinkBase;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
152
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php
vendored
Normal file
152
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Document/Security.php
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
<?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?
|
||||
*/
|
||||
public function isSecurityEnabled(): bool
|
||||
{
|
||||
return $this->lockRevision ||
|
||||
$this->lockStructure ||
|
||||
$this->lockWindows;
|
||||
}
|
||||
|
||||
public function getLockRevision(): bool
|
||||
{
|
||||
return $this->lockRevision;
|
||||
}
|
||||
|
||||
public function setLockRevision(?bool $locked): self
|
||||
{
|
||||
if ($locked !== null) {
|
||||
$this->lockRevision = $locked;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getLockStructure(): bool
|
||||
{
|
||||
return $this->lockStructure;
|
||||
}
|
||||
|
||||
public function setLockStructure(?bool $locked): self
|
||||
{
|
||||
if ($locked !== null) {
|
||||
$this->lockStructure = $locked;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getLockWindows(): bool
|
||||
{
|
||||
return $this->lockWindows;
|
||||
}
|
||||
|
||||
public function setLockWindows(?bool $locked): self
|
||||
{
|
||||
if ($locked !== null) {
|
||||
$this->lockWindows = $locked;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getRevisionsPassword(): string
|
||||
{
|
||||
return $this->revisionsPassword;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set RevisionsPassword.
|
||||
*
|
||||
* @param string $password
|
||||
* @param bool $alreadyHashed If the password has already been hashed, set this to true
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setRevisionsPassword(?string $password, bool $alreadyHashed = false)
|
||||
{
|
||||
if ($password !== null) {
|
||||
if (!$alreadyHashed) {
|
||||
$password = PasswordHasher::hashPassword($password);
|
||||
}
|
||||
$this->revisionsPassword = $password;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getWorkbookPassword(): string
|
||||
{
|
||||
return $this->workbookPassword;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set WorkbookPassword.
|
||||
*
|
||||
* @param string $password
|
||||
* @param bool $alreadyHashed If the password has already been hashed, set this to true
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setWorkbookPassword(?string $password, bool $alreadyHashed = false)
|
||||
{
|
||||
if ($password !== null) {
|
||||
if (!$alreadyHashed) {
|
||||
$password = PasswordHasher::hashPassword($password);
|
||||
}
|
||||
$this->workbookPassword = $password;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user