Система VtigerCRM предоставляет очень удобный инструмент - отслеживать историю изменений записи модуля. Например, вы можете перейти во карточку контрагента и увидеть в ней вкладку "Обновления". В ней отображается вся история, которая происходит с этой записью - кто её создал, кто редактировал или добавлял комментарий. Эта вкладка будет видна только в том случае, если активирован модуль ModTracker.
Однако, не для всех пользователей эта вкладка была бы полезна. Большинство администраторов предпочитают отключать этот функционал полностью или показывать его только отдельным группам пользователям.
В этой статье я покажу, как вы можете скрыть вкладку "Обновления" ото всех пользователей, кроме администраторов.
Для этого, вам потребуется доступ к файлам Vtiger.
Первое, что вам нужно сделать, это добавить новую функцию в конец файла modules/Vtiger/models/Module.php:
public function isUpdateDisplayEnabled(): bool
{
$userModel = Users_Record_Model::getCurrentUserModel();
return $userModel->isAdminUser();
}
Предназначение этой функции очень простое: здесь мы закладываем саму бизнес-логику - показывать или скрывать вкладку Обновлений. Если функция возвращает true, то вкладку показываем. Если false - скрываем.
Второе - убираем вкладку Обновлений из интерфейса пользователя. Для этого прееходим в файл modules/Vtiger/models/DetailView.php, находим функцию getDetailViewRelatedLinks. Эта функция формирует список всех ссылок, вкладок и кнопок, которые отображаются в карте записи. Нам нужно найти добавление нужной нам вкладки и пропустить её через нашу новую функцию. Для этого найдите нужный нам блок:
if($parentModuleModel->isTrackingEnabled()) {
$relatedLinks[] = array(
'linktype' => 'DETAILVIEWTAB',
'linklabel' => 'LBL_UPDATES',
'linkurl' => $recordModel->getDetailViewUrl().'&mode=showRecentActivities&page=1',
'linkicon' => ''
);
}
И замените его на следующий:
if($parentModuleModel->isTrackingEnabled() && $parentModuleModel->isUpdateDisplayEnabled()) {
$relatedLinks[] = array(
'linktype' => 'DETAILVIEWTAB',
'linklabel' => 'LBL_UPDATES',
'linkurl' => $recordModel->getDetailViewUrl().'&mode=showRecentActivities&page=1',
'linkicon' => ''
);
}
После этого, вкладка пропадёт у всех пользователей, кроме администраторов.
Но у нас остаётся одна проблема - вкладка доступна по прямой ссылке, а именно: index.php?module=Leads&view=Detail&record=191769&mode=showRecentActivities&page=1&tab_label=Lead%20LBL_UPDATES&app=MARKETING
Т.е. если пользователь знает прямую ссылку и вобъёт её в браузер, то он всё равно увидит создержимое этой вкладки. Чтобы запретить прямой доступ, переходим в файл modules/Vtiger/views/Detail.php, находим функцию _showRecentActivities, в районе позиции 421 находим строчку
$recordModel = Vtiger_Record_Model::getInstanceById($parentRecordId);
меняем её на следующую:
$recordModel = Vtiger_Record_Model::getInstanceById($parentRecordId);
$moduleModel = $recordModel->getModule();
if (!$moduleModel->isUpdateDisplayEnabled()) {
throw new AppException('Not authorized to view updates page!');
}
После этих манипуляций вы можете увидеть изменения - вкладка Обновлений не доступна для всех пользователей, кроме администраторов, а также нельзя перейти во вкладку по прямой ссылке.