PageRenderTime 52ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/nukeviet/includes/core/admin_functions.php

http://nuke-viet.googlecode.com/
PHP | 472 lines | 365 code | 57 blank | 50 comment | 41 complexity | 07c8dda1606ea047eb3d458685eeea24 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.1, GPL-2.0
  1. <?php
  2. /**
  3. * @Project NUKEVIET 3.x
  4. * @Author VINADES.,JSC (contact@vinades.vn)
  5. * @copyright 2009
  6. * @createdate 12/31/2009 2:13
  7. */
  8. if( ! defined( 'NV_ADMIN' ) or ! defined( 'NV_MAINFILE' ) ) die( 'Stop!!!' );
  9. /**
  10. * nv_db_mods()
  11. *
  12. * @return
  13. */
  14. function nv_site_mods()
  15. {
  16. global $db, $admin_info;
  17. $site_mods = array();
  18. $sql = "SELECT * FROM `" . NV_MODULES_TABLE . "` ORDER BY `weight` ASC";
  19. $list = nv_db_cache( $sql, '', 'modules' );
  20. foreach( $list as $row )
  21. {
  22. $allowed = false;
  23. if( defined( 'NV_IS_SPADMIN' ) )
  24. {
  25. $allowed = true;
  26. }
  27. elseif( defined( 'NV_IS_ADMIN' ) and ! empty( $row['admins'] ) and in_array( $admin_info['admin_id'], explode( ",", $row['admins'] ) ) )
  28. {
  29. $allowed = true;
  30. }
  31. if( $allowed )
  32. {
  33. $row['title'] = $db->unfixdb( $row['title'] );
  34. $site_mods[$row['title']] = array(
  35. 'module_file' => $db->unfixdb( $row['module_file'] ),
  36. 'module_data' => $db->unfixdb( $row['module_data'] ),
  37. 'custom_title' => empty( $row['admin_title'] ) ? $row['custom_title'] : $row['admin_title'],
  38. 'main_file' => $row['main_file'],
  39. 'admin_file' => $row['admin_file'],
  40. 'theme' => $db->unfixdb( $row['theme'] ),
  41. 'keywords' => $row['keywords'],
  42. 'groups_view' => $row['groups_view'],
  43. 'in_menu' => intval( $row['in_menu'] ),
  44. 'submenu' => intval( $row['submenu'] ),
  45. 'act' => intval( $row['act'] ),
  46. 'admins' => $row['admins'],
  47. 'rss' => $row['rss'] );
  48. }
  49. }
  50. return $site_mods;
  51. }
  52. /**
  53. * nv_groups_list()
  54. *
  55. * @return
  56. */
  57. function nv_groups_list()
  58. {
  59. global $db;
  60. $query = "SELECT `group_id`, `title` FROM `" . NV_GROUPS_GLOBALTABLE . "` ORDER BY `weight`";
  61. $result = $db->sql_query( $query );
  62. $groups = array();
  63. while( $row = $db->sql_fetchrow( $result ) )
  64. {
  65. $groups[$row['group_id']] = $row['title'];
  66. }
  67. return $groups;
  68. }
  69. function nv_save_file_config_global()
  70. {
  71. global $db;
  72. $content_config = "<?php\n\n";
  73. $content_config .= NV_FILEHEAD . "\n\n";
  74. $content_config .= "if ( ! defined( 'NV_MAINFILE' ) ) die( 'Stop!!!' );\n\n";
  75. $sql = "SELECT `config_name`, `config_value` FROM `" . NV_CONFIG_GLOBALTABLE . "` WHERE `lang`='sys' ORDER BY `config_name` ASC";
  76. $result = $db->sql_query( $sql );
  77. while( list( $c_config_name, $c_config_value ) = $db->sql_fetchrow( $result ) )
  78. {
  79. if( ! is_numeric( $c_config_value ) || ( isset( $c_config_value{1} ) and ( $c_config_value{0} == '0' or $c_config_value{0} == '.' ) ) )
  80. {
  81. $content_config .= "\$global_config['" . $c_config_name . "'] = \"" . nv_htmlspecialchars( $c_config_value ) . "\";\n";
  82. }
  83. else
  84. {
  85. $content_config .= "\$global_config['" . $c_config_name . "'] = " . intval( $c_config_value ) . ";\n";
  86. }
  87. }
  88. $content_config .= "\n";
  89. $content_config .= "?>";
  90. $return = file_put_contents( NV_ROOTDIR . "/" . NV_DATADIR . "/config_global.php", $content_config, LOCK_EX );
  91. nv_delete_all_cache();
  92. return $return;
  93. }
  94. /**
  95. * nv_rand_getVersion()
  96. *
  97. * @param mixed $nv_sites
  98. * @param mixed $getContent
  99. * @param bool $is_modules
  100. * @return
  101. */
  102. function nv_rand_getVersion( $nv_sites, $getContent, $is_modules = false )
  103. {
  104. srand( ( float )microtime() * 10000000 );
  105. $rand = array_rand( $nv_sites );
  106. $nv_site = $nv_sites[$rand];
  107. if( $is_modules )
  108. {
  109. $content = $getContent->get( "http://" . $nv_site . "/nukeviet.version.xml?module=all&lang=" . NV_LANG_INTERFACE );
  110. }
  111. else
  112. {
  113. $content = $getContent->get( "http://" . $nv_site . "/nukeviet.version.xml?lang=" . NV_LANG_INTERFACE );
  114. }
  115. unset( $nv_sites[$rand] );
  116. if( empty( $content ) and ! empty( $nv_sites ) )
  117. {
  118. $nv_sites = array_values( $nv_sites );
  119. $content = nv_rand_getVersion( $nv_sites, $getContent, $is_modules );
  120. }
  121. return $content;
  122. }
  123. /**
  124. * nv_geVersion()
  125. *
  126. * @param integer $updatetime
  127. * @return
  128. */
  129. function nv_geVersion( $updatetime = 3600 )
  130. {
  131. global $global_config;
  132. $my_file = NV_ROOTDIR . '/' . NV_CACHEDIR . '/nukeviet.version.' . NV_LANG_INTERFACE . '.xml';
  133. $xmlcontent = false;
  134. $p = NV_CURRENTTIME - $updatetime;
  135. if( file_exists( $my_file ) and @filemtime( $my_file ) > $p )
  136. {
  137. $xmlcontent = simplexml_load_file( $my_file );
  138. }
  139. else
  140. {
  141. include ( NV_ROOTDIR . "/includes/class/geturl.class.php" );
  142. $getContent = new UrlGetContents( $global_config, 6 );
  143. $nv_sites = array( //
  144. 'update.nukeviet.vn', //
  145. 'update2.nukeviet.vn', //
  146. 'update.nukeviet.info', //
  147. 'update2.nukeviet.info' );
  148. $content = nv_rand_getVersion( $nv_sites, $getContent, false );
  149. if( ! empty( $content ) )
  150. {
  151. $xmlcontent = simplexml_load_string( $content );
  152. if( $xmlcontent !== false )
  153. {
  154. file_put_contents( $my_file, $content );
  155. }
  156. }
  157. }
  158. return $xmlcontent;
  159. }
  160. function nv_version_compare( $version1, $version2 )
  161. {
  162. $v1 = explode( '.', $version1 );
  163. $v2 = explode( '.', $version2 );
  164. if( $v1[0] > $v2[0] )
  165. {
  166. return 1;
  167. }
  168. if( $v1[0] < $v2[0] )
  169. {
  170. return - 1;
  171. }
  172. if( $v1[1] > $v2[1] )
  173. {
  174. return 1;
  175. }
  176. if( $v1[1] < $v2[1] )
  177. {
  178. return - 1;
  179. }
  180. if( $v1[2] > $v2[2] )
  181. {
  182. return 1;
  183. }
  184. if( $v1[2] < $v2[2] )
  185. {
  186. return - 1;
  187. }
  188. return 0;
  189. }
  190. /**
  191. * nv_rewrite_change()
  192. *
  193. * @param mixed $rewrite_optional
  194. * @return
  195. */
  196. function nv_rewrite_change( $array_config_global )
  197. {
  198. global $sys_info, $lang_module;
  199. $rewrite_rule = $filename = '';
  200. $endurl = ( $array_config_global['rewrite_endurl'] == $array_config_global['rewrite_exturl'] ) ? nv_preg_quote( $array_config_global['rewrite_endurl'] ) : nv_preg_quote( $array_config_global['rewrite_endurl'] ) . "|" . nv_preg_quote( $array_config_global['rewrite_exturl'] );
  201. if( $sys_info['supports_rewrite'] == "rewrite_mode_iis" )
  202. {
  203. $filename = NV_ROOTDIR . "/web.config";
  204. $rulename = 0;
  205. $rewrite_rule .= "\n";
  206. $rewrite_rule .= " <rule name=\"nv_rule_" . ++$rulename . "\">\n";
  207. $rewrite_rule .= " <match url=\"^\" ignoreCase=\"false\" />\n";
  208. $rewrite_rule .= " <conditions>\n";
  209. $rewrite_rule .= " <add input=\"{REQUEST_FILENAME}\" pattern=\"/robots.txt$\" />\n";
  210. $rewrite_rule .= " </conditions>\n";
  211. $rewrite_rule .= " <action type=\"Rewrite\" url=\"robots.php?action={HTTP_HOST}\" appendQueryString=\"false\" />\n";
  212. $rewrite_rule .= " </rule>\n";
  213. $rewrite_rule .= " <rule name=\"nv_rule_" . ++$rulename . "\">\n";
  214. $rewrite_rule .= " <match url=\"^(.*?)Sitemap\.xml$\" ignoreCase=\"false\" />\n";
  215. $rewrite_rule .= " <action type=\"Rewrite\" url=\"index.php?" . NV_NAME_VARIABLE . "=SitemapIndex\" appendQueryString=\"false\" />\n";
  216. $rewrite_rule .= " </rule>\n";
  217. $rewrite_rule .= " <rule name=\"nv_rule_" . ++$rulename . "\">\n";
  218. $rewrite_rule .= " <match url=\"^(.*?)Sitemap\-([a-z]{2})\.xml$\" ignoreCase=\"false\" />\n";
  219. $rewrite_rule .= " <action type=\"Rewrite\" url=\"index.php?" . NV_LANG_VARIABLE . "={R:2}&amp;" . NV_NAME_VARIABLE . "=SitemapIndex\" appendQueryString=\"false\" />\n";
  220. $rewrite_rule .= " </rule>\n";
  221. $rewrite_rule .= " <rule name=\"nv_rule_" . ++$rulename . "\">\n";
  222. $rewrite_rule .= " <match url=\"^(.*?)Sitemap\-([a-z]{2})\.([a-zA-Z0-9-]+)\.xml$\" ignoreCase=\"false\" />\n";
  223. $rewrite_rule .= " <action type=\"Rewrite\" url=\"index.php?" . NV_LANG_VARIABLE . "={R:2}&amp;" . NV_NAME_VARIABLE . "={R:3}&amp;" . NV_OP_VARIABLE . "=Sitemap\" appendQueryString=\"false\" />\n";
  224. $rewrite_rule .= " </rule>\n";
  225. if( $sys_info['zlib_support'] )
  226. {
  227. $rewrite_rule .= " <rule name=\"nv_rule_" . ++$rulename . "\">\n";
  228. $rewrite_rule .= " <match url=\"^((?!http(s?)|ftp\:\/\/).*)\.(css|js)$\" ignoreCase=\"false\" />\n";
  229. $rewrite_rule .= " <action type=\"Rewrite\" url=\"CJzip.php?file={R:1}.{R:3}\" appendQueryString=\"false\" />\n";
  230. $rewrite_rule .= " </rule>\n";
  231. }
  232. $rewrite_rule .= " <rule name=\"nv_rule_rewrite\">\n";
  233. $rewrite_rule .= " <match url=\"(.*)(" . $endurl . ")$\" ignoreCase=\"false\" />\n";
  234. $rewrite_rule .= " <conditions logicalGrouping=\"MatchAll\">\n";
  235. $rewrite_rule .= " <add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" ignoreCase=\"false\" negate=\"true\" />\n";
  236. $rewrite_rule .= " <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n";
  237. $rewrite_rule .= " </conditions>\n";
  238. $rewrite_rule .= " <action type=\"Rewrite\" url=\"index.php\" />\n";
  239. $rewrite_rule .= " </rule>\n";
  240. $rewrite_rule = nv_rewrite_rule_iis7( $rewrite_rule );
  241. }
  242. elseif( $sys_info['supports_rewrite'] == "rewrite_mode_apache" )
  243. {
  244. $filename = NV_ROOTDIR . "/.htaccess";
  245. $htaccess = "";
  246. $rewrite_rule = "##################################################################################\n";
  247. $rewrite_rule .= "#nukeviet_rewrite_start //Please do not change the contents of the following lines\n";
  248. $rewrite_rule .= "##################################################################################\n\n";
  249. $rewrite_rule .= "#Options +FollowSymLinks\n\n";
  250. $rewrite_rule .= "<IfModule mod_rewrite.c>\n";
  251. $rewrite_rule .= "RewriteEngine On\n";
  252. $rewrite_rule .= "#RewriteBase " . NV_BASE_SITEURL . "\n";
  253. $rewrite_rule .= "RewriteCond %{REQUEST_FILENAME} /robots.txt$ [NC]\n";
  254. $rewrite_rule .= "RewriteRule ^ robots.php?action=%{HTTP_HOST} [L]\n";
  255. $rewrite_rule .= "RewriteRule ^(.*?)Sitemap\.xml$ index.php?" . NV_NAME_VARIABLE . "=SitemapIndex [L]\n";
  256. $rewrite_rule .= "RewriteRule ^(.*?)Sitemap\-([a-z]{2})\.xml$ index.php?" . NV_LANG_VARIABLE . "=$2&" . NV_NAME_VARIABLE . "=SitemapIndex [L]\n";
  257. $rewrite_rule .= "RewriteRule ^(.*?)Sitemap\-([a-z]{2})\.([a-zA-Z0-9-]+)\.xml$ index.php?" . NV_LANG_VARIABLE . "=$2&" . NV_NAME_VARIABLE . "=$3&" . NV_OP_VARIABLE . "=Sitemap [L]\n";
  258. if( $sys_info['zlib_support'] )
  259. {
  260. $rewrite_rule .= "RewriteRule ^((?!http(s?)|ftp\:\/\/).*)\.(css|js)$ CJzip.php?file=$1.$3 [L]\n";
  261. }
  262. $rewrite_rule .= "RewriteCond %{REQUEST_FILENAME} !-f\n";
  263. $rewrite_rule .= "RewriteCond %{REQUEST_FILENAME} !-d\n";
  264. $rewrite_rule .= "RewriteRule (.*)(" . $endurl . ")\$ index.php\n";
  265. $rewrite_rule .= "</IfModule>\n\n";
  266. $rewrite_rule .= "#nukeviet_rewrite_end\n";
  267. $rewrite_rule .= "##################################################################################\n\n";
  268. if( file_exists( $filename ) )
  269. {
  270. $htaccess = @file_get_contents( $filename );
  271. if( ! empty( $htaccess ) )
  272. {
  273. $htaccess = preg_replace( "/[\n]*[\#]+[\n]+\#nukeviet\_rewrite\_start(.*)\#nukeviet\_rewrite\_end[\n]+[\#]+[\n]*/s", "\n", $htaccess );
  274. $htaccess = trim( $htaccess );
  275. }
  276. }
  277. $htaccess .= "\n\n" . $rewrite_rule;
  278. $rewrite_rule = $htaccess;
  279. }
  280. $errormess = false;
  281. if( ! empty( $filename ) and ! empty( $rewrite_rule ) )
  282. {
  283. $savefile = true;
  284. try
  285. {
  286. file_put_contents( $filename, $rewrite_rule, LOCK_EX );
  287. if( ! file_exists( $filename ) or filesize( $filename ) == 0 )
  288. {
  289. $errormess .= sprintf( $lang_module['err_writable'], NV_BASE_SITEURL . $filename );
  290. $savefile = false;
  291. }
  292. }
  293. catch ( exception $e )
  294. {
  295. $savefile = false;
  296. }
  297. if( ! $savefile )
  298. {
  299. $errormess .= sprintf( $lang_module['err_writable'], NV_BASE_SITEURL . basename( $filename ) );
  300. }
  301. }
  302. return $errormess;
  303. }
  304. /**
  305. * nv_rewrite_rule_iis7()
  306. *
  307. * @param mixed $rewrite_rule
  308. * @return
  309. */
  310. function nv_rewrite_rule_iis7( $rewrite_rule = "" )
  311. {
  312. $filename = NV_ROOTDIR . "/web.config";
  313. if( ! class_exists( 'DOMDocument' ) ) return false;
  314. // If configuration file does not exist then we create one.
  315. if( ! file_exists( $filename ) )
  316. {
  317. $fp = fopen( $filename, 'w' );
  318. fwrite( $fp, '<configuration/>' );
  319. fclose( $fp );
  320. }
  321. $doc = new DOMDocument();
  322. $doc->preserveWhiteSpace = false;
  323. if( $doc->load( $filename ) === false ) return false;
  324. $xpath = new DOMXPath( $doc );
  325. // Check the XPath to the rewrite rule and create XML nodes if they do not exist
  326. $xmlnodes = $xpath->query( '/configuration/system.webServer/rewrite/rules' );
  327. if( $xmlnodes->length > 0 )
  328. {
  329. $child = $xmlnodes->item( 0 );
  330. $parent = $child->parentNode;
  331. $parent->removeChild( $child );
  332. }
  333. if( ! empty( $rewrite_rule ) )
  334. {
  335. $rules_node = $doc->createElement( 'rules' );
  336. $xmlnodes = $xpath->query( '/configuration/system.webServer/rewrite' );
  337. if( $xmlnodes->length > 0 )
  338. {
  339. $rewrite_node = $xmlnodes->item( 0 );
  340. $rewrite_node->appendChild( $rules_node );
  341. }
  342. else
  343. {
  344. $rewrite_node = $doc->createElement( 'rewrite' );
  345. $rewrite_node->appendChild( $rules_node );
  346. $xmlnodes = $xpath->query( '/configuration/system.webServer' );
  347. if( $xmlnodes->length > 0 )
  348. {
  349. $system_webServer_node = $xmlnodes->item( 0 );
  350. $system_webServer_node->appendChild( $rewrite_node );
  351. }
  352. else
  353. {
  354. $system_webServer_node = $doc->createElement( 'system.webServer' );
  355. $system_webServer_node->appendChild( $rewrite_node );
  356. $xmlnodes = $xpath->query( '/configuration' );
  357. if( $xmlnodes->length > 0 )
  358. {
  359. $config_node = $xmlnodes->item( 0 );
  360. $config_node->appendChild( $system_webServer_node );
  361. }
  362. else
  363. {
  364. $config_node = $doc->createElement( 'configuration' );
  365. $doc->appendChild( $config_node );
  366. $config_node->appendChild( $system_webServer_node );
  367. }
  368. }
  369. }
  370. $rule_fragment = $doc->createDocumentFragment();
  371. $rule_fragment->appendXML( $rewrite_rule );
  372. $rules_node->appendChild( $rule_fragment );
  373. }
  374. $doc->formatOutput = true;
  375. return $doc->saveXML();
  376. }
  377. /**
  378. * nv_getModVersion()
  379. *
  380. * @param integer $updatetime
  381. * @return
  382. */
  383. function nv_getModVersion( $updatetime = 3600 )
  384. {
  385. global $global_config;
  386. $my_file = NV_ROOTDIR . '/' . NV_CACHEDIR . '/modules.version.' . NV_LANG_INTERFACE . '.xml';
  387. $xmlcontent = false;
  388. $p = NV_CURRENTTIME - $updatetime;
  389. if ( file_exists( $my_file ) and @filemtime( $my_file ) > $p )
  390. {
  391. $xmlcontent = simplexml_load_file( $my_file );
  392. }
  393. else
  394. {
  395. include ( NV_ROOTDIR . "/includes/class/geturl.class.php" );
  396. $getContent = new UrlGetContents( $global_config, 6 );
  397. $nv_sites = array( //
  398. 'update.nukeviet.vn', //
  399. 'update2.nukeviet.vn', //
  400. 'update.nukeviet.info', //
  401. 'update2.nukeviet.info'
  402. );
  403. $content = nv_rand_getVersion( $nv_sites, $getContent, true );
  404. if ( ! empty( $content ) )
  405. {
  406. $xmlcontent = simplexml_load_string( $content );
  407. if ( $xmlcontent !== false )
  408. {
  409. file_put_contents( $my_file, $content );
  410. }
  411. }
  412. }
  413. return $xmlcontent;
  414. }
  415. ?>