Exemplo n.º 1
0
class UserProfile(TimestampedModel):

    user = models.OneToOneField(User, related_name='profile')
    slug = AutoSlugField(populate_from=lambda instance:instance.user.username,
                         always_update=True,
                         slugify=lambda value: value.replace(' ', '-'))
    about = models.TextField(null=True, blank=True)

    location_address = models.CharField(max_length=255, null=True, blank=True)
    ip_location = models.CharField(max_length=255, null=True, blank=True)
    city = models.CharField(max_length=100, null=True, blank=True)
    state = models.CharField(max_length=50,null=True, blank=True)
    country = CountryField(null=True, blank=True)
    zipcode = models.CharField(max_length=10, null=True, blank=True)
    region = models.CharField(max_length=50, null=True, blank=True)
    latitude = models.FloatField(null=True, blank=True)
    longitude = models.FloatField(null=True, blank=True)
    timezone = TimeZoneField(null=False, blank=False, default='UTC')
    website = models.CharField(max_length=100, null=True, blank=True)

    main_image = ImageField(upload_to='account_images/', blank=True)
    thumbnail_image = ImageField(upload_to='account_images/', blank=True)
    followed = models.ManyToManyField('account.UserProfile', null=True, blank=True,
        related_name='followed_profiles', verbose_name='Profile followed by')
    activationtoken = models.CharField(max_length=255L,
        db_column='activationToken', null=True, blank=True)

    def get_full_name(self):
        full_name = self.user.get_full_name() or self.user.username
        return full_name

    full_name = property(get_full_name)

    def get_thumbnail(self, size, size2):
        if self.thumbnail_image:
            # TODO: refactor
            try:
                imgObject = get_thumbnail(self.thumbnail_image, str(size)+'x'+str(size2), crop='center', quality=99)
            except:
                return ""
            urlImg = imgObject.url
            return urlImg

    def get_main_image(self,size,size2):
        # TODO: refactor
        if self.main_image:
            try:
                imgObject = get_thumbnail(self.main_image, str(size)+'x'+str(size2), crop='center', quality=99)
            except:
                return ""
            urlImg = imgObject.url
            return urlImg
Exemplo n.º 2
0
class WorkBidder(models.Model):
    title = models.CharField(_('title'), max_length=80, blank=True, null=True)
    poll = models.ForeignKey(Poll, related_name='workbidders')
    author_name = models.CharField(_('author name'),
                                   max_length=80,
                                   blank=True,
                                   null=True)
    photo = ImageField(upload_to=make_poll_upload_path)
    text = tinymce_models.HTMLField(_('text'), blank=True, null=True)
    #user_likes = models.ManyToManyField(User, verbose_name=_('number votes'),
    #                        blank=True, null=True)
    total_likes = models.PositiveIntegerField(_('number of votes'), default=0)

    search = SphinxSearch(
        index='workbidder_index',
        weights={
            'title': 100,
        },
        mode='SPH_MATCH_ALL',
        rankmode='SPH_RANK_NONE',
    )

    class Meta:
        ordering = ['-total_likes']
        verbose_name = _('work bidder')
        verbose_name_plural = _('work bidders')

    def __unicode__(self):
        return u'%s - %s' % (self.poll, self.title)
Exemplo n.º 3
0
class User(AbstractUser):
    first_name = None
    last_name = None

    name = models.CharField(max_length=100, blank=True)
    nationality = CountryField(blank=True, null=True)
    profile_image = ImageField(upload_to=RenamedPath('profile_images', 'user'),
                               blank=True,
                               null=True)

    preferred_language = models.CharField(max_length=2,
                                          choices=LANGUAGES,
                                          default='en')
    is_expert = models.BooleanField(default=False)
    learning_languages = models.ManyToManyField(
        Language, through='transcription.Proficiency')

    class Meta:
        db_table = 'User'

    def save(self, *args, **kwargs):
        if self.id is None:
            profile_image = self.profile_image
            self.profile_image = None
            super().save(*args, **kwargs)
            self.profile_image = profile_image
        super().save(*args, **kwargs)

    def get_full_name(self):
        return self.name
