Fix.
[cascardo/eventmanager.git] / controllers.py
1 # -*- coding: utf-8; -*-
2 # Copyright (C) 2007 Gabriel Falcão <root@gabrielfalcao.com>
3 #
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License as
6 # published by the Free Software Foundation; either version 2 of the
7 # License, or (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public
15 # License along with this program; if not, write to the
16 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 # Boston, MA 02111-1307, USA.
18 import re
19
20 from django.http import HttpResponse, HttpResponseRedirect
21 from django.template import RequestContext
22 from django.shortcuts import render_to_response, get_object_or_404
23 from django.conf import settings
24 from django.core.exceptions import ObjectDoesNotExist
25
26 def html_unentities(s):
27     s = s.decode('utf-8')
28     entities = {}
29     newstring = u""
30     
31     entities[u'&nbsp;'] = u' '
32     entities[u'&iexcl;'] = u'¡'
33     entities[u'&cent;'] = u'¢'
34     entities[u'&pound;'] = u'£'
35     entities[u'&curren;'] = u'¤'
36     entities[u'&yen;'] = u'¥'
37     entities[u'&brvbar;'] = u'¦'
38     entities[u'&sect;'] = u'§'
39     entities[u'&uml;'] = u'¨'
40     entities[u'&copy;'] = u'©'
41     entities[u'&ordf;'] = u'ª'
42     entities[u'&laquo;'] = u'«'
43     entities[u'&not;'] = u'¬'
44     entities[u'&shy;'] = u'­'
45     entities[u'&reg;'] = u'®'
46     entities[u'&macr;'] = u'¯'
47     entities[u'&deg;'] = u'°'
48     entities[u'&plusmn;'] = u'±'
49     entities[u'&sup2;'] = u'²'
50     entities[u'&sup3;'] = u'³'
51     entities[u'&acute;'] = u'´'
52     entities[u'&micro;'] = u'µ'
53     entities[u'&para;'] = u'¶'
54     entities[u'&middot;'] = u'·'
55     entities[u'&cedil;'] = u'¸'
56     entities[u'&sup1;'] = u'¹'
57     entities[u'&ordm;'] = u'º'
58     entities[u'&raquo;'] = u'»'
59     entities[u'&frac14;'] = u'¼'
60     entities[u'&frac12;'] = u'½'
61     entities[u'&frac34;'] = u'¾'
62     entities[u'&iquest;'] = u'¿'
63     entities[u'&Agrave;'] = u'À'
64     entities[u'&Aacute;'] = u'Á'
65     entities[u'&Acirc;'] = u'Â'
66     entities[u'&Atilde;'] = u'Ã'
67     entities[u'&Auml;'] = u'Ä'
68     entities[u'&Aring;'] = u'Å'
69     entities[u'&AElig;'] = u'Æ'
70     entities[u'&Ccedil;'] = u'Ç'
71     entities[u'&Egrave;'] = u'È'
72     entities[u'&Eacute;'] = u'É'
73     entities[u'&Ecirc;'] = u'Ê'
74     entities[u'&Euml;'] = u'Ë'
75     entities[u'&Igrave;'] = u'Ì'
76     entities[u'&Iacute;'] = u'Í'
77     entities[u'&Icirc;'] = u'Î'
78     entities[u'&Iuml;'] = u'Ï'
79     entities[u'&ETH;'] = u'Ð'
80     entities[u'&Ntilde;'] = u'Ñ'
81     entities[u'&Ograve;'] = u'Ò'
82     entities[u'&Oacute;'] = u'Ó'
83     entities[u'&Ocirc;'] = u'Ô'
84     entities[u'&Otilde;'] = u'Õ'
85     entities[u'&Ouml;'] = u'Ö'
86     entities[u'&times;'] = u'×'
87     entities[u'&Oslash;'] = u'Ø'
88     entities[u'&Ugrave;'] = u'Ù'
89     entities[u'&Uacute;'] = u'Ú'
90     entities[u'&Ucirc;'] = u'Û'
91     entities[u'&Uuml;'] = u'Ü'
92     entities[u'&Yacute;'] = u'Ý'
93     entities[u'&THORN;'] = u'Þ'
94     entities[u'&szlig;'] = u'ß'
95     entities[u'&agrave;'] = u'à'
96     entities[u'&aacute;'] = u'á'
97     entities[u'&acirc;'] = u'â'
98     entities[u'&atilde;'] = u'ã'
99     entities[u'&auml;'] = u'ä'
100     entities[u'&aring;'] = u'å'
101     entities[u'&aelig;'] = u'æ'
102     entities['&ccedil;'] = u'ç'
103     entities[u'&egrave;'] = u'è'
104     entities[u'&eacute;'] = u'é'
105     entities[u'&ecirc;'] = u'ê'
106     entities[u'&euml;'] = u'ë'
107     entities[u'&igrave;'] = u'ì'
108     entities[u'&iacute;'] = u'í'
109     entities[u'&icirc;'] = u'î'
110     entities[u'&iuml;'] = u'ï'
111     entities[u'&eth;'] = u'ð'
112     entities[u'&ntilde;'] = u'ñ'
113     entities[u'&ograve;'] = u'ò'
114     entities[u'&oacute;'] = u'ó'
115     entities[u'&ocirc;'] = u'ô'
116     entities[u'&otilde;'] = u'õ'
117     entities[u'&ouml;'] = u'ö'
118     entities[u'&divide;'] = u'÷'
119     entities[u'&oslash;'] = u'ø'
120     entities[u'&ugrave;'] = u'ù'
121     entities[u'&uacute;'] = u'ú'
122     entities[u'&ucirc;'] = u'û'
123     entities[u'&uuml;'] = u'ü'
124     entities[u'&yacute;'] = u'ý'
125     entities[u'&thorn;'] = u'þ'
126     entities[u'&yuml;'] = u'ÿ'
127     entities[u'&quot;'] = u'"'
128     entities[u"'"] = '&#39;'
129     entities[u'&lt;'] = u'<'
130     entities[u'&gt;'] = u'>'
131     entities[u'&amp;'] = u'&'
132     buffer = ""
133     mutex = False
134     s_ent = re.findall(r'[&].*?[;]', s)
135     for rp in s_ent:
136         s = re.sub(rp.replace('&','[&]').replace(';','[;]'), entities[rp], s)
137     return s
138
139 class ScheduleHammer(object):
140     def __init__(self, HTML):
141         if isinstance(HTML, str):
142             self.S_tag = '[<]li[>].*?[<]font.*?[>]'
143             self.E_tag = '[<][/]font[>].*?[<][/]li[>]'
144             self.items = re.findall(r'%s(?P<content>.*?)%s'%(self.S_tag,
145                 self.E_tag), HTML)
146         else:
147             raise TypeError("ScheduleHammer must take only a string as \
148                     parameter")
149
150     def __iter__(self):
151         for title in self.items:
152             if "<br" in title:
153                 yield html_unentities(title.split('<br')[0])
154             else:
155                 yield html_unentities(title)
156
157     def __getitem__(self, pos):
158         if "<br" in self.items[pos]:
159             return html_unentities(self.items[pos].split("<br")[0])
160         else:
161             return html_unentities(self.items[pos])
162
163 class MetaDict:
164     """
165     Esta classe recebe um dicionario como parametro e adiciona cada
166     chave do dicionario em seu atributo, contendo o valor de cada item
167     """
168     def __init__(self, dictionary):
169         if isinstance(dictionary, dict):
170             for key, value in dictionary.items():
171                 setattr(self, key, value)
172         else:
173             raise RuntimeError('MetaDict class only accepts a dictionary\
174                                     as parameter')
175     def __iter__(self):
176         for value in self.__dict__.values():
177             yield value
178
179     def __getitem__(self,index):
180         try:
181             return self.__dict__[index]
182         except:
183             return False
184
185     def __repr__(self):
186         return ", ".join(self.all())
187
188     def all(self):
189         return self.__dict__.keys()
190
191     def first(self):
192         return self.__dict__[self.__dict__.keys()[0]]
193
194     def last(self):
195         return self.__dict__[self.__dict__.keys()[-1]]
196
197     def slice(self,index):
198         try:
199             return self.__dict__[self.__dict__.keys()[index]]
200         except:
201             return False
202
203     def __contains__(self, item):
204         return item in self.__dict__.keys() or item in self.__dict__.values()
205
206     def as_dict(self):
207         return self.__dict__
208
209     def __len__(self):
210         return len(self.__dict__.keys())
211
212 class empty:
213
214     def __default__(self):
215         return []
216
217     def __getattr__(self,*a):
218         return self.__default__
219
220     def __repr__(self):
221         return self.__default__
222     
223     def __nonzero__(self):
224         return 1
225
226 def get_object_or_list(obj,**kw):
227     try:
228         return obj(**kw)
229     except ObjectDoesNotExist:
230         return empty()
231
232 def get_object_or_none(obj,**kw):
233     try:
234         return obj.objects.get(**kw)
235     except ObjectDoesNotExist:
236         return None
237     except AssertionError:
238         #hammer! hammer! hammer!
239         return empty()#obj.objects.filter(**kw)[0]
240
241 def limpa_conversas(visitante, corretor):
242     conversas_vc = []
243     if isinstance(visitante, Visitante):
244         conversas_vc.append(get_object_or_none(Conversa,visitante__id=\
245             visitante.id))
246     if isinstance(corretor, Corretor):
247         conversas_vc.append(get_object_or_none(Conversa,corretor__id=\
248             corretor.id))
249     [c.delete() for c in conversas_vc if c]
250