コード例 #1
0
ファイル: poodletable.py プロジェクト: 4teamwork/ftw.poodle
 def show_results(self):
     # check if user is owner/has permission to view all the poodle data
     # if stealth voting is disabled this will just return true
     if not self.context.stealth_voting:
         return True
     return 'Owner' in user.get_roles(user=user.get_current(),
                                      obj=self.context)
コード例 #2
0
ファイル: utils.py プロジェクト: enfold/collective.async
def get_taskids_for_user():
    user_id = user_api.get_current().getId()
    storage = get_task_storage()
    tasks = list()
    if user_id in storage.get('users', dict()):
        for taskid in storage['users'][user_id]:
            tasks.append(taskid)
    return tasks
コード例 #3
0
    def get_current_user_roles(self, context=None):
        current_user = user.get_current().getId()
        params = {"username": current_user}

        if context:
            params['obj'] = context

        roles = get_roles(**params)

        return roles
コード例 #4
0
ファイル: poodletable.py プロジェクト: 4teamwork/ftw.poodle
 def get_sorted_users(self):
     if self.show_results():
         normalizer = queryUtility(IIDNormalizer)
         poodledata = self.context.getPoodleData()
         userids = poodledata['users'].keys()
         userids.sort(
             key=lambda id_: normalizer.normalize(self.getUserFullname(id_)))
     else:
         userids = [user.get_current().id]
     return userids
コード例 #5
0
    def _send(self, mfrom, mto, messageText, immediate=False):
        """ Send the message """

        # Send it immediately. We don't want to store mails that doesn't get
        # sent, mail shoud be delivered directly, always.
        MailHost._send(self, mfrom, mto, messageText, immediate=True)
        # I'm not sure you always get list here, so I handle both:
        if isinstance(mto, (str, unicode)):
            recipients = mto
            mto = mto.split(',')
        else:
            recipients = ','.join(mto)

        message = message_from_string(messageText)
        email = {
            'from': mfrom,
            'to': recipients,
            'date': DateTime(),  # DateTime beacause timezones.
            'subject': getheader(message['subject']),
            'message': message.get_payload()
        }

        try:
            key = self._emails.maxKey() + 1
        except ValueError:
            key = 0

        store = False
        current_user = user.get_current()
        current_email = current_user.getProperty('email')

        # Don't store anonymous password resets, or emails from the admin
        if current_user.getId(
        ) is None or current_email is None or current_email == self.email_from_address:
            return

        sender_id = current_user.getId()
        if sender_id not in self._outboxes:
            self._outboxes[sender_id] = IITreeSet()
        self._outboxes[sender_id].add(key)
        store = True

        acl_users = getToolByName(self, 'acl_users')
        recipients = []
        for mail in mto:
            recipients.extend(acl_users.searchUsers(email=mail.strip()))
        for recipient in recipients:
            recipient_id = recipient['userid']
            if recipient_id not in self._inboxes:
                self._inboxes[recipient_id] = IITreeSet()
            self._inboxes[recipient_id].add(key)
            store = True

        if store:
            self._emails[key] = email
コード例 #6
0
    def _send(self, mfrom, mto, messageText, immediate=False):
        """ Send the message """

        # Send it immediately. We don't want to store mails that doesn't get
        # sent, mail shoud be delivered directly, always.
        MailHost._send(self, mfrom, mto, messageText, immediate=True)
        # I'm not sure you always get list here, so I handle both:
        if isinstance(mto, (str, unicode)):
            recipients = mto
            mto = mto.split(',')
        else:
            recipients = ','.join(mto)

        message = message_from_string(messageText)
        email = {'from': mfrom,
                 'to': recipients,
                 'date': DateTime(), # DateTime beacause timezones.
                 'subject': getheader(message['subject']),
                 'message': message.get_payload()}

        try:
            key = self._emails.maxKey() + 1
        except ValueError:
            key = 0
        
        store = False
        current_user = user.get_current()
        current_email = current_user.getProperty('email')
        
        # Don't store anonymous password resets, or emails from the admin
        if current_user.getId() is None or current_email is None or current_email == self.email_from_address:
            return
        
        sender_id = current_user.getId()
        if sender_id not in self._outboxes:
            self._outboxes[sender_id] = IITreeSet()
        self._outboxes[sender_id].add(key)
        store = True
        
        acl_users = getToolByName(self, 'acl_users')
        recipients = []
        for mail in mto:
            recipients.extend(acl_users.searchUsers(email=mail.strip()))
        for recipient in recipients:
            recipient_id = recipient['userid']
            if recipient_id not in self._inboxes:
                self._inboxes[recipient_id] = IITreeSet()
            self._inboxes[recipient_id].add(key)
            store = True
        
        if store:
            self._emails[key] = email
