File: Elsif.php

package info (click to toggle)
php-horde-ingo 3.2.16-9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid
  • size: 5,428 kB
  • sloc: php: 9,583; xml: 4,072; javascript: 184; makefile: 19; sh: 3
file content (136 lines) | stat: -rw-r--r-- 3,123 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php
/**
 * Copyright 2012-2017 Horde LLC (http://www.horde.org/)
 *
 * See the enclosed file LICENSE for license information (ASL).  If you
 * did not receive this file, see http://www.horde.org/licenses/apache.
 *
 * @author   Mike Cochrane <mike@graftonhall.co.nz>
 * @author   Jan Schneider <jan@horde.org>
 * @category Horde
 * @license  http://www.horde.org/licenses/apache ASL
 * @package  Ingo
 */

/**
 * The Ingo_Script_Sieve_Elsif class represents a Sieve Elsif Statement.
 *
 * @author   Mike Cochrane <mike@graftonhall.co.nz>
 * @author   Jan Schneider <jan@horde.org>
 * @category Horde
 * @license  http://www.horde.org/licenses/apache ASL
 * @package  Ingo
 */
class Ingo_Script_Sieve_Elsif implements Ingo_Script_Item
{
    /**
     * The Ingo_Script_Sieve_Test object for the if test.
     *
     * @var Ingo_Script_Sieve_Test
     */
    protected $_test;

    /**
     * A list of Ingo_Script_Sieve_Action objects that go into the if clause.
     *
     * @var array
     */
    protected $_actions = array();

    /**
     * Constructor.
     *
     * @param Ingo_Script_Sieve_Test $test  A Ingo_Script_Sieve_Test object.
     */
    public function __construct($test = null)
    {
        $this->_test = is_null($test)
            ? new Ingo_Script_Sieve_Test_False()
            : $test;
        $this->_actions[] = new Ingo_Script_Sieve_Action_Keep();
    }

    /**
     */
    public function getTest()
    {
        return $this->_test;
    }

    /**
     */
    public function setTest($test)
    {
        $this->_test = $test;
    }

    /**
     */
    public function getActions()
    {
        return $this->_actions;
    }

    /**
     */
    public function setActions($actions)
    {
        $this->_actions = $actions;
    }

    /**
     * Returns a script snippet representing this rule and any sub-rules.
     *
     * @return string  A Sieve script snippet.
     */
    public function generate()
    {
        $code = 'elsif ' . $this->_test->generate() . " {\n";
        foreach ($this->_actions as $action) {
            $code .= '    ' . $action->generate() . "\n";
        }
        $code .= '}';

        return $code;
    }

    /**
     * Checks if all sub-rules are valid.
     *
     * @return boolean|string  True if all rules are valid, an error message
     *                         otherwise.
     */
    public function check()
    {
        $res = $this->_test->check();
        if ($res !== true) {
            return $res;
        }

        foreach ($this->_actions as $action) {
            $res = $action->check();
            if ($res !== true) {
                return $res;
            }
        }

        return true;
    }

    /**
     * Returns a list of sieve extensions required for this rule and any
     * sub-rules.
     *
     * @return array  A Sieve extension list.
     */
    public function requires()
    {
        $requires = array();

        foreach ($this->_actions as $action) {
            $requires = array_merge($requires, $action->requires());
        }

        return array_merge($requires, $this->_test->requires());
    }
}