14

Earning badges on StackExchange is, well, fun. But aside from that it promotes quality interaction from users and helps weed out spam (I have never seen a spam post on the site).

I have a community website with about 500 active users, but the spammers are starting to become more prolific.

I would like a way to make the site more engaging while promoting the same quality of interactivity.

How would you recommend to put in a good reputation system, as well as a goal achievement system?

1
  • Regarding the spammers that were mentioned in the original question: they will still be there. So these spammers can be dealt with by following the suggestion made in the answer given by Free Radical on drupal.stackexchange.com/questions/121382/….
    – user63018
    May 18, 2016 at 7:04

3 Answers 3

17

There's the User Points module and the User Badges module, though the 7.x version of User Badges is not suitable for production yet (as of June 4, 2012).

Thankfully, User Points integrates with the Rules module, which allows you to greatly customize the ways users gain (or possibly lose) points.

There's also a collection of contributed modules for userpoints of varying stability. You can certainly set up some amazing stuff with these modules, but make sure to carefully test your implementation-- though the modules are well written and fairly stable, there's still a lot that can go wrong so make sure to verify everything works properly.

11

For the badges, there is the Achievements module.

The Achievements module offers the ability to create achievements and badges similar to systems seen on Xbox 360, Playstation 3, Foursquare, Gowalla, GetGlue, and more. For a Drupal site, this could mean commenting a certain number of times, starting a forum topic, visiting the site every day of the week, or anything else that can be tracked and coded.

2

Your question really consists of 2 parts, i.e. about how to implement:

  • a reputation system, which is like an evaluation by multiple users about a specific user.
  • a goals achievement system, which is like rewarding a user after completing various tasks, challenges, etc.

Read on for more details about how to implement each of both systems.

Goals achievement system

There are typically 2 modules you can choose from for such kind of system, i.e:

  1. The Achievements module, as suggested in another answer already. This module relies heavily on custom coding to handle many of the functions.

  2. The Goals module (Disclosure: I'm the maintainer of it), which can be used to incentivize anything on your site, such as voting, sharing content, creating relationships, etc.

    Goals and Tasks are implemented using fieldable entities. Some examples of tasks to be completed could be:

    • Log in to the site once per day for three consecutive days.
    • Post a number of nodes of selected content types.
    • Make a Friend connection on the site.
    • Etc.

    You can customize Goals via "Manage Fields" and/or "Manage display". Everything can be done with site building features only (no custom code involved), though hooks are available to integrate it in custom coding also. So the Goals module is built around using the admin interface configuration. Plus, goals and tasks within the Goals module are fieldable entities, so you have the flexibility to add additional fields and incorporate these entities into Views. Using the Goals Extras sub-module it integrates with the User Points module also.

    Head over to the Goals video which includes:

    • a general introduction to the module.
    • a demonstration to install, configure and use it.
    • samples of how it uses the Rules modules to do its magic (i.e. to track the progress of a user to achieve the various goals).

Reputation system

By using the Answers module (Disclosure: I'm a (co-)maintainer of it) you can "put in a good reputation system" (as in your question). Here are some details about it (from its project page):

Answers enables the implementation of a Question & Answer system in a Drupal site. Users can post questions and other users can answer them.

Head over to its project page for more details. Visit its demo site for a demonstration (in read only mode for anonymous users) of Views based lists of:

The "core" Answers module enables the content types Question and Answer, whereas Answers are displayed below the Question they relate to. These 2 content types are fiedable, you can manage their displays, etc.

Use its sub-modules to enable selected functionality (based on a site's requirements), i.e.:

  • Answers Best Answer, which allows for marking any of the answers to a specific question as the best (accepted) answer (to display the blue check marks to the left of each answer, and which is replaced by a green checkmark when an answer is marked as the best answer).
  • Answers Theme, which transforms the (rather boring) vanilla display of a Question (and its related Answers below it), into a way more attractive look-and-feel. Such as the orange bubble that is added around the question (to better highlight it).
  • Answers Notification, to allow logged in users to subscribe to selected questions, so that they receive notifications (using the Message Stack) when Questions receive Answers.
  • Answers Voting, to implement a system to upvote or downvote either Questions and/or Answers (which uses the Rate module).
  • Answers Userpoints, to increase or decrease "reputation points" (which uses the Userpoints module) on events such as up- or down-voting on a question or answer, or marking an Answer as the "Best Answer".

Quite a lot of its "business logic" is implemented via all sorts of configurable rules (using the Rules module). As an example, if you don't agree with the out-of-the-box rules about how much "userpoints" are granted to an upvoted (or downvoted) question (or answer), you just use the Rules UI to tune the amount of such points to your requirements. E.g.: should downvoting questions really be free (i.e: Should the downvoter loose any points in doing so?).

For the sake of completeness, below is a rule (in Rules export format), which is used to grant '+15' points to the author of an Answer, together with '+2' points for the user who marks that answer as accepted (= the author of the Question), whereas marking it as such is done by flagging that Answer as 'Best answer' (using the Flag module):

{ "rules_flag_answers_best_answer" : {
    "LABEL" : "flag_answers_best_answer",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "TAGS" : [ "answers" ],
    "REQUIRES" : [ "rules", "userpoints_rules", "flag" ],
    "ON" : { "flag_flagged_best_answer" : [] },
    "IF" : [
      { "NOT data_is" : { "data" : [ "flagging-user" ], "value" : [ "flagged-node:author" ] } }
    ],
    "DO" : [
      { "userpoints_action_grant_points" : {
          "user" : [ "flagged-node:author" ],
          "points" : "15",
          "tid" : "0",
          "entity" : [ "" ],
          "operation" : "addPoints",
          "display" : 1,
          "moderate" : "default"
        }
      },
      { "userpoints_action_grant_points" : {
          "user" : [ "flagging-user" ],
          "points" : "2",
          "tid" : "0",
          "entity" : [ "" ],
          "operation" : "addPoints",
          "display" : 1,
          "moderate" : "default"
        }
      }
    ]
  }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.