]> git.ipfire.org Git - ipfire.org.git/blame - webapp/backend/wishlist.py
Move everything to the root of the repository.
[ipfire.org.git] / webapp / backend / wishlist.py
CommitLineData
7771acea
MT
1#!/usr/bin/python
2
3from __future__ import division
4
5import datetime
6import textile
7
8from databases import Databases
9from misc import Singleton
10
11class Wishlist(object):
12 __metaclass__ = Singleton
13
14 @property
15 def db(self):
16 return Databases().webapp
17
18 def get(self, slug):
918284e8 19 wish = self.db.get("SELECT * FROM wishlist WHERE slug = %s", slug)
7771acea
MT
20
21 if wish:
22 return Wish(self, wish.id)
23
1bf8d482 24 def get_all_by_query(self, query, *args):
7771acea
MT
25 wishes = []
26
1bf8d482 27 for row in self.db.query(query, *args):
918284e8 28 wish = Wish(self, row.id, row)
7771acea
MT
29 wishes.append(wish)
30
31 return wishes
32
33 def get_all_running(self):
918284e8 34 return self.get_all_by_query("SELECT * FROM wishlist \
1bf8d482 35 WHERE DATE(NOW()) >= date_start AND DATE(NOW()) <= date_end AND status = 'running' \
7771acea
MT
36 ORDER BY prio ASC, date_end ASC")
37
1bf8d482
MT
38 def get_all_finished(self, limit=5, offset=None):
39 query = "SELECT * FROM wishlist WHERE DATE(NOW()) > date_end AND status IS NOT NULL \
40 ORDER BY date_end DESC"
41 args = []
42
43 if limit:
44 if offset:
45 query += " LIMIT %s,%s"
46 args += [limit, offset]
47 else:
48 query += " LIMIT %s"
49 args.append(limit)
50
51 return self.get_all_by_query(query, *args)
7771acea
MT
52
53
54class Wish(object):
918284e8 55 def __init__(self, wishlist, id, data=None):
7771acea
MT
56 self.wishlist = wishlist
57 self.id = id
58
918284e8 59 self.__data = data
7771acea
MT
60
61 def __cmp__(self, other):
62 return cmp(self.date_end, other.date_end)
63
64 @property
65 def db(self):
66 return self.wishlist.db
67
68 @property
69 def data(self):
70 if self.__data is None:
71 self.__data = self.db.get("SELECT * FROM wishlist WHERE id = %s", self.id)
72 assert self.__data
73
74 return self.__data
75
76 @property
77 def title(self):
78 return self.data.title
79
80 @property
81 def slug(self):
82 return self.data.slug
83
84 @property
85 def tag(self):
86 return self.data.tag
87
88 @property
89 def description(self):
90 return textile.textile(self.data.description)
91
92 @property
93 def goal(self):
94 return self.data.goal
95
96 @property
97 def donated(self):
98 return self.data.donated
99
100 @property
101 def percentage(self):
102 return (self.donated / self.goal) * 100
103
918284e8
MT
104 @property
105 def percentage_bar(self):
106 if self.percentage > 100:
107 return 100
108
109 return self.percentage
110
1bf8d482
MT
111 @property
112 def status(self):
113 if self.data.status == "running" and not self.running:
114 return "closed"
115
116 return self.data.status
117
7771acea
MT
118 @property
119 def running(self):
120 if self.remaining_days < 0:
121 return False
122
123 return True
124
125 @property
126 def date_start(self):
127 return self.data.date_start
128
129 @property
130 def date_end(self):
131 return self.data.date_end
132
133 @property
134 def running_days(self):
135 today = datetime.datetime.today()
136 today = today.date()
137
138 running = today - self.date_start
139 return running.days
140
141 @property
142 def remaining_days(self):
143 today = datetime.datetime.today()
144 today = today.date()
145
146 remaining = self.date_end - today
147 return remaining.days
148
149 def get_tweet(self, locale):
150 _ = locale.translate
151
152 t = [
153 _("Checkout this crowdfunding wish from #ipfire:"),
154 "http://wishlist.ipfire.org/wish/%s" % self.slug,
155 ]
156
157 return " ".join(t)