3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.5 |
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 +--------------------------------------------------------------------+
31 * @copyright CiviCRM LLC (c) 2004-2014
37 * Fix for bug CRM-392. Not sure if this is the best fix or it will impact
38 * other similar PEAR packages. doubt it
40 if (!class_exists('Smarty')) {
41 require_once 'Smarty/Smarty.class.php';
47 class CRM_Core_Smarty
extends Smarty
{
49 // use print.tpl and bypass the CMS. Civi prints a valid html file
51 // this and all the below bypasses the CMS html surronding it and assumes we will embed this within other pages
53 // sends the generated html to the chosen pdf engine
55 // this options also skips the enclosing form html and does not
56 // generate any of the hidden fields, most notably qfKey
57 // this is typically used in ajax scripts to embed form snippets based on user choices
59 // this prints a complete form and also generates a qfKey, can we replace this with
60 // snippet = 2?? Does the constant _NOFFORM do anything?
62 // Note: added in v 4.3 with the value '6'
63 // Value changed in 4.5 to 'json' for better readability
64 // @see CRM_Core_Page_AJAX::returnJsonResponse
68 * We only need one instance of this object. So we use the singleton
69 * pattern and cache the instance in this variable
74 static private $_singleton = NULL;
79 * @return CRM_Core_Smarty
82 private function __construct() {
83 parent
::__construct();
86 private function initialize( ) {
87 $config = CRM_Core_Config
::singleton();
89 if (isset($config->customTemplateDir
) && $config->customTemplateDir
) {
90 $this->template_dir
= array_merge(array($config->customTemplateDir
),
95 $this->template_dir
= $config->templateDir
;
97 $this->compile_dir
= $config->templateCompileDir
;
99 // check and ensure it is writable
100 // else we sometime suppress errors quietly and this results
101 // in blank emails etc
102 if (!is_writable($this->compile_dir
)) {
103 echo "CiviCRM does not have permission to write temp files in {$this->compile_dir}, Exiting";
107 //Check for safe mode CRM-2207
108 if (ini_get('safe_mode')) {
109 $this->use_sub_dirs
= FALSE;
112 $this->use_sub_dirs
= TRUE;
115 $customPluginsDir = NULL;
116 if (isset($config->customPHPPathDir
)) {
118 $config->customPHPPathDir
. DIRECTORY_SEPARATOR
.
119 'CRM' . DIRECTORY_SEPARATOR
.
120 'Core' . DIRECTORY_SEPARATOR
.
121 'Smarty' . DIRECTORY_SEPARATOR
.
122 'plugins' . DIRECTORY_SEPARATOR
;
123 if (!file_exists($customPluginsDir)) {
124 $customPluginsDir = NULL;
128 if ($customPluginsDir) {
129 $this->plugins_dir
= array($customPluginsDir, $config->smartyDir
. 'plugins', $config->pluginsDir
);
132 $this->plugins_dir
= array($config->smartyDir
. 'plugins', $config->pluginsDir
);
135 // add the session and the config here
136 $session = CRM_Core_Session
::singleton();
138 $this->assign_by_ref('config', $config);
139 $this->assign_by_ref('session', $session);
141 // check default editor and assign to template
142 $defaultWysiwygEditor = $session->get('defaultWysiwygEditor');
143 if (!$defaultWysiwygEditor && !CRM_Core_Config
::isUpgradeMode()) {
144 $defaultWysiwygEditor = CRM_Core_BAO_Setting
::getItem(CRM_Core_BAO_Setting
::SYSTEM_PREFERENCES_NAME
,
147 // For logged-in users, store it in session to reduce db calls
148 if ($session->get('userID')) {
149 $session->set('defaultWysiwygEditor', $defaultWysiwygEditor);
153 $this->assign('defaultWysiwygEditor', $defaultWysiwygEditor);
156 $this->assign('tsLocale', $tsLocale);
158 // CRM-7163 hack: we don’t display langSwitch on upgrades anyway
159 if (!CRM_Core_Config
::isUpgradeMode()) {
160 $this->assign('langSwitch', CRM_Core_I18n
::languages(TRUE));
163 $this->register_function('crmURL', array('CRM_Utils_System', 'crmURL'));
164 $this->load_filter('pre', 'resetExtScope');
166 $this->assign('crmPermissions', new CRM_Core_Smarty_Permissions());
170 * Static instance provider.
172 * Method providing static instance of SmartTemplate, as
173 * in Singleton pattern.
175 static function &singleton() {
176 if (!isset(self
::$_singleton)) {
177 self
::$_singleton = new CRM_Core_Smarty( );
178 self
::$_singleton->initialize( );
180 self
::registerStringResource();
182 return self
::$_singleton;
186 * executes & returns or displays the template results
188 * @param string $resource_name
189 * @param string $cache_id
190 * @param string $compile_id
191 * @param boolean $display
193 * @return bool|mixed|string
195 function fetch($resource_name, $cache_id = NULL, $compile_id = NULL, $display = FALSE) {
196 if (preg_match( '/^(\s+)?string:/', $resource_name)) {
197 $old_security = $this->security
;
198 $this->security
= TRUE;
200 $output = parent
::fetch($resource_name, $cache_id, $compile_id, $display);
201 if (isset($old_security)) {
202 $this->security
= $old_security;
207 function appendValue($name, $value) {
208 $currentValue = $this->get_template_vars($name);
209 if (!$currentValue) {
210 $this->assign($name, $value);
213 if (strpos($currentValue, $value) === FALSE) {
214 $this->assign($name, $currentValue . $value);
219 function clearTemplateVars() {
220 foreach (array_keys($this->_tpl_vars
) as $key) {
221 if ($key == 'config' ||
$key == 'session') {
224 unset($this->_tpl_vars
[$key]);
228 static function registerStringResource() {
229 require_once 'CRM/Core/Smarty/resources/String.php';
230 civicrm_smarty_register_string_resource();
233 function addTemplateDir($path) {
234 if ( is_array( $this->template_dir
) ) {
235 array_unshift( $this->template_dir
, $path );
237 $this->template_dir
= array( $path, $this->template_dir
);