예제 #1
0
    def __init__(self, idea):
        super(WorkflowSection, self).__init__()
        self.idea_id = idea if is_integer(idea) else idea.id

        self.switching_menu = component.Component(
            WorkflowMenu(self.idea_id, switching_actions))
        event_management._register_listener(self, self.switching_menu())

        recommendation_legend = _L(
            u'After my appraisal i can propose two kinds of suggestion:')
        self.recommendation_menu = component.Component(
            WorkflowMenu(self.idea_id, recommendation_actions,
                         recommendation_legend))
        event_management._register_listener(self, self.recommendation_menu())

        self.evaluation_menu = component.Component(EvaluationMenu(
            self.idea_id))

        self.tabs = (('switching', _L(u'My actions'), self.switching_menu),
                     ('evaluation', _L(u"My evaluation"),
                      self.evaluation_menu), ('recommendation',
                                              _L(u"My recommendation"),
                                              self.recommendation_menu))
        self.selected_tab = editor.Property('switching')

        self.menu_items = [(label, name, None, '', None)
                           for name, label, action in self.filtered_tabs]

        self.menu = component.Component(Menu([], self.filter_menu),
                                        model='tab_renderer')
        self.menu.on_answer(self.select_tab)

        if self.menu_items:
            self.select_tab(0)
예제 #2
0
 def __init__(self, parent, subject=None, body=None):
     event_management._register_listener(parent, self)
     self.sender_email = editor.Property(u'').validate(validators.email)
     self.subject = editor.Property(subject or u'').validate(
         validators.non_empty_string)
     self.message = editor.Property(body or u'').validate(
         validators.non_empty_string)
예제 #3
0
 def __init__(self, idea, get_actions, legend=None):
     self.idea_id = idea if is_integer(idea) else idea.id
     self.get_actions = get_actions
     self.legend = legend
     self.selected_item = editor.Property()
     self.wf_context = component.Component(IdeaWFContext(self.idea_id))
     event_management._register_listener(self, self.wf_context())
예제 #4
0
 def __init__(self, idea, get_actions, legend=None):
     self.idea_id = idea if is_integer(idea) else idea.id
     self.get_actions = get_actions
     self.legend = legend
     self.selected_item = editor.Property()
     self.wf_context = component.Component(IdeaWFContext(self.idea_id))
     event_management._register_listener(self, self.wf_context())
예제 #5
0
    def __init__(self, parent):
        self.parent = parent
        event_management._register_listener(self.parent, self)

        create_block = lambda id, c, rounded=True: component.Component(
            HomeBlock(id, c, rounded))

        self.column = create_block('ideas-activity',
                                   IdeasActivityPager(parent))
        self.edito_link = create_block('edito-link',
                                       EditoLink(),
                                       rounded=False)
        headline_comp = component.Component(
            Article(self.headline_article),
            model='headline') if self.headline_article else Empty()
        self.headline = create_block('headline', headline_comp)
        self.article_box = create_block('news',
                                        ArticleBox(ArticleType.News, 5))
        self.article_block = component.Component(ArticleBlock())
        self.idea_counter = create_block('idea-counter', IdeaCounter(self))

        self.ideas_by_domain = create_block(
            'ideas-by-domain',
            component.Component(
                IdeasByDomain()).on_answer(lambda v: self.show_domain(*v)))
        poll = self.find_current_poll()
        self.poll = create_block('poll', Poll(poll.id)) if poll else None
        self.ongoing = create_block('ongoing', OngoingArticlesBox(parent, 6))
        self.improvements_link = create_block('improvements-link',
                                              ImprovementsLink(),
                                              rounded=False)