Exemplo n.º 4
0
class Genus(models.Model, UrlNameMixin):
    objects = GenusManager()
    genus_id = models.AutoField(primary_key=True)
    kingdom = models.ForeignKey(Kingdom)
    latin_name = models.CharField(max_length=30, unique=True)
    name = models.CharField(max_length=30)
    featured_image = ImageField(upload_to='featured-images',
                                blank=True,
                                null=True)
    generated_name = models.CharField(max_length=60,
                                      unique=True,
                                      blank=True,
                                      null=True)

    class Meta:
        ordering = ('generated_name', )

    def save(self, *args, **kwargs):
        self.generated_name = self.__get_generated_name()
        return super(Genus, self).save(*args, **kwargs)

    def __str__(self):
        return self.generated_name or self.__get_generated_name()

    def __get_generated_name(self):
        return '{0} ({1})'.format(self.name, self.latin_name)
Exemplo n.º 5
0
class Keyword(models.Model):
    label = ValidXMLCharField(
        _(u'label'),
        max_length=30,
        unique=True,
        db_index=True,
        help_text=
        _(u'Select keywords in case you are using an Akvo Page. Keywords linked to a '
          u'project will determine if a project appears on the Akvo Page or not.'
          ))
    logo = ImageField(
        _('logo'),
        blank=True,
        upload_to=logo_path,
        help_text=
        _(u'Add your keyword logo here. You can only add one logo. '
          u'The logo will be shown on the project page, but not on Akvo Pages.<br/>'
          u'The logo should be about 1 MB in size, and should preferably be 75x75 '
          u'pixels and in PNG or JPG format.'),
    )

    def __unicode__(self):
        return self.label

    class Meta:
        app_label = 'rsr'
        ordering = ('label', )
        verbose_name = _(u'keyword')
        verbose_name_plural = _(u'keywords')
Exemplo n.º 6
0
class Advertisement(ImageThumbnailMixin, TimeStampedModel):
    image_file_field_name = 'file'

    name = models.CharField(max_length=128, verbose_name=_('Name'))
    file = ImageField(upload_to='ads/%Y/%m/%d', verbose_name=_('File'))
    type = FSMField(choices=ADS_TYPE_CHOICES,
                    default=ADS_TYPE.external,
                    verbose_name=_('Type'))
    dish = models.ForeignKey('dishes.Dish',
                             on_delete=models.SET_NULL,
                             default=None,
                             null=True,
                             blank=True,
                             related_name=_('advertisements'))
    is_active = models.BooleanField(default=True, verbose_name=_('Active?'))

    class Meta:
        ordering = ('-modified', )
        verbose_name = _('Advertisement')
        verbose_name_plural = _('Advertisements')

    def __str__(self):
        return "<%s(%d): %s>" % (_('Ads'), self.pk, self.name)

    @property
    def url(self):
        return self.file.url
Exemplo n.º 7
0
class DishImage(ImageThumbnailMixin, TimeStampedModel):
    image_file_field_name = 'file'

    dish = models.ForeignKey(
        Dish, on_delete=models.CASCADE, related_name='images',
        verbose_name=_('Dish'))
    file = ImageField(
        upload_to='dishes/%Y/%m/%d', verbose_name=_('Image File'))

    class Meta:
        ordering = ('-modified', )
        verbose_name = _('Dish Image')
        verbose_name_plural = _('Dish Images')

    def save(self):
        # watermark = Image.open(settings.WATERMARK_IMAGE)

        # base_image = Image.open(self.file)
        # base_image.paste(watermark, (40, 20))
        # output = BytesIO()
        # base_image.save(output, format='PNG', quality=75)
        # output.seek(0)
        # self.file = File(output, self.file.name)
        return super(DishImage, self).save()

    def __str__(self):
        return self.file.url

    def to_json(self):
        return {
            'tiny': self.tiny,
            'small': self.small,
            'normal': self.normal,
            'big': self.big,
        }
