SuiteCRM 修改菜单后报 500 错误,管理员无法进入系统

更新日期: 2024-01-20 阅读次数: 178 字数: 662 分类: 管理

在使用 SuiteCRM 管理员在后台配置菜单,选择将所有菜单隐藏。。。不要问为什么,就是这样配置了。

然后管理员再也无法使用 SuiteCRM 了,登录之后就报 500 错误,无法使用,也无法恢复之前的配置。 其他用户倒是可以正常登录。

报错信息

从日志看起来确实是找不到菜单,导致报错:

FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught TypeError: in_array(): Argument #2 ($haystack) must be of type array, null given in suitecrm/include/GroupedTabs/GroupedTabStructure.php:85
Stack trace:
suitecrm/include/GroupedTabs/GroupedTabStructure.php(85): in_array()
suitecrm/include/MVC/View/SugarView.php(629): GroupedTabStructure->get_tab_structure()
suitecrm/include/MVC/View/SugarView.php(202): SugarView->displayHeader()
suitecrm/include/MVC/Controller/SugarController.php(432): SugarView->process()
suitecrm/include/MVC/Controller/SugarController.php(363): SugarController->processView()
suitecrm/include/MVC/SugarApplication.php(101): SugarController->execute()
suitecrm/index.php(52): SugarApplication->execute()
{main}
thrown in suitecrm/include/GroupedTabs/GroupedTabStructure.php on line 85" while reading response header from upstream, request: "GET /index.php?module=Home&action=index HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php8.1-fpm.sock:", referrer: "https://xxx/index.php?action=Login&module=Users&login_module=Home&login_action=index"

数据库

直接通过数据库很难定位,因为有上百张表,找到了几个感觉相关的表。尝试修改了一些配置,还是没有解决。

user_preferences 表看起来有相关性,而且修改时间也跟操作时间相契合,但是修改了一堆配置,依旧无效。下面会提到。

displayHeader

无奈看看代码,也是没有头绪。

include/MVC/View/SugarView.php(202): SugarView->displayHeader()
include/MVC/View/SugarView.php(629): GroupedTabStructure->get_tab_structure()

 612                 require_once('include/GroupedTabs/GroupedTabStructure.php');
 613                 $groupedTabsClass = new GroupedTabStructure();
 614                 $modules = query_module_access_list($current_user);
 615
 616                 //handle with submoremodules
 617                 $max_tabs = $current_user->getPreference('max_tabs');
 618                 // If the max_tabs isn't set incorrectly, set it within the range, to the default max sub tabs size
 619                 if (!isset($max_tabs) || $max_tabs <= 0 || $max_tabs > 10) {
 620                     // We have a default value. Use it
 621                     if (isset($GLOBALS['sugar_config']['default_max_tabs'])) {
 622                         $max_tabs = $GLOBALS['sugar_config']['default_max_tabs'];
 623                     } else {
 624                         $max_tabs = 8;
 625                     }
 626                 }
 627
 628                 $subMoreModules = false;
 629                 $groupTabs = $groupedTabsClass->get_tab_structure(get_val_array($modules));
 630                 // We need to put this here, so the "All" group is valid for the user's preference.
 631                 $groupTabs[$app_strings['LBL_TABGROUP_ALL']]['modules'] = $fullModuleList;

YTowOnt9

base64 解码后是:

a:0:{}

哪些记录受影响

select * from suitecrm.user_preferences where assigned_user_id = 1 and contents = "YTowOnt9";

共 12 行记录需要确认。

  • ETag:TODO 无参考项

  • Dashboard:TODO 无参考

  • Opportunities:TODO

  • SecurityGroups:时间戳,pass

  • Users:没有其他用户的参考,但从时间戳看,也不是修改项,pass

  • Emails:都是一样的空,pass

  • ModuleBuilder:时间戳,pass

  • Assistant: TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

  • AOS_Products:重点:TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

  • AOS_Contracts:重点:TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

  • AOR_Reports:重点:TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

  • ACLRoles:TODO 无参考,但是可以考虑 delete,因为创建时间非部署时间

select * from suitecrm.user_preferences where assigned_user_id = 1 and category in ("AOS_Products", "AOS_Contracts", "AOR_Reports");

从 github 代码库中查找初始值

没有找到。

最后

很无奈,只能重新部署了。

感觉这样排查下去,可能一天也不能搞定(大周末早上我已经排查了3个小时)。而我手头还有其他紧急的项目。

所以干脆重新部署。

部署之后,做个数据库备份。

浪费生命!

重新部署

  • 备份 themes 目录:themes/SuiteP/tpls

tags: CRM

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式