예제 #6
0
    def __init__(self, idea):
        super(WorkflowSection, self).__init__()
        self.idea_id = idea if is_integer(idea) else idea.id

        self.switching_menu = component.Component(WorkflowMenu(self.idea_id, switching_actions))
        event_management._register_listener(self, self.switching_menu())

        recommendation_legend = _L(u'After my appraisal i can propose two kinds of suggestion:')
        self.recommendation_menu = component.Component(
            WorkflowMenu(self.idea_id, recommendation_actions, recommendation_legend))
        event_management._register_listener(self, self.recommendation_menu())

        self.evaluation_menu = component.Component(EvaluationMenu(self.idea_id))

        self.tabs = (('switching', _L(u'My actions'), self.switching_menu),
                     ('evaluation', _L(u"My evaluation"), self.evaluation_menu),
                     ('recommendation', _L(u"My recommendation"), self.recommendation_menu))
        self.selected_tab = editor.Property('switching')

        self.menu_items = [(label, name, None, '', None) for name, label, action in self.filtered_tabs]

        self.menu = component.Component(Menu([], self.filter_menu), model='tab_renderer')
        self.menu.on_answer(self.select_tab)

        if self.menu_items:
            self.select_tab(0)
예제 #7
0
 def refresh_comments(self):
     self._comments = [
         component.Component(Comment(c))
         for c in self.idea.get_all_comments()
     ]
     for comment in self._comments:
         comment.on_answer(lambda a: self.comment_deleted())
         event_management._register_listener(self, comment())
예제 #8
0
    def __init__(self, parent):
        event_management._register_listener(parent, self)

        items = StateData.get_ideas_count_by_states(get_workflow().get_chart_states())
        self.items = [(r.state, r.count) for r in reversed(items.all())]
        self.chart = component.Component(
            BarChart(self.items, _('Your ideas have potential'), clickable=True)
        )

        self.chart.on_answer(self.call_ideas)
예제 #9
0
    def __init__(self, parent, challenge_id):
        # FIXME: late import to avoid circular dependencies problem
        from eureka.ui.desktop.idea import SubmitIdeaBox
        event_management._register_listener(parent, self)
        self.challenge_id = challenge_id
        self.challenge_repository = ChallengeRepository()
        self.submit_idea_box = component.Component(SubmitIdeaBox(self))
        self._ideas = None

        if not self.challenge:
            raise ValueError('Invalid challenge id')
예제 #10
0
    def __init__(self, parent, challenge_id):
        # FIXME: late import to avoid circular dependencies problem
        from eureka.ui.desktop.idea import SubmitIdeaBox
        event_management._register_listener(parent, self)
        self.challenge_id = challenge_id
        self.challenge_repository = ChallengeRepository()
        self.submit_idea_box = component.Component(SubmitIdeaBox(self))
        self._ideas = None

        if not self.challenge:
            raise ValueError('Invalid challenge id')
예제 #11
0
    def __init__(self, parent, user, query, label="All Ideas", batch_size=10):
        self.parent = parent
        # FIXME: WTF?
        event_management._register_listener(self, self)

        self.user_uid = user if is_string(user) else user.uid
        self._query = query

        self.pager = component.Component(None)
        self.state_id = None
        self.show_proxy_ideas = False
예제 #12
0
    def __init__(self, parent):
        event_management._register_listener(parent, self)

        items = StateData.get_ideas_count_by_states(
            get_workflow().get_chart_states())
        self.items = [(r.state, r.count) for r in reversed(items.all())]
        self.chart = component.Component(
            BarChart(self.items,
                     _('Your ideas have potential'),
                     clickable=True))

        self.chart.on_answer(self.call_ideas)
예제 #13
0
    def __init__(self, email_unique=True, can_delete_users=False, mobile_access=False):
        self.email_unique = email_unique
        self.mobile_access = mobile_access
        self.user_repository = UserRepository()

        self.create_user = component.Component(UserEditor(email_unique=self.email_unique, mobile_access=self.mobile_access))
        self.create_user.on_answer(lambda v: self.create_user().reset_fields())
        event_management._register_listener(self, self.create_user())

        self.start = 0
        self.batch_size = 10
        self.radius = 3

        self.filter = component.Component(UserFilter())
        self.with_delete = can_delete_users
