Advertisement
Guest User

Untitled

a guest
May 14th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.09 KB | None | 0 0
  1. /**
  2. * I am a User Persisted entity
  3. * @output true
  4. * @table galleon_users
  5. * @persistent true
  6. * @cachename Users
  7. * @cacheuse nonstrict-read-write
  8. */
  9. component
  10. {
  11. // identifier
  12. property name="userID" column="Id" generator="identity";
  13.  
  14. // properties
  15. property name="username";
  16. property name="firstName";
  17. property name="lastName";
  18. property name="password";
  19. property name="passwordNew";
  20. property name="email" column="emailaddress";
  21. property name="signature" default="";
  22. property name="userActKey" default="";
  23. property name="userIP" default="";
  24. property name="userRegDate" column="datecreated";
  25. property name="userLastVisit" default="0";
  26. property name="userLastPage" default="";
  27. property name="userAvatar" column="avatar" default="";
  28. property name="userInterests";
  29. property name="userBirthday";
  30. property name="userZip";
  31.  
  32. // relationships
  33. property name="groups" fieldtype="many-to-many" CFC="Group" linktable="galleon_users_groups" FKColumn="useridfk" inversejoincolumn="groupidfk" lazy="true" cascade="all";
  34. property name="myRated" fieldtype="many-to-many" CFC="Beer" linktable="ratings" FKColumn="userID" inversejoincolumn="beerID" lazy="true" cascade="all";
  35. property name="myFavorites" fieldtype="many-to-many" CFC="Beer" linktable="myBeers" FKColumn="userID" inversejoincolumn="beerID" lazy="true" cascade="all" orderby="beerName";
  36. property name="myWishlist" fieldtype="many-to-many" CFC="Beer" linktable="myWishlist" FKColumn="userID" inversejoincolumn="beerID" lazy="true" cascade="all" orderby="beerName";
  37. property name="myFriends" fieldtype="many-to-many" CFC="User" linktable="friends" FKColumn="userID" inversejoincolumn="friendID" lazy="true" cascade="all" orderby="RAND()";
  38. property name="notifications" fieldtype="one-to-many" CFC="UpdateLog" fkcolumn="userID" lazy="true" where="actionRequired=1 AND actionTaken=0" orderby="updateTimestamp DESC";
  39. property name="galleon_subscriptions" fieldtype="one-to-many" CFC="Galleon_subscriptions" fkcolumn="useridfk" lazy="true";
  40.  
  41.  
  42. // override
  43. public function setusername(val) {
  44. VARIABLES.username = val;
  45. VARIABLES.usernameClean = val;
  46. }
  47.  
  48. public function setfirstName(val) {
  49. VARIABLES.firstName = val;
  50. }
  51.  
  52. public function setlastName(val) {
  53. VARIABLES.lastName = val;
  54. }
  55.  
  56. public function setpassword(val) {
  57. VARIABLES.password = lcase(hash(lcase(hash(val))));
  58. }
  59.  
  60. public function setemail(val) {
  61. VARIABLES.email = val;
  62. VARIABLES.emailHash = REQUEST.udfs.crc32(val & len(val));
  63. }
  64.  
  65. // read-only
  66. public function getlink() {
  67. return "/#THIS.getuserName()#/";
  68. }
  69.  
  70. public function getsmallThumb() {
  71. if (len(this.getuserAvatar())) {
  72. return "/images/users/#THIS.getuserID()#/avatar/" & this.getuserAvatar() & "_smallThumb.png";
  73. } else {
  74. return "/images/users/noavatar_thumb.png";
  75. }
  76. }
  77.  
  78. public function getmedThumb() {
  79. if (len(this.getuserAvatar())) {
  80. return "/images/users/#THIS.getuserID()#/avatar/" & this.getuserAvatar() & "_medThumb.png";
  81. } else {
  82. return "/images/users/noavatar_med.png";
  83. }
  84. }
  85.  
  86. public function getlargeImage() {
  87. if (len(this.getuserAvatar())) {
  88. return "/images/users/#THIS.getuserID()#/avatar/" & this.getuserAvatar() & "_large.png";
  89. } else {
  90. return "/images/users/noavatar_large.png";
  91. }
  92. }
  93.  
  94. public function getisRealUser() {
  95. // don't let anon or bot users do stuff!
  96. if (THIS.getuserID() GT 2) {
  97. return true;
  98. }
  99.  
  100. return false;
  101. }
  102.  
  103. public function isAdmin() {
  104. if (listFind("54,55",this.getuserID())) {
  105. return true;
  106. }
  107. return false;
  108. }
  109.  
  110. public function isModerator() {
  111. if (listFind("54,55",this.getuserID())) {
  112. return true;
  113. }
  114. return false;
  115. }
  116.  
  117. public function getUpdates() {
  118. // get friends
  119. friendsArr = THIS.getmyFriends();
  120. friendsList = "0";
  121. for (i=1;i LTE arrayLen(friendsArr);i++) {
  122. friendsList = listAppend(friendsList,friendsArr[i].getuserID());
  123. }
  124.  
  125. return ormExecuteQuery("FROM UpdateLog WHERE (userID IN (#friendsList#) AND updateType <> 'friend' AND actionRequired <> 1) OR (updateCauseID = #THIS.getuserID()# AND updateType = 'friend') ORDER BY updateTimestamp DESC",[],false,{cacheable=true,maxResults=15});
  126. }
  127.  
  128. // validation
  129. public function validateUsername(username) {
  130. // make sure the username is valid
  131. if (NOT len(ARGUMENTS.username) GT 5) {
  132. return "Username must be at least 6 characters.";
  133. }
  134. // make sure the username is not in use
  135. queryTest = EntityLoad("User",{username=ARGUMENTS.username},true);
  136. if (isDefined("queryTest")) {
  137. return "Username ""#ARGUMENTS.username#"" already in use.";
  138. }
  139.  
  140. // if it all passes
  141. THIS.setusername(ARGUMENTS.username);
  142. return "";
  143. }
  144.  
  145. public function validateEmail(email) {
  146. // make sure the email is valid
  147. if (NOT isValid("email", ARGUMENTS.email)) {
  148. return "Email address is not valid.";
  149. }
  150. // make sure the email is not in use
  151. queryTest = EntityLoad("User",{email=ARGUMENTS.email},true);
  152. if (isDefined("queryTest") AND queryTest.getuserID() NEQ THIS.getuserID()) {
  153. return "Email address already in use.";
  154. }
  155.  
  156. // if it all passes
  157. THIS.setemail(ARGUMENTS.email);
  158. return "";
  159. }
  160.  
  161. public function validatePassword(password) {
  162. if (len(ARGUMENTS.password) LT 6) {
  163. return "Passwords must be at least 6 characters.";
  164. }
  165.  
  166. // if it all passes
  167. THIS.setpassword(ARGUMENTS.password);
  168. return "";
  169. }
  170.  
  171. public function validateUserBirthday(dobm,dobd,doby) {
  172. if (NOT isDate("#ARGUMENTS.dobm#/#ARGUMENTS.dobd#/#ARGUMENTS.doby#") OR dateDiff("yyyy","#FORM.dobm#/#FORM.dobd#/#FORM.doby#",now()) LT 21) {
  173. return "You must be at least 21 to use this application.";
  174. }
  175.  
  176. // if it all passes
  177. THIS.setuserBirthday("#ARGUMENTS.dobd#-#ARGUMENTS.dobm#-#ARGUMENTS.doby#");
  178. return "";
  179. }
  180.  
  181. // rating methods
  182. public function getRecommendations(howMany=20) {
  183. recommender = createObject("component","pintley.model.recommenderHelper");
  184.  
  185. recommendations = deserializeJSON(recommender.recommend(THIS.getuserID(),ARGUMENTS.howMany));
  186.  
  187. beers = arrayNew(1);
  188.  
  189. for (i=1;i LTE arrayLen(recommendations.recommendedItems.item);i=i+1) {
  190. thisBeer = entityLoad("Beer",recommendations.recommendedItems.item[i].id,true);
  191. if (isDefined("thisBeer")) {
  192. arrayAppend(beers,thisBeer);
  193. }
  194. }
  195.  
  196. return beers;
  197. }
  198.  
  199. // methods
  200. public function hashPassword(password) {
  201. return hash(hash(ARGUMENTS.password,"MD5"),"MD5");
  202. }
  203.  
  204.  
  205.  
  206.  
  207. // forum subscription methods
  208. public function galleonCheckSubscription(mode, id) {
  209.  
  210. if(ARGUMENTS.mode EQ "conference") { existingSub = entityLoad('galleon_subscriptions', {useridfk=this.getuserID(), conferenceidfk=ARGUMENTS.id}, "true"); }
  211. else if(ARGUMENTS.mode EQ "forum") { existingSub = entityLoad('galleon_subscriptions', {useridfk=this.getuserID(), forumidfk=ARGUMENTS.id}, "true"); }
  212. else if(ARGUMENTS.mode EQ "thread") { existingSub = entityLoad('galleon_subscriptions', {useridfk=this.getuserID(), threadidfk=ARGUMENTS.id}, "true"); }
  213.  
  214. if(isDefined("existingSub")) {return existingSub.getSubscriptionID();}
  215. else {return;}
  216. }
  217.  
  218.  
  219. public function galleonSubscribe(mode, id) {
  220.  
  221. existingSub = galleonCheckSubscription(mode,id);
  222.  
  223. if(NOT isDefined("existingSub")) {
  224. thisSubscription = new Galleon_subscriptions();
  225. thisSubscription.setUseridfk(this.getuserID());
  226.  
  227. if(ARGUMENTS.mode EQ "conference") {thisSubscription.setConferenceidfk(ARGUMENTS.id);}
  228. else if(ARGUMENTS.mode EQ "forum") {thisSubscription.setForumidfk(ARGUMENTS.id);}
  229. else if(ARGUMENTS.mode EQ "thread") {thisSubscription.setThreadidfk(ARGUMENTS.id);}
  230.  
  231. entitySave(thisSubscription);
  232. }
  233. }
  234.  
  235.  
  236. public function galleonUnsubscribe(subscriptionID123) {
  237.  
  238. subscription = entityLoad('Galleon_subscriptions', ARGUMENTS.subscriptionID123, true);
  239. entityDelete(subscription);
  240.  
  241. }
  242.  
  243.  
  244.  
  245.  
  246. // events
  247. public function postInsert() {
  248. createObject("component","emailHelper").sendActivationEmail(THIS);
  249. }
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement