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

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

По умолчанию в Vtiger CRM отсутствует функционал по удалению комментарией. Вы можете добавлять их, редактировать или отвечать на них. Но не удалять. Ниже я приложил подробную инструкцию о том, как можно реализовать данную возможность. Для этого вам потребуется доступ к файлам 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;

 

    }

}

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