Как скрыть вкладку Обновлений в карте модуля?

Как скрыть вкладку Обновлений в карте модуля?

Система VtigerCRM предоставляет очень удобный инструмент - отслеживать историю изменений записи модуля. Например, вы можете перейти во карточку контрагента и увидеть в ней вкладку "Обновления". В ней отображается вся история, которая происходит с этой записью - кто её создал, кто редактировал или добавлял комментарий. Эта вкладка будет видна только в том случае, если активирован модуль ModTracker.

Система 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!');

        }

 

После этих манипуляций вы можете увидеть изменения - вкладка Обновлений не доступна для всех пользователей, кроме администраторов, а также нельзя перейти во вкладку по прямой ссылке.