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

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

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

        }

 

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

Популярное

Самые популярные посты

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

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

Я запустил собственный бизнес и намеренно сделал всё возможное, чтобы работать из любой точки мира. Иногда я сижу с своём кабинете с большим 27-дюймовым монитором в своей квартире в г. Чебоксары. Иногда я нахожусь в офисе или в каком-нибудь кафе в другом городе.

Привет! Меня зовут Сергей Емельянов и я трудоголик
Business PHP

Привет! Меня зовут Сергей Емельянов и я трудоголик

Я программист. В душе я предприниматель. Я начал зарабатывать деньги с 11 лет, в суровые 90-е годы, сдавая стеклотару в местный магазин и обменивая её на сладости. Я зарабатывал столько, что хватало на разные вкусняшки.

Акция! Профессиональный разработчик CRM за 2000 руб. в час

Выделю время под ваш проект. Знания технологий Vtiger CRM, SuiteCRM, Laravel, Vue.js, Golang, React.js. Предлагаю варианты сотрудничества, которые помогут вам воспользоваться преимуществами внешнего опыта, оптимизировать затраты и снизить риски. Полная прозрачность всех этапов работы и учёт временных затрат. Оплачивайте только рабочие часы разработки после приемки задачи. Экономьте на платежах по его содержанию разработчика в штате. Возможно заключение договора по ИП. С чего начать, чтобы нанять профессионального разработчика на full-time? Просто заполните форму!

Telegram
@sergeyem
Telephone
+4915211100235