예제 #1
0
def perform_request_create_group(uid, group_name, group_description, join_policy, ln=CFG_SITE_LANG):
    """Create new group.
    @param group_name: name of the group entered
    @param group_description: description of the group entered
    @param join_policy: join  policy of the group entered
    @param ln: language
    @return: a (body, errors, warnings) formed tuple
    warning != [] if group_name or join_policy are not valid
    or if the name already exists in the database
    body="1" if succeed in order to display info on the main page
    """
    _ = gettext_set_language(ln)
    body = ""
    warnings = []
    errors = []
    infos = []
    if group_name == "":
        warnings.append(("WRN_WEBSESSION_NO_GROUP_NAME",))
        (body, errors, warnings) = perform_request_input_create_group(
            group_name, group_description, join_policy, warnings=warnings
        )
    elif not group_name_valid_p(group_name):
        warnings.append("WRN_WEBSESSION_NOT_VALID_GROUP_NAME")
        (body, errors, warnings) = perform_request_input_create_group(
            group_name, group_description, join_policy, warnings=warnings
        )

    elif join_policy == "-1":
        warnings.append("WRN_WEBSESSION_NO_JOIN_POLICY")
        (body, errors, warnings) = perform_request_input_create_group(
            group_name, group_description, join_policy, warnings=warnings
        )
    elif db.group_name_exist(group_name):
        warnings.append("WRN_WEBSESSION_GROUP_NAME_EXISTS")
        (body, errors, warnings) = perform_request_input_create_group(
            group_name, group_description, join_policy, warnings=warnings
        )

    else:
        db.insert_new_group(uid, group_name, group_description, join_policy)
        infos.append(CFG_WEBSESSION_INFO_MESSAGES["GROUP_CREATED"])
        (body, errors, warnings) = perform_request_groups_display(
            uid, infos=infos, errors=errors, warnings=warnings, ln=ln
        )
    return (body, errors, warnings)
예제 #2
0
def synchronize_external_groups(userid, groups, login_method):
    """Synchronize external groups adding new groups that aren't already
    added, adding subscription for userid to groups, for groups that the user
    isn't already subsribed to, removing subscription to groups the user is no
    more subsribed to.
    @param userid, the intger representing the user inside the db
    @param groups, a dictionary of group_name : group_description
    @param login_method, a string unique to the type of authentication
           the groups are associated to, to be used inside the db
    """

    groups_already_known = db.get_login_method_groups(userid, login_method)
    group_dict = {}
    for name, groupid in groups_already_known:
        group_dict[name] = groupid
    groups_already_known_name = set([g[0] for g in groups_already_known])
    groups_name = set(groups.keys())

    nomore_groups = groups_already_known_name - groups_name
    for group in nomore_groups:  # delete the user from no more affiliated group
        db.delete_member(group_dict[group], userid)

    potential_new_groups = groups_name - groups_already_known_name
    for group in potential_new_groups:
        groupid = db.get_group_id(group, login_method)
        if groupid:  # Adding the user to an already existent group
            db.insert_new_member(userid, groupid[0][0],
                                 CFG_WEBSESSION_USERGROUP_STATUS['MEMBER'])
        else:  # Adding a new group
            try:
                groupid = db.insert_new_group(userid, group, groups[group], \
                    CFG_WEBSESSION_GROUP_JOIN_POLICY['VISIBLEEXTERNAL'], \
                    login_method)
                db.add_pending_member(
                    groupid, userid, CFG_WEBSESSION_USERGROUP_STATUS['MEMBER'])
            except IntegrityError:
                ## The group already exists? Maybe because of concurrency?
                groupid = db.get_group_id(group, login_method)
                if groupid:  # Adding the user to an already existent group
                    db.insert_new_member(
                        userid, groupid[0][0],
                        CFG_WEBSESSION_USERGROUP_STATUS['MEMBER'])
예제 #3
0
def synchronize_external_groups(userid, groups, login_method):
    """Synchronize external groups adding new groups that aren't already
    added, adding subscription for userid to groups, for groups that the user
    isn't already subsribed to, removing subscription to groups the user is no
    more subsribed to.
    @param userid, the intger representing the user inside the db
    @param groups, a dictionary of group_name : group_description
    @param login_method, a string unique to the type of authentication
           the groups are associated to, to be used inside the db
    """

    groups_already_known = db.get_login_method_groups(userid, login_method)
    group_dict = {}
    for name, groupid in groups_already_known:
        group_dict[name] = groupid
    groups_already_known_name = set([g[0] for g in groups_already_known])
    groups_name = set(groups.keys())

    nomore_groups = groups_already_known_name - groups_name
    for group in nomore_groups: # delete the user from no more affiliated group
        db.delete_member(group_dict[group], userid)

    potential_new_groups = groups_name - groups_already_known_name
    for group in potential_new_groups:
        groupid = db.get_group_id(group, login_method)
        if groupid: # Adding the user to an already existent group
            db.insert_new_member(userid, groupid[0][0],
                CFG_WEBSESSION_USERGROUP_STATUS['MEMBER'])
        else: # Adding a new group
            try:
                groupid = db.insert_new_group(userid, group, groups[group], \
                    CFG_WEBSESSION_GROUP_JOIN_POLICY['VISIBLEEXTERNAL'], \
                    login_method)
                db.add_pending_member(groupid, userid,
                    CFG_WEBSESSION_USERGROUP_STATUS['MEMBER'])
            except IntegrityError:
                ## The group already exists? Maybe because of concurrency?
                groupid = db.get_group_id(group, login_method)
                if groupid: # Adding the user to an already existent group
                    db.insert_new_member(userid, groupid[0][0],
                        CFG_WEBSESSION_USERGROUP_STATUS['MEMBER'])
