Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
bc77d7c0 | 4 | | Copyright CiviCRM LLC. All rights reserved. | |
6a488035 | 5 | | | |
bc77d7c0 TO |
6 | | This work is published under the GNU AGPLv3 license with some | |
7 | | permitted exceptions and without any warranty. For full license | | |
8 | | and copyright information, see https://civicrm.org/licensing | | |
6a488035 | 9 | +--------------------------------------------------------------------+ |
d25dd0ee | 10 | */ |
6a488035 TO |
11 | |
12 | /** | |
13 | * The basic state element. Each state element is linked to a form and | |
14 | * represents the form in the transition diagram. We use the state to | |
15 | * determine what action to take on various user input. Actions include | |
16 | * things like going back / stepping forward / process etc | |
17 | * | |
18 | * @package CRM | |
ca5cec67 | 19 | * @copyright CiviCRM LLC https://civicrm.org/licensing |
6a488035 TO |
20 | */ |
21 | class CRM_Core_State { | |
22 | ||
23 | /** | |
f9e31d7f | 24 | * State name. |
6a488035 TO |
25 | * @var string |
26 | */ | |
27 | protected $_name; | |
28 | ||
29 | /** | |
100fef9d | 30 | * This is a combination "OR" of the STATE_* constants defined below |
6a488035 TO |
31 | * @var int |
32 | */ | |
33 | protected $_type; | |
34 | ||
35 | /** | |
f9e31d7f | 36 | * The state that precedes this state. |
c490a46a | 37 | * @var CRM_Core_State |
6a488035 TO |
38 | */ |
39 | protected $_back; | |
40 | ||
41 | /** | |
f9e31d7f | 42 | * The state that succeeds this state. |
c490a46a | 43 | * @var CRM_Core_State |
6a488035 TO |
44 | */ |
45 | protected $_next; | |
46 | ||
47 | /** | |
f9e31d7f | 48 | * The state machine that this state is part of. |
c490a46a | 49 | * @var CRM_Core_StateMachine |
6a488035 TO |
50 | */ |
51 | protected $_stateMachine; | |
52 | ||
53 | /** | |
54 | * The different types of states. As we flush out the framework more | |
55 | * we will introduce other conditional / looping states which will | |
56 | * bring in more complexity to the framework. For now, lets keep it simple | |
57 | * @var int | |
58 | */ | |
7da04cde | 59 | const START = 1, FINISH = 2, SIMPLE = 4; |
6a488035 TO |
60 | |
61 | /** | |
f9e31d7f | 62 | * Constructor. |
6a488035 | 63 | * |
6a0b768e TO |
64 | * @param string $name |
65 | * Internal name of the state. | |
66 | * @param int $type | |
67 | * State type. | |
68 | * @param CRM_Core_State $back | |
69 | * State that precedes this state. | |
70 | * @param CRM_Core_State $next | |
71 | * State that follows this state. | |
72 | * @param CRM_Core_StateMachine $stateMachine | |
73 | * Statemachine that this states belongs to. | |
6a488035 | 74 | * |
c490a46a | 75 | * @return CRM_Core_State |
6a488035 | 76 | */ |
00be9182 | 77 | public function __construct($name, $type, $back, $next, &$stateMachine) { |
6a488035 TO |
78 | $this->_name = $name; |
79 | $this->_type = $type; | |
80 | $this->_back = $back; | |
81 | $this->_next = $next; | |
82 | ||
83 | $this->_stateMachine = &$stateMachine; | |
84 | } | |
85 | ||
6a488035 | 86 | /** |
ad37ac8e | 87 | * Given an CRM Form, jump to the previous page. |
88 | * | |
2ea413ff | 89 | * @param CRM_Core_Form $page |
6a488035 | 90 | * |
72b3a70c CW |
91 | * @return mixed |
92 | * does a jump to the back state | |
6a488035 | 93 | */ |
00be9182 | 94 | public function handleBackState(&$page) { |
6a488035 TO |
95 | if ($this->_type & self::START) { |
96 | $page->handle('display'); | |
97 | } | |
98 | else { | |
99 | $back = &$page->controller->getPage($this->_back); | |
100 | return $back->handle('jump'); | |
101 | } | |
102 | } | |
103 | ||
104 | /** | |
ad37ac8e | 105 | * Given an CRM Form, jump to the next page. |
106 | * | |
2ea413ff | 107 | * @param CRM_Core_Form $page |
6a488035 | 108 | * |
72b3a70c | 109 | * @return mixed |
ad37ac8e | 110 | * Does a jump to the nextstate |
6a488035 | 111 | */ |
00be9182 | 112 | public function handleNextState(&$page) { |
6a488035 TO |
113 | if ($this->_type & self::FINISH) { |
114 | $page->handle('process'); | |
115 | } | |
116 | else { | |
117 | $next = &$page->controller->getPage($this->_next); | |
118 | return $next->handle('jump'); | |
119 | } | |
120 | } | |
121 | ||
6a488035 | 122 | /** |
8eedd10a | 123 | * Mark this page as valid for the QFC framework. |
ad37ac8e | 124 | * |
125 | * @param array $data | |
6a488035 | 126 | */ |
00be9182 | 127 | public function validate(&$data) { |
6a488035 TO |
128 | $data['valid'][$this->_name] = TRUE; |
129 | } | |
130 | ||
131 | /** | |
8eedd10a | 132 | * Mark this page as invalid for the QFC framework. |
ad37ac8e | 133 | * |
134 | * @param array $data | |
6a488035 | 135 | */ |
00be9182 | 136 | public function invalidate(&$data) { |
6a488035 TO |
137 | $data['valid'][$this->_name] = NULL; |
138 | } | |
139 | ||
140 | /** | |
f9e31d7f | 141 | * Getter for name. |
6a488035 TO |
142 | * |
143 | * @return string | |
6a488035 | 144 | */ |
00be9182 | 145 | public function getName() { |
6a488035 TO |
146 | return $this->_name; |
147 | } | |
148 | ||
149 | /** | |
f9e31d7f | 150 | * Setter for name. |
54957108 | 151 | * |
152 | * @param string $name | |
6a488035 | 153 | */ |
00be9182 | 154 | public function setName($name) { |
6a488035 TO |
155 | $this->_name = $name; |
156 | } | |
157 | ||
158 | /** | |
f9e31d7f | 159 | * Getter for type. |
6a488035 TO |
160 | * |
161 | * @return int | |
6a488035 | 162 | */ |
00be9182 | 163 | public function getType() { |
6a488035 TO |
164 | return $this->_type; |
165 | } | |
96025800 | 166 | |
6a488035 | 167 | } |