Statistics
| Branch: | Tag: | Revision:

root / cloudcms / content.py @ 8dd49103

History | View | Annotate | Download (8.2 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 c6fdba44 Olga Brani
class TextileContent(models.Model):
200 c6fdba44 Olga Brani
    content = models.TextField()
201 c6fdba44 Olga Brani
202 c6fdba44 Olga Brani
    class Meta:
203 c6fdba44 Olga Brani
        abstract = True
204 c6fdba44 Olga Brani
205 c6fdba44 Olga Brani
    def render(self, **kwargs):
206 c6fdba44 Olga Brani
        return textile(self.content)
207 c6fdba44 Olga Brani
    
208 c6fdba44 Olga Brani
class IntroBlock(models.Model):
209 c6fdba44 Olga Brani
    title = models.CharField(_('title'), max_length=200, blank=False)
210 c6fdba44 Olga Brani
    content = models.TextField()
211 c6fdba44 Olga Brani
    class_name = models.CharField(_('class_name'), max_length=200, blank=True, null=True)
212 c6fdba44 Olga Brani
    image = MediaFileForeignKey(MediaFile, blank=True, null=True)
213 c6fdba44 Olga Brani
214 c6fdba44 Olga Brani
    class Meta:
215 c6fdba44 Olga Brani
        abstract = True
216 c6fdba44 Olga Brani
217 c6fdba44 Olga Brani
    def render(self, **kwargs):
218 c6fdba44 Olga Brani
        return render_to_string(['content/intro_block.html'], {'content': self})
219 c6fdba44 Olga Brani