From cd07bf5611752c7781e2944f5694a0c5bca0320b Mon Sep 17 00:00:00 2001
From: Arpit Jalan <arpit@techapj.com>
Date: Wed, 2 Jul 2014 02:03:02 +0530
Subject: [PATCH] Update admin rake task

---
 lib/tasks/admin.rake | 61 ++++++++++++++++++++++++++++++++++----------
 1 file changed, 48 insertions(+), 13 deletions(-)

diff --git a/lib/tasks/admin.rake b/lib/tasks/admin.rake
index 2604a444766..edba4c096ef 100644
--- a/lib/tasks/admin.rake
+++ b/lib/tasks/admin.rake
@@ -1,24 +1,59 @@
 desc "Creates a forum administrator"
 task "admin:create" => :environment do
   require 'highline/import'
+
   begin
-    admin = User.new
-    admin.email = ask("Email:")
-    admin.username = "admin"
-    begin
-      password = ask("Password:") {|q| q.echo = false}
-      password_confirmation = ask("Repeat password:") {|q| q.echo = false}
-    end while password != password_confirmation
-    admin.password = password
-    # admin.email_confirmed = true
+    email = ask("Email:")
+    existing_user = User.find_by_email(email)
+
+    # check if user account already exixts
+    if !existing_user.nil?
+      # user already exists, ask for password reset
+      admin = existing_user
+      reset_password = ask("User with this email already exists! Do you want to reset the password for this email? Type 'Y' for Yes, 'N' for No.")
+      if (reset_password.downcase == 'y')
+        begin
+          password = ask("Password:") {|q| q.echo = false}
+          password_confirmation = ask("Repeat password:") {|q| q.echo = false}
+        end while password != password_confirmation
+        admin.password = password
+      end
+    else
+      # create new user
+      admin = User.new
+      admin.email = email
+      username_random = Random.new()
+      admin.username = "admin_#{username_random.rand(9999)}"
+      begin
+        password = ask("Password:") {|q| q.echo = false}
+        password_confirmation = ask("Repeat password:") {|q| q.echo = false}
+      end while password != password_confirmation
+      admin.password = password
+    end
+
+    # save/update user account
     saved = admin.save
     if !saved
       puts admin.errors.full_messages.join("\n")
       next
     end
   end while !saved
-  admin.grant_admin!
-  admin.change_trust_level!(TrustLevel.levels.max_by{|k, v| v}[0])
-  admin.email_tokens.update_all  confirmed: true
-  admin.activate
+
+  if !existing_user.nil?
+    say("\nAccount updated successfully!")
+  else
+    say("\nAccount created successfully with username #{admin.username}")
+  end
+
+  # grant admin privileges
+  reset_password = ask("Do you want to grant Admin privileges to this account? Type 'Y' for Yes, 'N' for No.")
+  if (reset_password.downcase == 'y')
+    admin.grant_admin!
+    admin.change_trust_level!(TrustLevel.levels.max_by{|k, v| v}[0])
+    admin.email_tokens.update_all  confirmed: true
+    admin.activate
+
+    say("\nYour account now has Admin privileges!")
+  end
+
 end