CRM-15683 - CRM_Core_Invoke - Cleanup comments. Remove duplicate code.
[civicrm-core.git] / CRM / Core / State.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
39de6fd5 4 | CiviCRM version 4.6 |
6a488035 5 +--------------------------------------------------------------------+
06b69b18 6 | Copyright CiviCRM LLC (c) 2004-2014 |
6a488035
TO
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
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. |
13 | |
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. |
18 | |
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 +--------------------------------------------------------------------+
26*/
27
28/**
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
33 *
34 * @package CRM
06b69b18 35 * @copyright CiviCRM LLC (c) 2004-2014
6a488035
TO
36 * $Id$
37 *
38 */
39class CRM_Core_State {
40
41 /**
100fef9d 42 * State name
6a488035
TO
43 * @var string
44 */
45 protected $_name;
46
47 /**
100fef9d 48 * This is a combination "OR" of the STATE_* constants defined below
6a488035
TO
49 * @var int
50 */
51 protected $_type;
52
53 /**
100fef9d 54 * The state that precedes this state
c490a46a 55 * @var CRM_Core_State
6a488035
TO
56 */
57 protected $_back;
58
59 /**
100fef9d 60 * The state that succeeds this state
c490a46a 61 * @var CRM_Core_State
6a488035
TO
62 */
63 protected $_next;
64
65 /**
66 * The state machine that this state is part of
c490a46a 67 * @var CRM_Core_StateMachine
6a488035
TO
68 */
69 protected $_stateMachine;
70
71 /**
72 * The different types of states. As we flush out the framework more
73 * we will introduce other conditional / looping states which will
74 * bring in more complexity to the framework. For now, lets keep it simple
75 * @var int
76 */
7da04cde 77 const START = 1, FINISH = 2, SIMPLE = 4;
6a488035
TO
78
79 /**
100fef9d 80 * Constructor
6a488035 81 *
c490a46a
CW
82 * @param string $name internal name of the state
83 * @param int $type state type
84 * @param CRM_Core_State $back state that precedes this state
85 * @param CRM_Core_State $next state that follows this state
86 * @param CRM_Core_StateMachine $stateMachine statemachine that this states belongs to
6a488035 87 *
c490a46a 88 * @return CRM_Core_State
6a488035 89 */
00be9182 90 public function __construct($name, $type, $back, $next, &$stateMachine) {
6a488035
TO
91 $this->_name = $name;
92 $this->_type = $type;
93 $this->_back = $back;
94 $this->_next = $next;
95
96 $this->_stateMachine = &$stateMachine;
97 }
98
00be9182 99 public function debugPrint() {
6a488035
TO
100 CRM_Core_Error::debug("{$this->_name}, {$this->_type}", "{$this->_back}, {$this->_next}");
101 }
102
103 /**
104 * Given an CRM Form, jump to the previous page
105 *
106 * @param object the CRM_Core_Form element under consideration
107 *
108 * @return mixed does a jump to the back state
6a488035 109 */
00be9182 110 public function handleBackState(&$page) {
6a488035
TO
111 if ($this->_type & self::START) {
112 $page->handle('display');
113 }
114 else {
115 $back = &$page->controller->getPage($this->_back);
116 return $back->handle('jump');
117 }
118 }
119
120 /**
121 * Given an CRM Form, jump to the next page
122 *
123 * @param object the CRM_Core_Form element under consideration
124 *
125 * @return mixed does a jump to the nextstate
6a488035 126 */
00be9182 127 public function handleNextState(&$page) {
6a488035
TO
128 if ($this->_type & self::FINISH) {
129 $page->handle('process');
130 }
131 else {
132 $next = &$page->controller->getPage($this->_next);
133 return $next->handle('jump');
134 }
135 }
136
137 /**
138 * Determine the name of the next state. This is useful when we want
139 * to display the navigation labels or potential path
140 *
141 * @return string
6a488035 142 */
00be9182 143 public function getNextState() {
6a488035
TO
144 if ($this->_type & self::FINISH) {
145 return NULL;
146 }
147 else {
148 $next = &$page->controller->getPage($this->_next);
149 return $next;
150 }
151 }
152
153 /**
154 * Mark this page as valid for the QFC framework. This is needed as
155 * we build more advanced functionality into the StateMachine
156 *
157 * @param object the QFC data container
158 *
159 * @return void
6a488035 160 */
00be9182 161 public function validate(&$data) {
6a488035
TO
162 $data['valid'][$this->_name] = TRUE;
163 }
164
165 /**
166 * Mark this page as invalid for the QFC framework. This is needed as
167 * we build more advanced functionality into the StateMachine
168 *
169 * @param object the QFC data container
170 *
171 * @return void
6a488035 172 */
00be9182 173 public function invalidate(&$data) {
6a488035
TO
174 $data['valid'][$this->_name] = NULL;
175 }
176
177 /**
100fef9d 178 * Getter for name
6a488035
TO
179 *
180 * @return string
6a488035 181 */
00be9182 182 public function getName() {
6a488035
TO
183 return $this->_name;
184 }
185
186 /**
100fef9d 187 * Setter for name
6a488035
TO
188 *
189 * @param string
190 *
191 * @return void
6a488035 192 */
00be9182 193 public function setName($name) {
6a488035
TO
194 $this->_name = $name;
195 }
196
197 /**
100fef9d 198 * Getter for type
6a488035
TO
199 *
200 * @return int
6a488035 201 */
00be9182 202 public function getType() {
6a488035
TO
203 return $this->_type;
204 }
205}