Beispiel #1
0
    def find_user(self, query=None):
        name = self.params('q')
        if name:
            page_limit, current_page, start, end = self._get_pagin_data()
            if is_all_values_key(name):
                result = find_entities(interfaces=[IPerson],
                                       metadata_filter={'states': ['active']},
                                       add_query=query)
            else:
                result = find_entities(interfaces=[IPerson],
                                       text_filter={'text_to_search': name},
                                       metadata_filter={'states': ['active']},
                                       add_query=query)
            resultlen = len(result)
            if resultlen < start:
                start = resultlen

            result = list(itertools.islice(result, start, end))
            default_img_url = self.request.static_url(
                'novaideo:static/images/user100.png')
            entries = [{
                'id': str(get_oid(e)),
                'text': e.title,
                'img_url': e.get_picture_url('profil', default_img_url)
            } for e in result]
            result = {'items': entries, 'total_count': resultlen}
            return result

        return {'items': [], 'total_count': 0}
Beispiel #2
0
def evolve_person_tokens(root, registry):
    from novaideo.views.filter import find_entities
    from novaideo.content.interface import IPerson, Iidea, IProposal
    from BTrees.OOBTree import OOBTree

    request = get_current_request()
    request.root = root  # needed when executing the step via sd_evolve script
    contents = find_entities(interfaces=[Iidea, IProposal])
    for index, node in enumerate(contents):
        if not hasattr(node, 'allocated_tokens'):
            node.allocated_tokens = OOBTree()
            node.len_allocated_tokens = PersistentDict({})

    contents = find_entities(interfaces=[IPerson])
    len_entities = str(len(contents))
    for index, node in enumerate(contents):
        if not hasattr(node, 'allocated_tokens'):
            node.allocated_tokens = OOBTree()
            node.len_allocated_tokens = PersistentDict({})
            node.reserved_tokens = PersistentList([])
            supports = [t for t in node.tokens_ref if t.__parent__ is not node]
            for token in supports:
                obj = token.__parent__
                if obj.__parent__:
                    evaluation = 'oppose' if token in obj.tokens_opposition else 'support'
                    node.add_token(obj, evaluation, root)
                    obj.add_token(node, evaluation)
                    if token.proposal:
                        node.add_reserved_token(obj)

                    node.reindex()

        log.info(str(index) + "/" + len_entities)

    log.info('Persons evolved.')
Beispiel #3
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)
Beispiel #4
0
def evolve_channels(root, registry):
    from novaideo.views.filter import find_entities
    from novaideo.content.interface import (
        Iidea, IAmendment, IProposal, ICorrelation,
        IPerson)
    from novaideo.core import Channel
    root = getSite()
    general = root.channels[0] if root.channels else Channel(title=_("General"))
    root.addtoproperty('channels', general)
    root.setproperty('general_chanel', general)
    contents = find_entities(
        interfaces=[Iidea, IAmendment, IProposal, ICorrelation])
    for entity in contents:
        if not entity.channel:
            entity.addtoproperty('channels', Channel())
            channel = entity.channel
            for comment in entity.comments:
                channel.addtoproperty('comments', comment)

    users = find_entities(
        interfaces=[IPerson])
    for member in users:
        selections = getattr(member, 'selections', [])
        for selection in selections:
            channel = getattr(selection, 'channel', None)
            if channel and member not in channel.members:
                channel.addtoproperty('members', member)

    log.info('Comments evolved.')
Beispiel #5
0
    def find_user(self, query=None):
        name = self.params('q')
        if name:
            page_limit, current_page, start, end = self._get_pagin_data()
            if is_all_values_key(name):
                result = find_entities(interfaces=[IPerson],
                                       metadata_filter={'states': ['active']},
                                       add_query=query)
            else:
                result = find_entities(interfaces=[IPerson],
                                       text_filter={'text_to_search': name},
                                       metadata_filter={'states': ['active']},
                                       add_query=query)
            resultlen = len(result)
            if resultlen < start:
                start = resultlen

            result = list(itertools.islice(result, start, end))
            default_img_url = self.request.static_url(
                'novaideo:static/images/user100.png')
            entries = [{'id': str(get_oid(e)),
                        'text': e.title,
                        'img_url': e.get_picture_url(
                            'profil', default_img_url)}
                       for e in result]
            result = {'items': entries, 'total_count': resultlen}
            return result

        return {'items': [], 'total_count': 0}
Beispiel #6
0
def get_folder_content(folder, user,
                       add_query=None,
                       **args):
    _filters = deepcopy(getattr(folder, 'filters', []))
    objects = []
    if _filters:
        query = None
        if add_query:
            query = QUERY_OPERATORS['and'](query, add_query)

        objects = find_entities(
            user=user,
            add_query=query,
            filters=_filters,
            filter_op='or',
            **args)

    oids = [get_oid(c) for c in folder.contents if can_access(user, c)]
    if args:
        contents = find_entities(
            user=user,
            intersect=oids,
            **args)
        oids = contents.ids if not isinstance(contents, list) else contents

    if isinstance(objects, list):
        objectmap = find_objectmap(folder)
        objects = ResultSet(oids, len(oids), objectmap.object_for)
    else: # ResultSet
        objects.ids = list(objects.ids)
        objects.ids.extend(oids)
        objects.numids += len(oids)

    return objects
