예제 #1
0
    def handle(self, **options):
        start_time = time.time()
        num_sent = 0
        sleep_time = 0
        all_events = Event.objects \
            .filter(sended_notify=False) \
            .exclude(Q(author__isnull=True) | Q(author__username="******") | Q(field__name='review_id')) \
            .distinct() \
            .select_related("issue", "author") \
            .prefetch_related("file_set") \
            .order_by("issue")
        domain = Site.objects.get_current().domain
        from_email = settings.DEFAULT_FROM_EMAIL
        for issue in Issue.objects\
                .filter(event__in=all_events) \
                .distinct() \
                .select_related("student", "responsible", "task", "task__course") \
                .prefetch_related("followers"):
            events = all_events.filter(issue=issue)
            if not events:
                continue
            notify_messages = []
            excluded_ids = []
            if issue.student.email:
                message = get_message(issue.student, _noop(u'studentom'),
                                      issue, events, from_email, domain)
                if message:
                    notify_messages.append(message)
                excluded_ids.append(issue.student.id)

            if issue.responsible and issue.responsible.id not in excluded_ids:
                excluded_ids.append(issue.student.id)
                if issue.responsible.email:
                    message = get_message(issue.responsible,
                                          _noop(u'proverjaushim'), issue,
                                          events, from_email, domain)
                    if message:
                        notify_messages.append(message)

            for follower in issue.followers.exclude(id__in=excluded_ids):
                if follower.email:
                    message = get_message(follower, _noop(u'nabludatelem'),
                                          issue, events, from_email, domain)
                    if message:
                        notify_messages.append(message)

            if notify_messages:
                num_sent += send_mass_mail_html(notify_messages)
                time.sleep(1)
                sleep_time += 1

            for event in events:
                event.sended_notify = True
                event.save()

        # logging to cron log
        print "Command send_issue_notifications send {0} email(s) and took {1} seconds (sleep {2} seconds)" \
            .format(num_sent, time.time() - start_time, sleep_time)
예제 #2
0
    def handle(self, **options):
        start_time = time.time()
        num_sent = 0
        sleep_time = 0
        all_events = Event.objects \
            .filter(sended_notify=False) \
            .exclude(Q(author__isnull=True) | Q(author__username="******") | Q(field__name='review_id')) \
            .distinct() \
            .select_related("issue", "author") \
            .prefetch_related("file_set") \
            .order_by("issue")
        domain = Site.objects.get_current().domain
        from_email = settings.DEFAULT_FROM_EMAIL
        for issue in Issue.objects\
                .filter(event__in=all_events) \
                .distinct() \
                .select_related("student", "responsible", "task", "task__course") \
                .prefetch_related("followers"):
            events = all_events.filter(issue=issue)
            if not events:
                continue
            notify_messages = []
            excluded_ids = []
            if issue.student.email:
                message = get_message(issue.student, _noop(u'studentom'), issue, events, from_email, domain)
                if message:
                    notify_messages.append(message)
                excluded_ids.append(issue.student.id)

            if issue.responsible and issue.responsible.id not in excluded_ids:
                excluded_ids.append(issue.student.id)
                if issue.responsible.email:
                    message = get_message(
                        issue.responsible, _noop(u'proverjaushim'), issue, events, from_email, domain
                    )
                    if message:
                        notify_messages.append(message)

            for follower in issue.followers.exclude(id__in=excluded_ids):
                if follower.email:
                    message = get_message(follower, _noop(u'nabludatelem'), issue, events, from_email, domain)
                    if message:
                        notify_messages.append(message)

            if notify_messages:
                num_sent += send_mass_mail_html(notify_messages)
                time.sleep(1)
                sleep_time += 1

            for event in events:
                event.sended_notify = True
                event.save()

        # logging to cron log
        print "Command send_issue_notifications send {0} email(s) and took {1} seconds (sleep {2} seconds)" \
            .format(num_sent, time.time() - start_time, sleep_time)
예제 #3
0
class Contact(models.Model):
    type = models.ForeignKey(ContactType, verbose_name=_('Contact Type'))
    url = models.URLField(_noop('URL'))
    text = models.CharField(_('Text'), max_length=200)
    sede = models.ForeignKey(Sede,
                             verbose_name=_noop('Sede'),
                             related_name='contacts')

    def __unicode__(self):
        return u"%s - %s" % (self.type.name, self.text)
