aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2013-11-03 04:14:36 +0100
committerAndreas Fischer <bantu@phpbb.com>2013-11-03 13:02:48 +0100
commit743a0560c3cced8c37b5ae840e449a60a0b51a33 (patch)
tree55dfd647a417d0340c301e05e3c23331ab7d4898
parenta1af10848de17da27a6397aafb51c09b3343173a (diff)
downloadforums-743a0560c3cced8c37b5ae840e449a60a0b51a33.tar
forums-743a0560c3cced8c37b5ae840e449a60a0b51a33.tar.gz
forums-743a0560c3cced8c37b5ae840e449a60a0b51a33.tar.bz2
forums-743a0560c3cced8c37b5ae840e449a60a0b51a33.tar.xz
forums-743a0560c3cced8c37b5ae840e449a60a0b51a33.zip
[ticket/11998] Add console command for recalculating email hash.
PHPBB3-11998
-rw-r--r--phpBB/config/console.yml7
-rw-r--r--phpBB/phpbb/console/command/fixup/recalculate_email_hash.php72
2 files changed, 79 insertions, 0 deletions
diff --git a/phpBB/config/console.yml b/phpBB/config/console.yml
new file mode 100644
index 0000000000..a30ca3722c
--- /dev/null
+++ b/phpBB/config/console.yml
@@ -0,0 +1,7 @@
+services:
+ console.command.fixup.recalculate_email_hash:
+ class: phpbb\console\command\fixup\recalculate_email_hash
+ arguments:
+ - @dbal.conn
+ tags:
+ - { name: console.command }
diff --git a/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php
new file mode 100644
index 0000000000..b788fe5631
--- /dev/null
+++ b/phpBB/phpbb/console/command/fixup/recalculate_email_hash.php
@@ -0,0 +1,72 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+namespace phpbb\console\command\fixup;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class recalculate_email_hash extends Command
+{
+ /** @var \phpbb\db\driver\driver */
+ protected $db;
+
+ function __construct(\phpbb\db\driver\driver $db)
+ {
+ $this->db = $db;
+
+ parent::__construct();
+ }
+
+ protected function configure()
+ {
+ $this
+ ->setName('fixup:recalculate-email-hash')
+ ->setDescription('Recalculates the user_email_hash column of the users table.')
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $sql = 'SELECT user_id, user_email, user_email_hash
+ FROM ' . USERS_TABLE . '
+ WHERE user_type <> ' . USER_IGNORE . "
+ AND user_email <> ''";
+ $result = $this->db->sql_query($sql);
+
+ while ($row = $this->db->sql_fetchrow($result))
+ {
+ $user_email_hash = phpbb_email_hash($row['user_email']);
+ if ($user_email_hash !== $row['user_email_hash'])
+ {
+ $sql_ary = array(
+ 'user_email_hash' => $user_email_hash,
+ );
+
+ $sql = 'UPDATE ' . USERS_TABLE . '
+ SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . '
+ WHERE user_id = ' . (int) $row['user_id'];
+ $this->db->sql_query($sql);
+
+ if ($output->getVerbosity() >= OutputInterface::VERBOSITY_DEBUG)
+ {
+ $output->writeln(sprintf(
+ 'user_id %d, email %s => %s',
+ $row['user_id'],
+ $row['user_email'],
+ $user_email_hash
+ ));
+ }
+ }
+ }
+ $this->db->sql_freeresult($result);
+
+ $output->writeln('<info>Successfully recalculated all email hashes.</info>');
+ }
+}