Exemplo n.º 8
0
class InlineImage(models.Model):
    image = ImageField(
        _('afbeelding'), upload_to=generate_filename,
        width_field='image_width', height_field='image_height')

    image_width = models.PositiveIntegerField(
        _('afbeelding breedte'), null=True, blank=True, editable=False)
    image_height = models.PositiveIntegerField(
        _('afbeelding hoogte'), null=True, blank=True, editable=False)

    alt_text = models.CharField(
        _('afbeelding omschrijving'), max_length=120,
        help_text=_('Omschrijf hier wat er te zien is op de afbeelding.'))

    caption = models.CharField(
        _('onderschrift'), max_length=2048, blank=True,
        help_text=_('Dit is een optionele tekst dat onder de afbeelding '
                    'getoond zal worden.'))

    url = models.URLField(_('URL'), max_length=2000, blank=True)

    class Meta:
        abstract = True
        verbose_name = _('losse afbeelding')
        verbose_name_plural = _('losse afbeeldingen')

        ordering = ('pk',)

    def __str__(self):
        return self.alt_text

    @property
    def upload_to(self):
        return 'inline-images/%Y/%m/%d/'
Exemplo n.º 9
0
class CustomUser(AbstractUser):
    avatar = ImageField(upload_to=settings.PROFILE_UPLOAD_PATH, blank=True, null=True)
    subscription = models.CharField(max_length=1, blank=True, null=True)
    location = models.CharField(max_length=30, blank=True, null=True)
    about = models.TextField(max_length=1000, blank=True, null=True)
    USEREMAIL_FIELD = 'email'

    objects = CustomUserManager()
Exemplo n.º 10
0
class SpeciesImage(models.Model):
    species_image_id = models.AutoField(primary_key=True)
    species = models.ForeignKey(Species)
    image = ImageField(upload_to='species-images')
    name = models.CharField(max_length=20)
    description = models.CharField(max_length=300, blank=True, null=True)

    def __str__(self):
        return self.name
Exemplo n.º 11
0
class Child(models.Model):
    RELATIONSHIP_TYPES = [
        ('F', '아버지'),
        ('M', '어머니'),
        ('GF', '할아버지'),
        ('GM', '할머니'),
        ('O', '기타'),
    ]
    GENDER_OPTIONS = [
        ('M', '남'),
        ('F', '여'),
    ]

    name = models.CharField(
        verbose_name='이름',
        max_length=50,
    )
    gender = models.CharField(
        verbose_name='성별',
        max_length=1,
        choices=GENDER_OPTIONS,
    )
    assigned_class = models.ForeignKey(
        to=Class,
        verbose_name='반',
        related_name='children',
    )
    birthday = models.DateField()
    address = models.CharField(
        verbose_name='주소',
        max_length=100,
        blank=True,
        null=True,
    )

    parent_relationship = models.CharField(
        verbose_name='관계',
        max_length=2,
        choices=RELATIONSHIP_TYPES,
    )
    parent_phone_number = PhoneNumberField(
        verbose_name='휴대폰 번호',
    )
    profile_photo = ImageField(
        verbose_name='프로필 사진',
        upload_to='profiles',
        blank=True,
        null=True,
    )

    class Meta:
        verbose_name = '학생'
        verbose_name_plural = '학생'

    def __str__(self):
        return self.name
Exemplo n.º 12
0
class ProjectUpdatePhoto(models.Model):
    update = models.ForeignKey('ProjectUpdate', on_delete=models.CASCADE, related_name='photos')
    photo = ImageField(_('photo'), upload_to=update_image_path, help_text=_(
        'The image should have 4:3 height:width ratio for best displaying result'))
    caption = ValidXMLTextField(_('photo caption'), blank=True)
    credit = ValidXMLTextField(_('photo credit'), blank=True)

    class Meta:
        app_label = 'rsr'
        ordering = ['id']
Exemplo n.º 13
0
class Winner(models.Model):
    fio = models.CharField(_('FIO'), max_length=255)
    photo = ImageField(upload_to=make_winner_upload_path,
                       null=True,
                       blank=True)
    big_photo = ImageField(upload_to=make_winner_upload_path,
                           null=True,
                           blank=True)
    dt = models.DateField(_('date'), null=True, blank=True)
    action = models.ForeignKey(Action, related_name='winners')
    description = models.TextField(_('short text for description'),
                                   null=True,
                                   blank=True)

    class Meta:
        ordering = ['-dt']

    def __unicode__(self):
        return self.fio