예제 #14
0
    def __init__(self, parent, batch_size=10):
        super(SuggestionsPager, self).__init__(self._query, batch_size)
        event_management._register_listener(parent, self)

        self.selected_tab = var.Var('all')

        self.menu_items = [(_(u'All suggestions'), 'all', _(u'Show all suggestions'), '', None),
                           (_(u'Processed and deployed'), 'treated', _(u'Show processed and deployed suggestions'), '', None),
                           (_(u'In progress'), 'running', _(u'Show suggestions in progress'), '', None),
                           (_(u'Rejected'), 'rejected', _(u'Show the rejected suggestions'), '', None),
                           ]

        self.menu = component.Component(Menu(self.menu_items),
                                        model='tab_renderer')
        self.menu.on_answer(self.select_tab)
        self.select_tab(0)
예제 #15
0
    def __init__(self, parent, configuration):
        self.parent = parent
        self.configuration = configuration
        self.models_by_tab = {'ideas': configuration['tabs']['ideas'],
                              'users': configuration['tabs']['users']}

        event_management._register_listener(self.parent, self)
        self.active_tab = var.Var('')
        self.ideas_progress = component.Component(IdeasProgress(self.parent))
        self.ideas_on_alert = component.Component(IdeasOnAlert(self.parent))

        self.menu_items = [(_(u'Ideas Stats'), 'ideas', None, '', None),
                           (_(u'Users Stats'), 'users', None, '', None), ]
        self.menu = component.Component(Menu(self.menu_items),
                                        model='tab_renderer')
        self.menu.on_answer(self.select_tab)
        self.select_tab(0)
예제 #16
0
    def __init__(self, parent):
        event_management._register_listener(parent, self)
        self.search_pattern = var.Var('')
        self.search_by = var.Var('')

        # Tells if opening animation is already done
        self.form_opened = var.Var(False)

        # Tells if form opening has been asked
        self.show_form = var.Var(False)

        self.options = component.Component(SearchMenu([
            (_(u'search_ideas'), u'idea'),
            (_(u'Profils'), u'profile')]))

        self.options.on_answer(self.select_option)
        self.select_option(u'idea')
예제 #17
0
    def __init__(self, parent):
        self.parent = parent
        event_management._register_listener(self.parent, self)

        create_block = lambda id, c, rounded = True: component.Component(HomeBlock(id, c, rounded))

        self.column = create_block('ideas-activity', IdeasActivityPager(parent))
        self.edito_link = create_block('edito-link', EditoLink(), rounded=False)
        headline_comp = component.Component(Article(self.headline_article), model='headline') if self.headline_article else Empty()
        self.headline = create_block('headline', headline_comp)
        self.article_box = create_block('news', ArticleBox(ArticleType.News, 5))
        self.article_block = component.Component(ArticleBlock())
        self.idea_counter = create_block('idea-counter', IdeaCounter(self))

        self.ideas_by_domain = create_block('ideas-by-domain', component.Component(IdeasByDomain()).on_answer(lambda v: self.show_domain(*v)))
        poll = self.find_current_poll()
        self.poll = create_block('poll', Poll(poll.id)) if poll else None
        self.ongoing = create_block('ongoing', OngoingArticlesBox(parent, 6))
        self.improvements_link = create_block('improvements-link', ImprovementsLink(), rounded=False)
예제 #18
0
    def __init__(self,
                 email_unique=True,
                 can_delete_users=False,
                 mobile_access=False):
        self.email_unique = email_unique
        self.mobile_access = mobile_access
        self.user_repository = UserRepository()

        self.create_user = component.Component(
            UserEditor(email_unique=self.email_unique,
                       mobile_access=self.mobile_access))
        self.create_user.on_answer(lambda v: self.create_user().reset_fields())
        event_management._register_listener(self, self.create_user())

        self.start = 0
        self.batch_size = 10
        self.radius = 3

        self.filter = component.Component(UserFilter())
        self.with_delete = can_delete_users
