XPressME Integration Kit

Trac

source: trunk/xpressme_integration_kit/class/config_from_xoops.class.php @ 331

Last change on this file since 331 was 331, checked in by toemon, 15 years ago

DB接続情報が取得できない場合の代替え処理実装 fixes#175
モジュールパスにxp-config.phpがある場合、このファイルをrequire_once して値を取得する。

File size: 11.3 KB
Line 
1<?php
2/*
3 * XPressME - WordPress for XOOPS
4 *
5 * @copyright   XPressME Project http://www.toemon.com
6 * @license             http://www.fsf.org/copyleft/gpl.html GNU public license
7 * @author              toemon
8 * @package             module::xpress
9 */
10
11/*
12 * The function to acquire only a set value without calling the XOOPS system is here.
13 */
14class ConfigFromXoops{
15        var $xoops_mainfile_path;
16        var $define_arry = array();     
17        var $external_define_path;
18        var $xp_config_file_path;
19        var $xoops_root_path;
20        var $xoops_url;
21        var $xoops_trust_path;
22        var $xoops_db_prefix;
23        var $xoops_db_name;
24        var $xoops_db_user;
25        var $xoops_db_pass;
26        var $xoops_db_host;
27        var $module_name;
28        var $module_path;
29        var $module_url;
30        var $module_db_prefix;
31        var $module_version;
32        var $module_codename;   
33        var $xoops_upload_path;
34        var $xoops_upload_url;
35        var $xoops_db_salt;
36        var $xoops_salt;
37        var $is_impress;
38        var $impress_db_config_file;
39        var $is_wpmu;
40        var $mu_domain_current_site;
41        var $mu_path_current_site;
42        var $wp_db_version;
43        var $is_wp20;
44       
45        function __constructor()        //for PHP5
46    {
47        $this->ConfigFromXoops();
48       
49    }
50   
51    function xpress_eval($str){
52        $eval_str = '$ret = ' . $str . ' ;';
53        eval($eval_str);
54        return $ret;
55    }
56
57    function ConfigFromXoops()  //for PHP4 constructor
58    { 
59        $this->xoops_mainfile_path = $this->get_xoops_mainfile_path();
60        $this->module_path=dirname(dirname(__FILE__));
61        $this->module_name=basename($this->module_path);
62        $this->xp_config_file_path = $this->module_path . '/xp-config.php';
63       
64        if (file_exists($this->xp_config_file_path)){   // file exists xp-config.php
65                $this->_get_value_by_xp_config_file();
66        } else if (defined('XOOPS_MAINFILE_INCLUDED')){ // loaded XOOPS mainfile.php
67                $this->_get_value_by_xoops_define();
68        } else {  // A set value is acquired from mainfile.php by the pattern match.
69                        if(file_exists($this->xoops_mainfile_path)){
70                        $this->_get_value_by_xoops_mainfile();
71                        // Value 'is_impress' and value 'external_define_path' used in the under
72                        // are set in _get_value_by_xoops_mainfile().
73                                if ($this->is_impress){         // DB Config from Impress CMS impress_db_config file
74                                        $this->_get_value_by_impress_db_config_file();
75                                } else if(!empty($this->external_define_path)){ // file exists mainfile.php in the trust pass.
76                                        $this->_get_value_by_trust_mainfile();
77                                }
78                        } // end of if file_exists
79                       
80                }
81
82                //  define from /settings/definition.inc.php (XCL)  or /include/common.php(2016a-JP)
83                $this->xoops_upload_path = $this->xoops_root_path .'/uploads';
84                $this->xoops_upload_url = $this->xoops_url . '/uploads';
85               
86                if ($this->module_name == 'wordpress')
87                        $this->module_db_prefix =  $this->xoops_db_prefix  . '_wp_';
88                else
89                        $this->module_db_prefix =  $this->xoops_db_prefix  . '_' . $this->module_name . '_';
90               
91                $this->set_module_version();
92                $this->set_wp_version();
93                $this->set_mu_current_site();
94    }
95
96        // A set value is acquired from XOOPS mainfile.php by the pattern match.
97        function _get_value_by_xoops_mainfile(){
98                $array_file = file($this->xoops_mainfile_path);
99                $pattern = '^\s*define\s*\(\s*(\'[^\']+\'|"[^"]+")\s*,\s*([^\s]+.*)\s*\)\s*;';
100                $impress_include_pattern = '^\s*(include_once|include)\s*\(\s*XOOPS_TRUST_PATH\s*.\s*[\'"]([^\'"]+)[\'"]\s*\)';
101                $external_define_file_pattern = '^\s*(include_once|include|require_once|require_once)\s*\((.*mainfile\.php.*)\)';
102                for ($i = 0 ; $i <count($array_file) ; $i++){
103                        if (preg_match('/' . $pattern . '/' ,$array_file[$i],$matchs)){
104                                $keys = $matchs[1];
105                                if (preg_match('/^\'[^\']*\'$/',$keys)) $keys = preg_replace('/\'/', '', $keys);
106                                if (preg_match('/^"[^"]*"$/',$keys)) $keys = preg_replace('/"/', '', $keys);
107                                $key_value = $matchs[2];
108
109                                switch ($keys){
110                                        case  'XOOPS_ROOT_PATH':
111                                                $this->xoops_root_path = $this->xpress_eval($key_value);
112                                                break;
113                                        case  'XOOPS_URL':
114                                                $this->xoops_url = $this->xpress_eval($key_value);
115                                                $this->module_url = $this->xoops_url . '/modules/' . $this->module_name;
116                                                break;
117                                        case  'XOOPS_TRUST_PATH':
118                                                $this->xoops_trust_path = $this->xpress_eval($key_value);
119                                                break;
120                                        case  'XOOPS_DB_PREFIX':
121                                                $this->xoops_db_prefix = $this->xpress_eval($key_value);
122                                                break;
123                                        case  'XOOPS_DB_NAME':
124                                                $this->xoops_db_name = $this->xpress_eval($key_value);
125                                                break;
126                                        case  'XOOPS_DB_USER':
127                                                $this->xoops_db_user = $this->xpress_eval($key_value);
128                                                break;
129                                        case  'XOOPS_DB_PASS':
130                                                $this->xoops_db_pass = $this->xpress_eval($key_value);
131                                                break;
132                                        case  'XOOPS_DB_HOST':
133                                                $this->xoops_db_host = $this->xpress_eval($key_value);
134                                                break;
135                                        case  'XOOPS_DB_SALT':
136                                                $this->xoops_db_salt = $this->xpress_eval($key_value);
137                                                break;
138                                        case  'XOOPS_SALT':
139                                                $this->xoops_salt = $this->xpress_eval($key_value);
140                                                break;
141                                        default :
142                                               
143                                }       // end of switch
144                        }        // end of if preg_match
145                       
146                        // Check External Define File
147                        if (preg_match('/' . $external_define_file_pattern . '/' ,$array_file[$i],$trust_main_matchs)){
148                                $include_path = $this->xpress_eval($trust_main_matchs[2]);
149                                if (file_exists($include_path))
150                                        $this->external_define_path = $include_path;
151                        }
152                       
153                        // Check ImpressCMS
154                        if (preg_match('/' . $impress_include_pattern . '/' ,$array_file[$i],$impres_matchs)){
155                                $this->is_impress = true;
156                                $this->impress_db_config_file = $this->xoops_trust_path . $impres_matchs[2];
157                        }
158                } // end of for loop           
159        }
160        // A set value is acquired from XOOPS define value .
161        function _get_value_by_xoops_define(){
162                $this->xoops_root_path = XOOPS_ROOT_PATH;
163                $this->xoops_url = XOOPS_URL;
164                $this->module_url = $this->xoops_url . '/modules/' . $this->module_name;
165                if(defined('XOOPS_TRUST_PATH')) $this->xoops_trust_path = XOOPS_TRUST_PATH; else $this->xoops_trust_path = '';
166                $this->xoops_db_prefix = XOOPS_DB_PREFIX;
167                $this->xoops_db_name = XOOPS_DB_NAME;
168                $this->xoops_db_user = XOOPS_DB_USER;
169                $this->xoops_db_pass = XOOPS_DB_PASS;
170                $this->xoops_db_host = XOOPS_DB_HOST;
171                if(defined('XOOPS_DB_SALT')) $this->xoops_db_salt = XOOPS_DB_SALT; else $this->xoops_db_salt = '';
172                if(defined('XOOPS_SALT')) $this->xoops_salt = XOOPS_SALT; else $this->xoops_salt = '';
173        }
174        // A set value is acquired from xp-config.php .
175        function _get_value_by_xp_config_file(){
176            require_once($this->xp_config_file_path);
177                $this->xoops_root_path =XP_XOOPS_ROOT_PATH;
178                $this->xoops_url = XP_XOOPS_URL;
179                $this->module_url = $this->xoops_url . '/modules/' . $this->module_name;
180                if(defined('XP_XOOPS_TRUST_PATH')) $this->xoops_trust_path = XP_XOOPS_TRUST_PATH; else $this->xoops_trust_path = '';
181                $this->xoops_db_prefix = XP_XOOPS_DB_PREFIX;
182                $this->xoops_db_name = XP_XOOPS_DB_NAME;
183                $this->xoops_db_user = XP_XOOPS_DB_USER;
184                $this->xoops_db_pass = XP_XOOPS_DB_PASS;
185                $this->xoops_db_host = XP_XOOPS_DB_HOST;
186                if(defined('XP_XOOPS_DB_SALT')) $this->xoops_db_salt = XP_XOOPS_DB_SALT; else $this->xoops_db_salt = '';
187                if(defined('XOOPS_SALT')) $this->xoops_salt = XP_XOOPS_SALT; else $this->xoops_salt = '';
188        }
189       
190        // A set value is acquired from config file in the trust pass by the pattern match.
191    function _get_value_by_impress_db_config_file(){
192                if(file_exists($this->impress_db_config_file)){
193                        $array_file = file($this->impress_db_config_file);
194                        $pattern = '^\s*define\s*\(\s*(\'[^\']+\'|"[^"]+")\s*,\s*(\'[^\']*\'|"[^"]*"|[^\'"])\s*\)\s*;';
195                        for ($i = 0 ; $i <count($array_file) ; $i++){
196                                if (preg_match('/' . $pattern . '/' ,$array_file[$i],$matchs)){
197                                        $keys = $matchs[1];
198                                        if (preg_match('/^\'[^\']*\'$/',$keys)) $keys = preg_replace('/\'/', '', $keys);
199                                        if (preg_match('/^"[^"]*"$/',$keys)) $keys = preg_replace('/"/', '', $keys);
200                                        $key_value = $matchs[2];
201
202                                        switch ($keys){
203                                                case  'SDATA_DB_SALT':
204                                                        $this->xoops_db_salt = $this->xpress_eval($key_value);
205                                                        break;
206                                                case  'SDATA_DB_PREFIX':
207                                                        $this->xoops_db_prefix = $this->xpress_eval($key_value);
208                                                        break;
209                                                case  'SDATA_DB_NAME':
210                                                        $this->xoops_db_name = $this->xpress_eval($key_value);
211                                                        break;
212                                                case  'SDATA_DB_USER':
213                                                        $this->xoops_db_user = $this->xpress_eval($key_value);
214                                                        break;
215                                                case  'SDATA_DB_PASS':
216                                                        $this->xoops_db_pass = $this->xpress_eval($key_value);
217                                                        break;
218                                                case  'SDATA_DB_HOST':
219                                                        $this->xoops_db_host = $this->xpress_eval($key_value);
220                                                        break;
221                                                default :
222                                                       
223                                        }       // end of switch
224                                }
225                        } // end of for
226                } // end of if file_exists
227    }
228   
229    function _get_value_by_trust_mainfile(){
230                // When the definition is written in mainfile.php in the trust passing
231                if(file_exists($this->external_define_path)){
232                        require_once($this->external_define_path);
233                       
234                        $this->xoops_root_path = XOOPS_ROOT_PATH;
235                $this->xoops_url = XOOPS_URL;
236                $this->module_url = $this->xoops_url . '/modules/' . $this->module_name;
237                if(defined('XOOPS_TRUST_PATH')) $this->xoops_trust_path = XOOPS_TRUST_PATH; else $this->xoops_trust_path = '';
238                $this->xoops_db_prefix = XOOPS_DB_PREFIX;
239                $this->xoops_db_name = XOOPS_DB_NAME;
240                $this->xoops_db_user = XOOPS_DB_USER;
241                $this->xoops_db_pass = XOOPS_DB_PASS;
242                $this->xoops_db_host = XOOPS_DB_HOST;
243                        if(defined('XOOPS_DB_SALT')) $this->xoops_db_salt = XOOPS_DB_SALT; else $this->xoops_db_salt = '';
244                        if(defined('XOOPS_SALT')) $this->xoops_salt = XOOPS_SALT; else $this->xoops_salt = '';
245                } // end of if file_exists
246        }       
247   
248    function get_xoops_mainfile_path(){
249        return dirname(dirname(dirname(dirname(__FILE__)))) . '/mainfile.php';
250    }
251   
252    // set XPressME module virsion and codename from xoops_versions.php
253    function set_module_version(){
254        $xoops_version_file = dirname(dirname(__FILE__)) . '/xoops_version.php';
255                if(file_exists($xoops_version_file)){
256                        $version_file = file($xoops_version_file);
257                        $version_pattern = '^\s*(\$modversion\[\s*\'version\'\s*\])\s*=\s*[\'"]([^\'"]*)[\'"]';
258                        $codename_pattern = '^\s*(\$modversion\[\s*\'codename\'\s*\])\s*=\s*[\'"]([^\'"]*)[\'"]';
259                        $version_found = false;
260                        $codename_found = false;
261                        for ($i = 0 ; $i <count($version_file) ; $i++){
262                                if (preg_match( "/$version_pattern/", $version_file[$i] ,$v_matches )){
263                                        $this->module_version = $v_matches[2];
264                                        $version_found = true;
265                                }
266                                if (preg_match( "/$codename_pattern/", $version_file[$i] ,$c_matches )){
267                                        $this->module_codename = $c_matches[2];
268                                        $codename_found = true;
269                                }
270                                if ( $version_found && $codename_found ) break;
271                        }
272                }
273    }
274   
275    function set_wp_version(){
276        include dirname(dirname(__FILE__)) . '/wp-includes/version.php';
277       
278        if (empty($wpmu_version))
279                $this->is_wpmu  = false;
280        else
281                $this->is_wpmu  = true;
282       
283        $this->wp_db_version = $wp_db_version;
284        if ($wp_db_version == 3441)
285                        $this->is_wp20 = true;
286                else
287                        $this->is_wp20 = false;
288               
289    }
290   
291    function set_mu_current_site(){
292        $pattern = 'http:\/\/([^\/]*).*';
293        if (preg_match('/' . $pattern . '/' ,$this->xoops_url,$matchs)){
294                                $this->mu_domain_current_site = $matchs[1];
295                }
296               
297        $pattern = 'http:\/\/[^\/]*(\/.*)';
298        if (preg_match('/' . $pattern . '/' ,$this->module_url,$matchs)){
299                                $this->mu_path_current_site = $matchs[1] . '/';
300                }
301    }
302   
303}
304?>
Note: See TracBrowser for help on using the repository browser.