Exemplo n.º 14
0
class FocusArea(models.Model):
    name = ValidXMLCharField(
        _('focus area name'),
        max_length=50,
        help_text=_(
            'The name of the focus area. This will show as the title of the focus area project '
            'listing page. (30 characters).'))
    slug = models.SlugField(
        _('slug'),
        max_length=50,
        db_index=True,
        help_text=
        _('Enter the "slug" i.e. a short word or hyphenated-words. This will be used in the '
          'URL of the focus area project listing page. (20 characters, only lower case letters, '
          'numbers, hyphen and underscore allowed.).'))
    description = ValidXMLTextField(
        _('description'),
        max_length=500,
        help_text=_(
            'Enter the text that will appear on the focus area project listing page. '
            '(500 characters).'))
    image = ImageField(
        _('focus area image'),
        upload_to=image_path,
        help_text=_('The image that will appear on the focus area project '
                    'listing page.'),
    )
    link_to = models.URLField(
        _('accordion link'),
        max_length=200,
        blank=True,
        help_text=_(
            _('Where the link in the accordion for the focus area points if other than the '
              'focus area project listing.')))

    @models.permalink
    def get_absolute_url(self):
        return ('project-directory', ())

    def projects(self):
        'return all projects that "belong" to the FA through the Categories it links to'
        Project = apps.get_model('rsr', 'Project')
        return Project.objects.filter(categories__in=self.categories.all())

    def __str__(self):
        return self.name

    class Meta:
        app_label = 'rsr'
        verbose_name = _('focus area')
        verbose_name_plural = _('focus areas')
        ordering = [
            'name',
        ]
Exemplo n.º 15
0
class Gallery(BaseCatalogModel):
    image = ImageField(upload_to='Gallery')

    def categories_count(self):
        return str(self.categories.count())

    categories_count.short_description = _('Categories')

    class Meta:
        verbose_name = _('Gallery')
        verbose_name_plural = _('Galleries')
        ordering = ['name']
Exemplo n.º 16
0
class CatalogPage(models.Model):
    catalog = models.ForeignKey(Catalog, related_name='pages', verbose_name=_('Catalog'))
    page_number = models.PositiveIntegerField(verbose_name=_('Page Number'))
    image = ImageField(upload_to='Catalogs/Pages', verbose_name=_('Image'))

    class Meta:
        verbose_name = _('Catalog Page')
        verbose_name_plural = _('Catalog Pages')
        ordering = ['page_number']

    def __str__(self):
        return self.catalog.name
Exemplo n.º 17
0
class Species(models.Model, UrlNameMixin):
    objects = SpeciesManager()
    species_id = models.AutoField(primary_key=True)
    genus = models.ForeignKey(Genus)
    origin = models.ForeignKey(Location, blank=True, null=True)
    latin_name = models.CharField(max_length=30)
    name = models.CharField(max_length=30)
    can_scale_with_pruning = models.BooleanField(default=False)
    years_till_full_size = IntegerRangeField(min_value=1,
                                             max_value=100,
                                             blank=True,
                                             null=True)
    full_size_height = IntegerRangeField(min_value=1,
                                         max_value=500,
                                         blank=True,
                                         null=True)
    full_size_width = IntegerRangeField(min_value=1,
                                        max_value=200,
                                        blank=True,
                                        null=True)
    years_till_first_production = IntegerRangeField(min_value=1,
                                                    max_value=30,
                                                    blank=True,
                                                    null=True)
    years_till_full_production = IntegerRangeField(min_value=1,
                                                   max_value=100,
                                                   blank=True,
                                                   null=True)
    featured_image = ImageField(upload_to='featured-images',
                                blank=True,
                                null=True)
    google_maps_image_url = models.CharField(max_length=100,
                                             blank=True,
                                             null=True,
                                             default=None)
    generated_name = models.CharField(max_length=60,
                                      unique=True,
                                      blank=True,
                                      null=True)

    class Meta:
        ordering = ('generated_name', )
        unique_together = (('genus', 'latin_name'))

    def save(self, *args, **kwargs):
        self.generated_name = self.__get_generated_name()
        return super(Species, self).save(*args, **kwargs)

    def __str__(self):
        return self.generated_name or self.__get_generated_name()

    def __get_generated_name(self):
        return '{0} ({1})'.format(self.name, self.latin_name)
