in drupal8+, calling `cv --user=<user> flush` before the user has logged in results in backtrace
Closed this issue · 2 comments
jmcclelland commented
If I install:
- Drupal8+ via drush (specifying a user "admin" and password on the command line)
- civicrm via cv
And then:
- Try to execute the
cv --user=admin flush
I get:
www-data@b2378ad6fbcf:~/powerbase/web$ cv --user=admin flush
Error: Call to undefined method Drupal\Core\Session\AccountProxy::get() in /var/www/powerbase/vendor/civic
rm/civicrm-core/CRM/Utils/System/Drupal8.php on line 596 #0 /var/www/powerbase/vendor/civicrm/civicrm-core
/CRM/Utils/System/Base.php(893): CRM_Utils_System_Drupal8->getUserIDFromUserObject()
#1 /var/www/powerbase/vendor/civicrm/civicrm-core/CRM/Core/BAO/UFMatch.php(71): CRM_Utils_System_Base->get
BestUFID()
#2 phar:///usr/local/bin/cv/src/Util/BootTrait.php(207): CRM_Core_BAO_UFMatch::synchronize()
#3 phar:///usr/local/bin/cv/src/Util/BootTrait.php(112): Civi\Cv\Command\FlushCommand->ensureUserContact()
#4 [internal function]: Civi\Cv\Command\FlushCommand->_boot_full()
#5 phar:///usr/local/bin/cv/src/Util/BootTrait.php(45): call_user_func()
#6 phar:///usr/local/bin/cv/src/Command/FlushCommand.php(29): Civi\Cv\Command\FlushCommand->boot()
#7 phar:///usr/local/bin/cv/vendor/symfony/console/Command/Command.php(255): Civi\Cv\Command\FlushCommand-
>execute()
#8 phar:///usr/local/bin/cv/vendor/symfony/console/Application.php(1009): Symfony\Component\Console\Comman
d\Command->run()
#9 phar:///usr/local/bin/cv/vendor/symfony/console/Application.php(273): Symfony\Component\Console\Applica
tion->doRunCommand()
#10 phar:///usr/local/bin/cv/src/Application.php(82): Symfony\Component\Console\Application->doRun()
#11 phar:///usr/local/bin/cv/vendor/symfony/console/Application.php(149): Civi\Cv\Application->doRun()
#12 phar:///usr/local/bin/cv/src/Application.php(49): Symfony\Component\Console\Application->run()
#13 phar:///usr/local/bin/cv/bin/cv(27): Civi\Cv\Application::main()
#14 /usr/local/bin/cv(14): require('phar:///usr/loc...')
#15 {main}
Error: Call to undefined method Drupal\Core\Session\AccountProxy::get() in CRM_Utils_System_Drupal8->getUs
erIDFromUserObject() (line 596 of /var/www/powerbase/vendor/civicrm/civicrm-core/CRM/Utils/System/Drupal8.
php).
www-data@b2378ad6fbcf:~/powerbase/web$
I can work around the problem by first calling:
cv php:eval 'CRM_Core_Config::singleton()->userSystem->synchronizeUsers();'
A simple fix might be to add that line somewhere around here? Happy to make a PR if that seems like the right strategy.
Seems similar to https://lab.civicrm.org/dev/core/-/issues/2323.
totten commented
@jmcclelland Right-o. That linked line is kind of funny...
Relatedly, on Mattermost, @seamuslee001 suggested a technique that might be bit lighter than a full userSystem->synchronizeUser()
.
Adapted as a proposal: #149
totten commented
Fix was merged. Should be released within the next couple days.