Example #1
0
    def _add_modal(self, explanations, process, soup, tag, context, request):
        context_oid = get_oid(context)
        dace_ui_api = get_current_registry().getUtility(IDaceUIAPI,
        	                                            'dace_ui_api')
        explanationitemaction = None
        explanationitem_actions = process.get_actions('explanationitem')
        if explanationitem_actions:
            explanationitemaction = explanationitem_actions[0]

        if explanationitemaction:
            values = {'url': request.resource_url(context, '@@explanationjson', 
                                            query={'op': 'getform',
                                                   'itemid': tag['data-item']}),
                     'item': explanations[tag['data-item']],
                     }
            body = renderers.render(self.explanation_template, values, request)
            explanation_item_soup = BeautifulSoup(body)
            actionurl_update = dace_ui_api.updateaction_viewurl(
                                request=request,
                                action_uid=str(get_oid(explanationitemaction)),
                                context_uid=str(context_oid))
            values = {'url': actionurl_update,
                     'item': explanations[tag['data-item']],
                    }
            modal_body = renderers.render(self.modal_template, values, request)
            explanation_item_modal_soup = BeautifulSoup(modal_body)
            soup.body.append(explanation_item_modal_soup.body)
            tag.append(explanation_item_soup.body)
            tag.body.unwrap()
    def update(self):
        result = {}
        duplicates = get_duplicates(self.context)
        diff_bodies = {}
        context_view = self.content(
            args={'object': self.context},
            template=self.context.templates.get('diff', None))['body']

        for duplicate in duplicates:
            duplicate_view = self.content(
                args={'object': duplicate},
                template=duplicate.templates.get('diff', None))['body']
            soupt, textdiff = html_diff_wrapper.render_html_diff(
                context_view, duplicate_view)
            diff_bodies[duplicate] = (textdiff, get_oid(duplicate))

        values = {'context': self.context,
                  'oid': get_oid(self.context),
                  'context_view': context_view,
                  'contents': diff_bodies,
                  'view': self}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #3
