root / cloudcms / content.py @ 630dc5b7
History | View | Annotate | Download (9.1 kB)
1 | 52271184 | Kostas Papadimitriou | # Copyright 2012 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 52271184 | Kostas Papadimitriou | #
|
3 | 52271184 | Kostas Papadimitriou | # Redistribution and use in source and binary forms, with or
|
4 | 52271184 | Kostas Papadimitriou | # without modification, are permitted provided that the following
|
5 | 52271184 | Kostas Papadimitriou | # conditions are met:
|
6 | 52271184 | Kostas Papadimitriou | #
|
7 | 52271184 | Kostas Papadimitriou | # 1. Redistributions of source code must retain the above
|
8 | 52271184 | Kostas Papadimitriou | # copyright notice, this list of conditions and the following
|
9 | 52271184 | Kostas Papadimitriou | # disclaimer.
|
10 | 52271184 | Kostas Papadimitriou | #
|
11 | 52271184 | Kostas Papadimitriou | # 2. Redistributions in binary form must reproduce the above
|
12 | 52271184 | Kostas Papadimitriou | # copyright notice, this list of conditions and the following
|
13 | 52271184 | Kostas Papadimitriou | # disclaimer in the documentation and/or other materials
|
14 | 52271184 | Kostas Papadimitriou | # provided with the distribution.
|
15 | 52271184 | Kostas Papadimitriou | #
|
16 | 52271184 | Kostas Papadimitriou | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 52271184 | Kostas Papadimitriou | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 52271184 | Kostas Papadimitriou | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 52271184 | Kostas Papadimitriou | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 52271184 | Kostas Papadimitriou | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 52271184 | Kostas Papadimitriou | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 52271184 | Kostas Papadimitriou | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 52271184 | Kostas Papadimitriou | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 52271184 | Kostas Papadimitriou | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 52271184 | Kostas Papadimitriou | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 52271184 | Kostas Papadimitriou | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 52271184 | Kostas Papadimitriou | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 52271184 | Kostas Papadimitriou | #
|
29 | 52271184 | Kostas Papadimitriou | # The views and conclusions contained in the software and
|
30 | 52271184 | Kostas Papadimitriou | # documentation are those of the authors and should not be
|
31 | 52271184 | Kostas Papadimitriou | # interpreted as representing official policies, either expressed
|
32 | 52271184 | Kostas Papadimitriou | # or implied, of GRNET S.A.
|
33 | 52271184 | Kostas Papadimitriou | |
34 | 52271184 | Kostas Papadimitriou | |
35 | c1468bcc | Kostas Papadimitriou | from django.contrib.markup.templatetags.markup import textile |
36 | c1468bcc | Kostas Papadimitriou | from django.db import models |
37 | c1468bcc | Kostas Papadimitriou | from django import forms |
38 | c1468bcc | Kostas Papadimitriou | from django.conf import settings |
39 | c1468bcc | Kostas Papadimitriou | from django.utils.translation import ugettext_lazy as _ |
40 | c1468bcc | Kostas Papadimitriou | from django.template.loader import render_to_string |
41 | c1468bcc | Kostas Papadimitriou | from django.utils import simplejson |
42 | c1468bcc | Kostas Papadimitriou | |
43 | c1468bcc | Kostas Papadimitriou | from feincms.admin.editor import ItemEditorForm |
44 | c1468bcc | Kostas Papadimitriou | from feincms.module.page.models import Page |
45 | c1468bcc | Kostas Papadimitriou | from feincms.module.medialibrary.models import MediaFile |
46 | c1468bcc | Kostas Papadimitriou | from feincms.content.medialibrary.models import MediaFileWidget |
47 | c1468bcc | Kostas Papadimitriou | from feincms.module.medialibrary.fields import MediaFileForeignKey |
48 | c1468bcc | Kostas Papadimitriou | |
49 | c1468bcc | Kostas Papadimitriou | |
50 | c1468bcc | Kostas Papadimitriou | DEFAULT_JQ_TWITTER_URL = settings.MEDIA_URL + 'cloudcms/' + 'js/' + 'twitter/' + \ |
51 | c1468bcc | Kostas Papadimitriou | 'jquery.twitter.js'
|
52 | c1468bcc | Kostas Papadimitriou | DEFAULT_LINKIFY_URL = settings.MEDIA_URL + 'cloudcms/' + 'js/' + 'twitter/' + \ |
53 | c1468bcc | Kostas Papadimitriou | 'ba-linkify.js'
|
54 | c1468bcc | Kostas Papadimitriou | DEFAULT_JQ_TIMEAGO_URL = settings.MEDIA_URL + 'cloudcms/' + 'js/' + 'twitter/' + \ |
55 | c1468bcc | Kostas Papadimitriou | 'jquery.timeago.js'
|
56 | c1468bcc | Kostas Papadimitriou | JQUERY_TWITTER_URL = getattr(settings, "JQUERY_TWITTER_URL", |
57 | c1468bcc | Kostas Papadimitriou | DEFAULT_JQ_TWITTER_URL) |
58 | c1468bcc | Kostas Papadimitriou | LINKIFY_JS_URL = getattr(settings, "LINKIFY_JS_URL", |
59 | c1468bcc | Kostas Papadimitriou | DEFAULT_LINKIFY_URL) |
60 | c1468bcc | Kostas Papadimitriou | JQUERY_TIMEAGO_URL = getattr(settings, "JQUERY_TIMEAGO_URL", |
61 | c1468bcc | Kostas Papadimitriou | DEFAULT_JQ_TIMEAGO_URL) |
62 | c1468bcc | Kostas Papadimitriou | |
63 | c1468bcc | Kostas Papadimitriou | class VideoSection(models.Model): |
64 | c1468bcc | Kostas Papadimitriou | section_title = models.CharField(max_length=200, blank=True) |
65 | c1468bcc | Kostas Papadimitriou | video_title = models.CharField(max_length=200, blank=True) |
66 | c1468bcc | Kostas Papadimitriou | video_link = models.CharField(max_length=200, blank=True) |
67 | c1468bcc | Kostas Papadimitriou | video_width = models.PositiveIntegerField(default=700)
|
68 | c1468bcc | Kostas Papadimitriou | video_height = models.PositiveIntegerField(default=550)
|
69 | c1468bcc | Kostas Papadimitriou | image = MediaFileForeignKey(MediaFile, blank=True, null=True, |
70 | c1468bcc | Kostas Papadimitriou | related_name="as_image_for_video_section")
|
71 | c1468bcc | Kostas Papadimitriou | image_hover = MediaFileForeignKey(MediaFile, blank=True, null=True, |
72 | c1468bcc | Kostas Papadimitriou | related_name="as_hover_for_video_section")
|
73 | c1468bcc | Kostas Papadimitriou | alt_text = models.TextField(null=True, blank=True) |
74 | c1468bcc | Kostas Papadimitriou | extra_url_params = models.CharField(max_length=200, blank=True) |
75 | c1468bcc | Kostas Papadimitriou | |
76 | c1468bcc | Kostas Papadimitriou | class Meta: |
77 | c1468bcc | Kostas Papadimitriou | abstract = True
|
78 | c1468bcc | Kostas Papadimitriou | verbose_name = _('video section')
|
79 | c1468bcc | Kostas Papadimitriou | verbose_name_plural = _('video sections')
|
80 | c1468bcc | Kostas Papadimitriou | |
81 | c1468bcc | Kostas Papadimitriou | def render(self, **kwargs): |
82 | c1468bcc | Kostas Papadimitriou | return render_to_string(['content/videosection.html'], {'content': self}) |
83 | c1468bcc | Kostas Papadimitriou | |
84 | c1468bcc | Kostas Papadimitriou | |
85 | c1468bcc | Kostas Papadimitriou | class TwitterFeed(models.Model): |
86 | c1468bcc | Kostas Papadimitriou | title = models.CharField(max_length=200, blank=True) |
87 | c1468bcc | Kostas Papadimitriou | account = models.CharField(max_length=200, blank=True) |
88 | c1468bcc | Kostas Papadimitriou | nots = models.CharField(max_length=200, help_text="Ugly words", blank=True) |
89 | c1468bcc | Kostas Papadimitriou | query = models.CharField(max_length=200, blank=True, |
90 | c1468bcc | Kostas Papadimitriou | help_text="Filter query")
|
91 | c1468bcc | Kostas Papadimitriou | tag = models.CharField(max_length=200, blank=True, help_text="Hashtag") |
92 | c1468bcc | Kostas Papadimitriou | limit = models.PositiveIntegerField(default=10)
|
93 | c1468bcc | Kostas Papadimitriou | replies = models.BooleanField(default=True)
|
94 | c1468bcc | Kostas Papadimitriou | retweets = models.BooleanField(default=True)
|
95 | c1468bcc | Kostas Papadimitriou | avatar = models.BooleanField(default=False)
|
96 | c1468bcc | Kostas Papadimitriou | extra_params = models.TextField(blank=True,
|
97 | c1468bcc | Kostas Papadimitriou | help_text="Json object to append to "
|
98 | c1468bcc | Kostas Papadimitriou | "JQuery-twitter-plugin settings. Change "
|
99 | c1468bcc | Kostas Papadimitriou | "this only if you know what you are doing.")
|
100 | c1468bcc | Kostas Papadimitriou | |
101 | c1468bcc | Kostas Papadimitriou | class Meta: |
102 | c1468bcc | Kostas Papadimitriou | abstract = True
|
103 | c1468bcc | Kostas Papadimitriou | verbose_name = _('twitter feed')
|
104 | c1468bcc | Kostas Papadimitriou | verbose_name_plural = _('twitter feeds')
|
105 | c1468bcc | Kostas Papadimitriou | |
106 | c1468bcc | Kostas Papadimitriou | @property
|
107 | c1468bcc | Kostas Papadimitriou | def media(self): |
108 | c1468bcc | Kostas Papadimitriou | return forms.Media(js=(
|
109 | c1468bcc | Kostas Papadimitriou | LINKIFY_JS_URL, JQUERY_TWITTER_URL, JQUERY_TIMEAGO_URL |
110 | c1468bcc | Kostas Papadimitriou | )) |
111 | c1468bcc | Kostas Papadimitriou | |
112 | c1468bcc | Kostas Papadimitriou | def js_conf(self): |
113 | c1468bcc | Kostas Papadimitriou | conf = {} |
114 | c1468bcc | Kostas Papadimitriou | if self.account: |
115 | c1468bcc | Kostas Papadimitriou | conf['from'] = self.account |
116 | c1468bcc | Kostas Papadimitriou | |
117 | c1468bcc | Kostas Papadimitriou | for f in ['nots', 'query', 'tag', 'limit', 'replies', 'retweets', 'avatar']: |
118 | c1468bcc | Kostas Papadimitriou | if type(getattr(self, f)) == bool: |
119 | c1468bcc | Kostas Papadimitriou | conf[f] = getattr(self, f) |
120 | c1468bcc | Kostas Papadimitriou | |
121 | c1468bcc | Kostas Papadimitriou | if getattr(self, f): |
122 | c1468bcc | Kostas Papadimitriou | conf[f] = getattr(self, f) |
123 | c1468bcc | Kostas Papadimitriou | |
124 | c1468bcc | Kostas Papadimitriou | xtraconf = {} |
125 | c1468bcc | Kostas Papadimitriou | try:
|
126 | c1468bcc | Kostas Papadimitriou | xtraconf = simplejson.loads(self.extra_params)
|
127 | c1468bcc | Kostas Papadimitriou | except:
|
128 | c1468bcc | Kostas Papadimitriou | pass
|
129 | c1468bcc | Kostas Papadimitriou | |
130 | c1468bcc | Kostas Papadimitriou | conf.update(xtraconf) |
131 | c1468bcc | Kostas Papadimitriou | return simplejson.dumps(conf)
|
132 | c1468bcc | Kostas Papadimitriou | |
133 | c1468bcc | Kostas Papadimitriou | |
134 | c1468bcc | Kostas Papadimitriou | def render(self, **kwargs): |
135 | c1468bcc | Kostas Papadimitriou | return render_to_string(['content/twitter_feed.html'], {'content': self}) |
136 | c1468bcc | Kostas Papadimitriou | |
137 | c1468bcc | Kostas Papadimitriou | |
138 | c1468bcc | Kostas Papadimitriou | class AboutBlock(models.Model): |
139 | c1468bcc | Kostas Papadimitriou | |
140 | c1468bcc | Kostas Papadimitriou | title = models.CharField(max_length=200, blank=False) |
141 | c1468bcc | Kostas Papadimitriou | content = models.TextField(blank=False)
|
142 | c1468bcc | Kostas Papadimitriou | image = MediaFileForeignKey(MediaFile, blank=True, null=True) |
143 | c1468bcc | Kostas Papadimitriou | image_position = models.CharField(max_length=200,
|
144 | c1468bcc | Kostas Papadimitriou | choices=(('top', 'Top'), ('left', 'Left'), ('right', 'Right'))) |
145 | c1468bcc | Kostas Papadimitriou | color = models.CharField(max_length=200, blank=False) |
146 | c1468bcc | Kostas Papadimitriou | offset_left = models.IntegerField(null=True, blank=True) |
147 | c1468bcc | Kostas Papadimitriou | offset_top = models.IntegerField(null=True, blank=True) |
148 | c1468bcc | Kostas Papadimitriou | |
149 | c1468bcc | Kostas Papadimitriou | class Meta: |
150 | c1468bcc | Kostas Papadimitriou | abstract = True
|
151 | c1468bcc | Kostas Papadimitriou | verbose_name = _('about page block')
|
152 | c1468bcc | Kostas Papadimitriou | verbose_name_plural = _('about page blocks')
|
153 | c1468bcc | Kostas Papadimitriou | |
154 | c1468bcc | Kostas Papadimitriou | def render(self, **kwargs): |
155 | c1468bcc | Kostas Papadimitriou | return render_to_string(['content/about_block.html'], {'content': self}) |
156 | c1468bcc | Kostas Papadimitriou | |
157 | c1468bcc | Kostas Papadimitriou | |
158 | c1468bcc | Kostas Papadimitriou | class LoginForm(models.Model): |
159 | c1468bcc | Kostas Papadimitriou | """
|
160 | c1468bcc | Kostas Papadimitriou | Login form
|
161 | c1468bcc | Kostas Papadimitriou | """
|
162 | c1468bcc | Kostas Papadimitriou | |
163 | c1468bcc | Kostas Papadimitriou | title = models.CharField(_('title'), max_length=200, blank=False) |
164 | c1468bcc | Kostas Papadimitriou | action_url = models.CharField(_('im url'), max_length=100, blank=False) |
165 | c1468bcc | Kostas Papadimitriou | display_forgot_password = models.BooleanField(default=False, null=False) |
166 | c1468bcc | Kostas Papadimitriou | next_url = models.CharField(max_length=255, null=True, blank=True) |
167 | f6e90a2b | Kostas Papadimitriou | bottom_content = models.TextField(blank=True)
|
168 | f6e90a2b | Kostas Papadimitriou | logged_in_content = models.TextField(blank=True)
|
169 | c1468bcc | Kostas Papadimitriou | |
170 | c1468bcc | Kostas Papadimitriou | class Meta: |
171 | c1468bcc | Kostas Papadimitriou | abstract = True
|
172 | c1468bcc | Kostas Papadimitriou | verbose_name = _('login form')
|
173 | c1468bcc | Kostas Papadimitriou | verbose_name_plural = _('login forms')
|
174 | c1468bcc | Kostas Papadimitriou | |
175 | c1468bcc | Kostas Papadimitriou | def render(self, **kwargs): |
176 | c1468bcc | Kostas Papadimitriou | return render_to_string(['content/login_form.html'], {'content': self}) |
177 | c1468bcc | Kostas Papadimitriou | |
178 | d35930c2 | Kostas Papadimitriou | |
179 | d35930c2 | Kostas Papadimitriou | class IntroButton(models.Model): |
180 | d35930c2 | Kostas Papadimitriou | |
181 | d35930c2 | Kostas Papadimitriou | class Meta: |
182 | d35930c2 | Kostas Papadimitriou | abstract = True
|
183 | d35930c2 | Kostas Papadimitriou | verbose_name = _('intro images')
|
184 | d35930c2 | Kostas Papadimitriou | verbose_name_plural = _('intro images')
|
185 | d35930c2 | Kostas Papadimitriou | |
186 | d35930c2 | Kostas Papadimitriou | image_1 = MediaFileForeignKey(MediaFile, blank=True, null=True, |
187 | d35930c2 | Kostas Papadimitriou | related_name="as_image1")
|
188 | d35930c2 | Kostas Papadimitriou | image_2 = MediaFileForeignKey(MediaFile, blank=True, null=True, |
189 | d35930c2 | Kostas Papadimitriou | related_name="as_image2")
|
190 | d35930c2 | Kostas Papadimitriou | image_3 = MediaFileForeignKey(MediaFile, blank=True, null=True, |
191 | d35930c2 | Kostas Papadimitriou | related_name="as_image3")
|
192 | d35930c2 | Kostas Papadimitriou | link = models.CharField(max_length=255, blank=False, default="/welcome") |
193 | d35930c2 | Kostas Papadimitriou | link_title = models.CharField(max_length=255, blank=False, default="~okeanos") |
194 | d35930c2 | Kostas Papadimitriou | |
195 | d35930c2 | Kostas Papadimitriou | def render(self, **kwargs): |
196 | d35930c2 | Kostas Papadimitriou | return render_to_string(['content/intro_images.html'], {'content': self}) |
197 | d35930c2 | Kostas Papadimitriou | |
198 | d35930c2 | Kostas Papadimitriou | |
199 | 800ef15e | Kostas Papadimitriou | |
200 | c6fdba44 | Olga Brani | class TextileContent(models.Model): |
201 | c6fdba44 | Olga Brani | content = models.TextField() |
202 | c6fdba44 | Olga Brani | |
203 | c6fdba44 | Olga Brani | class Meta: |
204 | c6fdba44 | Olga Brani | abstract = True
|
205 | c6fdba44 | Olga Brani | |
206 | c6fdba44 | Olga Brani | def render(self, **kwargs): |
207 | c6fdba44 | Olga Brani | return textile(self.content) |
208 | c6fdba44 | Olga Brani | |
209 | c6fdba44 | Olga Brani | class IntroBlock(models.Model): |
210 | c6fdba44 | Olga Brani | title = models.CharField(_('title'), max_length=200, blank=False) |
211 | c6fdba44 | Olga Brani | content = models.TextField() |
212 | c6fdba44 | Olga Brani | class_name = models.CharField(_('class_name'), max_length=200, blank=True, null=True) |
213 | c6fdba44 | Olga Brani | image = MediaFileForeignKey(MediaFile, blank=True, null=True) |
214 | c6fdba44 | Olga Brani | |
215 | c6fdba44 | Olga Brani | class Meta: |
216 | c6fdba44 | Olga Brani | abstract = True
|
217 | c6fdba44 | Olga Brani | |
218 | c6fdba44 | Olga Brani | def render(self, **kwargs): |
219 | c6fdba44 | Olga Brani | return render_to_string(['content/intro_block.html'], {'content': self}) |
220 | 630dc5b7 | Olga Brani | |
221 | 630dc5b7 | Olga Brani | |
222 | 630dc5b7 | Olga Brani | class BlockColor(models.Model): |
223 | 630dc5b7 | Olga Brani | title = models.CharField(_('title'), max_length=200, blank=False) |
224 | 630dc5b7 | Olga Brani | content = models.TextField() |
225 | 630dc5b7 | Olga Brani | color = models.CharField(max_length=200, blank=True, null=True) |
226 | 630dc5b7 | Olga Brani | image = MediaFileForeignKey(MediaFile, blank=True, null=True) |
227 | 630dc5b7 | Olga Brani | |
228 | 630dc5b7 | Olga Brani | class Meta: |
229 | 630dc5b7 | Olga Brani | abstract = True
|
230 | 630dc5b7 | Olga Brani | |
231 | 630dc5b7 | Olga Brani | def render(self, **kwargs): |
232 | 630dc5b7 | Olga Brani | return render_to_string(['content/block_with_color.html'], {'content': self}) |
233 | c6fdba44 | Olga Brani | |
234 | 800ef15e | Kostas Papadimitriou | |
235 | 511913cb | Kostas Papadimitriou | class ClientDownload(models.Model): |
236 | 511913cb | Kostas Papadimitriou | |
237 | 511913cb | Kostas Papadimitriou | client = models.ForeignKey('cloudcms.Client')
|
238 | 511913cb | Kostas Papadimitriou | |
239 | 511913cb | Kostas Papadimitriou | @property
|
240 | 511913cb | Kostas Papadimitriou | def media(self): |
241 | 511913cb | Kostas Papadimitriou | return forms.Media(js=(
|
242 | 511913cb | Kostas Papadimitriou | settings.MEDIA_URL + 'cloudcms/' + 'js/' + 'client-downloads.js',)) |
243 | 511913cb | Kostas Papadimitriou | |
244 | 511913cb | Kostas Papadimitriou | class Meta: |
245 | 511913cb | Kostas Papadimitriou | abstract = True
|
246 | 511913cb | Kostas Papadimitriou | verbose_name = _('client download')
|
247 | 511913cb | Kostas Papadimitriou | verbose_name_plural = _('client downloads')
|
248 | 511913cb | Kostas Papadimitriou | |
249 | 511913cb | Kostas Papadimitriou | def render(self, **kwrags): |
250 | 511913cb | Kostas Papadimitriou | return render_to_string(['content/client_downloads.html'], {'content': self}) |