コード例 #7
0
    def my_mails(self):
        """Return a dictionary of emails"""

        user_id = user.get_current().getId()
        if user_id in self._inboxes:
            inbox = reversed([self._emails[key] for key in self._inboxes[user_id]])
        else:
            inbox = []
        if user_id in self._outboxes:
            outbox = reversed([self._emails[key] for key in self._outboxes[user_id]])
        else:
            outbox = []
        return {'inbox': inbox, 'outbox': outbox}
コード例 #8
0
    def my_mails(self):
        """Return a dictionary of emails"""

        user_id = user.get_current().getId()
        if user_id in self._inboxes:
            inbox = reversed(
                [self._emails[key] for key in self._inboxes[user_id]])
        else:
            inbox = []
        if user_id in self._outboxes:
            outbox = reversed(
                [self._emails[key] for key in self._outboxes[user_id]])
        else:
            outbox = []
        return {'inbox': inbox, 'outbox': outbox}
コード例 #9
0
ファイル: utils.py プロジェクト: enfold/collective.async
def register_task(**kwargs):
    task_id = uuid.uuid4().hex
    now = datetime.now()
    user_id = user_api.get_current().getId()
    record = PersistentMapping(kwargs)
    record["status"] = constants.PROCESSING
    record["task_id"] = task_id
    record['timestamp'] = now
    record['seen'] = False
    record['user'] = user_id
    storage = get_task_storage()
    if 'users' not in storage:
        storage['users'] = OOBTree()
    if user_id not in storage['users']:
        storage['users'][user_id] = PersistentList()
    storage['users'][user_id].append(task_id)
    storage[task_id] = record
    return task_id
コード例 #10
0
ファイル: assessment.py プロジェクト: eea/wise.msfd
    def handle_save(self, action):

        # roles = get_roles(obj=self.context)

        if self.read_only_access:
            raise Unauthorized

        context = self.context

        if not hasattr(context, 'saved_assessment_data') or \
                not isinstance(context.saved_assessment_data, PersistentList):
            context.saved_assessment_data = AssessmentData()

        last = self.context.saved_assessment_data.last().copy()
        datetime_now = datetime.datetime.now().replace(microsecond=0)

        data, errors = self.extractData()
        # if not errors:
        # TODO: check for errors

        for question in self.questions:
            # countries = self.get_available_countries()
            elements = question.get_assessed_elements(self.descriptor_obj,
                                                      muids=[])

            values = []
            score = None

            if question.use_criteria == 'none':
                field_name = '{}_{}'.format(self.article, question.id)
                values.append(data.get(field_name, None))

            for element in elements:
                field_name = '{}_{}_{}'.format(self.article, question.id,
                                               element.id)
                values.append(data.get(field_name, None))

            # score is updated if ALL of the fields have been answered

            if values and None not in values:
                score = question.calculate_score(self.descriptor, values)

            name = '{}_{}_Score'.format(self.article, question.id)
            last_upd = '{}_{}_Last_update'.format(self.article, question.id)
            logger.info("Set score: %s - %s", name, score)
            data[name] = score

            last_values = last.get(name, [])
            last_values = getattr(last_values, 'values', '')
            score_values = getattr(score, 'values', '')

            if last_values != score_values:
                data[last_upd] = datetime_now

            # check if _Summary text is changed, and update _Last_update field
            summary = '{}_{}_Summary'.format(self.article, question.id)

            if last.get(summary, '') != data.get(summary, ''):
                data[last_upd] = datetime_now

        last_upd = "{}_assess_summary_last_upd".format(self.article)
        name = "{}_assessment_summary".format(self.article)

        if last.get(name, '') != data.get(name, ''):
            data[last_upd] = datetime_now

        overall_score = 0

        for k, v in data.items():
            if not k.endswith('_Score'):
                continue
            else:
                overall_score += getattr(v, 'weighted_score', 0)

        data['OverallScore'] = overall_score

        try:
            data['assessor'] = user.get_current().getId()
        except:
            data['assessor'] = 'system'

        data['assess_date'] = datetime.date.today()

        if last != data:
            last.update(data)
            self.context.saved_assessment_data.append(last)

        url = self.context.absolute_url() + '/@@edit-assessment-data-2018'
        self.request.response.setHeader('Content-Type', 'text/html')

        return self.request.response.redirect(url)