diff --git a/patches/0004-accomodate-flag-v3.patch b/patches/0004-accomodate-flag-v3.patch new file mode 100644 index 0000000..429ca29 --- /dev/null +++ b/patches/0004-accomodate-flag-v3.patch @@ -0,0 +1,1071 @@ +diff --git a/modules/commons/commons_content_moderation/commons_content_moderation.features.inc b/modules/commons/commons_content_moderation/commons_content_moderation.features.inc +index 3a75218..e4999ed 100644 +--- a/modules/commons/commons_content_moderation/commons_content_moderation.features.inc ++++ b/modules/commons/commons_content_moderation/commons_content_moderation.features.inc +@@ -27,7 +27,7 @@ function commons_content_moderation_flag_default_flags() { + $flags = array(); + // Exported flag: "Comment inappropriate". + $flags['inappropriate_comment'] = array( +- 'content_type' => 'comment', ++ 'entity_type' => 'comment', + 'title' => 'Comment inappropriate', + 'global' => 0, + 'types' => array( +@@ -47,29 +47,25 @@ function commons_content_moderation_flag_default_flags() { + 'unflag_message' => '', + 'unflag_denied_text' => '', + 'link_type' => 'confirm', +- 'roles' => array( +- 'flag' => array( +- 0 => 2, +- ), +- 'unflag' => array( +- 0 => 2, +- ), ++ 'show_in_links' => array( ++ 'diff_standard' => TRUE, ++ 'full' => TRUE, ++ 'token' => TRUE, + ), + 'weight' => 0, + 'show_on_form' => 0, + 'access_author' => 'comment_others', +- 'show_on_comment' => 1, + 'flag_confirmation' => 'Are you sure you want to report this comment as inappropriate?', + 'unflag_confirmation' => 'Are you sure you want to cancel reporting this comment as inappropriate?', + 'module' => 'commons_content_moderation', + 'locked' => array( + 0 => 'name', + ), +- 'api_version' => 2, ++ 'api_version' => 3, + ); + // Exported flag: "Node inappropriate". + $flags['inappropriate_node'] = array( +- 'content_type' => 'node', ++ 'entity_type' => 'node', + 'title' => 'Node inappropriate', + 'global' => 0, + 'types' => array( +@@ -87,19 +83,12 @@ function commons_content_moderation_flag_default_flags() { + 'unflag_message' => '', + 'unflag_denied_text' => '', + 'link_type' => 'confirm', +- 'roles' => array( +- 'flag' => array( +- 0 => 2, +- ), +- 'unflag' => array( +- 0 => 2, +- ), ++ 'show_in_links' => array( ++ 'full' => TRUE, + ), + 'weight' => 0, + 'show_on_form' => 0, + 'access_author' => '', +- 'show_on_page' => 1, +- 'show_on_teaser' => 0, + 'show_contextual_link' => FALSE, + 'i18n' => 0, + 'flag_confirmation' => 'Are you sure you want to report this content as inappropriate?', +@@ -108,7 +97,7 @@ function commons_content_moderation_flag_default_flags() { + 'locked' => array( + 0 => 'name', + ), +- 'api_version' => 2, ++ 'api_version' => 3, + ); + return $flags; + +diff --git a/modules/commons/commons_content_moderation/commons_content_moderation.features.user_permission.inc b/modules/commons/commons_content_moderation/commons_content_moderation.features.user_permission.inc +new file mode 100644 +index 0000000..763738f +--- /dev/null ++++ b/modules/commons/commons_content_moderation/commons_content_moderation.features.user_permission.inc +@@ -0,0 +1,68 @@ ++ 'flag abuse_user', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'flag inappropriate_comment'. ++ $permissions['flag inappropriate_comment'] = array( ++ 'name' => 'flag inappropriate_comment', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'flag inappropriate_node'. ++ $permissions['flag inappropriate_node'] = array( ++ 'name' => 'flag inappropriate_node', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'unflag abuse_user'. ++ $permissions['unflag abuse_user'] = array( ++ 'name' => 'unflag abuse_user', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'unflag inappropriate_comment'. ++ $permissions['unflag inappropriate_comment'] = array( ++ 'name' => 'unflag inappropriate_comment', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'unflag inappropriate_node'. ++ $permissions['unflag inappropriate_node'] = array( ++ 'name' => 'unflag inappropriate_node', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ return $permissions; ++} +\ No newline at end of file +diff --git a/modules/commons/commons_content_moderation/commons_content_moderation.info b/modules/commons/commons_content_moderation/commons_content_moderation.info +index 2fb3130..962afc6 100644 +--- a/modules/commons/commons_content_moderation/commons_content_moderation.info ++++ b/modules/commons/commons_content_moderation/commons_content_moderation.info +@@ -3,6 +3,7 @@ description = Provides a content moderator role which allows privileged users to + package = Commons - Building blocks + core = 7.x + ++dependencies[] = comment + dependencies[] = ctools + dependencies[] = flag + dependencies[] = flag_abuse +@@ -14,6 +15,12 @@ features[ctools][] = views:views_default:3.0 + features[features_api][] = api:2 + features[flag][] = inappropriate_comment + features[flag][] = inappropriate_node ++features[user_permission][] = flag abuse_user ++features[user_permission][] = flag inappropriate_comment ++features[user_permission][] = flag inappropriate_node ++features[user_permission][] = unflag abuse_user ++features[user_permission][] = unflag inappropriate_comment ++features[user_permission][] = unflag inappropriate_node + features[user_role][] = content moderator + features[variable][] = flag_abuse_flags + features[views_view][] = commons_content_moderation_reported_comments +diff --git a/modules/commons/commons_content_moderation/commons_content_moderation.views_default.inc b/modules/commons/commons_content_moderation/commons_content_moderation.views_default.inc +index b6edc0f..673a125 100644 +--- a/modules/commons/commons_content_moderation/commons_content_moderation.views_default.inc ++++ b/modules/commons/commons_content_moderation/commons_content_moderation.views_default.inc +@@ -245,7 +245,7 @@ function commons_content_moderation_views_default_views() { + $handler->display->display_options['fields']['entity_id']['field'] = 'comment_body'; + /* Sort criterion: Flags: Flagged time */ + $handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp'; +- $handler->display->display_options['sorts']['timestamp']['table'] = 'flag_content'; ++ $handler->display->display_options['sorts']['timestamp']['table'] = 'flagging'; + $handler->display->display_options['sorts']['timestamp']['field'] = 'timestamp'; + $handler->display->display_options['sorts']['timestamp']['relationship'] = 'flag_content_rel'; + /* Filter criterion: Comment: Approved */ +diff --git a/modules/commons/commons_follow/commons_follow.module b/modules/commons/commons_follow/commons_follow.module +index 5fa62f8..10f8615 100644 +--- a/modules/commons/commons_follow/commons_follow.module ++++ b/modules/commons/commons_follow/commons_follow.module +@@ -111,7 +111,7 @@ function commons_follow_views_default_views_alter(&$views) { + + // Exposed "Following" filter. + $handler->display->display_options['filters']['flagged']['id'] = 'flagged'; +- $handler->display->display_options['filters']['flagged']['table'] = 'flag_content'; ++ $handler->display->display_options['filters']['flagged']['table'] = 'flagging'; + $handler->display->display_options['filters']['flagged']['field'] = 'flagged'; + $handler->display->display_options['filters']['flagged']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['filters']['flagged']['ui_name'] = 'Following'; +@@ -309,9 +309,9 @@ function commons_follow_get_followed_content($account = array()) { + $results = array(); + $flag_ids = commons_follow_get_flag_ids(); + // Get a list of everything that the user is following. +- $result = db_query("SELECT fid, content_id FROM {flag_content} WHERE fid IN (:fids) AND uid = :uid", array(':fids' => array_keys($flag_ids), ':uid' => $account->uid)); ++ $result = db_query("SELECT fid, entity_id FROM {flagging} WHERE fid IN (:fids) AND uid = :uid", array(':fids' => array_keys($flag_ids), ':uid' => $account->uid)); + foreach ($result as $this_result) { +- $results[$flag_ids[$this_result->fid]][] = $this_result->content_id; ++ $results[$flag_ids[$this_result->fid]][] = $this_result->entity_id; + } + + return $results; +diff --git a/modules/commons/commons_follow/commons_follow_group/commons_follow_group.features.inc b/modules/commons/commons_follow/commons_follow_group/commons_follow_group.features.inc +index ec89a6c..f20077a 100644 +--- a/modules/commons/commons_follow/commons_follow_group/commons_follow_group.features.inc ++++ b/modules/commons/commons_follow/commons_follow_group/commons_follow_group.features.inc +@@ -21,7 +21,7 @@ function commons_follow_group_flag_default_flags() { + + // Exported flag: "Groups". + $flags['commons_follow_group'] = array( +- 'content_type' => 'node', ++ 'entity_type' => 'node', + 'title' => 'Groups', + 'global' => 0, + 'types' => array( +@@ -35,31 +35,25 @@ function commons_follow_group_flag_default_flags() { + 'unflag_message' => 'Not following', + 'unflag_denied_text' => '', + 'link_type' => 'toggle', +- 'roles' => array( +- 'flag' => array( +- 0 => 2, +- ), +- 'unflag' => array( +- 0 => 2, +- ), +- ), + 'weight' => 0, + 'show_on_form' => 0, + 'access_author' => '', +- 'show_on_page' => 1, +- 'show_on_teaser' => 1, ++ 'show_in_links' => array( ++ 'full' => TRUE, ++ 'teaser' => TRUE, ++ ), + 'show_contextual_link' => FALSE, + 'i18n' => 0, + 'module' => 'commons_follow_group', + 'locked' => array( + 0 => 'name', + ), +- 'api_version' => 2, ++ 'api_version' => 3, + ); + + // Exported flag: "Commons Follow (Groups - Email)". + $flags['email_group'] = array( +- 'content_type' => 'node', ++ 'entity_type' => 'node', + 'title' => 'Commons Follow (Groups - Email)', + 'global' => 0, + 'types' => array( +@@ -73,26 +67,16 @@ function commons_follow_group_flag_default_flags() { + 'unflag_message' => '', + 'unflag_denied_text' => '', + 'link_type' => 'toggle', +- 'roles' => array( +- 'flag' => array( +- 0 => 2, +- ), +- 'unflag' => array( +- 0 => 2, +- ), +- ), + 'weight' => -11, + 'show_on_form' => 0, + 'access_author' => '', +- 'show_on_page' => 0, +- 'show_on_teaser' => 0, + 'show_contextual_link' => FALSE, + 'i18n' => 0, + 'module' => 'commons_follow_group', + 'locked' => array( + 0 => 'name', + ), +- 'api_version' => 2, ++ 'api_version' => 3, + ); + + return $flags; +diff --git a/modules/commons/commons_follow/commons_follow_group/commons_follow_group.features.user_permission.inc b/modules/commons/commons_follow/commons_follow_group/commons_follow_group.features.user_permission.inc +new file mode 100644 +index 0000000..3c1ef2f +--- /dev/null ++++ b/modules/commons/commons_follow/commons_follow_group/commons_follow_group.features.user_permission.inc +@@ -0,0 +1,50 @@ ++ 'flag commons_follow_group', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'flag email_group'. ++ $permissions['flag email_group'] = array( ++ 'name' => 'flag email_group', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'unflag commons_follow_group'. ++ $permissions['unflag commons_follow_group'] = array( ++ 'name' => 'unflag commons_follow_group', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'unflag email_group'. ++ $permissions['unflag email_group'] = array( ++ 'name' => 'unflag email_group', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ return $permissions; ++} +diff --git a/modules/commons/commons_follow/commons_follow_group/commons_follow_group.info b/modules/commons/commons_follow/commons_follow_group/commons_follow_group.info +index cdab940..8099520 100644 +--- a/modules/commons/commons_follow/commons_follow_group/commons_follow_group.info ++++ b/modules/commons/commons_follow/commons_follow_group/commons_follow_group.info +@@ -12,6 +12,10 @@ features[ctools][] = strongarm:strongarm:1 + features[features_api][] = api:2 + features[flag][] = commons_follow_group + features[flag][] = email_group ++features[user_permission][] = flag commons_follow_group ++features[user_permission][] = flag email_group ++features[user_permission][] = unflag commons_follow_group ++features[user_permission][] = unflag email_group + features[variable][] = message_subscribe_og + + ; Information added by Drupal.org packaging script on 2015-03-18 +diff --git a/modules/commons/commons_follow/commons_follow_group/commons_follow_group.module b/modules/commons/commons_follow/commons_follow_group/commons_follow_group.module +index 4ed3254..366155a 100644 +--- a/modules/commons/commons_follow/commons_follow_group/commons_follow_group.module ++++ b/modules/commons/commons_follow/commons_follow_group/commons_follow_group.module +@@ -19,7 +19,7 @@ function commons_follow_group_commons_follow_get_nids($account, $options) { + // Get subscribe flag IDs. + $flag_ids = commons_follow_get_subscription_flags_ids('node'); + +- $query = db_select('flag_content', 'f'); ++ $query = db_select('flagging', 'f'); + if (!empty($options['range'])) { + $query->range(0, $options['range']); + } +@@ -27,9 +27,9 @@ function commons_follow_group_commons_follow_get_nids($account, $options) { + $result = $query + ->condition('fid', $flag_ids, 'IN') + ->condition('uid', $account->uid, '=') +- ->condition('content_type', 'node', '=') +- ->condition('content_id', $gids['node'], 'IN') +- ->fields('f',array('content_id')) ++ ->condition('entity_type', 'node', '=') ++ ->condition('entity_id', $gids['node'], 'IN') ++ ->fields('f',array('entity_id')) + ->execute() + ->fetchAll(); + +@@ -39,7 +39,7 @@ function commons_follow_group_commons_follow_get_nids($account, $options) { + + $nids = array(); + foreach($result as $row) { +- $nids[] = $row->content_id; ++ $nids[] = $row->entity_id; + } + + // Get the groups' content IDs. +@@ -135,7 +135,7 @@ function commons_follow_group_og_membership_delete(OgMembership $og_membership) + } + } + +-// function flag($action, $flag_name, $content_id, $account = NULL) { ++// function flag($action, $flag_name, $entity_id, $account = NULL) { + + function commons_follow_group_sync_flag_to_group_membership($og_membership) { + if ($og_membership->entity_type == 'user' && $og_membership->field_name == 'og_user_node') { +diff --git a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.features.inc b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.features.inc +index 145c7fe..2bf5420 100644 +--- a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.features.inc ++++ b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.features.inc +@@ -19,7 +19,7 @@ function commons_follow_node_flag_default_flags() { + + // Exported flag: "Other content you follow". + $flags['commons_follow_node'] = array( +- 'content_type' => 'node', ++ 'entity_type' => 'node', + 'title' => 'Other content', + 'global' => 0, + 'types' => array(), +@@ -31,26 +31,20 @@ function commons_follow_node_flag_default_flags() { + 'unflag_message' => 'Not following', + 'unflag_denied_text' => '', + 'link_type' => 'toggle', +- 'roles' => array( +- 'flag' => array( +- 0 => 2, +- ), +- 'unflag' => array( +- 0 => 2, +- ), +- ), + 'weight' => -10, + 'show_on_form' => 0, + 'access_author' => '', +- 'show_on_page' => 1, +- 'show_on_teaser' => 1, ++ 'show_in_links' => array( ++ 'full' => TRUE, ++ 'teaser' => TRUE, ++ ), + 'show_contextual_link' => FALSE, + 'i18n' => 0, + 'module' => 'commons_follow_node', + 'locked' => array( + 0 => 'name', + ), +- 'api_version' => 2, ++ 'api_version' => 3, + ); + + return $flags; +diff --git a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.features.user_permission.inc b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.features.user_permission.inc +new file mode 100644 +index 0000000..91974d9 +--- /dev/null ++++ b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.features.user_permission.inc +@@ -0,0 +1,32 @@ ++ 'flag commons_follow_node', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'unflag commons_follow_node'. ++ $permissions['unflag commons_follow_node'] = array( ++ 'name' => 'unflag commons_follow_node', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ return $permissions; ++} +\ No newline at end of file +diff --git a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.info b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.info +index 5580b47..b7d1993 100644 +--- a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.info ++++ b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.info +@@ -10,6 +10,8 @@ dependencies[] = views_litepager + features[ctools][] = views:views_default:3.0 + features[features_api][] = api:2 + features[flag][] = commons_follow_node ++features[user_permission][] = flag commons_follow_node ++features[user_permission][] = unflag commons_follow_node + features[views_view][] = commons_follow_node + + features_exclude[dependencies][views] = views +diff --git a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.module b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.module +index 5f49126..74233dd 100644 +--- a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.module ++++ b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.module +@@ -19,7 +19,7 @@ function commons_follow_node_commons_follow_get_nids($account, $options) { + return array(); + } + +- $query = db_select('flag_content', 'f'); ++ $query = db_select('flagging', 'f'); + + if (!empty($options['range'])) { + $query->range(0, $options['range']); +@@ -28,13 +28,13 @@ function commons_follow_node_commons_follow_get_nids($account, $options) { + $result = $query + ->condition('fid', $flag_ids, 'IN') + ->condition('uid', $account->uid, '=') +- ->condition('content_type', 'node', '=') +- ->fields('f',array('content_id')) ++ ->condition('entity_type', 'node', '=') ++ ->fields('f',array('entity_id')) + ->execute() + ->fetchAll(); + $nids = array(); + foreach($result as $row) { +- $nids[] = (integer) $row->content_id; ++ $nids[] = (integer) $row->entity_id; + } + + return $nids; +diff --git a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.views_default.inc b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.views_default.inc +index aa1c658..d4b0c07 100644 +--- a/modules/commons/commons_follow/commons_follow_node/commons_follow_node.views_default.inc ++++ b/modules/commons/commons_follow/commons_follow_node/commons_follow_node.views_default.inc +@@ -84,7 +84,7 @@ function commons_follow_node_views_default_views() { + $handler->display->display_options['relationships']['flag_content_rel_1']['user_scope'] = 'any'; + /* Relationship: Flags: User */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; +- $handler->display->display_options['relationships']['uid']['table'] = 'flag_content'; ++ $handler->display->display_options['relationships']['uid']['table'] = 'flagging'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + $handler->display->display_options['relationships']['uid']['relationship'] = 'flag_content_rel'; + /* Field: Content: Title */ +@@ -94,14 +94,14 @@ function commons_follow_node_views_default_views() { + $handler->display->display_options['fields']['title_field']['link_to_entity'] = 1; + /* Field: Flags: Flag link */ + $handler->display->display_options['fields']['ops_1']['id'] = 'ops_1'; +- $handler->display->display_options['fields']['ops_1']['table'] = 'flag_content'; ++ $handler->display->display_options['fields']['ops_1']['table'] = 'flagging'; + $handler->display->display_options['fields']['ops_1']['field'] = 'ops'; + $handler->display->display_options['fields']['ops_1']['relationship'] = 'flag_content_rel_1'; + $handler->display->display_options['fields']['ops_1']['label'] = 'Send email?'; + $handler->display->display_options['fields']['ops_1']['element_label_colon'] = FALSE; + /* Field: Flags: Flag link */ + $handler->display->display_options['fields']['ops']['id'] = 'ops'; +- $handler->display->display_options['fields']['ops']['table'] = 'flag_content'; ++ $handler->display->display_options['fields']['ops']['table'] = 'flagging'; + $handler->display->display_options['fields']['ops']['field'] = 'ops'; + $handler->display->display_options['fields']['ops']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['fields']['ops']['label'] = ''; +@@ -109,7 +109,7 @@ function commons_follow_node_views_default_views() { + $handler->display->display_options['fields']['ops']['link_type'] = 'toggle'; + /* Sort criterion: Flags: Flagged time */ + $handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp'; +- $handler->display->display_options['sorts']['timestamp']['table'] = 'flag_content'; ++ $handler->display->display_options['sorts']['timestamp']['table'] = 'flagging'; + $handler->display->display_options['sorts']['timestamp']['field'] = 'timestamp'; + $handler->display->display_options['sorts']['timestamp']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['sorts']['timestamp']['order'] = 'DESC'; +diff --git a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.features.inc b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.features.inc +index f2f38c3..8db89fa 100644 +--- a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.features.inc ++++ b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.features.inc +@@ -19,7 +19,7 @@ function commons_follow_term_flag_default_flags() { + + // Exported flag: "Topics you follow". + $flags['commons_follow_term'] = array( +- 'content_type' => 'taxonomy_term', ++ 'entity_type' => 'taxonomy_term', + 'title' => 'Topics', + 'global' => 0, + 'types' => array( +@@ -33,23 +33,19 @@ function commons_follow_term_flag_default_flags() { + 'unflag_message' => 'Not following', + 'unflag_denied_text' => '', + 'link_type' => 'toggle', +- 'roles' => array( +- 'flag' => array( +- 0 => 2, +- ), +- 'unflag' => array( +- 0 => 2, +- ), +- ), + 'weight' => -8, +- 'show_on_entity' => 1, ++ 'show_in_links' => array( ++ 'diff_standard' => TRUE, ++ 'full' => TRUE, ++ 'token' => TRUE, ++ ), + 'show_on_form' => 0, + 'access_author' => '', + 'module' => 'commons_follow_term', + 'locked' => array( + 0 => 'name', + ), +- 'api_version' => 2, ++ 'api_version' => 3, + ); + + return $flags; +diff --git a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.features.user_permission.inc b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.features.user_permission.inc +new file mode 100644 +index 0000000..c9d612c +--- /dev/null ++++ b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.features.user_permission.inc +@@ -0,0 +1,32 @@ ++ 'flag commons_follow_term', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'unflag commons_follow_term'. ++ $permissions['unflag commons_follow_term'] = array( ++ 'name' => 'unflag commons_follow_term', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ return $permissions; ++} +\ No newline at end of file +diff --git a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.info b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.info +index 41692b2..2b51305 100644 +--- a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.info ++++ b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.info +@@ -10,6 +10,8 @@ dependencies[] = views_litepager + features[ctools][] = views:views_default:3.0 + features[features_api][] = api:2 + features[flag][] = commons_follow_term ++features[user_permission][] = flag commons_follow_term ++features[user_permission][] = unflag commons_follow_term + features[views_view][] = commons_follow_taxonomy_term + + features_exclude[dependencies][ctools] = ctools +diff --git a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.module b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.module +index 2eb4b56..a55bb6c 100644 +--- a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.module ++++ b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.module +@@ -19,12 +19,12 @@ function commons_follow_term_commons_follow_get_nids($account, $options) { + } + + // Get user's flagged terms. +- $query = db_select('flag_content', 'f'); ++ $query = db_select('flagging', 'f'); + $result = $query + ->condition('fid', $flag_ids, 'IN') + ->condition('uid', $account->uid, '=') +- ->condition('content_type', 'taxonomy_term', '=') +- ->fields('f',array('content_id')) ++ ->condition('entity_type', 'taxonomy_term', '=') ++ ->fields('f',array('entity_id')) + ->execute() + ->fetchAll(); + +@@ -35,7 +35,7 @@ function commons_follow_term_commons_follow_get_nids($account, $options) { + + $tids = array(); + foreach($result as $row) { +- $tids[] = (integer) $row->content_id; ++ $tids[] = (integer) $row->entity_id; + } + + // Get IDs of nodes tagged by the specified terms. +diff --git a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.views_default.inc b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.views_default.inc +index 24fc59c..ec2306a 100644 +--- a/modules/commons/commons_follow/commons_follow_term/commons_follow_term.views_default.inc ++++ b/modules/commons/commons_follow/commons_follow_term/commons_follow_term.views_default.inc +@@ -84,7 +84,7 @@ function commons_follow_term_views_default_views() { + $handler->display->display_options['relationships']['flag_content_rel_1']['user_scope'] = 'any'; + /* Relationship: Flags: User */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; +- $handler->display->display_options['relationships']['uid']['table'] = 'flag_content'; ++ $handler->display->display_options['relationships']['uid']['table'] = 'flagging'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + $handler->display->display_options['relationships']['uid']['relationship'] = 'flag_content_rel'; + /* Field: Taxonomy term: Name */ +@@ -97,13 +97,13 @@ function commons_follow_term_views_default_views() { + $handler->display->display_options['fields']['name']['link_to_taxonomy'] = TRUE; + /* Field: Flags: Flag link */ + $handler->display->display_options['fields']['ops_1']['id'] = 'ops_1'; +- $handler->display->display_options['fields']['ops_1']['table'] = 'flag_content'; ++ $handler->display->display_options['fields']['ops_1']['table'] = 'flagging'; + $handler->display->display_options['fields']['ops_1']['field'] = 'ops'; + $handler->display->display_options['fields']['ops_1']['relationship'] = 'flag_content_rel_1'; + $handler->display->display_options['fields']['ops_1']['label'] = 'Send email?'; + /* Field: Flags: Flag link */ + $handler->display->display_options['fields']['ops']['id'] = 'ops'; +- $handler->display->display_options['fields']['ops']['table'] = 'flag_content'; ++ $handler->display->display_options['fields']['ops']['table'] = 'flagging'; + $handler->display->display_options['fields']['ops']['field'] = 'ops'; + $handler->display->display_options['fields']['ops']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['fields']['ops']['label'] = ''; +diff --git a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.features.inc b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.features.inc +index 79061c5..fe64b85 100644 +--- a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.features.inc ++++ b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.features.inc +@@ -28,7 +28,7 @@ function commons_follow_user_flag_default_flags() { + + // Exported flag: "People". + $flags['commons_follow_user'] = array( +- 'content_type' => 'user', ++ 'entity_type' => 'user', + 'title' => 'People', + 'global' => 0, + 'types' => array(), +@@ -40,14 +40,6 @@ function commons_follow_user_flag_default_flags() { + 'unflag_message' => 'Not following', + 'unflag_denied_text' => '', + 'link_type' => 'toggle', +- 'roles' => array( +- 'flag' => array( +- 0 => 2, +- ), +- 'unflag' => array( +- 0 => 2, +- ), +- ), + 'weight' => -13, + 'show_on_form' => 0, + 'access_author' => '', +@@ -57,7 +49,7 @@ function commons_follow_user_flag_default_flags() { + 'locked' => array( + 0 => 'name', + ), +- 'api_version' => 2, ++ 'api_version' => 3, + ); + + return $flags; +diff --git a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.features.user_permission.inc b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.features.user_permission.inc +new file mode 100644 +index 0000000..1147627 +--- /dev/null ++++ b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.features.user_permission.inc +@@ -0,0 +1,32 @@ ++ 'flag commons_follow_user', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ // Exported permission: 'unflag commons_follow_user'. ++ $permissions['unflag commons_follow_user'] = array( ++ 'name' => 'unflag commons_follow_user', ++ 'roles' => array( ++ 'authenticated user' => 'authenticated user', ++ ), ++ 'module' => 'flag', ++ ); ++ ++ return $permissions; ++} +\ No newline at end of file +diff --git a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.info b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.info +index fc8cc14..eb9a819 100644 +--- a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.info ++++ b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.info +@@ -22,6 +22,8 @@ features[features_api][] = api:2 + features[field_instance][] = message-commons_follow_user_user_followed-field_target_users + features[flag][] = commons_follow_user + features[message_type][] = commons_follow_user_user_followed ++features[user_permission][] = flag commons_follow_user ++features[user_permission][] = unflag commons_follow_user + features[variable][] = field_bundle_settings_message__commons_follow_user_user_followed + features[views_view][] = commons_follow_user + features[views_view][] = commons_follow_user_followers +diff --git a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.module b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.module +index 0f4cac6..f8d7f3b 100644 +--- a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.module ++++ b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.module +@@ -21,12 +21,12 @@ function commons_follow_user_commons_follow_get_nids($account, $options) { + } + + // Get flagged user IDs. +- $query = db_select('flag_content', 'f'); ++ $query = db_select('flagging', 'f'); + $result = $query + ->condition('fid', $flag_ids, 'IN') + ->condition('uid', $account->uid, '=') +- ->condition('content_type', 'user', '=') +- ->fields('f',array('content_id')) ++ ->condition('entity_type', 'user', '=') ++ ->fields('f',array('entity_id')) + ->execute() + ->fetchAll(); + +@@ -37,7 +37,7 @@ function commons_follow_user_commons_follow_get_nids($account, $options) { + + $uids = array(); + foreach($result as $row) { +- $uids[] = (integer) $row->content_id; ++ $uids[] = (integer) $row->entity_id; + } + + // Get the user's node IDs. +@@ -63,12 +63,12 @@ function commons_follow_user_commons_follow_get_nids($account, $options) { + } + + /** +- * Implements hook_flag(). ++ * Implements hook_flag_flag(). + */ +-function commons_follow_user_flag($op, $flag, $content_id, $account, $fcid) { ++function commons_follow_user_flag_flag($flag, $entity_id, $account, $fcid) { + // Display an activity stream message when a user follows another user. +- if (module_exists('commons_activity_streams') && $flag->name == 'commons_follow_user' && $op == 'flag') { +- $followed_user = user_load($content_id); ++ if (module_exists('commons_activity_streams') && $flag->name == 'commons_follow_user') { ++ $followed_user = user_load($entity_id); + // Don't generate a message for flagging blocked users. + if (!$followed_user->status) { + return; +diff --git a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.views_default.inc b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.views_default.inc +index e79fddf..005e8e6 100644 +--- a/modules/commons/commons_follow/commons_follow_user/commons_follow_user.views_default.inc ++++ b/modules/commons/commons_follow/commons_follow_user/commons_follow_user.views_default.inc +@@ -84,7 +84,7 @@ function commons_follow_user_views_default_views() { + $handler->display->display_options['relationships']['flag_content_rel_1']['user_scope'] = 'any'; + /* Relationship: Flags: User */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; +- $handler->display->display_options['relationships']['uid']['table'] = 'flag_content'; ++ $handler->display->display_options['relationships']['uid']['table'] = 'flagging'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + $handler->display->display_options['relationships']['uid']['relationship'] = 'flag_content_rel'; + /* Field: User: Name */ +@@ -96,20 +96,20 @@ function commons_follow_user_views_default_views() { + $handler->display->display_options['fields']['name']['alter']['ellipsis'] = FALSE; + /* Field: Flags: Flag link */ + $handler->display->display_options['fields']['ops_1']['id'] = 'ops_1'; +- $handler->display->display_options['fields']['ops_1']['table'] = 'flag_content'; ++ $handler->display->display_options['fields']['ops_1']['table'] = 'flagging'; + $handler->display->display_options['fields']['ops_1']['field'] = 'ops'; + $handler->display->display_options['fields']['ops_1']['relationship'] = 'flag_content_rel_1'; + $handler->display->display_options['fields']['ops_1']['label'] = 'Send email?'; + /* Field: Flags: Flag link */ + $handler->display->display_options['fields']['ops']['id'] = 'ops'; +- $handler->display->display_options['fields']['ops']['table'] = 'flag_content'; ++ $handler->display->display_options['fields']['ops']['table'] = 'flagging'; + $handler->display->display_options['fields']['ops']['field'] = 'ops'; + $handler->display->display_options['fields']['ops']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['fields']['ops']['label'] = ''; + $handler->display->display_options['fields']['ops']['element_label_colon'] = FALSE; + /* Sort criterion: Flags: Flagged time */ + $handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp'; +- $handler->display->display_options['sorts']['timestamp']['table'] = 'flag_content'; ++ $handler->display->display_options['sorts']['timestamp']['table'] = 'flagging'; + $handler->display->display_options['sorts']['timestamp']['field'] = 'timestamp'; + $handler->display->display_options['sorts']['timestamp']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['sorts']['timestamp']['order'] = 'DESC'; +@@ -206,7 +206,7 @@ function commons_follow_user_views_default_views() { + $handler->display->display_options['relationships']['flag_content_rel']['user_scope'] = 'any'; + /* Relationship: Flags: User */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; +- $handler->display->display_options['relationships']['uid']['table'] = 'flag_content'; ++ $handler->display->display_options['relationships']['uid']['table'] = 'flagging'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + $handler->display->display_options['relationships']['uid']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['uid']['required'] = TRUE; +@@ -233,13 +233,13 @@ function commons_follow_user_views_default_views() { + $handler->display->display_options['fields']['name']['element_default_classes'] = FALSE; + /* Sort criterion: Flags: Flagged time */ + $handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp'; +- $handler->display->display_options['sorts']['timestamp']['table'] = 'flag_content'; ++ $handler->display->display_options['sorts']['timestamp']['table'] = 'flagging'; + $handler->display->display_options['sorts']['timestamp']['field'] = 'timestamp'; + $handler->display->display_options['sorts']['timestamp']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['sorts']['timestamp']['order'] = 'DESC'; + /* Contextual filter: Flags: Content ID */ + $handler->display->display_options['arguments']['content_id']['id'] = 'content_id'; +- $handler->display->display_options['arguments']['content_id']['table'] = 'flag_content'; ++ $handler->display->display_options['arguments']['content_id']['table'] = 'flagging'; + $handler->display->display_options['arguments']['content_id']['field'] = 'content_id'; + $handler->display->display_options['arguments']['content_id']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['arguments']['content_id']['default_action'] = 'default'; +@@ -381,13 +381,13 @@ function commons_follow_user_views_default_views() { + $handler->display->display_options['fields']['name']['element_default_classes'] = FALSE; + /* Sort criterion: Flags: Flagged time */ + $handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp'; +- $handler->display->display_options['sorts']['timestamp']['table'] = 'flag_content'; ++ $handler->display->display_options['sorts']['timestamp']['table'] = 'flagging'; + $handler->display->display_options['sorts']['timestamp']['field'] = 'timestamp'; + $handler->display->display_options['sorts']['timestamp']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['sorts']['timestamp']['order'] = 'DESC'; + /* Contextual filter: Flags: User uid */ + $handler->display->display_options['arguments']['uid']['id'] = 'uid'; +- $handler->display->display_options['arguments']['uid']['table'] = 'flag_content'; ++ $handler->display->display_options['arguments']['uid']['table'] = 'flagging'; + $handler->display->display_options['arguments']['uid']['field'] = 'uid'; + $handler->display->display_options['arguments']['uid']['relationship'] = 'flag_content_rel'; + $handler->display->display_options['arguments']['uid']['default_action'] = 'default'; +diff --git a/modules/commons/commons_like/commons-like.tpl.php b/modules/commons/commons_like/commons-like.tpl.php +index ab83a4a..e07e5a7 100644 +--- a/modules/commons/commons_like/commons-like.tpl.php ++++ b/modules/commons/commons_like/commons-like.tpl.php +@@ -32,8 +32,8 @@ + * ) + * - $mode: Display mode. + * - $just_voted: Indicator whether the user has just voted (boolean). +- * - $content_type: "node" or "comment". +- * - $content_id: Node or comment id. ++ * - $entity_type: "node" or "comment". ++ * - $entity_id: Node or comment id. + * - $buttons: Array with themed buttons (built in preprocess function). + * - $info: String with user readable information (built in preprocess function). + */ +diff --git a/modules/commons/commons_like/commons_like.module b/modules/commons/commons_like/commons_like.module +index d45ff3f..caa3be1 100644 +--- a/modules/commons/commons_like/commons_like.module ++++ b/modules/commons/commons_like/commons_like.module +@@ -89,7 +89,7 @@ function commons_like_existing_node_like_messages($acting_uid, $target_nids) { + function commons_like_theme() { + return array( + 'rate_template_commons_like' => array( +- 'variables' => array('links' => NULL, 'results' => NULL, 'mode' => NULL, 'just_voted' => FALSE, 'content_type' => NULL, 'content_id' => NULL, 'display_options' => NULL), ++ 'variables' => array('links' => NULL, 'results' => NULL, 'mode' => NULL, 'just_voted' => FALSE, 'entity_type' => NULL, 'entity_id' => NULL, 'display_options' => NULL), + 'template' => 'commons-like', + ), + ); +diff --git a/modules/commons/commons_q_a/commons_q_a.module b/modules/commons/commons_q_a/commons_q_a.module +index 6725a5c..9d886c6 100644 +--- a/modules/commons/commons_q_a/commons_q_a.module ++++ b/modules/commons/commons_q_a/commons_q_a.module +@@ -12,7 +12,7 @@ include_once 'commons_q_a.features.inc'; + function commons_q_a_theme() { + return array( + 'rate_template_commons_thumbs_up_down' => array( +- 'variables' => array('links' => NULL, 'results' => NULL, 'mode' => NULL, 'just_voted' => FALSE, 'content_type' => NULL, 'content_id' => NULL, 'display_options' => NULL), ++ 'variables' => array('links' => NULL, 'results' => NULL, 'mode' => NULL, 'just_voted' => FALSE, 'entity_type' => NULL, 'entity_id' => NULL, 'display_options' => NULL), + 'template' => 'commons-thumbs-up-down', + ), + ); +diff --git a/modules/commons/commons_radioactivity/includes/incidents/commons_radioactivity.incidents_flag.inc b/modules/commons/commons_radioactivity/includes/incidents/commons_radioactivity.incidents_flag.inc +index 8f3b4b2..01c7ef3 100644 +--- a/modules/commons/commons_radioactivity/includes/incidents/commons_radioactivity.incidents_flag.inc ++++ b/modules/commons/commons_radioactivity/includes/incidents/commons_radioactivity.incidents_flag.inc +@@ -6,26 +6,37 @@ + */ + + /** +- * Implements hook_flag(). ++ * Implements hook_flag_flag(). + * + * Trigger radioactivity incidents when a user follows a node or group. + */ +-function commons_radioactivity_flag($op, $flag, $content_id, $account, $fcid) { ++function commons_radioactivity_flag_flag($flag, $entity_id, $account, $fcid) { + if (in_array($flag->name, array('commons_follow_node', 'commons_follow_group'))) { +- $node = node_load($content_id); ++ $node = node_load($entity_id); + +- if ($op == 'flag') { +- // A user following their own node should not increase radioactivity. +- if ($node->uid != $account->uid) { +- commons_radioactivity_incident_node($node, COMMONS_RADIOACTIVITY_FLAG_NODE); +- } ++ // A user following their own node shouldn't add to its radioactivity. ++ if ($node->uid == $account->uid) { ++ return; + } + +- if ($op == 'unflag') { +- // A user unfollowing their own node should not decrease radioactivity. +- if ($node->uid != $account->uid) { +- commons_radioactivity_incident_node($node, -1 * COMMONS_RADIOACTIVITY_FLAG_NODE); +- } +- } ++ commons_radioactivity_incident_node($node, COMMONS_RADIOACTIVITY_FLAG_NODE); + } + } ++ ++/** ++ * Implements hook_flag_unflag(). ++ * ++ * Trigger radioactivity incidents when a user follows a node or group. ++ */ ++function commons_radioactivity_flag_unflag($flag, $entity_id, $account, $flagging) { ++ if (in_array($flag->name, array('commons_follow_node', 'commons_follow_group'))) { ++ $node = node_load($entity_id); ++ ++ // A user unfollowing their own node shouldn't add to its radioactivity. ++ if ($node->uid == $account->uid) { ++ return; ++ } ++ ++ commons_radioactivity_incident_node($node, -1 * COMMONS_RADIOACTIVITY_FLAG_NODE); ++ } ++} +\ No newline at end of file +diff --git a/modules/commons/commons_search/modules/commons_search_solr_user/commons_search_solr_user.module b/modules/commons/commons_search/modules/commons_search_solr_user/commons_search_solr_user.module +index d003bfe..39a9ec1 100644 +--- a/modules/commons/commons_search/modules/commons_search_solr_user/commons_search_solr_user.module ++++ b/modules/commons/commons_search/modules/commons_search_solr_user/commons_search_solr_user.module +@@ -86,9 +86,9 @@ function commons_search_solr_user_apachesolr_search_page_alter(&$build, $search_ + $out_results = array(); + if ($flagged && $flag = flag_get_flag('commons_follow_user')) { + // Get the count of flagged users for a particular account. +- $fl_results = db_select('flag_content', 'f') +- ->fields('f', array('content_id', 'uid')) +- ->condition('f.content_type', 'user', '=') ++ $fl_results = db_select('flagging', 'f') ++ ->fields('f', array('entity_id', 'uid')) ++ ->condition('f.entity_type','user','=') + ->condition('f.uid', $user->uid, '=') + ->condition('f.fid', $flag->fid, '=') + ->extend('PagerDefault')->limit($limit) +@@ -96,7 +96,7 @@ function commons_search_solr_user_apachesolr_search_page_alter(&$build, $search_ + ->addMetaData('flagged', $flagged) + ->execute(); + while ($record = $fl_results->fetchAssoc()) { +- $out_results[] = user_view(user_load($record['content_id']), 'search_results'); ++ $out_results[] = user_view(user_load($record['entity_id']), 'search_results'); + } + $build['pager'] = array('#theme' => 'pager'); + } +-- +1.8.4.2 +