0
    def update(self):
        result = {}
        duplicates = get_duplicates(self.context)
        diff_bodies = {}
        context_view = self.content(args={'object': self.context},
                                    template=self.context.templates.get(
                                        'diff', None))['body']

        for duplicate in duplicates:
            duplicate_view = self.content(args={'object': duplicate},
                                          template=duplicate.templates.get(
                                              'diff', None))['body']
            soupt, textdiff = html_diff_wrapper.render_html_diff(
                context_view, duplicate_view)
            diff_bodies[duplicate] = (textdiff, get_oid(duplicate))

        values = {
            'context': self.context,
            'oid': get_oid(self.context),
            'context_view': context_view,
            'contents': diff_bodies,
            'view': self
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #4
0
 def bind(self):
     bindings = {}
     user = get_current(self.request)
     dace_catalog = find_catalog('dace')
     novaideo_catalog = find_catalog('novaideo')
     object_authors_index = novaideo_catalog['object_authors']
     container_index = dace_catalog['container_oid']
     query = container_index.eq(get_oid(self.context))
     objects = find_entities(
         interfaces=[IAmendment],
         user=user,
         add_query=query)
     query = query & object_authors_index.any([get_oid(user)])
     my_objs = find_entities(
         interfaces=[IAmendment],
         user=user,
         add_query=query)
     len_result = len(objects)
     len_my = len(my_objs)
     len_others = len_result - len_my
     bindings['user'] = user
     bindings['len_result'] = len_result
     bindings['len_my'] = len_my
     bindings['len_others'] = len_others
     setattr(self, '_bindings', bindings)
Example #5
0
def get_roles(user=None, obj=None,
              root=None, ignore_groups=False):
    if user is None:
        user = get_current()

    if isinstance(user, Anonymous):
        return [RoleAnonymous.name]

    if root is None:
        root = getSite()

    if obj is None:
        obj = root

    opts = {u'source_id': get_oid(user),
            u'target_id': get_oid(obj)}
    opts[u'reftype'] = 'Role'
    roles = [r.relation_id for r in find_relations(obj, opts).all()]
    principals = find_service(root, 'principals')
    sd_admin = principals['users']['admin']
    if sd_admin is user and 'Admin' not in roles:
        roles.append('Admin')

    groups = []
    if not ignore_groups:
        groups.extend(getattr(user, 'groups', []))

    for group in groups:
        roles.extend(get_roles(group, obj, root))

    return list(set(roles))
Example #6
0
    def serialize(self, field, cstruct, **kw):
        if cstruct in (null, None):
            cstruct = ()

        is_multiple = getattr(self, 'multiple', False)
        if is_multiple and not isinstance(cstruct, (list, tuple, set)):
            cstruct = [cstruct]

        if cstruct and is_multiple and \
           not isinstance(list(cstruct)[0], string_types):
            try:
                cstruct = [str(get_oid(value)) for value in cstruct]
            except Exception:
                pass
        elif isinstance(cstruct, string_types):
            try:
                cstruct = str(get_oid(cstruct))
            except Exception:
                pass

        readonly = kw.get('readonly', self.readonly)
        values = kw.get('values', self.values)
        kw['values'] = _normalize_choices(values)
        template = readonly and self.readonly_template or self.template
        tmpl_values = self.get_template_values(field, cstruct, kw)
        return field.renderer(template, **tmpl_values)
Example #7
0
def revoke_roles(user=None, roles=(), root=None):
    if not roles:
        return

    if user is None:
        user = get_current()

    if isinstance(user, Anonymous):
        return  #TODO use cookies to revoke roles

    normalized_roles = []
    if root is None:
        root = getSite()

    for role in roles:
        if isinstance(role, basestring):
            normalized_roles.append((role, root))
        else:
            normalized_roles.append(role)

    for role in normalized_roles:
        obj = role[1]
        opts = {u'source_id': get_oid(user), u'target_id': get_oid(obj)}
        opts[u'relation_id'] = role[0]
        opts[u'reftype'] = 'Role'
        relations = [r for r in find_relations(obj, opts).all()]
        if not (obj is root):
            opts[u'target_id'] = get_oid(root)
            relations.extend([r for r in find_relations(obj, opts).all()])

        for relation in relations:
            disconnect(relation)

    if hasattr(user, 'reindex'):
        user.reindex()
Example #8
0
def reviwes_access_control_evolve(root, registry):
    from lac.views.filter import find_entities
    from lac.content.interface import IBaseReview
    from substanced.util import get_oid

    reviews = find_entities(interfaces=[IBaseReview])
    len_entities = str(len(reviews))
    wapis = [s for s in root.site_folders if s.title == 'Sortir Wapi']
    lilles = [s for s in root.site_folders if s.title == 'Sortir Lille']
    wapi_site = wapis[0]
    wapi_site_oid = get_oid(wapi_site)
    lille_site = lilles[0]
    lille_site_oid = get_oid(lille_site)
    for index, review in enumerate(reviews):
        reviwe_site = getattr(review, 'source_data', {}).get('site', None)
        reviwe_siteid = getattr(review, 'source_data',
                                {}).get('source_id', None)
        if reviwe_site == 'wapi':
            review.source_site = wapi_site_oid
            review.access_control = PersistentList([wapi_site_oid])
            log.info("Wapi: " + str(index) + "/" + len_entities)
        elif reviwe_siteid == 'sortir':
            review.source_site = lille_site_oid
            review.access_control = PersistentList([lille_site_oid])
            #log.info("Lille: "+str(index) + "/" + len_entities)
        else:
            source_site = review.source_site if review.source_site else 'all'
            review.access_control = PersistentList([source_site])
            #log.info("CrerationCulturelle: "+str(index) + "/" + len_entities)

        review.reindex()

    log.info('Review access_control evolved.')
Example #9
0
def content_added_or_removed(event):
    """ Generates ContentAdded and ContentRemoved audit events """
    if IObjectWillBeRemoved.providedBy(event):
        event_name = 'ContentRemoved'
    elif IObjectAdded.providedBy(event):
        event_name = 'ContentAdded'
    else:
        return False  # for testing
    userinfo = get_userinfo()
    eventscribe = AuditScribe(event.object)
    parent = event.parent
    # this is an event related to the *container*, not to the object.
    folder_oid = get_oid(parent, None)
    object_oid = get_oid(event.object, None)
    folder_path = resource_path(parent)
    object_name = event.name
    moving = bool(event.moving)
    loading = bool(event.loading)
    content_type = str(event.registry.content.typeof(event.object))
    eventscribe.add(
        event_name,
        folder_oid,
        object_oid=object_oid,
        folder_oid=folder_oid,
        folder_path=folder_path,
        object_name=object_name,
        content_type=content_type,
        userinfo=userinfo,
        moving=moving,
        loading=loading,
    )
Example #10
0
    def serialize(self, field, cstruct, **kw):
        if cstruct in (null, None):
            cstruct = ()

        is_multiple = getattr(self, 'multiple', False)
        if is_multiple and not isinstance(cstruct, (list, tuple, set)):
            cstruct = [cstruct]

        if cstruct and is_multiple and \
           not isinstance(list(cstruct)[0], string_types):
            try:
                cstruct = [str(get_oid(value)) for value in cstruct]
            except Exception:
                pass
        elif isinstance(cstruct, string_types):
            try:
                cstruct = str(get_oid(cstruct))
            except Exception:
                pass

        readonly = kw.get('readonly', self.readonly)
        values = kw.get('values', self.values)
        kw['values'] = _normalize_choices(values)
        template = readonly and self.readonly_template or self.template
        tmpl_values = self.get_template_values(field, cstruct, kw)
        return field.renderer(template, **tmpl_values)
Example #11
0
    def calculate_votes(self, votes):
        """Return the result of ballot"""

        result = {}
        for subject in self.report.subjects:
            try:
                subject_id = get_oid(subject)
            except Exception:
                subject_id = subject

            result[subject_id] = 0

        for vote in votes:
            subject = get_obj(vote.value)
            if subject is None:
                subject = vote.value

            try:
                subject_id = get_oid(vote.value)
            except Exception:
                subject_id = vote.value
            
            if subject in self.report.subjects:
                result[subject_id] += 1

        return result
Example #12
0
File: util.py Project: ecreall/dace
def get_roles(user=None, obj=None,
              root=None, ignore_groups=False):
    if user is None:
        user = get_current()

    if isinstance(user, Anonymous):
        return [RoleAnonymous.name]

    if root is None:
        root = getSite()

    if obj is None:
        obj = root

    opts = {u'source_id': get_oid(user),
            u'target_id': get_oid(obj)}
    opts[u'reftype'] = 'Role'
    roles = [r.relation_id for r in find_relations(obj, opts).all()]
    principals = find_service('principals')
    sd_admin = principals['users']['admin']
    if sd_admin is user and 'Admin' not in roles:
        roles.append('Admin')

    groups = []
    if not ignore_groups:
        groups.extend(getattr(user, 'user_groups', []))

    for group in groups:
        roles.extend(get_roles(group, obj, root))

    return list(set(roles))
Example #13
0
    def start(self, context, request, appstruct, **kw):
        appstruct.pop('_csrf_token_')
        site = get_site_folder(True, request)
        contacts = [
            c for c in getattr(site, 'contacts', []) if c.get('email', None)
        ]
        if contacts:
            subject = "Avis d'un utilisateur"
            mail = appstruct.get('improvement')
            sender = appstruct.get('email')
            alert('email', [sender], [contacts[-1].get('email')], {
                'subject': subject,
                'body': mail
            })

        user = request.user
        appstruct['user'] = '******'
        if user:
            appstruct['user'] = get_oid(user)

        now = datetime.datetime.now(tz=pytz.timezone('Europe/Paris'))
        appstruct['date'] = now.isoformat()
        appstruct['site'] = get_oid(site)
        alert('arango', [], ["lac." + appstruct['id']], appstruct)
        #alert slack
        appstruct['date'] = to_localized_time(now, translate=True)
        text = '{improvement}\n User: {user}\n URL: {url}\n Email: {email}\n Date: {date}'.format(
            **appstruct)
        alert('slack', [], ['improve'], {'text': text})
        if user and not getattr(user, 'email', ''):
            user.email = appstruct.get('email', '')

        return {}
    def update(self):
        result = {}
        site = get_site_folder(True, self.request)
        user = get_current(self.request)
        is_manager = has_any_roles(
            user=user,
            roles=('Admin', ('SiteAdmin', site))) or\
            is_site_moderator(self.request)
        duplicates = find_duplicates_artist(self.context, self.duplicates_state)
        diff_bodies = {}
        context_view = self.content(
            args={'object': self.context},
            template=self.context.templates.get('diff', None))['body']

        for duplicate in duplicates:
            duplicate_view = self.content(
                args={'object': duplicate},
                template=duplicate.templates.get('diff', None))['body']
            soupt, textdiff = html_diff_wrapper.render_html_diff(
                context_view, duplicate_view)
            diff_bodies[duplicate] = (textdiff, get_oid(duplicate))

        values = {'context': self.context,
                  'oid': get_oid(self.context),
                  'context_view': context_view,
                  'contents': diff_bodies,
                  'row_len': math.ceil(len(diff_bodies)/2),
                  'is_manager': is_manager,
                  'view': self}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #15
0
def clean_reviews(root, registry):
    import json
    from substanced.util import get_oid
    from dace.util import find_catalog

    wapis = [s for s in root.site_folders if s.title == 'Sortir Wapi']
    lilles = [s for s in root.site_folders if s.title == 'Sortir Lille']
    wapi_site = wapis[0]
    wapi_site_oid = get_oid(wapi_site)
    lille_site = lilles[0]
    lille_site_oid = get_oid(lille_site)
    with open('critiques.json') as data_file:
        entities = json.load(data_file)
        entities_with_ids = [entity for entity in entities
                             if entity.get('source_data', {}).get('id', None)]
        ids = {str(entity['source_data']['id'] + '_' + entity['source_data']['source_id']): entity
               for entity in entities_with_ids}
        lac_catalog = find_catalog('lac')
        object_id_index = lac_catalog['object_id']
        reviews = object_id_index.any(list(ids.keys())).execute()
        len_entities = str(len(reviews))
        for index, review in enumerate(reviews):
            reviwe_site = getattr(review, 'source_data', {}).get('site', None)
            if reviwe_site != 'wapi':
                review.access_control = PersistentList(
                    [wapi_site_oid, lille_site_oid])
                review.reindex()
                log.info("Wapi-Lille: "+str(index) + "/" + len_entities)
            else:
                log.info("Wapi: "+str(index) + "/" + len_entities)

    log.info('Clean review evolved.')
Example #16
0
def content_added_or_removed(event):
    """ Generates ContentAdded and ContentRemoved audit events """
    if IObjectWillBeRemoved.providedBy(event):
        event_name = 'ContentRemoved'
    elif IObjectAdded.providedBy(event):
        event_name = 'ContentAdded'
    else:
        return False # for testing
    userinfo = get_userinfo()
    eventscribe = AuditScribe(event.object)
    parent = event.parent
    # this is an event related to the *container*, not to the object.
    folder_oid = get_oid(parent, None)
    object_oid = get_oid(event.object, None)
    folder_path = resource_path(parent)
    object_name = event.name
    moving = bool(event.moving)
    loading = bool(event.loading)
    content_type = str(event.registry.content.typeof(event.object))
    eventscribe.add(
        event_name,
        folder_oid,
        object_oid=object_oid,
        folder_oid=folder_oid,
        folder_path=folder_path,
        object_name=object_name,
        content_type=content_type,
        userinfo=userinfo,
        moving=moving,
        loading=loading,
        )
Example #17
0
    def _add_vote_actions(self, tag, correction, request):
        dace_ui_api = get_current_registry().getUtility(
            IDaceUIAPI, 'dace_ui_api')
        if not hasattr(self, '_correctitemaction'):
            correctitemnode = self.process['correctitem']
            correctitem_wis = [
                wi for wi in correctitemnode.workitems
                if wi.node is correctitemnode
            ]
            if correctitem_wis:
                self._correctitemaction = correctitem_wis[0].actions[0]

        if hasattr(self, '_correctitemaction'):
            actionurl_update = dace_ui_api.updateaction_viewurl(
                request=request,
                action_uid=str(get_oid(self._correctitemaction)),
                context_uid=str(get_oid(correction)))
            values = {'favour_action_url': actionurl_update,
                      'edit_action_url': tag.find_all('ins') and \
                                         actionurl_update or None,
                      'against_action_url': actionurl_update}
            body = renderers.render(self.correction_item_template, values,
                                    request)
            correction_item_soup = BeautifulSoup(body)
            tag.append(correction_item_soup.body)
            tag.body.unwrap()
Example #18
0
def reviwes_access_control_evolve(root, registry):
    from lac.views.filter import find_entities
    from lac.content.interface import IBaseReview
    from substanced.util import get_oid

    reviews = find_entities(interfaces=[IBaseReview])
    len_entities = str(len(reviews))
    wapis = [s for s in root.site_folders if s.title == 'Sortir Wapi']
    lilles = [s for s in root.site_folders if s.title == 'Sortir Lille']
    wapi_site = wapis[0]
    wapi_site_oid = get_oid(wapi_site)
    lille_site = lilles[0]
    lille_site_oid = get_oid(lille_site)
    for index, review in enumerate(reviews):
        reviwe_site = getattr(review, 'source_data', {}).get('site', None)
        reviwe_siteid = getattr(review, 'source_data', {}).get('source_id', None)
        if reviwe_site == 'wapi':
            review.source_site = wapi_site_oid
            review.access_control = PersistentList([wapi_site_oid])
            log.info("Wapi: "+str(index) + "/" + len_entities)
        elif reviwe_siteid == 'sortir':
            review.source_site = lille_site_oid
            review.access_control = PersistentList([lille_site_oid])
            #log.info("Lille: "+str(index) + "/" + len_entities)
        else:
            source_site = review.source_site if review.source_site else 'all'
            review.access_control = PersistentList([source_site])
            #log.info("CrerationCulturelle: "+str(index) + "/" + len_entities)

        review.reindex()

    log.info('Review access_control evolved.')
Example #19
0
    def start(self, context, request, appstruct, **kw):
        appstruct.pop('_csrf_token_')
        user = request.user
        appstruct['user'] = '******'
        if user:
            appstruct['user'] = get_oid(user)

        now = datetime.datetime.now(tz=pytz.timezone('Europe/Paris'))
        appstruct['date'] = now.isoformat()
        site = get_site_folder(True, request)
        appstruct['site'] = get_oid(site)
        alert('arango', [], ["lac." + appstruct['id']], appstruct)
        #alert slack
        appstruct['date'] = to_localized_time(now, translate=True)
        text = 'Aimez-vous la nouvelle version: {new_version}\n '
        if appstruct['new_version'] == 'False':
            text += 'Pourquoi non: {explanation}\n '

        text += 'Aimeriez-vous une application mobile: {mobile_application}\n \n User: {user}\n Email: {email}\n Date: {date}'
        text = text.format(**appstruct)
        alert('slack', [], ['questionnaire'], {'text': text})
        if user and not getattr(user, 'email', ''):
            user.email = appstruct.get('email', '')

        return {}
Example #20
0
File: util.py Project: ecreall/dace
def get_access_keys(user, root=None, to_exclude=[]):
    if isinstance(user, Anonymous):
        return ['anonymous']

    principals = find_service('principals')
    sd_admin = principals['users']['admin']
    pricipal_root = getSite()
    if root is None:
        root = pricipal_root

    root_oid = get_oid(root)
    principal_root_oid = get_oid(pricipal_root)
    if sd_admin is user:
        return list(set([('admin'+'_'+str(root_oid)).lower(),
                ('admin'+'_'+str(principal_root_oid)).lower()]))

    groups = list(getattr(user, 'user_groups', []))
    groups.append(user)
    relations = []
    for group in groups:
        opts = {u'source_id': get_oid(group)}
        opts[u'reftype'] = 'Role'
        relations.extend(list(find_relations(group, opts).all()))

    result = [(t.relation_id+'_'+str(t.target_id)).lower() \
              for t in relations if t.target_id not in to_exclude]
    for relation in relations:
        if relation.relation_id == 'Admin':
            result.append(('admin'+'_'+str(principal_root_oid)).lower())
            break

    return list(set(result))
Example #21
0
def serialize_roles(roles, root=None):
    result = []
    principal_root = getSite()
    if principal_root is None:
        return []

    if root is None:
        root = principal_root

    root_oid = str(get_oid(root, ''))
    principal_root_oid = str(get_oid(principal_root, ''))
    for role in roles:
        if isinstance(role, tuple):
            obj_oid = str(get_oid(role[1], ''))
            result.append((role[0]+'_'+obj_oid).lower())
            superiors = getattr(DACE_ROLES.get(role[0], _marker),
                                'all_superiors', [])
            result.extend([(r.name+'_'+obj_oid).lower()
                           for r in superiors])
        else:
            result.append(role.lower()+'_'+root_oid)
            superiors = getattr(DACE_ROLES.get(role, _marker),
                                'all_superiors', [])
            result.extend([(r.name+'_'+root_oid).lower() for r in
                           superiors])

        for superior in superiors:
            if superior.name == 'Admin':
                result.append('admin_'+principal_root_oid)
                break

    return list(set(result))
Example #22
0
def serialize_roles(roles, root=None):
    result = []
    principal_root = getSite()
    if principal_root is None:
        return []

    if root is None:
        root = principal_root

    root_oid = str(get_oid(root, ''))
    principal_root_oid = str(get_oid(principal_root, ''))
    for role in roles:
        if isinstance(role, tuple):
            obj_oid = str(get_oid(role[1], ''))
            result.append((role[0] + '_' + obj_oid).lower())
            superiors = getattr(DACE_ROLES.get(role[0], _marker),
                                'all_superiors', [])
            result.extend([(r.name + '_' + obj_oid).lower()
                           for r in superiors])
        else:
            result.append(role.lower() + '_' + root_oid)
            superiors = getattr(DACE_ROLES.get(role, _marker), 'all_superiors',
                                [])
            result.extend([(r.name + '_' + root_oid).lower()
                           for r in superiors])

        for superior in superiors:
            if superior.name == 'Admin':
                result.append('admin_' + principal_root_oid)
                break

    return list(set(result))
Example #23
0
def get_access_keys(user, root=None, to_exclude=[]):
    if isinstance(user, Anonymous):
        return ['anonymous']

    principals = find_service(user, 'principals')
    sd_admin = principals['users']['admin']
    pricipal_root = getSite()
    if root is None:
        root = pricipal_root

    root_oid = get_oid(root)
    principal_root_oid = get_oid(pricipal_root)
    if sd_admin is user:
        return list(set([('admin'+'_'+str(root_oid)).lower(),
                ('admin'+'_'+str(principal_root_oid)).lower()]))

    groups = list(getattr(user, 'groups', []))
    groups.append(user)
    relations = []
    for group in groups:
        opts = {u'source_id': get_oid(group)}
        opts[u'reftype'] = 'Role'
        relations.extend(list(find_relations(group, opts).all()))

    result = [(t.relation_id+'_'+str(t.target_id)).lower() \
              for t in relations if t.target_id not in to_exclude]
    for relation in relations:
        if relation.relation_id == 'Admin':
            result.append(('admin'+'_'+str(principal_root_oid)).lower())
            break

    return list(set(result))
Example #24
0
    def start(self, context, request, appstruct, **kw):
        subject = appstruct.get('subject')
        mail = appstruct.get('message')
        sender = appstruct.get('email')
        services = appstruct.get('services')
        alert('email', [sender], list(services), {
            'subject': subject,
            'body': mail
        })
        appstruct.pop('_csrf_token_')
        user = request.user
        appstruct['user'] = '******'
        if user:
            appstruct['user'] = get_oid(user)

        now = datetime.datetime.now(tz=pytz.timezone('Europe/Paris'))
        appstruct['date'] = now.isoformat()
        appstruct['services'] = str(appstruct['services'])
        site = get_site_folder(True, request)
        appstruct['site'] = get_oid(site)
        alert('arango', [], ["lac.contact"], appstruct)
        #alert slack
        appstruct['date'] = to_localized_time(now, translate=True)
        text = 'Sujet: {subject}\n Message: {message}\n User: {user}\n Nom: {name}\n Email: {email}\n Date: {date}\n\n Service: {services}'.format(
            **appstruct)
        alert('slack', [], ['lac_contact'], {'text': text})
        if user and not getattr(user, 'email', ''):
            user.email = sender

        return {}
Example #25
0
    def start(self, context, request, appstruct, **kw):
        appstruct.pop('_csrf_token_')
        site = get_site_folder(True, request)
        contacts = [c for c in getattr(site, 'contacts', [])
                    if c.get('email', None)]
        if contacts:
            subject = "Avis d'un utilisateur"
            mail = appstruct.get('improvement')
            sender = appstruct.get('email')
            alert('email', [sender], [contacts[-1].get('email')],
                  {'subject': subject, 'body': mail})

        user = request.user
        appstruct['user'] = '******'
        if user:
            appstruct['user'] = get_oid(user)

        now = datetime.datetime.now(tz=pytz.timezone('Europe/Paris'))
        appstruct['date'] = now.isoformat()
        appstruct['site'] = get_oid(site)
        alert('arango', [], ["lac."+appstruct['id']], appstruct)
        #alert slack
        appstruct['date'] = to_localized_time(
            now, translate=True)
        text = '{improvement}\n User: {user}\n URL: {url}\n Email: {email}\n Date: {date}'.format(**appstruct)
        alert('slack', [], ['improve'], {'text': text})
        if user and not getattr(user, 'email', ''):
            user.email = appstruct.get('email', '')

        return {}
Example #26
0
    def start(self, context, request, appstruct, **kw):
        appstruct.pop('_csrf_token_')
        user = request.user
        appstruct['user'] = '******'
        if user:
            appstruct['user'] = get_oid(user)

        now = datetime.datetime.now(tz=pytz.timezone('Europe/Paris'))
        appstruct['date'] = now.isoformat()
        site = get_site_folder(True, request)
        appstruct['site'] = get_oid(site)
        alert('arango', [], ["lac."+appstruct['id']], appstruct)
        #alert slack
        appstruct['date'] = to_localized_time(
            now, translate=True)
        text = 'Aimez-vous la nouvelle version: {new_version}\n '
        if appstruct['new_version'] == 'False':
            text += 'Pourquoi non: {explanation}\n '

        text += 'Aimeriez-vous une application mobile: {mobile_application}\n \n User: {user}\n Email: {email}\n Date: {date}'
        text = text.format(**appstruct)
        alert('slack', [], ['questionnaire'], {'text': text})
        if user and not getattr(user, 'email', ''):
            user.email = appstruct.get('email', '')

        return {}
Example #27
0
    def start(self, context, request, appstruct, **kw):
        subject = appstruct.get('subject')
        mail = appstruct.get('message')
        sender = appstruct.get('email')
        services = appstruct.get('services')
        alert('email', [sender], list(services),
              {'subject': subject, 'body': mail})
        appstruct.pop('_csrf_token_')
        user = request.user
        appstruct['user'] = '******'
        if user:
            appstruct['user'] = get_oid(user)

        now = datetime.datetime.now(tz=pytz.timezone('Europe/Paris'))
        appstruct['date'] = now.isoformat()
        appstruct['services'] = str(appstruct['services'])
        site = get_site_folder(True, request)
        appstruct['site'] = get_oid(site)
        alert('arango', [], ["lac.contact"], appstruct)
        #alert slack
        appstruct['date'] = to_localized_time(
            now, translate=True)
        text = 'Sujet: {subject}\n Message: {message}\n User: {user}\n Nom: {name}\n Email: {email}\n Date: {date}\n\n Service: {services}'.format(**appstruct)
        alert('slack', [], ['lac_contact'], {'text': text})
        if user and not getattr(user, 'email', ''):
            user.email = sender

        return {}
Example #28
0
 def _get_query(self, user):
     dace_catalog = find_catalog('dace')
     novaideo_catalog = find_catalog('novaideo')
     object_authors_index = novaideo_catalog['object_authors']
     container_index = dace_catalog['container_oid']
     return container_index.eq(get_oid(self.context)) & \
         object_authors_index.notany([get_oid(user)])
Example #29
0
    def test_disconnect_relation(self):
        before = len(get_relations_container(self.app))
        source, target, relation = self._create_relation()
        self.assertEqual(len(get_relations_container(source)), before + 1)
        results = find_relations(source, {'target_id': get_oid(target)})

        before = len(get_relations_container(self.app))
        disconnect(relation)
        self.assertEqual(len(get_relations_container(source)), before - 1)
        results = find_relations(source, {'target_id': get_oid(target)})
        self.assertEqual(len(list(results)), 0)
Example #30
0
    def test_disconnect_relation(self):
        before = len(get_relations_container(self.app))
        source, target, relation = self._create_relation()
        self.assertEqual(len(get_relations_container(source)), before + 1)
        results = find_relations(source, {'target_id': get_oid(target)})

        before = len(get_relations_container(self.app))
        disconnect(relation)
        self.assertEqual(len(get_relations_container(source)), before - 1)
        results = find_relations(source, {'target_id': get_oid(target)})
        self.assertEqual(len(list(results)), 0)
Example #31
0
    def test_remove_target(self):
        before = len(get_relations_container(self.app))
        source, target, relation = self._create_relation()
        self.assertEqual(len(get_relations_container(source)), before + 1)
        results = find_relations(source, {'target_id': get_oid(target)})
        self.assertEqual(len(list(results)), 1)

        before = len(get_relations_container(self.app))
        del target.__parent__[target.__name__]
        self.assertEqual(len(get_relations_container(source)), before - 1)
        results = find_relations(source, {'target_id': get_oid(target)})
        self.assertEqual(len(list(results)), 0)
Example #32
0
    def test_remove_target(self):
        before = len(get_relations_container(self.app))
        source, target, relation = self._create_relation()
        self.assertEqual(len(get_relations_container(source)), before + 1)
        results = find_relations(source, {'target_id': get_oid(target)})
        self.assertEqual(len(list(results)), 1)

        before = len(get_relations_container(self.app))
        del target.__parent__[target.__name__]
        self.assertEqual(len(get_relations_container(source)), before - 1)
        results = find_relations(source, {'target_id': get_oid(target)})
        self.assertEqual(len(list(results)), 0)
Example #33
0
    def start(self, context, request, appstruct, **kw):
        access_control = appstruct['access_control']
        if 'self' in access_control:
            site = get_site_folder(True, request)
            if site:
                access_control = list(access_control)
                access_control.remove('self')
                access_control.append(get_oid(site))

        access_control = [get_oid(obj, obj) for obj in access_control]
        context.access_control = PersistentList(access_control)
        context.reindex()
        return {}
Example #34
0
    def start(self, context, request, appstruct, **kw):
        access_control = appstruct['access_control']
        if 'self' in access_control:
            site = get_site_folder(True, request)
            if site:
                access_control = list(access_control)
                access_control.remove('self')
                access_control.append(get_oid(site))

        access_control = [get_oid(obj, obj) for obj in access_control]
        context.access_control = PersistentList(access_control)
        context.reindex()
        return {}
Example #35
0
 def setUp(self):
     super(TestVoteIntegration, self).setUp()
     self.user1 = self.root['principals']['users']['user1'] = User()
     self.user2 = self.root['principals']['users']['user2'] = User()
     self.user3 = self.root['principals']['users']['user3'] = User()
     self.user4 = self.root['principals']['users']['user4'] = User()
     self.subject1 = self.root['subject1'] = SubjectType(title='subject1')
     self.subject2 = self.root['subject2'] = SubjectType(title='subject2')
     self.subject3 = self.root['subject3'] = SubjectType(title='subject3')
     self.subject4 = self.root['subject4'] = SubjectType(title='subject4')
     self.oid_subject1 = get_oid(self.subject1)
     self.oid_subject2 = get_oid(self.subject2)
     self.oid_subject3 = get_oid(self.subject3)
     self.oid_subject4 = get_oid(self.subject4)
Example #36
0
 def setUp(self):
     super(TestVoteIntegration, self).setUp()
     self.user1 = self.root['principals']['users']['user1'] = User()
     self.user2 = self.root['principals']['users']['user2'] = User()
     self.user3 = self.root['principals']['users']['user3'] = User()
     self.user4 = self.root['principals']['users']['user4'] = User()
     self.subject1 = self.root['subject1'] = SubjectType(title='subject1')
     self.subject2 = self.root['subject2'] = SubjectType(title='subject2')
     self.subject3 = self.root['subject3'] = SubjectType(title='subject3')
     self.subject4 = self.root['subject4'] = SubjectType(title='subject4')
     self.oid_subject1 = get_oid(self.subject1)
     self.oid_subject2 = get_oid(self.subject2)
     self.oid_subject3 = get_oid(self.subject3)
     self.oid_subject4 = get_oid(self.subject4)
Example #37
0
    def _identify_corrections(self, soup, correction, descriminator, content, user):
        correction_tags = soup.find_all('span', {'id': "correction"})
        correction_oid = str(get_oid(correction))
        user_oid = get_oid(user)
        for correction_tag in correction_tags:
            correction_tag['data-correction'] = correction_oid
            correction_tag['data-item'] = str(descriminator)
            correction_tag['data-content'] = content
            init_vote = {'favour': [user_oid],
                         'against': [], 'content': content}
            correction.corrections[str(descriminator)] = init_vote
            descriminator += 1

        return descriminator
Example #38
0
    def all_alerts(self):
        novaideo_catalog = find_catalog('novaideo')
        dace_catalog = find_catalog('dace')
        alert_keys_index = novaideo_catalog['alert_keys']
        alert_exclude_keys_index = novaideo_catalog['alert_exclude_keys']
        object_provides_index = dace_catalog['object_provides']
        exclude = [str(get_oid(self))]
        if self.mask:
            exclude.append(str(get_oid(self.mask)))

        query = object_provides_index.any([IAlert.__identifier__]) & \
            alert_keys_index.any(self.get_alerts_keys()) & \
            alert_exclude_keys_index.notany(exclude)
        return query.execute()
Example #39
0
    def all_alerts(self):
        novaideo_catalog = find_catalog('novaideo')
        dace_catalog = find_catalog('dace')
        alert_keys_index = novaideo_catalog['alert_keys']
        alert_exclude_keys_index = novaideo_catalog['alert_exclude_keys']
        object_provides_index = dace_catalog['object_provides']
        exclude = [str(get_oid(self))]
        if self.mask:
            exclude.append(str(get_oid(self.mask)))

        query = object_provides_index.any([IAlert.__identifier__]) & \
            alert_keys_index.any(self.get_alerts_keys()) & \
            alert_exclude_keys_index.notany(exclude)
        return query.execute()
Example #40
0
    def action_infomrations(self, action, context, request=None, **args):
        action_id = action.behavior_id
        view_title = action.title
        view = DEFAULTMAPPING_ACTIONS_VIEWS.get(action._class_, None)
        if view:
            view_title = getattr(view, 'title', view_title)

        action_oid = 'start'
        context_oid = get_oid(context)
        try:
            action_oid = get_oid(action)
        except Exception:
            pass

        action_id = action_id + str(action_oid) + '_' + str(context_oid)
        if action_oid == 'start':
            after_url = self.afterexecution_viewurl(
                request=request,
                isstart=True,
                context_uid=str(context_oid),
                pd_id=action.node.process.id,
                action_id=action.node.__name__,
                behavior_id=action.behavior_id)
            actionurl_update = self.updateaction_viewurl(
                request=request,
                isstart=True,
                context_uid=str(context_oid),
                pd_id=action.node.process.id,
                action_id=action.node.__name__,
                behavior_id=action.behavior_id)
        else:
            after_url = self.afterexecution_viewurl(
                request=request,
                action_uid=str(action_oid),
                context_uid=str(context_oid))
            actionurl_update = self.updateaction_viewurl(
                request=request,
                action_uid=str(action_oid),
                context_uid=str(context_oid))

        informations = {}
        informations.update({'action': action,
                             'action_id': action_id,
                             'actionurl_update': actionurl_update,
                             'actionurl_after': after_url,
                             'view_title': view_title
                             })

        return informations
Example #41
0
def get_valid_sites(root):
    """Return sites by service if sites have
       recorded the import service."""

    sites = root.site_folders
    valid_sites = {}
    for site in sites:
        valid_sites[site] = []
        importservices = site.get_services('importservice')
        if importservices:
            for service in importservices:
                if service.is_valid(site, None):
                    valid_sites[site].append(service)

    result = {}
    for provider in IMPORT_SOURCES:
        result[provider] = []
        for site in valid_sites:
            if any(provider in getattr(service, 'sources', [])
                   for service in valid_sites[site]):
                result[provider].append(get_oid(site))

        result[provider] = list(set(result[provider]))

    return result
Example #42
0
    def __call__(self):
        labels = getattr(self.context, 'labels', [])
        labels_data = [{
            'title': l.title,
            'img': l.picture.url
        } for l in labels]
        labels_data = sorted(labels_data, key=lambda e: e['title'])
        site = self.request.get_site_folder
        site_oid = get_oid(site)
        if site_oid != self.context.source_site:
            orig_site = get_obj(self.context.source_site)
            if orig_site.favicon:
                labels_data.append({
                    'title': orig_site.title,
                    'img': orig_site.favicon.url,
                    'url': orig_site.urls_ids[0]
                })

        source_id = getattr(self.context, 'source_data',
                            {}).get('source_id', None)
        source_data = IMPORT_SOURCES.get(source_id, None)
        if source_data:
            labels_data.append({
                'title':
                source_data['title'],
                'img':
                self.request.static_url(source_data['icon']),
                'url':
                source_data['url']
            })

        return {'labels': labels_data}
Example #43
0
    def serialize(self, node, appstruct):
        _object = None
        if appstruct is None:
            appstruct = colander.null

        if appstruct is not colander.null and \
            not isinstance(appstruct, (dict, PersistentDict)):
            _object = appstruct
            appstruct = _object.get_data(node)

        result = None
        if not self._is_special_object:
            result = colander.Mapping.serialize(self, node, appstruct)
            if not self.editable or result is colander.null:
                return result
        else:
            if appstruct is colander.null:
                return appstruct

            result = appstruct

        if _object is not None:
            result[OBJECT_OID] = get_oid(_object)

        return result
Example #44
0
def logged_in(event):
    context = event.request.context  # event.context may be HTTPForbidden
    log = get_auditlog(context)
    if log is None:
        return
    user_oid = get_oid(event.user, None)
    log.add('LoggedIn', None, login=event.login, user_oid=user_oid)
Example #45
0
def get_obj_value(obj, fields={}):
    interfaces = [i for i in providedBy(obj).interfaces()]
    if not interfaces:
        return {}

    result = {}
    objects_to_add = []
    if fields:
        for interface in interfaces:
            attributes = [
                a for a in interface
                if a in fields and isinstance(interface[a], Attribute)
            ]
            for attr in attributes:
                result[attr], to_add = get_attr_value(interface[attr], obj,
                                                      fields.get(attr, {}))
                objects_to_add.extend(to_add)

    else:
        for interface in interfaces:
            attributes = [
                a for a in interface if isinstance(interface[a], Attribute)
            ]
            for attr in attributes:
                result[attr], to_add = get_attr_value(interface[attr], obj)
                objects_to_add.extend(to_add)

    result = normalize_value(result)
    result['@id'] = '_:' + str(get_oid(obj, 'None'))
    result['@type'] = getattr(obj, 'type_title', obj.__class__.__name__)
    contributors = getattr(obj, 'contributors', None)
    if contributors:
        result['creator_email'] = contributors[0].email
    return result, objects_to_add
Example #46
0
def relatedcontents_choice(node, kw):
    request = node.bindings['request']
    context = node.bindings['context']
    root = getSite()
    values = []
    if isinstance(context, Comment) and\
       context.related_correlation:
        values = [(get_oid(t), t.title) for t in context.associated_contents]

    def title_getter(id):
        try:
            obj = get_obj(int(id), None)
            if obj:
                return obj.title
            else:
                return id
        except Exception as e:
            log.warning(e)
            return id

    ajax_url = request.resource_url(root,
                                    '@@novaideoapi',
                                    query={'op': 'find_correlable_entity'})
    return AjaxSelect2Widget(
        values=values,
        ajax_url=ajax_url,
        ajax_item_template="related_item_template",
        css_class="search-idea-form",
        title_getter=title_getter,
        multiple=True,
        page_limit=50,
        item_css_class="comment-form-group comment-related-form")
Example #47
0
def logged_in(event):
    context = event.request.context # event.context may be HTTPForbidden
    scribe = _get_scribe(context)
    if scribe is None:
        return
    user_oid = get_oid(event.user, None)
    scribe.add('LoggedIn', None, login=event.login, user_oid=user_oid)
Example #48
0
def publish_artist(context, request=None, user=None):
    context.state = PersistentList(['published'])
    context.modified_at = datetime.datetime.now(tz=pytz.UTC)
    context.origin_oid = get_oid(context)
    site = get_site_folder(True, request)
    root = getattr(request, 'root', None) if request else getSite()
    author = getattr(context, 'author', None)
    if author and user is not author:
        alert('internal', [site], [author],
              {'kind': InternalAlertKind.moderation_alert,
               'subjects': [context]})

    original = context.original
    if original:
        replaced = original.replace_by(context)
        if replaced:
            request.registry.notify(ObjectReplaced(
                old_object=original,
                new_object=context
            ))
            author = getattr(original, 'author', None)
            if author and user is not author:
                alert('internal', [site], [author],
                      {'kind': InternalAlertKind.content_alert,
                       'subjects': [context],
                       'alert_kind': 'replaced',
                       'replaced_title': original.title})

            root.delfromproperty('artists', original)

    context.reindex()
Example #49
0
 def redirect(self, context, request, **kw):
     person = kw['person']
     headers = remember(request, get_oid(person))
     request.registry.notify(LoggedIn(person.email, person,
                                      context, request))
     return HTTPFound(location=request.resource_url(context),
                      headers=headers)
Example #50
0
    def start(self, context, request, appstruct, **kw):
        email = appstruct.pop('email')
        newnewsletters = appstruct.pop('newsletters')
        first_name = appstruct.get('first_name')
        last_name = appstruct.get('last_name')
        random_key = gen_random_token()
        root = getSite()
        mail_template = root.get_mail_template('newsletter_subscription')
        for newsletter in newnewsletters:
            newsletter.subscribe(first_name, last_name, email, random_key)
            url = request.resource_url(context,
                                       '@@userunsubscribenewsletter',
                                       query={
                                           'oid': get_oid(newsletter),
                                           'user': email + '@@' + random_key
                                       })
            email_data = get_entity_data(newsletter, 'newsletter', request)
            subject = mail_template['subject'].format(
                newsletter_title=newsletter.title, novaideo_title=root.title)
            mail = mail_template['template'].format(first_name=first_name,
                                                    last_name=last_name,
                                                    unsubscribeurl=url,
                                                    novaideo_title=root.title,
                                                    **email_data)
            alert('email', [root.get_site_sender()], [email],
                  subject=subject,
                  body=mail)

        return {}
    def find_advertistings(self):
        #TODO frequence
        root = getSite()
        context, is_root = self.get_context(root)
        keywords = []
        if hasattr(context, 'get_all_keywords'):
            keywords = list(context.get_all_keywords())
        else:
            keywords = list(getattr(context, 'keywords', []))

        if not keywords:
            keywords = [ROOT_TREE]

        advertisings = getattr(self.request, 'cache_advertisings', None)
        if advertisings is None:
            site = str(get_oid(self.request.get_site_folder))
            advertisings = find_entities(
                interfaces=[IWebAdvertising],
                keywords=keywords,
                metadata_filter={'states': ['published']},
                other_filter={'sources': [site]},
                force_publication_date=True)
            self.request.cache_advertisings = advertisings

        advertisings = [a for a in advertisings
                        if self.name in getattr(a, 'positions', [])]
        if not is_root:
            advertisings = sorted(
                advertisings,
                key=lambda e:
                    getattr(e, 'tree', {}).get(ROOT_TREE, {}) and 1 or 2)

        return advertisings
Example #52
0
    def update(self):
        user = get_current()
        related_ideas = [i for i in self.context.related_ideas
                         if can_access(user, i)]
        result = {}
        target = None
        try:
            editform = self.parent.parent.validated_children[0]
            target = editform.viewid+'_'+editform.formid
        except Exception:
            pass

        ideas = []
        for i in related_ideas:
            data = {'title': i.title,
                    'id': get_oid(i),
                    'body': renderers.render(self.idea_template,
                                             {'idea': i}, self.request)
                    }
            ideas.append(data)

        values = {
            'items': ideas,
            'target': target
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Example #53
0
 def update(self):
     user = get_current()
     context_oid = get_oid(self.context)
     dace_index = find_catalog('dace')
     dace_container_oid = dace_index['container_oid']
     query = dace_container_oid.eq(context_oid)
     objects = find_entities(
         user=user,
         interfaces=[ISReport],
         metadata_filter={'states': [self.report_state]},
         add_query=query)
     url = self.request.resource_url(
         self.context, '', query={'view_report_state': self.report_state})
     batch = Batch(objects,
                   self.request,
                   url=url,
                   default_size=BATCH_DEFAULT_SIZE)
     self.title = _(self.title, mapping={'nb': batch.seqlen})
     batch.target = "#results" + "-report-" + self.report_state.replace(
         ' ', '')
     result_body, result = render_listing_objs(self.request, batch, user)
     values = {
         'bodies': result_body,
         'batch': batch,
         'empty_message': self.empty_message,
         'empty_icon': self.empty_icon
     }
     body = self.content(args=values, template=self.template)['body']
     item = self.adapt_item(body, self.viewid)
     result['coordinates'] = {self.coordinates: [item]}
     return result
def performers_choices(context, request):
    performers = request.virtual_root.get('performers')
    if performers is None:
        return () # fbo dump/load
    values = [(get_oid(performer), name) for name, performer in 
                performers.items()]
    return values
Example #55
0
    def get_action_body(
        self, context, request, action,
        add_action_discriminator=False, unwrap=True,
        include_resources=False):
        body = ''
        resources = {
            'css_links': [],
            'js_links': []
        }
        if action is not None:
            view = DEFAULTMAPPING_ACTIONS_VIEWS[action._class_]
            view_instance = view(context, request, behaviors=[action])
            if add_action_discriminator:
                action_oid = get_oid(action)
                view_instance.viewid += str(action_oid)

            if unwrap:
                view_instance.wrapper_template = 'daceui:templates/simple_view_wrapper.pt'

            view_result = view_instance()
            body = ''
            if isinstance(view_result, dict) and 'coordinates' in view_result:
                resources['css_links'] = view_result.get('css_links', [])
                resources['js_links'] = view_result.get('js_links', [])
                body = view_instance.render_item(view_result['coordinates'][view_instance.coordinates][0], 
                                                 view_instance.coordinates, None)
        if include_resources:
            return body, resources

        return body
Example #56
0
    def start(self, context, request, appstruct, **kw):
        item = appstruct['item']
        content = appstruct['content']
        item_data = context.corrections[item]
        if item_data.get('content', '#') == content:
            if appstruct.get('edited', False) and \
               appstruct.get('new_text', None):
                self._edit_item(context, content, appstruct)
                item_data['favour'] = []
                item_data['against'] = []

            vote = appstruct['vote'].lower() == 'true'
            user = get_current(request)
            user = context.proposal.working_group.get_member(user)
            user_oid = get_oid(user)
            if user_oid not in item_data['favour'] and \
               user_oid not in item_data['against']:
                if vote:
                    self._include_vote(context, request, item, content,
                                       'favour', user_oid, user)
                else:
                    self._include_vote(context, request, item, content,
                                       'against', user_oid, user)

        return {}