예제 #4
0
                                                  join_policy,
                                                  warnings=warnings)
    elif db.group_name_exist(group_name):
        try:
            raise InvenioWebSessionWarning(
                _('Group name already exists. Please choose another group name.'
                  ))
        except InvenioWebSessionWarning, exc:
            register_exception(stream='warning')
            warnings.append(exc.message)
        body = perform_request_input_create_group(group_name,
                                                  group_description,
                                                  join_policy,
                                                  warnings=warnings)
    else:
        db.insert_new_group(uid, group_name, group_description, join_policy)
        infos.append(CFG_WEBSESSION_INFO_MESSAGES["GROUP_CREATED"])
        body = perform_request_groups_display(uid,
                                              infos=infos,
                                              warnings=warnings,
                                              ln=ln)
    return body


def perform_request_input_join_group(uid,
                                     group_name,
                                     search,
                                     warnings=[],
                                     ln=CFG_SITE_LANG):
    """Return html for joining new group.
    @param group_name: name of the group entered if user is looking for a group
예제 #5
0
    elif join_policy == "-1":
        try:
            raise InvenioWebSessionWarning(_("Please choose a group join policy."))
        except InvenioWebSessionWarning, exc:
            register_exception(stream="warning")
            warnings.append(exc.message)
        body = perform_request_input_create_group(group_name, group_description, join_policy, warnings=warnings)
    elif db.group_name_exist(group_name):
        try:
            raise InvenioWebSessionWarning(_("Group name already exists. Please choose another group name."))
        except InvenioWebSessionWarning, exc:
            register_exception(stream="warning")
            warnings.append(exc.message)
        body = perform_request_input_create_group(group_name, group_description, join_policy, warnings=warnings)
    else:
        db.insert_new_group(uid, group_name, group_description, join_policy)
        infos.append(CFG_WEBSESSION_INFO_MESSAGES["GROUP_CREATED"])
        body = perform_request_groups_display(uid, infos=infos, warnings=warnings, ln=ln)
    return body


def perform_request_input_join_group(uid, group_name, search, warnings=[], ln=CFG_SITE_LANG):
    """Return html for joining new group.
    @param group_name: name of the group entered if user is looking for a group
    @param search=1 if search performed else 0
    @param warnings: warnings coming from perform_request_join_group
    @param ln: language
    @return: body with warnings
    """
    group_from_search = {}
    records = db.get_visible_group_list(uid=uid)
예제 #6
0
def perform_request_create_group(uid,
        group_name,
        group_description,
        join_policy,
        ln=CFG_SITE_LANG):
    """Create new group.
    @param group_name: name of the group entered
    @param group_description: description of the group entered
    @param join_policy: join  policy of the group entered
    @param ln: language
    @return: a (body, errors, warnings) formed tuple
    warning != [] if group_name or join_policy are not valid
    or if the name already exists in the database
    body="1" if succeed in order to display info on the main page
    """
    _ = gettext_set_language(ln)
    body = ""
    warnings = []
    errors = []
    infos = []
    if group_name == "":
        warnings.append(('WRN_WEBSESSION_NO_GROUP_NAME',))
        (body, errors, warnings) = perform_request_input_create_group(
            group_name,
            group_description,
            join_policy,
            warnings=warnings)
    elif not group_name_valid_p(group_name):
        warnings.append('WRN_WEBSESSION_NOT_VALID_GROUP_NAME')
        (body, errors, warnings) = perform_request_input_create_group(
            group_name,
            group_description,
            join_policy,
            warnings=warnings)

    elif join_policy=="-1":
        warnings.append('WRN_WEBSESSION_NO_JOIN_POLICY')
        (body, errors, warnings) = perform_request_input_create_group(
            group_name,
            group_description,
            join_policy,
            warnings=warnings)
    elif db.group_name_exist(group_name):
        warnings.append('WRN_WEBSESSION_GROUP_NAME_EXISTS')
        (body, errors, warnings) = perform_request_input_create_group(
            group_name,
            group_description,
            join_policy,
            warnings=warnings)

    else:
        db.insert_new_group(uid,
            group_name,
            group_description,
            join_policy)
        infos.append(CFG_WEBSESSION_INFO_MESSAGES["GROUP_CREATED"])
        (body, errors, warnings) = perform_request_groups_display(uid,
            infos=infos,
            errors=errors,
            warnings=warnings,
            ln=ln)
    return (body, errors, warnings)