예제 #19
0
    def __init__(self, parent, configuration):
        self.parent = parent
        self.configuration = configuration
        self.models_by_tab = {
            'ideas': configuration['tabs']['ideas'],
            'users': configuration['tabs']['users']
        }

        event_management._register_listener(self.parent, self)
        self.active_tab = var.Var('')
        self.ideas_progress = component.Component(IdeasProgress(self.parent))
        self.ideas_on_alert = component.Component(IdeasOnAlert(self.parent))

        self.menu_items = [
            (_(u'Ideas Stats'), 'ideas', None, '', None),
            (_(u'Users Stats'), 'users', None, '', None),
        ]
        self.menu = component.Component(Menu(self.menu_items),
                                        model='tab_renderer')
        self.menu.on_answer(self.select_tab)
        self.select_tab(0)
예제 #20
0
    def __init__(self, parent, suggested_challenge_id=None):
        super(IdeaEditor, self).__init__(None)
        event_management._register_listener(parent, self)

        self.idea = None

        # mandatory fields
        self.title = editor.Property(u'').validate(validators.non_empty_string)
        self.description = editor.Property(u'').validate(
            validators.non_empty_string)
        self.domain_id = editor.Property(u'').validate(
            validators.non_empty_string)
        self.challenge_id = editor.Property(
            suggested_challenge_id or u'').validate(
            validators.non_empty_string)
        self.impact = editor.Property(u'').validate(
            validators.non_empty_string)
        self.tags = editor.Property(u'').validate(
            lambda t: validators.word_list(t, required=True,
                                           duplicates='remove'))

        # Optional fields
        self.benefit_department = editor.Property(u'').validate(
            validators.string)
        self.origin = editor.Property(u'').validate(validators.string)
        self.implementation = editor.Property(u'').validate(validators.string)
        self.co_author_1 = editor.Property(u'').validate(validators.user_email)
        self.co_author_2 = editor.Property(u'').validate(validators.user_email)
        self.co_author_3 = editor.Property(u'').validate(validators.user_email)
        self.co_author_4 = editor.Property(u'').validate(validators.user_email)
        self.co_author_5 = editor.Property(u'').validate(validators.user_email)

        self.attachment_1 = editor.Property(None).validate(validate_attachment)
        self.attachment_2 = editor.Property(None).validate(validate_attachment)
        self.attachment_3 = editor.Property(None).validate(validate_attachment)

        # checkboxes
        self.anonymous = editor.Property(False)
        self.already_done = editor.Property(False)
예제 #21
0
    def __init__(self, parent, default_challenge_id=None):
        super(ChallengePage, self).__init__()
        self.parent = parent
        event_management._register_listener(parent, self)

        now = datetime.datetime.now()
        self.items = [
            (challenge.short_title or ellipsize(challenge.title, 35), Challenge(parent, challenge.id))
            for challenge in self._challenges
            if challenge.is_active(now)
        ]
        self.items = [(_(u"All challenges"), None)] + self.items
        self.menu = component.Component(Menu([label for label, challenge in self.items]), model="challenges")
        self.menu.on_answer(self.select_challenge)

        self.content = component.Component(None)
        self.current_challenge = component.Component(None)
        self.ordered = component.Component(None)
        self.filtered = component.Component(None)
        self.excel_exporter = component.Component(None)
        self.batch_size_changer = component.Component(None)
        self.idea_counter = component.Component(None)

        for index, (label, challenge) in enumerate(self.items):
            if challenge and challenge.challenge_id == default_challenge_id:
                self.select_challenge(index)
                break

        if not self.menu().selected():
            # challenge selected fallback to first one or all
            if len(self.items) > 1:
                show_challenge = False
                self.select_challenge(1)
            else:
                show_challenge = True
                self.select_challenge(0)