Exemplo n.º 18
0
class Slider(defModel):
    img = ImageField(verbose_name='изображение слайдера',
                     upload_to='slider_images')
    text = models.TextField(verbose_name='Текст', null=False, blank=True)

    img_crop = ImageRatioField('img',
                               "800x300",
                               verbose_name='Обрезка изображения')

    class Meta:
        verbose_name = "Слайдер"
        verbose_name_plural = "Слайдер"
Exemplo n.º 19
0
class ExtendedFlatPage(FlatPage, BaseSeoModel):
    MENU_CHOICES = (
        (1, 'Product Information'),
        (2, 'News/Press'),
        (3, 'About Us'),
    )
    url_es = models.CharField(_('URL_ES'),
                              max_length=100,
                              db_index=True,
                              null=True,
                              blank=True)
    title_es = models.CharField(max_length=200, blank=True, null=True)
    content_es = models.TextField(blank=True, null=True)
    menu_title = models.CharField(max_length=200, default='')
    menu_title_es = models.CharField(max_length=200, default='', blank=True)
    order = models.PositiveIntegerField(
        verbose_name=_('Order'),
        help_text=
        'El orden en el que aparecera en el menu selecciondado despues de los elementos predefinidos'
    )
    menu = models.IntegerField(choices=MENU_CHOICES, default=1)
    cover = ImageField(null=True, blank=True, verbose_name=_('Cover'))
    objects = models.Manager()

    class Meta:
        verbose_name = _('flat page')
        verbose_name_plural = _('flat pages')
        ordering = ('order', )

    def get_title(self, language):
        if language == 'es' and self.title_es is not None and self.title_es:
            return self.title_es
        return self.title

    def get_menu(self, language):
        if language == 'es' and self.menu_title_es is not None and self.menu_title_es:
            return self.menu_title_es
        return self.menu_title

    def get_content(self, language):
        if language == 'es' and self.content_es is not None and self.content_es:
            return self.content_es
        return self.content

    def get_url(self, language):
        if language == 'es' and self.url_es is not None and self.url_es:
            return '/es' + self.url_es
        return '/en' + self.url

    def __str__(self):
        return self.title
Exemplo n.º 20
0
class EventImage(ThumbMixin, TimestampedModel):
    """
    Images For Events
    """
    latitude = models.FloatField(default=0.00, db_index=True)
    longitude = models.FloatField(default=0.00, db_index=True)
    image = ImageField(upload_to='event_images/')
    caption = models.CharField(max_length=100, blank=True)

    def __unicode__(self):
        return self.image.name

    @property
    def url(self):
        return self.image.url
Exemplo n.º 21
0
class Photo(models.Model):
    photo = ImageField(_('image'), upload_to='catalog')
    ordering = models.IntegerField(_('ordering'), default=100)

    def __str__(self):
        return self.photo.url

    def get_thumbnail(self, size='150x150'):
        return get_thumbnail(self.photo, size, crop='center', quality=81)

    class Meta:
        abstract = True
        ordering = ['ordering', 'id']
        verbose_name = _('photo')
        verbose_name_plural = _('photos')
Exemplo n.º 22
0
class SuperBanner(models.Model):
    image = ImageField(_('image'), upload_to='superbanner')
    title = models.CharField(_('title'), max_length=64, null=True, blank=True)
    text = RichTextField(_('text'), blank=True)
    button_link = models.CharField(_('button link'), max_length=256, null=True, blank=True)
    button_label = models.CharField(_('button label'), max_length=32, null=True, blank=True)
    ordering = models.IntegerField(_('ordering'), default=100)

    def __str__(self):
        return self.title or self.image.url

    class Meta:
        ordering = ['ordering']
        verbose_name = _('superbanner')
        verbose_name_plural = _('superbanners')
