Smarty compiller adapter for Mailbot Project

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<?php
/**
* Smarty compiller adapter
* Note: PHP4 compatible
*
* @author Sasha Molodtsov <amolodtsov@devz.ru>
* @name Adapter_Compiller_Smarty
* @category Mailbot
* @package Adapter_Compiller
* @subpackage Smarty
* @uses Adapter_Compiller_Abstract
*/
require_once('Abstract.php');
class Adapter_Compiller_Smarty extends Adapter_Compiller_Abstract
{
var $__Smarty = null;
var $__plugginsRegistered = false;
var $__mysql = null;
function Adapter_Compiller_Smarty()
{
require_once('system/Mailbot/External/Smarty/Smarty.class.php');
$this->__Smarty = new Smarty();
//$this->__Smarty->register_postfilter(array(&$this, '__smarty_save_compile'));
$this->__Smarty->compile_dir = 'system/Mailbot/tmp/blocks_compile/';
$this->__Smarty->compile_check = true;
//$this->__Smarty->force_compile = true;
//$this->__Smarty->debugging = true;
}
/**
* Set the database adapter
*
* @param Adapter_Db_Abstract $db
* @return bool
*/
function setDb(&$db)
{
if(is_object($db))
{
$this->__mysql = $db;
return true;
}else{
return false;
}
}
/**
* gets database adapter
*
* @return Adapter_Db_Abstract
*/
function getDb()
{
if(is_object($this->__mysql))
{
return $this->__mysql;
}else{
die('DB ADAPTER IS NOT SET IN '.__METHOD__);
}
}
/**
* Регистрируем плаггины, только если они не были зарегистрированны и существует коннект к базе
*
* @return bool
*/
function __registerPluggins()
{
if(is_object($this->__mysql) && $this->__plugginsRegistered === false)
{
$this->__Smarty->register_resource("db",
array(&$this,
"__smarty_db_get_template",
"__smarty_db_get_timestamp",
"__smarty_db_get_secure",
"__smarty_db_get_trusted")
);
$this->__plugginsRegistered = true;
}
return true;
}
/**
* назначаем переменные блоков
*
* @param string $key
* @param mixed $val
*/
function assign($key, $val)
{
$this->__Smarty->assign($key,$val);
}
/**
* Очищает массив, одну или все назначенные переменные смарти.
*
* @param string|array $key - может быть массивом или строкой
* @return bool
*/
function clearAssigned($key = null)
{
if($key)
{
$this->__Smarty->clear_assign($key);
}else{
$this->__Smarty->clear_all_assign();
}
return true;
}
/**
* парсим блок и возвращаем его содержимое
*
* @param string $name - название блока
* @return string
*/
function fetch($name)
{
//$smarty = $this->getSmarty();
$this->__registerPluggins();
return $this->__Smarty->fetch('db:'.$name);
}
/**
* выводим блок на экран
*
* @param string $name - название блока
* @return string
*/
function display($name)
{
//$smarty = $this->getSmarty();
$this->__registerPluggins();
return $this->__Smarty->display('db:'.$name);
}
function __smarty_save_compile($tpl_source, &$smarty)
{
if($this->__compile == null)
{
$this->__compile = $tpl_source;
}
return $tpl_source;
}
// код в вашем скрипте
function __smarty_db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
// обращаемся к базе, запрашиваем код шаблона,
// перегружаем его в $tpl_source
$sql = $this->getDb();
if ($row = $sql->fetch("SELECT body FROM mailbot_block WHERE name='$tpl_name'"))
{
$tpl_source = $row['body'];
return true;
} else {
return false;
}
}
function __smarty_db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
// обращаемся к базе, запрашиваем поле $tpl_timestamp.
$sql = $this->getDb();
if ($row = $sql->fetch("SELECT update_ts FROM mailbot_block WHERE name='$tpl_name'"))
{
$tpl_timestamp = strtotime($row['update_ts']);
return true;
} else {
return false;
}
}
function __smarty_db_get_secure($tpl_name, &$smarty_obj)
{
// предполагаем, что наши шаблоны совершенно безопасны
return true;
}
function __smarty_db_get_trusted($tpl_name, &$smarty_obj)
{
// не используется для шаблонов
}
}