Commit | Line | Data |
---|---|---|
6a488035 TO |
1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
232624b1 | 4 | | CiviCRM version 4.4 | |
6a488035 TO |
5 | +--------------------------------------------------------------------+ |
6 | | Copyright CiviCRM LLC (c) 2004-2013 | | |
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 | |
32 | * @copyright CiviCRM LLC (c) 2004-2013 | |
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 | * | |
55 | * @return object | |
56 | * @access public | |
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 | * | |
107 | * @param object $page the CRM_Core_Form page | |
108 | * @param boolean $ret should we echo or return output | |
109 | * | |
110 | * @return void | |
111 | * @access public | |
112 | */ | |
113 | function renderForm(&$page) { | |
114 | $this->_setRenderTemplates($page); | |
115 | $template = CRM_Core_Smarty::singleton(); | |
116 | $form = $page->toSmarty(); | |
117 | ||
03a7ec8f | 118 | // Deprecated - use snippet=6 instead of json=1 |
6a488035 | 119 | $json = CRM_Utils_Request::retrieve('json', 'Boolean', CRM_Core_DAO::$_nullObject); |
6a488035 TO |
120 | if ($json) { |
121 | echo json_encode($form); | |
122 | CRM_Utils_System::civiExit(); | |
123 | } | |
124 | ||
125 | $template->assign('form', $form); | |
126 | $template->assign('isForm', 1); | |
127 | ||
128 | $controller = &$page->controller; | |
129 | if ($controller->getEmbedded()) { | |
130 | return; | |
131 | } | |
132 | ||
133 | $template->assign('action', $page->getAction()); | |
134 | ||
8aac22c8 | 135 | $pageTemplateFile = $page->getHookedTemplateFileName(); |
6a488035 TO |
136 | $template->assign('tplFile', $pageTemplateFile); |
137 | ||
138 | $content = $template->fetch($controller->getTemplateFile()); | |
139 | ||
9dc21423 | 140 | if (!defined('CIVICRM_UF_HEAD') && $region = CRM_Core_Region::instance('html-header', FALSE)) { |
6a488035 TO |
141 | CRM_Utils_System::addHTMLHead($region->render('')); |
142 | } | |
143 | CRM_Utils_System::appendTPLFile($pageTemplateFile, | |
144 | $content, | |
145 | $page->overrideExtraTemplateFileName() | |
146 | ); | |
147 | ||
148 | //its time to call the hook. | |
149 | CRM_Utils_Hook::alterContent($content, 'form', $pageTemplateFile, $page); | |
150 | ||
151 | $print = $controller->getPrint(); | |
152 | if ($print) { | |
153 | $html = &$content; | |
154 | } | |
155 | else { | |
156 | $html = CRM_Utils_System::theme($content, $print); | |
157 | } | |
158 | ||
159 | if ($controller->_QFResponseType == 'json') { | |
5d92a7e7 CW |
160 | $response = array('content' => $html); |
161 | if (!empty($page->ajaxResponse)) { | |
162 | $response += $page->ajaxResponse; | |
163 | } | |
03a7ec8f CW |
164 | if (!empty($form['errors'])) { |
165 | $response['status'] = 'form_error'; | |
166 | $response['errors'] = $form['errors']; | |
6a488035 | 167 | } |
03a7ec8f | 168 | CRM_Core_Page_AJAX::returnJsonResponse($response); |
6a488035 TO |
169 | } |
170 | ||
171 | if ($print) { | |
172 | if ($print == CRM_Core_Smarty::PRINT_PDF) { | |
173 | CRM_Utils_PDF_Utils::html2pdf( | |
174 | $content, | |
175 | "{$page->_name}.pdf", | |
176 | FALSE, | |
177 | array('paper_size' => 'a3', 'orientation' => 'landscape') | |
178 | ); | |
179 | } | |
180 | else { | |
181 | echo $html; | |
182 | } | |
183 | CRM_Utils_System::civiExit(); | |
184 | } | |
185 | ||
186 | print $html; | |
187 | } | |
188 | ||
189 | /** | |
190 | * set the various rendering templates | |
191 | * | |
192 | * @param object $page the CRM_Core_Form page | |
193 | * | |
194 | * @return void | |
195 | * @access public | |
196 | */ | |
197 | function _setRenderTemplates(&$page) { | |
198 | if (self::$_requiredTemplate === NULL) { | |
199 | $this->initializeTemplates(); | |
200 | } | |
201 | ||
202 | $renderer = &$page->getRenderer(); | |
203 | ||
204 | $renderer->setRequiredTemplate(self::$_requiredTemplate); | |
205 | $renderer->setErrorTemplate(self::$_errorTemplate); | |
206 | } | |
207 | ||
208 | /** | |
209 | * initialize the various templates | |
210 | * | |
211 | * @param object $page the CRM_Core_Form page | |
212 | * | |
213 | * @return void | |
214 | * @access public | |
215 | */ | |
216 | function initializeTemplates() { | |
217 | if (self::$_requiredTemplate !== NULL) { | |
218 | return; | |
219 | } | |
220 | ||
221 | $config = CRM_Core_Config::singleton(); | |
222 | ||
223 | $templateDir = $config->templateDir; | |
224 | if (is_array($templateDir)) { | |
225 | $templateDir = array_pop($templateDir); | |
226 | } | |
227 | ||
228 | self::$_requiredTemplate = file_get_contents($templateDir . '/CRM/Form/label.tpl'); | |
229 | self::$_errorTemplate = file_get_contents($templateDir . '/CRM/Form/error.tpl'); | |
230 | } | |
231 | } | |
232 |