diff --git a/groups.info b/groups.info index 51825b3..0312ef2 100644 --- a/groups.info +++ b/groups.info @@ -162,4 +162,5 @@ dependencies[] = groups_feeds dependencies[] = groups_events dependencies[] = groups_events_pages dependencies[] = groups_pages +dependencies[] = groups_reports dependencies[] = groups_wikis \ No newline at end of file diff --git a/groups.install b/groups.install index ba0fb08..4c5d962 100644 --- a/groups.install +++ b/groups.install @@ -303,6 +303,16 @@ function groups_update_7114() { drupal_flush_all_caches(); } +/** + * Enable groups_reports module. + */ +function groups_update_7115() { + if (!module_exists('groups_reports')) { + module_enable(array('groups_reports')); + } + drupal_flush_all_caches(); +} + /** * Set language negotiation to URL based. */ diff --git a/modules/groups/groups_reports/groups_reports.info b/modules/groups/groups_reports/groups_reports.info new file mode 100644 index 0000000..76afc5c --- /dev/null +++ b/modules/groups/groups_reports/groups_reports.info @@ -0,0 +1,7 @@ +name = Groups Reports +description = Groups reports building blocks +core = 7.x +package = Groups - Building Blocks +version = 7.x-1.0 +project = groups_reports +dependencies[] = elysia_cron \ No newline at end of file diff --git a/modules/groups/groups_reports/groups_reports.install b/modules/groups/groups_reports/groups_reports.install new file mode 100644 index 0000000..4fd3536 --- /dev/null +++ b/modules/groups/groups_reports/groups_reports.install @@ -0,0 +1,46 @@ + 'Stores group membership daily aggregated statistics.', + 'fields' => array( + 'nid' => array( + 'description' => 'The group\'s {node}.nid for these statistics.', + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + 'timestamp' => array( + 'description' => 'The YYYYMMDD format date of membership record', + 'type' => 'varchar', + 'length' => 32, + 'not null' => TRUE, + 'default' => '', + ), + 'membercount' => array( + 'description' => 'The total number of members registered for the group.', + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + 'size' => 'medium', + ), + 'datasrc' => array( + 'description' => 'The data source of the data', + 'type' => 'varchar', + 'length' => 1, + 'not null' => TRUE, + 'default' => '', + ), + ), + 'primary key' => array('nid', 'timestamp'), + ); + return $schema; +} \ No newline at end of file diff --git a/modules/groups/groups_reports/groups_reports.module b/modules/groups/groups_reports/groups_reports.module new file mode 100644 index 0000000..eaf0d35 --- /dev/null +++ b/modules/groups/groups_reports/groups_reports.module @@ -0,0 +1,38 @@ +fields('n')->condition('status', 1) + ->condition('type', 'group', '=') + ->execute(); + foreach ($result as $record) { + $node = node_load($record->nid); + db_merge('groups_membership_stat') + ->key(array('nid' => $node->nid, 'timestamp' => $timestr)) + ->fields(array( + 'nid' => $node->nid, + 'timestamp' => $timestr, + 'membercount' => (int)$node->field_meetup_members[LANGUAGE_NONE][0]['value'], + 'datasrc' => 'M', + ))->execute(); + } + watchdog('Groups Reports', 'Groups membership statistics had been updated.', array(), WATCHDOG_INFO); +} + +/** + * Implements hook_cronapi() + * + * Define groups_reports module's scheduled jobs. + */ +function groups_reports_cronapi($op, $job = NULL) { + $items['groups_update_membership_stat'] = array( + 'description' => 'Update group membership daily statistcs.', + 'rule' => '0 4 * * *', + 'callback' => 'groups_reports_update_membership_stat', + ); + return $items; +}