Exemplo n.º 23
0
class CollectionContent(FlatPage, BaseSeoModel):
    url_es = models.CharField(_('URL_ES'),
                              max_length=100,
                              db_index=True,
                              null=True,
                              blank=True)
    title_es = models.CharField(max_length=200, blank=True, null=True)
    content_es = models.TextField(blank=True, null=True)
    menu_title = models.CharField(max_length=200, default='')
    menu_title_es = models.CharField(max_length=200, default='', blank=True)
    order = models.PositiveIntegerField(
        verbose_name=_('Order'),
        help_text=
        'El orden en el que aparecera en el menu selecciondado despues de los elementos predefinidos'
    )
    cover = ImageField(null=True, blank=True, verbose_name=_('Cover'))
    collection = models.ForeignKey(Collection,
                                   related_name='content',
                                   verbose_name='collection')
    objects = models.Manager()

    class Meta:
        verbose_name = _('Collection content')
        verbose_name_plural = _('Collection content')
        ordering = ('order', )

    def get_title(self, language):
        if language == 'es' and self.title_es is not None and self.title_es:
            return self.title_es
        return self.title

    def get_menu(self, language):
        if language == 'es' and self.menu_title_es is not None and self.menu_title_es:
            return self.menu_title_es
        return self.menu_title

    def get_content(self, language):
        if language == 'es' and self.content_es is not None and self.content_es:
            return self.content_es
        return self.content

    def get_url(self, language):
        if language == 'es' and self.url_es is not None and self.url_es:
            return self.url_es
        return self.url

    def __str__(self):
        return self.title
Exemplo n.º 24
0
class EventReport(models.Model):
    event_report_id = models.AutoField(primary_key=True)
    submitted_by = models.ForeignKey(User)
    datetime = models.DateTimeField(default=timezone.now)
    fruiting_plant = models.ForeignKey(FruitingPlant)
    was_auto_generated = models.BooleanField(default=False)
    event_type = models.ForeignKey(EventType)
    affinity = models.IntegerField(choices=AFFINITY_CHOICES,
                                   default=AFFINITY_NEUTRAL)
    notes = models.TextField(blank=True, null=True)
    image = ImageField(upload_to=upload_image, blank=True, null=True)

    def __str__(self):
        value = '{0} - {1} - {2}'.format(self.datetime, self.event_type,
                                         str(self.fruiting_plant))
        return value
Exemplo n.º 25
0
class Blog(defModel):
    img = ImageField(verbose_name='изображение', upload_to='blogs')
    img_crop_thumbnail = ImageRatioField('img',
                                         '310x280',
                                         verbose_name='Обрезка миниатюры')
    title = models.CharField(max_length=255,
                             verbose_name='Заголовок новости',
                             blank=True)
    text = models.TextField(verbose_name='Текст новости')

    def img_admin(self):
        return format_html("<a href ='%s/change/'><img src='%s' ></a>" %
                           (self.id, get_thumbnail(self.img, 'x100').url))

    class Meta:
        verbose_name = "Новость"
        verbose_name_plural = "Новости"
Exemplo n.º 26
0
class Person(models.Model):
    first_name = models.CharField(max_length=60)
    last_name = models.CharField(max_length=60)
    birth_date = models.DateField()
    bio = models.TextField()
    email = models.EmailField(max_length=75)
    skype = models.CharField(max_length=40)
    jabber = models.CharField(max_length=75)
    other_contacts = models.TextField()
    photo = ImageField(upload_to='images/uploads', null=True, blank=True)

    def _get_full_name(self):
        return '%s %s' % (self.first_name, self.last_name)
    full_name = property(_get_full_name)

    def __unicode__(self):
        return u"%s %s" % (self.last_name, self.first_name)
Exemplo n.º 27
0
class Image(OrderedModel):

    product = models.ForeignKey(
        Product,
        verbose_name=_('product'),
        related_name='images',
        on_delete=models.CASCADE,
    )
    image = ImageField(
        _('image'),
        upload_to='product_images',
    )

    order_with_respect_to = 'product'

    class Meta:
        verbose_name = _('image')
        verbose_name_plural = _('images')

    def __str__(self):
        return self.image.name.split(os.path.sep)[-1]
Exemplo n.º 28
0
class Photo(models.Model):
    album = models.ForeignKey(
        to=Album,
        on_delete=models.CASCADE,
        verbose_name='앨범',
        related_name='photos',
    )
    tagged_children = models.ManyToManyField(
        to=Child,
        verbose_name='학생',
        related_name='photos',
        blank=True,
    )
    image = ImageField(
        verbose_name='사진 경로',
        upload_to='photos',
    )

    class Meta:
        verbose_name = '사진'
        verbose_name_plural = '사진'
