web-dev-qa-db-ja.com

少なくとも20日前に最後に変更されたノードを変更するためだけにユーザーポイントを付与するにはどうすればよいですか?

どうすればいいのかわかりません。 Drupal 7の serpoints モジュールを使用して、ノードを作成するユーザーにポイントを割り当てます(「レビュー」)。また、ポイントを獲得できるようにしたいです。既存のノードを置き換えるか変更します...ただし、前の作成/変更が20日以上前に行われた場合に限ります。

Rules でこれを行うにはどうすればよいですか?それ以外の場合、手動でコーディングするにはどうすればよいですか?

1
Pierre_colin

申し訳ありませんが、前の回答にはいくつかの課題があります。

  • ルールイベントAfter saving new contentは適切なイベントではありません。
  • カスタムモジュールが必要になります...」に同意しません。すぐに使用できるルールがあります。使用できます...詳細については、以下をお読みください。

これがあなたが求めていることをするルール( ルール エクスポート形式)です:

{ "rules_grant_userpoints_after_updating_old_content" : {
    "LABEL" : "Grant userpoints after updating old content",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "userpoints_rules" ],
    "ON" : { "node_update" : [] },
    "IF" : [
      { "data_is" : {
          "data" : [ "node-unchanged:changed" ],
          "op" : "\u003C",
          "value" : "-20 days"
        }
      }
    ],
    "DO" : [
      { "userpoints_action_grant_points" : {
          "user" : [ "site:current-user" ],
          "points" : "123",
          "tid" : "0",
          "entity" : [ "" ],
          "description" : "Modify existing node (nid=[node:nid]) that was not updated in the last 20 days.",
          "operation" : "Grant points",
          "display" : "1",
          "moderate" : "default"
        }
      },
      { "userpoints_rules_get_current_points" : {
          "USING" : { "user" : [ "site:current-user" ], "tid" : "all" },
          "PROVIDE" : { "loaded_points" : { "total_points" : "Number of points in all categories together" } }
        }
      },
      { "drupal_message" : { "message" : "You now have [total-points:value] points" } }
    ]
  }
}

上記のルールに関する詳細:

  • ルールイベント:既存のコンテンツを更新した後(選択したコンテンツタイプのみに制限することをお勧めします)。
  • ルール条件:トークン[node-unchanged:changed]は少なくとも20日前のものです。
  • ルールアクション:
    • グラント123ユーザーポイント(必要に応じて数やその他のオプションを調整します)。
    • 現在のユーザーポイントの残高を読み込みます。
    • 現在のユーザーポイントの残高を含むメッセージを表示します。

ルールUIを有効にしている場合(および ユーザーポイントルール モジュールの場合は、上記のルールを自分のサイトにインポートできるはずです。

PS:ルールが希望どおりに機能することを確認したら、ユーザーポイントが付与された後にユーザーに表示されるメッセージに関する最後の2つのルールアクションを削除することをお勧めします。

1
Pierre.Vriens

新しいレビューノードを追加するためのポイントの付与:

  1. 新しいルールを作成します。イベント:_After saving new content_ +タイプによる制限:Review

  2. アクション:_Grant points to a user_。

注:_Userpoints rules integration_をインストールする必要があります。


一定期間後にレビューノードを更新するためのポイントを与える

hook_rules_condition_info() を使用して新しいルール条件を作成するカスタムモジュールが必要になります。
この条件は、前のノードリビジョンがXX日(この場合は20日)より古いかどうかをチェックします。

次に例を示します。

_function YOUR_MODULE_rules_condition_info() {
  return array(
    'YOUR_MODULE_condition_compare_revision' => array(
      'label' => t('Compare date of last revision'),
      'parameter' => array(
        'node' => array(
          'label' => t('Node'),
          'type' => 'node',
        ),
      ),
    ),
  );
}

function YOUR_MODULE_condition_compare_revision($node) {
  $revision = db_select('node_revision', 'r')
    ->fields('r', array('nid'))
    ->condition('nid', $node->nid)
    // Make sure this is not the last revision.
    ->condition('vid', $node->vid, '!=')
    // Make sure this revision is older than your desired period of time.
    ->condition('timestamp', REQUEST_TIME - 20 * 24 * 60 * 60, '<=')
    ->execute()
    ->fetchObject();

  return $revision;
}
_

これは_YOUR_MODULE.rules.inc_に行く可能性があります。

:私はこれをテストせずにすばやく書きました。ただし、正常に動作しているはずです。

0
Aram Boyajyan