PowerCMS X ブログ
2024-12-10
PowerCMS X では標準でワークフロー機能を利用いただけます。
ワークフローで「承認依頼」や「差し戻し」を行うと該当のユーザー宛にメールで通知されますが、この通知メールを他のユーザーにも送りたいケースがあります。
製品同梱の「MultipleNotifications プラグイン」を利用すると『ワークフローに設定されている、同じ操作権限の他のユーザー』にメール通知が行えますが、例えば『システム管理部宛てにも常にワークフローのメールを通知したい』といったニーズにはマッチしません。
ということで、AddToWorkflowNotifications プラグインを作成しました。
AddToWorkflowNotifications プラグインを利用すると、システムスコープのプラグイン設定で登録したメールアドレスを、全てのワークフローの通知メール(承認依頼・差し戻し・公開通知など)の CC に追加します。
※ メールアドレスが未設定、または入力された文字列がメールアドレスでない場合はシステムメールを CC に追加します。
ダウンロード: AddToWorkflowNotifications.zip (2.9KB)
{
"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"
}
}
}
}
}
<?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;
}
}