在使用 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
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式