Exemplo n.º 29
0
class Gallery(defModel):
    img = ImageField(verbose_name='изображение галереи', upload_to='gallery')
    img_crop = ImageRatioField('img',
                               '1200x600',
                               verbose_name='Обрезка оригинала')
    img_crop_thumbnail = ImageRatioField('img',
                                         '206x140',
                                         verbose_name='Обрезка миниатюры')

    text = models.TextField(verbose_name='Ифнормация', blank=True)
    title = models.CharField(max_length=255,
                             verbose_name="Заголовок",
                             blank=True)
    prior = models.IntegerField(verbose_name='приоритет порядка отображения',
                                default=0)

    def img_admin(self):
        return format_html("<a href ='%s/change/'><img src='%s' ></a>" %
                           (self.id, get_thumbnail(self.img, 'x80').url))

    class Meta:
        verbose_name = "Фото"
        verbose_name_plural = "Фотографии"
Exemplo n.º 30
0
class UserProfile(AuditableModel):

    GENDER_CHOICES = Enumeration([(1, 'MALE', strings.GENDER_MALE),
                                  (2, 'FEMALE', strings.GENDER_FEMALE),
                                  (3, 'UNDISCLOSED',
                                   strings.GENDER_UNDISCLOSED)])

    user = models.OneToOneField(
        User,
        verbose_name=strings.USER_PROFILE_USER,
    )

    gender = models.PositiveIntegerField(
        verbose_name=strings.USER_PROFILE_GENDER,
        choices=GENDER_CHOICES,
        default=3,
    )

    hometown = models.CharField(
        verbose_name=strings.USER_PROFILE_HOMETOWN,
        max_length=75,
        blank=True,
        default=u'Lima, Perú',
    )

    language = models.PositiveIntegerField(
        verbose_name=strings.USER_PROFILE_LANGUAGE,
        choices=constants.LANGUAGE_CHOICES,
        default=1)

    invitations_left = models.PositiveIntegerField(
        verbose_name=strings.USER_PROFILE_INVITATIONS_LEFT,
        default=settings.CLOSED_BETA_DEFAULT_ADDITIONAL_INVITATIONS)

    # a User can have circuits as favorites
    favorites = models.ManyToManyField(
        Circuit,
        related_name='follower_profiles',
    )

    bio = models.TextField(
        verbose_name=strings.USER_PROFILE_BIO,
        blank=True,
    )

    picture = ImageField(
        verbose_name=strings.USER_PROFILE_AVATAR,
        upload_to=uuid_based_picture_name('pictures/users'),
        blank=True,
        null=True,
    )

    # Organization data
    is_organization = models.BooleanField(
        verbose_name=strings.USER_PROFILE_IS_ORGANIZATION, default=False)

    def __unicode__(self):
        return u'%s' % (self.user.get_full_name(), )

    class Meta:
        verbose_name = strings.USER_PROFILE_VERBOSE_NAME
        verbose_name_plural = strings.USER_PROFILE_VERBOSE_NAME_PLURAL

    @staticmethod
    def get_or_create(email, first, last, fb_id):
        """logs a user if email dont exists, or creates a user logs
        in if email is in use"""
        from common.utils.verbose_password_generator import pass_generator

        # email exists is our database
        if User.objects.filter(email=email).exists():
            user = User.objects.get(email=email)
        # email is new to our database so create a user and login
        else:
            psw = pass_generator()
            user = UserProfile.create_user_with_tokens(first=first,
                                                       last=last,
                                                       email=email,
                                                       password=psw)
            fb_profile = UserFacebook(
                user=user,
                name=first + ' ' + last,
                facebook_graphid=fb_id,
            )
            fb_profile.save()
        return user

    @staticmethod
    def create_user_with_tokens(first,
                                last,
                                email,
                                password,
                                username=None,
                                facebook_oauth_token=None,
                                facebook_graphid=None,
                                twitter_oauth_token=None,
                                twitter_oauth_secret=None):
        """
        method for creating a user, bind to userprofile and bind to
        twitter and facebook profiles if needed
        """
        from django.core.mail import EmailMultiAlternatives

        #Check that email is not already in use
        if User.objects.filter(email=email).exists():
            return None

        # create a hash from email in order to be used as username
        username = str(hashlib.sha1(email).hexdigest())
        username = NumConv(16).str2int(username)
        username = NumConv(64).int2str(username)

        # create a new User
        new_user = User.objects.create_user(username, email, password)
        new_user.first_name = (first)
        new_user.last_name = (last)
        new_user.save()
        # bind new_user to a UserProfile
        new_profile = UserProfile(user=new_user)
        new_profile.save()
        # bind to Twitter account if comes
        if twitter_oauth_token is not None:
            tw = UserTwitter(
                user=new_user,
                oauth_token_key=twitter_oauth_token,
                oauth_token_secret=twitter_oauth_secret,
                screen_name=username,
            )
            tw.save()
        # bind to facebook if comes
        if facebook_oauth_token is not None:
            fb = UserFacebook(user=new_user,
                              facebook_access_token=facebook_oauth_token,
                              facebook_graphid=facebook_graphid)
            fb.save()

        #send an email to user with its password, and indications
        # to change it and that he can continue to log in with
        # facebook
        #       mandatory fields
        subject = strings.EMAIL_ACCOUNT_CREATED_FB_SUBJECT
        to = new_user.email
        from_email = settings.DEFAULT_FROM_EMAIL
        # get text version of the message
        text_content = strings.EMAIL_ACCOUNT_CREATED_FB_CONTENT % {
            'username': new_user.email,
            'password': password
        }
        #       FIXME: HTML version implementation pending
        # html_content = self.get_email_content_from_type(
        #     self.notification_type
        # )
        msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
        #msg.attach_alternative(html_content, "text/html")
        msg.send()

        return new_user

    def save_image_from_url(self, url):
        """Store image locally from url"""
        import urllib
        import os
        from django.core.files import File
        result = urllib.urlretrieve(url)
        self.picture.save(os.path.basename(url), File(open(result[0])))
        self.save()

    def is_following(self, user):
        if UserFollower.objects.filter(owner=user).filter(
                follower=self.user).count() > 0:
            return True
        else:
            return False

    def is_follower(self, user):
        if UserFollower.objects.filter(owner=self.user).filter(
                follower=user).count() > 0:
            return True
        else:
            return False

    def follow(self, user):
        if self.user == user:
            return False
        if self.is_following(user):
            return False
        else:
            record = UserFollower(owner=user, follower=self.user)
            record.save()
            return True

    def unfollow(self, user):
        if self.user == user:
            return False
        try:
            record = UserFollower.objects.get(owner=user, follower=self.user)
            record.delete()
            return True
        except UserFollower.DoesNotExist:
            return False

    def add_follower(self, user):
        if self.user == user:
            return False
        if self.is_follower(user):
            return False
        else:
            record = UserFollower(owner=self.user, follower=user)
            record.save()
            return True

    def remove_follower(self, user):
        if self.user == user:
            return False
        try:
            record = UserFollower.objects.get(owner=self.user, follower=user)
            record.delete()
            return True
        except UserFollower.DoesNotExist:
            return False

    def get_followers(self):
        if hasattr(self.user, 'follower_records_as_owner'):
            records = self.user.follower_records_as_owner.all()
            user_id_list = [record.follower.id for record in records]
            return User.objects.filter(
                id__in=user_id_list).order_by('username')
        else:
            return User.objects.none()

    def get_followed_users(self):
        if hasattr(self.user, 'follower_records_as_follower'):
            records = self.user.follower_records_as_follower.all()
            user_id_list = [record.owner.id for record in records]
            return User.objects.filter(
                id__in=user_id_list).order_by('username')
        else:
            return User.objects.none()

    def get_restful_link_metadata(self, rel='alternate'):
        metadata = OrderedDict()
        metadata['href'] = self.get_restful_url()
        metadata['rel'] = rel
        metadata['title'] = self.user.get_full_name()
        metadata['type'] = 'application/json'
        return metadata

    def get_restful_url(self):
        return "%s%s" % (settings.API_V1_PREFIX.rstrip('/'),
                         reverse('user_resource',
                                 kwargs={'user_id': self.user.pk}))