PowerCMS X ブログ

2024-12-10

任意のメールアドレスにもワークフロー通知メールを送信する AddToWorkflowNotifications プラグイン

PowerCMS X では標準でワークフロー機能を利用いただけます。

ワークフローで「承認依頼」や「差し戻し」を行うと該当のユーザー宛にメールで通知されますが、この通知メールを他のユーザーにも送りたいケースがあります。

製品同梱の「MultipleNotifications プラグイン」を利用すると『ワークフローに設定されている、同じ操作権限の他のユーザー』にメール通知が行えますが、例えば『システム管理部宛てにも常にワークフローのメールを通知したい』といったニーズにはマッチしません。

ワークフロー通知メールの CC に任意のメールアドレスを追加する

ということで、AddToWorkflowNotifications プラグインを作成しました。

AddToWorkflowNotifications プラグインを利用すると、システムスコープのプラグイン設定で登録したメールアドレスを、全てのワークフローの通知メール(承認依頼・差し戻し・公開通知など)の CC に追加します。
※ メールアドレスが未設定、または入力された文字列がメールアドレスでない場合はシステムメールを CC に追加します。

プラグイン「AddToWorkflowNotifications」の設定

AddToWorkflowNotifications プラグイン [1]

ダウンロード: AddToWorkflowNotifications.zip (2.9KB)

config.json

{
    "label": "AddToWorkflowNotifications",
    "id": "addtoworkflownotifications",
    "component": "AddToWorkflowNotifications",
    "description": "Add any email address to workflow notifications.",
    "version": "0.1",
    "author": "Alfasado Inc.",
    "author_link": "https://alfasado.net",
    "settings": {
        "addtoworkflownotifications_enabled": 0,
        "addtoworkflownotifications_cc": ""
    },
    "cfg_template": "cfg_template.tmpl",
    "cfg_system": 1,
    "callbacks": {
        "addtoworkflownotifications_mail_filter": {
            "mail_filter" : {
                "mail_filter" : {
                    "component" : "AddToWorkflowNotifications",
                    "priority"  : 11,
                    "method" : "mail_filter"
                }
            }
        }
    }
}

AddToWorkflowNotifications.php

<?php
require_once( LIB_DIR . 'Prototype' . DS . 'class.PTPlugin.php' );
class AddToWorkflowNotifications extends PTPlugin {
    public function __construct ()
    {
        parent::__construct();
    }
    public function mail_filter ( &$cb, $app, &$to, &$subject, &$body, &$headers )
    {
        if (! $this->is_workflow_notifications( $app ) ) {
            return true;
        }
        $enabled = $this->get_config_value( 'addtoworkflownotifications_enabled' );
        if (! $enabled ) {
            return true;
        }
        $add_cc = $this->get_config_value( 'addtoworkflownotifications_cc' );
        $msg = '';
        if (! $app->is_valid_email( $add_cc, $msg ) ) {
            $add_cc = $app->system_email();
            if (! $add_cc ) {
                return $app->error( $msg );
            }
        }
        $cc = [];
        if ( isset( $headers['Cc'] ) ) {
            $cc = $headers['Cc'];
            if ( is_string( $Cc ) ) {
                $cc = explode( ',', $Cc );
            } else if (! is_array( $cc ) ) {
                $cc = [];
            }
        }
        $cc[] = $add_cc;
        $headers['Cc'] = array_unique( $cc );
        return true;
    }
    private function is_workflow_notifications ( $app )
    {
        if (
            $app->id !== 'Prototype' && $app->id !== 'Worker' && $app->id !== 'RESTfulAPI'
         || ( $app->id === 'Prototype' && $app->mode !== 'save' && $app->mode !== 'list_action' )
        ) {
            return false;
        }
        $caller = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS, 5 );
        if (! isset( $caller[4] ) ) {
            return false;
        }
        $caller = $caller[4];
        if (
            ! isset( $caller['class'] )
         || (
                $caller['class'] !== 'PTWorkflow'
             && $caller['class'] !== 'BatchApproval'
            )
        ) {
            return false;
        }
        if (
            ! isset( $caller['function'] )
         || (
                 $caller['function'] !== 'workflow_post_save'
              && $caller['function'] !== 'batch_approval_objects'
              && $caller['function'] !== 'publish_object'
              && $caller['function'] !== 'pull_back'
            )
        ) {
            return false;
        }
        return true;
    }
}

脚注

  1. 記事執筆時点で最新の PowerCMS X ver.3.62 で動作確認しています。[^1]

カテゴリー:プラグイン | 技術情報 | サポート

投稿者:たはかし

ブログ内検索

アーカイブ