3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2017 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
29 * The basic state element. Each state element is linked to a form and
30 * represents the form in the transition diagram. We use the state to
31 * determine what action to take on various user input. Actions include
32 * things like going back / stepping forward / process etc
35 * @copyright CiviCRM LLC (c) 2004-2017
37 class CRM_Core_State
{
46 * This is a combination "OR" of the STATE_* constants defined below
52 * The state that precedes this state.
58 * The state that succeeds this state.
64 * The state machine that this state is part of.
65 * @var CRM_Core_StateMachine
67 protected $_stateMachine;
70 * The different types of states. As we flush out the framework more
71 * we will introduce other conditional / looping states which will
72 * bring in more complexity to the framework. For now, lets keep it simple
75 const START
= 1, FINISH
= 2, SIMPLE
= 4;
81 * Internal name of the state.
84 * @param CRM_Core_State $back
85 * State that precedes this state.
86 * @param CRM_Core_State $next
87 * State that follows this state.
88 * @param CRM_Core_StateMachine $stateMachine
89 * Statemachine that this states belongs to.
91 * @return CRM_Core_State
93 public function __construct($name, $type, $back, $next, &$stateMachine) {
99 $this->_stateMachine
= &$stateMachine;
102 public function debugPrint() {
103 CRM_Core_Error
::debug("{$this->_name}, {$this->_type}", "{$this->_back}, {$this->_next}");
107 * Given an CRM Form, jump to the previous page.
109 * @param CRM_Core_Page $page
112 * does a jump to the back state
114 public function handleBackState(&$page) {
115 if ($this->_type
& self
::START
) {
116 $page->handle('display');
119 $back = &$page->controller
->getPage($this->_back
);
120 return $back->handle('jump');
125 * Given an CRM Form, jump to the next page.
127 * @param CRM_Core_Page $page
130 * Does a jump to the nextstate
132 public function handleNextState(&$page) {
133 if ($this->_type
& self
::FINISH
) {
134 $page->handle('process');
137 $next = &$page->controller
->getPage($this->_next
);
138 return $next->handle('jump');
143 * Determine the name of the next state.
145 * This is useful when we want to display the navigation labels or potential path.
149 public function getNextState() {
150 if ($this->_type
& self
::FINISH
) {
154 $next = &$page->controller
->getPage($this->_next
);
160 * Mark this page as valid for the QFC framework.
164 public function validate(&$data) {
165 $data['valid'][$this->_name
] = TRUE;
169 * Mark this page as invalid for the QFC framework.
173 public function invalidate(&$data) {
174 $data['valid'][$this->_name
] = NULL;
182 public function getName() {
189 * @param string $name
191 public function setName($name) {
192 $this->_name
= $name;
200 public function getType() {