Пример #1
0
def perform_request_send(uid,
                         msg_to_user="",
                         msg_to_group="",
                         msg_subject="",
                         msg_body="",
                         msg_send_year=0,
                         msg_send_month=0,
                         msg_send_day=0,
                         ln=CFG_SITE_LANG,
                         use_email_address = 0):
    """
    send a message. if unable return warnings to write page
    @param uid: id of user from (int)
    @param msg_to_user: comma separated usernames (recipients) (str)
    @param msg_to_group: comma separated groupnames (recipeints) (str)
    @param msg_subject: subject of message (str)
    @param msg_body: body of message (str)
    @param msg_send_year: send this message on year x (int)
    @param msg_send_month: send this message on month y (int)
    @param msg_send_day: send this message on day z (int)
    @param ln: language
    @return: (body with warnings, title, navtrail)
    """
    _ = gettext_set_language(ln)

    def strip_spaces(text):
        """suppress spaces before and after x (str)"""
        return text.strip()
    # wash user input
    users_to = map(strip_spaces, msg_to_user.split(CFG_WEBMESSAGE_SEPARATOR))
    groups_to = map(strip_spaces, msg_to_group.split(CFG_WEBMESSAGE_SEPARATOR))

    if users_to == ['']:
        users_to = []
    if groups_to == ['']:
        groups_to = []

    warnings = []
    infos = []
    problem = None

    users_to_str = CFG_WEBMESSAGE_SEPARATOR.join(users_to)
    groups_to_str = CFG_WEBMESSAGE_SEPARATOR.join(groups_to)

    send_on_date = get_datetext(msg_send_year, msg_send_month, msg_send_day)
    if (msg_send_year == msg_send_month == msg_send_day == 0):
        status = CFG_WEBMESSAGE_STATUS_CODE['NEW']
    else:
        status = CFG_WEBMESSAGE_STATUS_CODE['REMINDER']
        if send_on_date == datetext_default:
            warning = \
            _("The chosen date (%(x_year)i/%(x_month)i/%(x_day)i) is invalid.")
            warning = warning % {'x_year': msg_send_year,
                                 'x_month': msg_send_month,
                                 'x_day': msg_send_day}
            warnings.append(warning)
            problem = True

    if not(users_to_str or groups_to_str):
        # <=> not(users_to_str) AND not(groups_to_str)
        warnings.append(_("Please enter a user name or a group name."))
        problem = True

    if len(msg_body) > CFG_WEBMESSAGE_MAX_SIZE_OF_MESSAGE:
        warnings.append(_("Your message is too long, please shorten it. Maximum size allowed is %i characters.") % \
                            (CFG_WEBMESSAGE_MAX_SIZE_OF_MESSAGE,))
        problem = True

    if use_email_address == 0:
        users_dict = db.get_uids_from_nicks(users_to)
        users_to = users_dict.items() # users_to=[(nick, uid),(nick2, uid2)]
    elif use_email_address == 1:
        users_dict = db.get_uids_from_emails(users_to)
        users_to = users_dict.items() # users_to=[(email, uid),(email2, uid2)]
    groups_dict = db.get_gids_from_groupnames(groups_to)
    groups_to = groups_dict.items()
    gids_to = []
    for (group_name, group_id) in groups_to:
        if not(group_id):
            warnings.append(_("Group %s does not exist.") % \
                            (escape_html(group_name)))
            problem = 1
        else:
            gids_to.append(group_id)

    # Get uids from gids
    uids_from_group = db.get_uids_members_of_groups(gids_to)
    # Add the original uids, and make sure  there is no double values.
    tmp_dict = {}
    for uid_receiver in uids_from_group:
        tmp_dict[uid_receiver] = None
    for (user_nick, user_id) in users_to:
        if user_id:
            if user_id not in tmp_dict:
                uids_from_group.append(user_id)
                tmp_dict[user_id] = None
        else:
            if type(user_nick) == int or \
               type(user_nick) == str and user_nick.isdigit():
                user_nick = int(user_nick)
                if db.user_exists(user_nick) and user_nick not in tmp_dict:
                    uids_from_group.append(user_nick)
                    tmp_dict[user_nick] = None
            else:
                warnings.append(_("User %s does not exist.")% \
                                (escape_html(user_nick)))
                problem = True
    if problem:
        body = webmessage_templates.tmpl_write(msg_to=users_to_str,
                                               msg_to_group=groups_to_str,
                                               msg_subject=msg_subject,
                                               msg_body=msg_body,
                                               msg_send_year=msg_send_year,
                                               msg_send_month=msg_send_month,
                                               msg_send_day=msg_send_day,
                                               warnings=warnings,
                                               ln=ln)
        title =  _("Write a message")
        navtrail = get_navtrail(ln, title)
        return (body, title, navtrail)
    else:
        msg_id = db.create_message(uid,
                                   users_to_str, groups_to_str,
                                   msg_subject, msg_body,
                                   send_on_date)
        uid_problem = db.send_message(uids_from_group, msg_id, status)
        if len(uid_problem) > 0:
            usernames_problem_dict = db.get_nicks_from_uids(uid_problem)
            usernames_problem = usernames_problem_dict.values()
            def listing(name1, name2):
                """ name1, name2 => 'name1, name2' """
                return str(name1) + ", " + str(name2)
            warning = _("Your message could not be sent to the following recipients as it would exceed their quotas:") + " "
            warnings.append(warning + reduce(listing, usernames_problem))

        if len(uids_from_group) != len(uid_problem):
            infos.append(_("Your message has been sent."))
        else:
            db.check_if_need_to_delete_message_permanently([msg_id])
        body = perform_request_display(uid, warnings,
                                       infos, ln)
        title = _("Your Messages")
        return (body, title, get_navtrail(ln))
