]> git.ipfire.org Git - ipfire.org.git/blob - www/webapp/backend/wishlist.py
Huge website update.
[ipfire.org.git] / www / webapp / backend / wishlist.py
1 #!/usr/bin/python
2
3 from __future__ import division
4
5 import datetime
6 import textile
7
8 from databases import Databases
9 from misc import Singleton
10
11 class Wishlist(object):
12 __metaclass__ = Singleton
13
14 @property
15 def db(self):
16 return Databases().webapp
17
18 def get(self, slug):
19 wish = self.db.get("SELECT id FROM wishlist WHERE slug = %s", slug)
20
21 if wish:
22 return Wish(self, wish.id)
23
24 def get_all_by_query(self, query):
25 wishes = []
26
27 for row in self.db.query(query):
28 wish = Wish(self, row.id)
29 wishes.append(wish)
30
31 return wishes
32
33 def get_all_running(self):
34 return self.get_all_by_query("SELECT id FROM wishlist \
35 WHERE DATE(NOW()) >= date_start AND DATE(NOW()) <= date_end AND published = 'Y'\
36 ORDER BY prio ASC, date_end ASC")
37
38 def get_all_finished(self):
39 return self.get_all_by_query("SELECT id FROM wishlist \
40 WHERE DATE(NOW()) > date_end AND published = 'Y' ORDER BY date_end ASC")
41
42
43 class Wish(object):
44 def __init__(self, wishlist, id):
45 self.wishlist = wishlist
46 self.id = id
47
48 self.__data = None
49
50 def __cmp__(self, other):
51 return cmp(self.date_end, other.date_end)
52
53 @property
54 def db(self):
55 return self.wishlist.db
56
57 @property
58 def data(self):
59 if self.__data is None:
60 self.__data = self.db.get("SELECT * FROM wishlist WHERE id = %s", self.id)
61 assert self.__data
62
63 return self.__data
64
65 @property
66 def title(self):
67 return self.data.title
68
69 @property
70 def slug(self):
71 return self.data.slug
72
73 @property
74 def tag(self):
75 return self.data.tag
76
77 @property
78 def description(self):
79 return textile.textile(self.data.description)
80
81 @property
82 def goal(self):
83 return self.data.goal
84
85 @property
86 def donated(self):
87 return self.data.donated
88
89 @property
90 def percentage(self):
91 return (self.donated / self.goal) * 100
92
93 @property
94 def running(self):
95 if self.remaining_days < 0:
96 return False
97
98 return True
99
100 @property
101 def date_start(self):
102 return self.data.date_start
103
104 @property
105 def date_end(self):
106 return self.data.date_end
107
108 @property
109 def running_days(self):
110 today = datetime.datetime.today()
111 today = today.date()
112
113 running = today - self.date_start
114 return running.days
115
116 @property
117 def remaining_days(self):
118 today = datetime.datetime.today()
119 today = today.date()
120
121 remaining = self.date_end - today
122 return remaining.days
123
124 def get_tweet(self, locale):
125 _ = locale.translate
126
127 t = [
128 _("Checkout this crowdfunding wish from #ipfire:"),
129 "http://wishlist.ipfire.org/wish/%s" % self.slug,
130 ]
131
132 return " ".join(t)