The version of vichan running on lainchan.org
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

156 рядки
4.3KB

  1. <?php
  2. /*
  3. * Copyright (c) 2010-2013 Tinyboard Development Group
  4. */
  5. defined('TINYBOARD') or exit;
  6. function permission_to_edit_config_var($varname) {
  7. global $config, $mod;
  8. if (isset($config['mod']['config'][DISABLED])) {
  9. foreach ($config['mod']['config'][DISABLED] as $disabled_var_name) {
  10. $disabled_var_name = explode('>', $disabled_var_name);
  11. if (count($disabled_var_name) == 1)
  12. $disabled_var_name = $disabled_var_name[0];
  13. if ($varname == $disabled_var_name)
  14. return false;
  15. }
  16. }
  17. $allow_only = false;
  18. foreach ($config['mod']['groups'] as $perm => $perm_name) {
  19. if ($perm > $mod['type'])
  20. break;
  21. $allow_only = false;
  22. if (isset($config['mod']['config'][$perm]) && is_array($config['mod']['config'][$perm])) {
  23. foreach ($config['mod']['config'][$perm] as $perm_var_name) {
  24. if ($perm_var_name == '!') {
  25. $allow_only = true;
  26. continue;
  27. }
  28. $perm_var_name = explode('>', $perm_var_name);
  29. if ((count($perm_var_name) == 1 && $varname == $perm_var_name[0]) ||
  30. (is_array($varname) && array_slice($varname, 0, count($perm_var_name)) == $perm_var_name)) {
  31. if ($allow_only)
  32. return true;
  33. else
  34. return false;
  35. }
  36. }
  37. }
  38. }
  39. return !$allow_only;
  40. }
  41. function config_vars() {
  42. global $config;
  43. $config_file = file('inc/config.php', FILE_IGNORE_NEW_LINES);
  44. $conf = array();
  45. $var = array(
  46. 'name' => false,
  47. 'comment' => array(),
  48. 'default' => false,
  49. 'default_temp' => false
  50. );
  51. $temp_comment = false;
  52. $line_no = 0;
  53. foreach ($config_file as $line) {
  54. if ($temp_comment) {
  55. $var['comment'][] = $temp_comment;
  56. $temp_comment = false;
  57. }
  58. if (preg_match('!^\s*// ([^$].*)$!', $line, $matches)) {
  59. if ($var['default'] !== false) {
  60. $line = '';
  61. $temp_comment = $matches[1];
  62. } else {
  63. $var['comment'][] = $matches[1];
  64. }
  65. } else if ($var['default_temp'] !== false) {
  66. $var['default_temp'] .= "\n" . $line;
  67. } elseif (preg_match('!^[\s/]*\$config\[(.+?)\] = (.+?)(;( //.+)?)?$!', $line, $matches)) {
  68. if (preg_match('!^\s*//\s*!', $line)) {
  69. $var['commented'] = true;
  70. }
  71. $var['name'] = explode('][', $matches[1]);
  72. if (count($var['name']) == 1) {
  73. $var['name'] = preg_replace('/^\'(.*)\'$/', '$1', end($var['name']));
  74. } else {
  75. foreach ($var['name'] as &$i)
  76. $i = preg_replace('/^\'(.*)\'$/', '$1', $i);
  77. }
  78. if (isset($matches[3]))
  79. $var['default'] = $matches[2];
  80. else
  81. $var['default_temp'] = $matches[2];
  82. }
  83. if ($var['name'] !== false) {
  84. if ($var['default_temp'])
  85. $var['default'] = $var['default_temp'];
  86. if ($var['default'][0] == '&')
  87. continue; // This is just an alias.
  88. if (!preg_match('/^array|\[\]|function/', $var['default']) && !preg_match('/^Example: /', trim(implode(' ', $var['comment'])))) {
  89. $syntax_error = true;
  90. $temp = eval('$syntax_error = false;return @' . $var['default'] . ';');
  91. if ($syntax_error && $temp === false) {
  92. error('Error parsing config.php (line ' . $line_no . ')!', null, $var);
  93. } elseif (!isset($temp)) {
  94. $var['type'] = 'unknown';
  95. } else {
  96. $var['type'] = gettype($temp);
  97. }
  98. if ($var['type'] == 'integer' && $var['name'][0] == 'mod' &&
  99. (in_array($var['default'], array('JANITOR', 'MOD', 'ADMIN', 'DISABLED')) || mb_strpos($var['default'], "\$config['mod']") === 0)) {
  100. // Permissions variable
  101. $var['permissions'] = true;
  102. }
  103. unset($var['default_temp']);
  104. if (!is_array($var['name']) || (end($var['name']) != '' && !in_array(reset($var['name']), array('stylesheets')))) {
  105. $already_exists = false;
  106. foreach ($conf as $_var) {
  107. if ($var['name'] == $_var['name'])
  108. $already_exists = true;
  109. }
  110. if (!$already_exists && permission_to_edit_config_var($var['name'])) {
  111. foreach ($var['comment'] as &$comment) {
  112. $comment = preg_replace_callback(
  113. '/((?:https?:\/\/|ftp:\/\/|irc:\/\/)[^\s<>()"]+?(?:\([^\s<>()"]*?\)[^\s<>()"]*?)*)((?:\s|<|>|"|\.||\]|!|\?|,|&#44;|&quot;)*(?:[\s<>()"]|$))/',
  114. 'markup_url', $comment);
  115. }
  116. $conf[] = $var;
  117. }
  118. }
  119. }
  120. $var = array(
  121. 'name' => false,
  122. 'comment' => array(),
  123. 'default' => false,
  124. 'default_temp' => false,
  125. 'commented' => false,
  126. 'permissions' => false,
  127. );
  128. }
  129. if (trim($line) === '') {
  130. $var['comment'] = array();
  131. }
  132. $line_no++;
  133. }
  134. return $conf;
  135. }