예제 #4
0
파일: models.py 프로젝트: nicolas17/eventoL
class Event(models.Model):
    name = models.CharField(_('Event Name'), max_length=200)
    date = models.DateField(_('Date'), help_text=_('When will your event be?'))
    limit_proposal_date = models.DateField(
        _('Limit Proposals Date'),
        help_text=_('Limit date to submit talk proposals'))
    slug = models.CharField(_('URL'),
                            max_length=200,
                            unique=True,
                            help_text=_('For example: flisol-caba'),
                            validators=[validate_url])
    external_url = models.URLField(
        _('External URL'),
        blank=True,
        null=True,
        default=None,
        help_text=_('http://www.my-awesome-event.com'))
    email = models.EmailField(verbose_name=_('Email'))
    event_information = RichTextField(verbose_name=_('Event Information'),
                                      help_text=_('Event Information HTML'),
                                      blank=True,
                                      null=True)
    schedule_confirm = models.BooleanField(_('Confirm Schedule'),
                                           default=False)
    place = models.TextField(_('Place'))  # TODO: JsonFIELD
    home_image = models.ForeignKey(Image,
                                   related_name="eventol_home_image",
                                   verbose_name=_noop('Home Image'),
                                   blank=True,
                                   null=True)
    cover_image = models.ForeignKey(Image,
                                    related_name="eventol_cover_image",
                                    verbose_name=_noop('Cover Image'),
                                    blank=True,
                                    null=True)

    def get_absolute_url(self):
        if self.external_url:
            return self.external_url
        return "/event/" + self.slug + '/'

    @property
    def talk_proposal_is_open(self):
        return self.limit_proposal_date >= datetime.date.today()

    @property
    def registration_is_open(self):
        return self.date >= datetime.date.today()

    def __unicode__(self):
        return u"%s" % (self.name)

    class Meta(object):
        ordering = ['name']
예제 #5
0
class Contact(models.Model):
    type = models.ForeignKey(ContactType, verbose_name=_('Contact Type'))
    url = models.CharField(_noop('Direccion'),
                           help_text=_('i.e. https://twitter.com/flisol'),
                           max_length=200)
    text = models.CharField(_('Text'), max_length=200,
                            help_text=_('i.e. @Flisol'))
    event = models.ForeignKey(Event, verbose_name=_noop('Event'),
                              related_name='contacts', blank=True, null=False)

    def __str__(self):
        return '{} - {} - {}'.format(self.event, self.type, self.text)

    class Meta(object):
        verbose_name = _('Contact')
        verbose_name_plural = _('Contacts')
예제 #6
0
class AccountSettings(CurrentPageSettings, LoginRequiredMixin,
                      SuccessMessageMixin, FormView):
    template_name = 'um/settings_account.html'
    current_settings = _noop('Account')
    form_class = forms.DeleteUserForm
    success_url = reverse_lazy('reader:home')
    success_message = _(
        'The account will be permanently deleted in %d hours, sign in again '
        'to reactivate it'
    ) % int(UM_DELETE_ACCOUNT_AFTER.total_seconds() / 3600)

    def get_form_kwargs(self):
        kwargs = super().get_form_kwargs()
        kwargs.update({
            'current_username': self.request.user.username
        })
        return kwargs

    def form_valid(self, form):
        self.request.user.um_profile.deletion_pending = True
        self.request.user.um_profile.save()
        tasks.tasks.schedule_at(
            'um:delete_user',
            now() + UM_DELETE_ACCOUNT_AFTER,
            self.request.user.id
        )
        logout(self.request)
        return super().form_valid(form)
