Repository navigation
2.x data dictionary
These notes have been updated right before the release of v2.1. They add a few fields in comparison with 2.0. To check the differences, check the database migration code sequence at src/CoreBundle/Migrations/Schema/V210/*.
All tables are now reflected by Doctrine entities defined in the code in either src/CoreBundle/Entity or src/CourseBundle/Entity.
All entities defined in src/CourseBundleEntity are related to learning tools and generally keep a table name prefix of c_ for historical reasons. The table where documents are stored is called c_document and the entity is CDocument and not just Document, but a user is not a resource of a learning tool, so its table is called user and its entity is User.
Course-related entities generally use the iid identifier, unless they are relatively new tables (in this case they use the id field).
Sessions are really special, but they are used only about half of the time, so they will (more than not) be set to null in the tables where the session_id field appears. In previous versions, this field could equal 0. Not anymore. Queries can thus be simplified.
A major difference in database structure between Chamilo 1 and Chamilo 2 is we now consider almost everything that is not static as a resource. This is reflected by the following trio of tables:
-
resource_node, which contains the essence of the resource, -
resource_link, which contains the allocation of a resource to a context like a course, a session, a group, etc) and its properties in this context. There can be many links for each resource. -
resource_filewhich contains the files attached to the resource, if any. There can be many files (different formats or variations) for one resource.
- All fields called
c_id(or in certain casescourse_id) always are references to thecourse.idfield. - All fields called
user_id(or any field ending withuser_id) always are references to theuser.idfield. - All fields called
session_id(or any field ending withsession_id) always are references to thesession.idfield. - All fields called
access_url_idorurl_idare references to theaccess_url.idfield. - When fields called
group_idappear in a table with ac_prefix, they are usually referring to a course group (c_group_info.iid) - All tables that require it have a
titlefield. This is a significant difference with Chamilo 1.x as, previously, it could have beenname,titleor something else completely. Now you can trust the existence of atitlefield pretty much anywhere except where we don't need a title because the entity is not editable/viewable on its own. - Most tables have
created_atandupdated_atfields. This allows to very quickly know if something is recent.
As such, these fields are not detailed below.
At the end of this page, we provide a few examples of inter-table queries that might be useful.
List of all URLs if using multiple URLs
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| parent_id | References access_url.id (self-reference), the parent URL in the Gedmo nested-set tree (AccessUrl::$parent) |
| tree_root | |
| lft | |
| lvl | |
| rgt | |
| url | URL (including protocol) |
| description | |
| active | 1 if the URL can already be used |
| created_by | (FK) user.id |
| tms | timestamp |
| url_type | (not used yet) |
| limit_courses | |
| limit_active_courses | |
| limit_sessions | |
| limit_users | |
| limit_teachers | |
| limit_disk_space | |
| is_login_only | In complex setups, one URL can be "sacrified" to be a URL to only login and dispatch users to other URLs |
Link between the access_url table and the color_theme table. Manages the relationship between URLs and the stylesheet that is applied to them.
| Field | Definition |
|---|---|
| id | Unique identifier |
| url_id | See "Common fields" |
| color_theme_id | ID of the row in color_theme
|
| active | Only used actively if = 1 |
| created_at | See "Common fields" |
| updated_at | See "Common fields" |
Link between the access_url table and the course table
| Field | Definition |
|---|---|
| id | Unique identifier |
| c_id | See "Common fields" |
| access_url_id | See "Common fields" |
Link between access_url and course_category
| Field | Definition |
|---|---|
| id | Unique identifier |
| access_url_id | See "Common fields" |
| course_category_id | References course_category.id (AccessUrlRelCourseCategory::$courseCategory) |
Links an installed plugin (plugin) to a specific portal (access_url) in multi-URL setups, storing whether the plugin is active and its per-URL configuration. Reflected by the Doctrine entity AccessUrlRelPlugin (src/CoreBundle/Entity/AccessUrlRelPlugin.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| plugin_id | References plugin.id
|
| url_id | See "Common fields" |
| active | 1 if the plugin is enabled for this access URL |
| configuration | Per-URL plugin configuration (JSON) |
Link between access_url and session for sessions registered in a specific URL
| Field | Definition |
|---|---|
| id | Unique identifier |
| session_id | See "Common fields" |
| access_url_id | See "Common fields" |
Link between access_url and user for users registered in a specific URL
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| access_url_id |
access_url id (FK) |
Link between access_url and usergroup for groups registered in a specific URL
| Field | Definition |
|---|---|
| id | Unique identifier |
| access_url_id | See "Common fields" |
| usergroup_id |
usergroup id (FK) |
| Field | Definition |
|---|---|
| id | |
| event_id | References c_calendar_event.iid (AgendaReminder::$event) |
| date_interval | |
| sent | |
| created_at | |
| updated_at |
Logs each call made to an external AI provider (prompt/response token counts, provider, model, endpoint) for auditing and cost tracking across AI-powered tools (image/video generation, glossary, cost estimation, etc.). See AiRequests (src/CoreBundle/Entity/AiRequests.php), populated from AiController.
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| tool_name | Name of the AI feature/tool that issued the request (e.g. glossary, image or video generation) |
| tool_item_id | Identifier of the item the request relates to within tool_name; polymorphic, no single fixed target table |
| requested_at | |
| request_text | |
| prompt_tokens | |
| completion_tokens | |
| total_tokens | |
| ai_provider | |
| ai_model | |
| ai_endpoint |
A chat thread between a user and the AI Tutor for a given course (and optional session) with a specific AI provider. See AiTutorConversation (src/CoreBundle/Entity/AiTutorConversation.php), managed by AiTutorChatService; a unique constraint enforces one conversation per user/course/provider.
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| course_id | See "Common fields" |
| session_id | See "Common fields" |
| ai_provider | |
| provider_conversation_id | Identifier of the conversation on the external AI provider's side, if any |
| created_at | |
| updated_at | |
| last_message_at |
An individual chat turn (role + content) belonging to an ai_tutor_conversation. See AiTutorMessage (src/CoreBundle/Entity/AiTutorMessage.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| conversation_id | References ai_tutor_conversation.id, the conversation this message belongs to (AiTutorMessage::$conversation) |
| role | |
| content | |
| created_at |
Link between sys_announcement and usergroup
| Field | Definition |
|---|---|
| group_id | References usergroup.id, the group this announcement is made visible to (AnnouncementRelGroup::$groupId) |
| announcement_id | id from sys_announcement
|
| Field | Definition |
|---|---|
| id | |
| title | |
| category | |
| compressed | |
| mime_type | |
| original_name | |
| dimensions | |
| size | |
| crop | |
| metadata | |
| description | |
| updated_at | |
| created_at |
| Field | Definition |
|---|---|
| id | |
| attempt_id | References track_e_attempt.id, the exercise attempt this feedback was left for (AttemptFeedback::$attempt, TrackEAttempt::$attemptFeedbacks) |
| user_id | See "Common fields" |
| resource_node_id | A 1 to 1 reference to resource_node |
| comment | |
| created_at | |
| updated_at |
A file uploaded/attached to a learner's exercise attempt (track_e_attempt), linked to its stored content via resource_node. See AttemptFile (src/CoreBundle/Entity/AttemptFile.php), a sibling of attempt_feedback for the same attempt.
| Field | Definition |
|---|---|
| id | Unique identifier (UUID) |
| attempt_id | References track_e_attempt.id, the exercise attempt this file was uploaded for (AttemptFile::$attempt, TrackEAttempt::$attemptFiles) |
| resource_node_id | References resource_node.id, the stored file (AttemptFile::$resourceNode) |
| comment | |
| created_at | |
| updated_at |
Key/value sync checkpoints for the Azure AD / Microsoft Graph integration, used so the Azure sync commands only fetch users/user-groups changed since the last run. See AzureSyncState (src/CoreBundle/Entity/AzureSyncState.php), read/written by AzureSyncAbstractCommand and its subcommands.
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | Key naming the tracked sync state (e.g. users_datalink, usergroups_datalink) |
| value | Stored state value, typically the Microsoft Graph API deltaLink used to resume sync from where it left off |
| created_at | |
| updated_at |
(not yet used)
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| title | |
| description | |
| path | |
| controller | |
| active |
(not in use yet) Allows for the synchronisation of Chamilo portals between themselves (not used yet)
| Field | Definition |
|---|---|
| id | Unique identifier |
| access_url_id | References access_url.id, the portal this branch record represents (BranchSync::$url) |
| parent_id | References branch_sync.id, the parent branch in the nested tree of portals (BranchSync::$parent) |
| unique_id | Unique string identifier generated for this branch, used to identify it during synchronisation |
| title | Name of the branch/portal |
| description | |
| branch_ip | IP address of the branch portal |
| latitude | Geographic latitude of the branch, used for the portal map view |
| longitude | Geographic longitude of the branch, used for the portal map view |
| dwn_speed | Download speed reported by the branch (informational) |
| up_speed | Upload speed reported by the branch (informational) |
| delay | Network delay/latency reported by the branch (informational) |
| admin_mail | E-mail address of the branch administrator |
| admin_name | Name of the branch administrator |
| admin_phone | Phone number of the branch administrator |
| last_sync_trans_id | ID of the last synchronisation transaction processed for this branch |
| last_sync_trans_date | Datetime of the last synchronisation transaction |
| last_sync_type | Type/mode of the last synchronisation performed |
| ssl_pub_key | Public SSL key used to authenticate/encrypt communication with this branch |
| branch_type | Type of branch (e.g. central hub vs local portal) |
| lft | Nested-set "left" boundary value used for the branch tree hierarchy (Gedmo Tree) |
| rgt | Nested-set "right" boundary value used for the branch tree hierarchy (Gedmo Tree) |
| lvl | Nested-set depth level in the branch tree hierarchy (Gedmo Tree) |
| root | Nested-set root identifier of the branch tree this record belongs to (Gedmo Tree) |
(not in use yet) Allows for the registration of transactions (pending or executed) from another system, to be executed in Chamilo
| Field | Definition |
|---|---|
| id | Unique identifier |
| status_id | References branch_transaction_status.id, the current status of this transaction (BranchTransaction::$branchTransactionStatus) |
| branch_id | References branch_sync.id, the branch this transaction was received from/for (BranchTransaction::$branch) |
| transaction_id | External system's transaction identifier (BranchTransaction::$externalTransactionId) |
| action | Action to execute in Chamilo for this transaction (e.g. create/update/delete) |
| item_id | Identifier of the item, in the external system, this transaction refers to |
| origin | Origin system/branch of the transaction |
| dest_id | Destination identifier for the transaction |
| external_info | Additional information provided by the external system |
| time_insert | Datetime the transaction was registered |
| time_update | Datetime the transaction was last updated |
| failed_attempts | Number of times execution of this transaction has failed |
(not in use yet) Dictionary of status terms for branch_transaction
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | Name of the status (e.g. pending, executed) |
Contains the announcements in the corresponding course tool
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| content | |
| end_date | |
| email_sent |
Contains the attachments (files) of c_announcement
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| announcement_id | id from c_announcement
|
| path | |
| comment | |
| size | |
| filename |
Contains one attendance "resource". Courses can contain several attendance resources, which can each be evaluated in the gradebook. Each contains dates (c_attendance_calendar), which contain attendance records (see c_attendance_sheet)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| description | |
| active | |
| attendance_qualify_title | |
| attendance_qualify_max | |
| attendance_weight | |
| locked | |
| require_unique | Whether a user can only be marked present once per calendar date (CAttendance::$requireUnique) |
| room_id | References room.id (CAttendance::$room) |
Each attendance datetime is registered here separately.
| Field | Definition |
|---|---|
| iid | Unique identifier |
| attendance_id | id from c_attendance
|
| date_time | |
| done_attendance | |
| blocked | Whether this attendance date is locked against further changes (CAttendanceCalendar::$blocked) |
| duration | Duration, in minutes, of the attendance session (CAttendanceCalendar::$duration) |
| room_id | References room.id; overrides the parent attendance's room for this date if set (CAttendanceCalendar::$room) |
If an attendance date is specific to a users group in a course, this links the date to the c_group
| Field | Definition |
|---|---|
| iid | Unique identifier |
| group_id | See "Common fields" |
| calendar_id | References c_attendance_calendar.iid (CAttendanceCalendarRelGroup::$attendanceCalendar) |
The global attendance "rate" of a user in an attendance resource
| Field | Definition |
|---|---|
| iid | Unique identifier |
| user_id | See "Common fields" |
| attendance_id | References c_attendance.iid (CAttendanceResult::$attendance) |
| score |
A teacher's remark on a specific attendance record for one user and calendar date. See CAttendanceResultComment (src/CourseBundle/Entity/CAttendanceResultComment.php); despite the table name, attendance_sheet_id actually references c_attendance_sheet (the per-user, per-date presence record), not c_attendance_result.
| Field | Definition |
|---|---|
| iid | Unique identifier |
| attendance_sheet_id | References c_attendance_sheet.iid (CAttendanceResultComment::$attendanceSheetId) |
| user_id | See "Common fields". The student whose attendance is commented on. |
| comment | |
| created_at | |
| updated_at | |
| author_user_id | See "Common fields". The teacher who wrote the comment. |
Registers the attendance or lack thereof of a user to a specific calendar datetime
| Field | Definition |
|---|---|
| iid | Unique identifier |
| user_id | See "Common fields" |
| attendance_calendar_id | References c_attendance_calendar.iid (CAttendanceSheet::$attendanceCalendar) |
| presence | |
| signature | Signature captured for this attendance record (CAttendanceSheet::$signature) |
Log table for changes in the c_attendance_sheet
| Field | Definition |
|---|---|
| iid | Unique identifier |
| attendance_id | References c_attendance.iid (CAttendanceSheetLog::$attendance) |
| lastedit_user_id | See "Common fields" |
| lastedit_date | |
| lastedit_type | |
| calendar_date_value |
An invitation for a specific user to join an auto-registration group (c_group_info) within a group category (c_group_category), used by the group self-registration/auto-grouping feature. See CAutogroupUserInvitation (src/CourseBundle/Entity/CAutogroupUserInvitation.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| group_category_id | References c_group_category.iid (CAutogroupUserInvitation::$groupCategory) |
| group_id | References c_group_info.iid (CAutogroupUserInvitation::$group) |
| user_id | See "Common fields" |
| confirm | Whether the invited user has confirmed joining the group |
Entries for each blog created in a course
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| blog_subtitle | |
| date_creation |
File attachments to blog posts
| Field | Definition |
|---|---|
| iid | Unique identifier |
| blog_id | References c_blog.iid. Used by CBlogAttachment::$blog. |
| post_id | References c_blog_post.iid. Used by CBlogAttachment::$post. |
| comment_id | References c_blog_comment.iid. Used by CBlogAttachment::$commentRef. |
| path | |
| comment | |
| size | |
| filename |
Comments on blog posts
| Field | Definition |
|---|---|
| iid | Unique identifier |
| author_id | Reference to user.id. Represents the author of the blog comment. |
| blog_id | References c_blog.iid. Used by CBlogComment::$blog. |
| post_id | References c_blog_post.iid. Used by CBlogComment::$post. |
| parent_comment_id | References c_blog_comment.iid (self-reference for threaded replies). Used by CBlogComment::$parentComment. |
| comment_id | deprecated |
| title | |
| comment | |
| date_creation |
Messages posted in blogs
| Field | Definition |
|---|---|
| iid | Unique identifier |
| author_id | References user.id. Represents the author of the blog post. |
| blog_id | References c_blog.iid. Used by CBlogPost::$blog. |
| title | |
| full_text | |
| date_creation |
Ratings given to blog posts
| Field | Definition |
|---|---|
| iid | Unique identifier |
| blog_id | References c_blog.iid. Used by CBlogRating::$blog. |
| user_id | See "Common fields" |
| post_id | References c_blog_post.iid. Used by CBlogRating::$post. |
| rating_type | |
| rating |
Link between c_blog and user
| Field | Definition |
|---|---|
| iid | Unique identifier |
| blog_id | References c_blog.iid. Used by CBlogRelUser::$blog. |
| user_id | See "Common fields" |
Tasks that can be configured inside a blog
| Field | Definition |
|---|---|
| iid | Unique identifier |
| blog_id | References c_blog.iid. Used by CBlogTask::$blog. |
| author_id | References user.id. Used by CBlogTask::$author. |
| task_id | Legacy course-local sequential identifier of the task entry, retained for backward compatibility (defaults to 0); superseded by iid. Maps to CBlogTask::$taskId, not used as a foreign key. |
| title | |
| description | |
| color | |
| system_task |
Assignation of tasks (c_blog_task) to users (user)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| task_id | References c_blog_task.iid. Used by CBlogTaskRelUser::$task. |
| blog_id | References c_blog.iid. Used by CBlogTaskRelUser::$blog. |
| user_id | See "Common fields" |
| target_date | |
| status |
Events of the calendar
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| parent_event_id | References c_calendar_event.iid (CCalendarEvent::$parentEvent) |
| room_id | References room.id (CCalendarEvent::$room) |
| career_id | References career.id (CCalendarEvent::$career) |
| promotion_id | References promotion.id (CCalendarEvent::$promotion) |
| title | |
| content | |
| start_date | |
| end_date | |
| all_day | |
| comment | |
| color | |
| invitation_type | Type of invitation for a collective event (CCalendarEvent::TYPE_INVITATION = invitation or TYPE_SUBSCRIPTION = subscription) |
| collective | Whether the event is a collective event that a group of users can subscribe to or be invited to (CCalendarEvent::$collective) |
| subscription_visibility | Visibility of the subscription/attendee list (CCalendarEvent::SUBSCRIPTION_VISIBILITY_NO = 0, SUBSCRIPTION_VISIBILITY_ALL = 1, SUBSCRIPTION_VISIBILITY_CLASS = 2) |
| subscription_item_id | When subscription_visibility is SUBSCRIPTION_VISIBILITY_CLASS, references usergroup.id (the class/group allowed to subscribe) (CCalendarEvent::$subscriptionItemId) |
| max_attendees | Maximum number of attendees allowed to subscribe to the event |
Attachment (files) to the c_calendar_event records
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| agenda_id | References c_calendar_event.iid (CCalendarEventAttachment::$event) |
| comment | |
| filename |
Definition of repetitions for existing events
| Field | Definition |
|---|---|
| iid | Unique identifier |
| cal_id | References c_calendar_event.iid (CCalendarEventRepeat::$event) |
| cal_type | |
| cal_end | |
| cal_frequency | |
| cal_days |
Definition of exclusions/exceptions in repetitions for existing events
| Field | Definition |
|---|---|
| iid | Unique identifier |
| cal_id | References c_calendar_event.iid (CCalendarEventRepeatNot::$event) |
| cal_date |
Logs when a user is active in the course chat
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| to_group_id | See "Common fields". References c_group_info.iid, the course group the user was connected to in the course chat (CChatConnected::$toGroupId) |
| user_id | See "Common fields" |
| last_connection |
A resource-based container for one course chat conversation, distinct from the older presence table c_chat_connected. See CChatConversation (src/CourseBundle/Entity/CChatConversation.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | References resource_node.id, the resource node backing this conversation |
| title |
The sections available in the course description tool
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| content | |
| description_type | |
| progress |
Settings of the course (whether to send e-mails, when, etc) that can be access through the Settings tool inside the course
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| variable | |
| subkey | |
| type | |
| category | |
| value | |
| title | |
| comment | |
| subkeytext |
The list of documents and folders of the documents tool
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| comment | |
| filetype | |
| readonly | |
| template | 1 if this document is a reusable document template |
Folders inside the dropbox
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| cat_id | Legacy self-referencing identifier: mirrors this row's own iid (set via an insert-then-update, see CDropboxCategoryRepository::createForUser()). Not a reference to another table — it is the value that c_dropbox_file.cat_id and c_dropbox_post.cat_id point back to. Used by CDropboxCategory::$catId. |
| title | |
| received | |
| sent | |
| user_id | See "Common fields" |
| session_id | See "Common fields" |
Feedback sent by users on files in the dropbox
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| feedback_id | Legacy self-referencing identifier: mirrors this row's own iid (set via an insert-then-update in dropbox_functions.inc.php::store_feedback()), not a foreign key to another row. Used by CDropboxFeedback::$feedbackId. |
| file_id | References c_dropbox_file.iid. Identifies the file this feedback was posted on. Used by CDropboxFeedback::$fileId. |
| author_user_id | See "Common fields" |
| feedback | |
| feedback_date |
A file dropped in the dropbox
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| c_id | See "Common fields" |
| uploader_id | References user.id. Represents the user who uploaded the file. |
| filename | |
| filesize | |
| title | |
| description | |
| author | |
| upload_date | |
| last_upload_date | |
| cat_id | References c_dropbox_category.iid (via c_dropbox_category.cat_id, which mirrors iid). Identifies the category/folder containing this file. Used by CDropboxFile::$catId. |
| session_id | See "Common fields" |
The relationships between files (c_dropbox_file) and whom they are sent to (user)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| file_id | References c_dropbox_file.iid. Identifies the file sent to the user in this row. Used by CDropboxPerson::$fileId. |
| user_id | See "Common fields" |
A message posted on a file (c_dropbox_file)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| feedback_date | |
| feedback | |
| cat_id | References c_dropbox_category.iid (via c_dropbox_category.cat_id, which mirrors iid). Identifies the category/folder this message's file belongs to. Used by CDropboxPost::$catId. |
| session_id | See "Common fields" |
| c_id | See "Common fields" |
| file_id | References c_dropbox_file.iid. Identifies the file this message was posted on. Used by CDropboxPost::$fileId. |
| dest_user_id | See "Common fields". Represents the user this message is sent to. |
File attachments to c_forum_post records
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| post_id | References c_forum_post.iid. Used by CForumAttachment::$post. |
| c_id | See "Common fields" |
| path | |
| comment | |
| size | |
| filename |
Forum categories (which include forums)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| cat_comment | |
| locked |
Forums (which include threads)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| forum_last_post | |
| forum_category | |
| lp_id | References c_lp.iid. Used by CForum::$lp. |
| title | |
| forum_comment | |
| forum_threads | |
| forum_posts | |
| allow_anonymous | |
| allow_edit | |
| approval_direct_post | |
| allow_attachments | |
| allow_new_threads | |
| default_view | |
| forum_of_group | |
| forum_group_public_private | |
| locked | |
| forum_image | |
| start_time | |
| end_time | |
| moderated |
When a user marks a thread or post for update notifications, it is kept here
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| thread_id | References c_forum_thread.iid. Used by CForumMailcue::$threadId. |
| user_id | See "Common fields" |
| post_id | References c_forum_post.iid. Used by CForumMailcue::$postId. |
...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| user_id | See "Common fields" |
| forum_id | References c_forum_forum.iid. Used by CForumNotification::$forumId. |
| thread_id | References c_forum_thread.iid. Used by CForumNotification::$threadId. |
| post_id | References c_forum_post.iid. Used by CForumNotification::$postId. |
Forum posts (in response to a thread)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| thread_id | References c_forum_thread.iid. Used by CForumPost::$thread. |
| forum_id | References c_forum_forum.iid. Used by CForumPost::$forum. |
| poster_id | References user.id. Used by CForumPost::$user. |
| post_parent_id | References c_forum_post.iid. Used by CForumPost::$postParent. Self-reference: the post being replied to. |
| title | |
| post_text | |
| post_date | |
| post_notification | |
| visible | |
| status |
Forum threads (which give birth to posts and have more properties than posts)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| forum_id | References c_forum_forum.iid. Used by CForumThread::$forum. |
| thread_poster_id | References user.id. Represents the author of the thread. |
| thread_last_post | |
| lp_item_id | References c_lp_item.iid. Used by CForumThread::$item. |
| title | |
| thread_date | |
| thread_replies | |
| thread_views | |
| thread_sticky | |
| locked | |
| thread_title_qualify | |
| thread_qualify_max | |
| thread_close_date | |
| thread_weight | |
| thread_peer_qualify |
If a thread can be scored, the scores given by teachers or other users are stored here
| Field | Definition |
|---|---|
| iid | Unique identifier |
| user_id | See "Common fields" |
| thread_id | References c_forum_thread.iid. Used by CForumThreadQualify::$thread. |
| qualify_user_id | See "Common fields" |
| c_id | See "Common fields" |
| qualify | |
| qualify_time |
A log table of all the changes in the forum threads scores
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| user_id | See "Common fields" |
| thread_id | References c_forum_thread.iid. Used by CForumThreadQualifyLog::$threadId. |
| qualify | |
| qualify_user_id | See "Common fields" |
| qualify_time | |
| session_id | See "Common fields" |
Terms from the course glossary
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| description |
Categories of course groups (c_group_info)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| peer_assessment | References c_peer_assessment.id (CGroupCategory::$peerAssessment) — optional peer-assessment configuration applied to groups in this category |
| title | |
| description | |
| doc_state | |
| calendar_state | |
| work_state | |
| announcements_state | |
| forum_state | |
| wiki_state | |
| chat_state | |
| max_student | |
| self_reg_allowed | |
| self_unreg_allowed | |
| groups_per_user | |
| document_access | Access level for the group's shared document space |
| min_student | Minimum number of students required per group |
| begin_inscription_date | Start date/time of the self-registration window |
| end_inscription_date | End date/time of the self-registration window |
| only_me | Limits visibility of a self-registered group to its own creator |
| allow_coach_change_options_groups | Allows the course coach to change this category's group configuration options |
| allow_change_group_name | Whether/how group members may rename their group |
| allow_autogroup | Allows automatic group assignment/creation for self-registration |
Restricts which platform users or usergroups may self-register into groups of a c_group_category. See CGroupCategoryRelUser (src/CourseBundle/Entity/CGroupCategoryRelUser.php).
| Field | Definition |
|---|---|
| id | Unique identifier; part of the composite primary key with group_category_id
|
| group_category_id | References c_group_category.iid (CGroupCategoryRelUser::$groupCategory); part of the composite primary key |
| population_type | Distinguishes whether population_id refers to a user or a usergroup |
| population_id | References either user.id or usergroup.id, depending on population_type
|
| status_in_category |
Course groups and their description
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| category_id | References c_group_category.iid (CGroup::$category) |
| title | |
| status | |
| description | |
| max_student | |
| doc_state | |
| calendar_state | |
| work_state | |
| announcements_state | |
| forum_state | |
| wiki_state | |
| chat_state | |
| self_registration_allowed | |
| self_unregistration_allowed | |
| document_access | Access level for the group's shared document space |
Tutors assigned to course groups (c_group_info)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| user_id | See "Common fields" |
| group_id | See "Common fields" |
| c_id | See "Common fields" |
Users registered in course groups (c_group_info)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| user_id | See "Common fields" |
| group_id | See "Common fields" |
| c_id | See "Common fields" |
| status | |
| role | |
| ready_autogroup |
Restricts membership of a course group (c_group_info) to the members of a specific platform usergroup; used to auto-sync course group members when the usergroup's member list changes (see UsergroupAddUsersController::syncLinkedCourseGroups()). See CGroupRelUsergroup (src/CourseBundle/Entity/CGroupRelUsergroup.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| group_id | References c_group_info.iid (CGroupRelUsergroup::$group) |
| usergroup_id | References usergroup.id (CGroupRelUsergroup::$usergroup) |
| session_id | See "Common fields" |
| c_id | See "Common fields" |
| ready_autogroup |
Course links
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| category_id | References c_link_category.iid (CLink::$category) |
| custom_image_id | References asset.id (CLink::$customImage) — custom image/illustration for the link, if uploaded by the teacher |
| url | |
| title | |
| description | |
| target |
Categories of course links (c_link)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| description |
Course learning paths
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| category_id | References c_lp_category.iid. Used by CLp::$category. |
| asset_id | References asset.id. Used by CLp::$asset. |
| lp_type | |
| title | |
| ref | |
| description | |
| path | |
| force_commit | |
| default_view_mod | |
| default_encoding | Mostly for very old imported content not in UTF-8 (usually in UTF-8 in all recent content) |
| content_maker | just a label |
| content_local | |
| content_license | |
| prevent_reinit | |
| js_lib | |
| debug | feature only available to platform admins |
| theme | |
| author | |
| prerequisite | for dependencies on other learning paths |
| hide_toc_frame | |
| seriousgame_mode | |
| use_max_score | |
| autolaunch | |
| max_attempts | |
| subscribe_users | |
| created_on | |
| modified_on | |
| published_on | |
| expired_on | |
| accumulate_scorm_time | |
| accumulate_work_time | |
| next_lp_id | Not a cross-reference in the current codebase: stored as a plain scalar column, not a Doctrine association, despite the name suggesting a pointer to the learning path to move to after finishing this one. Used by CLp::$nextLpId. |
| subscribe_user_by_date | |
| display_not_allowed_lp | |
| duration | |
| auto_forward_video |
Categories for courses learning paths
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title |
Restricts which users may see a learning-path category (c_lp_category). See CLpCategoryRelUser (src/CourseBundle/Entity/CLpCategoryRelUser.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| category_id | References c_lp_category.iid (CLpCategoryRelUser::$category) |
| user_id | See "Common fields" |
Documents inside a learning path
| Field | Definition |
|---|---|
| iid | Unique identifier |
| lp_id | References c_lp.iid. Used by CLpItem::$lp. |
| item_root | References c_lp_item.iid (self-reference to the root item of this LP's tree; also mapped as Gedmo TreeRoot). Used by CLpItem::$root. |
| parent_item_id | References c_lp_item.iid (self-reference to the parent item, building the LP's tree structure via Gedmo's nested-tree behavior). Used by CLpItem::$parent. |
| title | |
| item_type | tool used (document, link, etc) or in the case of SCORM: asset, sco, etc |
| ref | iid of the item if document, quiz, link, etc |
| description | |
| path | |
| min_score | |
| max_score | |
| mastery_score | |
| display_order | |
| prerequisite | |
| parameters | |
| launch_data | |
| max_time_allowed | |
| terms | |
| search_did | |
| audio | |
| prerequisite_min_score | |
| prerequisite_max_score | |
| previous_item_id | Mapped as Gedmo TreeLeft (nested-set left boundary maintained by the tree extension), not a plain foreign key despite the name; legacy code (e.g. learnpath.class.php::delete_item()) still writes a sibling item's iid into it directly. Used by CLpItem::$previousItemId. |
| next_item_id | Mapped as Gedmo TreeRight (nested-set right boundary), the counterpart of previous_item_id; not a foreign key despite the name. Used by CLpItem::$nextItemId. |
| lvl | Mapped as Gedmo TreeLevel (nested-set depth of this item within the LP's tree), maintained by the tree extension alongside previous_item_id/next_item_id. Used by CLpItem::$lvl. |
| duration | |
| export_allowed |
Each visualization by a user (user) of one document (c_lp_item) inside the learning path (c_lp). Belongs to a c_lp_view entry
| Field | Definition |
|---|---|
| iid | Unique identifier |
| lp_item_id | References c_lp_item.iid. Used by CLpItemView::$item. |
| lp_view_id | References c_lp_view.iid. Used by CLpItemView::$view. |
| view_count | |
| start_time | |
| total_time | |
| score | |
| status | |
| suspend_data | |
| lesson_location | |
| core_exit | |
| max_score | |
| progress |
SCORM interactions for one specific c_lp_item_view
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| order_id | Not a cross-reference: the ordinal position of this interaction within its item view's interaction list (matches the SCORM cmi.interactions.n index). Used by CLpIvInteraction::$orderId. |
| lp_iv_id | References c_lp_item_view.iid (the item view this interaction belongs to); stored as a plain scalar column, not a Doctrine association. Used by CLpIvInteraction::$lpIvId. |
| interaction_id | Not a cross-reference: a SCORM-spec string identifier (cmi.interactions.n.id) defined by the SCORM package's manifest, not a reference to another Chamilo table. Used by CLpIvInteraction::$interactionId. |
| interaction_type | |
| weighting | |
| completion_time | |
| correct_responses | |
| student_response | |
| result | |
| latency |
SCORM objectives for one specific c_lp_item_view
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| lp_iv_id | References c_lp_item_view.iid (the item view this objective belongs to); stored as a plain scalar column, not a Doctrine association. Used by CLpIvObjective::$lpIvId. |
| order_id | Not a cross-reference: the ordinal position of this objective within its item view's objective list (matches the SCORM cmi.objectives.n index). Used by CLpIvObjective::$orderId. |
| objective_id | Not a cross-reference: a SCORM-spec string identifier (cmi.objectives.n.id) defined by the SCORM package's manifest, not a reference to another Chamilo table. Used by CLpIvObjective::$objectiveId. |
| score_raw | |
| score_max | |
| score_min | |
| status |
A per-user access restriction/override for a learning path (c_lp), used by the advanced learning-path access feature (see LpAdvancedAccessHelper) to grant an individual student access outside the LP's own publication dates. See CLpRelUser (src/CourseBundle/Entity/CLpRelUser.php).
| Field | Definition |
|---|---|
| iid | Unique identifier |
| lp_id | References c_lp.iid (CLpRelUser::$lp) |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| user_id | See "Common fields" |
| creator_id | References user.id, the user who created this restriction (CLpRelUser::$creatorUser) |
| group_id | See "Common fields" |
| created_at | |
| start_date | |
| end_date | |
| is_open_without_date |
Restricts access to a learning path (c_lp) to the members of a specific platform usergroup, mirroring c_lp_rel_user at the group level. See CLpRelUserGroup (src/CourseBundle/Entity/CLpRelUserGroup.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| lp_id | References c_lp.iid (CLpRelUserGroup::$lp) |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| usergroup_id | References usergroup.id (CLpRelUserGroup::$userGroup) |
| created_at |
A time window during which a specific user is allowed to access a learning path (c_lp), independent of the LP's own publication dates. See CLpUserAccess (src/CourseBundle/Entity/CLpUserAccess.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| lp_id | References c_lp.iid (CLpUserAccess::$lp) |
| start_date | |
| end_date | |
| is_open_without_date |
View of a learning path (c_lp) by a user. Contains many c_lp_view_item
| Field | Definition |
|---|---|
| iid | Unique identifier |
| user_id | See "Common fields" |
| lp_id | References c_lp.iid. Used by CLpView::$lp. |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| view_count | |
| last_item | |
| progress | the current progress of the user in this learning path's view, in percentage (0-100) |
| compdate |
Posts in the notebook tool in the course (personal notes)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| user_id | See "Common fields" |
| title | |
| description | |
| creation_date | datetime |
| update_date | datetime |
| status |
Configuration of a peer-grading exercise in which students of a group category (c_group_category) grade each other's submissions (c_student_publication), including scheduling windows and correction-distribution rules. See CPeerAssessment (src/CourseBundle/Entity/CPeerAssessment.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| c_id | See "Common fields" |
| group_category_id | References c_group_category.iid (CPeerAssessment::$groupCategory) |
| max_correction_per_student | |
| state | |
| start_work_repository_option | |
| end_work_repository_option | |
| start_correction_option | |
| end_correction_option | |
| distribute_correction_option | |
| end_repository_option | |
| examiner_role_condition | |
| student_access_to_correction | |
| comment_constraint | |
| correct_own_work | |
| correct_benchmark_work | |
| distribution_algorithm | |
| send_work_start_date | |
| send_work_end_date | |
| start_correction_date | |
| end_correction_date | |
| created_at | |
| updated_at |
One examiner's correction of a peer's work within a c_peer_assessment, holding the resulting score. See CPeerAssessmentCorrection (src/CourseBundle/Entity/CPeerAssessmentCorrection.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| peer_assessment_id | References c_peer_assessment.id (CPeerAssessmentCorrection::$peerAssessment) |
| student_group_id | References usergroup.id, the examiner's student group (CPeerAssessmentCorrection::$studentGroup) |
| examiner_id | id of the examining user |
| examiner_group_id | id of the examining group, if the correction was made collectively |
| total_score | |
| maximum_score | |
| delivered | |
| examiner_folder_id | id of the work-repository folder where the examiner's correction file is filed |
| examiner_document_id | id of the examiner's correction document |
| completed |
The score and comment given for one c_peer_assessment_criteria within a c_peer_assessment_correction. See CPeerAssessmentCorrectionCriteria (src/CourseBundle/Entity/CPeerAssessmentCorrectionCriteria.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| peer_assessment_correction_id | References c_peer_assessment_correction.id (CPeerAssessmentCorrectionCriteria::$peerAssessmentCorrection) |
| peer_assessment_criteria_id | References c_peer_assessment_criteria.id (CPeerAssessmentCorrectionCriteria::$peerAssessmentCriteria) |
| comment | |
| score |
One grading criterion, with its maximum score, defined for a c_peer_assessment. See CPeerAssessmentCriteria (src/CourseBundle/Entity/CPeerAssessmentCriteria.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| peer_assessment_id | References c_peer_assessment.id (CPeerAssessmentCriteria::$peerAssessment) |
| title | |
| description | |
| score | Maximum score for this criterion |
| position |
Audit log of user actions within a c_peer_assessment. See CPeerAssessmentLog (src/CourseBundle/Entity/CPeerAssessmentLog.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| peer_assessment_id | References c_peer_assessment.id (CPeerAssessmentLog::$peerAssessment) |
| user_id | See "Common fields" |
| date | |
| description |
Links a submitted assignment (c_student_publication) to the c_peer_assessment and course group (c_group_info) it is being peer-graded in. See CPeerAssessmentRelStudentPublication (src/CourseBundle/Entity/CPeerAssessmentRelStudentPublication.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| peer_assessment_id | References c_peer_assessment.id (CPeerAssessmentRelStudentPublication::$peerAssessment) |
| student_publication_id | References c_student_publication.iid (CPeerAssessmentRelStudentPublication::$studentPublication) |
| group_id | See "Common fields" |
| student_publication_folder_id | id of the c_student_publication folder this submission was filed under |
A student's assignment submission (c_student_publication) and vote within an auto-generated peer-grading group, used to distribute peer-assessment corrections among students. See CPeerAutogroupRelStudentPublication (src/CourseBundle/Entity/CPeerAutogroupRelStudentPublication.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| student_publication_id | References c_student_publication.iid (CPeerAutogroupRelStudentPublication::$studentPublication) |
| group_id | References c_group_info.iid (CPeerAutogroupRelStudentPublication::$group) |
| peer_autogroup_id | id of the auto-generated peer group |
| vote | |
| date_vote | |
| student_publication_parent_id | id of the parent c_student_publication folder/submission |
| student_publication_folder_id | id of the c_student_publication folder this submission was filed under |
Tracks a course document submitted to the Compilatio external plagiarism-detection service, storing the identifier Compilatio assigned to it. See CPlagiarismCompilatioDocs (src/CourseBundle/Entity/CPlagiarismCompilatioDocs.php); the integration is enabled via the allow_compilatio_tool platform setting.
| Field | Definition |
|---|---|
| id | Unique identifier |
| c_id | See "Common fields" |
| document_id | References c_document.iid, the submitted document |
| compilatio_id | Identifier assigned to the document by the Compilatio service |
List of exercises in courses
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| quiz_category_id | References c_quiz_category.id, renamed from exercise_category_id (CQuiz::$quizCategory) |
| title | Title |
| description | Introduction block that shows at the beginning of a test |
| sound | |
| type | |
| random | Type of randomness |
| random_answers | Whether answers are randomized |
| results_disabled | Whether we show the results |
| access_condition | |
| max_attempt | Number of attempts allowed |
| start_time | Datetime of when the entrance to the quiz is first available |
| end_time | Datetime of when the entrance to the quiz stops being available |
| feedback_type | Type of feedback shown to the student after answering a question |
| expired_time | |
| propagate_neg | Whether to propagate negative scores from one question to the next |
| save_correct_answers | |
| review_answers | |
| random_by_category | |
| text_when_finished | |
| text_when_finished_failure | Text shown to the student when they fail the quiz (pass_percentage not reached) |
| display_category_name | |
| pass_percentage | |
| prevent_backwards | Prevent users for going backwards between questions in one-question-per-page mode (optional field added manually) |
| question_selection_type | |
| hide_question_number | Whether to hide the question number |
| hide_question_title | |
| show_previous_button | Whether to show a "previous question" button |
| notifications | Comma-separated list of notification-event codes to trigger for this quiz |
| autolaunch | |
| hide_attempts_table | Whether to hide the attempts table |
| page_result_configuration | Serialized configuration of what is displayed on the results page |
| display_chart_degree_certainty | Whether to display the degree-of-certainty chart |
| send_email_chart_degree_certainty | Whether to email the degree-of-certainty chart |
| not_display_balance_percentage_categorie_question | Whether to hide the balance percentage per category of questions |
| display_chart_degree_certainty_category | Whether to display the degree-of-certainty chart broken down by category |
| gather_questions_categories | Whether to gather/group questions by category |
| duration | Time limit for the quiz |
List of possible answers to a question (c_quiz_question) in a c_quiz
| Field | Definition |
|---|---|
| iid | Unique identifier |
| question_id | the c_quiz_question iid it relates to |
| answer | the text of this answer |
| correct | 0 if incorrect, 1 if the correct answer to the question |
| comment | feedback if this answer was picked |
| ponderation | Not the ponderation (bad naming) but the score obtained for selecting this answer |
| position | |
| hotspot_coordinates | |
| hotspot_type | |
| answer_code |
A category used to group quizzes/exercises (c_quiz) in a course; a resource-based entity managed through the exercise-category-management feature. See CQuizCategory (src/CourseBundle/Entity/CQuizCategory.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | References resource_node.id, the resource node backing this category |
| c_id | See "Common fields" |
| title | |
| description | |
| position | |
| created_at | |
| updated_at |
Records the "achieved level" a user reached in a destination/branching-scenario exercise attempt (track_e_exercises), used by survey-style exercises with question routing. See CQuizDestinationResult (src/CourseBundle/Entity/CQuizDestinationResult.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| exe_id | References track_e_exercises.exe_id, the exercise attempt (CQuizDestinationResult::$exe) |
| achieved_level | |
| hash |
List of questions in the exercises tool. As questions can be shared between c_quiz, the real link between questions and quizzes is through the c_quiz_rel_question table
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| question | question title |
| description | question (longer) description, if any |
| ponderation | max score for this question (usually calculated from the sum of scores from the answers) |
| position | |
| type | one of ~20 question types. Defined by constants in main/inc/lib/api.lib.php (search for "Question types" constants) |
| picture | in the case of a hotspot question, path to the image |
| level | level of difficulty. Only a string. Does not imply any logic change. |
| feedback | feedback text shown to the student for this question |
| extra | |
| question_code | special code that can be added to each question |
| mandatory | Whether answering this question is mandatory |
| duration | Time limit for this question |
| parent_media_id | Not a DB-enforced FK, but a logical reference to another c_quiz_question.iid used as the shared media/passage grouping this question (CQuizQuestion::$parentMediaId) |
Categories of questions in quizzes
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| description |
...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| question_id | References c_quiz_question.iid (CQuizQuestionOption::$question) |
| title | |
| position |
Relationship between a c_quiz_question and a c_quiz_question_category
| Field | Definition |
|---|---|
| question_id | References c_quiz_question.iid (join column of CQuizQuestion::$categories) |
| category_id | References c_quiz_question_category.iid (inverse join column of CQuizQuestion::$categories) |
Relationship between a c_quiz and a quiz category (see c_exercise_category)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| category_id | References c_quiz_question_category.iid (CQuizRelQuestionCategory::$category) |
| exercise_id | FK to c_quiz iid |
| count_questions | |
| destinations | Branching/destination configuration for this category (see c_quiz_destination_result) |
Relationship between a question (c_quiz_question) and a specific quiz (c_quiz)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| question_id | References c_quiz_question.iid (CQuizRelQuestion::$question) |
| quiz_id | References c_quiz.iid, renamed from exercice_id (CQuizRelQuestion::$quiz) |
| question_order | |
| destination | Branching/destination configuration for this question (see c_quiz_destination_result) |
A user-defined shortcut to a course resource, exposed as a resource-based entity itself so it can be listed/removed independently of the resource it points to. See CShortcut (src/CourseBundle/Entity/CShortcut.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | References resource_node.id, the resource node backing this shortcut |
| shortcut_node_id | References resource_node.id, the target resource the shortcut points to (CShortcut::$shortCutNode) |
| title |
An assignment handed over by a student
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| parent_id | References c_student_publication.iid, the parent folder/submission in the hierarchy, if any (CStudentPublication::$publicationParent) |
| user_id | See "Common fields" |
| group_category_id | References c_group_category.iid, the group category associated with this assignment/work, if any (CStudentPublication::$groupCategory) |
| title | |
| description | |
| author | |
| active | |
| accepted | |
| post_group_id | References c_group_info.iid, the course group this submission/assignment was posted to, if any (CStudentPublication::$postGroupId) |
| sent_date | |
| filetype | |
| has_properties | |
| view_properties | |
| qualification | |
| date_of_qualification | |
| qualificator_id | References user.id, the teacher who qualified/scored this submission (CStudentPublication::$qualificatorId) |
| weight | |
| allow_text_assignment | |
| contains_file | |
| document_id | References c_document.iid, the document associated with this submission (CStudentPublication::$documentId) |
| filesize | |
| duration | |
| student_delete_own_publication | |
| default_visibility | |
| extensions | |
| group_category_work_id |
Assigments definition (tasks/works)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| publication_id | FK to c_student_publication iid |
| expires_on | |
| ends_on | |
| add_to_calendar | |
| enable_qualification |
Comments on c_student_publication
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| work_id | FK to c_student_publication iid |
| user_id | See "Common fields" |
| comment | |
| file | |
| sent_at |
A correction/feedback file uploaded by a teacher for a student's assignment submission (c_student_publication); the newer resource-based counterpart to the url_correction column already on c_student_publication, created via CreateStudentPublicationCorrectionFileAction. See CStudentPublicationCorrection (src/CourseBundle/Entity/CStudentPublicationCorrection.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | References resource_node.id, the resource node backing this correction file |
| title |
Added in v3.1.
Teachers (or session coaches) following an assignment (a top-level c_student_publication folder). Followers are the only users e-mailed when a learner comments on a submission to that assignment. Kept separate from c_student_publication_rel_user, which lists the users an assignment is restricted to. Added in v3.1 (src/CoreBundle/Migrations/Schema/V310/Version20261020120000.php, which also makes each existing assignment's creator a follower). See CStudentPublicationFollow (src/CourseBundle/Entity/CStudentPublicationFollow.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| publication_id | References c_student_publication.iid, the assignment being followed (CStudentPublicationFollow::$publication). Deleted in cascade with the assignment |
| user_id | References user.id, the teacher or session coach following the assignment (CStudentPublicationFollow::$user). Deleted in cascade with the user |
| created_at | See "Common fields" (when the user started following the assignment) |
The pair (publication_id, user_id) is unique (uniq_student_publication_follow).
Link between a document (c_document) that serves as a template to the assignments
| Field | Definition |
|---|---|
| iid | Unique identifier |
| work_id | FK to c_student_publication iid |
| document_id | FK to c_document iid |
Link between users and assignments (to assign specific assignments to a reduced number of users)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| work_id | FK to c_student_publication iid |
| user_id | See "Common fields" |
Surveys
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| parent_id | References c_survey.iid (self-reference to the previous version of the same survey, used together with survey_version for survey versioning). Used by CSurvey::$surveyParent. |
| code | |
| title | |
| subtitle | |
| lang | |
| avail_from | |
| avail_till | |
| is_shared | |
| template | |
| intro | |
| surveythanks | |
| creation_date | |
| invited | |
| answered | |
| invite_mail | |
| reminder_mail | |
| mail_subject | |
| anonymous | |
| access_condition | |
| shuffle | |
| one_question_per_page | |
| survey_version | |
| lft | Gedmo nested-set tree metadata (left boundary), supporting survey versioning via the parent_id self-reference. |
| rgt | Gedmo nested-set tree metadata (right boundary), supporting survey versioning via the parent_id self-reference. |
| lvl | Gedmo nested-set tree metadata (depth level), supporting survey versioning via the parent_id self-reference. |
| survey_type | |
| show_form_profile | |
| form_fields | |
| visible_results | |
| is_mandatory | |
| display_question_number | |
| duration |
Possible answers to survey questions (c_survey_question)
| Field | Definition |
|---|---|
| iid | Unique identifier |
| survey_id | References c_survey.iid. Used by CSurveyAnswer::$survey. |
| question_id | References c_survey_question.iid. Used by CSurveyAnswer::$question. |
| option_id | References c_survey_question_option.iid (the option chosen by the respondent). Stored as text rather than a typed foreign key: may be suffixed with @:@ plus free text for "other" answers, or hold a non-option value for open/percentage question types. Used by CSurveyAnswer::$optionId. |
| value | |
| user | |
| session_id | See "Common fields" |
| c_lp_item_id | References c_lp_item.iid (the learning-path item that launched this survey, when the survey is embedded within a learning path); not enforced as a foreign key. Used by CSurveyAnswer::$lpItemId. |
Invitations of users to surveys
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| group_id | FK to c_group_info iid |
| survey_id | References c_survey.iid. Used by CSurveyInvitation::$survey. |
| user_id | References user.id (the user being invited to answer the survey). Used by CSurveyInvitation::$user. |
| invitation_code | |
| answered | |
| invitation_date | |
| reminder_date | |
| answered_at | |
| c_lp_item_id | References c_lp_item.iid (the learning-path item that launched this survey, when the survey is embedded within a learning path); not enforced as a foreign key. Used by CSurveyInvitation::$lpItemId. |
Survey questions
| Field | Definition |
|---|---|
| iid | Unique identifier |
| parent_id | References c_survey_question.iid (the question this one depends on, for conditional/branching display: this question is shown only if parent_option_id was chosen as the answer to the parent question). Used by CSurveyQuestion::$parent. |
| parent_option_id | References c_survey_question_option.iid (the option of the parent question that must be selected for this question to be shown, implementing conditional/branching survey logic). Used by CSurveyQuestion::$parentOption. |
| survey_id | References c_survey.iid. Used by CSurveyQuestion::$survey. |
| survey_question | |
| survey_question_comment | |
| type | |
| display | |
| sort | |
| shared_question_id | References shared_survey_question.question_id, a legacy cross-course shared question bank table removed from the current schema (see "shared_survey_question" section); not enforced as a foreign key. Used by CSurveyQuestion::$sharedQuestionId. |
| max_value | |
| survey_group_pri | |
| survey_group_sec1 | |
| survey_group_sec2 | |
| is_required | Whether this question is mandatory (1) or not (0) |
Options on survey questions
| Field | Definition |
|---|---|
| iid | Unique identifier |
| question_id | References c_survey_question.iid. Used by CSurveyQuestionOption::$question. |
| survey_id | References c_survey.iid. Used by CSurveyQuestionOption::$survey. |
| option_text | |
| sort | |
| value |
Highest level of thematic progress categorization
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| content | |
| active |
Dates related to the progress in a thematic plan
| Field | Definition |
|---|---|
| iid | Unique identifier |
| thematic_id | References c_thematic.iid (CThematicAdvance::$thematic) |
| attendance_id | References c_attendance.iid (CThematicAdvance::$attendance) |
| room_id | References room.id (CThematicAdvance::$room) |
| content | |
| start_date | |
| duration | |
| done_advance |
Second level of thematic progress
| Field | Definition |
|---|---|
| iid | Unique identifier |
| thematic_id | References c_thematic.iid (CThematicPlan::$thematic) |
| title | |
| description | |
| description_type |
Entries of available tools on the course homepage; each row now references the global tool catalog via tool_id (added by an earlier pass), so it stores only a position and resource-node pointer rather than the tool's own name/link/icon metadata
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| tool_id | References tool.id (CTool::$tool) — the global tool-catalog entry this row activates for the course |
| title | |
| position |
Introduction sections. On the course homepage but also (if enabled) in each tool.
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| c_tool_id | References c_tool.iid (CToolIntro::$courseTool) — the course tool entry this introduction belongs to |
| intro_text | longtext with the HTML intro to the tool |
Wiki pages in course
| Field | Definition |
|---|---|
| iid | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| c_id | See "Common fields" |
| page_id | Legacy grouping id, not a foreign key: set to the iid of the first version's row when a new page is created, then copied unchanged to every later version row of the same page (see version, reflink) |
| reflink | |
| title | |
| content | |
| user_id | See "Common fields" |
| group_id | FK to c_group_info iid |
| dtime | |
| addlock | |
| editlock | |
| visibility | |
| addlock_disc | |
| visibility_disc | |
| ratinglock_disc | |
| assignment | |
| comment | |
| progress | |
| score | |
| version | |
| is_editing | |
| time_edit | |
| hits | |
| linksto | |
| tag | |
| user_ip | |
| session_id | See "Common fields" |
Categorization, with a nested-tree hierarchy, of wiki pages (c_wiki) in a course. See CWikiCategory (src/CourseBundle/Entity/CWikiCategory.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| tree_root | References c_wiki_category.id, the root category of this node's tree (CWikiCategory::$root) |
| parent_id | References c_wiki_category.id, the parent category (CWikiCategory::$parent) |
| title | |
| lft | |
| lvl | |
| rgt |
Wiki configuration in a course
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| page_id | References c_wiki.page_id, the page-group this configuration applies to (matches across all version rows of the page, not a single c_wiki.iid); see CWikiConf::$pageId
|
| task | |
| feedback1 | |
| feedback2 | |
| feedback3 | |
| fprogress1 | |
| fprogress2 | |
| fprogress3 | |
| max_size | |
| max_text | |
| max_version | |
| startdate_assig | |
| enddate_assig | |
| delayedsubmit |
Conversations on each wiki page
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| publication_id | References c_wiki.page_id — the wiki page (page group) being discussed, despite the generic name (see CWikiDiscuss::$publicationId, set from page_id in WikiDiscussionProcessor) |
| userc_id | The user who posted the comment; references user.id — same convention as user_id in "Common fields" despite the non-standard column name (CWikiDiscuss::$usercId) |
| comment | |
| p_score | |
| dtime |
...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| type | |
| group_id | See "Common fields" |
| session_id | See "Common fields" |
| user_id | See "Common fields" |
Many-to-many join table linking wiki pages (c_wiki) to their categories (c_wiki_category); mapped via CWiki::$categories, there is no dedicated entity class for this table. See CWiki (src/CourseBundle/Entity/CWiki.php).
| Field | Definition |
|---|---|
| wiki_id | References c_wiki.iid; part of the composite primary key |
| category_id | References c_wiki_category.id; part of the composite primary key |
Careers (admin panel)
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | |
| description | |
| status | |
| created_at | |
| updated_at |
See CatalogueCourseRelAccessUrlRelUsergroup (src/CoreBundle/Entity/CatalogueCourseRelAccessUrlRelUsergroup.php). Restricts a course's visibility in the public course catalogue, scoped to a given portal (access_url), to members of one usergroup; CatalogueController::listSessions()'s course counterpart treats an absent row for a course/URL pair as "unrestricted" and a usergroup_id of null on an existing row as "visible to everyone on that URL".
| Field | Definition |
|---|---|
| id | Unique identifier |
| course_id | See "Common fields" |
| access_url_id | See "Common fields" |
| usergroup_id | References usergroup.id; the usergroup allowed to see the course in the catalogue on this portal (CatalogueCourseRelAccessUrlRelUsergroup::$usergroup) |
See CatalogueSessionRelAccessUrlRelUsergroup (src/CoreBundle/Entity/CatalogueSessionRelAccessUrlRelUsergroup.php). Session-side counterpart of catalogue_course_rel_access_url_rel_usergroup: restricts a session's visibility in the public course catalogue, scoped to a given portal (access_url), to members of one usergroup. Used by CatalogueController::listSessions(), which shows all sessions when no row exists for the current access_url, and otherwise only sessions whose linked usergroup (or no usergroup at all) matches one of the current user's usergroups.
| Field | Definition |
|---|---|
| id | Unique identifier |
| session_id | See "Common fields" |
| access_url_id | See "Common fields" |
| usergroup_id | References usergroup.id; the usergroup allowed to see the session in the catalogue on this portal (CatalogueSessionRelAccessUrlRelUsergroup::$usergroup) |
Chat sessions
| Field | Definition |
|---|---|
| id | Unique identifier |
| from_user | References user.id (the user who wrote the message) |
| to_user | References user.id (the user who received the message) |
| message | |
| sent | |
| recd |
Videochat sessions (temporarily deprecated)
| Field | Definition |
|---|---|
| id | Unique identifier |
| from_user | |
| to_user | |
| title | |
| datetime |
See ColorTheme (src/CoreBundle/Entity/ColorTheme.php). Holds a reusable stylesheet/theme definition (a JSON bag of CSS variables); this is the target side of access_url_rel_color_theme, which links a theme to one or more portals via ColorTheme::$urls (AccessUrlRelColorTheme::$colorTheme).
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | |
| variables | JSON map of theme/CSS variables (ColorTheme::$variables) |
| slug | Auto-generated from title (Gedmo slug) |
| created_at | See "Common fields" |
| updated_at | See "Common fields" |
Attendance/participation event log for a conference_meeting (join/leave times, per-participant metrics, optional attendance-sign signature), fed by the videoconference provider's webhook. See ConferenceActivity (src/CoreBundle/Entity/ConferenceActivity.php), written via VideoConferenceCallbackController.
| Field | Definition |
|---|---|
| id | Unique identifier |
| meeting_id | References conference_meeting.id, the meeting this activity belongs to (ConferenceActivity::$meeting) |
| participant_id | References user.id, the participating user (ConferenceActivity::$participant) |
| in_at | |
| out_at | |
| close | |
| type | |
| event | |
| activity_data | |
| signature_file | |
| signed_at | |
| metrics | Per-participant analytics for the meeting, stored as JSON (dot-path accessors in ConferenceActivity) |
A video conference room (BigBlueButton or another supported provider) created for a course, optionally scoped to a session or course group, storing connection info, moderation state and passwords. See ConferenceMeeting (src/CoreBundle/Entity/ConferenceMeeting.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| access_url_id | See "Common fields" |
| group_id | References c_group_info.iid, the course group this meeting is scoped to (ConferenceMeeting::$group) |
| user_id | See "Common fields" |
| calendar_id | Optional identifier of a related calendar event, set from the provider's callback payload; not a formal FK column |
| service_provider | Name of the videoconference provider (e.g. bbb) |
| remote_id | Identifier of the meeting on the provider's side |
| internal_meeting_id | |
| title | |
| attendee_pw | |
| moderator_pw | |
| record | |
| status | |
| welcome_msg | |
| visibility | |
| voice_bridge | |
| video_url | |
| has_video_m4v | |
| created_at | |
| closed_at | |
| meeting_list_item | |
| meeting_info_get | |
| sign_attendance | |
| reason_to_sign_attendance | |
| account_email | |
| webinar_schema |
A recorded video/format entry produced for a conference_meeting. See ConferenceRecording (src/CoreBundle/Entity/ConferenceRecording.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| meeting_id | References conference_meeting.id, the meeting this recording belongs to (ConferenceRecording::$meeting) |
| format_type | |
| resource_url |
See ContactCategory (src/CoreBundle/Entity/ContactCategory.php). Category options offered in the public "contact us" form (ContactType, ContactCategoryController); each category carries the destination email address the message is sent to when that category is selected.
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | |
| Destination address for messages submitted under this category |
Courses
| Field | Definition |
|---|---|
| id | Unique identified (referenced by c_id everywhere else) |
| resource_node_id | A 1 to 1 reference to resource_node |
| room_id | not yet used |
| title | |
| code | |
| visual_code | |
| directory | |
| course_language | |
| description | |
| introduction | Extended course description/marketing text shown in the course catalogue, in addition to the shorter description
|
| visibility | |
| show_score | |
| tutor_name | |
| department_name | |
| department_url | |
| video_url | Promotional video URL shown in the course catalogue entry |
| sticky | Whether the course is pinned/featured at the top of the course catalogue (special courses) |
| disk_quota | |
| last_visit | |
| last_edit | |
| creation_date | |
| expiration_date | |
| subscribe | |
| unsubscribe | |
| registration_code | |
| legal | |
| activate_legal | 0 if no particular legal terms. 1 to enable legal terms confirmation |
| add_teachers_to_sessions_courses | |
| course_type_id | References course_type.id. Stored as a plain scalar column (Course::$courseTypeId), not a Doctrine association |
| duration | Estimated course duration, in seconds, shown (converted to hours) in the course catalogue |
| popularity | View/enrollment counter used to rank courses in the course catalogue |
Courses categories
| Field | Definition |
|---|---|
| id | Unique identifier |
| parent_id | References course_category.id (self-reference), the parent category (CourseCategory::$parent); plain adjacency-list hierarchy, not a Gedmo nested-set tree — ordering uses the separate tree_pos column instead of lft/rgt/lvl
|
| asset_id | References asset.id (CourseCategory::$asset), the category's icon/illustration image |
| title | |
| code | |
| tree_pos | |
| children_count | |
| auth_course_child | |
| auth_cat_child | |
| description |
Join table backing the many-to-many relation between course and course_category (Course::$categories, #[ORM\JoinTable(name: 'course_rel_category')] in src/CoreBundle/Entity/Course.php, inverse side CourseCategory::$courses). This is a newer, multi-valued categorization mechanism that coexists with the legacy single-value course.category_code string field — a course can belong to several course_category rows here in addition to (or instead of) its legacy category_code.
| Field | Definition |
|---|---|
| course_id | See "Common fields" |
| course_category_id | References course_category.id (Course::$categories) |
Relationship between course and usergroup
| Field | Definition |
|---|---|
| course_code | FK to course.code! (to be changed to id in the future) |
| class_id | References usergroup.id (a "class" in Chamilo is a usergroup row). Stored as a plain scalar column (CourseRelClass::$classId) — no Doctrine association exists for this field |
Subscription of users to courses (if not using sessions)
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| c_id | See "Common fields" |
| relation_type | |
| status | |
| is_tutor | |
| sort | |
| user_course_cat | |
| legal_agreement | |
| progress | User's progress (0-100) in the course |
Special accesses to catalogue by specific users
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| c_id | See "Common fields" |
| visible |
Requests for courses by users (if the course requests feature is enabled)
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| code | |
| course_language | |
| title | |
| description | |
| category_code | |
| tutor_name | |
| visual_code | |
| request_date | |
| objetives | (note the spelling mistake here) |
| target_audience | |
| status | |
| info | |
| exemplary_content |
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | |
| translation_var | |
| description | |
| props |
Standard audit-trail table from the Gedmo Loggable Doctrine extension (bundled via stof/doctrine-extensions-bundle), meant to record property-level changes on any entity marked #[Gedmo\Loggable]. No entity in the codebase currently carries that attribute, and config/packages/stof_doctrine_extensions.yaml does not enable loggable (only tree, timestampable, sluggable, softdeleteable, sortable, translatable are on), so this table is provisioned but currently unused/vestigial.
| Field | Definition |
|---|---|
| id | Unique identifier |
| action | Loggable action type (create, update, remove) |
| logged_at | |
| object_id | ID of the logged entity instance |
| object_class | Fully-qualified class name of the logged entity |
| version | Sequential version number in this entity instance's log history |
| data | Serialized array of the changed field values |
| username | Username of the user who made the change |
Per-locale field-value store from the Gedmo Translatable Doctrine extension (stof/doctrine-extensions-bundle), enabled via translatable: true in config/packages/stof_doctrine_extensions.yaml. Actively used by the three entities implementing Gedmo\Translatable\Translatable: Skill (src/CoreBundle/Entity/Skill.php), ExtraField (src/CoreBundle/Entity/ExtraField.php) and ExtraFieldOptions (src/CoreBundle/Entity/ExtraFieldOptions.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| locale | |
| object_class | Fully-qualified class name of the translated entity |
| field | Name of the translated property on that entity |
| foreign_key | ID of the translated entity instance |
| content | The translated value for field in locale
|
Extra fields definition. Also defines which type of resource it applies to (users, courses, quizzes, etc)
| Field | Definition |
|---|---|
| id | Unique identifier |
| item_type | |
| value_type | |
| variable | |
| description | |
| display_text | |
| helper_text | |
| default_value | |
| field_order | |
| visible_to_self | |
| visible_to_others | |
| changeable | |
| filter | |
| created_at | |
| auto_remove | 1 if this field's values should be automatically deleted when the user is anonymized (UserAnonymizationHelper) |
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| field_option_id | References extra_field_options.id — the option value that, when selected, drives this dependency rule (ExtraFieldOptionRelFieldOption::$extraFieldOption) |
| related_field_option_id | References extra_field_options.id — the dependent option value to show/enable when field_option_id is selected (ExtraFieldOptionRelFieldOption::$relatedFieldOption) |
| role_id | Not a foreign key to a database table; stores a legacy user-role constant (e.g. STUDENT, COURSEMANAGER) scoping which role this option-dependency rule applies to (ExtraFieldOptionRelFieldOption::$roleId) |
| field_id | References extra_field.id (ExtraFieldOptionRelFieldOption::$field) |
Possible values for extra_field_values
| Field | Definition |
|---|---|
| id | Unique identifier |
| field_id | References extra_field.id (ExtraFieldOptions::$field) |
| option_value | |
| display_text | |
| priority | |
| priority_message | |
| option_order |
Tags on extra fields
| Field | Definition |
|---|---|
| id | Unique identifier |
| field_id | References extra_field.id (ExtraFieldRelTag::$field) |
| tag_id | References tag.id (ExtraFieldRelTag::$tag) |
| item_id | ID of the tagged item — polymorphic, depends on the field's extra_field.extra_field_type (e.g. user.id, course.id), not a fixed FK (ExtraFieldRelTag::$itemId) |
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| field_id | References extra_field.id (ExtraFieldSavedSearch::$field) |
| user_id | See "Common fields" |
| value | |
| created_at | |
| updated_at |
Values stored for specific resources in specific extra fields
| Field | Definition |
|---|---|
| id | Unique identifier |
| field_id | References extra_field.id (ExtraFieldValues::$field) |
| asset_id | References asset.id, allows the value to be an uploaded asset/file instead of plain text (ExtraFieldValues::$asset) |
| field_value | |
| item_id | ID of the resource this value is attached to — polymorphic, depends on the field's extra_field.item_type (e.g. user.id, course.id), not a fixed FK (ExtraFieldValues::$itemId) |
| comment | |
| created_at | |
| updated_at |
Leftover table from FOSUserBundle's group concept (Chamilo's User entity historically extended FOSUserBundle's base user). It maps to the Group entity (src/CoreBundle/Entity/Group.php) and is still live: User::getRoles() merges each group's roles into its members' Symfony roles, though no #[ApiResource] or admin UI exists to manage groups — only GroupRepository references the entity, so rows can only reach this table via direct DB/fixture/migration work.
| Field | Definition |
|---|---|
| id | Unique identifier |
| code | |
| title | |
| roles | Array of Symfony role strings (e.g. ROLE_...) granted to every member of this group |
Pivot table from FOSUserBundle linking user to fos_group (see Group::$users / User::$groups). Still live — it feeds role computation in User::getRoles() (see fos_group above).
| Field | Definition |
|---|---|
| user_id | See "Common fields" |
| group_id | References fos_group.id
|
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| percentage | |
| title | |
| acronym | |
| grade_model_id | References grade_model.id. Used by GradeComponents::$gradeModel. |
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | |
| description | |
| default_lowest_eval_exclude | |
| default_external_eval | |
| default_external_eval_prefix |
Highest level of the gradebook structure (attributing certificates and skills). Despite the name, this is not a gradebook "category" but rather the list of all gradebooks, which can include sub-gradebooks, but they are still each a fully-functional gradebook.
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| c_id | See "Common fields" |
| parent_id | Recursive reference to gradebook_category.id. Sub-gradebooks reference the main gradebook through this field. |
| session_id | See "Common fields" |
| grade_model_id | Reference to a grade_model.id
|
| document_id | References c_document.iid (the document explaining/describing this gradebook, e.g. for certificate purposes). Used by GradebookCategory::$document. |
| title | |
| description | |
| weight | |
| visible | |
| certif_min_score | |
| locked | |
| default_lowest_eval_exclude | |
| generate_certificates | |
| certificate_validity_period | Number of days the linked certificate remains valid after being awarded. Used by GradebookCategory::$certificateValidityPeriod. |
| is_requirement | Whether this gradebook's completion is a requirement to finish the course (1) or not (0) |
| depends | Serialized (PHP serialize()) list of other gradebook_category.id values this gradebook depends on (prerequisite gradebooks a learner must validate first). Used by GradebookCategory::$depends. |
| minimum_to_validate | Minimum number of assessments required to validate this gradebook, used together with gradebooks_to_validate_in_dependence in the dependency-validation formula. Used by GradebookCategory::$minimumToValidate. |
| gradebooks_to_validate_in_dependence | Minimum number of the gradebooks listed in depends that must already be validated for this gradebook to be considered validated. Used by GradebookCategory::$gradeBooksToValidateInDependence. |
| allow_skills_by_subcategory | Whether skills can be awarded at the sub-category (child gradebook) level (1, default) rather than only on the top-level category (0). Used by GradebookCategory::$allowSkillsBySubcategory. |
Generated certificates
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | References resource_node.id. GradebookCertificate extends AbstractResource and uses the resource node system for file storage. |
| cat_id | References gradebook_category.id. Used by GradebookCertificate::$category. |
| user_id | See "Common fields" |
| score_certificate | |
| created_at | |
| path_certificate | |
| downloaded_at | Timestamp of the last time the certificate was downloaded, if any. Used by GradebookCertificate::$downloadedAt. |
| publish | Whether the certificate is published (visible to the user) or not. Used by GradebookCertificate::$publish. |
Free-text comment on a gradebook_category (the gradebook itself, not an individual result) — despite the column name gradebook_id, the foreign key actually targets gradebook_category. See GradebookComment (src/CoreBundle/Entity/GradebookComment.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| gradebook_id | References gradebook_category.id, the GradebookComment::$gradeBook property |
| comment | |
| created_at | |
| updated_at |
External evaluation scored in the gradebook
| Field | Definition |
|---|---|
| id | Unique identifier |
| c_id | See "Common fields" |
| category_id | References gradebook_category.id. Used by GradebookEvaluation::$category. |
| title | |
| description | |
| created_at | |
| weight | |
| max | |
| visible | |
| type | |
| locked | |
| best_score | Cached best score achieved among users evaluated, a denormalized value kept for performance. Used by GradebookEvaluation::$bestScore. |
| average_score | Cached average score achieved among users evaluated, a denormalized value kept for performance. Used by GradebookEvaluation::$averageScore. |
| score_weight | Cached weighted score value, a denormalized value kept for performance. Used by GradebookEvaluation::$scoreWeight. |
| user_score_list | Cached list of per-user scores (serialized array), a denormalized value kept for performance. Used by GradebookEvaluation::$userScoreList. |
| min_score | Cached minimum score achieved among users evaluated, a denormalized value kept for performance. Used by GradebookEvaluation::$minScore. |
Internal evaluation (Chamilo resources) scored in the gradebook
| Field | Definition |
|---|---|
| id | Unique identifier |
| c_id | See "Common fields" |
| category_id | References gradebook_category.id. Used by GradebookLink::$category. |
| type | |
| ref_id | Polymorphic reference: the target table depends on the sibling type column (plain int column, not a Doctrine-mapped association). Per the legacy LinkFactory::create(): type=1 (LINK_EXERCISE) → c_quiz.iid; type=3 (LINK_STUDENTPUBLICATION) → c_student_publication.iid; type=4 (LINK_LEARNPATH) → c_lp.iid; type=5 (LINK_FORUM_THREAD) → c_forum_thread.iid; type=7 (LINK_ATTENDANCE) → c_attendance.iid; type=8 (LINK_SURVEY) → c_survey.iid; type=9 (LINK_HOTPOTATOES) → c_document.iid. Used by GradebookLink::$refId. |
| created_at | |
| weight | |
| visible | |
| locked | |
| best_score | Cached best score achieved among users evaluated, a denormalized value kept for performance. Used by GradebookLink::$bestScore. |
| average_score | Cached average score achieved among users evaluated, a denormalized value kept for performance. Used by GradebookLink::$averageScore. |
| score_weight | Cached weighted score value, a denormalized value kept for performance. Used by GradebookLink::$scoreWeight. |
| user_score_list | Cached list of per-user scores (serialized array), a denormalized value kept for performance. Used by GradebookLink::$userScoreList. |
| min_score | Cached minimum score achieved among users evaluated, a denormalized value kept for performance. Used by GradebookLink::$minScore. |
...
| Field | Definition |
|---|---|
| id | Unique identified |
| user_id_log | See "Common fields" |
| id_linkeval_log | |
| title | |
| description | |
| weight | |
| visible | |
| type | |
| created_at |
Results of users on gradebook_link or gradebook_evaluation
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| evaluation_id | References gradebook_evaluation.id. Used by GradebookResult::$evaluation. |
| created_at | |
| score |
A scored/commented attempt underlying a single gradebook_result entry, used when a result's score is built from more than one recorded attempt. See GradebookResultAttempt (src/CoreBundle/Entity/GradebookResultAttempt.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| result_id | References gradebook_result.id
|
| comment | |
| score | |
| created_at | |
| updated_at |
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| result_id | References gradebook_result.id. Used by GradebookResultLog::$result. |
| evaluation_id | References gradebook_evaluation.id. Used by GradebookResultLog::$evaluation. |
| user_id | See "Common fields" |
| created_at | |
| score |
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| score | |
| display | |
| category_id | References gradebook_category.id. Used by GradebookScoreDisplay::$category. |
| score_color_percent |
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| category_id | References gradebook_category.id. Used by GradebookScoreLog::$category. |
| user_id | See "Common fields" |
| score | |
| registered_at |
See Illustration (src/CoreBundle/Entity/Illustration.php). Generic image/asset entity in Chamilo's resource-node system: each row is linked 1-to-1 to a resource_node and holds the illustration/cover image for whichever entity that node belongs to. Any entity implementing ResourceIllustrationInterface (e.g. Course, Usergroup, User) can have one attached this way, used for course cover images, usergroup images, and user avatars.
| Field | Definition |
|---|---|
| id | Unique identifier (UUID) |
| resource_node_id | References resource_node.id; the resource node this illustration is attached to (AbstractResource::$resourceNode) |
| title | |
| created_at | See "Common fields" |
| updated_at | See "Common fields" |
Defines a type of supporting document that users may be required to upload (e.g. to remain enrolled in a course), configured by an administrator through the legacy Justification plugin (public/plugin/Justification/). See JustificationDocument (src/CoreBundle/Entity/JustificationDocument.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| code | Unique short code identifying the justification document type |
| name | Display name of the justification document type |
| validity_duration | Number of days an uploaded document remains valid |
| comment | |
| date_manual_on | Flag: whether the validity date is entered manually by the user on upload instead of computed from validity_duration
|
A user's uploaded file for a required justification_document, together with the date until which it is considered valid. See JustificationDocumentRelUsers (src/CoreBundle/Entity/JustificationDocumentRelUsers.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| justification_document_id | References justification_document.id
|
| user_id | See "Common fields" |
| file_path | |
| date_validity | Date until which the uploaded document is considered valid |
The language supported for the user interface, and sublanguages
| Field | Definition |
|---|---|
| id | Unique identifier |
| parent_id | References language.id (self-reference), the parent language for sublanguages/regional variants (Language::$parent); plain adjacency list, not a Gedmo tree |
| original_name | |
| english_name | |
| isocode | |
| available |
Terms and conditions
| Field | Definition |
|---|---|
| id | Unique identifier |
| date | |
| content | |
| type | |
| changes | |
| version | |
| language_id | References language.id
|
Registered external tool ("resource link") that Chamilo can launch as an LTI Platform (Tool Consumer), supporting both LTI 1.0/1.1 (consumer key/shared secret) and LTI Advantage 1.3 (OAuth2/OIDC with client id, JWKS, deep linking, AGS/NRPS). See ExternalTool (src/LtiBundle/Entity/ExternalTool.php), which extends AbstractResource so each tool is also a resource node placeable in a course.
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| gradebook_eval_id | References gradebook_evaluation.id; optional gradebook evaluation this tool's results are reported into, see ExternalTool::$gradebookEval
|
| title | |
| description | |
| public_key | Public key of the tool, used to verify JWTs signed by the tool (LTI Advantage client credentials grant), see LtiTokenRequest::decodeJwt()
|
| launch_url | Tool's launch URL, submitted as the LTI launch form action |
| consumer_key | LTI 1.0/1.1 consumer key |
| shared_secret | LTI 1.0/1.1 shared secret |
| custom_params | Newline-separated key=value custom parameters sent with the launch, see ExternalTool::getCustomParamsAsArray()
|
| active_deep_linking | 1 if the tool is launched as an LTI Deep Linking request instead of a resource link request |
| privacy | Serialized flags controlling whether the user's name/email/picture are shared with the tool, see ExternalTool::setPrivacy()
|
| client_id | LTI Advantage (1.3) OAuth2 client id issued to the tool |
| login_url | LTI Advantage OIDC third-party initiated login URL |
| redirect_url | LTI Advantage OIDC redirect URI the platform is allowed to send the id_token to |
| jwks_url | URL of the tool's JSON Web Key Set, used to verify tool-signed JWTs |
| advantage_services | JSON map of enabled LTI Advantage services (Assignment and Grade Services, Names and Role Provisioning Service), see ExternalTool::getAdvantageServices()
|
| version | LTI protocol version used by the tool (lti1p1 or lti1p3), see ExternalTool::V_1P1/V_1P3
|
| launch_presentation | JSON launch presentation options (e.g. document_target: iframe/window) |
| replacement_params | JSON map of custom parameter substitutions (e.g. replacement value for user_id) |
An LTI Advantage Assignment and Grade Services (AGS) line item — a gradable column exposed to an external tool, backed by one gradebook evaluation. See LineItem (src/LtiBundle/Entity/LineItem.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| tool_id | References lti_external_tool.id; the tool this line item belongs to, see LineItem::$tool
|
| evaluation | References gradebook_evaluation.id; the gradebook evaluation whose scores are exposed/updated through this line item, see LineItem::$evaluation
|
| resource_id | Tool-defined resource identifier for the line item (LTI AGS resourceId) |
| tag | Tool-defined tag for the line item (LTI AGS tag) |
| start_date | |
| end_date |
Chamilo's own LTI Advantage (1.3) platform key pair, used to sign the id_token JWTs issued to external tools during launch. See Platform (src/LtiBundle/Entity/Platform.php); populated on demand via ImsLtiPlugin::ensurePlatformKeys() and read as a singleton row (findOneBy([])) in the OIDC auth endpoint.
| Field | Definition |
|---|---|
| id | Unique identifier |
| public_key | Public half of the platform's RSA key pair, exposed to tools via the JWKS endpoint |
| kid | Key ID included in the JWT header so tools can pick the right JWKS entry |
| private_key | Private half of the platform's RSA key pair, used to sign launch JWTs |
OAuth2 access tokens issued by Chamilo (acting as an LTI Advantage platform) to an external tool under the client-credentials grant, granting the tool scoped access to AGS/NRPS services. See Token (src/LtiBundle/Entity/Token.php), created by LtiTokenRequest::generateToken().
| Field | Definition |
|---|---|
| id | Unique identifier |
| tool_id | References lti_external_tool.id; the tool the token was issued to, see Token::$tool
|
| scope | JSON array of OAuth2 scopes granted to the token (e.g. AGS line item/score scopes) |
| hash | The access token value returned to the tool as the bearer token |
| created_at | Unix timestamp of token issuance |
| expires_at | Unix timestamp of token expiry (created_at + Token::TOKEN_LIFETIME, 3600s) |
...
| Field | Definition |
|---|---|
| id | Unique identifier |
| author_id | References user.id, the user who authored this mail template (MailTemplate::$author) |
| url_id | See "Common fields" |
| title | |
| template | |
| type | |
| default_template | |
| system | |
| created_at | |
| updated_at |
User messages on the social network + all messages sent by the system by e-mail and saved for the local inbox. Recipients are tracked in the message_rel_user table rather than directly on this table.
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_sender_id | References user.id as the sender of the message |
| group_id | References usergroup.id, the group this message was posted to, if any (Message::$group) |
| parent_id | References message.id, the message this one is a reply to, if any (Message::$parent) |
| msg_type | |
| status | |
| send_date | |
| title | |
| content | |
| update_date | |
| votes |
File attachments for message. Note that at this point the
| Field | Definition |
|---|---|
| id | |
| resource_node_id | A 1 to 1 reference to resource_node |
| message_id | References message.id, the message this attachment belongs to (MessageAttachment::$message) |
| path | |
| comment | |
| size | |
| filename |
Per-recipient status of a message — read/unread, starred, soft-deleted, and the recipient role (receiver_type: to, CC, wall post, group, invitation, sender's own outbox copy, etc.) — the modern per-recipient inbox model layered on top of message. See MessageRelUser (src/CoreBundle/Entity/MessageRelUser.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| message_id | References message.id
|
| user_id | See "Common fields" |
| msg_read | |
| receiver_type | |
| starred | |
| deleted_at |
Join table for the many-to-many relation between message_rel_user and message_tag, mapped by the tags property of MessageRelUser (src/CoreBundle/Entity/MessageRelUser.php) — no dedicated entity class backs this table.
| Field | Definition |
|---|---|
| message_rel_user_id | References message_rel_user.id
|
| message_tag_id | References message_tag.id
|
A user-defined label (name, color, sort position) that a user can attach to their own inbox messages via message_rel_user_rel_tags, similar to e-mail labels. See MessageTag (src/CoreBundle/Entity/MessageTag.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| tag | |
| color | |
| position | |
| created_at | |
| updated_at |
...
| Field | Definition |
|---|---|
| id | |
| dest_user_id | See "Common fields" |
| dest_mail | |
| title | |
| content | |
| send_freq | |
| created_at | |
| sent_at |
Definition of a notifiable system event — either account expiration or justification-document expiration, per the event_type constants in NotificationEvent::getEventsForSelect() — that can be scheduled to fire a number of days (day_diff) before/after a reference date. Feeds the notification table. See NotificationEvent (src/CoreBundle/Entity/NotificationEvent.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | |
| content | |
| link | |
| persistent | |
| day_diff | |
| event_type | |
| event_id | References the entity named by event_type (e.g. justification_document.id when the event type is "Justification expiration"); unused for other event types |
Per-user fan-out for a notification_event, recording which users should receive that event's notification. See NotificationEventRelUser (src/CoreBundle/Entity/NotificationEventRelUser.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| event_id | References notification_event.id
|
| user_id | See "Common fields" |
Static CMS content pages that platform admins can build (e.g. homepage/footer/FAQ content), each scoped to an access URL, attributed to a creator, and optionally grouped into a page_category. See Page (src/CoreBundle/Entity/Page.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| access_url_id | See "Common fields" |
| creator_id | References user.id (Page::$creator) |
| category_id | References page_category.id (Page::$category) |
| title | |
| content | HTML body of the page |
| slug | Auto-generated from title (Gedmo slug), used in the page's URL |
| enabled | |
| position | Sort order among the pages of the same category (Gedmo sortable) |
| locale | |
| created_at | |
| updated_at |
Groups page rows for display purposes (e.g. the platform's homepage grid, its footer, its FAQ). Some category titles are treated as reserved by code: PageCategory::ADMIN_BLOCKS_CATEGORIES are hidden from non-admins and PageCategory::ANONYMOUS_CATEGORIES are the only ones shown to unauthenticated visitors (enforced in PageExtension, src/CoreBundle/DataProvider/Extension/PageExtension.php). See PageCategory (src/CoreBundle/Entity/PageCategory.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| creator_id | References user.id (PageCategory::$creator) |
| title | |
| type | Rendering type for the category's pages; the default categories seeded by PageHelper all use grid
|
| created_at | |
| updated_at |
A saved page layout: a JSON block/column arrangement (layout) bound to a specific site url (e.g. /index.php), optionally restricted to a comma-separated list of roles, and optionally started from a page_layout_template. Built and edited from assets/vue/views/pageLayout/Create.vue and Edit.vue. See PageLayout (src/CoreBundle/Entity/PageLayout.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| page_layout_template_id | References page_layout_template.id (PageLayout::$pageLayoutTemplate); the starter template the layout's JSON was initialized from |
| created_by | References user.id (PageLayout::$createdBy) |
| updated_by | References user.id (PageLayout::$updatedBy) |
| url | Site path this layout applies to |
| roles | Optional comma-separated list of roles allowed to see this layout (e.g. ROLE_TEACHER) |
| layout | JSON definition of the page's blocks/columns |
| created_at | |
| updated_at |
A reusable starter layout: a named JSON block/column structure (layout) that can be picked when creating a new page_layout, so its JSON is copied into the new layout instead of starting from scratch. See PageLayoutTemplate (src/CoreBundle/Entity/PageLayoutTemplate.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| name | |
| layout | JSON definition of the template's blocks/columns |
Defines a single granular permission key/action (e.g. user:create) that can be granted to roles through permission_rel_role. This is a newer, finer-grained authorization catalog distinct from the legacy user.status/admin table role model. Managed via /permissions (PermissionsController, src/CoreBundle/Controller/PermissionsController.php). See Permission (src/CoreBundle/Entity/Permission.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | |
| slug | Permission key/action string (e.g. user:create) |
| description |
Many-to-many grant table linking a permission to a role: the presence of a row means that role has been granted that permission through the admin /permissions UI. PermissionHelper::hasPermission() (src/CoreBundle/Helpers/PermissionHelper.php) can query it by permission slug and role codes; it is called via the legacy wrapper api_get_permission() in public/main/inc/lib/api.lib.php, itself invoked as a fallback inside the legacy course-edit permission check — so this RBAC layer is consumed, but only through that legacy api.lib.php permission-fallback path, not through a Symfony security voter or is_granted() check. See PermissionRelRole (src/CoreBundle/Entity/PermissionRelRole.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| permission_id | References permission.id (PermissionRelRole::$permission) |
| role_id | References role.id (PermissionRelRole::$role) |
| changeable | Set to true whenever the grant row is created/kept via the admin UI |
| updated_at |
A file stored by a user in the personal "My Files" tool, linked to its content via resource_node. See PersonalFile (src/CoreBundle/Entity/PersonalFile.php); also the target of copying a CDocument into a user's personal files (CopyDocumentToPersonalFileProcessor).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| comment | |
| created_at | |
| updated_at |
Registry of plugins known to the platform (bundled or third-party), tracking install state and version. Reflected by the Doctrine entity Plugin (src/CoreBundle/Entity/Plugin.php); per-URL activation/configuration lives in access_url_rel_plugin.
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | Plugin machine name (e.g. BuyCourses) |
| installed | 1 if the plugin has run its install routine |
| installed_version | Version string of the currently installed schema/code |
| source |
official or third_party (Plugin::SOURCE_OFFICIAL / SOURCE_THIRD_PARTY) |
Student ePortfolio items (a piece of work, reflection or evidence submitted by a student). See Portfolio (src/CoreBundle/Entity/Portfolio.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| category_id | References portfolio_category.id, the category this item is filed under (Portfolio::$category) |
| duplicated_from | References portfolio.id, the original item this one was duplicated from, e.g. when copied into a session (Portfolio::$duplicatedFrom) |
| title | |
| content | |
| visibility | |
| origin | |
| origin_type | |
| score | |
| is_highlighted | |
| is_template |
Categories used by students to group their own ePortfolio items. See PortfolioCategory (src/CoreBundle/Entity/PortfolioCategory.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| parent_id | References portfolio_category.id, the parent category, for nested categories (PortfolioCategory::$parent) |
| title | |
| description | |
| is_visible |
Comments left on a portfolio item, e.g. by a teacher reviewing a student's work. See PortfolioComment (src/CoreBundle/Entity/PortfolioComment.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| item_id | References portfolio.id, the portfolio item this comment belongs to (PortfolioComment::$item) |
| visibility | |
| content | |
| date | |
| is_important | |
| score | |
| is_template |
Links a portfolio item's course/session context to shared tags. See PortfolioRelTag (src/CoreBundle/Entity/PortfolioRelTag.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| tag_id | References tag.id (PortfolioRelTag::$tag) |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
Promotions are contained in careers and contain sessions.
| Field | Definition |
|---|---|
| id | |
| career_id | References career.id (Promotion::$career) |
| title | |
| description | |
| status | |
| created_at | |
| updated_at |
A per-user Web Push notification subscription (browser endpoint and encryption keys), one row per registered device/browser. See PushSubscription (src/CoreBundle/Entity/PushSubscription.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| endpoint | |
| public_key | |
| auth_token | |
| content_encoding | |
| user_agent | |
| created_at | |
| updated_at |
See ResetPasswordRequest (src/CoreBundle/Entity/ResetPasswordRequest.php). Standard token table from the symfonycasts/reset-password-bundle (via ResetPasswordRequestTrait/ResetPasswordRequestInterface), used by ResetPasswordController to back the "forgot password" flow: a hashed, expiring token is issued per request and matched against a selector when the user clicks the reset link.
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| selector | Public lookup key sent in the reset link, used to find the row without exposing the token |
| hashed_token | Hash of the actual reset token; verified against the token submitted by the user |
| requested_at | Timestamp the reset was requested |
| expires_at | Timestamp after which the request is no longer valid |
Threaded comments attached to a resource node (e.g. a document), stored as a nested set tree so replies can be nested under their parent comment. See ResourceComment (src/CoreBundle/Entity/ResourceComment.php), managed through ResourceCommentType (src/CoreBundle/Form/Type/ResourceCommentType.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | References resource_node.id. Used by ResourceComment::$resourceNode. |
| author_id | References user.id. Used by ResourceComment::$author. |
| parent_id | References resource_comment.id (self-reference). Used by ResourceComment::$parent to nest replies. |
| content | Text of the comment |
| created_at | |
| updated_at | |
| root | Gedmo nested-set root id of the comment tree |
| lvl | Gedmo nested-set depth level |
| lft | Gedmo nested-set left boundary |
| rgt | Gedmo nested-set right boundary |
One physical file (or file variant) attached to a resource node; a node can have several files (e.g. different languages or formats). See ResourceFile (src/CoreBundle/Entity/ResourceFile.php), created via CreateResourceFileAction/AddVariantResourceFileAction (src/CoreBundle/Controller/).
| Field | Definition |
|---|---|
| id | Unique identifier |
| language_id | References language.id. Optional language of this file variant, used by ResourceFile::$language. |
| access_url_id | See "Common fields" |
| resource_node_id | References resource_node.id. Used by ResourceFile::$resourceNode. |
| title | Stored file name (Vich uploader fileNameProperty) |
| mime_type | |
| original_name | Original file name as uploaded by the user |
| dimensions | Width/height pair, for image files |
| size | File size in bytes |
| crop | Crop parameters as width,height,x,y
|
| metadata | Free-form array of extra file metadata |
| description | |
| updated_at | |
| created_at |
Lookup table of resource format variants (e.g. html, txt) that a resource_node can declare, used to distinguish alternative renderings of the same resource. See ResourceFormat (src/CoreBundle/Entity/ResourceFormat.php), seeded by ResourceFormatFixtures.
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | Format name, e.g. html or txt
|
| created_at | |
| updated_at |
Allocates a resource_node to a context (course, session, course group, user group, or individual user) and holds its visibility/ordering within that context; a resource node can have several links, one per context. See ResourceLink (src/CoreBundle/Entity/ResourceLink.php), evaluated by ResourceNodeVoter (src/CoreBundle/Security/Authorization/Voter/ResourceNodeVoter.php) and ResourceAclHelper (src/CoreBundle/Helpers/ResourceAclHelper.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | References resource_node.id. Used by ResourceLink::$resourceNode. |
| parent_id | References resource_link.id (self-reference). Parent link for the document hierarchy within the same context, used by ResourceLink::$parent. |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| usergroup_id | References usergroup.id. Used by ResourceLink::$userGroup. |
| group_id | References c_group_info.iid. Used by ResourceLink::$group (course group). |
| user_id | See "Common fields" |
| visibility | Visibility state: 0 draft, 1 pending, 2 published (ResourceLink::VISIBILITY_*) |
| start_visibility_at | Date from which the resource becomes visible in this context |
| end_visibility_at | Date after which the resource stops being visible in this context |
| display_order | Sort order among sibling links (Gedmo sortable position) |
| resource_type_group | Copy of the resource's resource_type_id, used as the Gedmo sortable group so ordering is scoped per resource type |
| deleted_at | Soft-delete timestamp (Gedmo SoftDeleteable) |
| created_at | |
| updated_at |
The central "essence" table of Chamilo's generic resource system: every resource entity (CDocument, CLp, etc.) points to one resource_node row, which carries the shared title/slug/tree-path/creator/type data common to all resource kinds, while resource_link and resource_file attach the per-context allocation and the actual files. See ResourceNode (src/CoreBundle/Entity/ResourceNode.php), authorized by ResourceNodeVoter (src/CoreBundle/Security/Authorization/Voter/ResourceNodeVoter.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_type_id | References resource_type.id. Used by ResourceNode::$resourceType to identify which tool/kind of resource this node represents. |
| resource_format_id | References resource_format.id. Used by ResourceNode::$resourceFormat. |
| language_id | References language.id. Optional language of the node, used by ResourceNode::$language. |
| creator_id | References user.id. Used by ResourceNode::$creator. |
| parent_id | References resource_node.id (self-reference). Used by ResourceNode::$parent (Gedmo materialized-path tree). |
| title | |
| slug | URL-friendly identifier derived from title (Gedmo Slug) |
| level | Gedmo materialized-path tree depth |
| path | Gedmo materialized-path string, e.g. Root-1/subdir-2/file.txt-3/
|
| created_at | |
| updated_at | |
| public | 1 if the resource is publicly accessible without a specific resource_link grant |
| uuid | Unique UUID for the node, used where an opaque external identifier is needed |
A permission bit-mask granted to a role on a given resource_link, implementing Chamilo's per-context ACL for resources. See ResourceRight (src/CoreBundle/Entity/ResourceRight.php), consumed by ResourceAclHelper::isAllowed() (src/CoreBundle/Helpers/ResourceAclHelper.php) which builds a Laminas ACL from these rows, and edited via ResourceRightType (src/CoreBundle/Form/Type/ResourceRightType.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_link_id | References resource_link.id. Used by ResourceRight::$resourceLink. |
| role | Role this right applies to, e.g. ROLE_CURRENT_COURSE_STUDENT, ROLE_CURRENT_COURSE_TEACHER
|
| mask | Bit-mask of allowed actions (VIEW/CREATE/EDIT/DELETE/EXPORT), built by ResourceAclHelper::getPermissionMask()
|
Free-tagging label that can be attached to resources by their author. See ResourceTag (src/CoreBundle/Entity/Resource/ResourceTag.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| author_id | References user.id. Used by ResourceTag::$author. |
| title | |
| created_at | |
| updated_at |
Lookup table enumerating the kinds of resource that can exist (documents, links, illustrations, etc.), each tied to the Chamilo tool that owns it; resource_node.resource_type_id points here to say what kind of resource a node is. See ResourceType (src/CoreBundle/Entity/ResourceType.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| tool_id | References tool.id. Used by ResourceType::$tool to link the resource type to the Chamilo tool it belongs to. |
| title | Resource type name, e.g. documents, illustrations, courses
|
| created_at | |
| updated_at |
Join table recording which resource_tag a user has applied, implementing free-tagging for users (as opposed to tagging resources directly). See ResourceUserTag (src/CoreBundle/Entity/Resource/ResourceUserTag.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| tag_id | References resource_tag.id. Used by ResourceUserTag::$tag. |
| created_at | |
| updated_at |
Defines a named role for the granular permission system above (code, e.g. STUDENT, TEACHER, ADMIN; a numeric constant_value for ordering; and a system_role flag for the built-in roles seeded by RoleFixtures). This is a separate catalog from Symfony's ROLE_* security roles and from the legacy user.status field, though its codes mirror the same role names. See Role (src/CoreBundle/Entity/Role.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| code | Role code, e.g. STUDENT, TEACHER, ADMIN
|
| constant_value | Numeric ordering/legacy-status value for the role |
| title | |
| description | |
| system_role | Whether this is one of the built-in roles (seeded by RoleFixtures), as opposed to a custom role |
| created_at | |
| created_by | References user.id
|
| updated_at | |
| updated_by | References user.id
|
Rooms are an item for a future feature in Chamilo allowing you to define a physical or virtual room for a synchronous lesson.
| Field | Definition |
|---|---|
| id | |
| branch_id | Reference to branch_sync.id
|
| title | |
| description | |
| geolocation | |
| ip | IP address of the room or virtual room, if any (can be IPv4 or IPv6) |
| ip_mask | IP mask if "ip" is a network address |
| floor_number | Floor on which the room is located |
| capacity | Maximum number of people the room can host |
If the scheduled announcements for sessions are enabled, contains the messages scheduled to be sent at specific dates to session users
| Field | Definition |
|---|---|
| id | |
| subject | |
| message | |
| date | |
| sent | |
| session_id | See "Common fields" |
| c_id | See "Common fields" |
Catalog of indexable "specific search fields" for the Xapian search engine: each row is a single-letter Xapian prefix (code) with a human-readable title. This is the resource-node-based successor to the legacy specific_field table (id, code, name), which served the same purpose for the older course/tool/ref-scoped indexing model. See SearchEngineField (src/CoreBundle/Entity/SearchEngineField.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| code | Single-character Xapian field prefix |
| title |
Stores the value of one search_engine_field for one resource_node, one row per (resource node, field) pair. This is the ResourceNode-based successor to the legacy specific_field_values table, which instead keyed values by course_code + tool_id + ref_id; both ultimately feed indexable metadata into the Xapian search layer (see also the legacy search_engine_ref table, which stores the Xapian document-id mapping rather than field values). See SearchEngineFieldValue (src/CoreBundle/Entity/SearchEngineFieldValue.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | References resource_node.id (SearchEngineFieldValue::$resourceNode) |
| field_id | References search_engine_field.id (SearchEngineFieldValue::$field) |
| value |
Internal data on indexer with Xapian
| Field | Definition |
|---|---|
| id | |
| resource_node_id | References resource_node.id — renamed from the former ref_id_second_level column by migration Version20251205164500, which also dropped course_code, tool_id, c_id, and ref_id_high_level
|
| search_did |
Sequences for course/session access
| Field | Definition |
|---|---|
| id | |
| title | |
| graph | |
| created_at | |
| updated_at |
Conditions for sequence
| Field | Definition |
|---|---|
| id | |
| description | |
| mat_op | |
| param | |
| act_true | |
| act_false |
Formula for sequence
| Field | Definition |
|---|---|
| id | |
| sequence_method_id | References sequence_method.id (SequenceFormula::$method) |
| sequence_variable_id | References sequence_variable.id (SequenceFormula::$variable) |
Method for sequence
| Field | Definition |
|---|---|
| id | |
| description | |
| formula | |
| assign | |
| met_type | |
| act_false |
Method for resource
| Field | Definition |
|---|---|
| id | |
| sequence_id | References sequence.id (SequenceResource::$sequence) |
| type | |
| resource_id | References course.id or session.id depending on type (1=SequenceResource::COURSE_TYPE, 2=SequenceResource::SESSION_TYPE) |
...
| Field | Definition |
|---|---|
| id | |
| sequence_type_entity_id | References sequence_type_entity.id (SequenceRowEntity::$type) |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| row_id | ID of the row referenced in the table named by sequence_type_entity.ent_table — polymorphic, not a fixed FK (SequenceRowEntity::$rowId) |
| title |
Rules for sequence
| Field | Definition |
|---|---|
| id | |
| description |
...
| Field | Definition |
|---|---|
| id | |
| sequence_rule_id | References sequence_rule.id (SequenceRuleCondition::$rule) |
| sequence_condition_id | References sequence_condition.id (SequenceRuleCondition::$condition) |
...
| Field | Definition |
|---|---|
| id | |
| sequence_rule_id | References sequence_rule.id (SequenceRuleMethod::$rule) |
| sequence_method_id | References sequence_method.id (SequenceRuleMethod::$method) |
| method_order |
...
| Field | Definition |
|---|---|
| id | |
| title | |
| description | |
| ent_table |
...
| Field | Definition |
|---|---|
| id | |
| sequence_variable_id | References sequence_variable.id (SequenceValid::$variable) |
| sequence_condition_id | References sequence_condition.id (SequenceValid::$condition) |
...
| Field | Definition |
|---|---|
| id | |
| sequence_row_entity_id | References sequence_row_entity.id (SequenceValue::$entity) |
| user_id | See "Common fields" |
| advance | |
| complete_items | |
| total_items | |
| success | |
| success_date | |
| available | |
| available_start_date | |
| available_end_date |
...
| Field | Definition |
|---|---|
| id | |
| title | |
| description | |
| default_val |
Course sessions definitions
| Field | Definition |
|---|---|
| id | Unique identifier |
| promotion_id | References promotion.id (Session::$promotion) |
| session_category_id | References session_category.id (Session::$category) |
| image_id | References asset.id (Session::$image), the illustration image for the session (was extra field 'image' in 1.11) |
| title | |
| description | |
| show_description | |
| duration | |
| nbr_courses | |
| nbr_users | |
| nbr_classes | |
| visibility | |
| display_start_date | |
| display_end_date | |
| access_start_date | |
| access_end_date | |
| coach_access_start_date | |
| coach_access_end_date | |
| position | Display order used to sort the sessions list (sorted ascending on this column) |
| status | Session status: Session::STATUS_UNKNOWN (0), STATUS_PLANNED (1), STATUS_PROGRESS (2), STATUS_FINISHED (3), STATUS_CANCELLED (4) |
| send_subscription_notification | |
| parent_id | References session.id (self-reference, Session::$parentId); stored as a plain scalar column, not a Doctrine association. The session this one was automatically duplicated from by the app:session-repetition command |
| days_to_reinscription | Number of days, counted from a session's access_end_date, within which the app:session-repetition command may generate the next repeated session (see days_to_new_repetition) |
| last_repetition | Whether this session is the last one in its repetition chain (no further repeated sessions will be generated from it) |
| days_to_new_repetition | Number of days before access_end_date at which the app:session-repetition command considers this session ready to be duplicated into a new one |
| notify_boss | Whether to notify the user's boss/superior (ROLE_STUDENT_BOSS) about this session |
| validity_in_days | Number of days after a user validates all of the session's gradebooks before the app:reinscription-check command automatically re-enrolls them into the next valid repeated session |
Categories of sessions
| Field | Definition |
|---|---|
| id | |
| access_url_id | See "Common fields" |
| title | |
| date_start | |
| date_end |
Relationship between sessions and courses (which courses are contained in which sessions)
| Field | Definition |
|---|---|
| id | |
| session_id | See "Common fields" |
| c_id | See "Common fields" |
| position | |
| nbr_users | |
| room_id | References room.id (SessionRelCourse::$room), the physical/virtual room assigned to this course within the session |
Subscription of users to a course in a session
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| session_id | See "Common fields" |
| c_id | See "Common fields" |
| status | |
| visibility | |
| legal_agreement | |
| progress | User's progress (0-100) in the course, within this session |
Subscription of users in a session. This also contains (if this is the case) information about where the user has been moved to (to another session) if that was the case.
| Field | Definition |
|---|---|
| id | |
| session_id | See "Common fields" |
| user_id | See "Common fields" |
| relation_type | |
| duration | |
| moved_to | |
| moved_status | |
| moved_at | |
| registered_at | |
| collapsed | Whether this session subscription is shown collapsed in the user's session list UI |
| new_subscription_session_id | Plain scalar reference to session.id (SessionRelUser::$newSubscriptionSessionId), set by the app:reinscription-check command to the new session the user was automatically re-enrolled into once they validated all gradebooks of this session; distinct from moved_to, which records a manual move between sessions |
| access_start_date | |
| access_end_date |
Platform settings, one row per (variable, subkey, access_url) combination. This table holds the same data and columns previously documented as settings_current: a migration (PriorityMigrationHelper::renameSettingsTableUp(), src/CoreBundle/Migrations/Schema/V200/PriorityMigrationHelper.php) renames settings_current to settings because the SettingsCurrent entity now maps to the settings table name — it is not a new parallel system, just the current name of the same table. See SettingsCurrent (src/CoreBundle/Entity/SettingsCurrent.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| access_url | References access_url.id (SettingsCurrent::$url) |
| value_template_id | References settings_value_template.id (SettingsCurrent::$valueTemplate); links the setting to a reusable predefined/example value set for its input widget |
| variable | |
| subkey | |
| type | |
| category | |
| selected_value | |
| title | |
| comment | |
| scope | |
| subkeytext | |
| access_url_changeable | |
| access_url_locked |
Platform settings' possible option
| Field | Definition |
|---|---|
| id | |
| variable | |
| value | |
| display_text |
Reusable predefined value templates for settings rows whose value is a JSON structure (menus, extra-field lists, driver lists, etc.), keyed by variable (matching the setting's own variable name). json_example stores the JSON example/skeleton used to seed or validate the setting's value, surfaced by SettingsController::getTemplateExample() (src/CoreBundle/Controller/Admin/SettingsController.php) and populated per-variable by fixtures/migrations (SettingsValueTemplateFixtures). See SettingsValueTemplate (src/CoreBundle/Entity/SettingsValueTemplate.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| variable | Name of the setting this template applies to |
| description | |
| json_example | JSON example/skeleton for the setting's value |
| created_at | |
| updated_at |
Skills
| Field | Definition |
|---|---|
| id | |
| profile_id | References skill_level_profile.id, not skill_profile (Skill::$levelProfile) |
| asset_id | References asset.id (Skill::$asset) |
| title | |
| short_code | |
| description | |
| access_url_id | See "Common fields" |
| icon | |
| criteria | |
| status | |
| updated_at |
Possible levels for a skill
| Field | Definition |
|---|---|
| id | |
| profile_id | References skill_level_profile.id (Level::$profile) |
| title | |
| position | |
| short_title |
Groups the ordered Level rows (skill_level table) that make up one set of achievement levels for skills. See SkillLevelProfile (src/CoreBundle/Entity/SkillLevelProfile.php). Despite the name collision, this is a distinct concept from skill_profile: it is what skill.profile_id and skill_level.profile_id actually reference (via Skill::$levelProfile and Level::$profile), not skill_profile.
| Field | Definition |
|---|---|
| id | Unique identifier |
| title |
Groups of skills levels (level profiles)
| Field | Definition |
|---|---|
| id | |
| title | |
| description |
Attaches a skill to a course (and its session) as a training objective. See SkillRelCourse (src/CoreBundle/Entity/SkillRelCourse.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| skill_id | References skill.id (SkillRelCourse::$skill) |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| created_at | |
| updated_at |
Linking betweek gradebooks (gradebook_category)
| Field | Definition |
|---|---|
| id | |
| gradebook_id | References gradebook_category.id. Used by SkillRelGradebook::$gradeBookCategory. |
| skill_id | Reference to skill.id
|
| type |
Generalizes what a skill can be attached to and obtained through — a course, exercise, learning path, student publication, etc. (any ITEM_TYPE_* constant from api.lib.php) — unlike skill_rel_course, which is course-specific. See SkillRelItem (src/CoreBundle/Entity/SkillRelItem.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| skill_id | References skill.id (SkillRelItem::$skill) |
| item_type | One of the ITEM_TYPE_* constants in api.lib.php (exercise, learning path, student publication, etc.) |
| item_id |
iid of the item referenced by item_type — polymorphic, not a fixed FK |
| obtain_conditions | Free text describing what must be achieved (view, finish, score above X, finish all children skills, etc.) |
| requires_validation | 1 if a teacher must validate the achievement before it is granted |
| is_real | 0 if this is only a children/prerequisite skill used to obtain a higher-level skill, and should never appear directly in a student's portfolio |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| created_by | References user.id
|
| updated_by | References user.id
|
| created_at | |
| updated_at |
Records that a user has achieved a skill through a specific skill_rel_item. See SkillRelItemRelUser (src/CoreBundle/Entity/SkillRelItemRelUser.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| skill_rel_item_id | References skill_rel_item.id (SkillRelItemRelUser::$skillRelItem) |
| user_id | See "Common fields" |
| result_id | ID of the result record achieved through the item (e.g. track_e_exercises.exe_id for an exercise) — polymorphic, depends on the related skill_rel_item's item_type
|
| created_by | References user.id
|
| updated_by | References user.id
|
| created_at | |
| updated_at |
Linking of skill with skill_profile
| Field | Definition |
|---|---|
| id | |
| skill_id | Reference to skill.id
|
| profile_id | References skill_profile.id (SkillRelProfile::$profile) |
Hierarchy of skills between themselves
| Field | Definition |
|---|---|
| id | |
| skill_id | Reference to skill.id
|
| parent_id | References skill.id (self-reference within the skill hierarchy), the parent skill (SkillRelSkill::$parent) |
| relation_type | |
| level |
When a user gets a skill, this table registers it
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| skill_id | Reference to skill.id
|
| course_id | See "Common fields" (course.id) |
| session_id | See "Common fields" |
| acquired_level | |
| acquired_skill_at | |
| validation_status | |
| argumentation | |
| argumentation_author_id | References user.id
|
Users having obtained skills can get feedback from other users. They are stored here.
| Field | Definition |
|---|---|
| id | |
| skill_rel_user_id | References skill_rel_user.id. |
| feedback_giver_id | References user.id. Represents the person giving feedback. |
| feedback_text | |
| feedback_value | |
| feedback_datetime |
A post on a user's social-network wall (distinct from message, which is direct messaging): wall posts, comments on a wall post, and group-wall messages. See SocialPost (src/CoreBundle/Entity/SocialPost.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| sender_id | References user.id, the author of the post (SocialPost::$sender) |
| user_receiver_id | References user.id, the user whose wall the post was made on, if any (SocialPost::$userReceiver) |
| group_receiver_id | References usergroup.id, the group whose wall the post was made on, if any (SocialPost::$groupReceiver) |
| parent_id | References social_post.id, the parent post this one is a comment on, if any (SocialPost::$parent) |
| subject | |
| content | |
| type | |
| status | |
| send_date | |
| updated_at |
File attachments uploaded to a social_post. See SocialPostAttachment (src/CoreBundle/Entity/SocialPostAttachment.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| resource_node_id | A 1 to 1 reference to resource_node |
| social_post_id | References social_post.id (SocialPostAttachment::$socialPost) |
| path | |
| filename | |
| size | |
| sys_insert_user_id | See "Common fields" |
| sys_insert_datetime | |
| sys_lastedit_user_id | See "Common fields" |
| sys_lastedit_datetime |
Likes/dislikes given by users to a social_post, similar in role to message_likes for the message table. See SocialPostFeedback (src/CoreBundle/Entity/SocialPostFeedback.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| social_post_id | References social_post.id (SocialPostFeedback::$socialPost) |
| user_id | See "Common fields" |
| liked | |
| disliked | |
| updated_at |
Global announcements definitions
| Field | Definition |
|---|---|
| id | |
| access_url_id | See "Common fields" |
| career_id | References career.id (SysAnnouncement::$career), restricts the announcement to a specific career, if set |
| promotion_id | References promotion.id (SysAnnouncement::$promotion), restricts the announcement to a specific promotion, if set |
| date_start | |
| date_end | |
| title | |
| content | |
| lang | |
| roles | Array of role strings (e.g. ROLE_USER, ROLE_TEACHER, ROLE_ADMIN) the announcement is targeted to; replaces the former visible_teacher/visible_student/visible_guest boolean flags |
Global document templates
| Field | Definition |
|---|---|
| id | |
| image_id | References asset.id, the illustration image for this template (SystemTemplate::$image) |
| title | |
| comment | |
| content | |
| language | Language code this template is restricted to, used to filter templates when the language.template_activate_language_filter setting is enabled |
Tags can be assigned to extra fields.
| Field | Definition |
|---|---|
| id | |
| tag | |
| field_id | References extra_field.id. |
| count |
...
| Field | Definition |
|---|---|
| id | |
| c_id | References course.id (Templates::$course) |
| user_id | See "Common fields" |
| image_id | References asset.id, the illustration image for this template (Templates::$image) |
| title | |
| description | |
| ref_doc |
Registry of external third-party organizations that Chamilo exchanges personal data with, added for GDPR compliance. See ThirdParty (src/CoreBundle/Entity/ThirdParty.php) and its admin screen ThirdPartyManager.vue.
| Field | Definition |
|---|---|
| id | Unique identifier |
| title | |
| description | |
| address | |
| website | |
| data_exchange_party | 1 if this third party can be selected as the recipient of a third_party_data_exchange
|
| recruiter | 1 if this third party is a recruiter/recruitment agency |
One record of personal data sent to a third_party, kept for GDPR accountability. See ThirdPartyDataExchange (src/CoreBundle/Entity/ThirdPartyDataExchange.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| third_party_id | References third_party.id (ThirdPartyDataExchange::$thirdParty) |
| sent_at | |
| description | |
| all_users | 1 if the data of all platform users was sent, as opposed to a specific selection |
Pivot recording which specific users' data was included in a given third_party_data_exchange (used when that exchange's all_users is 0). See ThirdPartyDataExchangeUser (src/CoreBundle/Entity/ThirdPartyDataExchangeUser.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| third_party_data_exchange_id | References third_party_data_exchange.id (ThirdPartyDataExchangeUser::$dataExchange) |
| user_id | See "Common fields" |
...
| Field | Definition |
|---|---|
| id | |
| ticket_id | References ticket_ticket.id
|
| user_id | See "Common fields" |
| sys_insert_user_id | See "Common fields" |
| assigned_date |
...
| Field | Definition |
|---|---|
| id | |
| project_id | References ticket_project.id
|
| title | |
| description | |
| total_tickets | |
| course_required | |
| sys_insert_user_id | See "Common fields" |
| sys_insert_datetime | |
| sys_lastedit_user_id | See "Common fields" |
| sys_lastedit_datetime |
...
| Field | Definition |
|---|---|
| id | |
| category_id | References ticket_category.id
|
| user_id | See "Common fields" |
...
| Field | Definition |
|---|---|
| id | |
| ticket_id | References ticket_ticket.id
|
| subject | |
| message | |
| status | |
| ip_address | |
| sys_insert_user_id | See "Common fields" |
| sys_insert_datetime | |
| sys_lastedit_user_id | See "Common fields" |
| sys_lastedit_datetime |
...
| Field | Definition |
|---|---|
| id | |
| resource_node_id | A 1 to 1 reference to resource_node |
| ticket_id | References ticket_ticket.id
|
| message_id | References ticket_message.id
|
| path | |
| filename | |
| size | |
| sys_insert_user_id | See "Common fields" |
| sys_insert_datetime | |
| sys_lastedit_user_id | See "Common fields" |
| sys_lastedit_datetime |
...
| Field | Definition |
|---|---|
| id | |
| access_url_id | See "Common fields" |
| title | |
| code | |
| description | |
| color | |
| urgency | |
| sys_insert_user_id | See "Common fields" |
| sys_insert_datetime | |
| sys_lastedit_user_id | See "Common fields" |
| sys_lastedit_datetime |
...
| Field | Definition |
|---|---|
| id | |
| access_url_id | See "Common fields" |
| title | |
| description | |
| other_area | |
| sys_insert_user_id | See "Common fields" |
| sys_insert_datetime | |
| sys_lastedit_user_id | See "Common fields" |
| sys_lastedit_datetime |
Links a ticket_ticket to an additional user (beyond the reporter/assignee) with a flag on whether that user should be notified of ticket updates. See TicketRelUser (src/CoreBundle/Entity/TicketRelUser.php).
| Field | Definition |
|---|---|
| user_id | See "Common fields" |
| ticket_id | References ticket_ticket.id
|
| notify |
...
| Field | Definition |
|---|---|
| id | |
| access_url_id | See "Common fields" |
| code | |
| title | |
| description |
...
| Field | Definition |
|---|---|
| id | |
| project_id | References ticket_project.id
|
| category_id | References ticket_category.id
|
| priority_id | References ticket_priority.id
|
| course_id | See "Common fields" (course.id) |
| session_id | See "Common fields" |
| assigned_last_user | References user.id
|
| status_id | References ticket_status.id
|
| access_url_id | See "Common fields" |
| code | |
| subject | |
| message | |
| personal_email | |
| total_messages | |
| keyword | |
| source | |
| start_date | |
| end_date | |
| sys_insert_user_id | See "Common fields" |
| sys_insert_datetime | |
| sys_lastedit_user_id | See "Common fields" |
| sys_lastedit_datetime | |
| exercise_id | References c_quiz.iid
|
| lp_id | References c_lp.iid
|
Platform-wide catalog of tools (e.g. course tools, admin tools), one row per tool title. It is the entity-backed counterpart to the legacy per-course c_tool table: tool is the global registry referenced by resource_type.tool_id, while c_tool remains the per-course row controlling a tool's visibility/order on a given course's homepage. Populated/kept in sync by ToolChain (src/CoreBundle/Tool/ToolChain.php), which registers a Tool row (and its ResourceTypes) for every tool known to the application. See Tool (src/CoreBundle/Entity/Tool.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| title |
Intended to hold default/global resource-right templates per tool and role (a role + access mask pair, using the same reader/editor masks as resource_right/ResourceNodeVoter). ToolChain::setToolPermissions() (src/CoreBundle/Tool/ToolChain.php) builds ToolResourceRight instances (teacher editor mask, student reader mask) when a course tool is first registered, but the calls that would attach them to the Tool entity and persist them are currently commented out, and Tool has no live collection property for this relation — so the table exists but is not currently populated by that code path. See ToolResourceRight (src/CoreBundle/Entity/ToolResourceRight.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| tool_id | References tool.id (ToolResourceRight::$tool) |
| role | |
| mask | Bitmask of granted rights (see ResourceNodeVoter::getReaderMask() / getEditorMask()) |
Log of all accesses to courses, tools and sessions in the platform. It does not track all actions, though. Only "entering" each course and tool
| Field | Definition |
|---|---|
| access_id | Unique identifier |
| access_user_id | See "Common fields" |
| access_date | |
| c_id | See "Common fields" |
| access_tool | NULL or any English tool name (user, learnpath, quiz, chat, document, forum, link, etc) |
| session_id | See "Common fields" |
| user_ip | IP address |
A more detailed, generalized version of track_e_access: it logs any tool action (not only tool entry) together with the browser, real IP, request URL and "logged in as" context. Populated by Event::registerLog() in public/main/inc/lib/events.lib.php. See TrackEAccessComplete (src/CoreBundle/Entity/TrackEAccessComplete.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| date_reg | |
| tool | Tool name (see access_tool in track_e_access) |
| tool_id | ID of the relevant item within tool — polymorphic, depends on tool
|
| tool_id_detail | Secondary/detail ID within tool — polymorphic, depends on tool
|
| action | Action performed |
| action_details | Additional detail about action
|
| current_id | ID chaining consecutive log entries recorded within the same PHP session (see Session::read('last_id') in events.lib.php) |
| ip_user | IP address |
| user_agent | Browser user agent string |
| session_id | See "Common fields" |
| c_id | See "Common fields" |
| ch_sid | PHP session ID at the time of the action (distinct from session_id, the Chamilo session) |
| login_as | 1 if the action was performed while an admin/teacher was "logged in as" this user |
| info | Free-text additional information |
| url | Request URI at the time of the action |
Log of all attempts (answers to questions) in quizzes (c_quiz). These are sub-elements of track_e_exercises.
| Field | Definition |
|---|---|
| id | Unique identifier of the attempt (of answer to a question) |
| exe_id | References track_e_exercises.exe_id
|
| user_id | See "Common fields" |
| question_id | References c_quiz_question.iid
|
| answer | |
| teacher_comment | |
| marks | Score attributed |
| position | Internal helper to get in which order the questions were answered, so as to present them faster and avoid issues with random question orders. |
| tms | |
| filename | |
| seconds_spent | The number of seconds spent on this answer |
...
| Field | Definition |
|---|---|
| id | |
| attempt_id | References track_e_attempt.id
|
| marks_coeff |
Records a teacher's manual re-qualification (rescoring) of one answer within a track_e_attempt/track_e_exercises attempt. See TrackEAttemptQualify (src/CoreBundle/Entity/TrackEAttemptQualify.php), consumed by ExerciseRuntimeCorrectionProcessor.
| Field | Definition |
|---|---|
| id | Unique identifier |
| exe_id | References track_e_exercises.exe_id (TrackEAttemptQualify::$trackExercise) |
| question_id | References c_quiz_question.iid
|
| marks | New score attributed to the answer |
| insert_date | |
| author | References user.id; the teacher who re-qualified the answer |
| teacher_comment | |
| session_id | See "Common fields" |
| answer |
Logs all login/logout actions to courses. This can be confusing when users open tabs to different courses at the same time.
| Field | Definition |
|---|---|
| course_access_id | unique ID |
| c_id | See "Common fields" |
| user_id | See "Common fields" |
| login_course_date | datetime field for when the user logged in |
| logout_course_date | datetime field for when the user logged out |
| counter | number of actions the user took in this course between login and logout |
| session_id | See "Common fields" |
| user_ip | IP address (v4 or v6) of the user when logged in |
Log of important actions in the system. This can be considered an audit table, as it records actions like user/course/session creations/deletions
| Field | Definition |
|---|---|
| default_id | Unique identifier of this log row (auto-increment primary key), not a foreign key |
| default_user_id | See "Common fields" |
| c_id | See "Common fields" |
| default_date | |
| default_event_type | |
| default_value_type | |
| default_value | |
| session_id | See "Common fields" |
Log of all documents downloads (only logs documents that exist in the c_document table)
| Field | Definition |
|---|---|
| down_id | Unique identifier |
| resource_link_id | References resource_link.id. Identifies the resource-system link (course/session/group context) associated with the downloaded document; replaces the former c_id/down_session_id columns. |
| down_user_id | See "Common fields" |
| down_date | |
| down_doc_path |
Anti-data-loss check recorded when finishing a quiz attempt, only when the exercise.quiz_confirm_saved_answers platform setting is enabled: compares how many questions were presented against how many distinct answers were actually persisted in track_e_attempt, and records whether the user explicitly confirmed the saved-answers count before submitting. See TrackEExerciseConfirmation (src/CoreBundle/Entity/TrackEExerciseConfirmation.php), populated by ExerciseRuntimeFinishProcessor::recordSavedAnswersConfirmation().
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| course_id | See "Common fields" |
| attempt_id | References track_e_exercises.exe_id
|
| quiz_id | References c_quiz.iid
|
| session_id | See "Common fields" |
| confirmed | 1 if the user explicitly confirmed the saved-answers count before submitting |
| questions_count | Number of questions presented in the attempt |
| saved_answers_count | Number of distinct questions actually found answered in track_e_attempt
|
| created_at | |
| updated_at |
Log of all quiz (c_quiz) attempts by a user. For the detail of each answer, check track_e_attempt
| Field | Definition |
|---|---|
| exe_id | Unique identifier |
| exe_user_id | See "Common fields" |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| exe_exo_id | References c_quiz.iid
|
| exe_date | Datetime (UTC) at which the attempt started |
| score | Score obtained by the user |
| max_score | Max score based on the configuration of questions |
| user_ip | IP address |
| status | Current status of the exercise attempt. Can be 'incomplete' or '' if completed. |
| data_tracking | The sequence (separated by semi-columns) of questions to be answered in this attempt. |
| start_date | Datetime (UTC) at which the user entered the intro for the exercise. |
| steps_counter | |
| orig_lp_id | References c_lp.iid if this attempt was held inside a learning path |
| orig_lp_item_id | References c_lp_item.iid if this attempt was held inside a learning path. In this case, the iid is the item that links to c_quiz.iid. |
| exe_duration | Number of seconds the whole exercise attempt lasted |
| expired_time_control | A datetime (UTC) of the time when the exercise is over because the total time allowed has expired. |
| orig_lp_item_view_id | References c_lp_item_view.iid if this attempt was held inside a learning path |
| questions_to_check | If the user has marked some questions for review, this field will contain a semicolumn-separated list of c_quiz_question. iid marked for review |
| blocked_categories | Comma-separated list of c_quiz_question_category.iid values blocked from random selection in this attempt (category-based question exclusion for adaptive quizzes) |
Log of scores at quizzes of type HotPotatoes
| Field | Definition |
|---|---|
| id | |
| title | |
| exe_user_id | See "Common fields" |
| exe_date | |
| c_id | See "Common fields" |
| score | Score obtained |
| max_score | Maximum score achievable |
Log of additional data regarding questions of HotSpot type (questions on images).
| Field | Definition |
|---|---|
| hotspot_id | unique id |
| c_id | See "Common fields" |
| hotspot_user_id | User ID |
| hotspot_exe_id | References c_quiz.iid(?) |
| hotspot_question_id | References c_quiz_question.iid
|
| hotspot_answer_id | References c_quiz_answer.iid
|
| hotspot_correct | |
| hotspot_coordinate |
Log of accesses to tools in courses
| Field | Definition |
|---|---|
| access_id | unique ID |
| access_user_id | See "Common fields" |
| access_date | datetime (in UTC) |
| c_id | See "Common fields" |
| access_tool | name of the tool |
| session_id | See "Common fields" |
Log of accesses to links in the course's links tool (c_link)
| Field | Definition |
|---|---|
| links_id | unique id |
| links_user_id | See "Common fields" |
| links_date | datetime |
| c_id | See "Common fields" |
| links_link_id | iid from c_link (FK) |
| session_id | See "Common fields" |
Log all login and logout actions, with no differentiation of what the user did (see track_e_lastaccess for that)
| Field | Definition |
|---|---|
| login_id | unique ID |
| login_user_id | See "Common fields" |
| login_date | datetime |
| user_ip | IP address (v4 or v6) |
| logout_date | datetime |
Per-attempt supplement to track_e_login: records every login attempt, successful or not, whereas track_e_login only records completed login/logout sessions. Used by LoginFailureSubscriber and LoginSuccessHandler to log both failed and successful authentication attempts. See TrackELoginRecord (src/CoreBundle/Entity/TrackELoginRecord.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| username | Username as submitted at login (not a user_id FK, so failed logins with unknown usernames can still be logged) |
| login_date | |
| user_ip | IP address (v4 or v6) |
| success | 1 if the login attempt succeeded |
Log online presence of users. Used to tell if the user is online by applying a difference to the current datetime
| Field | Definition |
|---|---|
| login_id | unique ID |
| login_user_id | See "Common fields" |
| login_date | datetime |
| user_ip | IP address (v4 or v6) |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| access_url_id | See "Common fields" |
Log uploads
| Field | Definition |
|---|---|
| upload_id | unique ID |
| upload_user_id | See "Common fields" |
| upload_date | datetime |
| c_id | See "Common fields" |
| upload_work_id | References c_student_publication.iid
|
| session_id | See "Common fields" |
Users of the system
| Field | Definition |
|---|---|
| id | Unique ID |
| resource_node_id | A 1 to 1 reference to resource_node |
| username | The username used to login |
| api_token | Personal API access token for this user, used to authenticate API requests without a session |
| firstname | User's firstname |
| lastname | User's lastname |
| website | URL of the user's personal website (profile field) |
| biography | Free-text biography entered by the user (profile field) |
| locale | Interface language locale for this user (replaces the former language column) |
| password | Password (hashed/encrypted following the method defined by $_configuration['password_encryption'] in app/config/configuration.php
|
| username_canonical | a cleaned version of the username |
| timezone | Timezone used to display dates/times to this user |
| email_canonical | a cleaned version of the email |
| the user e-mail | |
| locked | 1 if the user account has been locked from the system |
| expired | 1 if the user account has expired |
| credentials_expired | (not yet used) 1 if the user's credentials have expired |
| credentials_expire_at | (not yet used) expiry datetime for the credentials |
| date_of_birth | User's date of birth (profile field) |
| expires_at | (not used yet) datetime at which the user account expires - see expiration_date field below |
| phone | Phone number |
| address | (not yet used) Address |
| salt | Value used to encrypt the password if the corresponding encryption method requires it |
| gender | User's gender |
| last_login | The datetime of the last login for this user |
| confirmation_token | String used for the password change confirmation |
| password_requested_at | Datetime at which the password regen was requested |
| roles | an internal array with some information. Not really used at this point. |
| profile_completed | 1 if the profile has been completed |
| status | User default role. 1 if the user is a teacher, 5 if the user is a student. Check main/inc/lib/api.lib.php for more roles |
| official_code | Optional code |
| picture_uri | URL of the user picture |
| creator_id | The user ID of the person who created this user |
| competences | Part of portfolio fields |
| diplomas | Part of portfolio fields |
| openarea | Part of portfolio fields |
| teach | Part of portfolio fields |
| productions | Part of portfolio fields |
| expiration_date | Expiration datetime |
| active | 1 if the user account is active, 0 otherwise. An inactive user will not be able to connect to the platform. |
| openid | A token if using early versions of the OpenID implementation in Chamilo |
| theme | Default theme |
| hr_dept_id | deprecated |
| uuid | Unique UUID identifier generated for this user (used internally, distinct from the id primary key) |
| mfa_enabled | 1 if two-factor authentication (MFA) is enabled for this user |
| mfa_service | Name of the MFA service/method used by this user |
| mfa_secret | Secret key used to validate this user's MFA codes |
| mfa_backup_codes | Backup codes the user can use to log in if they lose access to their MFA device |
| mfa_last_used | Datetime this user last authenticated using MFA |
| password_updated_at | Datetime the password was last changed |
| created_at | The datetime of creation of the user account |
| updated_at | The datetime of last update of the user account |
API keys for users (for external systems)
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| api_key | |
| api_service | |
| api_end_point | |
| created_date | |
| validity_start_date | |
| validity_end_date | |
| description |
Records which authentication backend a user is allowed to authenticate through on a given URL (multi-URL setup). Checked by UserAuthSourceListener (src/CoreBundle/EventListener/UserAuthSourceListener.php) on every login attempt to reject a badge/method (LDAP, OAuth2, platform password, etc.) with no matching row here. See UserAuthSource (src/CoreBundle/Entity/UserAuthSource.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| url_id | See "Common fields" |
| user_id | See "Common fields" |
| authentication | One of UserAuthSource's PLATFORM/CAS/LDAP/AZURE/FACEBOOK/KEYCLOAK/OAUTH2 constants |
A user's assigned career path, linking user to career (see "career" above). See UserCareer (src/CoreBundle/Entity/UserCareer.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| career_id | References career.id (UserCareer::$career) |
| extra_data | |
| created_at | |
| updated_at |
Courses categories defined by users in "sort my courses" feature
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| title | |
| sort | |
| collapsed | 1 if this course category is collapsed in the course list display |
Dictionary table for the types of social relation types
| Field | Definition |
|---|---|
| id | |
| title |
Link between users and courses to register user's vote on the course
| Field | Definition |
|---|---|
| id | unique ID |
| c_id | See "Common fields" |
| user_id | See "Common fields" |
| session_id | See "Common fields" |
| url_id | See "Common fields" |
| vote | int value (usually 0-5) |
link between user and tag
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| tag_id | References tag.id (UserRelTag::$tag) |
links between users
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| friend_user_id | See "Common fields" |
| relation_type | |
| created_at | |
| updated_at |
User groups (global groups) (see classes and social groups in the administration)
| Field | Definition |
|---|---|
| id | |
| resource_node_id | A 1 to 1 reference to resource_node |
| title | |
| description | |
| group_type | |
| picture | Path to an image that represents the group. |
| url | A URL linked to this group (external website or so) |
| visibility | |
| author_id | References user.id, the creator of this usergroup (Usergroup::$authorId) |
| allow_members_leave_group | |
| created_at | |
| updated_at |
Link between usergroup and course
| Field | Definition |
|---|---|
| id | |
| usergroup_id | References usergroup.id
|
| course_id | See "Common fields" |
Link between usergroup and c_quiz_question
| Field | Definition |
|---|---|
| id | |
| question_id | References c_quiz_question.iid (UsergroupRelQuestion::$question) |
| usergroup_id | References usergroup.id
|
| coefficient |
Link between usergroup and session
| Field | Definition |
|---|---|
| id | |
| usergroup_id | References usergroup.id
|
| session_id | See "Common fields" |
Link between usergroup and user
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| usergroup_id | References usergroup.id
|
| relation_type |
Link between usergroup and itself
| Field | Definition |
|---|---|
| id | |
| group_id | References usergroup.id
|
| subgroup_id | References usergroup.id
|
| relation_type |
Generic one-time token table used to validate an action on a given resource without requiring a logged-in session — e.g. remember-me re-authentication. Types are defined in ValidationTokenHelper (src/CoreBundle/Helpers/ValidationTokenHelper.php): TYPE_TICKET (1), TYPE_USER (2), TYPE_REMEMBER_ME (3). See ValidationToken (src/CoreBundle/Entity/ValidationToken.php), used by RememberMeSubscriber and SecurityController.
| Field | Definition |
|---|---|
| id | Unique identifier |
| type | One of ValidationTokenHelper's TYPE_TICKET/TYPE_USER/TYPE_REMEMBER_ME constants |
| resource_id | ID of the resource being validated — polymorphic, depends on type (e.g. user.id for TYPE_REMEMBER_ME) |
| hash | Random (or supplied) SHA-256 hex token string |
| created_at |
Infrastructure bookkeeping table for Doctrine Migrations, not application data — tracks which migration versions have been executed. Configured in config/packages/doctrine_migrations.yaml (storage.table_storage).
| Field | Definition |
|---|---|
| version | Unique identifier; the migration class's fully-qualified name |
| executed_at | |
| execution_time | Time (ms) the migration took to run |
Stores the xAPI Activity Profile API's arbitrary JSON documents, keyed by activity and profile ID (used by the LRS to persist per-activity metadata such as shared bookmarks or configuration, independent of any one agent). Mapped by the XApiActivityProfile entity (src/CoreBundle/Entity/XApiActivityProfile.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| profile_id | The xAPI Activity Profile document identifier (profileId query parameter) |
| activity_id | The xAPI Activity IRI the profile document is attached to |
| document_data | The stored profile document, as JSON |
Stores the xAPI State API's arbitrary JSON documents, keyed by activity, agent, and state ID (e.g. suspend-data/bookmarking use cases, analogous to SCORM's suspend_data). Mapped by the XApiActivityState entity (src/CoreBundle/Entity/XApiActivityState.php); read/written via ActivitiesStateController (public/plugin/XApi/src/Lrs/ActivitiesStateController.php) and cleaned up on tool deletion in public/plugin/XApi/tool_delete.php.
| Field | Definition |
|---|---|
| id | Unique identifier |
| state_id | The xAPI State document identifier (stateId query parameter) |
| activity_id | The xAPI Activity IRI the state document is attached to |
| agent | The xAPI Agent (actor) the state document belongs to, as JSON |
| document_data | The stored state document, as JSON |
The xAPI "who" of a statement (an Agent or Group), as defined by the vendored php-xapi ORM repository (Actor.orm.xml, entity XApi\Repository\Doctrine\Mapping\Actor). Not currently referenced by any FK from the columns extracted for this batch; the statement's actor is stored via xapi_object instead (see below).
| Field | Definition |
|---|---|
| identifier | Unique identifier |
| type | Actor type (Agent or Group) |
| mbox | Agent's mailbox URI (mailto: email identifier) |
| mbox_sha1_sum | SHA1 hash of the agent's mailbox, used as an alternate identifier |
| open_id | Agent's OpenID identifier |
| account_name | Agent's account name, part of an inverse functional identifier |
| account_home_page | Agent's account home page, part of an inverse functional identifier |
| name | Agent or group's display name |
Binary/file attachments referenced by an xAPI statement (e.g. certificates, essays). Mapped by the XApiAttachment entity (src/CoreBundle/Entity/XApiAttachment.php) and the vendored php-xapi ORM repository (Attachment.orm.xml).
| Field | Definition |
|---|---|
| identifier | Unique identifier |
| statement_id | References xapi_statement.id; the statement this attachment is attached to |
| usage_type | IRI describing the type/purpose of the attachment |
| content_type | The attachment's MIME content type |
| length | The attachment's size, in bytes |
| sha2 | SHA-2 hash of the attachment content, used to verify integrity |
| display | Human-readable display name of the attachment, as JSON (language map) |
| has_description | 1 if a description is present |
| description | Human-readable description of the attachment, as JSON (language map) |
| file_url | URL where the attachment content can be retrieved, if not stored inline |
| content | The raw attachment content, if stored inline |
The cmi5 course structure tree (course/block/AU items) parsed from an imported cmi5 package, one row per node. Nested-set tree managed by Gedmo (lft/lvl/rgt/root_id/parent_id). Mapped by the XApiCmi5Item entity (src/CoreBundle/Entity/XApiCmi5Item.php); parsed from the package manifest by public/plugin/XApi/src/Parser/Cmi5Parser.php and torn down (including breaking the tree self-references) in public/plugin/XApi/tool_delete.php.
| Field | Definition |
|---|---|
| id | Unique identifier |
| root_id | References xapi_cmi5_item.id; the root node of this item's tree (Gedmo nested-set) |
| parent_id | References xapi_cmi5_item.id; the parent node of this item (Gedmo nested-set) |
| tool_id | References xapi_tool_launch.id; the xAPI/cmi5 tool launch this item's tree belongs to |
| identifier | The cmi5 manifest identifier of the item (block or AU) |
| type | Item type, e.g. course, block, or au (Assignable Unit) |
| title | Item title, as JSON (language map) |
| description | Item description, as JSON (language map) |
| url | Launch URL of the AU, relative to the package |
| activity_type | xAPI Activity type IRI for the item |
| launch_method | cmi5 launch method (AnyWindow or OwnWindow) |
| move_on | cmi5 "moveOn" criterion controlling when the AU is considered complete |
| mastery_score | Minimum score (0-1) required to satisfy the AU, if applicable |
| launch_parameters | Extra query-string parameters appended to the AU launch URL |
| entitlement_key | cmi5 entitlement key used to validate the AU launch session |
| status | Current status of the item |
| lft | Nested-set left value (Gedmo tree) |
| lvl | Nested-set depth level (Gedmo tree) |
| rgt | Nested-set right value (Gedmo tree) |
Contextual information attached to an xAPI statement (registration, instructor, team, platform, language, related context activities, extensions). Mapped by the XApiContext entity (src/CoreBundle/Entity/XApiContext.php) and the vendored php-xapi ORM repository (Context.orm.xml).
| Field | Definition |
|---|---|
| identifier | Unique identifier |
| instructor_id | References xapi_object.identifier; the instructor Agent/Group for this context |
| team_id | References xapi_object.identifier; the team Group for this context |
| extensions_id | References xapi_extensions.identifier; arbitrary extension key/value data for this context |
| registration | UUID of the registration (a specific instance of an actor experiencing an activity) |
| has_context_activities | 1 if related context activities (parent/grouping/category/other) are present |
| revision | Revision of the learning activity associated with the statement |
| platform | Platform used to access the learning activity, when a Group actor is used |
| language | ISO language code in which the experience being recorded occurred |
| statement | The xAPI Statement ID this context's "statement" (StatementRef) property points back to |
Arbitrary key/value extension data attached to an actor/context/result/activity, stored as JSON keyed by extension IRI. Mapped by the XApiExtensions entity (src/CoreBundle/Entity/XApiExtensions.php) and the vendored php-xapi ORM repository (Extensions.orm.xml).
| Field | Definition |
|---|---|
| identifier | Unique identifier |
| extensions | The extension data, as JSON (map of extension IRI to arbitrary value) |
Chamilo-specific audit log of statements processed by the LRS, denormalizing the actor/verb/object/score for reporting without needing to join the full xAPI object graph. Mapped by the XApiInternalLog entity (src/CoreBundle/Entity/XApiInternalLog.php); written by public/plugin/XApi/src/Lrs/Utils/InternalLogUtil.php.
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| statement_id | The xAPI Statement ID this log entry summarizes |
| verb | The statement's verb IRI |
| object_id | The statement object's activity IRI |
| activity_name | Human-readable name of the activity, if available |
| activity_description | Human-readable description of the activity |
| score_scaled | Scaled score (-1 to 1) from the statement's result, if any |
| score_raw | Raw score from the statement's result, if any |
| score_min | Minimum possible score from the statement's result, if any |
| score_max | Maximum possible score from the statement's result, if any |
| created_at | Creation date |
| updated_at | Last update date |
Basic-Auth credential pairs (key/secret) allowing external tools to push xAPI statements into this Chamilo-hosted LRS. Mapped by the XApiLrsAuth entity (src/CoreBundle/Entity/XApiLrsAuth.php); checked by public/plugin/XApi/src/Lrs/LrsRequest.php when authenticating incoming LRS requests.
| Field | Definition |
|---|---|
| id | Unique identifier |
| username | Basic-Auth username (key) issued to the external tool |
| password | Basic-Auth password (secret) issued to the external tool |
| enabled | 1 if these credentials are currently accepted |
| created_at | Creation date |
| updated_at | Last update date |
The xAPI "what" of a statement: an Activity, Agent/Group, StatementRef, or SubStatement, discriminated by the type column. Also reused to store the actor/instructor/team/group Agents referenced elsewhere (context, statement actor/authority). Mapped by the XApiObject entity (src/CoreBundle/Entity/XApiObject.php) and the vendored php-xapi ORM repository (StatementObject.orm.xml, class StatementObject).
| Field | Definition |
|---|---|
| identifier | Unique identifier |
| actor_id | References xapi_object.identifier; the actor of a nested SubStatement |
| verb_id | References xapi_verb.identifier; the verb of a nested SubStatement |
| object_id | References xapi_object.identifier; the object of a nested SubStatement |
| activity_extensions_id | References xapi_extensions.identifier; extension data for an Activity object |
| group_id | References xapi_object.identifier; the Group this Agent is a member of |
| parent_context_id | References xapi_context.identifier; "parent" context activity relation |
| grouping_context_id | References xapi_context.identifier; "grouping" context activity relation |
| category_context_id | References xapi_context.identifier; "category" context activity relation |
| other_context_id | References xapi_context.identifier; "other" context activity relation |
| type | Discriminator: Activity, Agent, Group, StatementRef, or SubStatement
|
| activity_id | The Activity IRI, when type is Activity
|
| has_activity_definition | 1 if an Activity definition (name/description/type) is present |
| has_activity_name | 1 if the Activity definition includes a name |
| activity_name | Activity's human-readable name, as JSON (language map) |
| has_activity_description | 1 if the Activity definition includes a description |
| activity_description | Activity's human-readable description, as JSON (language map) |
| activity_type | Activity type IRI |
| activity_more_info | URL to more information about the Activity |
| mbox | Agent's mailbox URI (mailto: email identifier) |
| mbox_sha1_sum | SHA1 hash of the agent's mailbox, used as an alternate identifier |
| open_id | Agent's OpenID identifier |
| account_name | Agent's account name, part of an inverse functional identifier |
| account_home_page | Agent's account home page, part of an inverse functional identifier |
| name | Agent or group's display name |
| referenced_statement_id | The xAPI Statement ID referenced, when type is StatementRef
|
The result of an xAPI statement: score, success, completion, response, and duration. Mapped by the XApiResult entity (src/CoreBundle/Entity/XApiResult.php) and the vendored php-xapi ORM repository (Result.orm.xml).
| Field | Definition |
|---|---|
| identifier | Unique identifier |
| extensions_id | References xapi_extensions.identifier; extension data for this result |
| has_score | 1 if a score is present |
| scaled | Scaled score (-1 to 1) |
| raw | Raw score |
| min | Minimum possible raw score |
| max | Maximum possible raw score |
| success | 1 if the experience was completed successfully |
| completion | 1 if the experience was completed |
| response | Learner's response to the activity, as a string |
| duration | ISO 8601 duration the actor spent on the activity |
Outbox of xAPI statements queued to be forwarded to an external LRS (e.g. via the cmi5 tool launch's configured lrs_url), decoupling statement capture from delivery. Mapped by the XApiSharedStatement entity (src/CoreBundle/Entity/XApiSharedStatement.php).
| Field | Definition |
|---|---|
| id | Unique identifier |
| uuid | Unique identifier for the shared statement payload, used for de-duplication/tracking |
| statement | The full xAPI statement payload, as JSON |
| sent | 1 if the statement has already been successfully forwarded |
The core xAPI Statement record ("actor verb object", with optional result/context/attachments) — the immutable record of a learning experience. Mapped by the XApiStatement entity (src/CoreBundle/Entity/XApiStatement.php) and the vendored php-xapi ORM repository (Statement.orm.xml, class Statement), which is the primary read/write path used by public/plugin/XApi/src/Lrs/StatementsController.php.
| Field | Definition |
|---|---|
| id | Unique identifier (the xAPI Statement UUID, not an auto-increment integer) |
| actor_id | References xapi_object.identifier; the statement's actor (who) |
| verb_id | References xapi_verb.identifier; the statement's verb (did what) |
| object_id | References xapi_object.identifier; the statement's object (what) |
| result_id | References xapi_result.identifier; the statement's result, if any |
| authority_id | References xapi_object.identifier; the Agent/Group asserting the statement is true |
| context_id | References xapi_context.identifier; the statement's context, if any |
| created | Timestamp (Unix epoch) when the statement was created by the actor |
| stored | Timestamp (Unix epoch) when the LRS stored the statement |
| has_attachments | 1 if the statement has one or more attachments |
An xAPI/cmi5 activity configured inside a course (analogous to a SCORM package), holding the launch URL and the LRS connection details to which the launched content will report statements. Mapped by the XApiToolLaunch entity (src/CoreBundle/Entity/XApiToolLaunch.php); referenced from a learning path via a c_lp_item of type TOOL_XAPI (see XApiToolLaunchRepository::wasAddedInLp() / countByCourseAndSession()), and deleted (along with its cmi5 tree and state documents) by public/plugin/XApi/tool_delete.php.
| Field | Definition |
|---|---|
| id | Unique identifier |
| course_id | See "Common fields" |
| session_id | See "Common fields" |
| title | Title of the xAPI/cmi5 activity |
| description | Description of the xAPI/cmi5 activity |
| launch_url | URL used to launch the external content |
| activity_id | xAPI Activity IRI of the launched content |
| activity_type | Activity profile of the launched content, e.g. tincan or cmi5
|
| allow_multiple_attempts | 1 if learners may launch/re-attempt the activity more than once |
| lrs_url | Endpoint URL of the LRS statements are forwarded to |
| lrs_auth_username | Basic-Auth username used when forwarding statements to lrs_url
|
| lrs_auth_password | Basic-Auth password used when forwarding statements to lrs_url
|
| created_at | Creation date |
| updated_at | Last update date |
The xAPI "did what" of a statement (e.g. answered, completed, experienced), identified by an IRI. Mapped by the XApiVerb entity (src/CoreBundle/Entity/XApiVerb.php) and the vendored php-xapi ORM repository (Verb.orm.xml).
| Field | Definition |
|---|---|
| identifier | Unique identifier |
| id | The verb's IRI (e.g. http://adlnet.gov/expapi/verbs/completed) |
| display | Human-readable display name of the verb, as JSON (language map) |
If you wanted to know how many errors have been made in a quiz over a certain period of time, you could proceed this way:
- query track_e_exercices.tms between two dates for the given exe_exo_id (referencing c_quiz.iid)
- link track_e_attempt to track_e_exercices on the exe_id field
- check how many track_e_attempt.marks are = 0 (this is not 100% reliable but will give you a good approximation)
In some cases, you might want to generate an intermediary table with progress results from your students. We did that in a specific case (generating a table called track_x_course_progress) which might be useful to others, so here are the details:
track_x_course_progress
| Field | Definition |
|---|---|
| user_id | Internal ID |
| firstname | |
| lastname | |
| course_id | Internal course/training ID |
| lp_id | Internal lesson (lp) ID |
| lesson_title | Lesson (lp) title |
| progress | Progress the user reached in this lesson (lp) in percentage points |
| first_access | Datetime (YYYY-MM-DD hh:mm:ss) of the first access to the course (not the lesson) |
| last_view | Datetime (YYYY-MM-DD hh:mm:ss) of the last access to the course (not the lesson) |
| seconds_in_lesson | The number of seconds spent by the user in this particular lesson (lp) |
| update_timestamp | A note of when this row was last updated |
Then some indexes might be useful:
- ALTER TABLE track_x_course_progress ADD INDEX idx_txcp_uid (user_id);
- ALTER TABLE track_x_course_progress ADD INDEX idx_txcp_cid (course_id);
- ALTER TABLE track_x_course_progress ADD INDEX idx_txcp_cname (course_name(100));
- ALTER TABLE track_x_course_progress ADD INDEX idx_txcp_lpid (lp_id);
Of course, this table needs to be generated from the raw data (probably once a day to avoid overload), but that is left as an exercise for the reader.
All plugin tables (see plugin documentation) start with plugin_*.
However, not all plugin tables are documented below. These are created/removed on demand during the installation or uninstallation of each plugin.
Stores the single CeCaBank (Spanish bank card gateway) merchant account credentials used by the BuyCourses plugin's TPV CeCaBank payment method.
| Field | Definition |
|---|---|
| id | Unique identifier |
| crypto_key | CeCaBank cryptographic key used to sign requests |
| merchant_id | CeCaBank merchant identifier |
| acquirer_bin | Acquirer BIN code supplied by CeCaBank |
| terminal_id | CeCaBank terminal identifier |
| cypher | Signature/cypher algorithm used |
| exponent | Cypher exponent parameter |
| supported_payment | Supported payment methods code |
| url | CeCaBank gateway endpoint URL |
Single-row configuration table holding the platform's default commission percentage applied to item beneficiaries in plugin_buycourses_item_rel_beneficiary.
| Field | Definition |
|---|---|
| id | Unique identifier |
| commission | Default commission percentage |
Discount coupons that can be redeemed against courses, sessions, services or subscriptions sold through BuyCourses.
| Field | Definition |
|---|---|
| id | Unique identifier |
| code | Coupon code entered by the buyer |
| discount_type | Discount kind: 1 percentage, 2 fixed amount (BuyCoursesPlugin::COUPON_DISCOUNT_TYPE_*) |
| discount_amount | Discount value (percentage or fixed amount depending on discount_type) |
| valid_start | Start of the coupon's validity period |
| valid_end | End of the coupon's validity period |
| delivered | Number of times the coupon has been redeemed |
| active | 1 if the coupon can still be used (BuyCoursesPlugin::COUPON_STATUS_*) |
Restricts a coupon to specific sellable items (courses/sessions), pairing it with the product_type/product_id combination used across BuyCourses (as in plugin_buycourses_item).
| Field | Definition |
|---|---|
| id | Unique identifier |
| coupon_id | References plugin_buycourses_coupon.id
|
| product_type | Product kind: 1 course, 2 session (BuyCoursesPlugin::PRODUCT_TYPE_*) |
| product_id | References course.id or session.id depending on product_type
|
Records which coupon was applied to a completed course/session purchase in plugin_buycourses_sale.
| Field | Definition |
|---|---|
| id | Unique identifier |
| coupon_id | References plugin_buycourses_coupon.id
|
| sale_id | References plugin_buycourses_sale.id
|
Restricts a coupon to specific sellable services defined in plugin_buycourses_services.
| Field | Definition |
|---|---|
| id | Unique identifier |
| coupon_id | References plugin_buycourses_coupon.id
|
| service_id | References plugin_buycourses_services.id
|
Records which coupon was applied to a service purchase in plugin_buycourses_service_sale.
| Field | Definition |
|---|---|
| id | Unique identifier |
| coupon_id | References plugin_buycourses_coupon.id
|
| service_sale_id | References plugin_buycourses_service_sale.id
|
Records which coupon was applied to a subscription purchase in plugin_buycourses_subscription_rel_sale.
| Field | Definition |
|---|---|
| id | Unique identifier |
| coupon_id | References plugin_buycourses_coupon.id
|
| sale_id | References plugin_buycourses_subscription_rel_sale.id
|
Single-row configuration table for the Culqi (Peruvian) payment gateway credentials used by BuyCourses.
| Field | Definition |
|---|---|
| id | Unique identifier |
| commerce_code | Culqi commerce/merchant code |
| api_key | Culqi API secret key |
| integration | Environment: integration/test vs production (BuyCoursesPlugin::CULQI_INTEGRATION_TYPE / CULQI_PRODUCTION_TYPE) |
Catalog of countries, their currency and whether BuyCourses is enabled to sell in that currency/country.
| Field | Definition |
|---|---|
| id | Unique identifier |
| country_code | ISO 3166-1 alpha-2 country code |
| country_name | Country name |
| iso_code | ISO 4217 currency code |
| status | 1 if sales are enabled for this country/currency |
Tracks course enrollments that were frozen (access suspended) because the underlying subscription/service sale lapsed, so access can later be restored without re-enrolling.
| Field | Definition |
|---|---|
| id | Unique identifier |
| course_id | See "Common fields" |
| user_id | See "Common fields" |
| frozen_since | Date/time the enrollment was frozen |
Single-row global configuration for the BuyCourses plugin: seller/invoicing identity, tax rules, VAT/geolocation settings and invoice numbering.
| Field | Definition |
|---|---|
| id | Unique identifier |
| terms_and_conditions | Terms and conditions text shown at checkout |
| global_tax_perc | Default tax percentage applied to sales |
| tax_applies_to | Scope the default tax applies to: all, courses only, sessions only, or services only (BuyCoursesPlugin::TAX_APPLIES_TO_*) |
| tax_name | Label of the tax shown to buyers (e.g. "VAT") |
| seller_name | Seller's legal name, printed on invoices |
| seller_id | Seller's tax/company identification number |
| seller_address | Seller's address, printed on invoices |
| seller_country | Seller's country code (ISO 3166-1 alpha-2) |
| seller_postcode | Seller's postal code |
| seller_vat_number | Seller's VAT registration number |
| seller_vat_registered | 1 if the seller is VAT-registered |
| seller_annual_eu_tbe_turnover | Seller's annual EU telecoms/broadcasting/e-service turnover, used for VAT threshold rules |
| vat_geoip_provider | GeoIP provider used to determine buyer location for VAT purposes |
| vat_maxmind_account_id | MaxMind GeoIP2 account ID (when vat_geoip_provider is MaxMind) |
| vat_maxmind_license_key | MaxMind GeoIP2 license key |
| seller_email | Seller's contact email, printed on invoices |
| next_number_invoice | Next sequential invoice number to assign |
| invoice_series | Invoice numbering series/prefix |
| sale_email | Email address notified on new sales |
| info_email_extra | Extra text appended to sale/service notification emails |
One invoice record per sale, shared between course/session sales (plugin_buycourses_sale) and service sales (plugin_buycourses_service_sale), disambiguated by is_service.
| Field | Definition |
|---|---|
| id | Unique identifier |
| sale_id | References plugin_buycourses_sale.id if is_service is 0, otherwise plugin_buycourses_service_sale.id
|
| is_service | 1 if sale_id points to a service sale rather than a course/session sale |
| num_invoice | Sequential invoice number within year/serie
|
| year | Invoice year |
| serie | Invoice numbering series |
| date_invoice | Date the invoice was issued |
A sellable catalog entry: a course or session offered for sale, with its price and currency. Referenced by plugin_buycourses_item_rel_beneficiary for commission split.
| Field | Definition |
|---|---|
| id | Unique identifier |
| currency_id | References plugin_buycourses_currency.id
|
| product_type | Product kind: 1 course, 2 session (BuyCoursesPlugin::PRODUCT_TYPE_*) |
| product_id | References course.id or session.id depending on product_type
|
| price | Sale price |
| tax_perc | Tax percentage applied to this item |
Defines the users who receive a commission when an item (plugin_buycourses_item) is sold, and their commission percentage.
| Field | Definition |
|---|---|
| id | Unique identifier |
| item_id | References plugin_buycourses_item.id
|
| user_id | See "Common fields" |
| commissions | Commission percentage granted to this beneficiary |
Single-row configuration table for the platform's PayPal merchant credentials used by BuyCourses.
| Field | Definition |
|---|---|
| id | Unique identifier |
| username | PayPal API username |
| password | PayPal API password |
| signature | PayPal API signature |
| sandbox | 1 if using the PayPal sandbox (test) environment |
Tracks commission payouts made to beneficiaries (via PayPal) for a given sale.
| Field | Definition |
|---|---|
| id | Unique identifier |
| date | Date the payout record was created |
| payout_date | Date the payout was actually executed |
| sale_id | References plugin_buycourses_sale.id
|
| user_id | See "Common fields" |
| commission | Commission amount paid out |
| status | Payout status: pending, completed or canceled (BuyCoursesPlugin::PAYOUT_STATUS_*) |
A completed or pending purchase of a course or session, including buyer, pricing, tax and VAT/invoicing details for the transaction.
| Field | Definition |
|---|---|
| id | Unique identifier |
| currency_id | References plugin_buycourses_currency.id
|
| reference | Unique transaction reference shown to the buyer and gateway |
| date | Date/time of the sale |
| user_id | See "Common fields" |
| product_type | Product kind: 1 course, 2 session (BuyCoursesPlugin::PRODUCT_TYPE_*) |
| product_name | Snapshot of the course/session name at time of sale |
| product_id | References course.id or session.id depending on product_type
|
| price | Final price charged (tax included) |
| price_without_tax | Price before tax |
| tax_perc | Tax percentage applied |
| tax_amount | Tax amount charged |
| status | Sale status: canceled, pending or completed (BuyCoursesPlugin::SALE_STATUS_*) |
| payment_type | Payment gateway used (BuyCoursesPlugin::PAYMENT_TYPE_*: PayPal, transfer, Culqi, TPV Redsys, Stripe, TPV CeCaBank) |
| invoice | 1 if an invoice has been generated for this sale |
| price_without_discount | Price before any coupon discount |
| discount_amount | Amount deducted by an applied coupon |
| buyer_country | Buyer's declared country (ISO 3166-1 alpha-2) |
| buyer_postcode | Buyer's postal code |
| buyer_ip | Buyer's IP address at time of purchase |
| buyer_ip_country | Country resolved from the buyer's IP via GeoIP |
| buyer_vat_number | Buyer's VAT number (for business buyers) |
| buyer_vat_valid | 1 if the VAT number passed VIES validation |
| buyer_business_name | Buyer's business/company name |
| buyer_business_address | Buyer's business address |
| vat_treatment | VAT treatment applied to this sale (e.g. reverse charge, standard) |
| vat_rate | VAT rate applied |
| vat_evidence_json | Evidence collected to justify the VAT treatment (JSON) |
| buyer_type | Buyer type: individual or business
|
| invoice_requested | 1 if the buyer explicitly requested an invoice |
| gateway_transaction_id | Transaction identifier returned by the payment gateway |
Maps a service (plugin_buycourses_services) to a platform extra field it grants/adjusts on purchase (e.g. max courses, hosting quota), with the value to grant.
| Field | Definition |
|---|---|
| service_id | References plugin_buycourses_services.id
|
| extra_field_id | References extra_field.id
|
| granted_value | Value assigned to the extra field when the service is purchased |
A purchase of a service (plugin_buycourses_services), covering one-off and recurring/subscription charges, with buyer, pricing, tax/VAT, recurring-payment gateway state, and upgrade tracking.
| Field | Definition |
|---|---|
| id | Unique identifier |
| service_id | References plugin_buycourses_services.id
|
| reference | Unique transaction reference shown to the buyer and gateway |
| currency_id | References plugin_buycourses_currency.id
|
| price | Final price charged (tax included) |
| price_without_tax | Price before tax |
| tax_perc | Tax percentage applied |
| tax_amount | Tax amount charged |
| node_type | Entity kind the service applies to: none, user, course, session, subscription package or LP final item (BuyCoursesPlugin::SERVICE_TYPE_*) |
| node_id | References user.id, course.id or session.id depending on node_type
|
| buyer_id | See "Common fields" (buyer's user.id) |
| buy_date | Date/time of purchase |
| date_start | Date the granted service period starts |
| date_end | Date the granted service period ends |
| status | Sale status: cancelled, pending or completed (BuyCoursesPlugin::SERVICE_STATUS_*) |
| trial | 1 if this charge is part of a trial period |
| payment_type | Payment gateway used (BuyCoursesPlugin::PAYMENT_TYPE_*) |
| recurring_payment | Recurring state: disabled, enabled, suspended or cancelled (BuyCoursesPlugin::SERVICE_RECURRING_PAYMENT_*) |
| recurring_profile_id | Recurring billing profile/subscription ID at the gateway |
| next_charge_date | Date the next recurring charge is due |
| cancelled_at | Date/time the recurring subscription was cancelled |
| recurring_gateway | Name of the gateway managing the recurring billing |
| gateway_customer_id | Customer identifier at the payment gateway |
| gateway_checkout_session_id | Checkout session identifier at the payment gateway |
| gateway_subscription_id | Subscription identifier at the payment gateway |
| gateway_last_event_id | Last webhook event ID processed for this sale, used for idempotency |
| buyer_country | Buyer's declared country (ISO 3166-1 alpha-2) |
| buyer_postcode | Buyer's postal code |
| buyer_ip | Buyer's IP address at time of purchase |
| buyer_ip_country | Country resolved from the buyer's IP via GeoIP |
| buyer_vat_number | Buyer's VAT number (for business buyers) |
| buyer_vat_valid | 1 if the VAT number passed VIES validation |
| buyer_business_name | Buyer's business/company name |
| buyer_business_address | Buyer's business address |
| vat_treatment | VAT treatment applied to this sale |
| vat_rate | VAT rate applied |
| vat_evidence_json | Evidence collected to justify the VAT treatment (JSON) |
| invoice | 1 if an invoice has been generated for this sale |
| price_without_discount | Price before any coupon discount |
| discount_amount | Amount deducted by an applied coupon |
| buyer_type | Buyer type: individual or business
|
| invoice_requested | 1 if the buyer explicitly requested an invoice |
| gateway_transaction_id | Transaction identifier returned by the payment gateway |
Catalog of sellable services (e.g. subscription packages, certificate templates, extra quotas) that can be purchased independently of a specific course/session.
| Field | Definition |
|---|---|
| id | Unique identifier |
| name | Service name shown to buyers |
| description | Service description shown to buyers |
| price | Base price |
| duration_days | Number of days of access granted per charge |
| renewable | 1 if the service auto-renews |
| total_charges | Maximum number of recurring charges (0 = unlimited) |
| allow_trial | 1 if a trial period is offered |
| trial_period | Trial period unit (e.g. day/week/month) |
| trial_frequency | Length of the trial period in trial_period units |
| trial_total_charges | Number of charges included in the trial |
| max_subscribers | Maximum number of concurrent subscribers allowed (0 = unlimited) |
| subscription_behavior_json | Configuration of renewal/upgrade behavior (JSON) |
| stripe_price_id | Corresponding Stripe Price object ID |
| display_on_course_creation_page | 1 if offered to teachers on the course-creation page |
| applies_to | Entity kind the service applies to (BuyCoursesPlugin::SERVICE_TYPE_*) |
| owner_id | References user.id; the teacher/admin who created the service |
| visibility | Visibility level of the service in the catalog |
| video_url | Promotional video URL |
| image | Illustration image filename |
| service_information | Extended service information/marketing text |
| tax_perc | Tax percentage applied to this service |
| ai_course_features_json | AI course-creation features granted by this service (JSON) |
Single-row configuration table for the platform's Stripe account credentials used by BuyCourses.
| Field | Definition |
|---|---|
| id | Unique identifier |
| account_id | Stripe account identifier |
| secret_key | Stripe API secret key |
| endpoint_secret | Stripe webhook endpoint signing secret |
Price list for subscription-based (recurring) access to a course or session, keyed by product and duration.
| Field | Definition |
|---|---|
| product_type | Product kind: 1 course, 2 session (BuyCoursesPlugin::PRODUCT_TYPE_*); part of the primary key |
| product_id | References course.id or session.id depending on product_type; part of the primary key |
| duration | References plugin_buycourses_subscription_period.duration; part of the primary key |
| currency_id | References plugin_buycourses_currency.id
|
| price | Subscription price for this product/duration |
| tax_perc | Tax percentage applied |
Tracks a subscribed course's lifecycle for a subscription-package buyer: which course was provisioned, its access status, and the audit trail of state changes (created/updated/closed/hidden/deleted).
| Field | Definition |
|---|---|
| id | Unique identifier |
| service_sale_id | References plugin_buycourses_service_sale.id
|
| service_id | References plugin_buycourses_services.id
|
| course_id | See "Common fields" |
| user_id | See "Common fields" |
| status | Course access status within the subscription (e.g. active) |
| context_json | Additional context data for the course creation/access (JSON) |
| created_at | |
| updated_at | |
| closed_at | Date/time the course access was closed |
| hidden_at | Date/time the course was hidden from the subscriber |
| deleted_at | Date/time the course record was soft-deleted |
| last_action | Last lifecycle action applied to this course record |
Lookup of available subscription durations and their display names (e.g. monthly, yearly), referenced by plugin_buycourses_subscription.
| Field | Definition |
|---|---|
| duration | Duration unit value; primary key |
| name | Display name of the duration (e.g. "Monthly") |
A purchase of a recurring subscription (course/session access sold via plugin_buycourses_subscription), with the same buyer/pricing/VAT/invoicing fields as plugin_buycourses_sale plus subscription expiry tracking.
| Field | Definition |
|---|---|
| id | Unique identifier |
| currency_id | References plugin_buycourses_currency.id
|
| reference | Unique transaction reference shown to the buyer and gateway |
| date | Date/time of the sale |
| user_id | See "Common fields" |
| product_type | Product kind: 1 course, 2 session (BuyCoursesPlugin::PRODUCT_TYPE_*) |
| product_name | Snapshot of the course/session name at time of sale |
| product_id | References course.id or session.id depending on product_type
|
| price | Final price charged (tax included) |
| price_without_tax | Price before tax |
| tax_perc | Tax percentage applied |
| tax_amount | Tax amount charged |
| status | Sale status (BuyCoursesPlugin::SALE_STATUS_*) |
| payment_type | Payment gateway used (BuyCoursesPlugin::PAYMENT_TYPE_*) |
| invoice | 1 if an invoice has been generated for this sale |
| price_without_discount | Price before any coupon discount |
| discount_amount | Amount deducted by an applied coupon |
| subscription_end | Date the subscription period ends |
| expired | 1 if the subscription has expired |
| buyer_country | Buyer's declared country (ISO 3166-1 alpha-2) |
| buyer_postcode | Buyer's postal code |
| buyer_ip | Buyer's IP address at time of purchase |
| buyer_ip_country | Country resolved from the buyer's IP via GeoIP |
| buyer_vat_number | Buyer's VAT number (for business buyers) |
| buyer_vat_valid | 1 if the VAT number passed VIES validation |
| buyer_business_name | Buyer's business/company name |
| buyer_business_address | Buyer's business address |
| vat_treatment | VAT treatment applied to this sale |
| vat_rate | VAT rate applied |
| vat_evidence_json | Evidence collected to justify the VAT treatment (JSON) |
| buyer_type | Buyer type: individual or business
|
| invoice_requested | 1 if the buyer explicitly requested an invoice |
| gateway_transaction_id | Transaction identifier returned by the payment gateway |
Single-row configuration table for the TPV Redsys (Spanish bank card gateway) merchant account credentials used by BuyCourses.
| Field | Definition |
|---|---|
| id | Unique identifier |
| merchantcode | Redsys merchant code |
| terminal | Redsys terminal number |
| currency | Redsys numeric currency code |
| kc | Redsys secret signing key |
| url_redsys | Redsys production gateway endpoint URL |
| url_redsys_sandbox | Redsys sandbox (test) gateway endpoint URL |
| sandbox | 1 if using the Redsys sandbox environment |
Bank account details shown to buyers who choose the bank-transfer payment method.
| Field | Definition |
|---|---|
| id | Unique identifier |
| name | Account holder name |
| account | Bank account/IBAN number |
| swift | Bank SWIFT/BIC code |
Stores per-user progress for the CardGame minor/decorative plugin (public/plugin/CardGame/), a daily card-flipping game.
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
| pan | Current "pan" (row/level) reached in the game, capped and displayed via getDisplayPan()
|
| access_date | Date the user last played, used to allow one play per day |
| parts | Serialized state of the game pieces/cards collected so far |
The tables below were documented in earlier versions of this dictionary but no longer exist in the current Chamilo 2.0 database schema (dropped or replaced by a renamed/redesigned table — e.g. settings_current was renamed to settings). They are kept here, alphabetically, purely as historical reference; do not rely on them for current development.
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only.
Contains a list of ID of user that are platform administrators. If a user ID is here, the user is a platform admin (access URLs change that behaviour slightly)
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_id | See "Common fields" |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only.
| Field | Definition |
|---|---|
| id | |
| creator_id | |
| created_at | |
| updated_at | |
| type | |
| max_attendees |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only.
| Field | Definition |
|---|---|
| id | |
| invitation_id | |
| user_id | See "Common fields" |
| created_at | |
| updated_at | |
| type |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Optional table created by manual action documented in configuration.php
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| name | |
| description | |
| created_at | |
| updated_at | |
| position |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. This gathers the definition, visibility and changelog of most learning objects in Chamilo. It is a central piece of the database structure in 1.11
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| to_group_id | See "Common fields". Represents the user group (in a course group) that receives/can see this item, if any. |
| to_user_id | See "Common fields". Represents the user that receives/can see this item, if any. |
| insert_user_id | See "Common fields". Represents the user who created this item. |
| session_id | See "Common fields" |
| id | deprecated |
| tool | a string with the name of the tool (document, link, etc) |
| insert_date | |
| lastedit_date | |
| ref | the iid of the item in its own table |
| lastedit_type | An English string representing the last type of edition (delete, |
| lastedit_user_id | See "Common fields". Represents the user who last edited this file. |
| visibility | |
| start_visible | |
| end_visible |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Access specifications for specific users to specific learning paths categories
| Field | Definition |
|---|---|
| iid | Unique identifier |
| category_id | |
| user_id | See "Common fields" |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| last_connection | |
| user_id | See "Common fields" |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| id | deprecated |
| name | |
| url |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Blog-related user permissions ...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| ... |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Blog-releated user permissions in tasks ...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| ... |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Blog-related user permissions ...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| ... |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| id | deprecated |
| source_type | |
| source_id | |
| resource_type | |
| resource_id |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Blog-related roles
| Field | Definition |
|---|---|
| iid | Unique identifier |
| ... |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Blog-related roles
| Field | Definition |
|---|---|
| iid | Unique identifier |
| ... |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Blog-related roles
| Field | Definition |
|---|---|
| iid | Unique identifier |
| ... |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Blog-related roles
| Field | Definition |
|---|---|
| iid | Unique identifier |
| ... |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| id | deprecated |
| name | |
| description | |
| survey_id |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Deprecated: Values for user fields in courses
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| id | deprecated |
| user_id | See "Common fields" |
| definition_id | |
| editor_ip | |
| edition_time | |
| content |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Deprecated: User fields in courses
| Field | Definition |
|---|---|
| iid | Unique identifier |
| c_id | See "Common fields" |
| id | deprecated |
| title | |
| comment | |
| line_count | |
| rank |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| id | Unique identifier |
| code | |
| name |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Link between classes and users
| Field | Definition |
|---|---|
| class_id | |
| user_id | See "Common fields" |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| id | Unique identifier |
| name | |
| link | |
| image | |
| row | |
| column | |
| position |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| id | Unique identifier |
| message | |
| subject | |
| event_type_name | |
| activated | |
| language_id |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| id | Unique identifier |
| user_from | References user.id. Represents the user who generated the event. |
| user_to | |
| event_type_name |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Internal hooks definition
| Field | Definition |
|---|---|
| id | Unique identifier |
| hook_event_id | |
| hook_observer_id | |
| type | |
| hook_order | |
| enabled |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Internal hooks definition
| Field | Definition |
|---|---|
| id | Unique identifier |
| class_name | |
| description |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Internal hooks definition
| Field | Definition |
|---|---|
| id | Unique identifier |
| class_name | |
| path | |
| plugin_name |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Likes given to messages on the social network
| Field | Definition |
|---|---|
| id | |
| message_id | |
| user_id | See "Common fields" |
| liked | |
| disliked | |
| updated_at |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| id | |
| idp_endpoint_uri | |
| session_type | |
| assoc_handle | |
| assoc_type | |
| expires_in | |
| mac_key | |
| created |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Personal events stored in the agenda
| Field | Definition |
|---|---|
| id | |
| user | Reference to user.id
|
| title | |
| text | |
| date | |
| enddate | |
| course | Course code. Most often NULL as a "personal" event is not linked to a course. |
| parent_event_id | Circular reference to personal_agenda.id to designate the event from which this one was created as a repetition |
| all_day | |
| color |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only.
Repetition on personal_agenda
| Field | Definition |
|---|---|
| cal_id | |
| cal_type | |
| cal_end | |
| cal_frequency | |
| cal_days |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only.
Repetition exclusions on personal_agenda_repeat
| Field | Definition |
|---|---|
| cal_id | |
| cal_date |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Platform settings
| Field | Definition |
|---|---|
| id | |
| variable | |
| subkey | |
| type | |
| category | |
| selected_value | |
| title | |
| comment | |
| scope | |
| subkeytext | |
| access_url | Reference to access_url.id
|
| access_url_changeable | |
| access_url_locked |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| survey_id | Unique identifier |
| code | Survey code (literal) |
| title | |
| subtitle | |
| author | |
| lang | |
| template | |
| intro | |
| surveythanks | |
| creation_date | |
| course_code |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| question_id | |
| survey_id | |
| survey_question | |
| survey_question_comment | |
| type | |
| display | |
| sort | |
| code | |
| max_value |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| question_option_id | |
| question_id | |
| survey_id | |
| option_text | |
| sort |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| id | |
| code | |
| name |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| id | |
| course_code | References course.code. |
| tool_id | |
| ref_id | |
| field_id | |
| value |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Global agenda events (not repetition possible)
| Field | Definition |
|---|---|
| id | |
| title | |
| content | |
| start_date | Datetime |
| end_date | Datetime |
| access_url_id | See "Common fields" |
| all_day | Whether this event happens all day long or just for the given time start and end. |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Ranking based on score voted by users on courses
| Field | Definition |
|---|---|
| id | |
| c_id | See "Common fields" |
| session_id | See "Common fields" |
| url_id | See "Common fields" |
| accesses | |
| total_score | |
| users | |
| creation_date |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. (experimental) Log of historical changes to answers. This is not working properly yet in 1.11.x
| Field | Definition |
|---|---|
| id | Unique identifier |
| exe_id | - |
| question_id | |
| answer | |
| marks | |
| insert_date | |
| author | |
| teacher_comment | |
| session_id | See "Common fields" |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only.
Log of changes in the c_item_property table
| Field | Definition |
|---|---|
| id | Unique ID |
| course_id | See "Common fields" (course.id) |
| item_property_id | ID in the c_item_property table (FK) |
| title | |
| content | |
| progress | |
| lastedit_date | datetime |
| lastedit_user_id | See "Common fields" |
| session_id | See "Common fields" |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. deprecated
| Field | Definition |
|---|---|
| open_id | |
| open_remote_host | |
| open_agent | |
| open_referer | |
| open_date |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. Deprecated
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| sco_id | |
| course_id | See "Common fields" |
| sv_key | |
| sv_value |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. deprecated
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| sco_id | |
| stack_order | |
| course_id | See "Common fields" |
| sv_key | |
| sv_value |
Removed — this table no longer exists in the current Chamilo 2.0 database schema. Kept here for historical reference only. ...
| Field | Definition |
|---|---|
| id | |
| user_id | See "Common fields" |
| event_type_name |
-
Home
- Tools and sessions
- Quiz: Importing
- Releases
- Community
- Development
- Getting started
- Development principles
- Technical design decisions
- Coding conventions v1
- Coding conventions v2
- Add a new Chamilo setting
- Database structure
- Date and time management
- Permissions
- Password management
- Session expiry time
- Code annotation types
- Code quality checkers
- Converting legacy SQL
- Settings migration v1 → v2
- Configurations
- Secure development policy
- Plugin development
- Adding page types
- Design
- Integration
