web-dev-qa-db-ja.com

ユーザーポイントKarma-反対票に対してのみユーザーポイントを請求することは可能ですか?

ユーザーポイント、ユーザーカルマ、投票アップ/ダウンモジュールを使用しています。賛成ではなく反対に投票した場合にのみユーザーポイントを差し引くように構成できる方法があるのでしょうか。

Stack Exchangeのレピュテーションシステムに似ています。賛成票を投じた場合はドッキングされませんが、反対票を投じた場合は、評判ポイントが固定されます。

評判ユーザーポイント->カルマポイント->投票者ポイントコストの設定を使用すると、投票の方向に関係なく、投票した場合にのみ課金するように構成できます。何か案は?

8
Nelson

ユーザーKarmaの設定をオーバーライドするモジュールを追加することは、確かに1つのオプションです。

別の可能性としては、 Rules および Voting_Rules を使用して、ユーザーポイントを追加および削除するための独自の設定を制御することができます。

有効にしたら、/ admin/config/workflow/rulesに移動して「新しいルールを追加」します。イベントReactイベント「ユーザーがノードに投票する」で設定します。

「投票の値を確認する」という条件を追加し、0未満の場合は「ユーザーにポイントを付与する」にアクションを追加しますが、マイナスのポイントにします。

このルールのスクリーンショットは次のとおりです。 enter image description here

オプションで、ユーザーKarmaを組み合わせて使用​​する場合は、代わりにReactのイベントで「ユーザーはポイントが付与されました」のイベントで、条件をテストし、必要に応じてオーバーライドできます。

5
Brent

D7の場合、これらの代替モジュールを組み合わせて使用​​することをお勧めします。これは、いくつかのノードが反対票を投じたときにユーザーポイントを差し引く(または追加する)モジュールです(または、そのような反対投票が再度削除されます。これも発生する可能性があります...)。

以下は、これらの各ケースに必要なルールです(上記の必要なモジュールを有効にした後、ルールUIを使用して独自のサイトにインポートします)。これらのルールで行われた仮定:

  • マシン名articleのコンテンツタイプを使用します(この名前を自分のマシン名に合うように変更するか、投票条件を省略して、投票できるコンテンツタイプを有効にします)。
  • 反対票の値は「-1 "。

ノードに反対投票する

以下のルールは、(ノードの作成者への)反対投票に対して-2(-2を付与)ユーザーポイントを減算します...[〜#〜] and [〜#〜]有権者に-1ユーザーポイント:

{ "rules_votedown_node" : {
    "LABEL" : "votedown_node",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "voting_rules", "userpoints_rules" ],
    "ON" : { "voting_rules_insert_node" : [] },
    "IF" : [
      { "node_is_of_type" : {
          "node" : [ "node" ],
          "type" : { "value" : { "article" : "article" } }
        }
      },
      { "voting_rules_condition_check_vote_value" : { "vote" : [ "vote" ], "value" : "-1" } }
    ],
    "DO" : [
      { "userpoints_action_grant_points" : {
          "user" : [ "node:author" ],
          "points" : "-2",
          "tid" : "0",
          "entity" : [ "" ],
          "description" : "Receive downvote to [node:type-name] \u0022[node:title]\u0022",
          "operation" : "DownvoteReceived",
          "reference" : "By uid=[vote:uid], for [node:type-name] to q=\u003Ca href=\u0022\/node\/[node:nid]\u0022\u003E[node:title]\u003C\/a\u003E",
          "display" : "1",
          "moderate" : "default"
        }
      },
      { "userpoints_action_grant_points" : {
          "user" : [ "vote:user" ],
          "points" : "-1",
          "tid" : "0",
          "entity" : [ "" ],
          "description" : "Issue downvote to [node:type-name] \u0022[node:title]\u0022",
          "operation" : "DownvoteIssued",
          "reference" : "From uid=[node:author:uid], for [node:type-name] to q=\u003Ca href=\u0022\/node\/[node:nid]\u0022\u003E[node:title]\u003C\/a\u003E",
          "display" : "1",
          "moderate" : "default"
        }
      }
    ]
  }
}

ノードへの反対投票をキャンセルする

以下のルールは、キャンセルされた反対投票に対して+2(=削除-2)ユーザーポイントを付与します(ノードの作成者に)...[〜#〜]および[〜#〜] 投票者のユーザーポイントも+1します。

{ "rules_votedown_node_cancel" : {
    "LABEL" : "votedown_node_cancel",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "voting_rules", "userpoints_rules" ],
    "ON" : { "voting_rules_delete_node" : [] },
    "IF" : [
      { "node_is_of_type" : {
          "node" : [ "node" ],
          "type" : { "value" : { "article" : "article" } }
        }
      },
      { "voting_rules_condition_check_vote_value" : { "vote" : [ "vote" ], "value" : "-1" } }
    ],
    "DO" : [
      { "userpoints_action_grant_points" : {
          "user" : [ "node:author" ],
          "points" : "2",
          "tid" : "0",
          "entity" : [ "" ],
          "description" : "Cancel downvote to [node:type-name] \u0022[node:title]\u0022",
          "operation" : "DownvoteCancelled",
          "reference" : "By uid=[vote:uid], for [node:type-name] to q=\u003Ca href=\u0022\/node\/[node:nid]\u0022\u003E[node:title]\u003C\/a\u003E",
          "display" : "1",
          "moderate" : "default"
        }
      },
      { "userpoints_action_grant_points" : {
          "user" : [ "vote:user" ],
          "points" : "1",
          "tid" : "0",
          "entity" : [ "" ],
          "description" : "Withdraw downvote to [node:type-name] \u0022[node:title]\u0022",
          "operation" : "DownvoteWithdrawn",
          "reference" : "From uid=[node:author:uid], for [node:type-name] to q=\u003Ca href=\u0022\/node\/[node:nid]\u0022\u003E[node:title]\u003C\/a\u003E",
          "display" : "1",
          "moderate" : "default"
        }
      }
    ]
  }
}

上記のエクスポートされたルールを参照するだけでは明らかではないかもしれませんが、各ユーザーポイントトランザクションで使用されているdescriptionoperationおよびreferenceに注意してください。

このようなルールを使用すると、賛成票および/または反対票に請求する金額の構成は単なるルールUIを使用して、付与(または削除)されるユーザーポイントの値を調整すること。

また、各ユーザーポイントトランザクションで使用されるdescriptionoperationおよびreferenceにも注意してください。これにより、(実際のユーザーポイントトランザクションに追加されたさまざまな詳細を介して)典型的なユーザーポイントレポートも改善されます。

Conditional Rules モジュールを使用すると、これらのルールを1つのルールに統合することもできます(これにより、メンテナンスが簡単になります)。

宿題:上記のルールを適用して、 bounties on SE (= transferあるユーザーから別のユーザーへのユーザーポイントの一部)。

PS:「賛成票を投じると、評判ポイントがドッキングされます」(SEの場合)は、質問に対してではなく、回答に対してのみ当てはまります。それを希望どおりに調整するには、適切な追加のルール条件を追加するだけです(たとえば、コンテンツタイプに基づいて)。

1
Pierre.Vriens