예제 #22
0
    def __init__(self, parent, idea):
        event_management._register_listener(parent, self)

        self.id = idea if is_integer(idea) else idea.id
        self.display_date = 'publication_date'

        self.comment_pager = component.Component(CommentPager(self))
        self.comment_creator = component.Component(
            CommentCreator(self, self.id))
        self.comment_creator.on_answer(lambda a: self.comments_updated())

        self.wf_context = component.Component(IdeaWFContext(self.id))
        event_management._register_listener(self, self.wf_context())
        self.workflow_section = component.Component(WorkflowSection(self.id))
        event_management._register_listener(self, self.workflow_section())

        self.selected_tab = var.Var('')

        self.menu_items = []

        if self.has_comments():
            nb_comments = self.get_nb_comments()
            self.menu_items.append((
                _N(u"Comment (%d)", u"Comments (%d)",
                   nb_comments) % nb_comments,
                'comments', None, '', None
            ))

        if self.has_challenge():
            self.menu_items.append(
                (_(u"Challenge"), 'challenge', None, '', None))

        if self.has_tags():
            self.menu_items.append((_(u"Tags"), 'tags', None, '', None))

        self.menu = component.Component(Menu(self.menu_items),
                                        model='tab_renderer')
        self.menu.on_answer(self.select_tab)
        self.select_default_tab()

        self._navigate_to_element = None
        self._comment_submit_id = generate_id('comment-submit')

        self.display_full_description = var.Var(False)
예제 #23
0
    def __init__(self, parent, idea):
        event_management._register_listener(parent, self)

        self.id = idea if is_integer(idea) else idea.id
        self.display_date = 'publication_date'

        self.comment_pager = component.Component(CommentPager(self))
        self.comment_creator = component.Component(
            CommentCreator(self, self.id))
        self.comment_creator.on_answer(lambda a: self.comments_updated())

        self.wf_context = component.Component(IdeaWFContext(self.id))
        event_management._register_listener(self, self.wf_context())
        self.workflow_section = component.Component(WorkflowSection(self.id))
        event_management._register_listener(self, self.workflow_section())

        self.selected_tab = var.Var('')

        self.menu_items = []

        if self.has_comments():
            nb_comments = self.get_nb_comments()
            self.menu_items.append(
                (_N(u"Comment (%d)", u"Comments (%d)", nb_comments) %
                 nb_comments, 'comments', None, '', None))

        if self.has_challenge():
            self.menu_items.append(
                (_(u"Challenge"), 'challenge', None, '', None))

        if self.has_tags():
            self.menu_items.append((_(u"Tags"), 'tags', None, '', None))

        self.menu = component.Component(Menu(self.menu_items),
                                        model='tab_renderer')
        self.menu.on_answer(self.select_tab)
        self.select_default_tab()

        self._navigate_to_element = None
        self._comment_submit_id = generate_id('comment-submit')

        self.display_full_description = var.Var(False)
예제 #24
0
 def __init__(self, parent, query, batch_size=10):
     super(UserPager, self).__init__(query, batch_size)
     event_management._register_listener(parent, self)
예제 #25
0
    def __init__(self, parent, user, selected_tab=None, online_shop=None):
        self.parent = parent
        event_management._register_listener(parent, self)
        self.uid = user if is_string(user) else user.uid
        self.user_repository = UserRepository()
        self.user_comp = User(parent, self.uid)
        self.tabs = self._create_tabs()
        selected_tab = selected_tab if selected_tab in self.tabs else 'profile'
        self.selected_tab = var.Var(selected_tab)

        # inner components displayed in the tabs or the header
        # FIXME: all these should be wrapped into a component.Component
        self.fi_editor = UserFIEditor(self.uid)
        event_management._register_listener(self, self.fi_editor)
        self.avatar_editor = AvatarEditor(self.uid)
        event_management._register_listener(self, self.avatar_editor)
        self.password_editor = PasswordEditor(self.user)
        event_management._register_listener(self, self.password_editor)
        self.profile_editor = ProfileEditor(self.user)
        event_management._register_listener(self, self.profile_editor)
        self.settings_editor = component.Component(SettingsEditor(self.user))
        event_management._register_listener(self, self.settings_editor())
        self.idea_pager = self._create_pager()
        # FIXME: the pager should not depend on the parent
        # event_management._register_listener(self, self.idea_pager)
        self.online_shop = online_shop(self)

        self.tab_labels = {
            'profile': _("My Profile") if self.is_mine else _("Her Profile"),
            'settings': _("My Settings") if self.is_mine else _("Her Settings"),
            'tracked_ideas': (_("My Tracked Ideas") if self.is_mine else _("Her Tracked Ideas")) + " (%d)" % self.new_events_count(),
            'ideas': (_("My Ideas") if self.is_mine else _("Her Ideas")) + " (%d)" % self.ideas_count,
            'points': (_("My Points") if self.is_mine else _("Her Points")) + " (%d)" % self.user.acquired_points,
            # 'rank': self.user.status_level_label,
        }

        self.menu_items = [(self.tab_labels[name], name, None, '', None) for name in self.tabs]

        self.menu = component.Component(Menu(self.menu_items),
                                        model='tab_renderer')
        self.menu.on_answer(self.select_tab)
        if selected_tab:
            index_tab = self.tabs.index(selected_tab)
        else:
            index_tab = 0
        self.select_tab(index_tab)
