From 626207499eadc69bf6ea1d070036707bdee109f3 Mon Sep 17 00:00:00 2001
From: Luis Lopez <ldotlopez@gmail.com>
Date: Wed, 18 Jan 2012 10:08:05 +0100
Subject: [PATCH] Added support for drush

This patch adds two drush commands for mass user karma recalculation and
mass user role recalculation
---
 user_karma.drush.inc |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 60 insertions(+), 0 deletions(-)
 create mode 100644 user_karma.drush.inc

diff --git a/user_karma.drush.inc b/user_karma.drush.inc
new file mode 100644
index 0000000..2c36f11
--- /dev/null
+++ b/user_karma.drush.inc
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Implements hook_drush_command().
+ */
+function user_karma_drush_command() {
+  $items['user-karma-mass-recalculate'] = array(
+    'callback' => 'user_karma_drush_mass_recalculate',
+    'description' => dt('Recalculate user karma'),
+    'arguments' => array(
+      'uid' => dt('Optional. Calculate the karma for one specific user'),
+    ),
+  );
+  $items['user-karma-roles-mass-recalculate'] = array(
+    'callback' => 'user_karma_drush_roles_mass_recalculate',
+    'description' => dt('Recalculate user roles based on karma'),
+    'arguments' => array(),
+  );
+  return $items;
+}
+
+/**
+ * Replicate user_karma_karma_mass_recalculation so we can display progress
+ */  
+function user_karma_drush_mass_recalculate($uid = 0) {
+  $query = "SELECT uid FROM {users} WHERE access<>0";
+  if (is_numeric($uid) and ($uid > 0))
+    $query .= " AND uid = $uid";
+
+  $result = db_query($query);
+  $row_count = db_affected_rows($result);
+  $i = 1;
+  while ($u = db_fetch_object($result)) {
+    drush_log(sprintf(dt("%3d%% [%d/%d] Calculating karma for user #%d"), (int) (($i*100) / ((float)$row_count)), $i, $row_count, $u->uid));
+    user_karma_calculate_karma($u->uid);
+    $i++;
+  }
+}
+
+/**
+ * Replicate user_karma_roles_mass_recalculation so we can display progress
+ */
+function user_karma_drush_roles_mass_recalculate() {
+  $roles = variable_get('user_karma_eligible_roles', array());
+  foreach ($roles as $rid) {
+    drush_log("Deleting ALL roles $r");
+    db_query('DELETE FROM {users_roles} where rid = %d', $rid);
+  }
+
+  $query = "SELECT uid FROM {users} WHERE access<>0";
+  $result = db_query($query);
+  $row_count = db_affected_rows($result);
+  $i = 1;
+  while ($data = db_fetch_object($result)) {
+    $uid = $data->uid;
+    drush_log(sprintf(dt("%3d%% [%d/%d] Recalculating role for user #%d"), (int) (($i*100) / ((float)$row_count)), $i, $row_count, $uid));
+    user_karma_calculate_role($uid, FALSE);
+    $i++;
+  }
+}
-- 
1.7.2.5

