X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=scripts%2Ffixup_utf8.php;h=5a9fba7c3f62ef84b11ea080f0459669f0c0d9d4;hb=ed2e49477d43bce71c492e8dda65682e8e7863a6;hp=2046d2b770a6ea34fc61c02ea174d29bfd61fe87;hpb=da0d2a9745ea072cd261990e152d08198331a415;p=quix0rs-gnu-social.git diff --git a/scripts/fixup_utf8.php b/scripts/fixup_utf8.php old mode 100644 new mode 100755 index 2046d2b770..5a9fba7c3f --- a/scripts/fixup_utf8.php +++ b/scripts/fixup_utf8.php @@ -1,8 +1,8 @@ #!/usr/bin/env php + +Fixup records in a database that stored the data incorrectly (pre-0.7.4 for StatusNet). + +ENDOFHELP; + +require_once INSTALLDIR.'/scripts/commandline.inc'; +require_once 'DB.php'; class UTF8FixerUpper { @@ -45,7 +42,7 @@ class UTF8FixerUpper { $this->args = $args; - if (array_key_exists('max_date', $args)) { + if (!empty($args['max_date'])) { $this->max_date = strftime('%Y-%m-%d %H:%M:%S', strtotime($args['max_date'])); } else { $this->max_date = strftime('%Y-%m-%d %H:%M:%S', time()); @@ -101,6 +98,7 @@ class UTF8FixerUpper $this->args['min_notice']); $this->fixupProfiles(); $this->fixupGroups(); + $this->fixupMessages(); } function fixupNotices($max_id, $min_id) { @@ -163,6 +161,7 @@ class UTF8FixerUpper $notice = Notice::staticGet('id', $id); $notice->decache(); + $notice->free(); echo "OK\n"; } @@ -226,6 +225,7 @@ class UTF8FixerUpper $profile = Profile::staticGet('id', $id); $profile->decache(); + $profile->free(); echo "OK\n"; } @@ -289,15 +289,73 @@ class UTF8FixerUpper $user_group = User_group::staticGet('id', $id); $user_group->decache(); + $user_group->free(); + + echo "OK\n"; + } + } + + function fixupMessages() { + + // Do a separate DB connection + + $sth = $this->dbu->prepare("UPDATE message SET content = UNHEX(?), rendered = UNHEX(?) WHERE id = ?"); + + if (PEAR::isError($sth)) { + echo "ERROR: " . $sth->getMessage() . "\n"; + return; + } + + $sql = 'SELECT id, content, rendered FROM message ' . + 'WHERE LENGTH(content) != CHAR_LENGTH(content) '. + 'AND modified < "'.$this->max_date.'" '. + 'ORDER BY id DESC'; + + $rn = $this->dbl->query($sql); + + if (PEAR::isError($rn)) { + echo "ERROR: " . $rn->getMessage() . "\n"; + return; + } + + echo "Number of rows: " . $rn->numRows() . "\n"; + + $message = array(); + + while (DB_OK == $rn->fetchInto($message)) { + + $id = ($message[0])+0; + $content = bin2hex($message[1]); + $rendered = bin2hex($message[2]); + + echo "$id..."; + + $result =& $this->dbu->execute($sth, array($content, $rendered, $id)); + + if (PEAR::isError($result)) { + echo "ERROR: " . $result->getMessage() . "\n"; + continue; + } + + $cnt = $this->dbu->affectedRows(); + + if ($cnt != 1) { + echo "ERROR: 0 rows affected\n"; + continue; + } + + $message = Message::staticGet('id', $id); + $message->decache(); + $message->free(); echo "OK\n"; } } } -$max_date = ($argc > 1) ? $argv[1] : null; -$max_id = ($argc > 2) ? $argv[2] : null; -$min_id = ($argc > 3) ? $argv[3] : null; +$max_date = (count($args) > 0) ? $args[0] : null; +$max_id = (count($args) > 1) ? $args[1] : null; +$min_id = (count($args) > 2) ? $args[2] : null; $fixer = new UTF8FixerUpper(array('max_date' => $max_date, 'max_notice' => $max_id,