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 }