Custom membership fields and reporting
Until we don't have integration for other social media tools than meetup.com and cannot automate data fetching, this patch adds the ability to enter the data manually by group admins. Two fields has been added: - group_members_source: represents the data source of group size data - field_group_members: represents the size of the group The reports were also updated, so the regional membership report and membership report calculates with the aggregated membership data. Change-Id: Id1df05e4f7181c9109a7737da4fbb8ec60fa5053
This commit is contained in:
parent
719d8f3a17
commit
ffe419d1a1
|
@ -119,7 +119,50 @@ function groups_groups_field_default_field_bases() {
|
|||
'type' => 'field_group_location',
|
||||
);
|
||||
|
||||
// Exported field_base: 'field_group_status'
|
||||
// Exported field_base: 'field_group_members'.
|
||||
$field_bases['field_group_members'] = array(
|
||||
'active' => 1,
|
||||
'cardinality' => 1,
|
||||
'deleted' => 0,
|
||||
'entity_types' => array(),
|
||||
'field_name' => 'field_group_members',
|
||||
'indexes' => array(),
|
||||
'locked' => 0,
|
||||
'module' => 'number',
|
||||
'settings' => array(),
|
||||
'translatable' => 0,
|
||||
'type' => 'number_integer',
|
||||
);
|
||||
|
||||
// Exported field_base: 'field_group_members_source'.
|
||||
$field_bases['field_group_members_source'] = array(
|
||||
'active' => 1,
|
||||
'cardinality' => 1,
|
||||
'deleted' => 0,
|
||||
'entity_types' => array(),
|
||||
'field_name' => 'field_group_members_source',
|
||||
'indexes' => array(
|
||||
'value' => array(
|
||||
0 => 'value',
|
||||
),
|
||||
),
|
||||
'locked' => 0,
|
||||
'module' => 'list',
|
||||
'settings' => array(
|
||||
'allowed_values' => array(
|
||||
1 => 'Linkedin',
|
||||
2 => 'Facebook',
|
||||
3 => 'Google Groups',
|
||||
4 => 'Weibo',
|
||||
5 => 'Other',
|
||||
),
|
||||
'allowed_values_function' => '',
|
||||
),
|
||||
'translatable' => 0,
|
||||
'type' => 'list_text',
|
||||
);
|
||||
|
||||
// Exported field_base: 'field_group_status'.
|
||||
$field_bases['field_group_status'] = array(
|
||||
'active' => 1,
|
||||
'cardinality' => 1,
|
||||
|
|
|
@ -51,7 +51,7 @@ function groups_groups_field_default_field_instances() {
|
|||
'module' => 'options',
|
||||
'settings' => array(),
|
||||
'type' => 'options_buttons',
|
||||
'weight' => 50,
|
||||
'weight' => 13,
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -90,7 +90,7 @@ function groups_groups_field_default_field_instances() {
|
|||
'module' => 'geofield',
|
||||
'settings' => array(),
|
||||
'type' => 'geofield_latlon',
|
||||
'weight' => 47,
|
||||
'weight' => 8,
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -132,11 +132,98 @@ function groups_groups_field_default_field_instances() {
|
|||
'module' => 'field_group_location',
|
||||
'settings' => array(),
|
||||
'type' => 'field_group_location',
|
||||
'weight' => 46,
|
||||
'weight' => 7,
|
||||
),
|
||||
);
|
||||
|
||||
// Exported field_instance: 'node-group-field_group_status'
|
||||
// Exported field_instance: 'node-group-field_group_members'.
|
||||
$field_instances['node-group-field_group_members'] = array(
|
||||
'bundle' => 'group',
|
||||
'default_value' => array(
|
||||
0 => array(
|
||||
'value' => 0,
|
||||
),
|
||||
),
|
||||
'deleted' => 0,
|
||||
'description' => 'Number of user group members from other source than meetup.com.',
|
||||
'display' => array(
|
||||
'default' => array(
|
||||
'label' => 'above',
|
||||
'module' => 'number',
|
||||
'settings' => array(
|
||||
'decimal_separator' => '.',
|
||||
'prefix_suffix' => TRUE,
|
||||
'scale' => 0,
|
||||
'thousand_separator' => '',
|
||||
),
|
||||
'type' => 'number_integer',
|
||||
'weight' => 22,
|
||||
),
|
||||
'teaser' => array(
|
||||
'label' => 'above',
|
||||
'settings' => array(),
|
||||
'type' => 'hidden',
|
||||
'weight' => 0,
|
||||
),
|
||||
),
|
||||
'entity_type' => 'node',
|
||||
'field_name' => 'field_group_members',
|
||||
'label' => 'group_members',
|
||||
'required' => 0,
|
||||
'settings' => array(
|
||||
'max' => '',
|
||||
'min' => '',
|
||||
'prefix' => '',
|
||||
'suffix' => '',
|
||||
'user_register_form' => FALSE,
|
||||
),
|
||||
'widget' => array(
|
||||
'active' => 0,
|
||||
'module' => 'number',
|
||||
'settings' => array(),
|
||||
'type' => 'number',
|
||||
'weight' => 12,
|
||||
),
|
||||
);
|
||||
|
||||
// Exported field_instance: 'node-group-field_group_members_source'.
|
||||
$field_instances['node-group-field_group_members_source'] = array(
|
||||
'bundle' => 'group',
|
||||
'default_value' => NULL,
|
||||
'deleted' => 0,
|
||||
'description' => '',
|
||||
'display' => array(
|
||||
'default' => array(
|
||||
'label' => 'above',
|
||||
'module' => 'list',
|
||||
'settings' => array(),
|
||||
'type' => 'list_default',
|
||||
'weight' => 23,
|
||||
),
|
||||
'teaser' => array(
|
||||
'label' => 'above',
|
||||
'settings' => array(),
|
||||
'type' => 'hidden',
|
||||
'weight' => 0,
|
||||
),
|
||||
),
|
||||
'entity_type' => 'node',
|
||||
'field_name' => 'field_group_members_source',
|
||||
'label' => 'group_members_source',
|
||||
'required' => 0,
|
||||
'settings' => array(
|
||||
'user_register_form' => FALSE,
|
||||
),
|
||||
'widget' => array(
|
||||
'active' => 1,
|
||||
'module' => 'options',
|
||||
'settings' => array(),
|
||||
'type' => 'options_select',
|
||||
'weight' => 11,
|
||||
),
|
||||
);
|
||||
|
||||
// Exported field_instance: 'node-group-field_group_status'.
|
||||
$field_instances['node-group-field_group_status'] = array(
|
||||
'bundle' => 'group',
|
||||
'default_value' => array(
|
||||
|
@ -173,7 +260,7 @@ function groups_groups_field_default_field_instances() {
|
|||
'module' => 'options',
|
||||
'settings' => array(),
|
||||
'type' => 'options_select',
|
||||
'weight' => 48,
|
||||
'weight' => 9,
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -223,7 +310,7 @@ function groups_groups_field_default_field_instances() {
|
|||
'module' => 'number',
|
||||
'settings' => array(),
|
||||
'type' => 'number',
|
||||
'weight' => 49,
|
||||
'weight' => 10,
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -260,7 +347,7 @@ function groups_groups_field_default_field_instances() {
|
|||
'module' => 'field_property_list',
|
||||
'settings' => array(),
|
||||
'type' => 'field_property_list',
|
||||
'weight' => 45,
|
||||
'weight' => 5,
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -301,7 +388,7 @@ function groups_groups_field_default_field_instances() {
|
|||
'module' => 'options',
|
||||
'settings' => array(),
|
||||
'type' => 'options_select',
|
||||
'weight' => 51,
|
||||
'weight' => 14,
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -310,8 +397,12 @@ function groups_groups_field_default_field_instances() {
|
|||
t('Ambassadors');
|
||||
t('Group location');
|
||||
t('Group status');
|
||||
t('Number of user group members from other source than meetup.com.');
|
||||
t('Resource links');
|
||||
t('Timezone');
|
||||
t('geofield');
|
||||
t('group_members');
|
||||
t('group_members_source');
|
||||
t('meetup_members');
|
||||
t('Timezone');
|
||||
|
||||
|
|
|
@ -28,6 +28,8 @@ features[features_api][] = api:2
|
|||
features[field_base][] = field_ambassadors
|
||||
features[field_base][] = field_geofield
|
||||
features[field_base][] = field_group_location
|
||||
features[field_base][] = field_group_members
|
||||
features[field_base][] = field_group_members_source
|
||||
features[field_base][] = field_group_status
|
||||
features[field_base][] = field_meetup_members
|
||||
features[field_base][] = field_resource_links
|
||||
|
@ -35,6 +37,8 @@ features[field_base][] = field_timezone
|
|||
features[field_instance][] = node-group-field_ambassadors
|
||||
features[field_instance][] = node-group-field_geofield
|
||||
features[field_instance][] = node-group-field_group_location
|
||||
features[field_instance][] = node-group-field_group_members
|
||||
features[field_instance][] = node-group-field_group_members_source
|
||||
features[field_instance][] = node-group-field_group_status
|
||||
features[field_instance][] = node-group-field_meetup_members
|
||||
features[field_instance][] = node-group-field_resource_links
|
||||
|
|
|
@ -195,6 +195,12 @@ function groups_groups_form_alter(&$form, &$form_state, $form_id) {
|
|||
$form['field_timezone']['#access'] = $is_community_mgr || $is_group_admin
|
||||
|| $is_administrator;
|
||||
|
||||
// allow group admins to manage group membership field
|
||||
$form['field_group_members']['#access'] = $is_community_mgr || $is_group_admin
|
||||
|| $is_administrator;
|
||||
$form['field_group_members_source']['#access'] = $is_community_mgr || $is_group_admin
|
||||
|| $is_administrator;
|
||||
|
||||
$form['field_group_location']['und'][0]['location']['#title'] = 'City (optional)';
|
||||
// reorder resource links, group location
|
||||
$form['field_resource_links']['#weight'] = 21;
|
||||
|
|
|
@ -40,7 +40,15 @@ function groups_reports_schema() {
|
|||
'default' => '',
|
||||
),
|
||||
),
|
||||
'primary key' => array('nid', 'timestamp'),
|
||||
'primary key' => array('nid', 'timestamp', 'datasrc'),
|
||||
);
|
||||
return $schema;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update primary key of groups_membership_stat table
|
||||
*/
|
||||
function groups_reports_update_7100() {
|
||||
db_drop_primary_key('groups_membership_stat');
|
||||
db_add_primary_key('groups_membership_stat', array('nid', 'timestamp', 'datasrc'));
|
||||
}
|
||||
|
|
|
@ -74,18 +74,32 @@ function groups_reports_update_membership_stat($timestamp = null) {
|
|||
->execute();
|
||||
foreach ($result as $record) {
|
||||
$node = node_load($record->nid);
|
||||
// update meetup.com membership data
|
||||
$membercount = 0;
|
||||
if (isset($node->field_meetup_members[LANGUAGE_NONE])) {
|
||||
$membercount = (int)$node->field_meetup_members[LANGUAGE_NONE][0]['value'];
|
||||
}
|
||||
db_merge('groups_membership_stat')
|
||||
->key(array('nid' => $node->nid, 'timestamp' => $timestr))
|
||||
->key(array('nid' => $node->nid, 'timestamp' => $timestr, 'datasrc' => 'M'))
|
||||
->fields(array(
|
||||
'nid' => $node->nid,
|
||||
'timestamp' => $timestr,
|
||||
'membercount' => $membercount,
|
||||
'datasrc' => 'M',
|
||||
))->execute();
|
||||
// update alternate membership data
|
||||
$membercount = 0;
|
||||
if (isset($node->field_group_members[LANGUAGE_NONE])) {
|
||||
$membercount = (int)$node->field_group_members[LANGUAGE_NONE][0]['value'];
|
||||
}
|
||||
db_merge('groups_membership_stat')
|
||||
->key(array('nid' => $node->nid, 'timestamp' => $timestr, 'datasrc' => 'C'))
|
||||
->fields(array(
|
||||
'nid' => $node->nid,
|
||||
'timestamp' => $timestr,
|
||||
'membercount' => $membercount,
|
||||
'datasrc' => 'C',
|
||||
))->execute();
|
||||
}
|
||||
watchdog('Groups Reports', 'Groups membership statistics had been updated.', array(), WATCHDOG_INFO);
|
||||
}
|
||||
|
@ -357,12 +371,14 @@ function groups_report_get_regional_membership_report($date) {
|
|||
$query->leftJoin('groups_membership_stat', 's', 'n.nid = s.nid');
|
||||
$query->fields('n', array('nid', 'title'));
|
||||
$query->fields('l', array('field_group_location_continent', 'field_group_location_country'));
|
||||
$query->fields('s', array('membercount'));
|
||||
$query->addExpression('sum(s.membercount)', 'membercount');
|
||||
$query->condition('n.type', 'group', '=');
|
||||
$query->condition('n.status', 1, '=');
|
||||
$query->condition('s.timestamp', gmdate('Ymd', $date), '=');
|
||||
$query->orderBy('l.field_group_location_continent', 'ASC');
|
||||
$query->orderBy('n.title', 'ASC');
|
||||
$query->groupBy('n.title');
|
||||
$query->groupBy('n.nid');
|
||||
$query->groupBy('l.field_group_location_continent');
|
||||
$query->groupBy('l.field_group_location_country');
|
||||
$result = $query->execute();
|
||||
$rows = array();
|
||||
$totals = array();
|
||||
|
|
Loading…
Reference in New Issue