Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
Hotfix release available: 2024-02-06a "Kaos". upgrade now! [55.1] (what's this?)
New release available: 2024-02-06 "Kaos". upgrade now! [55] (what's this?)
Hotfix release available: 2023-04-04b "Jack Jackrum". upgrade now! [54.2] (what's this?)
Hotfix release available: 2023-04-04a "Jack Jackrum". upgrade now! [54.1] (what's this?)
New release available: 2023-04-04 "Jack Jackrum". upgrade now! [54] (what's this?)
Hotfix release available: 2022-07-31b "Igor". upgrade now! [53.1] (what's this?)
Hotfix release available: 2022-07-31a "Igor". upgrade now! [53] (what's this?)
New release available: 2022-07-31 "Igor". upgrade now! [52.2] (what's this?)
New release candidate 2 available: rc2022-06-26 "Igor". upgrade now! [52.1] (what's this?)
New release candidate available: 2022-06-26 "Igor". upgrade now! [52] (what's this?)
Hotfix release available: 2020-07-29a "Hogfather". upgrade now! [51.4] (what's this?)
New release available: 2020-07-29 "Hogfather". upgrade now! [51.3] (what's this?)
New release candidate 3 available: 2020-06-09 "Hogfather". upgrade now! [51.2] (what's this?)
New release candidate 2 available: 2020-06-01 "Hogfather". upgrade now! [51.1] (what's this?)
New release candidate available: 2020-06-01 "Hogfather". upgrade now! [51] (what's this?)
Hotfix release available: 2018-04-22c "Greebo". upgrade now! [50.3] (what's this?)
Hotfix release available: 2018-04-22b "Greebo". upgrade now! [50.2] (what's this?)
user_groups

Requirement

Groups

  1. Users of the learning site can create groups.
  2. While creation a group can be made Public or Private.
  3. If a group is private, it means that users will require an invite from the group owner to join the group.
  4. If a group is public it may be publicly listed and searchable. Users can initiate a request to join such group. The group owner can also invite users to join public group.
  5. While creating a public group the creator can specify whether the owner's approval is required for each join request or the users can join the group without approval (i.e. auto approval)

Invitations

  1. Group owner can invite users to join the group.
  2. Invitations can be made to users who are currently part of the learning website or to the people who are not part of the system. In both the cases an invitation email will be sent to the person. The email message will contain links to “Accept” or “Decline” the invitation.
  3. The users who are invited and are part of the learning system will also see the invitation message in the “messages” section from where they can accept or decline the invitation.
  4. Users who are invited and are not part of the learning system will be asked to register if they “Accept” the invitation. After registration they will be added to the group.
  5. Till the time the invited users have not taken any action on the invitation their invitation will be put under “Pending” status.

Membership Requests

  1. If the group is public then the users can request to join the group. A notification will be sent to the group owner (if auto approval is turned off) indicating that someone has requested to join the group. There should be some section in the UI (Manage Group) which should provide list of pending membership request.

Misc features related to groups

  1. Group Searching/Listing - There should be a public page which allows searching/listing all the public groups, with a “Join Group” link next to each group. Users can search/view for the groups here and click on “Join” to request to join the group.
    • If user is already part of the group, we should not show the “Join Group” link next to that group in the public listing page, instead it should read “Leave Group”.
  2. My Groups - Each user should have a section called “My groups” from where they can see their groups (i.e. groups created by them as well as groups that the user is part of). Clicking on a group should open a “Group details” page.
  3. Group Details - This detailed page of a group can have tabs like “List members”, “Manage Group”, “Group statistics”, “Discussions”
    • List Members tab should list all the members of the group. Next to each member we can have action links like “Send Message” (to send personal message to the user), “Remove User” (to remove user from group. Option available only if the current user is owner of group), “Chat” (to do one to one chat with the user).
    • Manage Group tab can have various links/tabs that initiate some actions. This tab will be available only if current user is owner of the group. The possible actions can be:
      • “Edit” - To open a UI from where group information like name, description etc… can be edited.
      • “Requests to join” - UI that lists the users whose requests to join are pending for approval along with “Accept” and “Decline” links next to each user.
      • “Invited” - UI that lists all the users to whom an invitation was sent to join the group. Next to each invitation we show current status of the invitation i.e. “pending”, “accepted” or “declined”. The if the status is “pending” we can have a link to “Expire” the invitation. If the invitation is expired, the user to whom he invitation was sent can no longer accept the invitation.
      • “Send Invitations” - Opens UI from where the owner can send invitations to other users to join the group. Owner can type in list of comma separated email address and some message that will be sent in the invitation mail.
    • Group statistics tab should show charts and statistics related to the group. e.g. number of members over a period of time, activity over period of time etc…
    • Group Discussions - Group discussions are similar to forums but more of an informal kind of forum. Any group user can post a Discussion topic. This topic will be visible to the group members in “Discussions” tab, from where the members can comment on the topic.
  4. Group messaging
    • Messages that are sent/received as part of group invitation, join request etc. will have a type=“Group Notification”. This will make it easy to categorize the messages. The messages section can have a filter to filter the messages based on the type.
    • There should be an option to send messages to the group. A message sent to a group will internally send the message to all the group members and will show in their inbox section. Such message will also have type=“Group Notification”, so that it can be easily filtered from other messages.
  5. Group enrollment
    • Courses can be created for a particular group and only members of that group can see and enroll
    • Enrollment is based on membership in that group (here groups act as a flat organization, with no linkage to other groups)
    • Visibility is based on membership in that group

DB schema

Table Name : groups

Column_name type Description
id integer primary key
name varchar name of the group
description text description of the group
rules text Text that contains rules to follow when doing any activity in the group
owner_id integer owner of the group
is_private boolean indicates whether the group is private or public e.g. for private group the users need invitation to join. For public groups owner can invite and also users can request to join the group
auto_approve_members boolean Indicates whether join requests are auto approved or not. Value in this field is valid if the group is public.
logo_id integer Id of the photo which will serve as group's logo
member_count integer number of members in the group.
create_at date_time created date
updated_at date_timeupdated date
deleted_at date_timedeleted date

Table Name : group_users

Column_name type Description
id integer primary key
group_id integer refers to the group
user_id integer user id
status integer status of membership. (Pending, Rejected, Accepted). This column is important when user requests to join the group.
created_at date_time join date of the user to the group
updated_at date_time
deleted_at date_time date when member was removed

Table Name: invites

Column_name type Description
id integer primary key
message string message sent along with the invitation
user_id integer user who had sent the invitation
associated_id integer foreign key of the associated entity
associated_type string class name of the associated entity e.g. Group (right now we might have only invitation to group, in future we may have some other types of invites)
created_at integer Time when the record was created
updated_at integer Time when the record was updated

Table Name: invite_users

Column_name type Description
id integer primary key
invite_id integer reference to ID column of invites table
user_id integer user to whom the invitation was sent (will have value only if invitation is sent to user who is part of the learning system)
security_token string security_token used when the invitation is sent via email to people who are not registered with the system
status integer status of the invitation (Declined, Pending, Accepted,Expired )
email string Email address to which the invitation was sent (will have value only if invitation is sent to person who is not part of the learning system)
created_at integer Time when the record was created
updated_at integer Time when the record was updated

Modify Table: messages This change is required so that it is easy to identify and categorize the messages.

Column_name type Description
type string type of message (e.g. General, Notification)
user_groups.txt · Last modified: 2018/08/31 16:16 (external edit)