Beispiel #7
0
    def find_entity(self, interfaces=[], states=['published', 'active'], query=None):
        name = self.params('q')
        if name:
            user = get_current()
            page_limit, current_page, start, end = self._get_pagin_data()
            if is_all_values_key(name):
                result = find_entities(
                    interfaces=interfaces,
                    metadata_filter={
                        'states': states},
                    user=user,
                    add_query=query)
            else:
                result = find_entities(
                    interfaces=interfaces,
                    metadata_filter={
                        'states': states},
                    user=user,
                    text_filter={'text_to_search': name},
                    add_query=query)
            
            resultlen = len(result)
            if resultlen < start:
                start = resultlen

            result = list(itertools.islice(result, start, end))
            entries = [{'id': str(get_oid(e)),
                        'text': e.title,
                        'icon': getattr(
                            e, 'icon', 'glyphicon glyphicon-question-sign')}
                       for e in result]
            result = {'items': entries, 'total_count': resultlen}
            return result

        return {'items': [], 'total_count': 0}
Beispiel #8
0
    def find_entities(self):
        name = self.params('text_to_search')
        contents = self.params('checkbox')
        if contents and not isinstance(contents, (list, tuple)):
            contents = [contents]

        if not contents:
            contents = get_default_searchable_content(self.request)
            contents = [c[0] for c in contents]

        if name:
            states = ['published', 'active']
            user = get_current()
            root = getSite()
            result = []
            if is_all_values_key(name):
                result = find_entities(metadata_filter={
                    'content_types': contents,
                    'states': states
                },
                                       user=user)
            else:
                result = find_entities(metadata_filter={
                    'content_types': contents,
                    'states': states
                },
                                       user=user,
                                       text_filter={'text_to_search': name})

            result_body = render_small_listing_objs(self.request,
                                                    list(result)[:NBRESULT],
                                                    user)
            values = {
                'entities':
                result_body,
                'all_url':
                self.request.resource_url(root,
                                          '@@search_result',
                                          query={
                                              'text_to_search': name,
                                              'content_types': contents
                                          }),
                'advenced_search_url':
                self.request.resource_url(root, '@@advanced_search')
            }
            body = self.content(args=values,
                                template=self.search_template)['body']
            return {'body': body}

        return {'body': ''}
Beispiel #9
0
    def get_similar_questions(self):
        user = get_current()
        # text = self.params('text')
        title = self.params('title')
        keywords = self.params('keywords')
        # text = text if text else ''
        title = title if title else ''
        keywords = keywords if keywords else []
        if not isinstance(keywords, list):
            keywords = [keywords]

        if not keywords and not title:  # and not text:
            return {'body': ''}

        title_keywords = extract_keywords(title)
        # text_keywords = extract_keywords(text)
        # keywords.extend(text_keywords[:5])
        keywords.extend(title_keywords)
        result = find_entities(
            interfaces=[IQuestion],
            user=user,
            text_filter={'text_to_search': ', '.join(keywords)},
            defined_search=True,
            generate_text_search=True)
        result_body = render_small_listing_objs(self.request,
                                                list(result)[:30], user)
        values = {'entities': result_body}
        body = self.content(args=values,
                            template=self.search_question_template)['body']
        return {'body': body}
Beispiel #10
0
    def get_similar_ideas(self):
        user = get_current()
        # text = self.params('text')
        title = self.params('title')
        tree = self.params('tree')
        # text = text if text else ''
        title = title if title else ''
        tree = tree if tree else {}
        if not isinstance(tree, dict):
            tree = json.loads(tree)

        if not tree and not title:  # and not text:
            return {'body': ''}

        title_keywords = extract_keywords(title)
        # text_keywords = extract_keywords(text)
        # keywords.extend(text_keywords[:5])
        result = find_entities(
            interfaces=[Iidea],
            user=user,
            metadata_filter={'tree': tree},
            text_filter={'text_to_search': ', '.join(title_keywords)},
            defined_search=True,
            generate_text_search=True)
        result_body = render_small_listing_objs(self.request,
                                                list(result)[:30], user)
        values = {'entities': result_body}
        body = self.content(args=values,
                            template=self.search_idea_template)['body']
        return {'body': body}
