diff options
Diffstat (limited to 'phpBB/develop')
-rwxr-xr-x | phpBB/develop/collect_cache_stats.sh | 3 | ||||
-rw-r--r-- | phpBB/develop/file_structure.txt | 33 | ||||
-rwxr-xr-x | phpBB/develop/fix_files.sh | 29 | ||||
-rw-r--r-- | phpBB/develop/generate_utf_casefold.php | 154 | ||||
-rw-r--r-- | phpBB/develop/generate_utf_confusables.php | 238 | ||||
-rw-r--r-- | phpBB/develop/generate_utf_tables.php | 570 | ||||
-rw-r--r-- | phpBB/develop/nuke-db.php | 58 | ||||
-rw-r--r-- | phpBB/develop/posting-api.php | 854 | ||||
-rw-r--r-- | phpBB/develop/regex.php | 83 | ||||
-rw-r--r-- | phpBB/develop/repair_bots.php | 149 | ||||
-rw-r--r-- | phpBB/develop/search_fill.php | 129 | ||||
-rw-r--r-- | phpBB/develop/unicode_testing.php | 119 | ||||
-rw-r--r-- | phpBB/develop/utf_normalizer_test.php | 389 |
13 files changed, 0 insertions, 2808 deletions
diff --git a/phpBB/develop/collect_cache_stats.sh b/phpBB/develop/collect_cache_stats.sh deleted file mode 100755 index 5bb31c5173..0000000000 --- a/phpBB/develop/collect_cache_stats.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -DIR=$(dirname "$0")/../cache; -cat "$DIR/sql_*.php" | grep '/* SELECT' | sed 's,/\* ,,;s, \*/,,' | sort diff --git a/phpBB/develop/file_structure.txt b/phpBB/develop/file_structure.txt deleted file mode 100644 index 5f40305542..0000000000 --- a/phpBB/develop/file_structure.txt +++ /dev/null @@ -1,33 +0,0 @@ -File structure grouped by filesystem: - -/includes/core/ Core -/includes/api/ API -/includes/acm/ Cache -/includes/auth/ Authentication -/includes/bbcode/ BBCode -/includes/captcha/ Captcha -/includes/db/ DBAL -/includes/search/ Search -/includes/utf/ UTF8-specific files/classes - -/includes/classes/ Collection of single classes which we do not want to put into a separate directory. Although later it would be nice to have all of them in one "location". - acl.php: ACL/permission class. - cache.php: Static class for obtaining cached items/arrays - session.php: The session class used for managing sessions. - template.php, template_compile.php: The template engine - user.php: The user object, handling user-based session and user-specific setups. It defines the users workspace. - -/includes/libraries/ Collection of external and "adjusted" libraries we use and do not constitute one "system" in phpBB. -/includes/libraries/diff/ Diff System (Text_Diff-1.1.0 - http://pear.php.net/package/Text_Diff/) - Used By: Updater, -/includes/libraries/sftp/ SFTP (http://phpseclib.sourceforge.net/) - Used By: Transfer Class, - - -/modules/ Directory holding directories/files for the defined module sections (ucp, mcp, acp, etc.) -/plugins/ Plugins for phpBB (Hooks are now plugins btw... includes/hooks no longer exists) - -/develop/ Internal helper files for development. Only present in SVN -/docs/ Documentation, Documents, License file, Coding Guidelines - -/cache/ Cache directory for storing files. Needs to be writeable -/store/ Store directory for storing backup files and temporary files. Needs to be writeable -/files/ Files directory for storing attachments and uploaded files. Needs to be writeable diff --git a/phpBB/develop/fix_files.sh b/phpBB/develop/fix_files.sh deleted file mode 100755 index 782418f504..0000000000 --- a/phpBB/develop/fix_files.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -# -# Remove all those annoying ^M characters that Winblows editor's like to add -# from all files in the current directory and all subdirectories. -# -# Written by: Jonathan Haase. -# -# UPDATE: 7/31/2001: fix so that it doesn't touch things in the images directory -# -# UPDATE: 12/15/2003: Fix so that it doesn't touch any "non-text" files -# - -find . > FILELIST.$$ -grep -sv FILELIST FILELIST.$$ > FILELIST2.$$ -grep -sv $(basename $0) FILELIST2.$$ > FILELIST.$$ -grep -sv "^\.$" FILELIST.$$ > FILELIST2.$$ -file -f FILELIST2.$$ |grep text | sed -e 's/^\([^\:]*\)\:.*$/\1/' > FILELIST -file -f FILELIST2.$$ |grep -sv text | sed -e 's/^\([^\:]*\)\:.*$/Not Modifying file: \1/' -rm FILELIST2.$$ -rm FILELIST.$$ - -for i in $(cat FILELIST); do - if [ -f $i ]; then - sed -e s/ -//g $i > $i.tmp - mv $i.tmp $i - fi -done -rm FILELIST diff --git a/phpBB/develop/generate_utf_casefold.php b/phpBB/develop/generate_utf_casefold.php deleted file mode 100644 index bbf0a0a75d..0000000000 --- a/phpBB/develop/generate_utf_casefold.php +++ /dev/null @@ -1,154 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @version $Id$ -* @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License -* -*/ - -if (php_sapi_name() != 'cli') -{ - die("This program must be run from the command line.\n"); -} - -// -// Security message: -// -// This script is potentially dangerous. -// Remove or comment the next line (die(".... ) to enable this script. -// Do NOT FORGET to either remove this script or disable it after you have used it. -// -die("Please read the first lines of this script for instructions on how to enable it"); - -set_time_limit(0); - -define('IN_PHPBB', true); -define('PHPBB_ROOT_PATH', './../'); -define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1)); - -echo "Checking for required files\n"; -download('http://unicode.org/Public/UNIDATA/CaseFolding.txt'); -echo "\n"; - - -/** -* Load the CaseFolding table -*/ -echo "Loading CaseFolding\n"; -$unidata = file_get_contents('CaseFolding.txt'); - - -function utf8_chr($cp) -{ - if ($cp > 0xFFFF) - { - return chr(0xF0 | ($cp >> 18)) . chr(0x80 | (($cp >> 12) & 0x3F)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F)); - } - else if ($cp > 0x7FF) - { - return chr(0xE0 | ($cp >> 12)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F)); - } - else if ($cp > 0x7F) - { - return chr(0xC0 | ($cp >> 6)) . chr(0x80 | ($cp & 0x3F)); - } - else - { - return chr($cp); - } -} - -preg_match_all('/^([0-9A-F]+); ([CFS]); ([0-9A-F]+(?: [0-9A-F]+)*);/im', $unidata, $array, PREG_SET_ORDER); - -$uniarray = array(); - -foreach ($array as $value) -{ - $uniarray[$value[2]][utf8_chr(hexdec((string)$value[1]))] = implode(array_map('utf8_chr', array_map('hexdec', explode(' ', $value[3])))); -} - -foreach ($uniarray as $idx => $contents) -{ - echo "Writing to case_fold_$idx." . PHP_EXT . "\n"; - $fp = fopen(PHPBB_ROOT_PATH . 'includes/utf/data/case_fold_' . strtolower($idx) . '.' . PHP_EXT, 'wb'); - fwrite($fp, '<?php return ' . my_var_export($contents) . ';'); - fclose($fp); -} - -/** -* Return a parsable string representation of a variable -* -* This is function is limited to array/strings/integers -* -* @param mixed $var Variable -* @return string PHP code representing the variable -*/ -function my_var_export($var) -{ - if (is_array($var)) - { - $lines = array(); - - foreach ($var as $k => $v) - { - $lines[] = my_var_export($k) . '=>' . my_var_export($v); - } - - return 'array(' . implode(',', $lines) . ')'; - } - else if (is_string($var)) - { - return "'" . str_replace(array('\\', "'"), array('\\\\', "\\'"), $var) . "'"; - } - else - { - return $var; - } -} - -/** -* Download a file to the develop/ dir -* -* @param string $url URL of the file to download -* @return void -*/ -function download($url) -{ - if (file_exists(PHPBB_ROOT_PATH . 'develop/' . basename($url))) - { - return; - } - - echo 'Downloading from ', $url, ' '; - - if (!$fpr = fopen($url, 'rb')) - { - die("Can't download from $url\nPlease download it yourself and put it in the develop/ dir, kthxbai"); - } - - if (!$fpw = fopen(PHPBB_ROOT_PATH . 'develop/' . basename($url), 'wb')) - { - die("Can't open develop/" . basename($url) . " for output... please check your permissions or something"); - } - - $i = 0; - $chunk = 32768; - $done = ''; - - while (!feof($fpr)) - { - $i += fwrite($fpw, fread($fpr, $chunk)); - echo str_repeat("\x08", strlen($done)); - - $done = ($i >> 10) . ' KiB'; - echo $done; - } - fclose($fpr); - fclose($fpw); - - echo "\n"; -} - -?>
\ No newline at end of file diff --git a/phpBB/develop/generate_utf_confusables.php b/phpBB/develop/generate_utf_confusables.php deleted file mode 100644 index a70fca9110..0000000000 --- a/phpBB/develop/generate_utf_confusables.php +++ /dev/null @@ -1,238 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @version $Id$ -* @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License -* -*/ - -if (php_sapi_name() != 'cli') -{ - die("This program must be run from the command line.\n"); -} - -// -// Security message: -// -// This script is potentially dangerous. -// Remove or comment the next line (die(".... ) to enable this script. -// Do NOT FORGET to either remove this script or disable it after you have used it. -// -die("Please read the first lines of this script for instructions on how to enable it"); - -set_time_limit(0); - -define('IN_PHPBB', true); -define('PHPBB_ROOT_PATH', './../'); -define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1)); - -echo "Checking for required files\n"; -download('http://unicode.org/reports/tr39/data/confusables.txt'); -download('http://unicode.org/Public/UNIDATA/CaseFolding.txt'); -echo "\n"; - - -/** -* Load the confusables table -*/ -echo "Loading confusables\n"; -$unidata = file_get_contents('confusables.txt'); - -/** -* Load the CaseFolding table -*/ -echo "Loading CaseFolding\n"; -$casefolds = file_get_contents('CaseFolding.txt'); - - -function utf8_chr($cp) -{ - if ($cp > 0xFFFF) - { - return chr(0xF0 | ($cp >> 18)) . chr(0x80 | (($cp >> 12) & 0x3F)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F)); - } - else if ($cp > 0x7FF) - { - return chr(0xE0 | ($cp >> 12)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F)); - } - else if ($cp > 0x7F) - { - return chr(0xC0 | ($cp >> 6)) . chr(0x80 | ($cp & 0x3F)); - } - else - { - return chr($cp); - } -} - -preg_match_all('/^([0-9A-F]+) ;\s((?:[0-9A-F]+ )*);.*?$/im', $unidata, $array, PREG_SET_ORDER); -preg_match_all('/^([0-9A-F]+); ([CFS]); ([0-9A-F]+(?: [0-9A-F]+)*);/im', $casefolds, $casefold_array); - -// some that we defined ourselves -$uniarray = array( - "\xC2\xA1" => "\x69", // EXCLAMATION MARK, INVERTED => LATIN SMALL LETTER I - "\xC7\x83" => "\x21", // LATIN LETTER RETROFLEX CLICK => EXCLAMATION MARK - "\xCE\xB1" => "\x61", // GREEK SMALL LETTER ALPHA => LATIN SMALL LETTER A - "\xE1\x9A\x80" => "\x20", // OGHAM SPACE MARK - - "\xC2\xAD" => '', // HYPHEN, SOFT => empty string - "\xDB\x9D" => '', // ARABIC END OF AYAH - "\xDC\x8F" => '', // SYRIAC ABBREVIATION MARK - "\xE1\xA0\x86" => '', // MONGOLIAN TODO SOFT HYPHEN - "\xE1\xA0\x8E" => '', // MONGOLIAN VOWEL SEPARATOR - "\xE2\x80\x8B" => '', // ZERO WIDTH SPACE - "\xE2\x80\x8C" => '', // ZERO WIDTH NON-JOINER - "\xE2\x80\x8D" => '', // ZERO WIDTH JOINER - "\xE2\x80\xA8" => '', // LINE SEPARATOR - "\xE2\x80\xA9" => '', // PARAGRAPH SEPARATOR - "\xE2\x81\xA0" => '', // WORD JOINER - "\xE2\x81\xA1" => '', // FUNCTION APPLICATION - "\xE2\x81\xA2" => '', // INVISIBLE TIMES - "\xE2\x81\xA3" => '', // INVISIBLE SEPARATOR - "\xE2\x81\xAA" => '', // [CONTROL CHARACTERS] - "\xE2\x81\xAB" => '', // [CONTROL CHARACTERS] - "\xE2\x81\xAC" => '', // [CONTROL CHARACTERS] - "\xE2\x81\xAD" => '', // [CONTROL CHARACTERS] - "\xE2\x81\xAE" => '', // [CONTROL CHARACTERS] - "\xE2\x81\xAF" => '', // [CONTROL CHARACTERS] - "\xEF\xBB\xBF" => '', // ZERO WIDTH NO-BREAK SPACE - "\xEF\xBF\xB9" => '', // [CONTROL CHARACTERS] - "\xEF\xBF\xBA" => '', // [CONTROL CHARACTERS] - "\xEF\xBF\xBB" => '', // [CONTROL CHARACTERS] - "\xEF\xBF\xBC" => '', // [CONTROL CHARACTERS] - "\xF0\x9D\x85\xB3" => '', // [MUSICAL CONTROL CHARACTERS] - "\xF0\x9D\x85\xB4" => '', // [MUSICAL CONTROL CHARACTERS] - "\xF0\x9D\x85\xB5" => '', // [MUSICAL CONTROL CHARACTERS] - "\xF0\x9D\x85\xB6" => '', // [MUSICAL CONTROL CHARACTERS] - "\xF0\x9D\x85\xB7" => '', // [MUSICAL CONTROL CHARACTERS] - "\xF0\x9D\x85\xB8" => '', // [MUSICAL CONTROL CHARACTERS] - "\xF0\x9D\x85\xB9" => '', // [MUSICAL CONTROL CHARACTERS] - "\xF0\x9D\x85\xBA" => '', // [MUSICAL CONTROL CHARACTERS] -); - -$copy = $uniarray; - -foreach ($array as $value) -{ - $temp_hold = implode(array_map('utf8_chr', array_map('hexdec', explode(' ', trim($value[2]))))); - - if (isset($copy[utf8_chr(hexdec((string)$value[1]))])) - { - $num = ''; - $string = utf8_chr(hexdec((string)$value[1])); - for ($i = 0; $i < strlen($string); $i++) - { - $num .= '\x' . str_pad(base_convert(ord($string[$i]), 10, 16), 2, '0', STR_PAD_LEFT); - } - echo $num . "\n"; - if ($uniarray[$string] != $temp_hold) - { - echo " --> $string\n"; - echo " --> " . $temp_hold . "\n"; - } - } - - // do some tests for things that transform into something with the number one - if (strpos($temp_hold, utf8_chr(0x0031)) !== false) - { - // any kind of letter L? - if (strpos($value[0], 'LETTER L') !== false || strpos($value[0], 'IOTA') !== false || strpos($value[0], 'SMALL L ') !== false || preg_match('/SMALL LIGATURE [^L]*L /', $value[0])) - { - // replace all of the mappings that transform some sort of letter l to number one instead to some sort of letter l to latin small letter l - $temp_hold = str_replace(utf8_chr(0x0031), utf8_chr(0x006C), $temp_hold); - } - } - - // uppercased chars that were folded do not exist in this universe, - // no amount of normalization could ever "trick" this into not working - if (in_array($value[1], $casefold_array[1])) - { - continue; - } - - $uniarray[utf8_chr(hexdec((string)$value[1]))] = $temp_hold; -} - -echo "Writing to confusables." . PHP_EXT . "\n"; - -$fp = fopen(PHPBB_ROOT_PATH . 'includes/utf/data/confusables.' . PHP_EXT, 'wb'); -fwrite($fp, '<?php return ' . my_var_export($uniarray) . ';'); -fclose($fp); - -/** -* Return a parsable string representation of a variable -* -* This is function is limited to array/strings/integers -* -* @param mixed $var Variable -* @return string PHP code representing the variable -*/ -function my_var_export($var) -{ - if (is_array($var)) - { - $lines = array(); - - foreach ($var as $k => $v) - { - $lines[] = my_var_export($k) . '=>' . my_var_export($v); - } - - return 'array(' . implode(',', $lines) . ')'; - } - else if (is_string($var)) - { - return "'" . str_replace(array('\\', "'"), array('\\\\', "\\'"), $var) . "'"; - } - else - { - return $var; - } -} - -/** -* Download a file to the develop/ dir -* -* @param string $url URL of the file to download -* @return void -*/ -function download($url) -{ - if (file_exists(PHPBB_ROOT_PATH . 'develop/' . basename($url))) - { - return; - } - - echo 'Downloading from ', $url, ' '; - - if (!$fpr = fopen($url, 'rb')) - { - die("Can't download from $url\nPlease download it yourself and put it in the develop/ dir, kthxbai"); - } - - if (!$fpw = fopen(PHPBB_ROOT_PATH . 'develop/' . basename($url), 'wb')) - { - die("Can't open develop/" . basename($url) . " for output... please check your permissions or something"); - } - - $i = 0; - $chunk = 32768; - $done = ''; - - while (!feof($fpr)) - { - $i += fwrite($fpw, fread($fpr, $chunk)); - echo str_repeat("\x08", strlen($done)); - - $done = ($i >> 10) . ' KiB'; - echo $done; - } - fclose($fpr); - fclose($fpw); - - echo "\n"; -} - -?>
\ No newline at end of file diff --git a/phpBB/develop/generate_utf_tables.php b/phpBB/develop/generate_utf_tables.php deleted file mode 100644 index fcf6395b24..0000000000 --- a/phpBB/develop/generate_utf_tables.php +++ /dev/null @@ -1,570 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @version $Id$ -* @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License -* -*/ - -if (php_sapi_name() != 'cli') -{ - die("This program must be run from the command line.\n"); -} - -// -// Security message: -// -// This script is potentially dangerous. -// Remove or comment the next line (die(".... ) to enable this script. -// Do NOT FORGET to either remove this script or disable it after you have used it. -// -die("Please read the first lines of this script for instructions on how to enable it"); - -set_time_limit(0); - -define('IN_PHPBB', true); -define('PHPBB_ROOT_PATH', './../'); -define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1)); - -echo "Checking for required files\n"; -download('http://www.unicode.org/Public/UNIDATA/CompositionExclusions.txt'); -download('http://www.unicode.org/Public/UNIDATA/DerivedNormalizationProps.txt'); -download('http://www.unicode.org/Public/UNIDATA/UnicodeData.txt'); -echo "\n"; - -require_once(PHPBB_ROOT_PATH . 'includes/utf/utf_normalizer.' . PHP_EXT); -$file_contents = array(); - -/** -* Generate some Hangul/Jamo stuff -*/ -echo "\nGenerating Hangul and Jamo tables\n"; -for ($i = 0; $i < UNICODE_HANGUL_LCOUNT; ++$i) -{ - $utf_char = cp_to_utf(UNICODE_HANGUL_LBASE + $i); - $file_contents['utf_normalizer_common']['utf_jamo_index'][$utf_char] = $i * UNICODE_HANGUL_VCOUNT * UNICODE_HANGUL_TCOUNT + UNICODE_HANGUL_SBASE; - $file_contents['utf_normalizer_common']['utf_jamo_type'][$utf_char] = UNICODE_JAMO_L; -} - -for ($i = 0; $i < UNICODE_HANGUL_VCOUNT; ++$i) -{ - $utf_char = cp_to_utf(UNICODE_HANGUL_VBASE + $i); - $file_contents['utf_normalizer_common']['utf_jamo_index'][$utf_char] = $i * UNICODE_HANGUL_TCOUNT; - $file_contents['utf_normalizer_common']['utf_jamo_type'][$utf_char] = UNICODE_JAMO_V; -} - -for ($i = 0; $i < UNICODE_HANGUL_TCOUNT; ++$i) -{ - $utf_char = cp_to_utf(UNICODE_HANGUL_TBASE + $i); - $file_contents['utf_normalizer_common']['utf_jamo_index'][$utf_char] = $i; - $file_contents['utf_normalizer_common']['utf_jamo_type'][$utf_char] = UNICODE_JAMO_T; -} - -/** -* Load the CompositionExclusions table -*/ -echo "Loading CompositionExclusion\n"; -$fp = fopen('CompositionExclusions.txt', 'rt'); - -$exclude = array(); -while (!feof($fp)) -{ - $line = fgets($fp, 1024); - - if (!strpos(' 0123456789ABCDEFabcdef', $line[0])) - { - continue; - } - - $cp = strtok($line, ' '); - - if ($pos = strpos($cp, '..')) - { - $start = hexdec(substr($cp, 0, $pos)); - $end = hexdec(substr($cp, $pos + 2)); - - for ($i = $start; $i < $end; ++$i) - { - $exclude[$i] = 1; - } - } - else - { - $exclude[hexdec($cp)] = 1; - } -} -fclose($fp); - -/** -* Load QuickCheck tables -*/ -echo "Generating QuickCheck tables\n"; -$fp = fopen('DerivedNormalizationProps.txt', 'rt'); - -while (!feof($fp)) -{ - $line = fgets($fp, 1024); - - if (!strpos(' 0123456789ABCDEFabcdef', $line[0])) - { - continue; - } - - $p = array_map('trim', explode(';', strtok($line, '#'))); - - /** - * Capture only NFC_QC, NFKC_QC - */ - if (!preg_match('#^NFK?C_QC$#', $p[1])) - { - continue; - } - - if ($pos = strpos($p[0], '..')) - { - $start = hexdec(substr($p[0], 0, $pos)); - $end = hexdec(substr($p[0], $pos + 2)); - } - else - { - $start = $end = hexdec($p[0]); - } - - if ($start >= UTF8_HANGUL_FIRST && $end <= UTF8_HANGUL_LAST) - { - /** - * We do not store Hangul syllables in the array - */ - continue; - } - - if ($p[2] == 'M') - { - $val = UNICODE_QC_MAYBE; - } - else - { - $val = UNICODE_QC_NO; - } - - if ($p[1] == 'NFKC_QC') - { - $file = 'utf_nfkc_qc'; - } - else - { - $file = 'utf_nfc_qc'; - } - - for ($i = $start; $i <= $end; ++$i) - { - /** - * The vars have the same name as the file: $utf_nfc_qc is in utf_nfc_qc.php - */ - $file_contents[$file][$file][cp_to_utf($i)] = $val; - } -} -fclose($fp); - -/** -* Do mappings -*/ -echo "Loading Unicode decomposition mappings\n"; -$fp = fopen(PHPBB_ROOT_PATH . 'develop/UnicodeData.txt', 'rt'); - -$map = array(); -while (!feof($fp)) -{ - $p = explode(';', fgets($fp, 1024)); - $cp = hexdec($p[0]); - - if (!empty($p[3])) - { - /** - * Store combining class > 0 - */ - $file_contents['utf_normalizer_common']['utf_combining_class'][cp_to_utf($cp)] = (int) $p[3]; - } - - if (!isset($p[5]) || !preg_match_all('#[0-9A-F]+#', strip_tags($p[5]), $m)) - { - continue; - } - - if (strpos($p[5], '>')) - { - $map['NFKD'][$cp] = implode(' ', array_map('hexdec', $m[0])); - } - else - { - $map['NFD'][$cp] = $map['NFKD'][$cp] = implode(' ', array_map('hexdec', $m[0])); - } -} -fclose($fp); - -/** -* Build the canonical composition table -*/ -echo "Generating the Canonical Composition table\n"; -foreach ($map['NFD'] as $cp => $decomp_seq) -{ - if (!strpos($decomp_seq, ' ') || isset($exclude[$cp])) - { - /** - * Singletons are excluded from canonical composition - */ - continue; - } - - $utf_seq = implode('', array_map('cp_to_utf', explode(' ', $decomp_seq))); - - if (!isset($file_contents['utf_canonical_comp']['utf_canonical_comp'][$utf_seq])) - { - $file_contents['utf_canonical_comp']['utf_canonical_comp'][$utf_seq] = cp_to_utf($cp); - } -} - -/** -* Decompose the NF[K]D mappings recursively and prepare the file contents -*/ -echo "Generating the Canonical and Compatibility Decomposition tables\n\n"; -foreach ($map as $type => $decomp_map) -{ - foreach ($decomp_map as $cp => $decomp_seq) - { - $decomp_map[$cp] = decompose($decomp_map, $decomp_seq); - } - unset($decomp_seq); - - if ($type == 'NFKD') - { - $file = 'utf_compatibility_decomp'; - $var = 'utf_compatibility_decomp'; - } - else - { - $file = 'utf_canonical_decomp'; - $var = 'utf_canonical_decomp'; - } - - /** - * Generate the corresponding file - */ - foreach ($decomp_map as $cp => $decomp_seq) - { - $file_contents[$file][$var][cp_to_utf($cp)] = implode('', array_map('cp_to_utf', explode(' ', $decomp_seq))); - } -} - -/** -* Generate and/or alter the files -*/ -foreach ($file_contents as $file => $contents) -{ - /** - * Generate a new file - */ - echo "Writing to $file." . PHP_EXT . "\n"; - - if (!$fp = fopen(PHPBB_ROOT_PATH . 'includes/utf/data/' . $file . '.' . PHP_EXT, 'wb')) - { - trigger_error('Cannot open ' . $file . ' for write'); - } - - fwrite($fp, '<?php'); - foreach ($contents as $var => $val) - { - fwrite($fp, "\n\$GLOBALS[" . my_var_export($var) . ']=' . my_var_export($val) . ";"); - } - fclose($fp); -} - -echo "\n*** UTF-8 normalization tables done\n\n"; - -/** -* Now we'll generate the files needed by the search indexer -*/ -echo "Generating search indexer tables\n"; - -$fp = fopen(PHPBB_ROOT_PATH . 'develop/UnicodeData.txt', 'rt'); - -$map = array(); -while ($line = fgets($fp, 1024)) -{ - /** - * The current line is split, $m[0] hold the codepoint in hexadecimal and - * all other fields numbered as in http://www.unicode.org/Public/UNIDATA/UCD.html#UnicodeData.txt - */ - $m = explode(';', $line); - - /** - * @var integer $cp Current char codepoint - * @var string $utf_char UTF-8 representation of current char - */ - $cp = hexdec($m[0]); - $utf_char = cp_to_utf($cp); - - /** - * $m[2] holds the "General Category" of the character - * @link http://www.unicode.org/Public/UNIDATA/UCD.html#General_Category_Values - */ - switch ($m[2][0]) - { - case 'L': - /** - * We allow all letters and map them to their lowercased counterpart on the fly - */ - $map_to_hex = (isset($m[13][0])) ? $m[13] : $m[0]; - - if (preg_match('#^LATIN.*(?:LETTER|LIGATURE) ([A-Z]{2}(?![A-Z]))$#', $m[1], $capture)) - { - /** - * Special hack for some latin ligatures. Using the name of a character - * is bad practice, but for now it works well enough. - * - * @todo Note that ligatures with combining marks such as U+01E2 are - * not supported at this time - */ - $map[$cp] = strtolower($capture[1]); - } - else if (isset($m[13][0])) - { - /** - * If the letter has a lowercased form, use it - */ - $map[$cp] = hex_to_utf($m[13]); - } - else - { - /** - * In all other cases, map the letter to itself - */ - $map[$cp] = $utf_char; - } - break; - - case 'M': - /** - * We allow all marks, they are mapped to themselves - */ - $map[$cp] = $utf_char; - break; - - case 'N': - /** - * We allow all numbers, but we map them to their numeric value whenever - * possible. The numeric value (field #8) is in ASCII already - * - * @todo Note that fractions such as U+00BD will be converted to something - * like "1/2", with a slash. However, "1/2" entered in ASCII is converted - * to "1 2". This will have to be fixed. - */ - $map[$cp] = (isset($m[8][0])) ? $m[8] : $utf_char; - break; - - default: - /** - * Everything else is ignored, skip to the next line - */ - continue 2; - } -} -fclose($fp); - -/** -* Add some cheating -*/ -$cheats = array( - '00DF' => 'ss', # German sharp S - '00C5' => 'ae', # Capital A with diaeresis - '00E4' => 'ae', # Small A with diaeresis - '00D6' => 'oe', # Capital O with diaeresis - '00F6' => 'oe', # Small O with diaeresis - '00DC' => 'ue', # Capital U with diaeresis - '00FC' => 'ue', # Small U with diaeresis -); - -/** -* Add our "cheat replacements" to the map -*/ -foreach ($cheats as $hex => $map_to) -{ - $map[hexdec($hex)] = $map_to; -} - -/** -* Split the map into smaller blocks -*/ -$file_contents = array(); -foreach ($map as $cp => $map_to) -{ - $file_contents[$cp >> 11][cp_to_utf($cp)] = $map_to; -} -unset($map); - -foreach ($file_contents as $idx => $contents) -{ - echo "Writing to search_indexer_$idx." . PHP_EXT . "\n"; - $fp = fopen(PHPBB_ROOT_PATH . 'includes/utf/data/search_indexer_' . $idx . '.' . PHP_EXT, 'wb'); - fwrite($fp, '<?php return ' . my_var_export($contents) . ';'); - fclose($fp); -} -echo "\n*** Search indexer tables done\n\n"; - - -die("\nAll done!\n"); - - -//////////////////////////////////////////////////////////////////////////////// -// Internal functions // -//////////////////////////////////////////////////////////////////////////////// - -/** -* Decompose a sequence recusively -* -* @param array $decomp_map Decomposition mapping, passed by reference -* @param string $decomp_seq Decomposition sequence as decimal codepoints separated with a space -* @return string Decomposition sequence, fully decomposed -*/ -function decompose(&$decomp_map, $decomp_seq) -{ - $ret = array(); - foreach (explode(' ', $decomp_seq) as $cp) - { - if (isset($decomp_map[$cp])) - { - $ret[] = decompose($decomp_map, $decomp_map[$cp]); - } - else - { - $ret[] = $cp; - } - } - - return implode(' ', $ret); -} - - -/** -* Return a parsable string representation of a variable -* -* This is function is limited to array/strings/integers -* -* @param mixed $var Variable -* @return string PHP code representing the variable -*/ -function my_var_export($var) -{ - if (is_array($var)) - { - $lines = array(); - - foreach ($var as $k => $v) - { - $lines[] = my_var_export($k) . '=>' . my_var_export($v); - } - - return 'array(' . implode(',', $lines) . ')'; - } - else if (is_string($var)) - { - return "'" . str_replace(array('\\', "'"), array('\\\\', "\\'"), $var) . "'"; - } - else - { - return $var; - } -} - -/** -* Download a file to the develop/ dir -* -* @param string $url URL of the file to download -* @return void -*/ -function download($url) -{ - if (file_exists(PHPBB_ROOT_PATH . 'develop/' . basename($url))) - { - return; - } - - echo 'Downloading from ', $url, ' '; - - if (!$fpr = fopen($url, 'rb')) - { - die("Can't download from $url\nPlease download it yourself and put it in the develop/ dir, kthxbai"); - } - - if (!$fpw = fopen(PHPBB_ROOT_PATH . 'develop/' . basename($url), 'wb')) - { - die("Can't open develop/" . basename($url) . " for output... please check your permissions or something"); - } - - $i = 0; - $chunk = 32768; - $done = ''; - - while (!feof($fpr)) - { - $i += fwrite($fpw, fread($fpr, $chunk)); - echo str_repeat("\x08", strlen($done)); - - $done = ($i >> 10) . ' KiB'; - echo $done; - } - fclose($fpr); - fclose($fpw); - - echo "\n"; -} - -/** -* Convert a codepoint in hexadecimal to a UTF-8 char -* -* @param string $hex Codepoint, in hexadecimal -* @return string UTF-8 char -*/ -function hex_to_utf($hex) -{ - return cp_to_utf(hexdec($hex)); -} - -/** -* Return a UTF string formed from a sequence of codepoints in hexadecimal -* -* @param string $seq Sequence of codepoints, separated with a space -* @return string UTF-8 string -*/ -function hexseq_to_utf($seq) -{ - return implode('', array_map('hex_to_utf', explode(' ', $seq))); -} - -/** -* Convert a codepoint to a UTF-8 char -* -* @param integer $cp Unicode codepoint -* @return string UTF-8 string -*/ -function cp_to_utf($cp) -{ - if ($cp > 0xFFFF) - { - return chr(0xF0 | ($cp >> 18)) . chr(0x80 | (($cp >> 12) & 0x3F)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F)); - } - else if ($cp > 0x7FF) - { - return chr(0xE0 | ($cp >> 12)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F)); - } - else if ($cp > 0x7F) - { - return chr(0xC0 | ($cp >> 6)) . chr(0x80 | ($cp & 0x3F)); - } - else - { - return chr($cp); - } -}
\ No newline at end of file diff --git a/phpBB/develop/nuke-db.php b/phpBB/develop/nuke-db.php deleted file mode 100644 index d7329c3f56..0000000000 --- a/phpBB/develop/nuke-db.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -// -// Security message: -// -// This script is potentially dangerous. -// Remove or comment the next line (die(".... ) to enable this script. -// Do NOT FORGET to either remove this script or disable it after you have used it. -// -die("Please read the first lines of this script for instructions on how to enable it"); - -// -// Do not change anything below this line. -// - - -// Just a handy script to completely wipe out the contents of a -// database.. Use with caution :) - - -if(!isset($submit)) -{ - ?> - <FORM ACTION="<?php echo $PHP_SELF?>" METHOD="post" > - <table> - <tr> - <td>DB host:</td> - <td><INPUT TYPE="text" name="dbhost" value="localhost"></td> - </tr><tr> - <td>DB name:</td> - <td><INPUT TYPE="text" name="dbname" value="phpBB"></td> - </tr><tr> - <td>DB username:</td> - <td><INPUT TYPE="text" name="dbuser" value="root"></td> - </tr><tr> - <td>DB password:</td> - <td><INPUT TYPE="password" name="dbpass"></td> - </tr></table> - <INPUT TYPE="submit" name="submit" value="Submit"> - </FORM> - <?php -} -else -{ - mysql_connect($dbhost, $dbuser, $dbpass) || die(mysql_error()); - mysql_select_db($dbname); - - $result = mysql_query("SHOW TABLES"); - while($row = mysql_fetch_row($result)){ - $table = $row[0]; - print "Going to drop $table..."; - mysql_query("DROP TABLE $table") || die(); - print "Done.<br>\n"; - flush(); - } -} -?> - diff --git a/phpBB/develop/posting-api.php b/phpBB/develop/posting-api.php deleted file mode 100644 index 14d74e0841..0000000000 --- a/phpBB/develop/posting-api.php +++ /dev/null @@ -1,854 +0,0 @@ -<?php -define('IN_PHPBB', true); -define('PHPBB_ROOT_PATH', './../'); -define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1)); -include(PHPBB_ROOT_PATH . 'common.' . PHP_EXT); - -//$db = new dbal_mysqli(); - -class posting_api -{ - /* - topic table: - topic_id - forum_id - topic_title - topic_status - topic_type - topic_shadow_id // to implement - - sec: - topic_posts - topic_shadow_posts - topic_deleted_posts - topic_unapproved_posts - - all must be approved: - topic_poster - topic_first_poster_name - topic_first_poster_id - topic_last_post_id - topic_last_poster_name - topic_last_poster_id - topic_last_post_title - topic_last_post_time - */ - - /* - post table: - post_id - topic_id - post_subject - post_body - post_status - post_type - post_username - poster_id - forum_id - post_time - - /* - forum table: - forum_id - forum_posts - forum_shadow_posts - forum_deleted_posts - forum_unapproved_posts - - sec: - forum_topics - forum_shadow_topics - forum_deleted_topics - forum_unapproved_topics - - forum_last_poster_name - forum_last_user_id - forum_last_post_title - forum_last_post_time - */ - - const NORMAL = 0; - - // status - const UNAPPROVED = 1; - const DELETED = 2; - - // type - const ANNOUNCEMENT = 1; - const STICKY = 2; - - // we, for now, only support the insertion of posts that are not already - // shadow'd and not deleted (it must first exist for it to be shadow'd or deleted!) - static function insert_topic($data) - { - // one transaction, we can now garuntee that atomicity of insertions - phpbb::$db->sql_transaction('begin'); - - $user_id = (int) $data['user_id']; - $forum_id = (int) $data['forum_id']; - $topic_title = $data['title']; - $post_contents = $data['post_contents']; - $topic_status = (int) $data['status']; - $topic_type = (int) $data['type']; - $approved = (bool) $data['approved']; - - $shadow_forums = $data['shadow_forums']; - - $time = ($data['time']) ? (int) $data['time'] : time(); - - if (isset($data['username'])) - { - $username = $data['username']; - } - else - { - $sql = 'SELECT username - FROM ' . USERS_TABLE . ' - WHERE user_id = ' . $user_id; - $result = phpbb::$db->sql_query($sql); - $username = (string) phpbb::$db->sql_fetchfield('username'); - phpbb::$db->sql_freeresult($result); - } - - $sql = 'SELECT forum_topics, forum_unapproved_topics, forum_posts, forum_unapproved_posts - FROM ' . FORUMS_TABLE . ' - WHERE forum_id = ' . (int) $forum_id; - $result = phpbb::$db->sql_query($sql); - $row = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - // throw our topic to the dogs - $topic_data = array( - 'topic_title' => $topic_title, - 'topic_status' => $topic_status, - 'topic_type' => $topic_type, - 'topic_posts' => 1, - 'topic_shadow_posts' => 0, - 'topic_deleted_posts' => 0, - 'topic_unapproved_posts' => ($approved) ? 0 : 1, - 'topic_first_poster_name' => $username, - 'topic_poster' => $user_id, - 'topic_last_username' => $username, - 'topic_last_post_title' => $topic_title, - 'topic_last_post_time' => $time, - 'topic_last_poster_id' => $user_id, - 'forum_id' => $forum_id - ); - - phpbb::$db->sql_handle_data('INSERT', TOPICS_TABLE, $topic_data); - $topic_id = phpbb::$db->sql_nextid(); - - // I suppose it is time to make us a post, no? - $post_data = array( - 'topic_id' => $topic_id, - 'post_subject' => $topic_title, - 'post_body' => $post_contents, - 'post_username' => $username, - 'poster_id' => $user_id, - 'post_status' => $topic_status, // first post inherits its type from the topic - 'post_type' => self::NORMAL, // for now, there are no shadow, global or sticky posts - 'forum_id' => $forum_id - ); - - phpbb::$db->sql_handle_data('INSERT', POSTS_TABLE, $post_data); - $post_id = phpbb::$db->sql_nextid(); - - // time to fill in the blanks - phpbb::$db->sql_handle_data('UPDATE', TOPICS_TABLE, array('topic_first_post_id' => $post_id, 'topic_last_post_id' => $post_id), "topic_id = $topic_id"); - - // let's go update the forum table - $forum_data = array( - 'forum_posts' => ++$row['forum_posts'], - 'forum_topics' => ++$row['forum_topics'], - ); - - // the last post inserted is always the latest, - // we must update the forum records to make sure everybody knows the good news - if ($approved) - { - $forum_data['forum_last_poster_name'] = $username; - $forum_data['forum_last_user_id'] = $user_id; - $forum_data['forum_last_post_title'] = $topic_title; - $forum_data['forum_last_post_time'] = $time; - } - else - { - $forum_data['forum_unapproved_posts'] = ++$row['forum_unapproved_posts']; - $forum_data['forum_unapproved_topics'] = ++$row['forum_unapproved_topics']; - } - - phpbb::$db->sql_handle_data('UPDATE', FORUMS_TABLE, $forum_data, "forum_id = $forum_id"); - - foreach ($shadow_forums as $shadow_forum_id) - { - $data['shadow_topic_id'] = $topic_id; - $data['forum_id'] = $shadow_forum_id; - self::insert_shadow_topic($data); - } - - // we are consistant, victory is ours - phpbb::$db->sql_transaction('commit'); - } - - // inserts a shadow topic into the database - static function insert_shadow_topic($data) - { - // one transaction, we can now garuntee that atomicity of insertions - phpbb::$db->sql_transaction('begin'); - - $user_id = (int) $data['user_id']; - $forum_id = (int) $data['forum_id']; - $topic_title = $data['title']; - $topic_status = (int) $data['status']; - $topic_type = (int) $data['type']; - $time = ($data['time']) ? (int) $data['time'] : time(); - $shadow_topic_id = (int) $data['shadow_topic_id']; - $approved = (bool) $data['approved']; - - if (isset($data['username'])) - { - $username = $data['username']; - } - else - { - $sql = 'SELECT username - FROM ' . USERS_TABLE . ' - WHERE user_id = ' . $user_id; - $result = phpbb::$db->sql_query($sql); - $username = (stromg) phpbb::$db->sql_fetchfield('username'); - phpbb::$db->sql_freeresult($result); - } - - $sql = 'SELECT forum_topics, forum_shadow_topics - FROM ' . FORUMS_TABLE . ' - WHERE forum_id = ' . (int) $forum_id; - $result = phpbb::phpbb::$db->sql_query($sql); - $row = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - // throw our topic to the dogs - $topic_data = array( - 'topic_title' => $topic_title, - 'topic_status' => $topic_status, - 'topic_type' => $topic_type, - 'topic_posts' => 0, - 'topic_shadow_posts' => 0, - 'topic_deleted_posts' => 0, - 'topic_unapproved_posts' => ($approved ? 0 : 1), - 'topic_first_poster_name' => $username, - 'topic_poster' => $user_id, - 'topic_last_username' => $username, - 'topic_last_post_title' => $topic_title, - 'topic_last_post_time' => $time, - 'topic_last_poster_id' => $user_id, - 'forum_id' => $forum_id, - 'topic_shadow_id' => $shadow_topic_id - ); - - phpbb::$db->sql_handle_data('INSERT', TOPICS_TABLE, $topic_data); - - // let's go update the forum table - $forum_data = array( - 'forum_topics' => ++$row['forum_topics'], - 'forum_shadow_topics' => ++$row['forum_shadow_topics'] - ); - - // an unapproved shadow topic? I suppose... - if (!$approved) - { - $forum_data['forum_unapproved_topics'] = ++$row['forum_unapproved_topics']; - } - - phpbb::$db->sql_handle_data('UPDATE', FORUMS_TABLE, $forum_data, "forum_id = $forum_id"); - - // we are consistant, victory is ours - phpbb::$db->transaction('END'); - } - - static function insert_post($data) - { - // one transaction, we can now garuntee that atomicity of insertions - phpbb::$db->transaction('BEGIN'); - - $user_id = (int) $data['user_id']; - $topic_id = (int) $data['topic_id']; - - // begin massive amounts of hand holding - - if (isset($data['forum_id'])) - { - $forum_id = (int) $data['forum_id']; - } - else - { - $sql = 'SELECT forum_id - FROM ' . TOPICS_TABLE . ' - WHERE topic_id = ' . $topic_id; - $result = phpbb::$db->sql_query($sql); - $forum_id = (int) phpbb::$db->sql_fetchfield('forum_id'); - phpbb::$db->sql_freeresult($result); - } - - $post_title = $data['title']; - $post_contents = $data['post_contents']; - $time = ($data['time']) ? (int) $data['time'] : time(); - - if (isset($data['username'])) - { - $username = $data['username']; - } - else - { - $sql = 'SELECT username - FROM ' . USERS_TABLE . ' - WHERE user_id = ' . $user_id; - $result = phpbb::$db->sql_query($sql); - $username = (string) phpbb::$db->sql_fetchfield('username'); - phpbb::$db->sql_freeresult($result); - } - - // hand holding complete, lets write some posts - - $sql = 'SELECT forum_topics, forum_unapproved_topics, forum_posts, forum_unapproved_posts - FROM ' . FORUMS_TABLE . ' - WHERE forum_id = ' . (int) $forum_id; - $result = phpbb::$db->sql_query($sql); - $row = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - $post_status = (int) $data['post_status']; - $approved = ($post_status === self::NORMAL); - - // I suppose it is time to make us a post, no? - $post_data = array( - 'topic_id' => $topic_id, - 'post_subject' => $post_title, - 'post_body' => $post_contents, - 'post_username' => $username, - 'poster_id' => $user_id, - 'post_status' => $post_status, - 'forum_id' => $forum_id, - ); - phpbb::$db->sql_handle_data('INSERT', POSTS_TABLE, $post_data); - - // what is the new post_id? - $post_id = phpbb::$db->sql_nextid(); - - // iceberg ahead! we must only update the topic information if the post is approved ;) - if ($approved) - { - // time to fill in the blanks - $topics_data = array( - 'topic_last_poster_id' => $user_id, - 'topic_last_post_id' => $post_id, - 'topic_last_poster_name'=> $username, - 'topic_last_post_title' => $post_title, - 'topic_last_post_time' => $time, - ); - phpbb::$db->sql_handle_data('UPDATE', TOPICS_TABLE, $topics_data, "topic_id = $topic_id"); - } - - // let's go update the forum table - $forum_data = array( - 'forum_posts' => ++$row['forum_posts'], - ); - - // the last post inserted is always the latest, - // we must update the forum records to make sure everybody knows the good news - if ($approved) - { - $forum_data['forum_last_poster_name'] = $username; - $forum_data['forum_last_user_id'] = $user_id; - $forum_data['forum_last_post_title'] = $post_title; - $forum_data['forum_last_post_time'] = $time; - } - else - { - $forum_data['forum_unapproved_posts'] = ++$row['forum_unapproved_posts']; - } - - phpbb::$db->sql_handle_data('UPDATE', FORUMS_TABLE, $forum_data, "forum_id = $forum_id"); - - // we are consistant, victory is ours - phpbb::$db->sql_transaction('commit'); - } - - static function delete_topic($data) - { - // just call the more powerful variant with just one topic :) - self::delete_topics(array('topic_ids' => array($data['topic_id']))); - } - - static function delete_topics($data) - { - // lets get this party started - phpbb::$db->sql_transaction('begin'); - - $topic_ids = array_map('intval', $data['topic_ids']); - - // what kind of topic is this? lets find out how much we must tamper with the forum table... - // TODO: investigate how aggregate functions can speed this up/reduce the number of results returned/misc. other benefits - $sql = 'SELECT topic_posts, topic_shadow_posts, topic_deleted_posts, topic_unapproved_posts, topic_shadow_id, forum_id, topic_status - FROM ' . TOPICS_TABLE . ' - WHERE ' . phpbb::$db->sql_in_set('topic_id', $topic_ids); - $result = phpbb::$db->sql_query($sql); - // the following in an array, key'd by forum id that refers to topic rows - $forum_lookup = array(); - while ($topic_row = phpbb::$db->sql_fetchrow($result)) - { - $forum_id = (int) $topic_row['forum_id']; - - // deal with posts - $forum_lookup[$forum_id]['forum_posts'] += $topic_row['topic_posts']; - $forum_lookup[$forum_id]['forum_shadow_posts'] += $topic_row['topic_shadow_posts']; - $forum_lookup[$forum_id]['forum_deleted_posts'] += $topic_row['topic_deleted_posts']; - $forum_lookup[$forum_id]['forum_unapproved_posts'] += $topic_row['topic_unapproved_posts']; - - // deal with topics - $topic_status = (int) $topic_row['topic_status']; - $forum_lookup[$forum_id]['forum_topics']++; // a topic is a topic - $forum_lookup[$forum_id]['forum_shadow_topics'] += ($topic_row['topic_shadow_id'] != 0); - $forum_lookup[$forum_id]['forum_deleted_topics'] += ($topic_status & self::DELETED); - $forum_lookup[$forum_id]['forum_unapproved_topics'] += ($topic_status & self::UNAPPROVED); - } - phpbb::$db->sql_freeresult($result); - - // goodnight, topics - phpbb::$db->sql_query('DELETE FROM ' . TOPICS_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('topic_id', $topic_ids)); - - // goodnight, posts - phpbb::$db->sql_query('DELETE FROM ' . POSTS_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('topic_id', $topic_ids)); - - $forum_ids = array_keys($forum_lookup); - - // what kind of topic is this? lets find out how much we must tamper with the forum table... - $sql = 'SELECT forum_posts, forum_shadow_posts, forum_deleted_posts, forum_unapproved_posts, forum_id - FROM ' . FORUMS_TABLE . ' - WHERE ' . phpbb::$db->sql_in_set('forum_id', $forum_ids); - $result = phpbb::$db->sql_query($sql); - $forum_rows = array(); - while ($forum_row = phpbb::$db->sql_fetchrow($result)) - { - $forum_id = (int) $forum_row['forum_id']; - $forum_rows[$forum_id] = $forum_row; - } - phpbb::$db->sql_freeresult($result); - - $shadow_topic_ids = array(); - foreach ($forum_rows as $forum_id => $forum_row) - { - $topic_row = $forum_lookup[$forum_id]; - $forum_array = array( - 'forum_posts' => max($forum_row['forum_posts'] - $topic_row['forum_posts'], 0), - 'forum_shadow_posts' => max($forum_row['forum_shadow_posts'] - $topic_row['forum_shadow_posts'], 0), - 'forum_deleted_posts' => max($forum_row['forum_deleted_posts'] - $topic_row['forum_deleted_posts'], 0), - 'forum_unapproved_posts' => max($forum_row['forum_unapproved_posts'] - $topic_row['forum_unapproved_posts'], 0), - - 'forum_topics' => max($forum_row['forum_topics'] - $topic_row['forum_topics'], 0), - 'forum_shadow_topics' => max($forum_row['forum_shadow_topics'] - $topic_row['forum_shadow_topics'], 0), - 'forum_deleted_topics' => max($forum_row['forum_deleted_topics'] - $topic_row['forum_deleted_topics'], 0), - 'forum_unapproved_topics' => max($forum_row['forum_unapproved_topics'] - $topic_row['forum_unapproved_topics'], 0), - ); - - // get the last "normal" post in the forum, we _must_ update it - $sql = 'SELECT MAX(post_id) as max_post_id - FROM ' . POSTS_TABLE . ' - WHERE post_status = ' . self::NORMAL . ' - AND forum_id = ' . $forum_id; - $result = phpbb::$db->sql_query($sql); - $row = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - // anything left? - if ($row) - { - // OK, lets go do some magick - $sql = 'SELECT post_username, poster_id, post_subject, post_time - FROM '. POSTS_TABLE . ' - WHERE post_id = ' . (int) $row['max_post_id']; - $result = phpbb::$db->sql_query($sql); - $last_post = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - $forum_array['forum_last_user_id'] = (int) $last_post['poster_id']; - $forum_array['forum_last_poster_name'] = $last_post['post_username']; - $forum_array['forum_last_post_title'] = $last_post['post_subject']; - $forum_array['forum_last_post_time'] = (int) $last_post['post_time']; - } - else - { - // reset forum state - $forum_array['forum_last_user_id'] = 0; - $forum_array['forum_last_poster_name'] = ''; - $forum_array['forum_last_post_title'] = ''; - $forum_array['forum_last_post_time'] = 0; - } - - phpbb::$db->sql_handle_data('UPDATE', FORUMS_TABLE, $forum_array, "forum_id = $forum_id"); - } - - // let's not get too hasty, we can kill off the shadows later, - // instead we compose a list of all shadows and then efficiently kill them off :) - $sql = 'SELECT topic_id - FROM ' . TOPICS_TABLE . ' - WHERE ' . phpbb::$db->sql_in_set('topic_shadow_id', $topic_ids); - $result = phpbb::$db->sql_query($sql); - - while ($row = phpbb::$db->sql_fetchrow($result)) - { - $shadow_topic_ids[] = $row['topic_id']; - } - - phpbb::$db->sql_freeresult($result); - - // recursion, the other white meat. - if (sizeof($shadow_topic_ids)) - { - self::delete_topics(array('topic_ids' => $shadow_topic_ids)); - } - - // goodnight, moon - phpbb::$db->transaction('commit'); - } - - static function delete_post($data) - { - // just call the more powerful variant with just one post :) - self::delete_posts(array('post_ids' => array($data['post_id']))); - } - - static function delete_posts($data) - { - // lets get this party started - phpbb::$db->sql_transaction('begin'); - - $post_ids = array_map('intval', $data['post_ids']); - - $sql = 'SELECT topic_id, post_status, post_id, post_shadow_id, forum_id - FROM ' . POSTS_TABLE . ' - WHERE ' . phpbb::$db->sql_in_set('post_id', $post_ids); - $result = phpbb::$db->sql_query($sql); - - // the following arrays are designed to allow for much faster updates - $topic_lookup = array(); - $forum_lookup = array(); - - while ($post_row = phpbb::$db->sql_fetchrow($result)) - { - $topic_id = (int) $post_row['topic_id']; - $forum_id = (int) $post_row['forum_id']; - $post_status = (int) $post_row['post_status']; - - $topic_lookup[$topic_id]['topic_posts']++; // we remove a post, go figure - $topic_lookup[$topic_id]['topic_shadow_posts'] += ($post_row['post_shadow_id'] != 0); // did we just try to kill a shadow post?! - $topic_lookup[$topic_id]['topic_deleted_posts'] += ($post_status & self::DELETED); - $topic_lookup[$topic_id]['topic_unapproved_posts'] += ($post_status & self::UNAPPROVED); - - $forum_lookup[$forum_id]['forum_posts']++; - $forum_lookup[$topic_id]['forum_shadow_posts'] += ($post_row['post_shadow_id'] != 0); // did we just try to kill a shadow post?! - $forum_lookup[$topic_id]['forum_deleted_posts'] += ($post_status & self::DELETED); - $forum_lookup[$topic_id]['forum_unapproved_posts'] += ($post_status & self::UNAPPROVED); - } - phpbb::$db->sql_freeresult($result); - - $topic_ids = array_keys($forum_lookup); - - // goodnight, posts - phpbb::$db->sql_query('DELETE FROM ' . POSTS_TABLE . ' WHERE ' . phpbb::$db->sql_in_set('topic_id', $topic_ids)); - - // mangle the forums table - $sql = 'SELECT forum_posts, forum_shadow_posts, forum_deleted_posts, forum_unapproved_posts, forum_id - FROM ' . FORUMS_TABLE . ' - WHERE forum_id = ' . $forum_id; - $result = phpbb::$db->sql_query($sql); - $forum_rows = array(); - while ($forum_row = phpbb::$db->sql_fetchrow($result)) - { - $forum_id = (int) $forum_row['forum_id']; - $forum_rows[$forum_id] = $forum_row; - } - phpbb::$db->sql_freeresult($result); - - $shadow_topic_ids = array(); - foreach ($forum_rows as $forum_id => $forum_row) - { - $topic_row = $forum_lookup[$forum_id]; - $forum_array = array( - 'forum_posts' => max($forum_row['forum_posts'] - $topic_row['forum_posts'], 0), - 'forum_shadow_posts' => max($forum_row['forum_shadow_posts'] - $topic_row['forum_shadow_posts'], 0), - 'forum_deleted_posts' => max($forum_row['forum_deleted_posts'] - $topic_row['forum_deleted_posts'], 0), - 'forum_unapproved_posts' => max($forum_row['forum_unapproved_posts'] - $topic_row['forum_unapproved_posts'], 0), - ); - - // get the last "normal" post in the forum, we _must_ update it - $sql = 'SELECT MAX(post_id) as max_post_id - FROM ' . POSTS_TABLE . ' - WHERE post_status = ' . self::NORMAL . ' - AND forum_id = ' . $forum_id; - $result = phpbb::$db->sql_query($sql); - $row = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - // anything left? - if ($row) - { - // OK, lets go do some magick - $sql = 'SELECT post_username, poster_id, post_subject, post_time - FROM '. POSTS_TABLE . ' - WHERE post_id = ' . (int) $row['max_post_id']; - $result = phpbb::$db->sql_query($sql); - $last_post = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - $forum_array['forum_last_user_id'] = (int) $last_post['poster_id']; - $forum_array['forum_last_poster_name'] = $last_post['post_username']; - $forum_array['forum_last_post_title'] = $last_post['post_subject']; - $forum_array['forum_last_post_time'] = (int) $last_post['post_time']; - } - else - { - // reset forum state - $forum_array['forum_last_user_id'] = 0; - $forum_array['forum_last_poster_name'] = ''; - $forum_array['forum_last_post_title'] = ''; - $forum_array['forum_last_post_time'] = 0; - } - - phpbb::$db->sql_handle_data('UPDATE', FORUMS_TABLE, $forum_array, "forum_id = $forum_id"); - } - - // mangle the topics table now :) - $sql = 'SELECT topic_posts, topic_shadow_posts, topic_deleted_posts, topic_unapproved_posts, topic_id - FROM ' . TOPICS_TABLE . ' - WHERE forum_id = ' . $forum_id; - $result = phpbb::$db->sql_query($sql); - $topic_rows = array(); - while ($topic_row = phpbb::$db->sql_fetchrow($result)) - { - $topic_id = (int) $topic_row['topic_id']; - $topic_rows[$topic_id] = $topic_row; - } - phpbb::$db->sql_freeresult($result); - - $empty_topic_ids = array(); - - foreach ($topic_rows as $topic_id => $topic_row) - { - $post_row = $topic_lookup[$topic_id]; - $topic_array = array( - 'topic_posts' => max($topic_row['topic_posts'] - $post_row['topic_posts'], 0), - 'topic_shadow_posts' => max($topic_row['topic_shadow_posts'] - $post_row['topic_shadow_posts'], 0), - 'topic_deleted_posts' => max($topic_row['topic_deleted_posts'] - $post_row['topic_deleted_posts'], 0), - 'topic_unapproved_posts' => max($topic_row['topic_unapproved_posts'] - $post_row['topic_unapproved_posts'], 0), - ); - - // get the last "normal" post in the topic, we _must_ update it - $sql = 'SELECT MAX(post_id) as max_post_id - FROM ' . POSTS_TABLE . ' - WHERE post_status = ' . self::NORMAL . ' - AND topic_id = ' . $topic_id; - $result = phpbb::$db->sql_query($sql); - $row = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - // anything left? - if ($row) - { - // OK, lets go do some magick - $sql = 'SELECT post_username, poster_id, post_subject, post_time - FROM '. POSTS_TABLE . ' - WHERE post_id = ' . (int) $row['max_post_id']; - $result = phpbb::$db->sql_query($sql); - $last_post = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - $topic_array['topic_last_user_id'] = (int) $last_post['poster_id']; - $topic_array['topic_last_poster_name'] = $last_post['post_username']; - $topic_array['topic_last_post_title'] = $last_post['post_subject']; - $topic_array['topic_last_post_time'] = (int) $last_post['post_time']; - } - else - { - // mark this post for execution! - $empty_topic_ids[] = $topic_id; - } - - phpbb::$db->sql_handle_data('UPDATE', TOPICS_TABLE, $topic_array, "topic_id = $topic_id"); - } - - $shadow_post_ids = array(); - - // let's not get too hasty, we can kill off the shadows later, - // instead we compose a list of all shadows and then efficiently kill them off :) - $sql = 'SELECT post_id - FROM ' . POSTS_TABLE . ' - WHERE ' . phpbb::$db->sql_in_set('post_shadow_id', $topic_ids); - $result = phpbb::$db->sql_query($sql); - - while ($row = phpbb::$db->sql_fetchrow($result)) - { - $shadow_post_ids[] = $row['post_id']; - } - - phpbb::$db->sql_freeresult($result); - - // recursion, the other white meat. - if (sizeof($shadow_topic_ids)) - { - self::delete_posts(array('post_ids' => $shadow_post_ids)); - } - - // we killed all the posts in a topic, time to kill the topics! - if (sizeof($empty_topic_ids)) - { - self::delete_topics(array('topic_ids' => $empty_topic_ids)); - } - - // goodnight, moon - phpbb::$db->transaction('commit'); - } - - static function move_topic($data) - { - self::move_topics(array('topic_forum_mapping' => array(array('topic_id' => $data['topic_id'], 'forum_id' => $data['forum_id'], 'make_shadow' => $data['make_shadow'])))); - } - - static function move_topics($data) - { - // lets get this party started - phpbb::$db->transaction('begin'); - - // all of each are indexed by topic id - $to_forum_ids = $shadow_topic_ids = array(); - - foreach ($data['topic_forum_mapping'] as $mapping) - { - $topic_id = (int) $mapping['topic_id']; - $to_forum_ids[$topic_id] = (int) $mapping['forum_id']; - if ($mapping['make_shadow']) - { - $shadow_topic_ids[] = $topic_id; - } - } - - $forum_columns = array('forum_posts', 'forum_shadow_posts', 'forum_deleted_posts', 'forum_unapproved_posts', 'forum_topics', 'forum_shadow_topics', 'forum_deleted_topics', 'forum_unapproved_topics'); - - $topic_ids = array_keys($to_forum_ids); - - // let us first determine how many items we are removing from the pool - $sql = 'SELECT topic_posts, topic_shadow_posts, topic_deleted_posts, topic_unapproved_posts, forum_id, topic_status, topic_type, topic_shadow_id, topic_id - FROM ' . TOPICS_TABLE . ' - WHERE ' . phpbb::$db->sql_in_set('topic_id', $topic_ids); - $result = phpbb::$db->sql_query($sql); - $forum_lookup = array(); - while ($topic_row = phpbb::$db->sql_fetchrow($result)) - { - $topic_id = $topic_row['topic_id']; - $from_forum_id = (int) $topic_row['forum_id']; - $to_forum_id = $to_forum_ids[$topic_id]; - - // we are iterating one topic at a time... - $forum_lookup[$from_forum_id]['forum_topics'] = $forum_lookup[$to_forum_id]['forum_topics'] = 1; - - foreach ($forum_columns as $column) - { - $forum_lookup[$from_forum_id][$column] -= $topic_row['topic_posts']; - $forum_lookup[$to_forum_id][$column] += $topic_row['topic_posts']; - } - } - phpbb::$db->sql_freeresult($result); - - // determine the totals - $sql = 'SELECT forum_posts, forum_shadow_posts, forum_deleted_posts, forum_unapproved_posts, forum_id, forum_topics, forum_deleted_topics, forum_unapproved_topics - FROM ' . FORUMS_TABLE . ' - WHERE ' . phpbb::$db->sql_in_set('forum_id', array_keys($forum_lookup)); - $result = phpbb::$db->sql_query($sql); - - while ($row = phpbb::$db->sql_fetchrow($result)) - { - $forum_id = (int) $row['forum_id']; - - foreach ($forum_columns as $column) - { - $forum_lookup[$forum_id][$column] += (int) $row[$column]; - } - } - - // create a listing of which topics are going in which forums - $update_list = array(); - - foreach ($to_forum_ids as $topic_id => $forum_id) - { - $update_list[$forum_id][] = $topic_id; - } - - // we save as many queries as we can by updating all similar topics at once - foreach ($update_list as $forum_id => $topic_ids) - { - // update the topic itself - phpbb::$db->sql_handle_data('UPDATE', TOPICS_TABLE, array('forum_id' => $to_forum_id), phpbb::$db->sql_in_set('topic_id', $topic_ids)); - - // update the posts now - phpbb::$db->sql_handle_data('UPDATE', POSTS_TABLE, array('forum_id' => $to_forum_id), phpbb::$db->sql_in_set('topic_id', $topic_ids)); - } - - // start building the needed arrays for updating the forum data - foreach ($forum_lookup as $forum_id => $forum_data) - { - foreach ($forum_columns as $column) - { - $forum_data[$column] = max($forum_data[$column], 0); // ensure the result is unsigned - } - - // get the last "normal" post in the old forum, we _must_ update it - $sql = 'SELECT MAX(post_id) as max_post_id - FROM ' . POSTS_TABLE . ' - WHERE post_status = ' . self::NORMAL . ' - AND forum_id = ' . $forum_id; - $result = phpbb::$db->sql_query($sql); - $row = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - // anything left? - if ($row) - { - // OK, lets go do some magick - $sql = 'SELECT post_username, poster_id, post_subject, post_time - FROM '. POSTS_TABLE . ' - WHERE post_id = ' . (int) $row['max_post_id']; - $result = phpbb::$db->sql_query($sql); - $last_post = phpbb::$db->sql_fetchrow($result); - phpbb::$db->sql_freeresult($result); - - $forum_data['forum_last_user_id'] = (int) $last_post['poster_id']; - $forum_data['forum_last_poster_name'] = $last_post['post_username']; - $forum_data['forum_last_post_title'] = $last_post['post_subject']; - $forum_data['forum_last_post_time'] = (int) $last_post['post_time']; - } - else - { - // reset forum state - $forum_data['forum_last_user_id'] = 0; - $forum_data['forum_last_poster_name'] = ''; - $forum_data['forum_last_post_title'] = ''; - $forum_data['forum_last_post_time'] = 0; - } - - // update the old forum - phpbb::$db->sql_handle_data('UPDATE', FORUMS_TABLE, $forum_data, "forum_id = $forum_id"); - } - - // hooray for code reuse! - foreach ($shadow_topic_ids as $topic_id) - { - $data['shadow_topic_id'] = $topic_id; - $data['forum_id'] = $from_forum_id; - self::insert_shadow_topic($data); - } - - phpbb::$db->sql_transaction('commit'); - - } -} - -?>
\ No newline at end of file diff --git a/phpBB/develop/regex.php b/phpBB/develop/regex.php deleted file mode 100644 index 9d2d48f653..0000000000 --- a/phpBB/develop/regex.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php -// -// Security message: -// -// This script is potentially dangerous. -// Remove or comment the next line (die(".... ) to enable this script. -// Do NOT FORGET to either remove this script or disable it after you have used it. -// -die("Please read the first lines of this script for instructions on how to enable it"); - - -// IP regular expressions - -$dec_octet = '(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])'; -$h16 = '[\dA-F]{1,4}'; -$ipv4 = "(?:$dec_octet\.){3}$dec_octet"; -$ls32 = "(?:$h16:$h16|$ipv4)"; - -$ipv6_construct = array( - array(false, '', '{6}', $ls32), - array(false, '::', '{5}', $ls32), - array('', ':', '{4}', $ls32), - array('{1,2}', ':', '{3}', $ls32), - array('{1,3}', ':', '{2}', $ls32), - array('{1,4}', ':', '', $ls32), - array('{1,5}', ':', false, $ls32), - array('{1,6}', ':', false, $h16), - array('{1,7}', ':', false, '') -); - -$ipv6 = '(?:'; -foreach ($ipv6_construct as $ip_type) -{ - $ipv6 .= '(?:'; - if ($ip_type[0] !== false) - { - $ipv6 .= "(?:$h16:)" . $ip_type[0]; - } - $ipv6 .= $ip_type[1]; - if ($ip_type[2] !== false) - { - $ipv6 .= "(?:$h16:)" . $ip_type[2]; - } - $ipv6 .= $ip_type[3] . ')|'; -} -$ipv6 = substr($ipv6, 0, -1) . ')'; - -echo 'IPv4: ' . $ipv4 . "<br />\nIPv6: " . $ipv6 . "<br />\n"; - -// URL regular expressions - -$pct_encoded = "%[\dA-F]{2}"; -$unreserved = 'a-z0-9\-._~'; -$sub_delims = '!$&\'()*+,;='; -$pchar = "(?:[$unreserved$sub_delims:@|]+|$pct_encoded)"; // rfc: no "|" - -$scheme = '[a-z][a-z\d+\-.]*'; -$reg_name = "(?:[$unreserved$sub_delims:@|]+|$pct_encoded)+"; // rfc: * instead of + and no "|" and no "@" and no ":" (included instead of userinfo) -//$userinfo = "(?:(?:[$unreserved$sub_delims:]+|$pct_encoded))*"; -$ipv4_simple = '[0-9.]+'; -$ipv6_simple = '\[[a-z0-9.]+:[a-z0-9.]+:[a-z0-9.:]+\]'; -$host = "(?:$reg_name|$ipv4_simple|$ipv6_simple)"; -$port = '\d*'; -//$authority = "(?:$userinfo@)?$host(?::$port)?"; -$authority = "$host(?::$port)?"; -$segment = "$pchar*"; -$path_abempty = "(?:/$segment)*"; -$hier_part = "/{2}$authority$path_abempty"; -$query = "(?:[$unreserved$sub_delims:@/?|]+|$pct_encoded)*"; // pchar | "/" | "?", rfc: no "|" -$fragment = $query; - -$url = "$scheme:$hier_part(?:\?$query)?(?:\#$fragment)?"; -echo 'URL: ' . $url . "<br />\n"; - -// no scheme, shortened authority, but host has to start with www. -$www_url = "www\.$reg_name(?::$port)?$path_abempty(?:\?$query)?(?:\#$fragment)?"; -echo 'www.URL: ' . $www_url . "<br />\n"; - -// no schema and no authority -$relative_url = "$segment$path_abempty(?:\?$query)?(?:\#$fragment)?"; -echo 'relative URL: ' . $relative_url . "<br />\n"; - -?> diff --git a/phpBB/develop/repair_bots.php b/phpBB/develop/repair_bots.php deleted file mode 100644 index c3a0fe66b9..0000000000 --- a/phpBB/develop/repair_bots.php +++ /dev/null @@ -1,149 +0,0 @@ -<?php -/** -* Rebuild BOTS -* -* You should make a backup from your whole database. Things can and will go wrong. -* This will only work if no BOTs were added. -* -*/ -die("Please read the first lines of this script for instructions on how to enable it"); - -set_time_limit(0); - -define('IN_PHPBB', true); -define('PHPBB_ROOT_PATH', './../'); -define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1)); -include(PHPBB_ROOT_PATH . 'common.' . PHP_EXT); -include(PHPBB_ROOT_PATH . 'includes/functions_user.' . PHP_EXT); - - -// Start session management -phpbb::$user->session_begin(); -phpbb::$acl->init(phpbb::$user->data); -phpbb::$user->setup(); - -$bots = array( - 'AdsBot [Google]' => array('AdsBot-Google', ''), - 'Alexa [Bot]' => array('ia_archiver', ''), - 'Alta Vista [Bot]' => array('Scooter/', ''), - 'Ask Jeeves [Bot]' => array('Ask Jeeves', ''), - 'Baidu [Spider]' => array('Baiduspider+(', ''), - 'Exabot [Bot]' => array('Exabot/', ''), - 'FAST Enterprise [Crawler]' => array('FAST Enterprise Crawler', ''), - 'FAST WebCrawler [Crawler]' => array('FAST-WebCrawler/', ''), - 'Francis [Bot]' => array('http://www.neomo.de/', ''), - 'Gigabot [Bot]' => array('Gigabot/', ''), - 'Google Adsense [Bot]' => array('Mediapartners-Google', ''), - 'Google Desktop' => array('Google Desktop', ''), - 'Google Feedfetcher' => array('Feedfetcher-Google', ''), - 'Google [Bot]' => array('Googlebot', ''), - 'Heise IT-Markt [Crawler]' => array('heise-IT-Markt-Crawler', ''), - 'Heritrix [Crawler]' => array('heritrix/1.', ''), - 'IBM Research [Bot]' => array('ibm.com/cs/crawler', ''), - 'ICCrawler - ICjobs' => array('ICCrawler - ICjobs', ''), - 'ichiro [Crawler]' => array('ichiro/2', ''), - 'Majestic-12 [Bot]' => array('MJ12bot/', ''), - 'Metager [Bot]' => array('MetagerBot/', ''), - 'MSN NewsBlogs' => array('msnbot-NewsBlogs/', ''), - 'MSN [Bot]' => array('msnbot/', ''), - 'MSNbot Media' => array('msnbot-media/', ''), - 'NG-Search [Bot]' => array('NG-Search/', ''), - 'Nutch [Bot]' => array('http://lucene.apache.org/nutch/', ''), - 'Nutch/CVS [Bot]' => array('NutchCVS/', ''), - 'OmniExplorer [Bot]' => array('OmniExplorer_Bot/', ''), - 'Online link [Validator]' => array('online link validator', ''), - 'psbot [Picsearch]' => array('psbot/0', ''), - 'Seekport [Bot]' => array('Seekbot/', ''), - 'Sensis [Crawler]' => array('Sensis Web Crawler', ''), - 'SEO Crawler' => array('SEO search Crawler/', ''), - 'Seoma [Crawler]' => array('Seoma [SEO Crawler]', ''), - 'SEOSearch [Crawler]' => array('SEOsearch/', ''), - 'Snappy [Bot]' => array('Snappy/1.1 ( http://www.urltrends.com/ )', ''), - 'Steeler [Crawler]' => array('http://www.tkl.iis.u-tokyo.ac.jp/~crawler/', ''), - 'Synoo [Bot]' => array('SynooBot/', ''), - 'Telekom [Bot]' => array('crawleradmin.t-info@telekom.de', ''), - 'TurnitinBot [Bot]' => array('TurnitinBot/', ''), - 'Voyager [Bot]' => array('voyager/1.0', ''), - 'W3 [Sitesearch]' => array('W3 SiteSearch Crawler', ''), - 'W3C [Linkcheck]' => array('W3C-checklink/', ''), - 'W3C [Validator]' => array('W3C_*Validator', ''), - 'WiseNut [Bot]' => array('http://www.WISEnutbot.com', ''), - 'YaCy [Bot]' => array('yacybot', ''), - 'Yahoo MMCrawler [Bot]' => array('Yahoo-MMCrawler/', ''), - 'Yahoo Slurp [Bot]' => array('Yahoo! DE Slurp', ''), - 'Yahoo [Bot]' => array('Yahoo! Slurp', ''), - 'YahooSeeker [Bot]' => array('YahooSeeker/', ''), -); - -$bot_ids = array(); -user_get_id_name($bot_ids, array_keys($bots), phpbb::USER_IGNORE); -foreach($bot_ids as $bot) -{ - user_delete('remove', $bot); -} -// Done -add_bots($bots); -echo 'done'; - - -/** -* Add the search bots into the database -* This code should be used in execute_last if the source database did not have bots -* If you are converting bots this function should not be called -* @todo We might want to look at sharing the bot list between the install code and this code for consistency -*/ -function add_bots($bots) -{ - $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = 'BOTS'"; - $result = phpbb::$db->sql_query($sql); - $group_id = (int) phpbb::$db->sql_fetchfield('group_id', $result); - phpbb::$db->sql_freeresult($result); - phpbb::$db->sql_query('TRUNCATE TABLE ' . BOTS_TABLE); - - if (!$group_id) - { - add_default_groups(); - - $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = 'BOTS'"; - $result = phpbb::$db->sql_query($sql); - $group_id = (int) phpbb::$db->sql_fetchfield('group_id', $result); - phpbb::$db->sql_freeresult($result); - - } - - - - - foreach ($bots as $bot_name => $bot_ary) - { - $user_row = array( - 'user_type' => phpbb::USER_IGNORE, - 'group_id' => $group_id, - 'username' => $bot_name, - 'user_regdate' => time(), - 'user_password' => '', - 'user_colour' => '9E8DA7', - 'user_email' => '', - 'user_lang' => phpbb::$config['default_lang'], - 'user_style' => 1, - 'user_timezone' => 0, - 'user_allow_massemail' => 0, - ); - - $user_id = user_add($user_row); - - if ($user_id) - { - $sql = 'INSERT INTO ' . BOTS_TABLE . ' ' . phpbb::$db->sql_build_array('INSERT', array( - 'bot_active' => 1, - 'bot_name' => $bot_name, - 'user_id' => $user_id, - 'bot_agent' => $bot_ary[0], - 'bot_ip' => $bot_ary[1]) - ); - phpbb::$db->sql_query($sql); - } - } -} - -?>
\ No newline at end of file diff --git a/phpBB/develop/search_fill.php b/phpBB/develop/search_fill.php deleted file mode 100644 index 8819c428fd..0000000000 --- a/phpBB/develop/search_fill.php +++ /dev/null @@ -1,129 +0,0 @@ -<?php - -// -// Security message: -// -// This script is potentially dangerous. -// Remove or comment the next line (die(".... ) to enable this script. -// Do NOT FORGET to either remove this script or disable it after you have used it. -// - -// -// Security message: -// -// This script is potentially dangerous. -// Remove or comment the next line (die(".... ) to enable this script. -// Do NOT FORGET to either remove this script or disable it after you have used it. -// -die("Please read the first lines of this script for instructions on how to enable it"); - -// -// Do not change anything below this line. -// -set_time_limit(0); - -define('IN_PHPBB', true); -define('PHPBB_ROOT_PATH', './../'); -define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1)); -include(PHPBB_ROOT_PATH . 'common.' . PHP_EXT); - -// Start session management -phpbb::$user->session_begin(); -phpbb::$acl->init(phpbb::$user->data); -phpbb::$user->setup(); - -$search_type = phpbb::$config['search_type']; - -if (!file_exists(PHPBB_ROOT_PATH . 'includes/search/' . $search_type . '.' . PHP_EXT)) -{ - trigger_error('NO_SUCH_SEARCH_MODULE'); -} - -require(PHPBB_ROOT_PATH . 'includes/search/' . $search_type . '.' . PHP_EXT); - -$error = false; -$search = new $search_type($error); - -if ($error) -{ - trigger_error($error); -} - -print "<html>\n<body>\n"; - -// -// Fetch a batch of posts_text entries -// -$sql = "SELECT COUNT(*) as total, MAX(post_id) as max_post_id - FROM ". POSTS_TABLE; -if ( !($result = phpbb::$db->sql_query($sql)) ) -{ - $error = phpbb::$db->sql_error(); - die("Couldn't get maximum post ID :: " . $sql . " :: " . $error['message']); -} - -$max_post_id = phpbb::$db->sql_fetchrow($result); - -$totalposts = $max_post_id['total']; -$max_post_id = $max_post_id['max_post_id']; - -$postcounter = (!isset($HTTP_GET_VARS['batchstart'])) ? 0 : $HTTP_GET_VARS['batchstart']; - -$batchsize = 200; // Process this many posts per loop -$batchcount = 0; -for(;$postcounter <= $max_post_id; $postcounter += $batchsize) -{ - $batchstart = $postcounter + 1; - $batchend = $postcounter + $batchsize; - $batchcount++; - - $sql = "SELECT * - FROM " . POSTS_TABLE . " - WHERE post_id - BETWEEN $batchstart - AND $batchend"; - if( !($result = phpbb::$db->sql_query($sql)) ) - { - $error = phpbb::$db->sql_error(); - die("Couldn't get post_text :: " . $sql . " :: " . $error['message']); - } - - $rowset = phpbb::$db->sql_fetchrowset($result); - phpbb::$db->sql_freeresult($result); - - $post_rows = sizeof($rowset); - - if( $post_rows ) - { - - // $sql = "LOCK TABLES ".POST_TEXT_TABLE." WRITE"; - // $result = phpbb::$db->sql_query($sql); - print "\n<p>\n<a href='{$_SERVER['PHP_SELF']}?batchstart=$batchstart'>Restart from posting $batchstart</a><br>\n"; - - // For every post in the batch: - for($post_nr = 0; $post_nr < $post_rows; $post_nr++ ) - { - print "."; - flush(); - - $post_id = $rowset[$post_nr]['post_id']; - - $search->index('post', $rowset[$post_nr]['post_id'], $rowset[$post_nr]['post_text'], $rowset[$post_nr]['post_subject'], $rowset[$post_nr]['poster_id']); - } - // $sql = "UNLOCK TABLES"; - // $result = phpbb::$db->sql_query($sql); - - } -} - -print "<br>Removing common words (words that appear in more than 50% of the posts)<br>\n"; -flush(); -$search->tidy(); -print "Removed words that where too common.<br>"; - -echo "<br>Done"; - -?> - -</body> -</html> diff --git a/phpBB/develop/unicode_testing.php b/phpBB/develop/unicode_testing.php deleted file mode 100644 index c8712ba53f..0000000000 --- a/phpBB/develop/unicode_testing.php +++ /dev/null @@ -1,119 +0,0 @@ -<?php -// -// This file provides some useful functions for debugging the unicode/UTF-8 library -// It requires utf_tools.php to be loaded -// -die("Please read the first lines of this script for instructions on how to enable it"); - -if (!headers_sent()) -{ - header('Content-type: text/html; charset=UTF-8'); -} - -/** - * Converts unicode escape sequences (\u0123) into UTF-8 characters - * - * @param string A unicode sequence - * @return string UTF-8 representation of the given unicode sequence - */ -function unicode_to_utf8($string) -{ - $utf8 = ''; - $chars = array(); - for ($i = 0; $i < strlen($string); $i++) - { - if (isset($string[$i + 5]) && substr($string, $i, 2) == '\\u' && ctype_xdigit(substr($string, $i + 2, 4))) - { - $utf8 .= utf8_from_unicode(array(base_convert(substr($string, $i + 2, 4), 16, 10))); - $i += 5; - } - else - { - $utf8 .= $string[$i]; - } - } - return $utf8; -} - -/** - * Takes an array of ints representing the Unicode characters and returns - * a UTF-8 string. - * - * @param array $array array of unicode code points representing a string - * @return string UTF-8 character string - */ -function utf8_from_unicode($array) -{ - $str = ''; - foreach ($array as $value) - { - $str .= utf8_chr($value); - } - return $str; -} - -/** -* Converts a UTF-8 string to unicode code points -* -* @param string $text UTF-8 string -* @return string Unicode code points -*/ -function utf8_to_unicode($text) -{ - return preg_replace_callback( - '#[\\xC2-\\xF4][\\x80-\\xBF]?[\\x80-\\xBF]?[\\x80-\\xBF]#', - 'utf8_to_unicode_callback', - preg_replace_callback( - '#[\\x00-\\x7f]#', - 'utf8_to_unicode_callback', - $text - ) - ); -} - -/** -* Takes a UTF-8 char and replaces it with its unicode escape sequence. Attention, $m is an array -* -* @param array $m 0-based numerically indexed array passed by preg_replace_callback() -* @return string A unicode escape sequence -*/ -function utf8_to_unicode_callback($m) -{ - return '\u' . str_pad(base_convert(utf8_ord($m[0]), 10, 16), 4, '0', STR_PAD_LEFT) . ''; -} - -/** -* A wrapper function for the normalizer which takes care of including the class if required and modifies the passed strings -* to be in NFKC -* -* @param mixed $strings a string or an array of strings to normalize -* @return mixed the normalized content, preserving array keys if array given. -*/ -function utf8_normalize_nfkc($strings) -{ - if (empty($strings)) - { - return $strings; - } - - if (!class_exists('utf_normalizer')) - { - include(PHPBB_ROOT_PATH . 'includes/utf/utf_normalizer.' . PHP_EXT); - } - - if (!is_array($strings)) - { - utf_normalizer::nfkc($strings); - } - else if (is_array($strings)) - { - foreach ($strings as $key => $string) - { - utf_normalizer::nfkc($strings[$key]); - } - } - - return $strings; -} - -?>
\ No newline at end of file diff --git a/phpBB/develop/utf_normalizer_test.php b/phpBB/develop/utf_normalizer_test.php deleted file mode 100644 index 8a7c31a1b0..0000000000 --- a/phpBB/develop/utf_normalizer_test.php +++ /dev/null @@ -1,389 +0,0 @@ -<?php -/** -* -* @package phpBB3 -* @version $Id$ -* @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License -* -*/ - -if (php_sapi_name() != 'cli') -{ - die("This program must be run from the command line.\n"); -} - -// -// Security message: -// -// This script is potentially dangerous. -// Remove or comment the next line (die(".... ) to enable this script. -// Do NOT FORGET to either remove this script or disable it after you have used it. -// -die("Please read the first lines of this script for instructions on how to enable it"); - -set_time_limit(0); -error_reporting(E_ALL); - -define('IN_PHPBB', true); -define('PHPBB_ROOT_PATH', './../'); -define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1)); - - -/** -* Let's download some files we need -*/ -download('http://www.unicode.org/Public/UNIDATA/NormalizationTest.txt'); -download('http://www.unicode.org/Public/UNIDATA/UnicodeData.txt'); - -/** -* Those are the tests we run -*/ -$test_suite = array( - /** - * NFC - * c2 == NFC(c1) == NFC(c2) == NFC(c3) - * c4 == NFC(c4) == NFC(c5) - */ - 'NFC' => array( - 'c2' => array('c1', 'c2', 'c3'), - 'c4' => array('c4', 'c5') - ), - - /** - * NFD - * c3 == NFD(c1) == NFD(c2) == NFD(c3) - * c5 == NFD(c4) == NFD(c5) - */ - 'NFD' => array( - 'c3' => array('c1', 'c2', 'c3'), - 'c5' => array('c4', 'c5') - ), - - /** - * NFKC - * c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5) - */ - 'NFKC' => array( - 'c4' => array('c1', 'c2', 'c3', 'c4', 'c5') - ), - - /** - * NFKD - * c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5) - */ - 'NFKD' => array( - 'c5' => array('c1', 'c2', 'c3', 'c4', 'c5') - ) -); - -require_once(PHPBB_ROOT_PATH . 'includes/utf/utf_normalizer.' . PHP_EXT); - -$i = $n = 0; -$failed = false; -$tested_chars = array(); - -$fp = fopen(PHPBB_ROOT_PATH . 'develop/NormalizationTest.txt', 'rb'); -while (!feof($fp)) -{ - $line = fgets($fp); - ++$n; - - if ($line[0] == '@') - { - if ($i) - { - echo "done\n"; - } - - $i = 0; - echo "\n", substr($line, 1), "\n\n"; - continue; - } - - if (!strpos(' 0123456789ABCDEF', $line[0])) - { - continue; - } - - if (++$i % 100 == 0) - { - echo $i, ' '; - } - - list($c1, $c2, $c3, $c4, $c5) = explode(';', $line); - - if (!strpos($c1, ' ')) - { - /** - * We are currently testing a single character, we add it to the list of - * characters we have processed so that we can exclude it when testing - * for invariants - */ - $tested_chars[$c1] = 1; - } - - foreach ($test_suite as $form => $serie) - { - foreach ($serie as $expected => $tests) - { - $hex_expected = ${$expected}; - $utf_expected = hexseq_to_utf($hex_expected); - - foreach ($tests as $test) - { - $utf_result = $utf_expected; - call_user_func(array('utf_normalizer', $form), $utf_result); - - if (strcmp($utf_expected, $utf_result)) - { - $failed = true; - $hex_result = utf_to_hexseq($utf_result); - - echo "\nFAILED $expected == $form($test) ($hex_expected != $hex_result)"; - } - } - } - - if ($failed) - { - die("\n\nFailed at line $n\n"); - } - } -} -fclose($fp); - -/** -* Test for invariants -*/ -echo "\n\nTesting for invariants...\n\n"; - -$fp = fopen(PHPBB_ROOT_PATH . 'develop/UnicodeData.txt', 'rt'); - -$n = 0; -while (!feof($fp)) -{ - if (++$n % 100 == 0) - { - echo $n, ' '; - } - - $line = fgets($fp, 1024); - - if (!$pos = strpos($line, ';')) - { - continue; - } - - $hex_tested = $hex_expected = substr($line, 0, $pos); - - if (isset($tested_chars[$hex_tested])) - { - continue; - } - - $utf_expected = hex_to_utf($hex_expected); - - if ($utf_expected >= utf_normalizer::UTF8_SURROGATE_FIRST - && $utf_expected <= utf_normalizer::UTF8_SURROGATE_LAST) - { - /** - * Surrogates are illegal on their own, we expect the normalizer - * to return a replacement char - */ - $utf_expected = utf_normalizer::UTF8_REPLACEMENT; - $hex_expected = utf_to_hexseq($utf_expected); - } - - foreach (array('nfc', 'nfkc', 'nfd', 'nfkd') as $form) - { - $utf_result = $utf_expected; - call_user_func(array('utf_normalizer', $form), $utf_result); - $hex_result = utf_to_hexseq($utf_result); -// echo "$form($utf_expected) == $utf_result\n"; - - if (strcmp($utf_expected, $utf_result)) - { - $failed = 1; - - echo "\nFAILED $hex_expected == $form($hex_tested) ($hex_expected != $hex_result)"; - } - } - - if ($failed) - { - die("\n\nFailed at line $n\n"); - } -} -fclose($fp); - -die("\n\nALL TESTS PASSED SUCCESSFULLY\n"); - -/** -* Download a file to the develop/ dir -* -* @param string $url URL of the file to download -* @return void -*/ -function download($url) -{ - if (file_exists(PHPBB_ROOT_PATH . 'develop/' . basename($url))) - { - return; - } - - echo 'Downloading from ', $url, ' '; - - if (!$fpr = fopen($url, 'rb')) - { - die("Can't download from $url\nPlease download it yourself and put it in the develop/ dir, kthxbai"); - } - - if (!$fpw = fopen(PHPBB_ROOT_PATH . 'develop/' . basename($url), 'wb')) - { - die("Can't open develop/" . basename($url) . " for output... please check your permissions or something"); - } - - $i = 0; - $chunk = 32768; - $done = ''; - - while (!feof($fpr)) - { - $i += fwrite($fpw, fread($fpr, $chunk)); - echo str_repeat("\x08", strlen($done)); - - $done = ($i >> 10) . ' KiB'; - echo $done; - } - fclose($fpr); - fclose($fpw); - - echo "\n"; -} - -/** -* Convert a UTF string to a sequence of codepoints in hexadecimal -* -* @param string $utf UTF string -* @return integer Unicode codepoints in hex -*/ -function utf_to_hexseq($str) -{ - $pos = 0; - $len = strlen($str); - $ret = array(); - - while ($pos < $len) - { - $c = $str[$pos]; - switch ($c & "\xF0") - { - case "\xC0": - case "\xD0": - $utf_char = substr($str, $pos, 2); - $pos += 2; - break; - - case "\xE0": - $utf_char = substr($str, $pos, 3); - $pos += 3; - break; - - case "\xF0": - $utf_char = substr($str, $pos, 4); - $pos += 4; - break; - - default: - $utf_char = $c; - ++$pos; - } - - $hex = dechex(utf_to_cp($utf_char)); - - if (!isset($hex[3])) - { - $hex = substr('000' . $hex, -4); - } - - $ret[] = $hex; - } - - return strtr(implode(' ', $ret), 'abcdef', 'ABCDEF'); -} - -/** -* Convert a UTF-8 char to its codepoint -* -* @param string $utf_char UTF-8 char -* @return integer Unicode codepoint -*/ -function utf_to_cp($utf_char) -{ - switch (strlen($utf_char)) - { - case 1: - return ord($utf_char); - - case 2: - return ((ord($utf_char[0]) & 0x1F) << 6) | (ord($utf_char[1]) & 0x3F); - - case 3: - return ((ord($utf_char[0]) & 0x0F) << 12) | ((ord($utf_char[1]) & 0x3F) << 6) | (ord($utf_char[2]) & 0x3F); - - case 4: - return ((ord($utf_char[0]) & 0x07) << 18) | ((ord($utf_char[1]) & 0x3F) << 12) | ((ord($utf_char[2]) & 0x3F) << 6) | (ord($utf_char[3]) & 0x3F); - - default: - die('UTF-8 chars can only be 1-4 bytes long'); - } -} - -/** -* Return a UTF string formed from a sequence of codepoints in hexadecimal -* -* @param string $seq Sequence of codepoints, separated with a space -* @return string UTF-8 string -*/ -function hexseq_to_utf($seq) -{ - return implode('', array_map('hex_to_utf', explode(' ', $seq))); -} - -/** -* Convert a codepoint in hexadecimal to a UTF-8 char -* -* @param string $hex Codepoint, in hexadecimal -* @return string UTF-8 char -*/ -function hex_to_utf($hex) -{ - return cp_to_utf(hexdec($hex)); -} - -/** -* Convert a codepoint to a UTF-8 char -* -* @param integer $cp Unicode codepoint -* @return string UTF-8 string -*/ -function cp_to_utf($cp) -{ - if ($cp > 0xFFFF) - { - return chr(0xF0 | ($cp >> 18)) . chr(0x80 | (($cp >> 12) & 0x3F)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F)); - } - else if ($cp > 0x7FF) - { - return chr(0xE0 | ($cp >> 12)) . chr(0x80 | (($cp >> 6) & 0x3F)) . chr(0x80 | ($cp & 0x3F)); - } - else if ($cp > 0x7F) - { - return chr(0xC0 | ($cp >> 6)) . chr(0x80 | ($cp & 0x3F)); - } - else - { - return chr($cp); - } -}
\ No newline at end of file |