ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/trunk/webapp/lib/OpenPNE/Smarty.php @ 4067

Last change on this file since 4067 was 4067, checked in by ogawa, 15 years ago

#1219:絵文字入れた日記の編集時に、編集対象が正常なデータではない修正

File size: 3.8 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7require_once 'Smarty/Smarty.class.php';
8
9class OpenPNE_Smarty extends Smarty
10{
11    var $templates_dir;
12    var $output_charset;
13
14    function OpenPNE_Smarty($configs=array())
15    {
16        $this->Smarty();
17
18        // 設定値をセット
19        foreach ($configs as $key => $value) {
20            if (isset($this->$key)) {
21                $this->$key = $value;
22            }
23        }
24    }
25
26    // extディレクトリ対応 SMARTY->display() ラッパー
27    function ext_display($resource_name, $cache_id = null, $compile_id = null)
28    {
29        $this->load_filter('output', 'pne_display_emoji');
30        $this->register_outputfilter('smarty_outputfilter_pne_display_emoji');
31        // とりあえず携帯用にSJISのみ対応
32        if ($this->output_charset == 'SJIS') {
33            $this->register_outputfilter('smarty_outputfilter_convert_utf82sjis');
34            $this->register_outputfilter('smarty_outputfilter_unescape_emoji');
35            require_once 'OpenPNE/KtaiUA.php';
36            $ktai = new OpenPNE_KtaiUA();
37            if ($ktai->is_docomo()) {
38                $this->register_outputfilter('smarty_outputfilter_add_font4docomo');
39            }
40        }
41        $this->sendContentType();
42        $this->ext_fetch($resource_name, $cache_id, $compile_id, true);
43    }
44
45    function ext_fetch($resource_name, $cache_id = null, $compile_id = null, $display = false)
46    {
47        if ($this->templates_dir) {
48            $place = '';
49            $template = $this->templates_dir . '/' . $resource_name;
50
51            if (!$tpl = $this->ext_search($template, $place)) {
52                return false;
53            }
54            $tpl = 'file:' . $tpl;
55            $cache_id = $compile_id = $place . '_' . str_replace('/', '_', $this->templates_dir);
56        } else {
57            $tpl = $resource_name;
58        }
59
60        return $this->fetch($tpl, $cache_id, $compile_id, $display);
61    }
62
63    function ext_search($path, &$place)
64    {
65        $dft = OPENPNE_MODULES_DIR . '/' . $path;
66        $ext = OPENPNE_MODULES_EXT_DIR . '/' . $path;
67        $biz = OPENPNE_MODULES_BIZ_DIR . '/' . $path;
68
69        if (USE_EXT_DIR && is_readable($ext)) {
70            $place = 'ext';
71            return $ext;
72        } elseif (USE_BIZ_DIR && is_readable($biz)) {
73            $place = 'biz';
74            return $biz;
75        } elseif (is_readable($dft)) {
76            $place = 'dft';
77            return $dft;
78        }
79
80        return false;
81    }
82
83    function setOutputCharset($charset)
84    {
85        $this->output_charset = $charset;
86    }
87
88    function sendContentType()
89    {
90        if ($this->output_charset == 'SJIS') {
91            header('Content-Type: text/html; charset=Shift_JIS');
92        } else {
93            header('Content-Type: text/html; charset=UTF-8');
94        }
95    }
96}
97
98function smarty_outputfilter_convert_utf82sjis($tpl_output, &$smarty)
99{
100    return mb_convert_encoding($tpl_output, 'SJIS-win', 'UTF-8');
101}
102
103function smarty_outputfilter_unescape_emoji($tpl_output, &$smarty)
104{
105    $tpl_output = emoji_unescape($tpl_output, true);
106    $tpl_output = emoji_unescape($tpl_output, false);
107    return $tpl_output;
108}
109
110function smarty_outputfilter_add_font4docomo($tpl_output, &$smarty)
111{
112    // 開始タグは属性値が入る可能性があるので正規表現で置換
113    $pattern_start_tag = array('/(<body.*?>)/', '/(<td.*?>)/');
114    $replacement_start_tag = '$1<font size="2">';
115    $tpl_output = preg_replace($pattern_start_tag, $replacement_start_tag, $tpl_output);
116
117    // 終了タグは単純な置換
118    $pattern_end_tag = array('</body>', '</td>');
119    $replacement_end_tag = array('</font></body>', '</font></td>');
120    $tpl_output = str_replace($pattern_end_tag, $replacement_end_tag, $tpl_output);
121
122    return $tpl_output;
123}
124
125?>
Note: See TracBrowser for help on using the repository browser.