Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
06b69b18 | 4 | | CiviCRM version 4.5 | |
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 | * Redefine the display action. | |
30 | * | |
31 | * @package CRM | |
06b69b18 | 32 | * @copyright CiviCRM LLC (c) 2004-2014 |
6a488035 TO |
33 | * $Id$ |
34 | * | |
35 | */ | |
36 | class CRM_Core_QuickForm_Action_Display extends CRM_Core_QuickForm_Action { | |
37 | ||
38 | /** | |
39 | * the template to display the required "red" asterick | |
40 | * @var string | |
41 | */ | |
42 | static $_requiredTemplate = NULL; | |
43 | ||
44 | /** | |
45 | * the template to display error messages inline with the form element | |
46 | * @var string | |
47 | */ | |
48 | static $_errorTemplate = NULL; | |
49 | ||
50 | /** | |
51 | * class constructor | |
52 | * | |
53 | * @param object $stateMachine reference to state machine object | |
54 | * | |
77b97be7 EM |
55 | * @return \CRM_Core_QuickForm_Action_Display |
56 | @access public | |
6a488035 TO |
57 | */ |
58 | function __construct(&$stateMachine) { | |
59 | parent::__construct($stateMachine); | |
60 | } | |
61 | ||
62 | /** | |
63 | * Processes the request. | |
64 | * | |
65 | * @param object $page CRM_Core_Form the current form-page | |
66 | * @param string $actionName Current action name, as one Action object can serve multiple actions | |
67 | * | |
68 | * @return void | |
69 | * @access public | |
70 | */ | |
71 | function perform(&$page, $actionName) { | |
72 | $pageName = $page->getAttribute('id'); | |
73 | ||
74 | // If the original action was 'display' and we have values in container then we load them | |
75 | // BTW, if the page was invalid, we should later call validate() to get the errors | |
76 | list(, $oldName) = $page->controller->getActionName(); | |
77 | if ('display' == $oldName) { | |
78 | // If the controller is "modal" we should not allow direct access to a page | |
79 | // unless all previous pages are valid (see also bug #2323) | |
80 | if ($page->controller->isModal() && !$page->controller->isValid($page->getAttribute('id'))) { | |
81 | $target = &$page->controller->getPage($page->controller->findInvalid()); | |
82 | return $target->handle('jump'); | |
83 | } | |
84 | $data = &$page->controller->container(); | |
85 | if (!empty($data['values'][$pageName])) { | |
86 | $page->loadValues($data['values'][$pageName]); | |
87 | $validate = FALSE === $data['valid'][$pageName]; | |
88 | } | |
89 | } | |
90 | ||
91 | // set "common" defaults and constants | |
92 | $page->controller->applyDefaults($pageName); | |
93 | $page->isFormBuilt() or $page->buildForm(); | |
94 | // if we had errors we should show them again | |
95 | if (isset($validate) && $validate) { | |
96 | $page->validate(); | |
97 | } | |
98 | //will this work generally as TRUE (i.e., return output) | |
99 | //was default, i.e., FALSE | |
100 | return $this->renderForm($page); | |
101 | } | |
102 | ||
103 | /** | |
104 | * render the page using a custom templating | |
105 | * system | |
106 | * | |
dd244018 EM |
107 | * @param object $page the CRM_Core_Form page |
108 | * | |
109 | * @internal param bool $ret should we echo or return output | |
6a488035 TO |
110 | * |
111 | * @return void | |
112 | * @access public | |
113 | */ | |
114 | function renderForm(&$page) { | |
115 | $this->_setRenderTemplates($page); | |
116 | $template = CRM_Core_Smarty::singleton(); | |
117 | $form = $page->toSmarty(); | |
118 | ||
03a7ec8f | 119 | // Deprecated - use snippet=6 instead of json=1 |
6a488035 | 120 | $json = CRM_Utils_Request::retrieve('json', 'Boolean', CRM_Core_DAO::$_nullObject); |
6a488035 | 121 | if ($json) { |
ecdef330 | 122 | CRM_Utils_JSON::output($form); |
6a488035 TO |
123 | } |
124 | ||
125 | $template->assign('form', $form); | |
126 | $template->assign('isForm', 1); | |
127 | ||
128 | $controller = &$page->controller; | |
baa2d85c CW |
129 | // Stop here if we are in embedded mode. Exception: displaying form errors via ajax |
130 | if ($controller->getEmbedded() && !(!empty($form['errors']) && $controller->_QFResponseType == 'json')) { | |
6a488035 TO |
131 | return; |
132 | } | |
133 | ||
134 | $template->assign('action', $page->getAction()); | |
135 | ||
8aac22c8 | 136 | $pageTemplateFile = $page->getHookedTemplateFileName(); |
6a488035 TO |
137 | $template->assign('tplFile', $pageTemplateFile); |
138 | ||
139 | $content = $template->fetch($controller->getTemplateFile()); | |
140 | ||
9dc21423 | 141 | if (!defined('CIVICRM_UF_HEAD') && $region = CRM_Core_Region::instance('html-header', FALSE)) { |
6a488035 TO |
142 | CRM_Utils_System::addHTMLHead($region->render('')); |
143 | } | |
144 | CRM_Utils_System::appendTPLFile($pageTemplateFile, | |
145 | $content, | |
146 | $page->overrideExtraTemplateFileName() | |
147 | ); | |
148 | ||
149 | //its time to call the hook. | |
150 | CRM_Utils_Hook::alterContent($content, 'form', $pageTemplateFile, $page); | |
151 | ||
152 | $print = $controller->getPrint(); | |
153 | if ($print) { | |
154 | $html = &$content; | |
155 | } | |
156 | else { | |
157 | $html = CRM_Utils_System::theme($content, $print); | |
158 | } | |
159 | ||
160 | if ($controller->_QFResponseType == 'json') { | |
5d92a7e7 CW |
161 | $response = array('content' => $html); |
162 | if (!empty($page->ajaxResponse)) { | |
163 | $response += $page->ajaxResponse; | |
164 | } | |
03a7ec8f CW |
165 | if (!empty($form['errors'])) { |
166 | $response['status'] = 'form_error'; | |
167 | $response['errors'] = $form['errors']; | |
6a488035 | 168 | } |
03a7ec8f | 169 | CRM_Core_Page_AJAX::returnJsonResponse($response); |
6a488035 TO |
170 | } |
171 | ||
172 | if ($print) { | |
173 | if ($print == CRM_Core_Smarty::PRINT_PDF) { | |
174 | CRM_Utils_PDF_Utils::html2pdf( | |
175 | $content, | |
176 | "{$page->_name}.pdf", | |
177 | FALSE, | |
178 | array('paper_size' => 'a3', 'orientation' => 'landscape') | |
179 | ); | |
180 | } | |
181 | else { | |
182 | echo $html; | |
183 | } | |
184 | CRM_Utils_System::civiExit(); | |
185 | } | |
186 | ||
187 | print $html; | |
188 | } | |
189 | ||
190 | /** | |
191 | * set the various rendering templates | |
192 | * | |
193 | * @param object $page the CRM_Core_Form page | |
194 | * | |
195 | * @return void | |
196 | * @access public | |
197 | */ | |
198 | function _setRenderTemplates(&$page) { | |
199 | if (self::$_requiredTemplate === NULL) { | |
200 | $this->initializeTemplates(); | |
201 | } | |
202 | ||
203 | $renderer = &$page->getRenderer(); | |
204 | ||
205 | $renderer->setRequiredTemplate(self::$_requiredTemplate); | |
206 | $renderer->setErrorTemplate(self::$_errorTemplate); | |
207 | } | |
208 | ||
209 | /** | |
210 | * initialize the various templates | |
211 | * | |
fd31fa4c | 212 | * @internal param object $page the CRM_Core_Form page |
6a488035 TO |
213 | * |
214 | * @return void | |
215 | * @access public | |
216 | */ | |
217 | function initializeTemplates() { | |
218 | if (self::$_requiredTemplate !== NULL) { | |
219 | return; | |
220 | } | |
221 | ||
222 | $config = CRM_Core_Config::singleton(); | |
223 | ||
224 | $templateDir = $config->templateDir; | |
225 | if (is_array($templateDir)) { | |
226 | $templateDir = array_pop($templateDir); | |
227 | } | |
228 | ||
229 | self::$_requiredTemplate = file_get_contents($templateDir . '/CRM/Form/label.tpl'); | |
230 | self::$_errorTemplate = file_get_contents($templateDir . '/CRM/Form/error.tpl'); | |
231 | } | |
232 | } | |
233 |