Posted by redboxhosting on February 9, 2015 at 4:07am
現在、特定のロールを持っているユーザーを条件に対象のユーザー全てに「メールを送る」もしくは「アカウントロブロックする」などのアクションを行いたいと考えています。
現在検討している方法は以下のようにRulesモジュールを利用する方法です。
・イベント
ユーザーがログインした
・条件
ユーザーがロールを保持している
Aロール
・アクション
アカウントをブロックなど
この場合ログインされないとアクションが起こらないためシステム的に定期的に全ユーザーをチェックしてアクションを実行するためイベントに「Cronタスクが実行された」を追加しました。
しかし、どうやらCron実行したというイベントはシステム的なイベントのため、条件の部分のユーザー名などはみてくれないらしくアクションが起こりません。
いくつか調べた所、こちらの記事が該当するようなのですが、rules_invoke_event('rule_name', $arg1, $arg2, $argN);というArgには何をいれるべきなのでしょうか。
http://stackoverflow.com/questions/12317393/drupal-7-run-rule-on-every-u...
よろしくお願い致します。
Comments
いくつか調べた所、こちらの記事が該当するようなのですが、r
rules_invoke_event()
の第 2 引数以降にはルールイベントrule_name
のコールバック関数に渡したい引数を指定すべきです。http://drupalcontrib.org/api/drupal/contributions!rules!rules.module/function/rules_invoke_event/7
ルールイベント
rule_name
がどのような引数を受け取るかはhook_rules_event_info()
で定義されているアイテムのvariables
の中身を確認するとおわかりになるかと思います。http://drupalcontrib.org/api/drupal/contributions!rules!rules.api.php/function/hook_rules_event_info/7
元々の課題にも言及しておきますね。
「特定のロールのユーザ全員にメールを送る」というのは確か Rules だけで可能です。イベントはお選びになった「 Cron タスクが実行された」というのを選んで、アクションとして「 Send mail to all users of a role 」というものを選択するとできるかと思います。お探しになってみてください。
一方、「特定のロールのユーザ全員のアカウントをブロックする」というのをするには Rules が提供するイベントやアクションだけでは厳しかったはずです。何らかのカスタムコードを書かないと厳しいのではないでしょうか( Views や Views Bulk Operations などを駆使するとできなくもないようですが、コードを書いた方が早いと思います)。ご参考まで。
早速のアドバスありがとうございます! なるほど、Rules
早速のアドバスありがとうございます!
なるほど、Rulesで引数を渡すことができるのであればユーザー名を渡してあげることも容易かもしれません。こちらは少し掘り下げて勉強してみたいとおもいます。
また、特定のロールユーザーをブロックするという設定ですが、確かに標準のRulesでは難しいようですので、先ほどのようにカスタムモジュールを書いて実装するしかなさそうです。
しかし、別の方法として一応RulesとRole Expire+パッチにより実現ができました。
role expire
https://www.drupal.org/project/role_expire
パッチ
https://www.drupal.org/node/1820306
イベント
ロールの期限が切れたとき(パッチを当てることにより利用可能になる)
条件
●●ロールが含まれる場合
アクション
アカウントをブロック
ロールに期限をもたせ、Cronにより期限切れか否かを判断
↓
期限切れと判断した場合は権限が外れると同時に、アクションをおこすことが出来る。
ちょっと無理矢理ですがCronを実行したタイミングで、特定のロール期限をExpireさせそのときに実行するアクションを指定することによりなんとかなりました。。。
ただし、やはり自分でモジュール化してシンプルに実行すべきかと思っています。
ご紹介くださっている Role expire
ご紹介くださっている Role expire とパッチとで実現できたのですね。無事実現できたとのことで何よりです!
実現方法までご丁寧にご紹介くださいありがとうございます。他の方のよい参考になると思います。
ご想像のとおり、モジュール化される際に必要なコードの量はそれほど多くないかと思いますので、もし機会とお時間がございましたらぜひぜひ。ちなみに Rules のアクションを追加するために実装すべきフック関数は
hook_rules_action_info()
です。hook_rules_action_info()
http://drupalcontrib.org/api/drupal/contributions!rules!rules.api.php/function/hook_rules_action_info/7