]>
git.ipfire.org Git - ipfire.org.git/blob - webapp/backend/wishlist.py
3 from __future__
import division
8 from misc
import Object
10 class Wishlist(Object
):
12 wish
= self
.db
.get("SELECT * FROM wishlist WHERE slug = %s", slug
)
15 return Wish(self
, wish
.id)
17 def get_all_by_query(self
, query
, *args
):
20 for row
in self
.db
.query(query
, *args
):
21 wish
= Wish(self
, row
.id, row
)
26 def get_all_running(self
):
27 return self
.get_all_by_query("SELECT * FROM wishlist \
29 WHEN date_end IS NULL THEN \
30 NOW() >= date_start AND goal >= donated \
32 NOW() BETWEEN date_start AND date_end \
33 END) AND status = 'running' \
34 ORDER BY prio ASC, date_end ASC")
36 def get_all_finished(self
, limit
=5, offset
=None):
37 query
= "SELECT * FROM wishlist \
39 WHEN date_end IS NULL THEN \
43 END) AND status IS NOT NULL \
44 ORDER BY date_end DESC"
55 return self
.get_all_by_query(query
, *args
)
57 def get_hot_wishes(self
, limit
=3):
58 query
= "SELECT * FROM wishlist \
64 (CASE WHEN date_end IS NOT NULL THEN \
65 NOW() BETWEEN date_start AND date_end \
70 (AGE(NOW(), date_start) <= INTERVAL '10 days' \
72 AGE(date_end, NOW()) <= INTERVAL '14 days' \
74 (donated / goal) >= 0.85 \
80 ORDER BY prio ASC, date_end ASC LIMIT %s"
82 return self
.get_all_by_query(query
, "running", limit
)
86 def __init__(self
, wishlist
, id, data
=None):
87 self
.wishlist
= wishlist
93 return "<%s %s>" % (self
.__class
__.__name
__, self
.title
)
95 def __cmp__(self
, other
):
96 return cmp(self
.date_end
, other
.date_end
)
100 return self
.wishlist
.db
104 if self
.__data
is None:
105 self
.__data
= self
.db
.get("SELECT * FROM wishlist WHERE id = %s", self
.id)
112 return self
.data
.title
115 def title_short(self
):
116 if len(self
.title
) > 30:
117 return "%s..." % self
.title
[:30]
123 return self
.data
.slug
130 def description(self
):
131 return textile
.textile(self
.data
.description
)
135 return self
.data
.goal
139 return self
.data
.donated
142 def percentage(self
):
143 return (self
.donated
/ self
.goal
) * 100
146 def percentage_bar(self
):
147 if self
.percentage
> 100:
150 return self
.percentage
153 def progressbar_colour(self
):
157 if self
.percentage
>= 90:
164 if self
.data
.status
== "running" and not self
.running
:
167 return self
.data
.status
172 if self
.remaining_days
and self
.remaining_days
< 0:
176 if self
.donated
>= self
.goal
:
182 def date_start(self
):
183 return self
.data
.date_start
187 return self
.data
.date_end
190 def running_days(self
):
191 running
= datetime
.datetime
.today() - self
.date_start
195 def remaining_days(self
):
197 remaining
= self
.date_end
- datetime
.datetime
.today()
198 return remaining
.days
201 return self
.running_days
< 10
203 def get_tweet(self
, locale
):
207 _("Checkout this crowdfunding wish from #ipfire:"),
208 "http://wishlist.ipfire.org/wish/%s" % self
.slug
,