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.

474 lines
11 KiB

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