Entwickler, der außergewöhnliche CRM- und Laravel-Lösungen liefert

Als erfahrener Entwickler spezialisiere ich mich auf Laravel- und Vue.js-Entwicklung, die Implementierung von Vtiger CRM sowie auf vielfältige WordPress-Projekte. Meine Arbeit zeichnet sich durch kreative, dynamische und benutzerzentrierte Weblösungen aus, die individuell an die Bedürfnisse meiner Kunden angepasst werden.

Erweiterung der Vtiger CRM-Funktionalität – Kommentare löschen aktivieren

Standardmäßig erlaubt Vtiger CRM das Hinzufügen, Bearbeiten und Antworten auf Kommentare, jedoch nicht das Löschen von Kommentaren. In diesem Artikel zeige ich Ihnen, wie Sie den Löschen-Button in den entsprechenden Templates einfügen und den Löschvorgang sowohl per JavaScript als auch serverseitig realisieren können. Damit können Sie Nutzern erlauben, Kommentare zu entfernen – selbstverständlich abhängig von den Zugriffsrechten, sodass Administratoren oder entsprechende Rollen diese Funktion bei Bedarf aktivieren oder deaktivieren können.

Wichtiger Hinweis

Diese Anleitung erfordert, dass Sie direkten Zugriff auf die CRM-Dateien haben. Es sind keine Änderungen an der Datenbank notwendig. Da die vorgenommenen Änderungen systemweit wirken, sollten Sie unbedingt vorher ein vollständiges Backup Ihrer Dateien erstellen.

  1. Hinzufügen des Löschen-Buttons in den Templates
    Um den Button zum Löschen von Kommentaren einzublenden, müssen Sie zwei Template-Dateien anpassen.

a) Datei:
 layouts/v7/modules/Vtiger/Comment.tpl
Finden Sie in dieser Datei etwa die Zeile 76 bzw. den Block, der so aussieht:

  {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}

Direkt nach diesem Block fügen Sie folgenden HTML-Code ein:

  {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}

b) Datei:
 layouts/v7/modules/Vtiger/RecentComments.tpl
Suchen Sie dort etwa ab Zeile 163 den Block:

  {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}

Fügen Sie direkt danach folgenden Code ein:

  {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}

Mit diesen Änderungen wird in den entsprechenden Kommentarvorlagen der Löschen-Button angezeigt, sofern der Benutzer über die Berechtigung „Delete“ verfügt.

  1. Anpassung der JavaScript-Funktionalität
    Nun muss sichergestellt werden, dass der Löschvorgang auch tatsächlich ausgeführt wird, wenn der Löschen-Button gedrückt wird. Dazu bearbeiten Sie die Datei:  layouts/v7/modules/Vtiger/resources/Detail.js
    Suchen Sie dort ungefähr ab Zeile 2908 den bereits vorhandenen Block, der auf das Klicken der Edit-Buttons reagiert:   
    detailContentsHolder.on('click','.editComment', function(e){
        // bestehender Code zum Bearbeiten
      });

Nach diesem Block fügen Sie folgenden neuen Code ein, der den Löschvorgang steuert:

  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');
    
    // Parameter für die Löschaktion
    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();
      }
    );
  });
  

Dieser JavaScript-Code löst beim Klick auf den Löschen-Button eine Anfrage an den Server aus, um den entsprechenden Kommentar zu löschen.

  1. Serverseitige Umsetzung – Löschen-Aktion in ModComments
    Damit das Löschen abschließend umgesetzt wird, bearbeiten Sie die Datei:  modules/ModComments/actions/Delete.php

Ersetzen Sie den gesamten Inhalt der Datei durch den folgenden Code:

  <?php
  class ModComments_Delete_Action extends Vtiger_Delete_Action {
    function checkPermission(Vtiger_Request $request) {
      // Optionale Berechtigungsprüfung – bei Bedarf aktivieren
      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;
    }
  }

Mit dieser Änderung wird bei Aufruf der Aktion „Delete“ der entsprechende Kommentar aus dem System entfernt. Die Berechtigungsprüfung erfolgt über die bestehende Logik von Vtiger.

Fazit

Mit diesen Anpassungen in den Template-Dateien, JavaScript- und PHP-Code können Sie in Vtiger CRM ganz einfach die Funktionalität zum Löschen von Kommentaren implementieren. Der Löschen-Button erscheint ausschließlich, wenn der Benutzer über die nötigen Berechtigungen verfügt. Durch die Kombination der Frontend- und Backend-Anpassungen wird sichergestellt, dass Kommentare korrekt entfernt werden.