3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.6 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2014 |
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 * Redefine the display action.
32 * @copyright CiviCRM LLC (c) 2004-2014
36 class CRM_Core_QuickForm_Action_Display
extends CRM_Core_QuickForm_Action
{
39 * The template to display the required "red" asterick.
42 static $_requiredTemplate = NULL;
45 * The template to display error messages inline with the form element.
48 static $_errorTemplate = NULL;
53 * @param object $stateMachine
54 * Reference to state machine object.
56 * @return \CRM_Core_QuickForm_Action_Display
58 public function __construct(&$stateMachine) {
59 parent
::__construct($stateMachine);
63 * Processes the request.
65 * @param CRM_Core_Form $page
66 * CRM_Core_Form the current form-page.
67 * @param string $actionName
68 * Current action name, as one Action object can serve multiple actions.
72 public function perform(&$page, $actionName) {
73 $pageName = $page->getAttribute('id');
75 // If the original action was 'display' and we have values in container then we load them
76 // BTW, if the page was invalid, we should later call validate() to get the errors
77 list(, $oldName) = $page->controller
->getActionName();
78 if ('display' == $oldName) {
79 // If the controller is "modal" we should not allow direct access to a page
80 // unless all previous pages are valid (see also bug #2323)
81 if ($page->controller
->isModal() && !$page->controller
->isValid($page->getAttribute('id'))) {
82 $target = &$page->controller
->getPage($page->controller
->findInvalid());
83 return $target->handle('jump');
85 $data = &$page->controller
->container();
86 if (!empty($data['values'][$pageName])) {
87 $page->loadValues($data['values'][$pageName]);
88 $validate = FALSE === $data['valid'][$pageName];
92 // set "common" defaults and constants
93 $page->controller
->applyDefaults($pageName);
94 $page->isFormBuilt() or $page->buildForm();
95 // if we had errors we should show them again
96 if (isset($validate) && $validate) {
99 //will this work generally as TRUE (i.e., return output)
100 //was default, i.e., FALSE
101 return $this->renderForm($page);
105 * Render the page using a custom templating system.
107 * @param CRM_Core_Form $page
108 * The CRM_Core_Form page.
113 public function renderForm(&$page) {
114 $this->_setRenderTemplates($page);
115 $template = CRM_Core_Smarty
::singleton();
116 $form = $page->toSmarty();
118 // Deprecated - use snippet=6 instead of json=1
119 $json = CRM_Utils_Request
::retrieve('json', 'Boolean', CRM_Core_DAO
::$_nullObject);
121 CRM_Utils_JSON
::output($form);
124 $template->assign('form', $form);
125 $template->assign('isForm', 1);
127 $controller = &$page->controller
;
128 // Stop here if we are in embedded mode. Exception: displaying form errors via ajax
129 if ($controller->getEmbedded() && !(!empty($form['errors']) && $controller->_QFResponseType
== 'json')) {
133 $template->assign('action', $page->getAction());
135 $pageTemplateFile = $page->getHookedTemplateFileName();
136 $template->assign('tplFile', $pageTemplateFile);
138 $content = $template->fetch($controller->getTemplateFile());
140 if (!defined('CIVICRM_UF_HEAD') && $region = CRM_Core_Region
::instance('html-header', FALSE)) {
141 CRM_Utils_System
::addHTMLHead($region->render(''));
143 CRM_Utils_System
::appendTPLFile($pageTemplateFile,
145 $page->overrideExtraTemplateFileName()
148 //its time to call the hook.
149 CRM_Utils_Hook
::alterContent($content, 'form', $pageTemplateFile, $page);
151 $print = $controller->getPrint();
156 $html = CRM_Utils_System
::theme($content, $print);
159 if ($controller->_QFResponseType
== 'json') {
160 $response = array('content' => $html);
161 if (!empty($page->ajaxResponse
)) {
162 $response +
= $page->ajaxResponse
;
164 if (!empty($form['errors'])) {
165 $response['status'] = 'form_error';
166 $response['errors'] = $form['errors'];
168 CRM_Core_Page_AJAX
::returnJsonResponse($response);
172 if ($print == CRM_Core_Smarty
::PRINT_PDF
) {
173 CRM_Utils_PDF_Utils
::html2pdf(
175 "{$page->_name}.pdf",
177 array('paper_size' => 'a3', 'orientation' => 'landscape')
183 CRM_Utils_System
::civiExit();
190 * Set the various rendering templates.
192 * @param CRM_Core_Form $page
193 * The CRM_Core_Form page.
197 public function _setRenderTemplates(&$page) {
198 if (self
::$_requiredTemplate === NULL) {
199 $this->initializeTemplates();
202 $renderer = &$page->getRenderer();
204 $renderer->setRequiredTemplate(self
::$_requiredTemplate);
205 $renderer->setErrorTemplate(self
::$_errorTemplate);
209 * Initialize the various templates.
213 public function initializeTemplates() {
214 if (self
::$_requiredTemplate !== NULL) {
218 $config = CRM_Core_Config
::singleton();
220 $templateDir = $config->templateDir
;
221 if (is_array($templateDir)) {
222 $templateDir = array_pop($templateDir);
225 self
::$_requiredTemplate = file_get_contents($templateDir . '/CRM/Form/label.tpl');
226 self
::$_errorTemplate = file_get_contents($templateDir . '/CRM/Form/error.tpl');