pyc-website
main website for pyc inc.
git clone https://9o.is/git/pyc-website.git
AdminSnip.scala
(3175B)
1 package inc.pyc
2 package snippet
3
4 import xml._
5 import lib._
6 import model._
7 import model.field.USAPurchaseLimit._
8 import StringUtils._
9 import config.Site
10 import net.liftweb._
11 import http._
12 import common._
13 import json._
14 import JsonDSL._
15 import com.foursquare._
16 import rogue.LiftRogue._
17 import net.liftmodules.mongoauth.MongoAuth
18 import scala.concurrent._
19 import ExecutionContext.Implicits.global
20
21 trait AdminSnip extends AngularSnippet
22
23 class VerifyId extends AdminSnip with Logger {
24
25 def roundTrips: List[RoundTripInfo] = List(
26 "submit" -> submit _,
27 "init" -> init _)
28
29 /** Pending Users */
30 def pending = User.where(_.purchaseLimit eqs D10k_?).fetch
31
32 def submit(model: JValue): JValue =
33 for {
34 JBool(accepted) <- model \ "accepted"
35 JString(userId) <- model \ "userId"
36 user <- User.find(userId).toList
37 } yield {
38 import net.liftweb.util.Mailer._
39
40 val fname = user.fname.get
41 val limit = user.purchaseLimit.get
42 val title = S ? "verification"
43 val settingsUrl = Site.domain+"/settings"
44
45 val JString(reason) =
46 if(accepted) JString("")
47 else model \ "reason"
48
49 if(accepted) user.purchaseLimit(D10k)
50 else user.purchaseLimit(D3k)
51 user.update
52
53 val subtitle =
54 if(accepted) S ? "verify_subtitle_success" format fname
55 else S ? "verify_subtitle_fail" format fname
56
57
58 val purchaseLimit = S ? "new_purchase_limit" format user.purchaseLimit.get
59 val settingsUrlText = S ? "setting_url_text"
60 val successPart1 = S ? "verify_body_success_part1"
61 val successPart2 = S ? "verify_body_success_part2" format user.purchaseLimit.get
62
63 val body =
64 if(accepted)
65 <div>
66 <h2>{purchaseLimit}</h2>
67 <br/>
68 {successPart1} <a href={settingsUrl}>{settingsUrlText}</a>.
69 {successPart2}
70 </div>
71 else
72 Text(S ? "verify_body_fail" format (subtitle, reason, user.purchaseLimit.get))
73
74 Future {
75 val html: Box[NodeSeq] =
76 if(accepted) HtmlEmail.simpleMessage(title, subtitle, body)
77 else HtmlEmail.simpleMessage(title, subtitle, body)
78
79 html map (sendMail(
80 From(MongoAuth.systemFancyEmail),
81 Subject("%s: %s".format(MongoAuth.siteName.vend, title)),
82 To(user.fancyEmail),
83 _
84 ))
85 }
86
87 NgAlert.success("Updated")
88 }
89
90 def init(model: JValue): JValue =
91 ("users" -> JArray(pending.map(user =>
92 ("id" -> user.userIdAsString) ~
93 ("email" -> user.email.get) ~
94 ("status" -> user.purchaseLimit.get.toString)
95 )))
96 }
97
98
99
100 class PurchaseLimitList extends AngularSnippet with Logger {
101 def roundTrips: List[RoundTripInfo] = List(
102 "init" -> init _)
103
104 val users = User.where(_.purchaseLimit gt D1k).fetch
105
106 def init(model: JValue): JValue =
107 ("users" -> JArray(users.map(user =>
108 ("fname" -> user.fname.get) ~
109 ("id" -> user.userIdAsString) ~
110 ("password" -> user.verifypass.get) ~
111 ("limit" -> user.userLimitAsString)
112 )))
113 }