]>
git.ipfire.org Git - ipfire.org.git/blob - webapp/backend/wishlist.py
8743809ffb63a17616b4bbebbb9d3ecdf2ba7611
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
)
84 def get_hottest_wish(self
):
85 wishes
= self
.get_hot_wishes(limit
=1)
92 def __init__(self
, wishlist
, id, data
=None):
93 self
.wishlist
= wishlist
99 return "<%s %s>" % (self
.__class
__.__name
__, self
.title
)
101 def __cmp__(self
, other
):
102 return cmp(self
.date_end
, other
.date_end
)
106 return self
.wishlist
.db
110 if self
.__data
is None:
111 self
.__data
= self
.db
.get("SELECT * FROM wishlist WHERE id = %s", self
.id)
118 return self
.data
.title
121 def title_short(self
):
122 if len(self
.title
) > 30:
123 return "%s..." % self
.title
[:30]
129 return self
.data
.slug
136 def description(self
):
137 return textile
.textile(self
.data
.description
)
141 return self
.data
.goal
145 return self
.data
.donated
148 def percentage(self
):
149 return (self
.donated
/ self
.goal
) * 100
152 def percentage_bar(self
):
153 if self
.percentage
> 100:
156 return self
.percentage
159 def progressbar_colour(self
):
163 if self
.percentage
>= 90:
170 if self
.data
.status
== "running" and not self
.running
:
173 return self
.data
.status
178 if self
.remaining_days
and self
.remaining_days
< 0:
182 if self
.donated
>= self
.goal
:
188 def date_start(self
):
189 return self
.data
.date_start
193 return self
.data
.date_end
196 def running_days(self
):
197 running
= datetime
.datetime
.today() - self
.date_start
201 def remaining_days(self
):
203 remaining
= self
.date_end
- datetime
.datetime
.today()
204 return remaining
.days
207 return self
.running_days
< 10
209 def get_tweet(self
, locale
):
213 _("Checkout this crowdfunding wish from #ipfire:"),
214 "http://wishlist.ipfire.org/wish/%s" % self
.slug
,