Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
<?php

namespace PhpOffice\PhpSpreadsheet\Chart;

/**
 * Created by PhpStorm.
 * User: nhw2h8s
 * Date: 7/2/14
 * Time: 5:45 PM.
 */
abstract class Properties
{
< const < EXCEL_COLOR_TYPE_STANDARD = 'prstClr'; < const EXCEL_COLOR_TYPE_SCHEME = 'schemeClr'; < const EXCEL_COLOR_TYPE_ARGB = 'srgbClr';
> /** @deprecated 1.24 use constant from ChartColor instead */ > const EXCEL_COLOR_TYPE_STANDARD = ChartColor::EXCEL_COLOR_TYPE_STANDARD; > /** @deprecated 1.24 use constant from ChartColor instead */ > const EXCEL_COLOR_TYPE_SCHEME = ChartColor::EXCEL_COLOR_TYPE_SCHEME; > /** @deprecated 1.24 use constant from ChartColor instead */ > const EXCEL_COLOR_TYPE_ARGB = ChartColor::EXCEL_COLOR_TYPE_ARGB;
const AXIS_LABELS_LOW = 'low'; const AXIS_LABELS_HIGH = 'high'; const AXIS_LABELS_NEXT_TO = 'nextTo'; const AXIS_LABELS_NONE = 'none'; const TICK_MARK_NONE = 'none'; const TICK_MARK_INSIDE = 'in'; const TICK_MARK_OUTSIDE = 'out'; const TICK_MARK_CROSS = 'cross'; const HORIZONTAL_CROSSES_AUTOZERO = 'autoZero'; const HORIZONTAL_CROSSES_MAXIMUM = 'max'; const FORMAT_CODE_GENERAL = 'General'; const FORMAT_CODE_NUMBER = '#,##0.00'; const FORMAT_CODE_CURRENCY = '$#,##0.00'; const FORMAT_CODE_ACCOUNTING = '_($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)'; const FORMAT_CODE_DATE = 'm/d/yyyy';
> const FORMAT_CODE_DATE_ISO8601 = 'yyyy-mm-dd';
const FORMAT_CODE_TIME = '[$-F400]h:mm:ss AM/PM'; const FORMAT_CODE_PERCENTAGE = '0.00%'; const FORMAT_CODE_FRACTION = '# ?/?'; const FORMAT_CODE_SCIENTIFIC = '0.00E+00'; const FORMAT_CODE_TEXT = '@'; const FORMAT_CODE_SPECIAL = '00000'; const ORIENTATION_NORMAL = 'minMax'; const ORIENTATION_REVERSED = 'maxMin'; const LINE_STYLE_COMPOUND_SIMPLE = 'sng'; const LINE_STYLE_COMPOUND_DOUBLE = 'dbl'; const LINE_STYLE_COMPOUND_THICKTHIN = 'thickThin'; const LINE_STYLE_COMPOUND_THINTHICK = 'thinThick'; const LINE_STYLE_COMPOUND_TRIPLE = 'tri'; const LINE_STYLE_DASH_SOLID = 'solid'; const LINE_STYLE_DASH_ROUND_DOT = 'sysDot';
> const LINE_STYLE_DASH_SQUARE_DOT = 'sysDash'; const LINE_STYLE_DASH_SQUERE_DOT = 'sysDash'; > /** @deprecated 1.24 use LINE_STYLE_DASH_SQUARE_DOT instead */
const LINE_STYPE_DASH_DASH = 'dash'; const LINE_STYLE_DASH_DASH_DOT = 'dashDot'; const LINE_STYLE_DASH_LONG_DASH = 'lgDash'; const LINE_STYLE_DASH_LONG_DASH_DOT = 'lgDashDot'; const LINE_STYLE_DASH_LONG_DASH_DOT_DOT = 'lgDashDotDot'; const LINE_STYLE_CAP_SQUARE = 'sq'; const LINE_STYLE_CAP_ROUND = 'rnd'; const LINE_STYLE_CAP_FLAT = 'flat';
< const LINE_STYLE_JOIN_ROUND = 'bevel';
> const LINE_STYLE_JOIN_ROUND = 'round';
const LINE_STYLE_JOIN_MITER = 'miter'; const LINE_STYLE_JOIN_BEVEL = 'bevel'; const LINE_STYLE_ARROW_TYPE_NOARROW = null; const LINE_STYLE_ARROW_TYPE_ARROW = 'triangle'; const LINE_STYLE_ARROW_TYPE_OPEN = 'arrow'; const LINE_STYLE_ARROW_TYPE_STEALTH = 'stealth'; const LINE_STYLE_ARROW_TYPE_DIAMOND = 'diamond'; const LINE_STYLE_ARROW_TYPE_OVAL = 'oval'; const LINE_STYLE_ARROW_SIZE_1 = 1; const LINE_STYLE_ARROW_SIZE_2 = 2; const LINE_STYLE_ARROW_SIZE_3 = 3; const LINE_STYLE_ARROW_SIZE_4 = 4; const LINE_STYLE_ARROW_SIZE_5 = 5; const LINE_STYLE_ARROW_SIZE_6 = 6; const LINE_STYLE_ARROW_SIZE_7 = 7; const LINE_STYLE_ARROW_SIZE_8 = 8; const LINE_STYLE_ARROW_SIZE_9 = 9; const SHADOW_PRESETS_NOSHADOW = null; const SHADOW_PRESETS_OUTER_BOTTTOM_RIGHT = 1; const SHADOW_PRESETS_OUTER_BOTTOM = 2; const SHADOW_PRESETS_OUTER_BOTTOM_LEFT = 3; const SHADOW_PRESETS_OUTER_RIGHT = 4; const SHADOW_PRESETS_OUTER_CENTER = 5; const SHADOW_PRESETS_OUTER_LEFT = 6; const SHADOW_PRESETS_OUTER_TOP_RIGHT = 7; const SHADOW_PRESETS_OUTER_TOP = 8; const SHADOW_PRESETS_OUTER_TOP_LEFT = 9; const SHADOW_PRESETS_INNER_BOTTTOM_RIGHT = 10; const SHADOW_PRESETS_INNER_BOTTOM = 11; const SHADOW_PRESETS_INNER_BOTTOM_LEFT = 12; const SHADOW_PRESETS_INNER_RIGHT = 13; const SHADOW_PRESETS_INNER_CENTER = 14; const SHADOW_PRESETS_INNER_LEFT = 15; const SHADOW_PRESETS_INNER_TOP_RIGHT = 16; const SHADOW_PRESETS_INNER_TOP = 17; const SHADOW_PRESETS_INNER_TOP_LEFT = 18; const SHADOW_PRESETS_PERSPECTIVE_BELOW = 19; const SHADOW_PRESETS_PERSPECTIVE_UPPER_RIGHT = 20; const SHADOW_PRESETS_PERSPECTIVE_UPPER_LEFT = 21; const SHADOW_PRESETS_PERSPECTIVE_LOWER_RIGHT = 22; const SHADOW_PRESETS_PERSPECTIVE_LOWER_LEFT = 23;
> const POINTS_WIDTH_MULTIPLIER = 12700; /** > const ANGLE_MULTIPLIER = 60000; // direction and size-kx size-ky * @param float $width > const PERCENTAGE_MULTIPLIER = 100000; // size sx and sy * > * @return float > /** @var bool */ */ > protected $objectState = false; // used only for minor gridlines protected function getExcelPointsWidth($width) > { > /** @var ?float */ return $width * 12700; > protected $glowSize; } > > /** @var ChartColor */ /** > protected $glowColor; * @param float $angle > * > /** @var array */ * @return float > protected $softEdges = [ */ > 'size' => null, protected function getExcelPointsAngle($angle) > ]; { > return $angle * 60000; > /** @var array */ } > protected $shadowProperties = self::PRESETS_OPTIONS[0]; > protected function getTrueAlpha($alpha) > /** @var ChartColor */ { > protected $shadowColor; return (string) 100 - $alpha . '000'; > } > public function __construct() > { protected function setColorProperties($color, $alpha, $type) > $this->lineColor = new ChartColor(); { > $this->glowColor = new ChartColor(); return [ > $this->shadowColor = new ChartColor(); 'type' => (string) $type, > $this->shadowColor->setType(ChartColor::EXCEL_COLOR_TYPE_STANDARD); 'value' => (string) $color, > $this->shadowColor->setValue('black'); 'alpha' => (string) $this->getTrueAlpha($alpha), > $this->shadowColor->setAlpha(40); ]; > } } >
< * @param float $width
> * Get Object State.
< * @return float
> * @return bool
< protected function getExcelPointsWidth($width)
> public function getObjectState()
< return $width * 12700;
> return $this->objectState;
< * @param float $angle
> * Change Object State to True.
< * @return float
> * @return $this
< protected function getExcelPointsAngle($angle)
> public function activateObject()
< return $angle * 60000;
> $this->objectState = true; > > return $this;
< protected function getTrueAlpha($alpha)
> public static function pointsToXml(float $width): string
< return (string) 100 - $alpha . '000';
> return (string) (int) ($width * self::POINTS_WIDTH_MULTIPLIER);
< protected function setColorProperties($color, $alpha, $type)
> public static function xmlToPoints(string $width): float
< return [ < 'type' => (string) $type, < 'value' => (string) $color, < 'alpha' => (string) $this->getTrueAlpha($alpha), < ];
> return ((float) $width) / self::POINTS_WIDTH_MULTIPLIER;
< protected function getLineStyleArrowSize($array_selector, $array_kay_selector)
> public static function angleToXml(float $angle): string
< $sizes = [ < 1 => ['w' => 'sm', 'len' => 'sm'], < 2 => ['w' => 'sm', 'len' => 'med'], < 3 => ['w' => 'sm', 'len' => 'lg'], < 4 => ['w' => 'med', 'len' => 'sm'], < 5 => ['w' => 'med', 'len' => 'med'], < 6 => ['w' => 'med', 'len' => 'lg'], < 7 => ['w' => 'lg', 'len' => 'sm'], < 8 => ['w' => 'lg', 'len' => 'med'], < 9 => ['w' => 'lg', 'len' => 'lg'], < ];
> return (string) (int) ($angle * self::ANGLE_MULTIPLIER); > } > > public static function xmlToAngle(string $angle): float > { > return ((float) $angle) / self::ANGLE_MULTIPLIER; > } > > public static function tenthOfPercentToXml(float $value): string > { > return (string) (int) ($value * self::PERCENTAGE_MULTIPLIER); > }
< return $sizes[$array_selector][$array_kay_selector];
> public static function xmlToTenthOfPercent(string $value): float > { > return ((float) $value) / self::PERCENTAGE_MULTIPLIER;
< protected function getShadowPresetsMap($shadow_presets_option)
> /** > * @param null|float|int|string $alpha > */ > protected function setColorProperties(?string $color, $alpha, ?string $colorType): array
< $presets_options = [
> return [ > 'type' => $colorType, > 'value' => $color, > 'alpha' => ($alpha === null) ? null : (int) $alpha, > ]; > } > > protected const PRESETS_OPTIONS = [ > //NONE > 0 => [ > 'presets' => self::SHADOW_PRESETS_NOSHADOW, > 'effect' => null, > //'color' => [ > // 'type' => ChartColor::EXCEL_COLOR_TYPE_STANDARD, > // 'value' => 'black', > // 'alpha' => 40, > //], > 'size' => [ > 'sx' => null, > 'sy' => null, > 'kx' => null, > 'ky' => null, > ], > 'blur' => null, > 'direction' => null, > 'distance' => null, > 'algn' => null, > 'rotWithShape' => null, > ],
< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '2700000',
> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 2700000 / self::ANGLE_MULTIPLIER,
< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '5400000',
> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 5400000 / self::ANGLE_MULTIPLIER,
], 3 => [ 'effect' => 'outerShdw',
< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '8100000',
> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 8100000 / self::ANGLE_MULTIPLIER,
'algn' => 'tr', 'rotWithShape' => '0', ], 4 => [ 'effect' => 'outerShdw',
< 'blur' => '50800', < 'distance' => '38100',
> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER,
'algn' => 'l', 'rotWithShape' => '0', ], 5 => [ 'effect' => 'outerShdw', 'size' => [
< 'sx' => '102000', < 'sy' => '102000',
> 'sx' => 102000 / self::PERCENTAGE_MULTIPLIER, > 'sy' => 102000 / self::PERCENTAGE_MULTIPLIER,
],
< 'blur' => '63500', < 'distance' => '38100',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER,
'algn' => 'ctr', 'rotWithShape' => '0', ], 6 => [ 'effect' => 'outerShdw',
< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '10800000',
> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 10800000 / self::ANGLE_MULTIPLIER,
'algn' => 'r', 'rotWithShape' => '0', ], 7 => [ 'effect' => 'outerShdw',
< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '18900000',
> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 18900000 / self::ANGLE_MULTIPLIER,
'algn' => 'bl', 'rotWithShape' => '0', ], 8 => [ 'effect' => 'outerShdw',
< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '16200000',
> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 16200000 / self::ANGLE_MULTIPLIER,
'rotWithShape' => '0', ], 9 => [ 'effect' => 'outerShdw',
< 'blur' => '50800', < 'distance' => '38100', < 'direction' => '13500000',
> 'blur' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 38100 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 13500000 / self::ANGLE_MULTIPLIER,
'algn' => 'br', 'rotWithShape' => '0', ], //INNER 10 => [ 'effect' => 'innerShdw',
< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '2700000',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 2700000 / self::ANGLE_MULTIPLIER,
], 11 => [ 'effect' => 'innerShdw',
< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '5400000',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 5400000 / self::ANGLE_MULTIPLIER,
], 12 => [ 'effect' => 'innerShdw',
< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '8100000',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 8100000 / self::ANGLE_MULTIPLIER,
], 13 => [ 'effect' => 'innerShdw',
< 'blur' => '63500', < 'distance' => '50800',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER,
], 14 => [ 'effect' => 'innerShdw',
< 'blur' => '114300',
> 'blur' => 114300 / self::POINTS_WIDTH_MULTIPLIER,
], 15 => [ 'effect' => 'innerShdw',
< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '10800000',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 10800000 / self::ANGLE_MULTIPLIER,
], 16 => [ 'effect' => 'innerShdw',
< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '18900000',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 18900000 / self::ANGLE_MULTIPLIER,
], 17 => [ 'effect' => 'innerShdw',
< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '16200000',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 16200000 / self::ANGLE_MULTIPLIER,
], 18 => [ 'effect' => 'innerShdw',
< 'blur' => '63500', < 'distance' => '50800', < 'direction' => '13500000',
> 'blur' => 63500 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 50800 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 13500000 / self::ANGLE_MULTIPLIER,
], //perspective 19 => [ 'effect' => 'outerShdw',
< 'blur' => '152400', < 'distance' => '317500',
> 'blur' => 152400 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 317500 / self::POINTS_WIDTH_MULTIPLIER,
'size' => [
< 'sx' => '90000', < 'sy' => '-19000',
> 'sx' => 90000 / self::PERCENTAGE_MULTIPLIER, > 'sy' => -19000 / self::PERCENTAGE_MULTIPLIER,
],
< 'direction' => '5400000',
> 'direction' => 5400000 / self::ANGLE_MULTIPLIER,
'rotWithShape' => '0', ], 20 => [ 'effect' => 'outerShdw',
< 'blur' => '76200', < 'direction' => '18900000',
> 'blur' => 76200 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 18900000 / self::ANGLE_MULTIPLIER,
'size' => [
< 'sy' => '23000', < 'kx' => '-1200000',
> 'sy' => 23000 / self::PERCENTAGE_MULTIPLIER, > 'kx' => -1200000 / self::ANGLE_MULTIPLIER,
], 'algn' => 'bl', 'rotWithShape' => '0', ], 21 => [ 'effect' => 'outerShdw',
< 'blur' => '76200', < 'direction' => '13500000',
> 'blur' => 76200 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 13500000 / self::ANGLE_MULTIPLIER,
'size' => [
< 'sy' => '23000', < 'kx' => '1200000',
> 'sy' => 23000 / self::PERCENTAGE_MULTIPLIER, > 'kx' => 1200000 / self::ANGLE_MULTIPLIER,
], 'algn' => 'br', 'rotWithShape' => '0', ], 22 => [ 'effect' => 'outerShdw',
< 'blur' => '76200', < 'distance' => '12700', < 'direction' => '2700000',
> 'blur' => 76200 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 12700 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 2700000 / self::ANGLE_MULTIPLIER,
'size' => [
< 'sy' => '-23000', < 'kx' => '-800400',
> 'sy' => -23000 / self::PERCENTAGE_MULTIPLIER, > 'kx' => -800400 / self::ANGLE_MULTIPLIER,
], 'algn' => 'bl', 'rotWithShape' => '0', ], 23 => [ 'effect' => 'outerShdw',
< 'blur' => '76200', < 'distance' => '12700', < 'direction' => '8100000',
> 'blur' => 76200 / self::POINTS_WIDTH_MULTIPLIER, > 'distance' => 12700 / self::POINTS_WIDTH_MULTIPLIER, > 'direction' => 8100000 / self::ANGLE_MULTIPLIER,
'size' => [
< 'sy' => '-23000', < 'kx' => '800400',
> 'sy' => -23000 / self::PERCENTAGE_MULTIPLIER, > 'kx' => 800400 / self::ANGLE_MULTIPLIER,
], 'algn' => 'br', 'rotWithShape' => '0', ], ];
< return $presets_options[$shadow_presets_option];
> protected function getShadowPresetsMap(int $presetsOption): array > { > return self::PRESETS_OPTIONS[$presetsOption] ?? self::PRESETS_OPTIONS[0];
}
> /** protected function getArrayElementsValue($properties, $elements) > * Get value of array element. { > * $reference = &$properties; > * @param mixed $properties if (!is_array($elements)) { > * @param mixed $elements return $reference[$elements]; > * } > * @return mixed > */
foreach ($elements as $keys) { $reference = &$reference[$keys]; } return $reference;
> } } > } > /** > * Set Glow Properties. > * > * @param float $size > * @param ?string $colorValue > * @param ?int $colorAlpha > * @param ?string $colorType > */ > public function setGlowProperties($size, $colorValue = null, $colorAlpha = null, $colorType = null): void > { > $this > ->activateObject() > ->setGlowSize($size); > $this->glowColor->setColorPropertiesArray( > [ > 'value' => $colorValue, > 'type' => $colorType, > 'alpha' => $colorAlpha, > ] > ); > } > > /** > * Get Glow Property. > * > * @param array|string $property > * > * @return null|array|float|int|string > */ > public function getGlowProperty($property) > { > $retVal = null; > if ($property === 'size') { > $retVal = $this->glowSize; > } elseif ($property === 'color') { > $retVal = [ > 'value' => $this->glowColor->getColorProperty('value'), > 'type' => $this->glowColor->getColorProperty('type'), > 'alpha' => $this->glowColor->getColorProperty('alpha'), > ]; > } elseif (is_array($property) && count($property) >= 2 && $property[0] === 'color') { > $retVal = $this->glowColor->getColorProperty($property[1]); > } > > return $retVal; > } > > /** > * Get Glow Color Property. > * > * @param string $propertyName > * > * @return null|int|string > */ > public function getGlowColor($propertyName) > { > return $this->glowColor->getColorProperty($propertyName); > } > > public function getGlowColorObject(): ChartColor > { > return $this->glowColor; > } > > /** > * Get Glow Size. > * > * @return ?float > */ > public function getGlowSize() > { > return $this->glowSize; > } > > /** > * Set Glow Size. > * > * @param ?float $size > * > * @return $this > */ > protected function setGlowSize($size) > { > $this->glowSize = $size; > > return $this; > } > > /** > * Set Soft Edges Size. > * > * @param float $size > */ > public function setSoftEdges($size): void > { > if ($size !== null) { > $this->activateObject(); > $this->softEdges['size'] = $size; > } > } > > /** > * Get Soft Edges Size. > * > * @return string > */ > public function getSoftEdgesSize() > { > return $this->softEdges['size']; > } > > /** > * @param mixed $value > */ > public function setShadowProperty(string $propertyName, $value): self > { > $this->activateObject(); > if ($propertyName === 'color' && is_array($value)) { > $this->shadowColor->setColorPropertiesArray($value); > } else { > $this->shadowProperties[$propertyName] = $value; > } > > return $this; > } > > /** > * Set Shadow Properties. > * > * @param int $presets > * @param string $colorValue > * @param string $colorType > * @param null|float|int|string $colorAlpha > * @param null|float $blur > * @param null|int $angle > * @param null|float $distance > */ > public function setShadowProperties($presets, $colorValue = null, $colorType = null, $colorAlpha = null, $blur = null, $angle = null, $distance = null): void > { > $this->activateObject()->setShadowPresetsProperties((int) $presets); > if ($presets === 0) { > $this->shadowColor->setType(ChartColor::EXCEL_COLOR_TYPE_STANDARD); > $this->shadowColor->setValue('black'); > $this->shadowColor->setAlpha(40); > } > if ($colorValue !== null) { > $this->shadowColor->setValue($colorValue); > } > if ($colorType !== null) { > $this->shadowColor->setType($colorType); > } > if (is_numeric($colorAlpha)) { > $this->shadowColor->setAlpha((int) $colorAlpha); > } > $this > ->setShadowBlur($blur) > ->setShadowAngle($angle) > ->setShadowDistance($distance); > } > > /** > * Set Shadow Presets Properties. > * > * @param int $presets > * > * @return $this > */ > protected function setShadowPresetsProperties($presets) > { > $this->shadowProperties['presets'] = $presets; > $this->setShadowPropertiesMapValues($this->getShadowPresetsMap($presets)); > > return $this; > } > > protected const SHADOW_ARRAY_KEYS = ['size', 'color']; > > /** > * Set Shadow Properties Values. > * > * @param mixed $reference > * > * @return $this > */ > protected function setShadowPropertiesMapValues(array $propertiesMap, &$reference = null) > { > $base_reference = $reference; > foreach ($propertiesMap as $property_key => $property_val) { > if (is_array($property_val)) { > if (in_array($property_key, self::SHADOW_ARRAY_KEYS, true)) { > $reference = &$this->shadowProperties[$property_key]; > $this->setShadowPropertiesMapValues($property_val, $reference); > } > } else { > if ($base_reference === null) { > $this->shadowProperties[$property_key] = $property_val; > } else { > $reference[$property_key] = $property_val; > } > } > } > > return $this; > } > > /** > * Set Shadow Blur. > * > * @param ?float $blur > * > * @return $this > */ > protected function setShadowBlur($blur) > { > if ($blur !== null) { > $this->shadowProperties['blur'] = $blur; > } > > return $this; > } > > /** > * Set Shadow Angle. > * > * @param null|float|int|string $angle > * > * @return $this > */ > protected function setShadowAngle($angle) > { > if (is_numeric($angle)) { > $this->shadowProperties['direction'] = $angle; > } > > return $this; > } > > /** > * Set Shadow Distance. > * > * @param ?float $distance > * > * @return $this > */ > protected function setShadowDistance($distance) > { > if ($distance !== null) { > $this->shadowProperties['distance'] = $distance; > } > > return $this; > } > > public function getShadowColorObject(): ChartColor > { > return $this->shadowColor; > } > > /** > * Get Shadow Property. > * > * @param string|string[] $elements > * > * @return array|string > */ > public function getShadowProperty($elements) > { > if ($elements === 'color') { > return [ > 'value' => $this->shadowColor->getValue(), > 'type' => $this->shadowColor->getType(), > 'alpha' => $this->shadowColor->getAlpha(), > ]; > } > > return $this->getArrayElementsValue($this->shadowProperties, $elements); > } > > public function getShadowArray(): array > { > $array = $this->shadowProperties; > if ($this->getShadowColorObject()->isUsable()) { > $array['color'] = $this->getShadowProperty('color'); > } > > return $array; > } > > /** @var ChartColor */ > protected $lineColor; > > /** @var array */ > protected $lineStyleProperties = [ > 'width' => null, //'9525', > 'compound' => '', //self::LINE_STYLE_COMPOUND_SIMPLE, > 'dash' => '', //self::LINE_STYLE_DASH_SOLID, > 'cap' => '', //self::LINE_STYLE_CAP_FLAT, > 'join' => '', //self::LINE_STYLE_JOIN_BEVEL, > 'arrow' => [ > 'head' => [ > 'type' => '', //self::LINE_STYLE_ARROW_TYPE_NOARROW, > 'size' => '', //self::LINE_STYLE_ARROW_SIZE_5, > 'w' => '', > 'len' => '', > ], > 'end' => [ > 'type' => '', //self::LINE_STYLE_ARROW_TYPE_NOARROW, > 'size' => '', //self::LINE_STYLE_ARROW_SIZE_8, > 'w' => '', > 'len' => '', > ], > ], > ]; > > public function copyLineStyles(self $otherProperties): void > { > $this->lineStyleProperties = $otherProperties->lineStyleProperties; > $this->lineColor = $otherProperties->lineColor; > $this->glowSize = $otherProperties->glowSize; > $this->glowColor = $otherProperties->glowColor; > $this->softEdges = $otherProperties->softEdges; > $this->shadowProperties = $otherProperties->shadowProperties; > } > > public function getLineColor(): ChartColor > { > return $this->lineColor; > } > > /** > * Set Line Color Properties. > * > * @param string $value > * @param ?int $alpha > * @param ?string $colorType > */ > public function setLineColorProperties($value, $alpha = null, $colorType = null): void > { > $this->activateObject(); > $this->lineColor->setColorPropertiesArray( > $this->setColorProperties( > $value, > $alpha, > $colorType > ) > ); > } > > /** > * Get Line Color Property. > * > * @param string $propertyName > * > * @return null|int|string > */ > public function getLineColorProperty($propertyName) > { > return $this->lineColor->getColorProperty($propertyName); > } > > /** > * Set Line Style Properties. > * > * @param null|float|int|string $lineWidth > * @param string $compoundType > * @param string $dashType > * @param string $capType > * @param string $joinType > * @param string $headArrowType > * @param string $headArrowSize > * @param string $endArrowType > * @param string $endArrowSize > * @param string $headArrowWidth > * @param string $headArrowLength > * @param string $endArrowWidth > * @param string $endArrowLength > */ > public function setLineStyleProperties($lineWidth = null, $compoundType = '', $dashType = '', $capType = '', $joinType = '', $headArrowType = '', $headArrowSize = '', $endArrowType = '', $endArrowSize = '', $headArrowWidth = '', $headArrowLength = '', $endArrowWidth = '', $endArrowLength = ''): void > { > $this->activateObject(); > if (is_numeric($lineWidth)) { > $this->lineStyleProperties['width'] = $lineWidth; > } > if ($compoundType !== '') { > $this->lineStyleProperties['compound'] = $compoundType; > } > if ($dashType !== '') { > $this->lineStyleProperties['dash'] = $dashType; > } > if ($capType !== '') { > $this->lineStyleProperties['cap'] = $capType; > } > if ($joinType !== '') { > $this->lineStyleProperties['join'] = $joinType; > } > if ($headArrowType !== '') { > $this->lineStyleProperties['arrow']['head']['type'] = $headArrowType; > } > if (array_key_exists($headArrowSize, self::ARROW_SIZES)) { > $this->lineStyleProperties['arrow']['head']['size'] = $headArrowSize; > $this->lineStyleProperties['arrow']['head']['w'] = self::ARROW_SIZES[$headArrowSize]['w']; > $this->lineStyleProperties['arrow']['head']['len'] = self::ARROW_SIZES[$headArrowSize]['len']; > } > if ($endArrowType !== '') { > $this->lineStyleProperties['arrow']['end']['type'] = $endArrowType; > } > if (array_key_exists($endArrowSize, self::ARROW_SIZES)) { > $this->lineStyleProperties['arrow']['end']['size'] = $endArrowSize; > $this->lineStyleProperties['arrow']['end']['w'] = self::ARROW_SIZES[$endArrowSize]['w']; > $this->lineStyleProperties['arrow']['end']['len'] = self::ARROW_SIZES[$endArrowSize]['len']; > } > if ($headArrowWidth !== '') { > $this->lineStyleProperties['arrow']['head']['w'] = $headArrowWidth; > } > if ($headArrowLength !== '') { > $this->lineStyleProperties['arrow']['head']['len'] = $headArrowLength; > } > if ($endArrowWidth !== '') { > $this->lineStyleProperties['arrow']['end']['w'] = $endArrowWidth; > } > if ($endArrowLength !== '') { > $this->lineStyleProperties['arrow']['end']['len'] = $endArrowLength; > } > } > > public function getLineStyleArray(): array > { > return $this->lineStyleProperties; > } > > public function setLineStyleArray(array $lineStyleProperties = []): self > { > $this->activateObject(); > $this->lineStyleProperties['width'] = $lineStyleProperties['width'] ?? null; > $this->lineStyleProperties['compound'] = $lineStyleProperties['compound'] ?? ''; > $this->lineStyleProperties['dash'] = $lineStyleProperties['dash'] ?? ''; > $this->lineStyleProperties['cap'] = $lineStyleProperties['cap'] ?? ''; > $this->lineStyleProperties['join'] = $lineStyleProperties['join'] ?? ''; > $this->lineStyleProperties['arrow']['head']['type'] = $lineStyleProperties['arrow']['head']['type'] ?? ''; > $this->lineStyleProperties['arrow']['head']['size'] = $lineStyleProperties['arrow']['head']['size'] ?? ''; > $this->lineStyleProperties['arrow']['head']['w'] = $lineStyleProperties['arrow']['head']['w'] ?? ''; > $this->lineStyleProperties['arrow']['head']['len'] = $lineStyleProperties['arrow']['head']['len'] ?? ''; > $this->lineStyleProperties['arrow']['end']['type'] = $lineStyleProperties['arrow']['end']['type'] ?? ''; > $this->lineStyleProperties['arrow']['end']['size'] = $lineStyleProperties['arrow']['end']['size'] ?? ''; > $this->lineStyleProperties['arrow']['end']['w'] = $lineStyleProperties['arrow']['end']['w'] ?? ''; > $this->lineStyleProperties['arrow']['end']['len'] = $lineStyleProperties['arrow']['end']['len'] ?? ''; > > return $this; > } > > /** > * @param mixed $value > */ > public function setLineStyleProperty(string $propertyName, $value): self > { > $this->activateObject(); > $this->lineStyleProperties[$propertyName] = $value; > > return $this; > } > > /** > * Get Line Style Property. > * > * @param array|string $elements > * > * @return string > */ > public function getLineStyleProperty($elements) > { > return $this->getArrayElementsValue($this->lineStyleProperties, $elements); > } > > protected const ARROW_SIZES = [ > 1 => ['w' => 'sm', 'len' => 'sm'], > 2 => ['w' => 'sm', 'len' => 'med'], > 3 => ['w' => 'sm', 'len' => 'lg'], > 4 => ['w' => 'med', 'len' => 'sm'], > 5 => ['w' => 'med', 'len' => 'med'], > 6 => ['w' => 'med', 'len' => 'lg'], > 7 => ['w' => 'lg', 'len' => 'sm'], > 8 => ['w' => 'lg', 'len' => 'med'], > 9 => ['w' => 'lg', 'len' => 'lg'], > ]; > > /** > * Get Line Style Arrow Size. > * > * @param int $arraySelector > * @param string $arrayKaySelector > * > * @return string > */ > protected function getLineStyleArrowSize($arraySelector, $arrayKaySelector) > { > return self::ARROW_SIZES[$arraySelector][$arrayKaySelector] ?? ''; > } > > /** > * Get Line Style Arrow Parameters. > * > * @param string $arrowSelector > * @param string $propertySelector > * > * @return string > */ > public function getLineStyleArrowParameters($arrowSelector, $propertySelector) > { > return $this->getLineStyleArrowSize($this->lineStyleProperties['arrow'][$arrowSelector]['size'], $propertySelector); > } > > /** > * Get Line Style Arrow Width. > * > * @param string $arrow > * > * @return string > */ > public function getLineStyleArrowWidth($arrow) > { > return $this->getLineStyleProperty(['arrow', $arrow, 'w']); > } > > /** > * Get Line Style Arrow Excel Length. > * > * @param string $arrow > * > * @return string > */ > public function getLineStyleArrowLength($arrow) > { > return $this->getLineStyleProperty(['arrow', $arrow, 'len']);