Beispiel #11
0
    def update(self):
        user = get_current()
        filter_form, filter_data = self._add_filter(user)
        args = merge_with_filter_view(self, {})
        args['request'] = self.request
        filters = [
            {
                'metadata_filter': {
                    'states': ['published'],
                    'interfaces': [IAnswer]
                }
            },
        ]
        # Answer is non a searchable element
        # we need add it to the args dict
        args['interfaces'] = [IAnswer]
        objects = find_entities(filters=filters,
                                user=user,
                                intersect=self._get_answers(user),
                                **args)
        objects, sort_body = sort_view_objects(self, objects, ['answer'], user,
                                               'nbsupport')
        url = self.request.resource_url(self.context, self.name)
        batch = Batch(objects,
                      self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results-answers"
        len_answers = batch.seqlen
        index = str(len_answers) if len_answers <= 1 else '*'
        if not self.parent:
            self.title = _(CONTENTS_MESSAGES[index],
                           mapping={'number': len_answers})
        elif index != '*':
            self.title = _('The answer')

        filter_data['filter_message'] = self.title
        filter_body = self.filter_instance.get_body(filter_data)
        result_body, result = render_listing_objs(self.request, batch, user)
        if filter_form:
            result = merge_dicts(
                {
                    'css_links': filter_form['css_links'],
                    'js_links': filter_form['js_links']
                }, result)

        values = {
            'bodies': result_body,
            'batch': batch,
            'empty_message': self.empty_message,
            'empty_icon': self.empty_icon,
            'filter_body': filter_body,
            'sort_body': sort_body,
            'view': self
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        item['isactive'] = True
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #12
0
def get_adapted_content(
    email, request, interfaces=[Iidea], content_types=['idea'], last_sending_date=None):
    body = ''
    novaideo_catalog = find_catalog('novaideo')
    identifier_index = novaideo_catalog['identifier']
    query = identifier_index.any([email])
    users = list(query.execute().all())
    member = users[0] if users else None
    query = None
    if last_sending_date:
        published_at_index = novaideo_catalog['published_at']
        query = published_at_index.gt(last_sending_date)

    entities = find_entities(
        interfaces=interfaces,
        metadata_filter={
            'content_types': content_types,
            'states': ['published'],
            'keywords': getattr(member, 'keywords', [])},
        sort_on='release_date',
        add_query=query)

    result = []
    for obj in entities:
        result.append(obj)
        if len(result) == 5:
            break

    if result:
        body = renderers.render(
            CONTENT_TEMPLATE, {'entities': result}, request)

    return body
Beispiel #13
0
    def find_entities(self):
        #page_limit, current_page, start, end = self._get_pagin_data()
        user = get_current()
        dace_catalog = find_catalog('dace')
        system_catalog = find_catalog('system')
        novaideo_catalog = find_catalog('novaideo')
        filter_schema = FindEntitiesJson(self.context, self.request)
        try:
            appstruct = filter_schema.calculate_posted_filter()
        except Exception as e:
            return {'items': [], 'total_count': 0, 'error': True,
                    'message': '{}: {}'.format(
                            e.__class__.__name__, e.args[0])}

        if appstruct is None:
            return {'items': [], 'total_count': 0, 'error': True,
                    'message': 'appstruct is None'}

        content_types_tree = appstruct['metadata_filter'].get('content_types', {}).copy()
        content_types = list(content_types_tree.keys())
        appstruct['metadata_filter'] = appstruct.get('metadata_filter', {})
        appstruct['metadata_filter']['content_types'] = content_types
        appstruct['dace'] = dace_catalog
        appstruct['system'] = system_catalog
        appstruct['novaideo'] = novaideo_catalog
        entities = find_entities(
            user=user, sort_on='release_date', include_site=True, **appstruct)

        def dumps(obj):
            """return values of attributes descibed in
               the colander schema node 'node' """
            registry = get_current_registry()
            content_type = registry.content.typeof(obj)
            fields = content_types_tree.get(content_type, {})
            result, to_add = get_obj_value(obj, fields)
            if result is None:
                return {}, to_add

            return result, to_add

        def merge_items(old_items, new_items):
            for item in new_items:
                oid = item.get('@id', None)
                if oid and oid not in old_items:
                    old_items[oid] = item
                elif oid:
                    old_item = old_items[oid]
                    old_items[oid] = merge_dicts([item, old_item])

        items = {}
        for entity in entities:
            values, to_add = dumps(entity)
            to_add.append(values)
            merge_items(items, to_add)

        result = {'items': list(items.values()), 'total_count': len(items)}
        response = Response()
        response.content_type = "application/json"
        response.text = json.dumps(result, indent=2)
        return response
Beispiel #14
0
    def get_similar_questions(self):
        user = get_current()
        # text = self.params('text')
        title = self.params('title')
        keywords = self.params('keywords')
        # text = text if text else ''
        title = title if title else ''
        keywords = keywords if keywords else []
        if not isinstance(keywords, list):
            keywords = [keywords]

        if not keywords and not title:# and not text:
            return {'body': ''}

        title_keywords = extract_keywords(title)
        # text_keywords = extract_keywords(text)
        # keywords.extend(text_keywords[:5])
        keywords.extend(title_keywords)
        result = find_entities(
            interfaces=[IQuestion],
            user=user,
            text_filter={'text_to_search': ', '.join(keywords)},
            defined_search=True,
            generate_text_search=True)
        result_body = render_small_listing_objs(
            self.request, list(result)[:30], user)
        values = {'entities': result_body}
        body = self.content(args=values,
                            template=self.search_question_template)['body']
        return {'body': body}
Beispiel #15
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
Beispiel #16
0
    def update(self):
        self.execute(None)
        user = get_current()
        objects = find_entities(
            user=user,
            interfaces=[IPreregistration],
            sort_on='release_date')
        batch = Batch(
            objects, self.request,
            default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_registrations"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'number': len_result})
        result_body, result = render_listing_objs(
            self.request, batch, user)

        values = {
            'bodies': result_body,
            'length': len_result,
            'batch': batch,
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #17
0
 def source(**args):
     filters = [{'metadata_filter': {'content_types': ['person']}}]
     objects = find_entities(user=user,
                             sort_on='last_connection',
                             filters=filters,
                             **args)
     return objects
Beispiel #18
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
Beispiel #19
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        report = appstruct['_object_data']
        context.addtoproperty('censoring_reason', report)
        grant_roles(user=user, roles=(('Owner', report), ))
        report.setproperty('author', user)
        report.reindex()
        context_oid = get_oid(context)
        dace_index = find_catalog('dace')
        dace_container_oid = dace_index['container_oid']
        query = dace_container_oid.eq(context_oid)
        reports = find_entities(
            interfaces=[ISReport],
            metadata_filter={
                'states': ['pending']},
            add_query=query)
        for report in reports:
            report.state = PersistentList(['processed'])
            report.reindex()

        context.init_len_current_reports()
        adapter = get_current_registry().queryAdapter(
            context, ISignalableObject)
        if adapter is not None:
            context.state.remove('reported')
            adapter.censor(request)

        return {}
Beispiel #20
0
    def update(self):
        self.execute(None)
        user = get_current()
        objects = find_entities(
            user=user, interfaces=[IChallenge],
            metadata_filter={'states': ['pending']},
            sort_on='release_date')
        url = self.request.resource_url(self.context, self.name)
        batch = Batch(
            objects, self.request, url=url, default_size=BATCH_HOME_DEFAULT_SIZE)
        batch.target = "#results-home-challenges"
        len_result = batch.seqlen
        user = get_current()
        if len_result == 0:
            self.no_challenges = True
            result = {}
            result_body = []
        else:
            self.title = self.request.localizer.translate(self.title)
            result_body, result = render_listing_objs(
                self.request, batch, user, 'card')

        values = {
            'bodies': result_body,
            'batch': batch
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #21
0
def evolve_examined_tokens(root, registry):
    from novaideo.views.filter import find_entities
    from novaideo.content.interface import Iidea, IProposal
    from BTrees.OOBTree import OOBTree

    request = get_current_request()
    request.root = root  # needed when executing the step via sd_evolve script

    contents = find_entities(
        interfaces=[Iidea, IProposal],
        metadata_filter={'states': ['examined']}
        )
    evaluations = {
        1: 'support',
        -1: 'withdraw',
        0: 'oppose'
    }
    for index, node in enumerate(contents):
        if hasattr(node, '_support_history'):
            history = sorted(node._support_history, key=lambda e: e[1])
            node.allocated_tokens = OOBTree()
            node.len_allocated_tokens = PersistentDict({})
            for value in history:
                user, date, evaluation = value
                user = get_obj(user)
                evaluation = evaluations[evaluation]
                if evaluation == 'withdraw':
                    node.remove_token(user)
                else:
                    node.add_token(user, evaluation)

            node.reindex()

    log.info('Tokens evolved.')
    def update(self):
        self.execute(None)
        user = get_current()
        objects = find_entities(user=user,
                                interfaces=[IPreregistration],
                                sort_on='release_date')
        batch = Batch(objects, self.request, default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_registrations"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'number': len_result})
        result_body, result = render_listing_objs(self.request, batch, user)

        values = {
            'bodies': result_body,
            'length': len_result,
            'batch': batch,
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #23
0
    def start(self, context, request, appstruct, **kw):
        user = get_current()
        report = appstruct['_object_data']
        context.addtoproperty('censoring_reason', report)
        grant_roles(user=user, roles=(('Owner', report), ))
        report.setproperty('author', user)
        report.reindex()
        context_oid = get_oid(context)
        dace_index = find_catalog('dace')
        dace_container_oid = dace_index['container_oid']
        query = dace_container_oid.eq(context_oid)
        reports = find_entities(interfaces=[ISReport],
                                metadata_filter={'states': ['pending']},
                                add_query=query)
        for report in reports:
            report.state = PersistentList(['processed'])
            report.reindex()

        context.init_len_current_reports()
        adapter = get_current_registry().queryAdapter(context,
                                                      ISignalableObject)
        if adapter is not None:
            context.state.remove('reported')
            adapter.censor(request)

        return {}
Beispiel #24
0
def evolve_alert_subjects(root, registry):
    from novaideo.views.filter import find_entities
    from novaideo.content.interface import IAlert
    from novaideo.content.alert import InternalAlertKind
    from BTrees.OOBTree import OOBTree
    import transaction

    contents = find_entities(interfaces=[IAlert])
    len_entities = str(len(contents))
    for index, alert in enumerate(contents):
        if alert.kind == InternalAlertKind.comment_alert:
            if alert.subjects:
                subjects = alert.subjects
                subject = subjects[0] if subjects else root
                if hasattr(subject, 'channel'):
                    alert.delfromproperty('subjects', subject)
                    alert.addtoproperty('subjects', subject.channel)
                    alert.reindex()
                else:
                    root.delfromproperty('alerts', alert)

        if index % 1000 == 0:
            log.info("**** Commit ****")
            transaction.commit()

        log.info(str(index) + "/" + len_entities)

    log.info('Alerts evolved')
    def update(self):
        self.execute(None)
        user = get_current()
        folders = find_entities(
            user=user,
            interfaces=[ISmartFolder])
        folders = [sf for sf in folders if not sf.parents]
        folders = sorted(folders, key=lambda e: e.get_order())
        root_navbars = generate_navbars(
            self.request, self.context,
            process_id='smartfoldermanagement',
            descriminators=['body-action'])
        len_result = len(folders)
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'number': len_result})
        result_body, result = render_listing_objs(
            self.request, folders, user)
        values = {
            'folders': result_body,
            'body_actions': root_navbars['body_actions']
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
 def bind(self):
     user = get_current()
     folders = find_entities(user=user,
                             interfaces=[ISmartFolder
                                         ])  #states=['published'])
     folders = [sf for sf in folders if not sf.parents]
     folders = sorted(folders, key=lambda e: e.get_order())
     return {'folders': folders}
Beispiel #27
0
    def update(self):
        user = get_current()
        validated = getattr(self, 'validated', {})
        not_validated = True if not validated else False
        posted = self.request.POST or self.request.GET or {}
        posted = posted.copy()
        executed = not not_validated
        if not_validated:
            formviewinstance = SearchView(self.context, self.request)
            formviewinstance.postedform = posted
            validated = formviewinstance.calculate_posted_filter()
            executed = getattr(formviewinstance, 'executed', False)

        if not executed or self.params('filter_result'):
            default_content = [key[0] for key in
                               get_default_searchable_content(self.request)]
            default_content.remove("person")
            default_content.remove("event")
            if 'question' in default_content:
                default_content.remove("question")

            filter_ = {
                'metadata_filter': {'content_types': default_content}
            }
            validated = merge_with_filter_view(self, {})
            validated['request'] = self.request
            validated['filters'] = [filter_]

        objects = find_entities(
            user=user,
            **validated)
        # content_types = validated.get('metadata_filter', {}).get('content_types', ['all'])
        # objects, sort_body = sort_view_objects(
        #     self, objects, content_types, user)
        url = self.request.resource_url(
            self.context, self.request.view_name,
            query=posted)
        batch = Batch(objects,
                      self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'number': len_result})
        result_body, result = render_listing_objs(
            self.request, batch, user)
        values = {'bodies': result_body,
                  'batch': batch}
                  # 'sort_body': sort_body}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #28
0
    def update(self):
        body = ''
        result = {}
        if self.isactive or self.params('on_demand') == 'load':
            user = get_current()
            filter_form, filter_data = self._add_filter(user)
            default_content = [self.content_type]
            validated = self._get_validated({
                'metadata_filter':
                    {'content_types': default_content,
                    'states': ['active', 'published']},
            }, user)
            args = {}
            args = merge_with_filter_view(self, args)
            args['request'] = self.request
            objects = find_entities(
                user=user,
                filters=[validated],
                **args)
            objects, sort_body = sort_view_objects(
                self, objects, [self.content_type], user)
            url = self.request.resource_url(
                self.context, '',
                query={'view_content_id': self.content_id})
            batch = Batch(objects,
                          self.request,
                          url=url,
                          default_size=BATCH_DEFAULT_SIZE)
            self.title = _(self.title, mapping={'nb': batch.seqlen})
            batch.target = "#results-" + self.content_id
            filter_instance = getattr(self, 'filter_instance', None)
            filter_body = None
            if filter_instance:
                filter_data['filter_message'] = self.title
                filter_body = filter_instance.get_body(filter_data)
            result_body, result = render_listing_objs(
                self.request, batch, user,
                display_state=getattr(self, 'display_state', True))
            values = {'bodies': result_body,
                      'batch': batch,
                      'empty_message': self.empty_message,
                      'empty_icon': self.empty_icon,
                      'filter_body': filter_body,
                      'filter_class': self.filter_class,
                      'sort_body': sort_body,
                      'view': self}
            if filter_form:
                result = merge_dicts(
                    {'css_links': filter_form['css_links'],
                     'js_links': filter_form['js_links']
                    }, result)

            body = self.content(args=values, template=self.template)['body']

        item = self.adapt_item(body, self.viewid)
        item['isactive'] = self.isactive
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #29
0
    def update(self):
        body = ''
        result = {}
        if self.isactive or self.params('on_demand') == 'load':
            user = get_current()
            filter_form, filter_data = self._add_filter(user)
            default_content = [self.content_type]
            validated = self._get_validated({
                'metadata_filter':
                    {'content_types': default_content,
                    'states': ['active', 'published']},
            }, user)
            args = {}
            args = merge_with_filter_view(self, args)
            args['request'] = self.request
            objects = find_entities(
                user=user,
                filters=[validated],
                **args)
            objects, sort_body = sort_view_objects(
                self, objects, [self.content_type], user)
            url = self.request.resource_url(
                self.context, '',
                query={'view_content_id': self.content_id})
            batch = Batch(objects,
                          self.request,
                          url=url,
                          default_size=BATCH_DEFAULT_SIZE)
            self.title = _(self.title, mapping={'nb': batch.seqlen})
            batch.target = "#results-" + self.content_id
            filter_instance = getattr(self, 'filter_instance', None)
            filter_body = None
            if filter_instance:
                filter_data['filter_message'] = self.title
                filter_body = filter_instance.get_body(filter_data)
            result_body, result = render_listing_objs(
                self.request, batch, user,
                display_state=getattr(self, 'display_state', True))
            values = {'bodies': result_body,
                      'batch': batch,
                      'empty_message': self.empty_message,
                      'empty_icon': self.empty_icon,
                      'filter_body': filter_body,
                      'filter_class': self.filter_class,
                      'sort_body': sort_body,
                      'view': self}
            if filter_form:
                result = merge_dicts(
                    {'css_links': filter_form['css_links'],
                     'js_links': filter_form['js_links']
                    }, result)

            body = self.content(args=values, template=self.template)['body']

        item = self.adapt_item(body, self.viewid)
        item['isactive'] = self.isactive
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #30
0
    def update(self):
        self.execute(None)
        user = get_current()
        is_manager = has_role(user=user, role=('PortalManager', ))
        filters = [
            {'metadata_filter': {
                'content_types': ['person']
            }}
        ]
        filter_form, filter_data = self._add_filter(user, is_manager)
        args = merge_with_filter_view(self, {})
        args['request'] = self.request
        objects = find_entities(
            user=user,
            filters=filters,
            **args)
        objects, sort_body = sort_view_objects(
            self, objects, ['person'], user)
        url = self.request.resource_url(self.context, self.name)
        batch = Batch(objects, self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_users"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = self._get_title(
            index=index, len_result=len_result, user=user)
        filter_data['filter_message'] = self.title
        filter_body = self.filter_instance.get_body(filter_data)
        result_body, result = render_listing_objs(
            self.request, batch, user)
        novaideo_catalog = find_catalog('novaideo')
        last_connection_index = novaideo_catalog['last_connection']
        current_date = datetime.datetime.combine(
            datetime.datetime.now(),
            datetime.time(0, 0, 0, tzinfo=pytz.UTC))
        inactive_users = find_users(
            last_connection_index, current_date, (INACTIVITY_DURATION, None))
        if filter_form:
            result = merge_dicts(
                {'css_links': filter_form['css_links'],
                'js_links': filter_form['js_links']
                }, result)

        values = {'bodies': result_body,
                  'batch': batch,
                  'is_manager': is_manager,
                  'inactivity_duration': INACTIVITY_DURATION,
                  'inactive_users': inactive_users.__len__(),
                  'filter_body': filter_body,
                  'sort_body': sort_body}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #31
0
 def source(**args):
     filters = [
         {'metadata_filter': {
             'content_types': ['challenge']
         }}
     ]
     objects = find_entities(
         user=user, filters=filters, **args)
     return objects
Beispiel #32
0
    def update(self):
        user = get_current()
        validated = getattr(self, 'validated', {})
        not_validated = True if not validated else False
        posted = self.request.POST or self.request.GET or {}
        posted = posted.copy()
        executed = not not_validated
        if not_validated:
            formviewinstance = SearchView(self.context, self.request)
            formviewinstance.postedform = posted
            validated = formviewinstance.calculate_posted_filter()
            executed = getattr(formviewinstance, 'executed', False)

        if not executed or self.params('filter_result'):
            default_content = [key[0] for key in
                               get_default_searchable_content(self.request)]
            default_content.remove("person")
            if 'question' in default_content:
                default_content.remove("question")

            filter_ = {
                'metadata_filter': {'content_types': default_content}
            }
            validated = merge_with_filter_view(self, {})
            validated['request'] = self.request
            validated['filters'] = [filter_]

        objects = find_entities(
            user=user,
            **validated)
        # content_types = validated.get('metadata_filter', {}).get('content_types', ['all'])
        # objects, sort_body = sort_view_objects(
        #     self, objects, content_types, user)
        url = self.request.resource_url(
            self.context, self.request.view_name,
            query=posted)
        batch = Batch(objects,
                      self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'number': len_result})
        result_body, result = render_listing_objs(
            self.request, batch, user)
        values = {'bodies': result_body,
                  'batch': batch}
                  # 'sort_body': sort_body}
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #33
0
 def source(**args):
     filters = [{
         'metadata_filter': {
             'interfaces': [ISignalableEntity],
             'states': ['reported'],
         }
     }]
     objects = find_entities(user=user, filters=filters, **args)
     return objects
Beispiel #34
0
 def source(**args):
     default_content = [self.content_type]
     filter_ = self._get_validated({
         'metadata_filter':
             {'content_types': default_content,
             'states': ['active', 'published']},
     }, user)
     objects = find_entities(user=user, filters=[filter_], **args)
     return objects
Beispiel #35
0
    def start(self, context, request, appstruct, **kw):
        challenges = find_entities(interfaces=[IChallenge],
                                   metadata_filter={'states': ['pending']})
        for challenge in challenges:
            if challenge.is_expired:
                challenge.state = PersistentList(['closed', 'published'])
                challenge.reindex()

        return {}
 def bind(self):
     user = get_current()
     folders = find_entities(
         user=user,
         interfaces=[ISmartFolder]
         )#states=['published'])
     folders = [sf for sf in folders if not sf.parents]
     folders = sorted(folders, key=lambda e: e.get_order())
     return {'folders': folders}
Beispiel #37
0
 def source(**args):
     default_content = [self.content_type]
     filter_ = self._get_validated({
         'metadata_filter':
             {'content_types': default_content,
             'states': ['active', 'published']},
     }, user)
     objects = find_entities(user=user, filters=[filter_], **args)
     return objects
Beispiel #38
0
    def find_entities(self):
        name = self.params('text_to_search')
        contents = self.params('checkbox')
        if contents and not isinstance(contents, (list, tuple)):
            contents = [contents]

        if not contents:
            contents = get_default_searchable_content(
                self.request)
            contents = [c[0] for c in contents]

        if name:
            states = ['published', 'active']
            user = get_current()
            root = getSite()
            result = []
            if is_all_values_key(name):
                result = find_entities(
                    metadata_filter={
                        'content_types': contents,
                        'states': states},
                    user=user)
            else:
                result = find_entities(
                    metadata_filter={
                        'content_types': contents,
                        'states': states},
                    user=user,
                    text_filter={'text_to_search': name})

            result_body = render_small_listing_objs(
                self.request, list(result)[:NBRESULT], user)
            values = {'entities': result_body,
                      'all_url': self.request.resource_url(
                          root, '@@search_result',
                          query={'text_to_search': name,
                                 'content_types': contents}),
                      'advenced_search_url': self.request.resource_url(
                          root, '@@advanced_search')}
            body = self.content(args=values,
                                template=self.search_template)['body']
            return {'body': body}

        return {'body': ''}
 def source(**args):
     filters = [
         {'metadata_filter': {
             'interfaces': [ISignalableEntity],
             'states': ['reported'],
         }}
     ]
     objects = find_entities(
         user=user,filters=filters, **args)
     return objects
Beispiel #40
0
 def source(**args):
     filters = [
         {'metadata_filter': {
             'content_types': ['proposal'],
             'states': ['submitted_support']
         }}
     ]
     objects = find_entities(
         user=user, include_site=True, filters=filters, **args)
     return objects
 def source(**args):
     filters = [
         {'metadata_filter': {
             'content_types': ['proposal'],
             'states': ['submitted_support']
         }}
     ]
     objects = find_entities(
         user=user, include_site=True, filters=filters, **args)
     return objects
Beispiel #42
0
def publish_organizations(root, registry):
    from novaideo.views.filter import find_entities
    from novaideo.content.interface import IOrganization

    contents = find_entities(interfaces=[IOrganization])
    for org in contents:
        org.state = PersistentList(['published'])
        org.reindex()

    log.info('Orgnaizations evolved.')
Beispiel #43
0
    def update(self):
        self.execute(None)
        user = get_current()
        filter_form, filter_data = self._add_filter(user)
        args = merge_with_filter_view(self, {})
        args['request'] = self.request
        objects = find_entities(user=user,
                                intersect=self._get_content_ids(user),
                                include_archived=self.include_archived,
                                **args)
        objects, sort_body = sort_view_objects(self,
                                               objects,
                                               self.content_types,
                                               user,
                                               intersect=getattr(
                                                   self, 'sorts', None))
        url = self.request.resource_url(self.context, self.name)
        batch = Batch(objects,
                      self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_contents"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = self._get_title(index=index,
                                     len_result=len_result,
                                     user=user)
        filter_data['filter_message'] = self.title
        filter_body = self.filter_instance.get_body(filter_data)
        result_body, result = render_listing_objs(self.request,
                                                  batch,
                                                  user,
                                                  display_state=getattr(
                                                      self, 'display_state',
                                                      True))
        if filter_form:
            result = merge_dicts(
                {
                    'css_links': filter_form['css_links'],
                    'js_links': filter_form['js_links']
                }, result)

        values = {
            'bodies': result_body,
            'batch': batch,
            'filter_body': filter_body,
            'sort_body': sort_body
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #44
0
def evolve_person_tokens(root, registry):
    from novaideo.views.filter import find_entities
    from novaideo.content.interface import IPerson, Iidea, IProposal
    from BTrees.OOBTree import OOBTree

    request = get_current_request()
    request.root = root  # needed when executing the step via sd_evolve script
    contents = find_entities(
        interfaces=[Iidea, IProposal]
        )
    for index, node in enumerate(contents):
        if not hasattr(node, 'allocated_tokens'):
            node.allocated_tokens = OOBTree()
            node.len_allocated_tokens = PersistentDict({})


    contents = find_entities(
        interfaces=[IPerson]
        )
    len_entities = str(len(contents))
    for index, node in enumerate(contents):
        if not hasattr(node, 'allocated_tokens'):
            node.allocated_tokens = OOBTree()
            node.len_allocated_tokens = PersistentDict({})
            node.reserved_tokens = PersistentList([])
            supports = [t for t in node.tokens_ref
                        if t.__parent__ is not node]
            for token in supports:
                obj = token.__parent__
                if obj.__parent__:
                    evaluation = 'oppose' if token in obj.tokens_opposition else 'support'
                    node.add_token(obj, evaluation, root)
                    obj.add_token(node, evaluation)
                    if token.proposal:
                        node.add_reserved_token(obj)

                    node.reindex()


        log.info(str(index) + "/" + len_entities)

    log.info('Persons evolved.')
Beispiel #45
0
def find_users(last_connection_index, current_date, alert):
    alert_date_min = current_date - datetime.timedelta(days=alert[0])
    query = last_connection_index.le(alert_date_min)
    if alert[1]:
        alert_date_max = current_date - datetime.timedelta(days=alert[1] - 1)
        query = query & last_connection_index.ge(alert_date_max)

    users = find_entities(interfaces=[IPerson],
                          metadata_filter={'states': ['active']},
                          add_query=query)
    return users
Beispiel #46
0
    def update(self):
        current_date = datetime.datetime.combine(
            datetime.datetime.now(), datetime.time(0, 0, 0, tzinfo=pytz.UTC))
        alert_date_min = current_date - datetime.timedelta(
            days=INACTIVITY_DURATION)
        user = get_current()
        filters = [{
            'metadata_filter': {
                'content_types': ['person'],
                'states': ['active']
            },
            'temporal_filter': {
                'negation': True,
                'connected_date': {
                    'connected_before': None,
                    'connected_after': alert_date_min
                }
            }
        }]
        filter_form, filter_data = self._add_filter(user, alert_date_min)
        args = merge_with_filter_view(self, {})
        args['request'] = self.request
        objects = find_entities(user=user,
                                sort_on='last_connection',
                                filters=filters,
                                **args)
        url = self.request.resource_url(self.context, self.name)
        batch = Batch(objects,
                      self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_users"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = self._get_title(index=index,
                                     len_result=len_result,
                                     user=user)
        filter_data['filter_message'] = self.title
        filter_body = self.filter_instance.get_body(filter_data)
        result_body, result = render_listing_objs(self.request, batch, user)
        values = {
            'bodies': result_body,
            'batch': batch,
            'filter_body': filter_body
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        result['css_links'] = filter_form['css_links']
        result['js_links'] = filter_form['js_links']
        return result
Beispiel #47
0
def evolve_state_files(root, registry):
    from novaideo.views.filter import find_entities
    from novaideo.content.interface import IFile

    contents = find_entities(interfaces=[IFile])
    for file_ in contents:
        if not file_.state:
            file_.state = PersistentList(['draft'])
            file_.reindex()

    log.info('Working groups evolved.')
Beispiel #48
0
    def update(self):
        body = ''
        result = {}
        if self.isactive or self.params('on_demand') == 'load':
            current_user = get_current()
            validated = {
                'metadata_filter': {
                    'content_types': [self.content_type],
                    'states': ['active', 'published']
                }
            }
            novaideo_catalog = find_catalog('novaideo')
            organizations_index = novaideo_catalog['organizations']
            query = organizations_index.any([self.context.__oid__])
            objects = find_entities(user=current_user,
                                    filters=[validated],
                                    add_query=query)
            sort_url = self.request.resource_url(
                self.context,
                '@@index',
                query={'view_content_attr': self.content_id})
            objects, sort_body = sort_view_objects(self,
                                                   objects,
                                                   [self.content_type],
                                                   current_user,
                                                   sort_url=sort_url)
            url = self.request.resource_url(
                self.context,
                '@@index',
                query={'view_content_attr': self.content_id})
            batch = Batch(objects,
                          self.request,
                          url=url,
                          default_size=BATCH_DEFAULT_SIZE)
            batch.target = "#results-" + self.content_type
            self.title = _(self.title, mapping={'nb': batch.seqlen})
            result_body, result = render_listing_objs(
                self.request,
                batch,
                current_user,
                display_state=getattr(self, 'display_state', True))
            values = {
                'bodies': result_body,
                'batch': batch,
                'empty_message': self.empty_message,
                'empty_icon': self.empty_icon,
                'sort_body': sort_body
            }
            body = self.content(args=values, template=self.template)['body']

        item = self.adapt_item(body, self.viewid)
        item['isactive'] = getattr(self, 'isactive', False)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #49
0
 def source(**args):
     filters = [
         {'metadata_filter': {
             'content_types': ['person']
         }}
     ]
     objects = find_entities(
         user=user,
         sort_on='last_connection',
         filters=filters, **args)
     return objects
    def update(self):
        self.execute(None)
        user = get_current()
        filter_form, filter_data = self._add_filter(user)
        filters = [{
            'metadata_filter': {
                'negation': True,
                'states': ['examined']
            }
        }, {
            'metadata_filter': {
                'content_types': ['idea'],
                'states': ['published']
            }
        }]
        args = {}
        args = merge_with_filter_view(self, args)
        args['request'] = self.request
        objects = find_entities(user=user, filters=filters, **args)
        objects, sort_body = sort_view_objects(self, objects, ['idea'], user,
                                               'nbsupport')
        url = self.request.resource_url(self.context, 'seeideastoexamine')
        batch = Batch(objects,
                      self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_contents"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'number': len_result})
        filter_data['filter_message'] = self.title
        filter_body = self.filter_instance.get_body(filter_data)
        result_body, result = render_listing_objs(self.request, batch, user)
        if filter_form:
            result = merge_dicts(
                {
                    'css_links': filter_form['css_links'],
                    'js_links': filter_form['js_links']
                }, result)

        values = {
            'bodies': result_body,
            'batch': batch,
            'filter_body': filter_body,
            'sort_body': sort_body
        }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result
Beispiel #51
0
    def start(self, context, request, appstruct, **kw):
        challenges = find_entities(
            interfaces=[IChallenge],
            metadata_filter={
                'states': ['pending']})
        for challenge in challenges:
            if challenge.is_expired:
                challenge.state = PersistentList(['closed', 'published'])
                challenge.reindex()

        return {}
    def update(self):
        self.execute(None)
        user = get_current()
        filter_form, filter_data = self._add_filter(user)
        filters = [
            {'metadata_filter': {
                'negation': True,
                'states': ['examined']
            }},
            {'metadata_filter': {
                'content_types': ['idea'],
                'states': ['published']
            }}
        ]
        args = {}
        args = merge_with_filter_view(self, args)
        args['request'] = self.request
        objects = find_entities(user=user,
                                filters=filters,
                                **args)
        objects, sort_body = sort_view_objects(
            self, objects, ['idea'], user, 'nbsupport')
        url = self.request.resource_url(self.context, 'seeideastoexamine')
        batch = Batch(objects, self.request,
                      url=url,
                      default_size=BATCH_DEFAULT_SIZE)
        batch.target = "#results_contents"
        len_result = batch.seqlen
        index = str(len_result)
        if len_result > 1:
            index = '*'

        self.title = _(CONTENTS_MESSAGES[index],
                       mapping={'number': len_result})
        filter_data['filter_message'] = self.title
        filter_body = self.filter_instance.get_body(filter_data)
        result_body, result = render_listing_objs(
            self.request, batch, user)
        if filter_form:
            result = merge_dicts(
                {'css_links': filter_form['css_links'],
                'js_links': filter_form['js_links']
                }, result)

        values = {'bodies': result_body,
                  'batch': batch,
                  'filter_body': filter_body,
                  'sort_body': sort_body
                  }
        body = self.content(args=values, template=self.template)['body']
        item = self.adapt_item(body, self.viewid)
        result['coordinates'] = {self.coordinates: [item]}
        return result