예제 #26
0
 def bind_parent(self, parent):
     event_management._register_listener(parent, self)
예제 #27
0
 def __init__(self, parent, user):
     event_management._register_listener(parent, self)
     self.uid = user if is_string(user) else user.uid
     self.user_repository = UserRepository()
     self.pager = None
예제 #28
0
 def __init__(self, parent, idea):
     event_management._register_listener(parent, self)
     self.idea_id = idea if is_integer(idea) else idea.id
     self.reset()
예제 #29
0
 def _show(self, o, model=0):
     event_management._register_listener(self.parent, o)
     # not a call because of the urls
     self.content.becomes(
         o, model).on_answer(lambda v: self.content.becomes(None))
예제 #30
0
 def __init__(self, parent, default_domain=None):
     event_management._register_listener(parent, self)
     self.domain = editor.Property(default_domain)
     self.content = editor.Property('').validate(
         validators.non_empty_string)
예제 #31
0
 def __init__(self, parent):
     event_management._register_listener(parent, self)
예제 #32
0
 def __init__(self, parent, max_items=None):
     event_management._register_listener(parent, self)
     self.articles = component.Component(ArticleBox(ArticleType.Ongoing, max_items))
예제 #33
0
 def __init__(self, idea):
     super(CommentPager, self).__init__()
     event_management._register_listener(idea, self)
     self.idea = idea
     self.refresh_comments()
     self.feedback_message = []
예제 #34
0
 def __init__(self, parent):
     event_management._register_listener(parent, self)
예제 #35
0
 def bind_parent(self, parent):
     event_management._register_listener(parent, self)
예제 #36
0
 def __init__(self, parent, idea):
     event_management._register_listener(parent, self)
     self.idea_id = idea if is_integer(idea) else idea.id
     self.reset()
예제 #37
0
 def __init__(self, parent, default_domain=None):
     event_management._register_listener(parent, self)
     self.domain = editor.Property(default_domain)
     self.content = editor.Property('').validate(validators.non_empty_string)
예제 #38
0
 def __init__(self, parent, max_items=None):
     event_management._register_listener(parent, self)
     self.articles = component.Component(
         ArticleBox(ArticleType.Ongoing, max_items))
예제 #39
0
 def __init__(self, parent, query, batch_size=10):
     super(UserPager, self).__init__(query, batch_size)
     event_management._register_listener(parent, self)
예제 #40
0
 def __init__(self, parent, subject=None, body=None):
     event_management._register_listener(parent, self)
     self.sender_email = editor.Property(u'').validate(validators.email)
     self.subject = editor.Property(subject or u'').validate(validators.non_empty_string)
     self.message = editor.Property(body or u'').validate(validators.non_empty_string)
예제 #41
0
 def _show(self, o, model=0):
     event_management._register_listener(self.parent, o)
     # not a call because of the urls
     self.content.becomes(o, model).on_answer(
         lambda v: self.content.becomes(None))