implementing hook_flag_access for controlling what the user can flag

implementing hook_flag_access for controlling what the user can flag

Submitted by Jitesh Doshi on Tue, 02/22/2011 - 22:17
Drupal logo

Recently, a client wanted their site users to be able to show their support for certain content nodes in Drupal. This can be done very nicely with the flag module. In case you missed it, flag module is a very useful module that has many applications - such as flag as offensive, like, friend, etc.

So it was very natural for us to use the flag module to let the users flag a node if they want to support it. But the client requirement was that a user should not be able to support more than one node at a time. That means we have to implement an upper limit of 1 on the number of nodes a user can support. This feature does not come with the flag module. But the 2.x version of this module does provide a special hook called hook_flag_access that can help implement this feature in your own module.

 * Implementation of hook_flag_access()
function MYMODULE_flag_access($flag, $content_id, $action, $account) {
  if($flag->name == 'membersupport' && $action == 'flag') {
    if($flag->get_user_count($GLOBALS['user']->uid) > 0) {
      return FALSE;

In the code above, when the flag being flagged is a certain one ('membersupport') and the action is 'flag', we check the number of nodes this user has already flagged with the same flag. If that number is greater than zero, then they are not allowed to flag any more.

Jitesh Doshi

Profile picture for user Jitesh Doshi
Managing Partner & CTO
  • A seasoned technology entrepreneur and enthusiast
  • A regular speaker at industry conferences and universities
  • Host and organizer of technology user groups
  • Active in management of non-profit organizations serving the local community
  • Leader and contributor for multiple open-source projects
  • Expert in cloud, application integration, web and mobile technologies
  • Author of open-source projects, including on - Popular Tags and PRLP.
  • Developed several highly successful software platforms and frameworks for clients