DotaNoobs main site.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

469 lines
11 KiB

  1. import os
  2. from time import strftime, gmtime
  3. from peewee import *
  4. from app import app, cache
  5. db = MySQLDatabase(app.config['FORUM_NAME'], **{'passwd': app.config['FORUM_PASSWORD'],
  6. 'host': app.config['FORUM_HOST'], 'user': app.config['FORUM_USERNAME']})
  7. @cache.memoize(60*5)
  8. def latest_news(num=2):
  9. latest_news = []
  10. try:
  11. db.connect()
  12. news_forum = Forums.get(fn.Lower(Forums.title) % '%news%')
  13. for thread in Threads.select().where(
  14. Threads.forum == news_forum.id).order_by(Threads.date).limit(num):
  15. # Last revision of the first post
  16. post = Posts.select().where(Posts.thread == thread.id).get()
  17. text = PostsText.select().where(PostsText.pid == post.id).order_by(PostsText.revision.desc()).limit(1).get()
  18. timestamp = thread.date
  19. date = strftime('%B %d, %Y %H:%M:%S UTC', gmtime(timestamp))
  20. if not date:
  21. post = Posts.select().where(Posts.thread == thread.id).get()
  22. date = post and post.date
  23. url = 'http://board.dotanoobs.com/?page=thread&id=%d' % thread.id
  24. latest_news.append({'title':thread.title, 'text':text.text, 'date':date, 'timestamp':timestamp, 'url':url})
  25. except Exception as e:
  26. latest_news.append({'title':'Error with forum db', 'text':e, 'url':''})
  27. finally:
  28. db.close()
  29. return latest_news
  30. class UnknownFieldType(object):
  31. pass
  32. class BaseModel(Model):
  33. class Meta:
  34. database = db
  35. class Badges(BaseModel):
  36. color = IntegerField()
  37. name = CharField()
  38. owner = IntegerField()
  39. class Meta:
  40. db_table = 'badges'
  41. class Blockedlayouts(BaseModel):
  42. blockee = IntegerField()
  43. user = IntegerField()
  44. class Meta:
  45. db_table = 'blockedlayouts'
  46. class Categories(BaseModel):
  47. corder = IntegerField()
  48. name = CharField()
  49. class Meta:
  50. db_table = 'categories'
  51. class Enabledplugins(BaseModel):
  52. plugin = CharField()
  53. class Meta:
  54. db_table = 'enabledplugins'
  55. class Forummods(BaseModel):
  56. forum = IntegerField()
  57. user = IntegerField()
  58. class Meta:
  59. db_table = 'forummods'
  60. class Forums(BaseModel):
  61. catid = IntegerField()
  62. description = TextField(null=True)
  63. forder = IntegerField()
  64. hidden = IntegerField()
  65. lastpostdate = IntegerField()
  66. lastpostid = IntegerField()
  67. lastpostuser = IntegerField()
  68. minpower = IntegerField()
  69. minpowerreply = IntegerField()
  70. minpowerthread = IntegerField()
  71. numposts = IntegerField()
  72. numthreads = IntegerField()
  73. title = CharField()
  74. class Meta:
  75. db_table = 'forums'
  76. class Guests(BaseModel):
  77. bot = IntegerField()
  78. date = IntegerField()
  79. ip = CharField()
  80. lastforum = IntegerField()
  81. lasturl = CharField()
  82. useragent = CharField()
  83. class Meta:
  84. db_table = 'guests'
  85. class Ignoredforums(BaseModel):
  86. fid = IntegerField()
  87. uid = IntegerField()
  88. class Meta:
  89. db_table = 'ignoredforums'
  90. class Ip2C(BaseModel):
  91. cc = CharField(null=True)
  92. ip_from = BigIntegerField()
  93. ip_to = BigIntegerField()
  94. class Meta:
  95. db_table = 'ip2c'
  96. class Ipbans(BaseModel):
  97. date = IntegerField()
  98. ip = CharField()
  99. reason = CharField()
  100. class Meta:
  101. db_table = 'ipbans'
  102. class Log(BaseModel):
  103. date = IntegerField()
  104. forum = IntegerField()
  105. forum2 = IntegerField()
  106. ip = CharField()
  107. pm = IntegerField()
  108. post = IntegerField()
  109. text = CharField()
  110. thread = IntegerField()
  111. type = CharField()
  112. user = IntegerField()
  113. user2 = IntegerField()
  114. class Meta:
  115. db_table = 'log'
  116. class Misc(BaseModel):
  117. hotcount = IntegerField()
  118. maxpostsday = IntegerField()
  119. maxpostsdaydate = IntegerField()
  120. maxpostshour = IntegerField()
  121. maxpostshourdate = IntegerField()
  122. maxusers = IntegerField()
  123. maxusersdate = IntegerField()
  124. maxuserstext = TextField(null=True)
  125. milestone = TextField(null=True)
  126. version = IntegerField()
  127. views = IntegerField()
  128. class Meta:
  129. db_table = 'misc'
  130. class Moodavatars(BaseModel):
  131. mid = IntegerField()
  132. name = CharField()
  133. uid = IntegerField()
  134. class Meta:
  135. db_table = 'moodavatars'
  136. class Notifications(BaseModel):
  137. description = TextField(null=True)
  138. link = IntegerField()
  139. linklocation = CharField()
  140. time = IntegerField()
  141. title = CharField()
  142. type = CharField()
  143. uid = IntegerField()
  144. class Meta:
  145. db_table = 'notifications'
  146. class Pmsgs(BaseModel):
  147. date = IntegerField()
  148. deleted = IntegerField()
  149. drafting = IntegerField()
  150. ip = CharField()
  151. msgread = IntegerField()
  152. userfrom = IntegerField()
  153. userto = IntegerField()
  154. class Meta:
  155. db_table = 'pmsgs'
  156. class PmsgsText(BaseModel):
  157. pid = IntegerField()
  158. text = TextField(null=True)
  159. title = CharField()
  160. class Meta:
  161. db_table = 'pmsgs_text'
  162. class Poll(BaseModel):
  163. briefing = TextField(null=True)
  164. closed = IntegerField()
  165. doublevote = IntegerField()
  166. question = CharField()
  167. class Meta:
  168. db_table = 'poll'
  169. class PollChoices(BaseModel):
  170. choice = CharField()
  171. color = CharField()
  172. poll = IntegerField()
  173. class Meta:
  174. db_table = 'poll_choices'
  175. class Pollvotes(BaseModel):
  176. choiceid = IntegerField()
  177. poll = IntegerField()
  178. user = IntegerField()
  179. class Meta:
  180. db_table = 'pollvotes'
  181. class Postplusones(BaseModel):
  182. post = IntegerField()
  183. user = IntegerField()
  184. class Meta:
  185. db_table = 'postplusones'
  186. class Posts(BaseModel):
  187. currentrevision = IntegerField()
  188. date = IntegerField()
  189. deleted = IntegerField()
  190. deletedby = IntegerField()
  191. ip = CharField()
  192. mood = IntegerField()
  193. num = IntegerField()
  194. options = IntegerField()
  195. postplusones = IntegerField()
  196. reason = CharField()
  197. thread = IntegerField()
  198. user = IntegerField()
  199. class Meta:
  200. db_table = 'posts'
  201. class PostsText(BaseModel):
  202. date = IntegerField()
  203. pid = IntegerField(primary_key=True)
  204. revision = IntegerField()
  205. text = TextField(null=True)
  206. user = IntegerField()
  207. class Meta:
  208. db_table = 'posts_text'
  209. class Proxybans(BaseModel):
  210. ip = CharField()
  211. class Meta:
  212. db_table = 'proxybans'
  213. class Queryerrors(BaseModel):
  214. cookie = TextField(null=True)
  215. error = TextField(null=True)
  216. get = TextField(null=True)
  217. ip = CharField()
  218. post = TextField(null=True)
  219. query = TextField(null=True)
  220. time = IntegerField()
  221. user = IntegerField()
  222. class Meta:
  223. db_table = 'queryerrors'
  224. class Reports(BaseModel):
  225. hidden = IntegerField()
  226. ip = CharField()
  227. request = TextField(null=True)
  228. severity = IntegerField()
  229. text = CharField()
  230. time = IntegerField()
  231. user = IntegerField()
  232. class Meta:
  233. db_table = 'reports'
  234. class Sessions(BaseModel):
  235. autoexpire = IntegerField()
  236. expiration = IntegerField()
  237. id = CharField()
  238. iplock = IntegerField()
  239. iplockaddr = CharField()
  240. lastip = CharField()
  241. lasttime = IntegerField()
  242. lasturl = CharField()
  243. user = IntegerField()
  244. class Meta:
  245. db_table = 'sessions'
  246. class Settings(BaseModel):
  247. name = CharField()
  248. plugin = CharField()
  249. value = TextField(null=True)
  250. class Meta:
  251. db_table = 'settings'
  252. class Smilies(BaseModel):
  253. code = CharField()
  254. image = CharField()
  255. class Meta:
  256. db_table = 'smilies'
  257. class Threads(BaseModel):
  258. closed = IntegerField()
  259. date = IntegerField()
  260. firstpostid = IntegerField()
  261. forum = IntegerField()
  262. icon = CharField()
  263. lastpostdate = IntegerField()
  264. lastposter = IntegerField()
  265. lastpostid = IntegerField()
  266. poll = IntegerField()
  267. replies = IntegerField()
  268. sticky = IntegerField()
  269. title = CharField()
  270. user = IntegerField()
  271. views = IntegerField()
  272. class Meta:
  273. db_table = 'threads'
  274. class Threadsread(BaseModel):
  275. date = IntegerField()
  276. thread = IntegerField()
  277. class Meta:
  278. db_table = 'threadsread'
  279. class Uploader(BaseModel):
  280. category = IntegerField()
  281. date = IntegerField()
  282. description = CharField()
  283. downloads = IntegerField()
  284. filename = CharField()
  285. private = IntegerField()
  286. user = IntegerField()
  287. class Meta:
  288. db_table = 'uploader'
  289. class UploaderCategories(BaseModel):
  290. description = TextField(null=True)
  291. name = CharField()
  292. ord = IntegerField()
  293. class Meta:
  294. db_table = 'uploader_categories'
  295. class Usercomments(BaseModel):
  296. cid = IntegerField()
  297. date = IntegerField()
  298. text = TextField(null=True)
  299. uid = IntegerField()
  300. class Meta:
  301. db_table = 'usercomments'
  302. class Usergroups(BaseModel):
  303. inherits = IntegerField()
  304. permissions = TextField(null=True)
  305. title = CharField()
  306. class Meta:
  307. db_table = 'usergroups'
  308. class Userpermissions(BaseModel):
  309. permissions = TextField(null=True)
  310. uid = IntegerField()
  311. class Meta:
  312. db_table = 'userpermissions'
  313. class Users(BaseModel):
  314. bio = TextField(null=True)
  315. birthday = IntegerField()
  316. blocklayouts = IntegerField()
  317. color = CharField()
  318. dateformat = CharField()
  319. displayname = CharField()
  320. email = CharField()
  321. fontsize = IntegerField()
  322. forbiddens = CharField()
  323. globalblock = IntegerField()
  324. hascolor = IntegerField()
  325. homepagename = CharField()
  326. homepageurl = CharField()
  327. karma = IntegerField()
  328. lastactivity = IntegerField()
  329. lastforum = IntegerField()
  330. lastip = CharField()
  331. lastknownbrowser = TextField(null=True)
  332. lastposttime = IntegerField()
  333. lasturl = CharField()
  334. location = CharField()
  335. loggedin = IntegerField()
  336. lostkey = CharField()
  337. lostkeytimer = IntegerField()
  338. minipic = CharField()
  339. name = CharField()
  340. newcomments = IntegerField()
  341. password = CharField()
  342. picture = CharField()
  343. pluginsettings = TextField(null=True)
  344. postheader = TextField(null=True)
  345. postplusones = IntegerField()
  346. postplusonesgiven = IntegerField()
  347. posts = IntegerField()
  348. postsperpage = IntegerField()
  349. powerlevel = IntegerField()
  350. pss = CharField()
  351. rankset = CharField()
  352. realname = CharField()
  353. regdate = IntegerField()
  354. sex = IntegerField()
  355. showemail = IntegerField()
  356. signature = TextField(null=True)
  357. signsep = IntegerField()
  358. tempbanpl = IntegerField()
  359. tempbantime = BigIntegerField()
  360. theme = CharField()
  361. threadsperpage = IntegerField()
  362. timeformat = CharField()
  363. timezone = FloatField()
  364. title = CharField()
  365. usebanners = IntegerField()
  366. class Meta:
  367. db_table = 'users'
  368. class Uservotes(BaseModel):
  369. uid = IntegerField()
  370. up = IntegerField()
  371. voter = IntegerField()
  372. class Meta:
  373. db_table = 'uservotes'
  374. class WikiPages(BaseModel):
  375. flags = IntegerField()
  376. id = CharField()
  377. revision = IntegerField()
  378. class Meta:
  379. db_table = 'wiki_pages'
  380. class WikiPagesText(BaseModel):
  381. date = IntegerField()
  382. id = CharField()
  383. revision = IntegerField()
  384. text = TextField(null=True)
  385. user = IntegerField()
  386. class Meta:
  387. db_table = 'wiki_pages_text'