예제 #7
0
파일: models.py 프로젝트: nicolas17/eventoL
class Comment(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    body = models.TextField()
    activity = models.ForeignKey(Activity, verbose_name=_noop('Activity'))
    user = models.ForeignKey(User, verbose_name=_('User'))

    def __unicode__(self):
        return u"%s: %s" % (self.user, self.activity)

    @classmethod
    def filter_by(cls, queryset, field, value):
        if field == 'event':
            return queryset.filter(activity__event__pk=value)
        return queryset

    def save(self, *args, **kwargs):
        """Email when a comment is added."""
        # TODO: Email when a comment is added.
        if "notify" in kwargs:
            del kwargs["notify"]
        super(Comment, self).save(*args, **kwargs)

    class Meta(object):
        verbose_name = _('Comment')
        verbose_name_plural = _('Comments')
예제 #8
0
class EventDate(models.Model):
    event = models.ForeignKey(Event, verbose_name=_noop('Event'),
                              blank=True, null=True)
    date = models.DateField(_('Date'), help_text=_('When will your event be?'))

    def __str__(self):
        return '{} - {}'.format(self.event, self.date)
예제 #9
0
파일: models.py 프로젝트: nicolas17/eventoL
class EventUser(models.Model):
    user = models.ForeignKey(User,
                             verbose_name=_('User'),
                             blank=True,
                             null=True)
    nonregisteredattendee = models.ForeignKey(
        NonRegisteredAttendee,
        verbose_name=_('Non Registered Attendee'),
        blank=True,
        null=True)
    event = models.ForeignKey(Event, verbose_name=_noop('Event'))
    assisted = models.BooleanField(_('Assisted'), default=False)
    ticket = models.BooleanField(_('Ticket sent'), default=False)

    def __unicode__(self):
        if self.user:
            return u'%s %s' % (self.user.first_name, self.user.last_name)
        if self.nonregisteredattendee:
            return u'%s %s' % (self.nonregisteredattendee.first_name,
                               self.nonregisteredattendee.last_name)

    class Meta(object):
        unique_together = (("event", "user"), )
        verbose_name = _('Event User')
        verbose_name_plural = _('Event Users')
예제 #10
0
class EventInfo(models.Model):
    sede = models.ForeignKey(Sede, verbose_name=_noop('Sede'))
    html = models.TextField()

    class Meta:
        verbose_name = _('Event Info')
        verbose_name_plural = _('Envent Info (s)')
예제 #11
0
파일: models.py 프로젝트: hernnyy/eventoL
class EventDate(models.Model):
    event = models.ForeignKey(Event,
                              verbose_name=_noop('Event'),
                              blank=True,
                              null=True)
    date = models.DateField(_('Date'), help_text=_('When will your event be?'))

    def __unicode__(self):
        return u"%s - %s" % (self.event.name, self.date)
예제 #12
0
class InterfaceSettings(CurrentPageSettings, LoginRequiredMixin, UpdateView):
    model = models.UMProfile
    fields = ['language', 'items_per_page']
    template_name = 'um/settings_interface.html'
    success_url = reverse_lazy('um:settings-interface')
    current_settings = _noop('Interface')

    def get_object(self, *args, **kwargs):
        return self.request.user.um_profile
예제 #13
0
파일: models.py 프로젝트: GNUtn/eventoL
 def __str__(self):
     return _noop(
         'Message received from: {name}\n'
         'User email: {email}\n\n'
         '{message}'
     ).format(
         name=self.name,
         email=self.email,
         message=self.message
     )
예제 #14
0
 def __str__(self):
     return _noop(
         'Message received from: {name}\n'
         'User email: {email}\n\n'
         '{message}'
     ).format(
         name=self.name,
         email=self.email,
         message=self.message
     )
예제 #15
0
class JudgeVerdict(Enum):

    invalid_submission = _noop("Invalid Submission")
    compilation_failed = _noop("Compilation Failed")
    runtime_error = _noop("Runtime error")
    time_limit_exceeded = _noop("Time limit exceeded")
    memory_limit_exceeded = _noop("Memory limit exceeded")
    judge_failed = _noop("Judge failed")
    ok = _noop("OK")
예제 #16
0
파일: models.py 프로젝트: hernnyy/eventoL
class AttendeeAttendanceDate(models.Model):
    attendee = models.ForeignKey(Attendee,
                                 verbose_name=_noop('Attendee'),
                                 blank=False,
                                 null=False)
    date = models.DateTimeField(_('Date'),
                                help_text=_('The date of the attendance'),
                                auto_now_add=True)

    def __unicode__(self):
        return u"%s - %s" % (unicode(self.attendee), self.date)
예제 #17
0
파일: models.py 프로젝트: hernnyy/eventoL
class EventUserAttendanceDate(models.Model):
    event_user = models.ForeignKey(EventUser,
                                   verbose_name=_noop('Event User'),
                                   blank=False,
                                   null=False)
    date = models.DateTimeField(_('Date'),
                                help_text=_('The date of the attendance'),
                                auto_now_add=True)

    def __unicode__(self):
        return u"%s - %s" % (unicode(self.event_user), self.date)
예제 #18
0
class InstallationMessage(models.Model):
    event = models.ForeignKey(Event, verbose_name=_noop('Event'))
    message = RichTextField(verbose_name=_('Message Body'), help_text=_(
        'Email message HTML Body'), blank=True, null=True)
    contact_email = models.EmailField(verbose_name=_('Contact Email'))

    class Meta(object):
        verbose_name = _('Post-install Email')
        verbose_name_plural = _('Post-install Emails')

    def __str__(self):
        return str(self.event)
예제 #19
0
파일: models.py 프로젝트: nicolas17/eventoL
class ContactMessage(models.Model):
    name = models.CharField(max_length=255, verbose_name=_('Name'))
    email = models.EmailField(verbose_name=_('Email'))
    message = models.TextField(verbose_name=_('Message'))
    event = models.ForeignKey(Event,
                              verbose_name=_noop('Event'),
                              blank=True,
                              null=True)

    class Meta(object):
        verbose_name = _('Contact Message')
        verbose_name_plural = _('Contact Messages')
예제 #20
0
파일: models.py 프로젝트: nicolas17/eventoL
class Contact(models.Model):
    type = models.ForeignKey(ContactType, verbose_name=_('Contact Type'))
    url = models.CharField(_noop('Direccion'),
                           help_text=_('i.e. https://twitter.com/flisol'),
                           max_length=200)
    text = models.CharField(_('Text'),
                            max_length=200,
                            help_text=_('i.e. @Flisol'))
    # null should be false, but I put true due to a django bug with formsets:
    # https://code.djangoproject.com/ticket/13776
    event = models.ForeignKey(Event,
                              verbose_name=_noop('Event'),
                              related_name='contacts',
                              blank=True,
                              null=True)

    def __unicode__(self):
        return u"%s - %s - %s" % (self.event.name, self.type.name, self.text)

    class Meta(object):
        verbose_name = _('Contact')
        verbose_name_plural = _('Contacts')
예제 #21
0
class Attendee(models.Model):
    objects = AttendeeManager()
    created_at = models.DateTimeField(_('Created At'), auto_now_add=True)
    updated_at = models.DateTimeField(_('Updated At'), auto_now=True)
    first_name = models.CharField(_('First Name'), max_length=200, blank=True, null=True)
    last_name = models.CharField(_('Last Name'), max_length=200, blank=True, null=True)
    nickname = models.CharField(_('Nickname'), max_length=200, blank=True, null=True)
    email = models.EmailField(_('Email'))
    event = models.ForeignKey(Event, verbose_name=_('Event'))
    ticket = models.ForeignKey(Ticket, verbose_name=_('Ticket'), blank=True, null=True)
    is_installing = models.BooleanField(_('Is going to install?'), default=False)
    additional_info = models.CharField(_('Additional Info'), max_length=200, blank=True, null=True,
                                       help_text=_('Any additional info you consider \
                                                   relevant for the organizers'))
    email_confirmed = models.BooleanField(_('Email confirmed?'), default=False)
    email_token = models.CharField(_('Confirmation Token'), max_length=200, blank=True, null=True)
    registration_date = models.DateTimeField(_('Registration Date'), blank=True, null=True)
    event_user = models.ForeignKey(
        EventUser, verbose_name=_noop('Event User'), blank=True, null=True)

    class Meta(object):
        verbose_name = _('Attendee')
        verbose_name_plural = _('Attendees')
        unique_together = (('event', 'email'),)

    def __str__(self):
        if self.event_user:
            return str(self.event_user)
        return '{} - {} {} - {} - {}'.format(self.event, self.first_name, self.last_name,
                                             self.nickname, self.email)

    def get_ticket_data(self):
        if self.ticket is None:
            ticket = Ticket()
            ticket.save()
            self.ticket = ticket
            self.save()

        date = self.event.eventdate_set.order_by('date').first().date
        return {'first_name': self.first_name, 'last_name': self.last_name,
                'nickname': self.nickname, 'email': self.email,
                'event': self.event, 'event_date': date, 'ticket': self.ticket}

    def attended(self):
        return AttendeeAttendanceDate.objects.filter(attendee=self).exists()

    def attended_today(self):
        return AttendeeAttendanceDate.objects.filter(
            attendee=self, date__date=timezone.localdate()).exists()
예제 #22
0
class Room(models.Model):
    event = models.ForeignKey(Event, verbose_name=_noop('Event'),
                              blank=True, null=True)
    name = models.CharField(_('Name'), max_length=200,
                            help_text=_('i.e. Classroom 256'))

    def __str__(self):
        return '{} - {}'.format(self.event, self.name)

    def get_schedule_info(self):
        return {'id': self.pk, 'title': self.name}

    class Meta(object):
        verbose_name = _('Room')
        verbose_name_plural = _('Rooms')
        ordering = ['name']
예제 #23
0
파일: models.py 프로젝트: nicolas17/eventoL
class Room(models.Model):
    event = models.ForeignKey(Event,
                              verbose_name=_noop('Event'),
                              blank=True,
                              null=True)
    name = models.CharField(_('Name'),
                            max_length=200,
                            help_text=_('i.e. Classroom 256'))

    def __unicode__(self):
        return u"%s - %s" % (self.event.name, self.name)

    class Meta(object):
        verbose_name = _('Room')
        verbose_name_plural = _('Rooms')
        ordering = ['name']
예제 #24
0
class Room(models.Model):
    sede = models.ForeignKey(Sede, verbose_name=_noop('Sede'))
    name = models.CharField(_('Name'),
                            max_length=200,
                            help_text=_('i.e. Classroom 256'))
    for_type = models.ForeignKey(
        TalkType,
        verbose_name=_('For talk type'),
        help_text=_('The type of talk the room is going to be used for.'))

    def __unicode__(self):
        return u"%s - %s" % (self.sede.name, self.name)

    class Meta:
        verbose_name = _('Room')
        verbose_name_plural = _('Rooms')
예제 #25
0
class Collaborator(models.Model):
    user = models.OneToOneField(User,
                                verbose_name=_('User'),
                                blank=True,
                                null=True)
    sede = models.ForeignKey(Sede,
                             verbose_name=_noop('Sede'),
                             help_text=_('Sede you are going to collaborate'))
    phone = models.CharField(_('Phone'), max_length=200, blank=True, null=True)
    address = models.CharField(_('Address'),
                               max_length=200,
                               blank=True,
                               null=True)
    assisted = models.BooleanField(_('Assisted'), default=False)
    is_coordinator = models.BooleanField(
        _('Is Coordinator'),
        default=False,
        help_text=_('The user is the coordinator of the sede?'))
    assignation = models.CharField(
        _('Assignation'),
        max_length=200,
        blank=True,
        null=True,
        help_text=_('Assignations given to the user (i.e. Talks, Coffee...)'))
    additional_info = models.CharField(
        _('Additional Info'),
        max_length=200,
        blank=True,
        null=True,
        help_text=_('Any additional info you consider relevant'))
    time_availability = models.CharField(
        _('Time Availability'),
        max_length=200,
        blank=True,
        null=True,
        help_text=
        _('Time gap in which you can help during the event. i.e. "All the event", "Morning", "Afternoon"...'
          ))

    def __unicode__(self):
        return str(self.user)

    class Meta:
        verbose_name = _('Collaborator')
        verbose_name_plural = _('Collaborators')
예제 #26
0
파일: models.py 프로젝트: tzulberti/eventoL
class ContactMessage(models.Model):
    name = models.CharField(max_length=255, verbose_name=_('Name'))
    email = models.EmailField(verbose_name=_('Email'))
    message = models.TextField(verbose_name=_('Message'))
    event = models.ForeignKey(Event,
                              verbose_name=_noop('Event'),
                              blank=True,
                              null=True)

    def __str__(self):
        return _noop('Message received from: {name}\n'
                     'User email: {email}\n\n'
                     '{message}').format(name=self.name,
                                         email=self.email,
                                         message=self.message)

    class Meta:
        verbose_name = _('Contact Message')
        verbose_name_plural = _('Contact Messages')
예제 #27
0
class AttendeeAttendanceDate(models.Model):
    created_at = models.DateTimeField(_('Created At'), auto_now_add=True)
    updated_at = models.DateTimeField(_('Updated At'), auto_now=True)
    attendee = models.ForeignKey(Attendee, verbose_name=_noop('Attendee'),
                                 blank=False, null=False)
    date = models.DateTimeField(_('Date'),
                                help_text=_('The date of the attendance'),
                                auto_now_add=True)
    attendance_mode_choices = (
        ('1', _('Qr autoregistration')),
        ('2', _('Qr ticket')),
        ('3', _('Previous registration')),
        ('4', _('unregistred'))
    )
    mode = models.CharField(_('Mode'), choices=attendance_mode_choices,
                            max_length=200, blank=True, null=True,
                            help_text=_('Attendance mode'))

    def __str__(self):
        return '{} - {}'.format(self.attendee, self.date)
예제 #28
0
class Attendee(models.Model):
    name = models.CharField(_('First Name'),
                            max_length=200,
                            blank=True,
                            null=True)
    surname = models.CharField(_('Last Name'),
                               max_length=200,
                               blank=True,
                               null=True)
    nickname = models.CharField(_('Nickname'),
                                max_length=200,
                                blank=True,
                                null=True)
    email = models.EmailField(_('Email'), max_length=200)
    sede = models.ForeignKey(Sede,
                             verbose_name=_noop('Sede'),
                             help_text=_('Sede you are going to attend'))
    assisted = models.BooleanField(_('Assisted'), default=False)
    is_going_to_install = models.BooleanField(
        _('Is going to install?'),
        default=False,
        help_text=_('Are you going to bring a PC for installing it?'))
    additional_info = models.TextField(
        _('Additional Info'),
        blank=True,
        null=True,
        help_text=_('i.e. Wath kind of PC are you bringing'))

    def __unicode__(self):
        return self.email

    class Meta:
        verbose_name = _('Attendee')
        verbose_name_plural = _('Attendees')
        unique_together = (
            'email',
            'sede',
        )
예제 #29
0
 def __str__(self):
     return _noop('%(code)s %(name)s') % {
         'code': self.code,
         'name': self.name
     }
예제 #30
0
파일: models.py 프로젝트: tzulberti/eventoL
class Event(models.Model):
    objects = EventManager()
    created_at = models.DateTimeField(_('Created At'), auto_now_add=True)
    updated_at = models.DateTimeField(_('Updated At'), auto_now=True)
    name = models.CharField(_('Event Name'), max_length=50)
    abstract = models.TextField(_('Abstract'),
                                max_length=250,
                                help_text=_('Idea of the event \
                                            (one or two sentences)'))
    limit_proposal_date = models.DateField(
        _('Limit Proposals Date'),
        help_text=_('Limit date to submit talk proposals'))
    registration_closed = models.BooleanField(
        default=False,
        help_text=_("set it to True to force the registration to be closed"))

    tags = models.ManyToManyField(
        EventTag,
        blank=True,
        help_text=_("Select tags to show this event in the EventTag landing"))
    event_slug = models.SlugField(_('URL'),
                                  max_length=100,
                                  help_text=_('For example: flisol-caba'),
                                  unique=True)
    customForm = models.ForeignKey(CustomForm,
                                   verbose_name=_noop('Custom form'),
                                   blank=True,
                                   null=True)
    cname = models.CharField(_('CNAME'),
                             max_length=50,
                             blank=True,
                             null=True,
                             help_text=_('For example: flisol-caba'),
                             validators=[validate_url])
    registration_code = models.UUIDField(
        default=uuid4,
        editable=False,
        unique=True,
        verbose_name=_('code'),
        help_text=_('Code validator for in-place event self-registration'),
    )
    external_url = models.URLField(
        _('External URL'),
        blank=True,
        null=True,
        default=None,
        help_text=_('http://www.my-awesome-event.com'))
    email = models.EmailField(verbose_name=_('Email'))
    event_information = RichTextField(verbose_name=_('Event Info'),
                                      help_text=_('Event Info HTML'),
                                      blank=True,
                                      null=True)
    schedule_confirmed = models.BooleanField(_('Schedule Confirmed'),
                                             default=False)
    use_installations = models.BooleanField(_('Use Installations'),
                                            default=True)
    use_installers = models.BooleanField(_('Use Installers'), default=True)
    use_collaborators = models.BooleanField(_('Use Collaborators'),
                                            default=True)
    use_proposals = models.BooleanField(_('Use Proposals'), default=True)
    use_talks = models.BooleanField(_('Use Talks'), default=True)
    is_flisol = models.BooleanField(_('Is FLISoL'), default=False)
    use_schedule = models.BooleanField(_('Use Schedule'), default=True)
    place = models.TextField(_('Place'))
    image = ImageCropField(upload_to='images_thumbnails',
                           verbose_name=_('Image'),
                           blank=True,
                           null=True)
    cropping = ImageRatioField(
        'image',
        '700x450',
        size_warning=True,
        verbose_name=_('Cropping'),
        free_crop=True,
        help_text=_('The image must be 700x450 px. You can crop it here.'))
    activities_proposal_form_text = models.TextField(
        blank=True,
        null=True,
        help_text=_("A message to show in the activities proposal form"))
    template = models.FileField(
        _('Template'),
        upload_to='templates',
        blank=True,
        null=True,
        help_text=_('Custom template HTML for event index page'))
    css_custom = models.FileField(
        _('Custom css'),
        upload_to='custom_css',
        blank=True,
        null=True,
        help_text=_('Custom CSS file for event page'))

    @classmethod
    def get_fields_dependencies(cls):
        return {
            'use_proposals':
            ['limit_proposal_date', 'activities_proposal_form_text'],
            'use_talks': ['use_proposals'],
            'use_installations': ['use_installers']
        }

    @property
    def location(self):
        try:
            place = json.loads(self.place)
            components = place['address_components']
            components = filter(
                lambda componet: 'political' in componet['types'], components)
            components = map(lambda componet: componet['long_name'],
                             components)
            return components
        except json.JSONDecodeError as error:
            logger.error(error)
        return []

    @property
    def report(self):
        event_user = EventUser.objects.get_counts_by_event(self)
        collaborator = Collaborator.objects.get_counts_by_event(self)
        organizer = Organizer.objects.get_counts_by_event(self)
        attendee = Attendee.objects.get_counts_by_event(self)
        installer = Installer.objects.get_counts_by_event(self)
        activity = Activity.objects.get_counts_by_event(self)
        installation = Installation.objects.get_counts_by_event(self)
        speakers = []
        for talk in Activity.objects.filter(event=self, status='2'):
            speakers.append(talk.speakers_names.split(','))
        speakers_count = len(set(itertools.chain.from_iterable(speakers)))
        return {
            'event_user': event_user,
            'collaborator': collaborator,
            'organizer': organizer,
            'attendee': attendee,
            'installer': installer,
            'activity': activity,
            'installation': installation,
            'speakers': speakers_count
        }

    def get_absolute_url(self):
        if self.external_url:
            return self.external_url
        return reverse('event', kwargs={'event_slug': self.event_slug})

    def __str__(self):
        return self.name

    class Meta:
        ordering = ['name']
        verbose_name = _('Event')
        verbose_name_plural = _('Events')

    def save(self, *args, **kwargs):
        """
        Override default save

        it will add the slug field using slugify.
        """
        if not self.event_slug:
            self.event_slug = get_unique_slug(self, 'name', 'slug')
        super().save(*args, **kwargs)
예제 #31
0
    units = [_('bytes'), _('KB'), _('MB')]
    i = 0
    while size >= 1024:
        size /= 1024
        i += 1
    return u'{} {}'.format(size, units[i])


def get_valid_file_types():
    """
    Return comma separated string of valid file types.
    """
    return ', '.join([', '.join(IMAGE_TYPES[ft].extensions) for ft in IMAGE_TYPES.keys()])


FILE_UPLOAD_TOO_LARGE = _noop(u'The file must be smaller than {image_max_size} in size.'.format(image_max_size=user_friendly_size(settings.PROFILE_IMAGE_MAX_BYTES)))  # pylint: disable=line-too-long
FILE_UPLOAD_TOO_SMALL = _noop(u'The file must be at least {image_min_size} in size.'.format(image_min_size=user_friendly_size(settings.PROFILE_IMAGE_MIN_BYTES)))  # pylint: disable=line-too-long
FILE_UPLOAD_BAD_TYPE = _noop(u'The file must be one of the following types: {valid_file_types}.'.format(valid_file_types=get_valid_file_types()))  # pylint: disable=line-too-long
FILE_UPLOAD_BAD_EXT = _noop(u'The file name extension for this file does not match the file data. The file may be corrupted.')  # pylint: disable=line-too-long
FILE_UPLOAD_BAD_MIMETYPE = _noop(u'The Content-Type header for this file does not match the file data. The file may be corrupted.')  # pylint: disable=line-too-long


class ImageValidationError(Exception):
    """
    Exception to use when the system rejects a user-supplied source image.
    """
    @property
    def user_message(self):
        """
        Translate the developer-facing exception message for API clients.
        """
예제 #32
0
CAT_INP=3

##########################################################################
# Как будем искать дубликаты
#
CMP_NONE=0
CMP_NORMAL=1
CMP_STRONG=2
CMP_CLEAR=3
CMP_TITLE_FTYPE_FSIZE=2
CMP_TITLE_AUTHORS=1

##########################################################################
# разные константы
#
unknown_genre_en =_noop('Unknown genre') 
unknown_genre=_(unknown_genre_en)

##########################################################################
# объект который мы будем использовать для перекодироки 4х байтного UTF в 3х байтный
# пока только для аннотации, т.к. там уже "словлена" ошибка при записи в 3х байтный utf8 MYSQL
#
utfhigh = re.compile(u'[\U00010000-\U0010ffff]')

def pg_optimize(verbose=False):
    """ TODO: Table optimizations for Postgre """
    if connection.vendor != 'postgresql':
        if verbose:
            print('No PostgreSql connection backend detected...')
    else:
        print('Start PostgreSql tables optimization...')
예제 #33
0
CAT_INP = 3

##########################################################################
# Как будем искать дубликаты
#
CMP_NONE = 0
CMP_NORMAL = 1
CMP_STRONG = 2
CMP_CLEAR = 3
CMP_TITLE_FTYPE_FSIZE = 2
CMP_TITLE_AUTHORS = 1

##########################################################################
# разные константы
#
unknown_genre_en = _noop('Unknown genre')
unknown_genre = _(unknown_genre_en)

##########################################################################
# объект который мы будем использовать для перекодироки 4х байтного UTF в 3х байтный
# пока только для аннотации, т.к. там уже "словлена" ошибка при записи в 3х байтный utf8 MYSQL
#
utfhigh = re.compile(u'[\U00010000-\U0010ffff]')


def pg_optimize(verbose=False):
    """ TODO: Table optimizations for Postgre """
    if connection.vendor != 'postgresql':
        if verbose:
            print('No PostgreSql connection backend detected...')
    else:
예제 #34
0
 def __str__(self):
     return _noop('%(persons_company)s::%(name)s') % {
         'persons_company': self.persons_company,
         'name': self.name
     }
예제 #35
0
파일: models.py 프로젝트: nicolas17/eventoL
class TalkProposal(models.Model):
    level_choices = (
        ('1', _('Beginner')),
        ('2', _('Medium')),
        ('3', _('Advanced')),
    )
    activity = models.ForeignKey(Activity,
                                 verbose_name=_noop('Activity'),
                                 blank=True,
                                 null=True)
    type = models.ForeignKey(TalkType, verbose_name=_('Type'))
    image = models.ForeignKey(Image,
                              verbose_name=_noop('Image'),
                              blank=True,
                              null=True)
    confirmed_talk = models.BooleanField(_('Talk Confirmed'), default=False)
    speakers_names = models.CharField(
        _('Speakers Names'),
        max_length=600,
        help_text=_("Comma separated speaker's names"))
    speakers_email = models.CharField(
        _('Speakers Emails'),
        max_length=600,
        help_text=_("Comma separated speaker's emails"))
    labels = models.CharField(
        _('Labels'),
        max_length=200,
        help_text=_('Comma separated tags. i.e. Linux, Free Software, Debian'))
    presentation = models.FileField(
        _('Presentation'),
        upload_to='talks',
        blank=True,
        null=True,
        help_text=
        _('Any material you are going to use for the talk (optional, but recommended)'
          ))
    level = models.CharField(_('Level'),
                             choices=level_choices,
                             max_length=100,
                             help_text=_("Talk's Technical level"))

    def get_schedule_info(self):
        return {
            'room': self.activity.room.name,
            'start_date': self.activity.start_date.strftime('%m/%d/%Y %H:%M'),
            'end_date': self.activity.end_date.strftime('%m/%d/%Y %H:%M'),
            'title': self.activity.title,
            'speakers': self.speakers_names,
            'type': self.type.name
        }

    def get_absolute_url(self):
        if self.confirmed_talk:
            return "/event/" + self.activity.event.slug + '/talk/detail/talk/' + str(
                self.id)
        return "/event/" + self.activity.event.slug + '/talk/detail/proposal/' + str(
            self.id)

    def __unicode__(self):
        return u"%s: %s" % (self.activity.event, self.activity.title)

    class Meta(object):
        verbose_name = _('Talk Proposal')
        verbose_name_plural = _('Talk Proposals')
예제 #36
0
파일: models.py 프로젝트: nicolas17/eventoL
class Activity(models.Model):
    event = models.ForeignKey(Event, verbose_name=_noop('Event'))
    title = models.CharField(_('Title'), max_length=50, blank=True, null=True)
    long_description = models.TextField(_('Long Description'))
    confirmed = models.BooleanField(_('Confirmed'), default=False)
    abstract = models.TextField(
        _('Abstract'),
        help_text=_('Short idea of the talk (Two or three sentences)'))
    room = models.ForeignKey(Room,
                             verbose_name=_('Room'),
                             blank=True,
                             null=True)
    start_date = models.DateTimeField(_('Start Time'), blank=True, null=True)
    end_date = models.DateTimeField(_('End Time'), blank=True, null=True)

    @classmethod
    def check_status(cls, message, error=None, request=None):
        if error:
            raise ValidationError(message)
        if request:
            messages.error(request, message)

    @classmethod
    def room_available(cls,
                       request=None,
                       instance=None,
                       event_slug=None,
                       error=False):
        activities_room = Activity.objects.filter(
            room=instance.room, event__slug__iexact=event_slug)
        if instance.start_date == instance.end_date:
            message = _(
                "The talk couldn't be registered because the schedule not available (start time equals end time)"
            )
            cls.check_status(message, error=error, request=request)
            return False
        if instance.end_date < instance.start_date:
            message = _(
                "The talk couldn't be registered because the schedule is not available (start time is after end time)"
            )
            cls.check_status(message, error=error, request=request)
            return False

        one_second = datetime.timedelta(seconds=1)
        if activities_room.filter(
                end_date__range=(instance.start_date + one_second, instance.end_date - one_second)).exclude(pk=instance.pk).exists() \
                or activities_room.filter(end_date__gt=instance.end_date, start_date__lt=instance.start_date).exclude(pk=instance.pk).exists() \
                or activities_room.filter(start_date__range=(instance.start_date + one_second, instance.end_date - one_second)).exclude(pk=instance.pk).exists() \
                or activities_room.filter(
                    end_date=instance.end_date, start_date=instance.start_date).exclude(pk=instance.pk).exists():
            message = _(
                "The talk couldn't be registered because the room or the schedule is not available"
            )
            cls.check_status(message, error=error, request=request)
            return False
        return True

    def __cmp__(self, other):
        return -1 if self.start_date.time() < other.start_date.time() else 1

    def get_absolute_url(self):
        return "/event/" + self.event.slug + '/activity/detail/activity/' + str(
            self.id)

    def schedule(self):
        if self.start_date and self.end_date:
            return u"%s - %s" % (self.start_date.strftime("%H:%M"),
                                 self.end_date.strftime("%H:%M"))
        return _('Schedule not confirmed yet')

    @classmethod
    def filter_by(cls, queryset, field, value):
        if field == 'event':
            return queryset.filter(event__pk=value)
        return queryset

    def __unicode__(self):
        return u"%s - %s (%s - %s)" % (
            self.event, self.title,
            self.start_date.strftime("%H:%M") if self.start_date else None,
            self.end_date.strftime("%H:%M") if self.end_date else None)

    class Meta(object):
        ordering = ['title']
        verbose_name = _('Activity')
        verbose_name_plural = _('Activities')