Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1441 ariadna 1
<?php
2
 
3
namespace PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\Wizard;
4
 
5
use PhpOffice\PhpSpreadsheet\Exception;
6
use PhpOffice\PhpSpreadsheet\Style\Conditional;
7
use PhpOffice\PhpSpreadsheet\Style\ConditionalFormatting\Wizard;
8
 
9
/**
10
 * @method Errors notError()
11
 * @method Errors isError()
12
 */
13
class Errors extends WizardAbstract implements WizardInterface
14
{
15
    protected const OPERATORS = [
16
        'notError' => false,
17
        'isError' => true,
18
    ];
19
 
20
    protected const EXPRESSIONS = [
21
        Wizard::NOT_ERRORS => 'NOT(ISERROR(%s))',
22
        Wizard::ERRORS => 'ISERROR(%s)',
23
    ];
24
 
25
    protected bool $inverse;
26
 
27
    public function __construct(string $cellRange, bool $inverse = false)
28
    {
29
        parent::__construct($cellRange);
30
        $this->inverse = $inverse;
31
    }
32
 
33
    protected function inverse(bool $inverse): void
34
    {
35
        $this->inverse = $inverse;
36
    }
37
 
38
    protected function getExpression(): void
39
    {
40
        $this->expression = sprintf(
41
            self::EXPRESSIONS[$this->inverse ? Wizard::ERRORS : Wizard::NOT_ERRORS],
42
            $this->referenceCell
43
        );
44
    }
45
 
46
    public function getConditional(): Conditional
47
    {
48
        $this->getExpression();
49
 
50
        $conditional = new Conditional();
51
        $conditional->setConditionType(
52
            $this->inverse ? Conditional::CONDITION_CONTAINSERRORS : Conditional::CONDITION_NOTCONTAINSERRORS
53
        );
54
        $conditional->setConditions([$this->expression]);
55
        $conditional->setStyle($this->getStyle());
56
        $conditional->setStopIfTrue($this->getStopIfTrue());
57
 
58
        return $conditional;
59
    }
60
 
61
    public static function fromConditional(Conditional $conditional, string $cellRange = 'A1'): WizardInterface
62
    {
63
        if (
64
            $conditional->getConditionType() !== Conditional::CONDITION_CONTAINSERRORS
65
            && $conditional->getConditionType() !== Conditional::CONDITION_NOTCONTAINSERRORS
66
        ) {
67
            throw new Exception('Conditional is not an Errors CF Rule conditional');
68
        }
69
 
70
        $wizard = new self($cellRange);
71
        $wizard->style = $conditional->getStyle();
72
        $wizard->stopIfTrue = $conditional->getStopIfTrue();
73
        $wizard->inverse = $conditional->getConditionType() === Conditional::CONDITION_CONTAINSERRORS;
74
 
75
        return $wizard;
76
    }
77
 
78
    /**
79
     * @param mixed[] $arguments
80
     */
81
    public function __call(string $methodName, array $arguments): self
82
    {
83
        if (!array_key_exists($methodName, self::OPERATORS)) {
84
            throw new Exception('Invalid Operation for Errors CF Rule Wizard');
85
        }
86
 
87
        $this->inverse(self::OPERATORS[$methodName]);
88
 
89
        return $this;
90
    }
91
}