Добавляем в Vtiger CRM функционал по удалению комментариев

Добавляем в Vtiger CRM функционал по удалению комментариев

По умолчанию в Vtiger CRM отсутствует функционал по удалению комментарией. Вы можете добавлять их, редактировать или отвечать на них. Но не удалять.

Ниже я приложил подробную инструкцию о том, как можно реализовать данную возможность. Для этого вам потрубется доступ к файлам CRM. Никаких изменений в базу данных не требуется.

Появление кнопки по удалению комментариев будет проверяться на права доступа к модулю. Т.е. вы можете отключить этот функционал у ролей или профилей пользователей

Первое, что нам нужно сделать - это отрисовать кнопку в наших шаблонах:

layouts/v7/modules/Vtiger/Comment.tpl после строки 76

А именно после этого блока:

{if $COMMENTS_MODULE_MODEL->isPermitted('EditView')}

{if $CHILDS_ROOT_PARENT_MODEL}

{assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()}

{/if}

<a href="javascript:void(0);" class="cursorPointer replyComment feedback" style="color: blue;">

{vtranslate('LBL_REPLY',$MODULE_NAME)}

</a>

{if $CURRENTUSER->getId() eq $COMMENT->get('userid')}

&nbsp;&nbsp;&nbsp;

<a href="javascript:void(0);" class="cursorPointer editComment feedback" style="color: blue;">

{vtranslate('LBL_EDIT',$MODULE_NAME)}

</a>

{/if}

{/if}

 

Добавьте следующие строчки:

{if $COMMENTS_MODULE_MODEL->isPermitted('Delete')}

{if $CHILDS_ROOT_PARENT_MODEL}

{assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()}

{/if}

&nbsp;&nbsp;&nbsp;

<a href="javascript:void(0);" class="cursorPointer deleteComment feedback" style="color: blue;">

{vtranslate('LBL_DELETE',$MODULE_NAME)}

</a>

{/if}

Также нам нужно добавить нашу кнопку в виджет комментариев

layouts/v7/modules/Vtiger/RecentComments.tpl после строчки 163

Найдите этот блок:

{if $CURRENTUSER->getId() eq $COMMENT->get('userid') && $IS_EDITABLE}

{if $IS_CREATABLE}&nbsp;&nbsp;&nbsp;{/if}

<a href="javascript:void(0);" class="cursorPointer editComment feedback" style="color: blue;">

{vtranslate('LBL_EDIT',$MODULE_NAME)}

</a>

{/if}

 

Вставьте следующие строчки:

{if $COMMENTS_MODULE_MODEL->isPermitted('Delete')}

{if $CHILDS_ROOT_PARENT_MODEL}

{assign var=CHILDS_ROOT_PARENT_ID value=$CHILDS_ROOT_PARENT_MODEL->getId()}

{/if}

&nbsp;&nbsp;&nbsp;

<a href="javascript:void(0);" class="cursorPointer deleteComment feedback" style="color: blue;">

{vtranslate('LBL_DELETE',$MODULE_NAME)}

</a>

{/if}

 

Итак, кнопка есть, теперь нам остаётся сделать так, чтобы она работала. Для этого начнём с правки javascript файлов. Меняем следующий файл:

layouts/v7/modules/Vtiger/resources/Detail.js в районе строки 2908

Найдите этот блок:

detailContentsHolder.on('click','.editComment', function(e){

self.removeCommentBlockIfExists();

var currentTarget = jQuery(e.currentTarget);

var commentInfoBlock = currentTarget.closest('.singleComment');

var commentInfoContent = commentInfoBlock.find('.commentInfoContent');

var commentReason = commentInfoBlock.find('[name="editReason"]');

var editCommentBlock = self.getEditCommentBlock();

var fullComment = commentInfoContent.data('fullcomment');

if (fullComment) {

fullComment = app.helper.getDecodedValue(fullComment);

} else {

fullComment = commentInfoContent.text();

}

editCommentBlock.find('.commentcontent').text(fullComment);

editCommentBlock.find('[name="reasonToEdit"]').val(commentReason.text());

editCommentBlock.find('[name="is_private"]').val(commentInfoBlock.find('[name="is_private"]').val());

/*commentInfoContent.hide();

commentInfoBlock.find('.commentActionsContainer').hide();*/

editCommentBlock.appendTo(commentInfoBlock).show();

});

После него добавьте следующие строчки:

 

detailContentsHolder.on('click','.deleteComment', function(e){

var currentTarget = jQuery(e.currentTarget);

var commentInfoBlock = currentTarget.closest('.singleComment');

var commentInfoHeader = commentInfoBlock.find('.commentInfoHeader');

var commentId = commentInfoHeader.data('commentid');

 

var params = {

'module': 'ModComments',

'action': 'Delete',

'crmid':commentId

};

app.helper.showProgress();

app.request.post({data: params}).then(

function(err, data) {

if (err === null) {

commentInfoBlock.remove();

app.helper.showSuccessNotification({message:'Comment Deleted Successfully'});

} else {

app.helper.showErrorNotification({message: err.message});

}

app.helper.hideProgress();

});

});

 

Итак, яваскрипт теперь отсылает нам данные. Остаётся только удалить сам комментарий. Открываем файл

modules/ModComments/actions/Delete.php

И заменяем полностью в нём содержимое на то, что приведено ниже:

<?php

class ModComments_Delete_Action extends Vtiger_Delete_Action {

 

function checkPermission(Vtiger_Request $request) {

//throw new AppException(vtranslate('LBL_PERMISSION_DENIED'));

        parent::checkPermission($request);

}

 

    public function process(Vtiger_Request $request) {

        $moduleName = $request->getModule();

        $recordId = $request->get('crmid');

 

        $recordModel = Vtiger_Record_Model::getInstanceById($recordId, $moduleName);

        $moduleModel = $recordModel->getModule();

        $recordModel->delete();

 

        $response = new Vtiger_Response();

        $response->setResult(array('success' => true));

        return $response;

 

    }

}

Теперь у каждого комментария у нас есть рабочая кнопка по его удалению.

Популярное

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

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

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

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

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

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

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

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

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

Telegram
@sergeyem
Telephone
+4915211100235