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)
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)
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())
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())
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)
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)
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())
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)
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')
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')
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
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)
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
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)
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)
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')
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)
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
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)
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)
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)
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)
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)
def __init__(self, parent, query, batch_size=10): super(UserPager, self).__init__(query, batch_size) event_management._register_listener(parent, self)
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)
def bind_parent(self, parent): event_management._register_listener(parent, self)
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
def __init__(self, parent, idea): event_management._register_listener(parent, self) self.idea_id = idea if is_integer(idea) else idea.id self.reset()
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))
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)
def __init__(self, parent): event_management._register_listener(parent, self)
def __init__(self, parent, max_items=None): event_management._register_listener(parent, self) self.articles = component.Component(ArticleBox(ArticleType.Ongoing, max_items))
def __init__(self, idea): super(CommentPager, self).__init__() event_management._register_listener(idea, self) self.idea = idea self.refresh_comments() self.feedback_message = []
def __init__(self, parent): event_management._register_listener(parent, self)
def bind_parent(self, parent): event_management._register_listener(parent, self)
def __init__(self, parent, idea): event_management._register_listener(parent, self) self.idea_id = idea if is_integer(idea) else idea.id self.reset()
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)
def __init__(self, parent, max_items=None): event_management._register_listener(parent, self) self.articles = component.Component( ArticleBox(ArticleType.Ongoing, max_items))
def __init__(self, parent, query, batch_size=10): super(UserPager, self).__init__(query, batch_size) event_management._register_listener(parent, self)
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)
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))