Пример #2
0
def perform_request_send(uid,
                         msg_to_user="",
                         msg_to_group="",
                         msg_subject="",
                         msg_body="",
                         msg_send_year=0,
                         msg_send_month=0,
                         msg_send_day=0,
                         ln=CFG_SITE_LANG,
                         use_email_address=0):
    """
    send a message. if unable return warnings to write page
    @param uid: id of user from (int)
    @param msg_to_user: comma separated usernames (recipients) (str)
    @param msg_to_group: comma separated groupnames (recipeints) (str)
    @param msg_subject: subject of message (str)
    @param msg_body: body of message (str)
    @param msg_send_year: send this message on year x (int)
    @param msg_send_month: send this message on month y (int)
    @param msg_send_day: send this message on day z (int)
    @param ln: language
    @return: (body with warnings, title, navtrail)
    """
    _ = gettext_set_language(ln)

    def strip_spaces(text):
        """suppress spaces before and after x (str)"""
        return text.strip()

    # wash user input
    users_to = map(strip_spaces, msg_to_user.split(CFG_WEBMESSAGE_SEPARATOR))
    groups_to = map(strip_spaces, msg_to_group.split(CFG_WEBMESSAGE_SEPARATOR))

    if users_to == ['']:
        users_to = []
    if groups_to == ['']:
        groups_to = []

    warnings = []
    infos = []
    problem = None

    users_to_str = CFG_WEBMESSAGE_SEPARATOR.join(users_to)
    groups_to_str = CFG_WEBMESSAGE_SEPARATOR.join(groups_to)

    send_on_date = get_datetext(msg_send_year, msg_send_month, msg_send_day)
    if (msg_send_year == msg_send_month == msg_send_day == 0):
        status = CFG_WEBMESSAGE_STATUS_CODE['NEW']
    else:
        status = CFG_WEBMESSAGE_STATUS_CODE['REMINDER']
        if send_on_date == datetext_default:
            warning = \
            _("The chosen date (%(x_year)i/%(x_month)i/%(x_day)i) is invalid.")
            warning = warning % {
                'x_year': msg_send_year,
                'x_month': msg_send_month,
                'x_day': msg_send_day
            }
            warnings.append(warning)
            problem = True

    if not (users_to_str or groups_to_str):
        # <=> not(users_to_str) AND not(groups_to_str)
        warnings.append(_("Please enter a user name or a group name."))
        problem = True

    if len(msg_body) > CFG_WEBMESSAGE_MAX_SIZE_OF_MESSAGE:
        warnings.append(_("Your message is too long, please edit it. Maximum size allowed is %i characters.") % \
                            (CFG_WEBMESSAGE_MAX_SIZE_OF_MESSAGE,))
        problem = True

    if use_email_address == 0:
        users_dict = db.get_uids_from_nicks(users_to)
        users_to = users_dict.items()  # users_to=[(nick, uid),(nick2, uid2)]
    elif use_email_address == 1:
        users_dict = db.get_uids_from_emails(users_to)
        users_to = users_dict.items()  # users_to=[(email, uid),(email2, uid2)]
    groups_dict = db.get_gids_from_groupnames(groups_to)
    groups_to = groups_dict.items()
    gids_to = []
    for (group_name, group_id) in groups_to:
        if not (group_id):
            warnings.append(_("Group %s does not exist.") % \
                            (escape_html(group_name)))
            problem = 1
        else:
            gids_to.append(group_id)

    # Get uids from gids
    uids_from_group = db.get_uids_members_of_groups(gids_to)
    # Add the original uids, and make sure  there is no double values.
    tmp_dict = {}
    for uid_receiver in uids_from_group:
        tmp_dict[uid_receiver] = None
    for (user_nick, user_id) in users_to:
        if user_id:
            if user_id not in tmp_dict:
                uids_from_group.append(user_id)
                tmp_dict[user_id] = None
        else:
            if type(user_nick) == int or \
               type(user_nick) == str and user_nick.isdigit():
                user_nick = int(user_nick)
                if db.user_exists(user_nick) and user_nick not in tmp_dict:
                    uids_from_group.append(user_nick)
                    tmp_dict[user_nick] = None
            else:
                warnings.append(_("User %s does not exist.")% \
                                (escape_html(user_nick)))
                problem = True
    if problem:
        body = webmessage_templates.tmpl_write(msg_to=users_to_str,
                                               msg_to_group=groups_to_str,
                                               msg_subject=msg_subject,
                                               msg_body=msg_body,
                                               msg_send_year=msg_send_year,
                                               msg_send_month=msg_send_month,
                                               msg_send_day=msg_send_day,
                                               warnings=warnings,
                                               ln=ln)
        title = _("Write a message")
        navtrail = get_navtrail(ln, title)
        return (body, title, navtrail)
    else:
        msg_id = db.create_message(uid, users_to_str, groups_to_str,
                                   msg_subject, msg_body, send_on_date)
        uid_problem = db.send_message(uids_from_group, msg_id, status)
        if len(uid_problem) > 0:
            usernames_problem_dict = db.get_nicks_from_uids(uid_problem)
            usernames_problem = usernames_problem_dict.values()

            def listing(name1, name2):
                """ name1, name2 => 'name1, name2' """
                return str(name1) + ", " + str(name2)

            warning = _(
                "Your message could not be sent to the following recipients due to their quota:"
            ) + " "
            warnings.append(warning + reduce(listing, usernames_problem))

        if len(uids_from_group) != len(uid_problem):
            infos.append(_("Your message has been sent."))
        else:
            db.check_if_need_to_delete_message_permanently([msg_id])
        body = perform_request_display(uid, warnings, infos, ln)
        title = _("Your Messages")
        return (body, title, get_navtrail(ln))
 def test_user_exists(self):
     """webmessage - check if a user exist"""
     self.assertEqual(user_exists(6), 1)
Пример #4
0
 def test_user_exists(self):
     """webmessage - check if a user exist"""
     self.assertEqual(user_exists(6), 1)