ロールに期限をもたせ、Rulesモジュールでハンドリングする方法

Events happening in the community are now at Drupal community events on www.drupal.org.
redboxhosting's picture

こんにちは。

ルールモジュールについて3つほど分らない点があるためアドバイス頂けると助かります。

1:Cron手動実行時の処理がされない

現在、特定のAロールのみ保持している場合は、アカウントをブロックするという処理をルールにて設定しています。

しかし、ルールのイベント→イベントへの反応の部分で
「Cronタスクが実行された」を選択し手動にてCRONを動かしても
うまくルールが実行されていないように見受けられます。

ためしに、イベントへの反応を「ユーザーがログインした」と設定し、
テストユーザーでログイン処理を行うとアカウントがブロックされるため、
ルール自体の設定に問題はなさそうですが、手動実行のCRONで処理が行われないのは何か別の設定が必要なのでしょうか。

現在利用しているモジュール
rules 7.x-2.7

2:フィールドの比較

ルールモジュールとRole Expire 7.x-1.0-beta1+6-devを利用してロールの期限を元にアクションを起こしたいと考えています。

そこで、現在の日付からRole Expireに記載されている日付を比較し、あと期限まで●●日ですというメッセージを表示させたいのですが、比較の部分がどのようにおこなったらいいか見当がつきません。

3:コンポーネントについて
無知で申し訳ないのですがルールとコンポーネントではどう処理が異なるのでしょうか。

よろしくお願い致します。

Comments

ruleをエクスポートして貼ってもらうと

qchan's picture

Rulesには作成したRuleをエクスポートする機能があります。
それを貼ってもらうと、どういう設定をされたかがわかり、実際に試せるので答えが付きやすくなるかと思いますよ。

3,のコンポーネントは作成したRuleをVBOやスケジューラーなど別の場所で再利用するためのものです。
自分で作ったモジュールから呼び出すこともできます。
このドキュメントに詳しいですね。
Components
https://www.drupal.org/node/1300024

qchan

redboxhosting's picture

qchan さん

ご連絡ありがとうございます!

たしかにエクスポート内容をはりつけたほうが、他の方に親切ですね。アドバイスありがとうございます。
ということで、早速ルールをエクスポートした内容を貼り付けてみます。

こちらは、ユーザーがログインした、CRONが実行されたことをトリガーにWelcomeメッセージを表示させるというものです。
ログインした場合はメッセージが表示されるのですが、手動でCRONを実行した場合はメッセージが表示されないため、CRON実行時というのがルールモジュールでうまく動作していないように見えます。

■ルールモジュールエクスポート内容

{ "rules_user_rule" : {
"LABEL" : "Welcome Message",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"ON" : { "user_login" : [], "cron" : [] },
"DO" : [
{ "drupal_message" : { "message" : "\u3088\u3046\u3053\u305d\uff01[account:name] \u3055\u3093\u3002\u524d\u56de\u306e\u6700\u7d42\u30ed\u30b0\u30a4\u30f3\u65e5\u6642\u306f [account:last-login] \u3067\u3059\u3002" } }
]
}
}

コンポーネントについても理解しました こちらはちょっとまだ活用する方法がないのですがさらに作りこむ場合は必須の機能となりそうですね!

よろしくお願いします。

redboxhosting's picture

こちらの件ですが、Drupalを最新バージョンにしたところ少し挙動がかわりましたので
追記します。

バージョンアップ後は、CRONが実行された際に指定したWelcomeメッセージが表示されるようになりました。
試しに前のバージョンにDrupalを戻したところ、バージョンアップ後と同様にメッセージが表示されたため、もしかすると環境の問題だったのかもしれません。

次に、ロールに期限を持たせる方法をRulesに基づいて行う場合、手動で実行したCRONではやはりトリガーにならず、ロールに期限がつくことはありませんでした。
そこで、システムで自動実行されるCRON(例えば1時間毎に設定)の動作を指定時間まって確認したところ、指定されたロールに指定期日の期限がつくことを確認しました。

これらはモジュールとの相性なのかもしれませんが、DrupalCoreで内部的に自動実行されるCRONと管理画面から手動で実行できるCRONとではなにか違いがあるのかもしれません。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: