Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.29 KB | None | 0 0
  1. PRegiments.SQL.Wrappers = {}
  2.  
  3. function PRegiments.SQL.Wrappers.Escape( str )
  4. return "\"" .. PRegiments.SQL.DatabaseObject:Escape( tostring( str ) ) .. "\""
  5. end
  6.  
  7.  
  8. PRegiments.SQL.Wrappers.RegimentExists = function(name, callback)
  9. PRegiments.SQL.DatabaseObject:Query(string.format([[
  10. SELECT * FROM gmod_regiments_reglist WHERE reg_name=%s
  11. ]], PRegiments.SQL.Wrappers.Escape(name)), function(data)
  12. local exists = false
  13. if #data[1]["data"] > 0 then exists = true end
  14. callback(exists)
  15. end)
  16. end
  17.  
  18. PRegiments.SQL.Wrappers.ClassExists = function(owning_reg, name, callback)
  19. PRegiments.SQL.DatabaseObject:Query(string.format([[
  20. SELECT * FROM gmod_regiments_classes WHERE class_owning_reg=%s AND class_name=%s
  21. ]], PRegiments.SQL.Wrappers.Escape(owning_reg), PRegiments.SQL.Wrappers.Escape(name)), function(data)
  22. local rows = data[1]["data"] or false
  23. local exists = false
  24. if rows != false then
  25. for k, v in pairs(rows) do
  26. if v["class_name"] == name then exists = true end
  27. end
  28. end
  29. callback(exists)
  30. end)
  31. end
  32.  
  33. PRegiments.SQL.Wrappers.CreateRegiment = function(name, owner, userlist, makePrimaryClass, primary, callback)
  34. if !isnumber(owner) then owner = owner:SteamID64() end
  35. userlist = util.TableToJSON(userlist)
  36. primary = primary or 0
  37. PRegiments.SQL.Wrappers.RegimentExists(name, function(exists)
  38. if !exists then
  39. PRegiments.SQL.DatabaseObject:Query(string.format([[
  40. INSERT INTO gmod_regiments_reglist(reg_name, reg_owner, reg_userlist, reg_primary) VALUES(%s, %s, %s, %s)
  41. ]], PRegiments.SQL.Wrappers.Escape(name), PRegiments.SQL.Wrappers.Escape(owner), PRegiments.SQL.Wrappers.Escape(userlist), PRegiments.SQL.Wrappers.Escape(primary)), function(data)
  42. if makePrimaryClass then
  43. PRegiments.SQL.Wrappers.CreateClass(data[1]["lastid"], name .. " Primary Class (Edit Me)", "AA (Edit Me)", PRegiments.SQL.ClassBase, {}, 1, function()
  44. for k, v in pairs(player.GetAll()) do
  45. PRegiments.CachedTables.UpdateCache(v)
  46. end
  47. end)
  48. else
  49. for k, v in pairs(player.GetAll()) do
  50. PRegiments.CachedTables.UpdateCache(v)
  51. end
  52. end
  53. end)
  54. callback(true)
  55. else
  56. callback(false)
  57. end
  58. end)
  59. end
  60.  
  61. PRegiments.SQL.Wrappers.DeleteRegiment = function(name, callback)
  62. PRegiments.SQL.Wrappers.RegimentExists(name, function(exists)
  63. if exists then
  64. PRegiments.SQL.DatabaseObject:Query(string.format([[
  65. SELECT * FROM gmod_regiments_reglist WHERE reg_name=%s
  66. ]], PRegiments.SQL.Wrappers.Escape(name)), function(data)
  67. local id = data[1]["data"][1]["reg_id"]
  68. local users = util.JSONToTable(data[1]["data"][1]["reg_userlist"])
  69. if #users > 0 then
  70. for k, ply in pairs(users) do
  71. PRegiments.SQL.Wrappers.GetPlayersRegimentsAndClasses(ply, function(regimentTable)
  72. if table.Count(regimentTable.regiments) != 0 then
  73. PRegiments.SQL.Wrappers.SetPlayerRegiment_Primary(ply, function(primary_reg)
  74. PRegiments.SQL.Wrappers.SetPlayerClass_Primary(ply, primary_reg["reg_id"], function() end)
  75. end)
  76. end
  77. end)
  78. end
  79. end
  80. PRegiments.SQL.DatabaseObject:Query(string.format([[
  81. DELETE FROM gmod_regiments_classes WHERE class_owning_reg=%s
  82. ]], PRegiments.SQL.Wrappers.Escape(id)), function(data)
  83. PRegiments.SQL.DatabaseObject:Query(string.format([[
  84. DELETE FROM gmod_regiments_reglist WHERE reg_name=%s
  85. ]], PRegiments.SQL.Wrappers.Escape(name)), function(data)
  86. for k, v in pairs(player.GetAll()) do
  87. PRegiments.CachedTables.UpdateCache(v)
  88. end
  89. callback(true)
  90. end)
  91. end)
  92. end)
  93. else
  94. callback(false)
  95. end
  96. end)
  97. end
  98.  
  99. PRegiments.SQL.Wrappers.CreateClass = function(owning_reg, name, abbr, perms, userlist, primary, callback)
  100. userlist = util.TableToJSON(userlist)
  101. perms = util.TableToJSON(perms)
  102. PRegiments.SQL.Wrappers.ClassExists(owning_reg, name, function(exists)
  103. if !exists then
  104. PRegiments.SQL.DatabaseObject:Query(string.format([[
  105. INSERT INTO gmod_regiments_classes(class_owning_reg, class_name, class_abbr, class_perms, class_userlist, class_primary) VALUES(%s, %s, %s, %s, %s, %s)
  106. ]], PRegiments.SQL.Wrappers.Escape(owning_reg), PRegiments.SQL.Wrappers.Escape(name), PRegiments.SQL.Wrappers.Escape(abbr), PRegiments.SQL.Wrappers.Escape(perms), PRegiments.SQL.Wrappers.Escape(userlist), PRegiments.SQL.Wrappers.Escape(primary)), function()
  107. for k, v in pairs(player.GetAll()) do
  108. PRegiments.CachedTables.UpdateCache(v)
  109. end
  110. callback(true)
  111. end)
  112. else
  113. callback(false)
  114. end
  115. end)
  116. end
  117.  
  118. PRegiments.SQL.Wrappers.GetPlayersRegiments = function(ply, callback)
  119. if !isstring(ply) then ply = ply:SteamID64() end
  120. PRegiments.SQL.DatabaseObject:Query(string.format([[
  121. SELECT * FROM gmod_regiments_reglist
  122. ]]), function(data)
  123. local rows = data[1]["data"] or false
  124. local playersRegiments = {}
  125. if rows != false then
  126. for k, v in pairs(rows) do
  127. local userlist = util.JSONToTable(v["reg_userlist"])
  128. if #userlist > 0 then
  129. if table.HasValue(userlist, ply) then
  130. table.insert(playersRegiments, v)
  131. end
  132. end
  133. end
  134. end
  135. callback(playersRegiments)
  136. end)
  137. end
  138.  
  139. /* Setters */
  140.  
  141. PRegiments.SQL.Wrappers.RemovePlayerFromAllRegiments = function(ply, callback)
  142. if !isstring(ply) then ply = ply:SteamID64() end
  143. PRegiments.SQL.DatabaseObject:Query(string.format([[
  144. SELECT * FROM gmod_regiments_reglist
  145. ]]), function(data)
  146. local rows = data[1]["data"] or false
  147. if rows != false then
  148. if #rows != 0 then
  149. for k, v in pairs(rows) do
  150. local userlist = util.JSONToTable(v["reg_userlist"])
  151. if table.HasValue(userlist, ply) then
  152. table.RemoveByValue(userlist, ply)
  153. PRegiments.SQL.DatabaseObject:Query(string.format([[
  154. UPDATE gmod_regiments_reglist SET reg_userlist=%s WHERE reg_id=%s
  155. ]],PRegiments.SQL.Wrappers.Escape(util.TableToJSON(userlist)), PRegiments.SQL.Wrappers.Escape(v["reg_id"])))
  156. end
  157. end
  158. callback()
  159. end
  160. end
  161. end)
  162. end
  163.  
  164. PRegiments.SQL.Wrappers.RemovePlayerFromAllClasses = function(ply, callback)
  165. if !isstring(ply) then ply = ply:SteamID64() end
  166. PRegiments.SQL.DatabaseObject:Query(string.format([[
  167. SELECT * FROM gmod_regiments_classes
  168. ]]), function(data)
  169. local rows = data[1]["data"] or false
  170. if rows != false then
  171. if #rows != 0 then
  172. for k, v in pairs(rows) do
  173. local userlist = util.JSONToTable(v["class_userlist"])
  174. if table.HasValue(userlist, ply) then
  175. table.RemoveByValue(userlist, ply)
  176. PRegiments.SQL.DatabaseObject:Query(string.format([[
  177. UPDATE gmod_regiments_classes SET class_userlist=%s WHERE class_id=%s
  178. ]],PRegiments.SQL.Wrappers.Escape(util.TableToJSON(userlist)), PRegiments.SQL.Wrappers.Escape(v["class_id"])))
  179. end
  180. end
  181. callback()
  182. end
  183. end
  184. end)
  185. end
  186.  
  187. PRegiments.SQL.Wrappers.SetPlayerRegiment = function(ply, reg_id, callback)
  188. if !isstring(ply) then ply = ply:SteamID64() end
  189. PRegiments.SQL.Wrappers.RemovePlayerFromAllRegiments(ply, function()
  190. PRegiments.SQL.DatabaseObject:Query(string.format([[
  191. SELECT * FROM gmod_regiments_reglist WHERE reg_id=%s
  192. ]], PRegiments.SQL.Wrappers.Escape(reg_id)), function(data)
  193. local rows = data[1]["data"] or false
  194. if rows != false then
  195. if #rows != 0 then
  196. local userlist = util.JSONToTable(rows[1]["reg_userlist"])
  197. table.insert(userlist, ply)
  198. PRegiments.SQL.DatabaseObject:Query(string.format([[
  199. UPDATE gmod_regiments_reglist SET reg_userlist=%s WHERE reg_id=%s
  200. ]],PRegiments.SQL.Wrappers.Escape(util.TableToJSON(userlist)), PRegiments.SQL.Wrappers.Escape(reg_id)))
  201. callback(rows[1])
  202. end
  203. end
  204. end)
  205. end)
  206. end
  207.  
  208. PRegiments.SQL.Wrappers.SetPlayerRegiment_Primary = function(ply, callback)
  209. if !isstring(ply) then ply = ply:SteamID64() end
  210. PRegiments.SQL.Wrappers.RemovePlayerFromAllRegiments(ply, function()
  211. PRegiments.SQL.DatabaseObject:Query(string.format([[
  212. SELECT * FROM gmod_regiments_reglist WHERE reg_primary=1
  213. ]]), function(data)
  214. local rows = data[1]["data"] or false
  215. if rows != false then
  216. if #rows != 0 then
  217. local userlist = util.JSONToTable(rows[1]["reg_userlist"])
  218. table.insert(userlist, ply)
  219. PRegiments.SQL.DatabaseObject:Query(string.format([[
  220. UPDATE gmod_regiments_reglist SET reg_userlist=%s WHERE reg_primary=1
  221. ]], PRegiments.SQL.Wrappers.Escape(util.TableToJSON(userlist))))
  222. callback(rows[1])
  223. end
  224. end
  225. end)
  226. end)
  227. end
  228.  
  229. PRegiments.SQL.Wrappers.SetPlayerClass_Primary = function(ply, relativeRegiment, callback)
  230. if !isstring(ply) then ply = ply:SteamID64() end
  231. PRegiments.SQL.Wrappers.RemovePlayerFromAllClasses(ply, function()
  232. PRegiments.SQL.DatabaseObject:Query(string.format([[
  233. SELECT * FROM gmod_regiments_classes WHERE class_primary=1 AND class_owning_reg=%s
  234. ]], PRegiments.SQL.Wrappers.Escape(relativeRegiment)), function(data)
  235. local rows = data[1]["data"] or false
  236. if rows != false then
  237. if #rows != 0 then
  238. local userlist = util.JSONToTable(rows[1]["class_userlist"])
  239. if !table.HasValue(userlist, ply) then
  240. table.insert(userlist, ply)
  241. PRegiments.SQL.DatabaseObject:Query(string.format([[
  242. UPDATE gmod_regiments_classes SET class_userlist=%s WHERE class_primary=1 and class_owning_reg=%s
  243. ]], PRegiments.SQL.Wrappers.Escape(util.TableToJSON(userlist)), PRegiments.SQL.Wrappers.Escape(relativeRegiment)))
  244. for k, v in pairs(player.GetAll()) do
  245. PRegiments.CachedTables.UpdateCache(v)
  246. end
  247. callback()
  248. end
  249. end
  250. end
  251. end)
  252. end)
  253. end
  254.  
  255. hook.Add("PlayerSpawn", "pregiments_check_belongs", function(ply)
  256. if ply:IsBot() then return end
  257. PRegiments.SQL.Wrappers.GetPlayersRegimentsAndClasses(ply, function(regimentTable)
  258. if table.Count(regimentTable.regiments) == 0 then
  259. PRegiments.SQL.Wrappers.SetPlayerRegiment_Primary(ply, function(primary_reg)
  260. PRegiments.SQL.Wrappers.SetPlayerClass_Primary(ply, primary_reg["reg_id"], function() end)
  261. end)
  262. end
  263. end)
  264. end)
  265.  
  266. PRegiments.SQL.Wrappers.GetPlayersClasses = function(ply, callback)
  267. if !isstring(ply) then ply = ply:SteamID64() end
  268. PRegiments.SQL.DatabaseObject:Query(string.format([[
  269. SELECT * FROM gmod_regiments_classes
  270. ]]), function(data)
  271. local rows = data[1]["data"] or false
  272. local playersClasses = {}
  273. if rows != false then
  274. for k, v in pairs(rows) do
  275. local userlist = util.JSONToTable(v["class_userlist"])
  276. if #userlist > 0 then
  277. if table.HasValue(userlist, ply) then
  278. table.insert(playersClasses, v)
  279. end
  280. end
  281. end
  282. end
  283. callback(playersClasses)
  284. end)
  285. end
  286.  
  287. PRegiments.SQL.Wrappers.GetPlayersRegimentsAndClasses = function(ply, callback)
  288. if !isstring(ply) then ply = ply:SteamID64() end
  289. local plyTable = {}
  290. PRegiments.SQL.Wrappers.GetPlayersRegiments(ply, function(regiments)
  291. plyTable.regiments = regiments
  292. local regFind = 1
  293. if regiments[1] != nil then regFind = regiments[1]["reg_id"] end
  294. PRegiments.SQL.Wrappers.GetAllClassesOfID(regFind, function(classes)
  295. plyTable.classes = classes
  296. callback(plyTable)
  297. end)
  298. end)
  299. end
  300.  
  301. // Admin shit
  302.  
  303. PRegiments.SQL.Wrappers.GetAllRegiments = function(callback)
  304. PRegiments.SQL.DatabaseObject:Query(string.format([[
  305. SELECT * FROM gmod_regiments_reglist
  306. ]]), function(data)
  307. local rows = data[1]["data"] or false
  308. local playersRegiments = {}
  309. if rows != false then
  310. for k, v in pairs(rows) do
  311. table.insert(playersRegiments, v)
  312. end
  313. end
  314. callback(playersRegiments)
  315. end)
  316. end
  317.  
  318. PRegiments.SQL.Wrappers.GetAllClasses = function(callback)
  319. PRegiments.SQL.DatabaseObject:Query(string.format([[
  320. SELECT * FROM gmod_regiments_classes
  321. ]]), function(data)
  322. local rows = data[1]["data"] or false
  323. local playersClasses = {}
  324. if rows != false then
  325. for k, v in pairs(rows) do
  326. table.insert(playersClasses, v)
  327. end
  328. end
  329. callback(playersClasses)
  330. end)
  331. end
  332.  
  333. PRegiments.SQL.Wrappers.GetAllClassesOfID = function(id, callback)
  334. PRegiments.SQL.DatabaseObject:Query(string.format([[
  335. SELECT * FROM gmod_regiments_classes WHERE class_owning_reg=%s
  336. ]], PRegiments.SQL.Wrappers.Escape(id)), function(data)
  337. local rows = data[1]["data"] or false
  338. local playersClasses = {}
  339. if rows != false then
  340. for k, v in pairs(rows) do
  341. table.insert(playersClasses, v)
  342. end
  343. end
  344. callback(playersClasses)
  345. end)
  346. end
  347.  
  348. PRegiments.SQL.Wrappers.GetAllRegimentsAndClasses = function(callback)
  349. local plyTable = {}
  350. PRegiments.SQL.Wrappers.GetAllRegiments(function(regiments)
  351. plyTable.regiments = regiments
  352. PRegiments.SQL.Wrappers.GetAllClasses(function(classes)
  353. plyTable.classes = classes
  354. callback(plyTable)
  355. end)
  356. end)
  357. end
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366. hook.Run("PRegimentsLoadCache")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement