From 15654e625b654b32334a35d8f10d439d76c48f77 Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Sun, 1 May 2016 22:33:23 +0300 Subject: [PATCH 01/24] Added user_group_tid field and rebuilt plugin queries based on this change --- .../global_countries_members.inc | 22 ++++-------- .../modules/custom/ppgetstat/ppgetstat.module | 35 +++++++++++++++---- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_countries_members.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_countries_members.inc index b122cdd..a3c2376 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_countries_members.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_countries_members.inc @@ -48,30 +48,20 @@ function pp_frontpage_global_countries_members_content_type_render($subtype, $co // Getting active by commits statistics - $active_by_commits_query = db_select('field_data_field_user_lists', 'fu'); - $active_by_commits_query->innerJoin( - 'field_data_field_user_id', - 'fn', - 'fu.entity_id = fn.entity_id' - ); - $active_by_commits_query->innerJoin( - 'ppgetstat', - 'pp', - 'pp.doid = fn.field_user_id_value' - ); + $active_by_commits_query = db_select('ppgetstat', 'pp'); $active_by_commits_query->condition('pp.type', PPGETSTAT_TYPE_COMMITS); - $active_by_commits_query->fields('fu',array('field_user_lists_tid')); + $active_by_commits_query->fields('pp',array('user_group_tid')); $active_by_commits_query->addExpression('COUNT(pp.doid)', 'ac'); - $active_by_commits_query->groupBy('fu.field_user_lists_tid'); + $active_by_commits_query->groupBy('pp.user_group_tid'); $active_by_commits_query->groupBy('pp.doid'); $active_by_commits = $active_by_commits_query->execute()->fetchAll(); $active_commits = array(); foreach ($active_by_commits as $temp) { - if (!empty($active_commits[$temp->field_user_lists_tid])) { - $active_commits[$temp->field_user_lists_tid]++; + if (!empty($active_commits[$temp->user_group_tid])) { + $active_commits[$temp->user_group_tid]++; } else { - $active_commits[$temp->field_user_lists_tid] = 1; + $active_commits[$temp->user_group_tid] = 1; } } diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module index 1f41fdd..fef0f70 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module @@ -65,6 +65,16 @@ function ppgetstat_menu() { 'file' => 'ppgetstat.pages.inc', ); + $items['admin/config/services/restart_country_scan'] = array( + 'title' => 'Restart country scan', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ppgetstat_rescan'), + 'access arguments' => array('administer site configuration'), + 'weight' => -21, + 'type' => MENU_NORMAL_ITEM, + 'file' => 'ppgetstat.pages.inc', + ); + return $items; } @@ -263,7 +273,7 @@ function _ppgetstat_cron_createItem_stats_jobs() { /** * Implements hook_ppgetstat_stats_job(). */ -function ppgetstat_ppgetstat_stats_job($users) { +function ppgetstat_ppgetstat_stats_job(array $users, $force = FALSE) { $job = array(); @@ -281,10 +291,11 @@ function ppgetstat_ppgetstat_stats_job($users) { $last_commit_timestamp[$doid][$last_scan_week], )); - if ($last_scan > REQUEST_TIME - 24 * 60 * 60) { - return; + if (!$force) { + if ($last_scan > REQUEST_TIME - 24 * 60 * 60) { + return; + } } - $job[] = array( 'generate_urls_callback' => '_ppgetstat_get_code_tracking_urls', 'parse_pages_callback' => '_ppgetstat_parse_commits', @@ -427,7 +438,9 @@ function _ppgetstat_get_node_link_by_doid($doid) { */ function _ppgetstat_get_code_tracking_urls($data) { $last_scan = $data['last_scan']; - $doids = $data['doids']; + + $doids = array($data['doid']); + // Number of pages to scan before check it is empty. $pages_block = 7; $urls = array(); @@ -630,12 +643,22 @@ function _ppgetstat_parse_commits($page_content, $data) { function _ppgetstat_save_counters($counters_array, $doid) { $type = $counters_array['#type']; unset($counters_array['#type']); + $query = db_select('field_data_field_user_id', 'fdoid'); + $query->innerJoin('field_data_field_user_lists', 'fl', 'fdoid.entity_id = fl.entity_id'); + $query->condition('fdoid.field_user_id_value', $doid); + $query->fields('fl', array('field_user_lists_tid')); + $user_group_tid = $query->execute()->fetchField(); foreach ($counters_array as $period => &$commits) { foreach ($commits as &$hash) { db_merge('ppgetstat') ->key(array('doid' => $doid, 'hash' => $hash)) - ->fields(array('type' => $type, 'timestamp' => $period, 'items' => 1)) + ->fields(array( + 'type' => $type, + 'timestamp' => $period, + 'items' => 1, + 'user_group_tid' => $user_group_tid + )) ->execute(); } From 5bbe7723bfc6cd68a8d270b51c0527afce2c5fe7 Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Sun, 1 May 2016 22:33:58 +0300 Subject: [PATCH 02/24] Added hook_update_n for updating all existed scanned data to use user_group_tid --- .../custom/ppgetstat/ppgetstat.install | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.install b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.install index f2ab632..b655575 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.install +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.install @@ -72,3 +72,61 @@ function ppgetstat_uninstall() { $vars = $vars->condition('name', 'ppgetstat%', 'LIKE'); $vars->execute(); } + +/** + * Add new column to the ppgetstat table. + */ +function ppgetstat_update_7001() { + + $spec = array( + 'type' => 'int', + 'description' => 'A link to the main user group taxonomy term', + 'not null' => FALSE, + ); + db_add_field('ppgetstat', 'user_group_tid', $spec); +} + +/** + * Add right ud_tid values to the ppgetstat table. + */ +function ppgetstat_update_7002(&$sandbox) { + if (!isset($sandbox['total'])) { + $sandbox['total'] = db_select('ppgetstat', 'p')->countQuery()->execute()->fetchField(); + $sandbox['current'] = 0; + } + $items_per_page = 50; + $query = db_select('ppgetstat', 'p') + ->fields('p', array('id', 'doid')) + ->range($sandbox['current'], $items_per_page) + ->execute() + ->fetchAll(); + $ids_map = $doids = array(); + foreach ($query as $item) { + $ids_map[$item->id] = $item->doid; + $doids[] = $item->doid; + } + + $mapping_query = db_select('field_data_field_user_id', 'fdoid'); + $mapping_query->innerJoin('field_data_field_user_lists', 'ful', 'fdoid.entity_id = ful.entity_id'); + $mapping_query->fields('fdoid', array('field_user_id_value')); + $mapping_query->fields('ful', array('field_user_lists_tid')); + $mapping_query->condition('fdoid.field_user_id_value', array_unique($doids), 'IN'); + $map_result = $mapping_query->execute()->fetchAll(); + foreach ($map_result as $item) { + $ids_map_result[$item->field_user_id_value] = $item->field_user_lists_tid; + } + + foreach ($ids_map as $ppgetstat_id => $ppgetstat_doid) { + db_update('ppgetstat') + ->fields(array('user_group_tid' => $ids_map_result[$ppgetstat_doid])) + ->condition('id', $ppgetstat_id) + ->execute(); + $sandbox['current']++; + } + + $sandbox['#finished'] = ($sandbox['current'] / $sandbox['total']); + if ($sandbox['#finished'] === 1) { + drupal_set_message(t('Ppgetstat items updated: @items.', + array('@items' => $sandbox['total']))); + } +} From 084d31ff65643a1eb2622df8fe228918b695da0c Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Sun, 1 May 2016 22:34:32 +0300 Subject: [PATCH 03/24] Added feature for force direct rescan start of the defined country --- .../custom/ppgetstat/ppgetstat.pages.inc | 64 +++++++++++++++++-- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc index 4ec0263..1c79d77 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc @@ -176,10 +176,7 @@ function ppgetstat_reset_form_submit($form, $form_state) { } } -/** - * Form builder for reset stats form. - */ -function ppgetstat_sync_user_list($form, $form_state) { +function _ppgetstat_list_form_element() { // Getting list of all available users list for analyzing. $user_lists_vocab = taxonomy_vocabulary_machine_name_load('users_list'); $terms = taxonomy_get_tree($user_lists_vocab->vid); @@ -189,11 +186,20 @@ function ppgetstat_sync_user_list($form, $form_state) { foreach ($terms as $term) { $options[$term->tid] = $term->name; } - $form['users_list'] = array( + + return array( '#type' => 'select', - '#title' => t('Select users group scan to'), + '#title' => t('Select users group'), '#options' => $options, ); +} + +/** + * Form builder for reset stats form. + */ +function ppgetstat_sync_user_list($form, $form_state) { + + $form['users_list'] = _ppgetstat_list_form_element(); $form['direct_user'] = array( '#type' => 'textfield', @@ -236,3 +242,49 @@ function ppgetstat_sync_user_list_submit(array $form, array &$form_state) { drupal_set_message(t('You are not selected any import criteria.'), 'warning'); } } + +function ppgetstat_rescan(array $form, array $form_state) { + $form['users_list'] = _ppgetstat_list_form_element(); + $count = db_select('ppgetstat', 'p')->countQuery()->execute()->fetchCol(); + dpm($count); + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('test request') + ); + + return $form; +} + +function ppgetstat_rescan_submit(array $form, array &$form_state) { + $user_list_tid = $form_state['values']['users_list']; + $queue = DrupalQueue::get('stats_jobs'); + $scan_users = array(); + $query = db_select('field_data_field_user_id', 'fdoid'); + $query->innerJoin('field_data_field_user_lists', 'fl', 'fdoid.entity_id = fl.entity_id'); + $query->condition('fl.field_user_lists_tid', $user_list_tid); + $query->innerJoin('node', 'n', 'n.nid = fdoid.entity_id'); + $query->fields('n', array('title')); + $query->fields('fdoid', array('entity_id', 'field_user_id_value')); + $result = $query->execute()->fetchAll(); + foreach ($result as $item) { + $scan_users[] = array( + 'nid' => $item->entity_id, + 'doid' => $item->field_user_id_value, + 'do_nickname' => $item->title, + ); + } + + $quant = array_chunk($scan_users, PPGETSTAT_STAT_JOB_QUANTIFICATION); + foreach ($quant as $items) { + // Invoke hook so all modules can use it to provide jobs. + foreach (module_implements('ppgetstat_stats_job') as $module) { + $jobs = module_invoke($module, 'ppgetstat_stats_job', $items, TRUE); + if (!empty($jobs)) { + foreach ($jobs as $job) { + $queue->createItem($job); + } + } + } + } + +} From 4da2c0e75e4b0d741d6749a671248bd66a43af69 Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Sun, 1 May 2016 22:35:13 +0300 Subject: [PATCH 04/24] Rebuilt ppcmt after quantification improvements at ppgetstat core --- .../custom/ppgetstat/ppcmnt/ppcmnt.module | 47 ++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module b/docroot/sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module index bfbbcd2..ffcee85 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module +++ b/docroot/sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module @@ -11,33 +11,38 @@ define('PPGETSTAT_TYPE_COMMENTS', 3); /** * Implements hook_ppgetstat_stats_job(). */ -function ppcmnt_ppgetstat_stats_job($user_node) { - $doid = $user_node->field_user_id[LANGUAGE_NONE][0]['value']; +function ppcmnt_ppgetstat_stats_job(array $users, $force = FALSE) { + foreach ($users as $user) { + $doid = $user['doid']; - $last_scan_week = db_query('SELECT timestamp FROM {ppgetstat} WHERE doid = :doid AND type = :type ORDER BY timestamp DESC LIMIT 1', - array(':doid' => $doid, ':type' => PPGETSTAT_TYPE_COMMENTS) - )->fetchField(); + $last_scan_week = db_query('SELECT timestamp FROM {ppgetstat} WHERE doid = :doid AND type = :type ORDER BY timestamp DESC LIMIT 1', + array(':doid' => $doid, ':type' => PPGETSTAT_TYPE_COMMENTS) + )->fetchField(); - $last_comment_timestamp = variable_get('ppgetstat_ppcmnt_last_comment_timestamp', array($doid => array())); + $last_comment_timestamp = variable_get('ppgetstat_ppcmnt_last_comment_timestamp', array($doid => array())); - $last_comment_timestamp[$doid] = array($last_scan_week => 0); + $last_comment_timestamp[$doid] = array($last_scan_week => 0); - $last_scan = max(array( - REQUEST_TIME - PPGETSTAT_DEFAULT_TIME_PERIOD_FOR_SCANNING, - $last_comment_timestamp[$doid][$last_scan_week], - )); + $last_scan = max(array( + REQUEST_TIME - PPGETSTAT_DEFAULT_TIME_PERIOD_FOR_SCANNING, + $last_comment_timestamp[$doid][$last_scan_week], + )); - if ($last_scan > REQUEST_TIME - 24 * 60 * 60) { - return; - } + if (!$force) { + if ($last_scan > REQUEST_TIME - 24 * 60 * 60) { + return; + } + } - $job = array( - 'generate_urls_callback' => '_ppcmnt_get_comments_tracking_urls', - 'parse_pages_callback' => '_ppcmnt_parse_post_page', - 'doid' => $doid, - 'do_nickname' => $user_node->title, - 'last_scan' => $last_scan, - ); + + $job[] = array( + 'generate_urls_callback' => '_ppcmnt_get_comments_tracking_urls', + 'parse_pages_callback' => '_ppcmnt_parse_post_page', + 'doid' => $doid, + 'do_nickname' => $user['do_nickname'], + 'last_scan' => $last_scan, + ); + } return $job; } From b619bbbc32bed45937cb7690c135410b4b27d836 Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Sun, 1 May 2016 22:35:49 +0300 Subject: [PATCH 05/24] Added top contributors of all countries that are scanned widget. --- .../content_types/global_top_contributors.inc | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc new file mode 100644 index 0000000..641d9b6 --- /dev/null +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc @@ -0,0 +1,91 @@ + t('Global statistics: top contributors.'), + 'single' => TRUE, + 'category' => t('PP'), +); + +/** +* Render of global communities size statistics. + */ +function pp_frontpage_global_top_contributors_content_type_render($subtype, $conf, $panel_args) { + $block = new stdClass(); + $block->module = 'pp_frontpage'; + $block->title = t('Top contributors of all countries.'); + + $vocab = taxonomy_vocabulary_machine_name_load('users_list'); + $terms = taxonomy_get_tree($vocab->vid); + foreach ($terms as $t) { + $terms_data[$t->tid] = taxonomy_term_load($t->tid); + } + + // Getting active by commits statistics + $active_by_commits_query = db_select('ppgetstat', 'pp'); + $active_by_commits_query->condition('pp.type', PPGETSTAT_TYPE_COMMITS); + $active_by_commits_query->fields('pp',array('doid', 'user_group_tid')); + $active_by_commits_query->addExpression('COUNT(pp.doid)', 'ac'); + $active_by_commits_query->groupBy('pp.doid'); + $active_by_commits_query->range(0, 100); + $active_by_commits_query->orderBy('ac', 'DESC'); + + $active_by_commits = $active_by_commits_query->execute()->fetchAll(); + foreach ($active_by_commits as $temp) { + $top_stat[$temp->doid] = $temp; + $doids[] = $temp->doid; + $groupd_tids[] = $temp->user_group_tid; + } + + $rows = array(); + + $query = db_select('node', 'n'); + $query->innerJoin('field_data_field_user_id', 'fu', 'n.nid=fu.entity_id'); + $query->fields('n', array('nid')); + $query->fields('fu', array('field_user_id_value')); + $query->condition('fu.field_user_id_value', $doids, 'IN'); + $result = $query->execute()->fetchAll(); + foreach ($result as $temp) { + $nids[] = $temp->nid; + $nid_map[$temp->nid]= $temp->field_user_id_value; + } + $nodes = node_load_multiple($nids); + + foreach ($nodes as $node) { + $dorg_users[$nid_map[$node->nid]] = $node; + } + $i = 1;$country_group = array(); + foreach ($active_by_commits as $temp) { + $doid = $temp->doid; + $node = $dorg_users[$doid]; + $flag = ''; + $term = $terms_data[$temp->user_group_tid]; + + if (!empty($term->field_logo)) { + $field_logo = field_get_items('taxonomy_term', $term, 'field_logo'); + $flag = theme('image_style', array( + 'style_name' => '48x', + 'path'=> $field_logo[0]['uri'], + )); + } + + $rows[] = array( + $i, + $flag, + l($terms_data[$temp->user_group_tid]->name,'taxonomy/term/' . $temp->user_group_tid), + $node->title, + $temp->ac, + ); + $i++; + $country_group[$term->name]++; + } + + $render_array = array( + '#theme' => 'table', + '#header' => array(t('Position'),t('Country'), t('Country'), t('Username'), t('Count of commit')), + '#rows' => $rows + ); + + $block->content = $render_array; + + return $block; +} \ No newline at end of file From f6ccb15b936931a0aeeac71c2c7d5ba2df563543 Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Sun, 1 May 2016 22:36:37 +0300 Subject: [PATCH 06/24] Rebuilt most widget after user_list_tid field changes. --- .../modules/custom/pp_frontpage/plugins/content_types/most.inc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/most.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/most.inc index e7c82d8..a88b2cf 100755 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/most.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/most.inc @@ -41,8 +41,7 @@ function pp_frontpage_most_content_type_render($subtype, $conf, $panel_args, $co ) . ''; $query = 'SELECT pp.doid, SUM(pp.items) as counter FROM {ppgetstat} pp ' . 'INNER JOIN field_data_field_user_id fn ON fn.field_user_id_value = pp.doid ' - . 'INNER JOIN field_data_field_user_lists fu ON fu.entity_id = fn.entity_id ' - . 'WHERE pp.type = :type AND pp.timestamp > :timestamp AND fu.field_user_lists_tid = :user_list_tid ' + . 'WHERE pp.type = :type AND pp.timestamp > :timestamp AND pp.user_group_tid = :user_list_tid ' . 'GROUP BY pp.doid ORDER BY counter DESC LIMIT 0,200'; $last_thee_months = REQUEST_TIME - PPGETSTAT_DEFAULT_TIME_PERIOD_FOR_SCANNING; From 4404b17f000a49df5214e4826e4a5c6db1110363 Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Tue, 3 May 2016 23:13:17 +0300 Subject: [PATCH 07/24] added contrib diff module --- docroot/sites/all/modules/contrib/diff/CHANGELOG.txt | 0 docroot/sites/all/modules/contrib/diff/DiffEngine.php | 0 docroot/sites/all/modules/contrib/diff/LICENSE.txt | 0 docroot/sites/all/modules/contrib/diff/css/diff.boxes.css | 0 docroot/sites/all/modules/contrib/diff/css/diff.default.css | 0 docroot/sites/all/modules/contrib/diff/diff.admin.inc | 0 docroot/sites/all/modules/contrib/diff/diff.api.php | 0 docroot/sites/all/modules/contrib/diff/diff.css | 0 docroot/sites/all/modules/contrib/diff/diff.diff.inc | 0 docroot/sites/all/modules/contrib/diff/diff.info | 0 docroot/sites/all/modules/contrib/diff/diff.install | 0 docroot/sites/all/modules/contrib/diff/diff.module | 0 docroot/sites/all/modules/contrib/diff/diff.pages.inc | 0 docroot/sites/all/modules/contrib/diff/diff.theme.inc | 0 docroot/sites/all/modules/contrib/diff/diff.tokens.inc | 0 docroot/sites/all/modules/contrib/diff/includes/file.inc | 0 docroot/sites/all/modules/contrib/diff/includes/image.inc | 0 docroot/sites/all/modules/contrib/diff/includes/list.inc | 0 docroot/sites/all/modules/contrib/diff/includes/node.inc | 0 docroot/sites/all/modules/contrib/diff/includes/number.inc | 0 docroot/sites/all/modules/contrib/diff/includes/taxonomy.inc | 0 docroot/sites/all/modules/contrib/diff/includes/text.inc | 0 docroot/sites/all/modules/contrib/diff/js/diff.js | 0 docroot/sites/all/modules/contrib/diff/readme.txt | 0 24 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/CHANGELOG.txt mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/DiffEngine.php mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/LICENSE.txt mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/css/diff.boxes.css mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/css/diff.default.css mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.admin.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.api.php mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.css mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.diff.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.info mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.install mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.module mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.pages.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.theme.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/diff.tokens.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/includes/file.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/includes/image.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/includes/list.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/includes/node.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/includes/number.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/includes/taxonomy.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/includes/text.inc mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/js/diff.js mode change 100755 => 100644 docroot/sites/all/modules/contrib/diff/readme.txt diff --git a/docroot/sites/all/modules/contrib/diff/CHANGELOG.txt b/docroot/sites/all/modules/contrib/diff/CHANGELOG.txt old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/DiffEngine.php b/docroot/sites/all/modules/contrib/diff/DiffEngine.php old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/LICENSE.txt b/docroot/sites/all/modules/contrib/diff/LICENSE.txt old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/css/diff.boxes.css b/docroot/sites/all/modules/contrib/diff/css/diff.boxes.css old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/css/diff.default.css b/docroot/sites/all/modules/contrib/diff/css/diff.default.css old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.admin.inc b/docroot/sites/all/modules/contrib/diff/diff.admin.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.api.php b/docroot/sites/all/modules/contrib/diff/diff.api.php old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.css b/docroot/sites/all/modules/contrib/diff/diff.css old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.diff.inc b/docroot/sites/all/modules/contrib/diff/diff.diff.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.info b/docroot/sites/all/modules/contrib/diff/diff.info old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.install b/docroot/sites/all/modules/contrib/diff/diff.install old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.module b/docroot/sites/all/modules/contrib/diff/diff.module old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.pages.inc b/docroot/sites/all/modules/contrib/diff/diff.pages.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.theme.inc b/docroot/sites/all/modules/contrib/diff/diff.theme.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/diff.tokens.inc b/docroot/sites/all/modules/contrib/diff/diff.tokens.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/includes/file.inc b/docroot/sites/all/modules/contrib/diff/includes/file.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/includes/image.inc b/docroot/sites/all/modules/contrib/diff/includes/image.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/includes/list.inc b/docroot/sites/all/modules/contrib/diff/includes/list.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/includes/node.inc b/docroot/sites/all/modules/contrib/diff/includes/node.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/includes/number.inc b/docroot/sites/all/modules/contrib/diff/includes/number.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/includes/taxonomy.inc b/docroot/sites/all/modules/contrib/diff/includes/taxonomy.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/includes/text.inc b/docroot/sites/all/modules/contrib/diff/includes/text.inc old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/js/diff.js b/docroot/sites/all/modules/contrib/diff/js/diff.js old mode 100755 new mode 100644 diff --git a/docroot/sites/all/modules/contrib/diff/readme.txt b/docroot/sites/all/modules/contrib/diff/readme.txt old mode 100755 new mode 100644 From 9b4532413dd987f7838df137d1b64b287e23225d Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Tue, 3 May 2016 23:13:34 +0300 Subject: [PATCH 08/24] Deleted debug --- docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc | 1 - 1 file changed, 1 deletion(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc index 1c79d77..dee3fda 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.pages.inc @@ -246,7 +246,6 @@ function ppgetstat_sync_user_list_submit(array $form, array &$form_state) { function ppgetstat_rescan(array $form, array $form_state) { $form['users_list'] = _ppgetstat_list_form_element(); $count = db_select('ppgetstat', 'p')->countQuery()->execute()->fetchCol(); - dpm($count); $form['submit'] = array( '#type' => 'submit', '#value' => t('test request') From b4ea82e5206ad9693ba0b2931606fa97742019a0 Mon Sep 17 00:00:00 2001 From: Anatolii Poliakov Date: Tue, 3 May 2016 23:14:17 +0300 Subject: [PATCH 09/24] Disabled node save action when user info is not changed at next rescan. --- .../modules/custom/ppgetstat/ppgetstat.module | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module index fef0f70..f873e7d 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module @@ -821,6 +821,39 @@ function _ppgetstat_sync_user_list_step($variables, $page, $tid) { } +/** + * Helper function that is checking - is existed user changed or not. + * We are using this function for next purposes: + * - avoid hard node_save action without any new information; + * - write new revision for understanding differenced between user data now and + * in the past. + * @param $old + * @param $new + * @param $params_to_scan + */ +function _ppgetstat_node_diff($old, $new, $params_to_scan) { + if (!empty($params_to_scan)) { + foreach ($params_to_scan as $param) { + if (empty($old->{$param}) || empty($new->{$param})) { + return TRUE; + } + $old_value = $old->{$param}; + $new_value = $new->{$param}; + if (is_array($old_value) && (is_array($new_value))) { + if ((string)$old_value != (string)$new_value) { + return TRUE; + } + } else { + if ($old_value != $new_value) { + return TRUE; + } + } + } + } else { + // If we dont have plan to compare - thinking that new node has new info. + return TRUE; + } +} /** * Helper function that process d.org users list and add/update that object to * user nodes. @@ -846,7 +879,7 @@ function _ppgetstat_process_dorg_users($users_data, $doids, $tid) { $node->type = 'user'; node_object_prepare($node); } else { - $node = node_load($existed_users[$uid]); + $old_node = $node = node_load($existed_users[$uid]); } $node->title = $users_data[$uid]->name; @@ -890,7 +923,24 @@ function _ppgetstat_process_dorg_users($users_data, $doids, $tid) { } } - node_save($node); + if ($node->nid) { + if (_ppgetstat_node_diff($old_node, $node, + array( + 'field_job_titles', + 'field_organisations', + 'field_mentors', + 'title' + ) + )) { + // Uf user has updated something at profile - adding new revision. + $node->revision = 1; + $node->log = 'User rescan: ' . date('Y-m-d H:i'); + node_save($node); + } + } else { + node_save($node); + } + } } From 5a23ecbf820f02934c88fb1868a7200d7ec8fe00 Mon Sep 17 00:00:00 2001 From: anpolimus Date: Tue, 10 May 2016 00:59:30 +0300 Subject: [PATCH 10/24] Fixed bug with last page list sync --- .../modules/custom/ppgetstat/ppgetstat.module | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module index f873e7d..365190a 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module @@ -6,7 +6,7 @@ */ define('PPGETSTAT_USER_NODE_TYPE', 'user'); // Number of users queued to be scanned per cron run. -define('PPGETSTAT_STATSJOBS_PROCESS_NUMBER', 100); +define('PPGETSTAT_STATSJOBS_PROCESS_NUMBER', 250); // Number of calls to drupal.org per cron run. define('PPGETSTAT_DORGSCRAPPING_PROCESS_NUMBER', 270); // If no stats available we scan commits for last 12 years. @@ -139,7 +139,7 @@ function ppgetstat_cron() { $cron_process_user_queue = _ppgetstat_cron_process_users_queue(); // Create items in stats_jobs queue. - if (!$cron_create_users_queue && !$cron_process_user_queue) { + if (!$cron_create_users_queue || !$cron_process_user_queue) { $cron_create_stats_jobs = _ppgetstat_cron_createItem_stats_jobs(); // If new scan jobs are not created, we could run process jobs. if (!$cron_create_stats_jobs) { @@ -189,7 +189,7 @@ function _ppgetstat_cron_create_users_queue($force = FALSE, $scan_term = NULL) { $r = _ppgetstat_api_call('https://www.drupal.org/','api-d7/user.json', $variables); $last_url = parse_url($r->last); parse_str($last_url['query'], $params); - for ($i = $params['page'] - 1; $i >= 0; $i--) { + for ($i = $params['page']; $i >= 0; $i--) { $queue->createItem(array( $variables, $i, $term->tid )); @@ -834,18 +834,20 @@ function _ppgetstat_sync_user_list_step($variables, $page, $tid) { function _ppgetstat_node_diff($old, $new, $params_to_scan) { if (!empty($params_to_scan)) { foreach ($params_to_scan as $param) { - if (empty($old->{$param}) || empty($new->{$param})) { - return TRUE; - } $old_value = $old->{$param}; $new_value = $new->{$param}; if (is_array($old_value) && (is_array($new_value))) { - if ((string)$old_value != (string)$new_value) { + + if (strcmp(serialize($old_value), serialize($new_value)) != 0) { return TRUE; + } else { + return FALSE; } } else { if ($old_value != $new_value) { return TRUE; + } else { + return FALSE; } } } @@ -935,10 +937,13 @@ function _ppgetstat_process_dorg_users($users_data, $doids, $tid) { // Uf user has updated something at profile - adding new revision. $node->revision = 1; $node->log = 'User rescan: ' . date('Y-m-d H:i'); + watchdog('dorg_users_import', 'Updating user @user', array('@user'=> l($node->title, 'node/' . $node->nid))); node_save($node); } } else { node_save($node); + watchdog('dorg_users_import', 'Adding new user @user', array('@user'=> l($node->title, 'node/' . $node->nid))); + } } From 5cc16b6d8c0cc5384c2f1f9aa12a4999c69982f5 Mon Sep 17 00:00:00 2001 From: anpolimus Date: Tue, 10 May 2016 00:59:57 +0300 Subject: [PATCH 11/24] Added links to d.org user page at global contributors list --- .../plugins/content_types/global_top_contributors.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc index 641d9b6..8f7e10f 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc @@ -72,7 +72,7 @@ function pp_frontpage_global_top_contributors_content_type_render($subtype, $con $i, $flag, l($terms_data[$temp->user_group_tid]->name,'taxonomy/term/' . $temp->user_group_tid), - $node->title, + l($node->title, 'http://drupal.org/user/' . $nid_map[$node->nid]), $temp->ac, ); $i++; From b20cc5c74f1fa64a4ea7a9366f90122a3d67c3eb Mon Sep 17 00:00:00 2001 From: anpolimus Date: Tue, 10 May 2016 01:00:18 +0300 Subject: [PATCH 12/24] Improvements at ppcmnt --- .../sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module b/docroot/sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module index ffcee85..01b8558 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module +++ b/docroot/sites/all/modules/custom/ppgetstat/ppcmnt/ppcmnt.module @@ -11,7 +11,10 @@ define('PPGETSTAT_TYPE_COMMENTS', 3); /** * Implements hook_ppgetstat_stats_job(). */ -function ppcmnt_ppgetstat_stats_job(array $users, $force = FALSE) { +function ppcmnt_ppgetstat_stats_job($users, $force = FALSE) { + if (!is_array($users)) { + $users = array($users); + } foreach ($users as $user) { $doid = $user['doid']; From 0bedc0474571e8ef188dddff99c89f4488d331ed Mon Sep 17 00:00:00 2001 From: anpolimus Date: Wed, 11 May 2016 00:13:48 +0300 Subject: [PATCH 13/24] Fixed warnings --- .../plugins/content_types/global_top_contributors.inc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc index 8f7e10f..d5cf61d 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/global_top_contributors.inc @@ -76,7 +76,11 @@ function pp_frontpage_global_top_contributors_content_type_render($subtype, $con $temp->ac, ); $i++; - $country_group[$term->name]++; + if (isset($country_group[$term->name])) { + $country_group[$term->name]++; + } else { + $country_group[$term->name] = 1; + } } $render_array = array( From fb6ba999d9a021556e153052ca2363f63ead9430 Mon Sep 17 00:00:00 2001 From: anpolimus Date: Wed, 11 May 2016 00:14:04 +0300 Subject: [PATCH 14/24] Fixed warning --- docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module index 365190a..52a69ea 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module @@ -925,7 +925,7 @@ function _ppgetstat_process_dorg_users($users_data, $doids, $tid) { } } - if ($node->nid) { + if (!empty($node->nid)) { if (_ppgetstat_node_diff($old_node, $node, array( 'field_job_titles', From e141f2a8367accf2561e50c8b20dcf202f9416b9 Mon Sep 17 00:00:00 2001 From: anpolimus Date: Fri, 3 Jun 2016 00:01:18 +0300 Subject: [PATCH 15/24] Updated about widget --- .../plugins/content_types/about.inc | 28 ++++++++----------- .../plugins/content_types/about.tpl.php | 6 +++- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/about.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/about.inc index d530be3..44b3887 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/about.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/about.inc @@ -5,15 +5,7 @@ $plugin = array( 'title' => t('Project description for main page'), 'single' => TRUE, 'category' => t('PP'), - 'hook theme' => array( - 'pp_frontpage_about' => array( - 'path' => drupal_get_path('module', 'pp_frontpage') . '/plugins/content_types', - 'template' => 'about', - 'variables' => array( - 'text' => NULL, - ), - ), - ), + 'hook theme' => 'pp_front_page_about_content_type_theme' ); @@ -25,16 +17,18 @@ function pp_frontpage_about_content_type_render() { $block->module = 'pp_frontpage'; $block->title = ''; $block->id = 'about_block'; - $block->content = ' -
-

- ' . t('PPDORG is a project that scans Drupal.org contributions and prepare reports about contributions, grouped by country parameter.') . '
- ' . t('Current version investigate Drupal communities of the eastern Europe') . ' -

- '; $block->content = array( '#theme' => 'pp_frontpage_about', ); - return $block; } + +function pp_front_page_about_content_type_theme(&$theme, $plugin) { + $theme['pp_frontpage_about'] = array( + 'variables' => array( + 'logo' => '', + ), + 'path' => $plugin['path'], + 'template' => 'about' + ); +} diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/about.tpl.php b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/about.tpl.php index a2d539f..4f114a3 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/about.tpl.php +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/about.tpl.php @@ -1 +1,5 @@ -

TEST of THEME

\ No newline at end of file +
+

+
+ +

\ No newline at end of file From fb0fc724f6af932391d61a6605711e3fd5afe3ac Mon Sep 17 00:00:00 2001 From: anpolimus Date: Fri, 3 Jun 2016 00:01:51 +0300 Subject: [PATCH 16/24] Init of the country last month activity. --- .../community_month_activity.inc | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc new file mode 100644 index 0000000..576028f --- /dev/null +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc @@ -0,0 +1,27 @@ + t('Community this month activity'), + 'single' => TRUE, + 'category' => t('PP'), + 'required context' => new ctools_context_required('title','taxonomy_term'), +); + +function pp_frontpage_community_month_activity_content_type_render($subtype, $conf, $panel_args, $context) { + // Localising of user group display to. + if (isset($context) && isset($context->data) && isset($context->data->tid)) { + $user_lists_tid = $context->data->tid; + + $block = new stdClass(); + $block->module = 'pp_frontpage'; + $block->title = t('Users activity this month'); + $query = db_select('ppgetstat', 'p') + ->fields('p', array('doid', 'timestamp')) + ->condition('p.user_group_tid', $user_lists_tid) + ->condition('p.timestamp', time(), '<=') + ->condition('p.timestamp', mktime(0,0,0,date('m'), 0, date('Y'))) + ->execute() + ->fetchAll(); + dpm($query); + } +} \ No newline at end of file From 8be609f6bae4f329e155ca7338d971b552e0a84d Mon Sep 17 00:00:00 2001 From: anpolimus Date: Sat, 25 Jun 2016 16:17:29 +0300 Subject: [PATCH 17/24] Fixed bug with wrong data at rescan --- .../modules/custom/ppgetstat/ppgetstat.module | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module index 52a69ea..04bf584 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module @@ -140,7 +140,8 @@ function ppgetstat_cron() { // Create items in stats_jobs queue. if (!$cron_create_users_queue || !$cron_process_user_queue) { - $cron_create_stats_jobs = _ppgetstat_cron_createItem_stats_jobs(); + $cron_create_stats_jobs = false; + //$cron_create_stats_jobs = _ppgetstat_cron_createItem_stats_jobs(); // If new scan jobs are not created, we could run process jobs. if (!$cron_create_stats_jobs) { // Process items from stats_jobs queue. @@ -245,10 +246,11 @@ function _ppgetstat_cron_createItem_stats_jobs() { $queue = DrupalQueue::get('stats_jobs'); $scan_users = array(); - foreach (_ppgetstats_get_all_users() as $nid => $doid) { + foreach (_ppgetstats_get_all_users() as $nid => $temp) { $scan_users[] = array( 'nid' => $nid, - 'doid' => $doid, + 'doid' => $temp['doid'], + 'do_nickname' => $temp['do_nickname'], ); } @@ -354,21 +356,19 @@ function _ppgetstat_cron_processItem_stats_jobs() { * Get all published user nodes. */ function _ppgetstats_get_all_users() { - $query = new EntityFieldQuery(); - $result = $query - ->entityCondition('entity_type', 'node') - ->entityCondition('bundle', PPGETSTAT_USER_NODE_TYPE) - ->propertyCondition('status', 1) - ->execute(); + $query = db_select('node', 'n'); $query->innerJoin('field_data_field_user_id', 'fu', 'n.nid=fu.entity_id'); - $query->fields('n', array('nid')); + $query->fields('n', array('nid', 'title')); $query->fields('fu', array('field_user_id_value')); $result = $query->execute()->fetchAll(); if (!empty($result)) { $return = array(); foreach ($result as $item) { - $return[$item->nid] = $item->field_user_id_value; + $return[$item->nid] = array( + 'doid' => $item->field_user_id_value, + 'do_nickname' => $item->title, + ); } return $return; } else { @@ -926,20 +926,20 @@ function _ppgetstat_process_dorg_users($users_data, $doids, $tid) { } if (!empty($node->nid)) { - if (_ppgetstat_node_diff($old_node, $node, + /*if (_ppgetstat_node_diff($old_node, $node, array( 'field_job_titles', 'field_organisations', 'field_mentors', 'title' ) - )) { + )) {*/ // Uf user has updated something at profile - adding new revision. $node->revision = 1; $node->log = 'User rescan: ' . date('Y-m-d H:i'); - watchdog('dorg_users_import', 'Updating user @user', array('@user'=> l($node->title, 'node/' . $node->nid))); + watchdog('dorg_users_import', 'Updating user @user', array('@user' => l($node->title, 'node/' . $node->nid))); node_save($node); - } + //} } else { node_save($node); watchdog('dorg_users_import', 'Adding new user @user', array('@user'=> l($node->title, 'node/' . $node->nid))); From b9a9a1ddb9bde648068802647d5136a76062e336 Mon Sep 17 00:00:00 2001 From: anpolimus Date: Sat, 25 Jun 2016 16:17:54 +0300 Subject: [PATCH 18/24] Added missed large logo for main page widget. --- .../custom/ppdorg_bootstrap/logo-large.png | Bin 0 -> 5483 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docroot/sites/all/themes/custom/ppdorg_bootstrap/logo-large.png diff --git a/docroot/sites/all/themes/custom/ppdorg_bootstrap/logo-large.png b/docroot/sites/all/themes/custom/ppdorg_bootstrap/logo-large.png new file mode 100644 index 0000000000000000000000000000000000000000..3583c98d8a6e1618f6c192b9d75e50bbd5a42782 GIT binary patch literal 5483 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 Date: Wed, 29 Jun 2016 14:00:10 +0300 Subject: [PATCH 19/24] Fixed bug with community quality stat gathering --- .../content_types/community_quality.inc | 60 +++++-------------- 1 file changed, 16 insertions(+), 44 deletions(-) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc index 0787d16..c6793a9 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc @@ -36,59 +36,31 @@ function pp_frontpage_community_quality_content_type_render( // Getting info for showing count of individual members at this country. $members_stat = _ppgetstat_get_individual_members(); - $all_user_query = db_select('node', 'n'); - $all_user_query->innerJoin( +// Query for global count uids, attached to the country. + $query = db_select('node', 'n'); + $query->innerJoin( 'field_data_field_user_lists', 'fu', 'fu.entity_id = n.nid' ); - $all_user_query->condition('n.type', 'user'); - $all_user_query->condition('fu.field_user_lists_tid', $user_lists_tid); - $all_user_query->addExpression('COUNT(n.nid)'); - $all_user_result = $all_user_query->execute(); - $all_user_count = $all_user_result->fetchField(); + $query->fields('fu', array('field_user_lists_tid')); + $query->addExpression('COUNT(fu.field_user_lists_tid)', 'gc'); + $query->condition('fu.field_user_lists_tid', $user_lists_tid); + $query->orderBy('gc', 'DESC'); + $all_user_count = $query->countQuery()->execute()->fetchField(); + // Getting active by commits statistics $active_by_commits_query = db_select('ppgetstat', 'pp'); - $active_by_commits_query->innerJoin( - 'field_data_field_user_id', - 'fn', - 'fn.field_user_id_value = pp.doid' - ); - $active_by_commits_query->innerJoin( - 'field_data_field_user_lists', - 'fu', - 'fu.entity_id = fn.entity_id' - ); $active_by_commits_query->condition('pp.type', PPGETSTAT_TYPE_COMMITS); - $active_by_commits_query->condition( - 'fu.field_user_lists_tid', - $user_lists_tid - ); + $active_by_commits_query->condition('pp.user_group_tid', $user_lists_tid); + $active_by_commits_query->fields('pp',array('user_group_tid')); + $active_by_commits_query->addExpression('COUNT(pp.doid)', 'ac'); + + $active_by_commits_query->groupBy('pp.user_group_tid'); $active_by_commits_query->groupBy('pp.doid'); - $active_by_commits_query->addExpression('COUNT(pp.doid)'); - $active_by_commits_count = $active_by_commits_query->execute()->fetchField( - ); + $active_by_commits_count = $active_by_commits_query->countQuery()->execute()->fetchField(); - $active_by_comments_query = db_select('ppgetstat', 'pp'); - $active_by_comments_query->innerJoin( - 'field_data_field_user_id', - 'fn', - 'fn.field_user_id_value = pp.doid' - ); - $active_by_comments_query->innerJoin( - 'field_data_field_user_lists', - 'fu', - 'fu.entity_id = fn.entity_id' - ); - $active_by_comments_query->condition('pp.type', PPGETSTAT_TYPE_COMMITS); - $active_by_comments_query->condition( - 'fu.field_user_lists_tid', - $user_lists_tid - ); - $active_by_comments_query->groupBy('pp.doid'); - $active_by_comments_query->addExpression('COUNT(pp.doid)'); - $active_by_comments_count = $active_by_comments_query->execute() - ->fetchField(); + $active_by_comments_count = 0; $individual_members_count = $members_stat['members_country_count'][$country]; if ($all_user_count > 0) { From 24d4fa31bbd9c87561647f54eb161d35f61be790 Mon Sep 17 00:00:00 2001 From: anpolimus Date: Sat, 2 Jul 2016 17:36:13 +0300 Subject: [PATCH 20/24] Rebuilt community_quality with right hook_theme approach --- .../content_types/community_quality.inc | 65 ++++++++++++------- .../templates/community_quality.tpl.php | 16 +++++ 2 files changed, 57 insertions(+), 24 deletions(-) create mode 100644 docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/templates/community_quality.tpl.php diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc index c6793a9..f57aa34 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc @@ -5,6 +5,7 @@ $plugin = array( 'single' => TRUE, 'category' => t('PP'), 'required context' => new ctools_context_required('title', 'taxonomy_term'), + 'hook theme' => 'pp_front_page_community_quality_content_type_theme' ); /** @@ -31,12 +32,11 @@ function pp_frontpage_community_quality_content_type_render( $block = new stdClass(); $block->module = 'pp_frontpage'; - $block->title = t('Community statistic'); - + $block->content = ''; // Getting info for showing count of individual members at this country. $members_stat = _ppgetstat_get_individual_members(); -// Query for global count uids, attached to the country. + // Query for global count uids, attached to the country. $query = db_select('node', 'n'); $query->innerJoin( 'field_data_field_user_lists', @@ -63,31 +63,48 @@ function pp_frontpage_community_quality_content_type_render( $active_by_comments_count = 0; $individual_members_count = $members_stat['members_country_count'][$country]; + if ($all_user_count > 0) { - $block->content = '
-
    -
  • ' . t('Total count') . ' : ' . $all_user_count . '
  • -
  • ' . t( - 'Active committers' - ) . ' : ' . $active_by_commits_count . ' (' . number_format( + $block->title = t('Community statistic'); + $block->content = array( + '#theme' => 'pp_frontpage_community_quality', + '#total' => $all_user_count, + '#active_committers' => $active_by_commits_count, + '#active_commenters' => $active_by_comments_count, + '#assoc_individual_members' => $individual_members_count, + '#active_committers_p' => number_format( $active_by_commits_count / $all_user_count, 2 - ) * 100 . ')%
  • -
  • ' . t( - 'Active commenters' - ) . ' : ' . $active_by_comments_count . ' (' . number_format( - $active_by_comments_count / $all_user_count, - 2 - ) * 100 . ')%
  • -
  • ' . t( - 'Individual Assoc members' - ) . ' : ' . $individual_members_count . ' (' . number_format( - $individual_members_count / $all_user_count, - 2 - ) * 100 . ')%
  • -
-
'; + ) * 100, + '#active_commenters_p' => number_format( + $active_by_comments_count / $all_user_count, + 2 + ) * 100, + '#assoc_individual_members_p' => number_format( + $individual_members_count / $all_user_count, + 2 + ) * 100 + ); } return $block; } } + +/** + * hook_theme callback for this plugin. + */ +function pp_front_page_community_quality_content_type_theme(&$theme, $plugin) { + $theme['pp_frontpage_community_quality'] = array( + 'variables' => array( + 'total' => 0, + 'active_committers' => 0, + 'active_commenters' => 0, + 'assoc_individual_members' => 0, + 'active_committers_p' => 0, + 'active_commenters_p' => 0, + 'assoc_individual_members_p' => 0 + ), + 'path' => $plugin['path'] . '/templates/', + 'template' => 'community_quality' + ); +} diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/templates/community_quality.tpl.php b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/templates/community_quality.tpl.php new file mode 100644 index 0000000..3d6d37c --- /dev/null +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/templates/community_quality.tpl.php @@ -0,0 +1,16 @@ +
+
    +
  • + : +
  • +
  • + : ( %) +
  • +
  • + : ( %) +
  • +
  • + : ( %) +
  • +
+
\ No newline at end of file From 1841f2dd3c6adb6cae2bd067de045f9f098c00ae Mon Sep 17 00:00:00 2001 From: anpolimus Date: Sat, 2 Jul 2016 17:37:05 +0300 Subject: [PATCH 21/24] Added month activity widget with d3.js library. --- .../community_month_activity.inc | 42 +++++++++-- .../content_types/js/month_activity.js | 73 +++++++++++++++++++ .../content_types/month_activity.tpl.php | 27 +++++++ .../custom/pp_frontpage/pp_frontpage.module | 45 ++++++++++-- 4 files changed, 174 insertions(+), 13 deletions(-) create mode 100644 docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/js/month_activity.js create mode 100644 docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/month_activity.tpl.php diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc index 576028f..bad71be 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc @@ -5,6 +5,7 @@ $plugin = array( 'single' => TRUE, 'category' => t('PP'), 'required context' => new ctools_context_required('title','taxonomy_term'), + 'hook theme' => 'pp_frontpage_community_month_activity_content_type_theme' ); function pp_frontpage_community_month_activity_content_type_render($subtype, $conf, $panel_args, $context) { @@ -16,12 +17,43 @@ function pp_frontpage_community_month_activity_content_type_render($subtype, $co $block->module = 'pp_frontpage'; $block->title = t('Users activity this month'); $query = db_select('ppgetstat', 'p') - ->fields('p', array('doid', 'timestamp')) + ->fields('p', array('doid', 'timestamp', 'type')) ->condition('p.user_group_tid', $user_lists_tid) - ->condition('p.timestamp', time(), '<=') - ->condition('p.timestamp', mktime(0,0,0,date('m'), 0, date('Y'))) + ->condition('p.timestamp', mktime(0,0,0, 1 , 1, date('Y')), '>=') ->execute() ->fetchAll(); - dpm($query); + $doids = $day_stat = array(); + foreach ($query as $temp) { + if (isset($doids[$temp->doid])) { + $doids[$temp->doid]++; + } else { + $doids[$temp->doid] = 1; + } + $day_stat[date('m', $temp->timestamp)][date('d', $temp->timestamp)][$temp->doid][$temp->type]++; + + } + $users = _ppgetstat_get_users_by_doids(array_keys($doids)); + $doids = asort($doids); + drupal_add_js('http://d3js.org/d3.v3.min.js', 'external'); + drupal_add_js(drupal_get_path('module','pp_frontpage') . '/plugins/content_types/js/month_activity.js'); + drupal_add_js(array('pp_frontpage' => array('community_tid' => $user_lists_tid)), 'setting'); + $block = new stdClass(); + $block->module = 'pp_frontpage'; + $block->title = 'Timeline'; + $block->id = 'pp_frontpage_month_activity'; + $block->content = array( + '#theme' => 'pp_frontpage_month_activity', + ); + return $block; } -} \ No newline at end of file +} + +function pp_frontpage_community_month_activity_content_type_theme(&$theme, $plugin) { + $theme['pp_frontpage_month_activity'] = array( + 'variables' => array( + 'logo' => '', + ), + 'path' => $plugin['path'], + 'template' => 'month_activity' + ); +} diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/js/month_activity.js b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/js/month_activity.js new file mode 100644 index 0000000..772440c --- /dev/null +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/js/month_activity.js @@ -0,0 +1,73 @@ +(function ($) { + $(document).ready(function() { + var width = 1100, + height = 200, + cellSize = 20; // cell size + + var percent = d3.format(".1%"), + format = d3.time.format("%Y-%m-%d"); + + var svg = d3.select("#pp_frontpage_month_activity").selectAll("svg") + .data(d3.range(2015, 2017)) + .enter().append("svg") + .attr("width", width) + .attr("height", height) + .attr("class", "RdYlGn") + .append("g") + .attr("transform", "translate(" + ((width - cellSize * 53) / 2) + "," + (height - cellSize * 7 - 1) + ")"); + + svg.append("text") + .attr("transform", "translate(-6," + cellSize * 3.5 + ")rotate(-90)") + .style("text-anchor", "middle") + .text(function(d) { return d; }); + + var rect = svg.selectAll(".day") + .data(function(d) { return d3.time.days(new Date(d, 0, 1), new Date(d + 1, 0, 1)); }) + .enter().append("rect") + .attr("class", "day") + .attr("width", cellSize) + .attr("height", cellSize) + .attr("x", function(d) { return d3.time.weekOfYear(d) * cellSize; }) + .attr("y", function(d) { return d.getDay() * cellSize; }) + .datum(format); + + rect.append("title") + .text(function(d) { return d; }); + + svg.selectAll(".month") + .data(function(d) { return d3.time.months(new Date(d, 0, 1), new Date(d + 1, 0, 1)); }) + .enter().append("path") + .attr("class", "month") + .attr("d", monthPath); + console.log(Drupal.settings.pp_frontpage.community_tid); + d3.json("/group_calendar_stat/" + Drupal.settings.pp_frontpage.community_tid, function(error, json) { + + if (error) throw error; + data = json; + max_value = d3.entries(data) + .sort(function(a, b) { return d3.descending(a.value, b.value); }) + [0].value; + + rect.filter(function(d) { return d in data; }) + .style("fill",function(d) { + return "rgba(0,104,55," + data[d]/max_value + ")"; + }).append("text").text( + function(d){return data[d];} + ) + .select("title") + .text(function(d) { return d + ": " + data[d]; }); + }); + + function monthPath(t0) { + var t1 = new Date(t0.getFullYear(), t0.getMonth() + 1, 0), + d0 = t0.getDay(), w0 = d3.time.weekOfYear(t0), + d1 = t1.getDay(), w1 = d3.time.weekOfYear(t1); + return "M" + (w0 + 1) * cellSize + "," + d0 * cellSize + + "H" + w0 * cellSize + "V" + 7 * cellSize + + "H" + w1 * cellSize + "V" + (d1 + 1) * cellSize + + "H" + (w1 + 1) * cellSize + "V" + 0 + + "H" + (w0 + 1) * cellSize + "Z"; + } + + }); +})(jQuery); \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/month_activity.tpl.php b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/month_activity.tpl.php new file mode 100644 index 0000000..984c8ab --- /dev/null +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/month_activity.tpl.php @@ -0,0 +1,27 @@ + +

test

+
\ No newline at end of file diff --git a/docroot/sites/all/modules/custom/pp_frontpage/pp_frontpage.module b/docroot/sites/all/modules/custom/pp_frontpage/pp_frontpage.module index 13baa4d..0b10eb0 100755 --- a/docroot/sites/all/modules/custom/pp_frontpage/pp_frontpage.module +++ b/docroot/sites/all/modules/custom/pp_frontpage/pp_frontpage.module @@ -6,16 +6,18 @@ */ /** - * Implements hook_theme(). + * Implements hook_menu(). */ -/*function pp_frontpage_theme() { - return array( - 'about_block' => array( - 'render element' => 'data', - 'template' => 'plugins/templates/about_block' - ), +function pp_frontpage_menu() { + $items['group_calendar_stat/%'] = array( + 'title' => 'Commits Tsv', + 'description' => 'user group months statistics.', + 'page callback' => 'pp_frontpage_calendar_stat', + 'page arguments' => array(1), + 'access arguments' => array('access content'), ); -}*/ + return $items; +} /** * Implements hook_ctools_plugin_directory(). @@ -25,3 +27,30 @@ function pp_frontpage_ctools_plugin_directory($owner, $plugin_type) { return 'plugins/content_types'; } } + +/** + * Render callback for calendar stat csv output. + */ +function pp_frontpage_calendar_stat($user_lists_tid) { + $query = db_select('ppgetstat', 'p') + ->fields('p', array('doid', 'timestamp', 'type')) + ->condition('p.user_group_tid', $user_lists_tid) + ->condition('p.timestamp', mktime(0,0,0, 1 , 1, date('Y')), '>=') + ->execute() + ->fetchAll(); + $doids = $day_stat = array(); + foreach ($query as $temp) { + if (isset($doids[$temp->doid])) { + $doids[$temp->doid]++; + } else { + $doids[$temp->doid] = 1; + } + $day_stat[date('Y-m-d', $temp->timestamp)]++; + + } + + + $users = _ppgetstat_get_users_by_doids(array_keys($doids)); + + return drupal_json_output($day_stat); +} From 2ea712cbc5bf9a1cc494bc777b7475bf4af077b9 Mon Sep 17 00:00:00 2001 From: anpolimus Date: Mon, 4 Jul 2016 16:12:08 +0300 Subject: [PATCH 22/24] Changed title of the block Old version was wrong --- .../pp_frontpage/plugins/content_types/community_quality.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc index f57aa34..dfcfeb0 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_quality.inc @@ -65,7 +65,7 @@ function pp_frontpage_community_quality_content_type_render( $individual_members_count = $members_stat['members_country_count'][$country]; if ($all_user_count > 0) { - $block->title = t('Community statistic'); + $block->title = t('Community quality'); $block->content = array( '#theme' => 'pp_frontpage_community_quality', '#total' => $all_user_count, From 11664eaafa72fb99d275cbd0bd8a0910c606fcde Mon Sep 17 00:00:00 2001 From: anpolimus Date: Tue, 5 Jul 2016 23:47:50 +0300 Subject: [PATCH 23/24] Fixed bug with the wrong timestamp for each commit in the DB --- .../modules/custom/ppgetstat/ppgetstat.module | 46 ++++++------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module index 04bf584..adb52db 100755 --- a/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module +++ b/docroot/sites/all/modules/custom/ppgetstat/ppgetstat.module @@ -281,23 +281,16 @@ function ppgetstat_ppgetstat_stats_job(array $users, $force = FALSE) { foreach ($users as $user) { $doid = $user['doid']; - $last_scan_week = db_query('SELECT timestamp FROM {ppgetstat} WHERE doid = :doid AND type = :type ORDER BY timestamp DESC LIMIT 1', + $last_scan = db_query('SELECT timestamp FROM {ppgetstat} WHERE doid = :doid AND type = :type ORDER BY timestamp DESC LIMIT 1', array(':doid' => $doid, ':type' => PPGETSTAT_TYPE_COMMITS) )->fetchField(); - $last_commit_timestamp = variable_get('ppgetstat_ppgetstat_last_commit_timestamp', array($doid => array())); - $last_commit_timestamp[$doid] = array($last_scan_week => 0); - //@TODO Rim this, because filtering is already exist at _ppgetstat_cron_createItem_stats_jobs(). - $last_scan = max(array( - REQUEST_TIME - PPGETSTAT_DEFAULT_TIME_PERIOD_FOR_SCANNING, - $last_commit_timestamp[$doid][$last_scan_week], - )); - - if (!$force) { + if ($force) { if ($last_scan > REQUEST_TIME - 24 * 60 * 60) { return; } } + $job[] = array( 'generate_urls_callback' => '_ppgetstat_get_code_tracking_urls', 'parse_pages_callback' => '_ppgetstat_parse_commits', @@ -583,6 +576,7 @@ function _ppgetstat_cron_remove_cached_pages() { */ function _ppgetstat_parse_commits($page_content, $data) { $last_scan = $data['last_scan']; + if (empty($page_content)) { throw new Exception('Empty page content.'); } @@ -607,23 +601,10 @@ function _ppgetstat_parse_commits($page_content, $data) { break; } - $period_timestamp = $commit_timestamp - ($commit_timestamp % PPGETSTAT_TIME_PERIOD_GRANULARITY); - $last_commits = variable_get('ppgetstat_ppgetstat_last_commit_timestamp', array($data['doid'] => array($period_timestamp => 0))); - - // Save latest commit's date per week into variable. - if ($first_commit_timestamp || empty($last_commits[$data['doid']][$period_timestamp])) { - $first_commit_timestamp = FALSE; - - if (empty($last_commits[$data['doid']][$period_timestamp]) || $commit_timestamp > $last_commits[$data['doid']][$period_timestamp]) { - $last_commits[$data['doid']][$period_timestamp] = $commit_timestamp; - variable_set('ppgetstat_ppgetstat_last_commit_timestamp', $last_commits); - } - } - - if (!isset($commits_counter_array[$period_timestamp])) { - // $commits_counter_array[$period_timestamp] = 0; - } - $commits_counter_array[$period_timestamp][] = $commit_hash; + $commits_counter_array[] = array( + 'hash' => $commit_hash, + 'timestamp' => $commit_timestamp, + ); $commits_counter++; } @@ -633,7 +614,7 @@ function _ppgetstat_parse_commits($page_content, $data) { } $commits_counter_array['#type'] = PPGETSTAT_TYPE_COMMITS; - + watchdog('_ppdorg_debug_2', print_r($commits_counter_array,1)); return $commits_counter_array; } @@ -649,18 +630,17 @@ function _ppgetstat_save_counters($counters_array, $doid) { $query->fields('fl', array('field_user_lists_tid')); $user_group_tid = $query->execute()->fetchField(); - foreach ($counters_array as $period => &$commits) { - foreach ($commits as &$hash) { + foreach ($counters_array as $commit) { + db_merge('ppgetstat') - ->key(array('doid' => $doid, 'hash' => $hash)) + ->key(array('doid' => $doid, 'hash' => $commit['hash'])) ->fields(array( 'type' => $type, - 'timestamp' => $period, + 'timestamp' => $commit['timestamp'], 'items' => 1, 'user_group_tid' => $user_group_tid )) ->execute(); - } } } From 378a61c0805430ce5b92d3e41085bd517837b0d0 Mon Sep 17 00:00:00 2001 From: anpolimus Date: Tue, 5 Jul 2016 23:48:29 +0300 Subject: [PATCH 24/24] month activity for two years + changed basic color --- .../plugins/content_types/community_month_activity.inc | 6 ++++-- .../pp_frontpage/plugins/content_types/js/month_activity.js | 2 +- .../all/modules/custom/pp_frontpage/pp_frontpage.module | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc index bad71be..20a69e1 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/community_month_activity.inc @@ -19,7 +19,7 @@ function pp_frontpage_community_month_activity_content_type_render($subtype, $co $query = db_select('ppgetstat', 'p') ->fields('p', array('doid', 'timestamp', 'type')) ->condition('p.user_group_tid', $user_lists_tid) - ->condition('p.timestamp', mktime(0,0,0, 1 , 1, date('Y')), '>=') + ->condition('p.timestamp', mktime(0,0,0, 1 , 1, date('Y')-1), '>=') ->execute() ->fetchAll(); $doids = $day_stat = array(); @@ -29,9 +29,11 @@ function pp_frontpage_community_month_activity_content_type_render($subtype, $co } else { $doids[$temp->doid] = 1; } - $day_stat[date('m', $temp->timestamp)][date('d', $temp->timestamp)][$temp->doid][$temp->type]++; + $day_stat[date('Y-m-d', $temp->timestamp)]++; } + + dpm($day_stat); $users = _ppgetstat_get_users_by_doids(array_keys($doids)); $doids = asort($doids); drupal_add_js('http://d3js.org/d3.v3.min.js', 'external'); diff --git a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/js/month_activity.js b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/js/month_activity.js index 772440c..1ad9e59 100644 --- a/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/js/month_activity.js +++ b/docroot/sites/all/modules/custom/pp_frontpage/plugins/content_types/js/month_activity.js @@ -50,7 +50,7 @@ rect.filter(function(d) { return d in data; }) .style("fill",function(d) { - return "rgba(0,104,55," + data[d]/max_value + ")"; + return "rgba(43,169,224," + data[d]/max_value + ")"; }).append("text").text( function(d){return data[d];} ) diff --git a/docroot/sites/all/modules/custom/pp_frontpage/pp_frontpage.module b/docroot/sites/all/modules/custom/pp_frontpage/pp_frontpage.module index 0b10eb0..06adeb9 100755 --- a/docroot/sites/all/modules/custom/pp_frontpage/pp_frontpage.module +++ b/docroot/sites/all/modules/custom/pp_frontpage/pp_frontpage.module @@ -35,7 +35,7 @@ function pp_frontpage_calendar_stat($user_lists_tid) { $query = db_select('ppgetstat', 'p') ->fields('p', array('doid', 'timestamp', 'type')) ->condition('p.user_group_tid', $user_lists_tid) - ->condition('p.timestamp', mktime(0,0,0, 1 , 1, date('Y')), '>=') + ->condition('p.timestamp', mktime(0,0,0, 1 , 1, date('Y')-1), '>=') ->execute() ->fetchAll(); $doids = $day_stat = array();