]>
git.ipfire.org Git - ipfire.org.git/blob - webapp/backend/wishlist.py
e94634adab3abf1281b758ac4a8216393bc5bf34
3 from __future__
import division
8 from databases
import Databases
9 from misc
import Singleton
11 class Wishlist(object):
12 __metaclass__
= Singleton
16 return Databases().webapp
19 wish
= self
.db
.get("SELECT * FROM wishlist WHERE slug = %s", slug
)
22 return Wish(self
, wish
.id)
24 def get_all_by_query(self
, query
, *args
):
27 for row
in self
.db
.query(query
, *args
):
28 wish
= Wish(self
, row
.id, row
)
33 def get_all_running(self
):
34 return self
.get_all_by_query("SELECT * FROM wishlist \
35 WHERE DATE(NOW()) >= date_start AND DATE(NOW()) <= date_end AND status = 'running' \
36 ORDER BY prio ASC, date_end ASC")
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"
45 query
+= " LIMIT %s,%s"
46 args
+= [limit
, offset
]
51 return self
.get_all_by_query(query
, *args
)
53 def get_hot_wishes(self
, limit
=3):
54 query
= "SELECT * FROM wishlist \
55 WHERE status = %s AND DATE(NOW()) BETWEEN date_start AND date_end AND ( \
56 ((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date_start)) <= 864000) \
57 OR ((UNIX_TIMESTAMP(date_end) - UNIX_TIMESTAMP()) <= 1209600) \
58 OR ((donated / goal) >= 0.9) \
61 ) ORDER BY prio ASC, date_end ASC LIMIT %s"
63 return self
.get_all_by_query(query
, "running", limit
)
67 def __init__(self
, wishlist
, id, data
=None):
68 self
.wishlist
= wishlist
74 return "<%s %s>" % (self
.__class
__.__name
__, self
.title
)
76 def __cmp__(self
, other
):
77 return cmp(self
.date_end
, other
.date_end
)
81 return self
.wishlist
.db
85 if self
.__data
is None:
86 self
.__data
= self
.db
.get("SELECT * FROM wishlist WHERE id = %s", self
.id)
93 return self
.data
.title
96 def title_short(self
):
97 if len(self
.title
) > 30:
98 return "%s..." % self
.title
[:30]
104 return self
.data
.slug
111 def description(self
):
112 return textile
.textile(self
.data
.description
)
116 return self
.data
.goal
120 return self
.data
.donated
123 def percentage(self
):
124 return (self
.donated
/ self
.goal
) * 100
127 def percentage_bar(self
):
128 if self
.percentage
> 100:
131 return self
.percentage
134 def progressbar_colour(self
):
138 if self
.percentage
>= 90:
145 if self
.data
.status
== "running" and not self
.running
:
148 return self
.data
.status
152 if self
.remaining_days
< 0:
158 def date_start(self
):
159 return self
.data
.date_start
163 return self
.data
.date_end
166 def running_days(self
):
167 today
= datetime
.datetime
.today()
170 running
= today
- self
.date_start
174 def remaining_days(self
):
175 today
= datetime
.datetime
.today()
178 remaining
= self
.date_end
- today
179 return remaining
.days
182 return self
.running_days
< 10
184 def get_tweet(self
, locale
):
188 _("Checkout this crowdfunding wish from #ipfire:"),
189 "http://wishlist.ipfire.org/wish/%s" % self
.slug
,