Merge pull request #5605 from FinnStutzenstein/models
OS4 Models: Add configuration and adopt schema changes in OS3
This commit is contained in:
commit
9d52faaa6d
10
.github/workflows/models.yml
vendored
10
.github/workflows/models.yml
vendored
@ -20,13 +20,3 @@ jobs:
|
|||||||
|
|
||||||
- name: Validate models.yml
|
- name: Validate models.yml
|
||||||
run: $HOME/go/bin/modelsvalidate docs/models.yml
|
run: $HOME/go/bin/modelsvalidate docs/models.yml
|
||||||
|
|
||||||
check-old:
|
|
||||||
name: Check old models.txt
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check out code
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Check MD5 hash of old models.txt
|
|
||||||
run: echo "4dee769da047e0169b5fe1280f3ea2f0 docs/models.txt" | md5sum --check
|
|
||||||
|
@ -62,7 +62,9 @@
|
|||||||
"assignment_option_$_ids": ["1"],
|
"assignment_option_$_ids": ["1"],
|
||||||
"assignment_option_1_ids": [1, 2],
|
"assignment_option_1_ids": [1, 2],
|
||||||
"assignment_vote_$_ids": ["1"],
|
"assignment_vote_$_ids": ["1"],
|
||||||
"assignment_vote_1_ids": [4]
|
"assignment_vote_1_ids": [4],
|
||||||
|
"assignment_delegated_vote_$_ids": ["1"],
|
||||||
|
"assignment_delegated_vote_1_ids": [4]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
@ -202,6 +204,7 @@
|
|||||||
"conference_auto_connect": false,
|
"conference_auto_connect": false,
|
||||||
"conference_los_restriction": false,
|
"conference_los_restriction": false,
|
||||||
"conference_stream_url": "",
|
"conference_stream_url": "",
|
||||||
|
"conference_stream_poster_url": "",
|
||||||
|
|
||||||
"projector_default_countdown_time": 60,
|
"projector_default_countdown_time": 60,
|
||||||
"projector_countdown_warning_time": 0,
|
"projector_countdown_warning_time": 0,
|
||||||
@ -228,7 +231,8 @@
|
|||||||
"list_of_speakers_show_first_contribution": false,
|
"list_of_speakers_show_first_contribution": false,
|
||||||
|
|
||||||
"motions_default_workflow_id": 1,
|
"motions_default_workflow_id": 1,
|
||||||
"motions_statute_amendment_workflow_id": 2,
|
"motions_default_amendment_workflow_id": 1,
|
||||||
|
"motions_default_statute_amendment_workflow_id": 2,
|
||||||
"motions_preamble": "The assembly may decide:",
|
"motions_preamble": "The assembly may decide:",
|
||||||
"motions_default_line_numbering": "none",
|
"motions_default_line_numbering": "none",
|
||||||
"motions_line_length": 90,
|
"motions_line_length": 90,
|
||||||
@ -293,7 +297,7 @@
|
|||||||
"assignment_poll_default_group_ids": [3, 5],
|
"assignment_poll_default_group_ids": [3, 5],
|
||||||
|
|
||||||
"projector_ids": [1, 2],
|
"projector_ids": [1, 2],
|
||||||
"projectiondefault_ids": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
|
"projectiondefault_ids": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
|
||||||
"projector_message_ids": [1],
|
"projector_message_ids": [1],
|
||||||
"projector_countdown_ids": [1],
|
"projector_countdown_ids": [1],
|
||||||
"tag_ids": [1, 2, 3],
|
"tag_ids": [1, 2, 3],
|
||||||
@ -1767,7 +1771,8 @@
|
|||||||
"state_ids": [1, 2, 3, 4],
|
"state_ids": [1, 2, 3, 4],
|
||||||
"first_state_id": 1,
|
"first_state_id": 1,
|
||||||
"default_workflow_meeting_id": 1,
|
"default_workflow_meeting_id": 1,
|
||||||
"default_statute_amendments_meeting_id": null,
|
"default_amendment_workflow_meeting_id": 1,
|
||||||
|
"default_statute_amendment_workflow_meeting_id": null,
|
||||||
"meeting_id": 1
|
"meeting_id": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1777,7 +1782,8 @@
|
|||||||
"state_ids": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
|
"state_ids": [5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
|
||||||
"first_state_id": 5,
|
"first_state_id": 5,
|
||||||
"default_workflow_meeting_id": null,
|
"default_workflow_meeting_id": null,
|
||||||
"default_statute_amendments_meeting_id": 1,
|
"default_amendment_workflow_meeting_id": null,
|
||||||
|
"default_statute_amendment_workflow_meeting_id": 1,
|
||||||
"meeting_id": 1
|
"meeting_id": 1
|
||||||
}],
|
}],
|
||||||
"motion_statute_paragraph": [],
|
"motion_statute_paragraph": [],
|
||||||
@ -1850,6 +1856,7 @@
|
|||||||
"value": "Y",
|
"value": "Y",
|
||||||
|
|
||||||
"user_id": null,
|
"user_id": null,
|
||||||
|
"delegated_user_id": null,
|
||||||
"option_id": 1
|
"option_id": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1858,6 +1865,7 @@
|
|||||||
"value": "N",
|
"value": "N",
|
||||||
|
|
||||||
"user_id": null,
|
"user_id": null,
|
||||||
|
"delegated_user_id": null,
|
||||||
"option_id": 1
|
"option_id": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1866,6 +1874,7 @@
|
|||||||
"value": "A",
|
"value": "A",
|
||||||
|
|
||||||
"user_id": null,
|
"user_id": null,
|
||||||
|
"delegated_user_id": null,
|
||||||
"option_id": 1
|
"option_id": 1
|
||||||
}],
|
}],
|
||||||
"assignment": [
|
"assignment": [
|
||||||
@ -2102,6 +2111,7 @@
|
|||||||
"weight": "3.000000",
|
"weight": "3.000000",
|
||||||
|
|
||||||
"user_id": null,
|
"user_id": null,
|
||||||
|
"delegated_user_id": null,
|
||||||
"option_id": 2
|
"option_id": 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2110,6 +2120,7 @@
|
|||||||
"weight": "2.000000",
|
"weight": "2.000000",
|
||||||
|
|
||||||
"user_id": null,
|
"user_id": null,
|
||||||
|
"delegated_user_id": null,
|
||||||
"option_id": 4
|
"option_id": 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2118,6 +2129,7 @@
|
|||||||
"weight": "7.000000",
|
"weight": "7.000000",
|
||||||
|
|
||||||
"user_id": null,
|
"user_id": null,
|
||||||
|
"delegated_user_id": null,
|
||||||
"option_id": 3
|
"option_id": 3
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2126,6 +2138,7 @@
|
|||||||
"weight": "1.000000",
|
"weight": "1.000000",
|
||||||
|
|
||||||
"user_id": 1,
|
"user_id": 1,
|
||||||
|
"delegated_user_id": 1,
|
||||||
"option_id": 6
|
"option_id": 6
|
||||||
}],
|
}],
|
||||||
"mediafile": [
|
"mediafile": [
|
||||||
@ -2227,7 +2240,7 @@
|
|||||||
"preview_projection_ids": [1, 2],
|
"preview_projection_ids": [1, 2],
|
||||||
"history_projection_ids": [],
|
"history_projection_ids": [],
|
||||||
"used_as_reference_projector_meeting_id": null,
|
"used_as_reference_projector_meeting_id": null,
|
||||||
"projectiondefault_ids": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
|
"projectiondefault_ids": [1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
|
||||||
"meeting_id": 1
|
"meeting_id": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -2396,6 +2409,14 @@
|
|||||||
"name": "motion_poll",
|
"name": "motion_poll",
|
||||||
"display_name": "Motion Poll",
|
"display_name": "Motion Poll",
|
||||||
|
|
||||||
|
"projector_id": 1,
|
||||||
|
"meeting_id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 14,
|
||||||
|
"name": "amendments",
|
||||||
|
"display_name": "Amendments",
|
||||||
|
|
||||||
"projector_id": 1,
|
"projector_id": 1,
|
||||||
"meeting_id": 1
|
"meeting_id": 1
|
||||||
}],
|
}],
|
||||||
|
790
docs/models.txt
790
docs/models.txt
@ -1,790 +0,0 @@
|
|||||||
Types:
|
|
||||||
- nativ datatypes: string, number, boolean, JSON
|
|
||||||
- HTML: string with HTML content
|
|
||||||
- float: numbers that are expected to be non-integer. Formatted as in rfc7159.
|
|
||||||
- decimal(X): Decimal values represented as a string with X decimal places
|
|
||||||
- datetime: Datetime as a unix timestamp. Why a number? This enables queries
|
|
||||||
in the DB. And we do not need more precision than 1 second.
|
|
||||||
Relations:
|
|
||||||
- <collection>/<field>: This is a reference to a collection. The reverse relation
|
|
||||||
field is <field>. E.g. `category_id: motion_category/motion_ids` in a motion links
|
|
||||||
to one category. The reverse field is `motion_ids` which may be `motion_ids:
|
|
||||||
(motion/category_id)[]` indicating, that there are many motion ids.
|
|
||||||
- <T>[]: This indicated multiple ids. For an example see above.
|
|
||||||
- {x,y,z}/<field>: This is a generic relation (analog: `({x,y,z}/<field>)[]` a
|
|
||||||
generic list relation) with fqids as values to the given ollections x, y and z.
|
|
||||||
- If no field is specified, there is no reverse relation.
|
|
||||||
Structured Fields:
|
|
||||||
- There are template fields (see autoupdate service interface) with a `$` as
|
|
||||||
the placeholder. In this document, angle brackets are followed by the
|
|
||||||
dollar sign including the meaning of the template. E.g.
|
|
||||||
group_$<meeting_id>_ids: (group/user_ids)[];
|
|
||||||
says, that the template are meeting ids and each structured field is a
|
|
||||||
multi-relation to groups and the reverse relation field for groups is
|
|
||||||
user_ids.
|
|
||||||
|
|
||||||
Interface organisation {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
description: HTML;
|
|
||||||
|
|
||||||
// Configs
|
|
||||||
legal_notice: string;
|
|
||||||
privacy_policy: string;
|
|
||||||
login_text: string;
|
|
||||||
theme: string;
|
|
||||||
custom_translations: JSON;
|
|
||||||
|
|
||||||
committee_ids: (committee/organisation_id)[];
|
|
||||||
role_ids: (role/organisation_id)[];
|
|
||||||
superadmin_role_id: role/superadmin_role_for_organisation_id;
|
|
||||||
resource_ids: (resource/organisation_id)[];
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface user {
|
|
||||||
id: number;
|
|
||||||
username: string;
|
|
||||||
title: string;
|
|
||||||
first_name: string;
|
|
||||||
last_name: string;
|
|
||||||
is_active: boolean;
|
|
||||||
is_committee: boolean;
|
|
||||||
password: string;
|
|
||||||
default_password: string;
|
|
||||||
about_me: HTML;
|
|
||||||
gender: string;
|
|
||||||
comment: HTML;
|
|
||||||
number: string;
|
|
||||||
structure_level: string;
|
|
||||||
email: string;
|
|
||||||
last_email_send: string;
|
|
||||||
vote_weight: decimal;
|
|
||||||
|
|
||||||
role_id: role/user_ids; // Attention: prevent impelenting a "default-role" or let a
|
|
||||||
// user create such a role! This would cause the user_ids-array for this
|
|
||||||
// role to explode in size. If a user has no role, it should be handles as
|
|
||||||
// the user has no permission in the organisation and is a "normal" delegate
|
|
||||||
// there. Just a few users (expected <100) should even get a role and all
|
|
||||||
// other don't.
|
|
||||||
|
|
||||||
// Meeting and committee
|
|
||||||
is_present_in_meeting_ids: (meeting/present_user_ids)[];
|
|
||||||
meeting_id: meeting/temporary_user_ids; // Temporary users
|
|
||||||
guest_meeting_ids: (meeting/guest_ids)[]; // Guests in meetings
|
|
||||||
committee_as_member_ids: (committee/member_ids)[];
|
|
||||||
committee_as_manager_ids: (committee/manager_ids)[];
|
|
||||||
|
|
||||||
// Projection
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
|
|
||||||
// All foreign keys are meeting-specific:
|
|
||||||
// - Keys are smaller (Space is in O(n^2) for n keys
|
|
||||||
// in the relation), so this saves storagespace
|
|
||||||
// - This makes quering things like this possible:
|
|
||||||
// "Give me all groups for User X in Meeting Y" without
|
|
||||||
// the need to get all groups and filter them for the meeting
|
|
||||||
group_$<meeting_id>_ids: (group/user_ids)[];
|
|
||||||
speaker_$<meeting_id>_ids: (speaker/user_id)[];
|
|
||||||
personal_note_$<meeting_id>_ids: (personal_note/user_id)[];
|
|
||||||
supported_motion_$<meeting_id>_ids: (motion/supporter_ids)[];
|
|
||||||
submitted_motion_$<meeting_id>_ids: (motion_submitter/user_id)[];
|
|
||||||
motion_poll_voted_$<meeting_id>_ids: (motion_poll/voted_ids)[];
|
|
||||||
motion_vote_$<meeting_id>_ids: (motion_vote/user_id)[];
|
|
||||||
assignment_candidate_$<meeting_id>_ids: (assignment_candidate/user_id)[];
|
|
||||||
assignment_poll_voted_$<meeting_id>_ids: (assignment_poll/voted_ids)[];
|
|
||||||
assignment_option_$<meeting_id>_ids: (assignment_option/user_id)[];
|
|
||||||
assignment_vote_$<meeting_id>_ids: (assignment_vote/user_id)[];
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface role {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
permissions: string[];
|
|
||||||
|
|
||||||
organisation_id: organisation/role_ids;
|
|
||||||
superadmin_role_for_organisation_id: organisation/superadmin_role_id;
|
|
||||||
user_ids: (user/role_id)[];
|
|
||||||
}
|
|
||||||
|
|
||||||
// New: Resource
|
|
||||||
// Resources are organsation wide "mediafiles", like logos for the organisatio or
|
|
||||||
// organisation-wide fonts. Therefore, no permission checks are done and the user
|
|
||||||
// must not be logged in to retrieve files. A resource has a token, e.g. `web_header`
|
|
||||||
// or `pdf_font_italic`, so the client knowns, where to put the resource.
|
|
||||||
Interface resource {
|
|
||||||
id: number;
|
|
||||||
token: string;
|
|
||||||
filesize: number;
|
|
||||||
mimetype: string;
|
|
||||||
|
|
||||||
organisation_id: organisation/resource_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface committee {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
description: HTML;
|
|
||||||
|
|
||||||
meeting_ids: (meeting/committee_id)[];
|
|
||||||
template_meeting_id: meeting/template_for_committee_id;
|
|
||||||
default_meeting_id: meeting/default_meeting_for_committee_id;
|
|
||||||
member_ids: (user/committee_as_memeber_ids)[];
|
|
||||||
manager_ids: (user/committee_as_manager_ids)[];
|
|
||||||
forward_to_committee_ids: (committee/receive_forwardings_from_committee_ids)[];
|
|
||||||
receive_forwardings_from_committee_ids: (committee/forward_to_committee_ids)[];
|
|
||||||
organisation_id: organisation/committee_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface meeting {
|
|
||||||
id: number;
|
|
||||||
welcome_title: string;
|
|
||||||
welcome_text: HTML;
|
|
||||||
|
|
||||||
// General
|
|
||||||
name: string;
|
|
||||||
description: string;
|
|
||||||
location: string;
|
|
||||||
start_time: datetime;
|
|
||||||
end_time: datetime;
|
|
||||||
custom_translations: JSON;
|
|
||||||
|
|
||||||
// System
|
|
||||||
url_name: string; // For unique urls.
|
|
||||||
template_for_committee_id: committee/template_meeting_id;
|
|
||||||
enable_anonymous: boolean;
|
|
||||||
|
|
||||||
// Jitsi/Livestream settings
|
|
||||||
conference_show: boolean;
|
|
||||||
conference_auto_connect: boolean;
|
|
||||||
conference_los_restriction: boolean;
|
|
||||||
conference_stream_url: string;
|
|
||||||
|
|
||||||
// Projector
|
|
||||||
projector_default_countdown_time: number;
|
|
||||||
projector_countdown_warning_time: number;
|
|
||||||
|
|
||||||
// Exports
|
|
||||||
export_csv_encoding: string;
|
|
||||||
export_csv_separator: string;
|
|
||||||
export_pdf_pagenumber_alignment: string;
|
|
||||||
export_pdf_fontsize: number;
|
|
||||||
export_pdf_pagesize: string;
|
|
||||||
|
|
||||||
// Agenda
|
|
||||||
agenda_show_subtitles: boolean;
|
|
||||||
agenda_enable_numbering: boolean;
|
|
||||||
agenda_number_prefix: string;
|
|
||||||
agenda_numeral_system: string;
|
|
||||||
agenda_item_creation: string;
|
|
||||||
agenda_new_items_default_visibility: number;
|
|
||||||
agenda_show_internal_items_on_projector: boolean;
|
|
||||||
|
|
||||||
// List of speakers
|
|
||||||
list_of_speakers_amount_last_on_projector: number;
|
|
||||||
list_of_speakers_amount_next_on_projector: boolean;
|
|
||||||
list_of_speakers_couple_countdown: boolean;
|
|
||||||
list_of_speakers_show_amount_of_speakers_on_slide: boolean;
|
|
||||||
list_of_speakers_present_users_only: boolean;
|
|
||||||
list_of_speakers_show_first_contribution: boolean;
|
|
||||||
|
|
||||||
// Motions
|
|
||||||
motions_default_workflow_id: motion_workflow/default_workflow_meeting_id;
|
|
||||||
motions_default_amendment_workflow_id: motion_workflow/default_amendment_workflow_meeting_id;
|
|
||||||
motions_default_statute_amendment_workflow_id: motion_workflow/default_statute_amendment_workflow_meeting_id;
|
|
||||||
motions_preamble: string;
|
|
||||||
motions_default_line_numbering: string;
|
|
||||||
motions_line_length: number;
|
|
||||||
motions_reason_required: boolean;
|
|
||||||
motions_enable_text_on_projector: boolean;
|
|
||||||
motions_enable_reason_on_projector: boolean;
|
|
||||||
motions_enable_sidebox_on_projector: boolean;
|
|
||||||
motions_enable_recommendation_on_projector: boolean;
|
|
||||||
motions_show_referring_motions: boolean;
|
|
||||||
motions_show_sequential_number: boolean;
|
|
||||||
motions_recommendations_by: string;
|
|
||||||
motions_statute_recommendations_by: string;
|
|
||||||
motions_recommendation_text_mode: string;
|
|
||||||
motions_default_sorting: string;
|
|
||||||
motions_identifier_type: string;
|
|
||||||
motions_identifier_min_digits: number;
|
|
||||||
motions_identifier_with_blank: boolean;
|
|
||||||
motions_statutes_enabled: boolean;
|
|
||||||
motions_amendments_enabled: boolean;
|
|
||||||
motions_amendments_in_main_list: boolean;
|
|
||||||
motions_amendments_of_amendments: boolean;
|
|
||||||
motions_amendments_prefix: string;
|
|
||||||
motions_amendments_text_mode: string;
|
|
||||||
motions_amendments_multiple_paragraphs: boolean;
|
|
||||||
motions_supporters_min_amount: number;
|
|
||||||
motions_supporters_enable_autoremove: boolean;
|
|
||||||
motions_export_title: string;
|
|
||||||
motions_export_preamble: string;
|
|
||||||
motions_export_submitter_recommendation: boolean;
|
|
||||||
motions_export_follow_recommendation: boolean;
|
|
||||||
|
|
||||||
motion_poll_ballot_paper_selection: string;
|
|
||||||
motion_poll_ballot_paper_number: number;
|
|
||||||
motion_poll_default_type: string;
|
|
||||||
motion_poll_default_100_percent_base: string;
|
|
||||||
motion_poll_default_majority_method: string;
|
|
||||||
motion_poll_default_group_ids: (group/used_as_motion_poll_default_id)[];
|
|
||||||
|
|
||||||
// Users
|
|
||||||
users_sort_by: string;
|
|
||||||
users_enable_presence_view: boolean;
|
|
||||||
users_enable_vote_weight: boolean;
|
|
||||||
users_allow_self_set_present: boolean;
|
|
||||||
users_pdf_welcometitle: string;
|
|
||||||
users_pdf_welcometext: string;
|
|
||||||
users_pdf_url: string;
|
|
||||||
users_pdf_wlan_ssid: string;
|
|
||||||
users_pdf_wlan_password: string;
|
|
||||||
users_pdf_wlan_encryption: string;
|
|
||||||
users_email_sender: string;
|
|
||||||
users_email_replyto: string;
|
|
||||||
users_email_subject: string;
|
|
||||||
users_email_body: string;
|
|
||||||
|
|
||||||
// Assignments
|
|
||||||
assignemnts_export_title: string;
|
|
||||||
assignments_export_preamble: string;
|
|
||||||
|
|
||||||
assignment_poll_ballot_paper_selection: string;
|
|
||||||
assignment_poll_ballot_paper_number: number;
|
|
||||||
assignment_poll_add_candidates_to_list_of_speakers: boolean;
|
|
||||||
assignment_poll_sort_poll_result_by_votes: boolean;
|
|
||||||
assignment_poll_default_type: string;
|
|
||||||
assignment_poll_default_method: string;
|
|
||||||
assignment_poll_default_100_percent_base: string;
|
|
||||||
assignment_poll_default_majority_method: string;
|
|
||||||
assignment_poll_default_group_ids: (group/used_as_assignment_poll_default_id)[];
|
|
||||||
|
|
||||||
projector_ids: (projector/meeting_id)[];
|
|
||||||
projectiondefault_ids: (projectiondefault/meeting_id)[];
|
|
||||||
projector_message_ids: (projector_message/meeting_id)[];
|
|
||||||
projector_countdown_ids: (projector_countdown/meeting_id)[];
|
|
||||||
tag_ids: (tag/meeting_id)[];
|
|
||||||
agenda_item_ids: (agenda_item/meeting_id)[];
|
|
||||||
list_of_speakers_ids: (list_of_speakers/meeting_id)[];
|
|
||||||
topic_ids: (topic/meeting_id)[];
|
|
||||||
group_ids: (group/meeting_id)[];
|
|
||||||
mediafile_ids: (mediafile/meeting_id)[];
|
|
||||||
motion_ids: (motion/meeting_id)[];
|
|
||||||
motion_comment_section_ids: (motion_comment_section/meeting_id)[];
|
|
||||||
motion_category_ids: (motion_category/meeting_id)[];
|
|
||||||
motion_block_ids: (motion_block/meeting_id)[];
|
|
||||||
motion_workflow_ids: (motion_workflow/meeting_id)[];
|
|
||||||
motion_statute_paragraph_ids: (motion_statute_paragraph/meeting_id)[];
|
|
||||||
motion_poll_ids: (motion_poll/meeting_id)[];
|
|
||||||
assignment_ids: (assignment/meeting_id)[];
|
|
||||||
assignment_poll_ids: (assignment_poll/meeting_id)[];
|
|
||||||
|
|
||||||
// No relations to a meeting:
|
|
||||||
// user; OK, because not meeting-specific
|
|
||||||
// personal_note
|
|
||||||
// projection
|
|
||||||
// speaker
|
|
||||||
// motion_option
|
|
||||||
// motion_vote
|
|
||||||
// motion_comment
|
|
||||||
// motion_submitter
|
|
||||||
// motion_change_recommendation
|
|
||||||
// motion_state
|
|
||||||
// assignment_candidate
|
|
||||||
// assignment_option
|
|
||||||
// assignment_vote
|
|
||||||
|
|
||||||
// Logos and Fonts
|
|
||||||
logo_$<place>_id: mediafile/used_as_logo_$<place>_in_meeting_id;
|
|
||||||
font_$<place>_id: mediafile/used_as_font_$<place>_in_mmeting_id;
|
|
||||||
// Examples:
|
|
||||||
// logo_web_header: Mediafile;
|
|
||||||
// font_italic_pdf: Mediafile;
|
|
||||||
// The client can define these resources. There is no need
|
|
||||||
// to have whitelist/blacklist on the server. The places must
|
|
||||||
// be checked: They must match `[a-z]([a-z_]*[a-z])?` and must
|
|
||||||
// not be longer than 32 characters.
|
|
||||||
|
|
||||||
// Other relations
|
|
||||||
committee_id: committee/meeting_ids;
|
|
||||||
default_meeting_for_committee_id: committee/default_meeting_id;
|
|
||||||
present_user_ids: (user/is_present_in_meeting_ids)[];
|
|
||||||
temporary_user_ids: (user/meeting_id)[];
|
|
||||||
guest_ids: (user/guest_meeting_ids)[];
|
|
||||||
user_ids: (Id)[]; // Calculated: All ids from temporary_user_ids, guest_ids and all users assigned to groups.
|
|
||||||
reference_projector_id: projector/used_as_reference_projector_meeting_id;
|
|
||||||
|
|
||||||
default_group_id: group/default_group_for_meeting_id;
|
|
||||||
superadmin_group_id: group/superadmin_group_for_meeting_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface group {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
permissions: string[];
|
|
||||||
|
|
||||||
user_ids: (user/group_$<meeting_id>_ids)[];
|
|
||||||
default_group_for_meeting_id: meeting/default_group_id;
|
|
||||||
superadmin_group_for_meeting_id: meeting/superadmin_group_id;
|
|
||||||
mediafile_access_group_ids: (mediafile/access_group_ids)[];
|
|
||||||
mediafile_inherited_access_group_ids: (mediafile/inherited_access_group_ids)[];
|
|
||||||
read_comment_section_ids: (motion_comment_section/read_group_ids)[];
|
|
||||||
write_comment_section_ids: (motion_comment_section/write_group_ids)[];
|
|
||||||
motion_poll_ids: (motion_poll/entitled_group_ids)[];
|
|
||||||
assignment_poll_ids: (assignment_poll/entitled_group_ids)[];
|
|
||||||
used_as_motion_poll_default_id: meeting/motion_poll_default_group_ids;
|
|
||||||
used_as_assignment_poll_default_id: meeting/assignment_poll_default_group_ids;
|
|
||||||
meeting_id: meeting/group_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface personal_note {
|
|
||||||
id: number;
|
|
||||||
note: HTML;
|
|
||||||
star: boolean;
|
|
||||||
|
|
||||||
user_id: user/personal_note_$<meeting_id>_ids;
|
|
||||||
content_object_id: {motion}/personal_note_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface tag {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
|
|
||||||
tagged_ids: ({agenda_item,assignment,motion,topic}/tag_ids)[];
|
|
||||||
meeting_id: meeting/tag_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface agenda_item {
|
|
||||||
id: number;
|
|
||||||
item_number: string;
|
|
||||||
comment: string;
|
|
||||||
closed: boolean;
|
|
||||||
type: number;
|
|
||||||
is_internal: boolean;
|
|
||||||
is_hidden: boolean;
|
|
||||||
duration: number; // in seconds
|
|
||||||
weight: number;
|
|
||||||
level: number; // calculated.
|
|
||||||
|
|
||||||
content_object_id: {motion,motion_block,assignment,topic}/agenda_item_id;
|
|
||||||
parent_id: agenda_item/child_ids;
|
|
||||||
child_ids: (agenda_item/parent_id)[];
|
|
||||||
tag_ids: (tag/tagged_ids)[];
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
meeting_id: meeting/agenda_item_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface list_of_speakers {
|
|
||||||
id: number;
|
|
||||||
closed: boolean;
|
|
||||||
|
|
||||||
content_object_id: {motion,motion_block,assignment,topic,mediafile}/list_of_speakers_id;
|
|
||||||
speaker_ids: (speaker/list_of_speakers_id)[];
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
meeting_id: meeting/list_of_speakers_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface speaker {
|
|
||||||
id: number;
|
|
||||||
begin_time: datetime;
|
|
||||||
end_time: datetime;
|
|
||||||
weight: number;
|
|
||||||
marked: boolean;
|
|
||||||
|
|
||||||
list_of_speakers_id: list_of_speakers/speaker_ids;
|
|
||||||
user_id: user/speaker_$<meeting_id>_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface topic {
|
|
||||||
id: number;
|
|
||||||
title: string;
|
|
||||||
text: HTML;
|
|
||||||
|
|
||||||
attachment_ids: (mediafile/attachement_ids)[];
|
|
||||||
agenda_item_id: agenda_item/content_object_id;
|
|
||||||
list_of_speakers_id: list_of_speakers/content_object_id;
|
|
||||||
tag_ids: (tag/tagged_ids)[];
|
|
||||||
meeting_id: meeting/topic_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion {
|
|
||||||
id: number;
|
|
||||||
number: string;
|
|
||||||
sequential_number: number; // Calculated
|
|
||||||
title: string;
|
|
||||||
text: HTML;
|
|
||||||
amendment_paragraph_$<paragraph_number>: HTML;
|
|
||||||
modified_final_version: HTML;
|
|
||||||
reason: HTML;
|
|
||||||
category_weight: number;
|
|
||||||
state_extension: string;
|
|
||||||
recommendation_extension: string;
|
|
||||||
sort_weight: number;
|
|
||||||
created: datetime;
|
|
||||||
last_modified: datetime;
|
|
||||||
|
|
||||||
lead_motion_id: motion/amendment_ids;
|
|
||||||
amendment_ids: (motion/lead_motion_id)[];
|
|
||||||
sort_parent_id: motion/sort_child_ids;
|
|
||||||
sort_child_ids: (motion/parent_id)[];
|
|
||||||
origin_id: motion/derived_motion_ids; // Note: The related motions may not be in the same meeting
|
|
||||||
derived_motion_ids: (motion/origin_id)[]; // Note: The related motions may not be in the same meeting
|
|
||||||
forwarding_tree_motion_ids: (Id)[]; // Calculated: All children (derived_motion_ids), grand children, ... and all parents (origin_id).
|
|
||||||
state_id: motion_state/motion_ids;
|
|
||||||
recommendation_id: motion_state/motion_recommendation_ids;
|
|
||||||
recommendation_extension_reference_ids: ({motion}/referenced_in_motion_recommendation_extension_ids)[];
|
|
||||||
referenced_in_motion_recommendation_extension_ids: (motion/recommendation_extension_reference_ids)[];
|
|
||||||
category_id: motion_category/motion_ids;
|
|
||||||
block_id: motion_block/motion_ids;
|
|
||||||
submitter_ids: (motion_submitter/motion_id)[];
|
|
||||||
supporter_ids: (user/supported_motion_$<meeting_id>_ids)[];
|
|
||||||
poll_ids: (motion_poll/motion_id)[];
|
|
||||||
change_recommendation_ids: (motion_change_recommendation/motion_id)[];
|
|
||||||
statute_paragraph_id: motion_statute_paragraph/motion_ids;
|
|
||||||
comment_ids: (motion_comment/motion_id)[];
|
|
||||||
agenda_item_id: agenda_item/content_object_id;
|
|
||||||
list_of_speakers_id: list_of_speakers/content_object_id;
|
|
||||||
tag_ids: (tag/tagged_ids)[];
|
|
||||||
attachment_ids: (mediafile/attachment_ids)[];
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
personal_note_ids: (personal_note/content_object_id)[];
|
|
||||||
meeting_id: meeting/motion_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_submitter {
|
|
||||||
id: number;
|
|
||||||
weight: number;
|
|
||||||
|
|
||||||
user_id: user/submitted_motion_$<meeting_id>_ids;
|
|
||||||
motion_id: motion/submitter_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_comment {
|
|
||||||
id: number;
|
|
||||||
comment: HTML;
|
|
||||||
|
|
||||||
motion_id: motion/comment_ids;
|
|
||||||
section_id: motion_comment_section/comment_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_comment_section {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
weight: number;
|
|
||||||
|
|
||||||
comment_ids: (motion_comment/section_id)[];
|
|
||||||
read_group_ids: (group/read_comment_section_ids)[];
|
|
||||||
write_group_ids: (group/write_comment_section_ids)[];
|
|
||||||
meeting_id: meeting/motion_comment_section_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_category {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
prefix: string;
|
|
||||||
weight: number;
|
|
||||||
level: number;
|
|
||||||
|
|
||||||
parent_id: motion_category/child_ids;
|
|
||||||
child_ids: (motion_category/parent_id)[];
|
|
||||||
motion_ids: (motion/category_id)[];
|
|
||||||
meeting_id: meeting/category_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_block {
|
|
||||||
id: number;
|
|
||||||
title: string;
|
|
||||||
internal: boolean;
|
|
||||||
|
|
||||||
motion_ids: (motion/block_id)[];
|
|
||||||
agenda_item_id: agenda_item/content_object_id;
|
|
||||||
list_of_speakers_id: list_of_speakers/content_object_id;
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
meeting_id: meeting/motion_block_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_change_recommendation {
|
|
||||||
id: number;
|
|
||||||
rejected: boolean;
|
|
||||||
internal: boolean;
|
|
||||||
type: number;
|
|
||||||
other_description: string;
|
|
||||||
line_from: number;
|
|
||||||
line_to: number;
|
|
||||||
text: HTML;
|
|
||||||
creation_time: datetime;
|
|
||||||
|
|
||||||
motion_id: motion/change_recommendation_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_state {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
recommendation_label: string;
|
|
||||||
css_class: string;
|
|
||||||
restrictions: string[];
|
|
||||||
allow_support: boolean;
|
|
||||||
allow_create_poll: boolean;
|
|
||||||
allow_submitter_edit: boolean;
|
|
||||||
set_number: boolean;
|
|
||||||
show_state_extension_field: boolean;
|
|
||||||
merge_amendment_into_final: number;
|
|
||||||
show_recommendation_extension_field: boolean;
|
|
||||||
|
|
||||||
next_state_ids: (motion_state/previous_state_ids)[];
|
|
||||||
previous_state_ids: (motion_state/next_state_ids)[];
|
|
||||||
motion_ids: (motion/state_id)[];
|
|
||||||
motion_recommendation_ids: (motion/recommendation_id)[];
|
|
||||||
workflow_id: motion_workflow/state_ids;
|
|
||||||
first_state_of_workflow_id: motion_workflow/first_state_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_workflow {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
|
|
||||||
state_ids: (motion_state/workflow_id)[];
|
|
||||||
first_state_id: motion_state/first_state_of_workflow_id;
|
|
||||||
default_workflow_meeting_id: meeting/motions_default_workflow_id;
|
|
||||||
default_amendment_workflow_meeting_id: meeting/motions_default_amendment_workflow_id;
|
|
||||||
default_statute_amendment_workflow_meeting_id: meeting/motions_default_statute_amendment_workflow_id;
|
|
||||||
meeting_id: meeting/motion_workflow_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_statute_paragraph {
|
|
||||||
id: number;
|
|
||||||
title: string;
|
|
||||||
text: HTML;
|
|
||||||
weight: number;
|
|
||||||
|
|
||||||
motion_ids: (motion/statute_paragraph_id)[];
|
|
||||||
meeting_id: meeting/motion_statute_paragraph_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_poll {
|
|
||||||
id: number;
|
|
||||||
pollmethod: string;
|
|
||||||
state: number;
|
|
||||||
type: string;
|
|
||||||
title: string;
|
|
||||||
onehundred_percent_base: string;
|
|
||||||
majority_method: string;
|
|
||||||
votesvalid: decimal(6);
|
|
||||||
votesinvalid: decimal(6);
|
|
||||||
votescast: decimal(6);
|
|
||||||
user_has_voted: boolean; // This is user specific and set during restriction
|
|
||||||
|
|
||||||
motion_id: motion/poll_ids;
|
|
||||||
option_ids: (motion_option/poll_id)[];
|
|
||||||
voted_ids: (user/motion_poll_voted_$<meeting_id>_ids)[];
|
|
||||||
entitled_group_ids: (group/motion_poll_ids)[];
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
meeting_id: meeting/motion_poll_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_option {
|
|
||||||
id: number;
|
|
||||||
yes: decimal(6);
|
|
||||||
no: decimal(6);
|
|
||||||
abstain: decimal(6);
|
|
||||||
|
|
||||||
poll_id: motion_poll/option_ids;
|
|
||||||
vote_ids: (motion_vote/option_id)[];
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface motion_vote {
|
|
||||||
id: number;
|
|
||||||
weight: decimal(6);
|
|
||||||
value: string;
|
|
||||||
|
|
||||||
option_id: motion_option/vote_ids;
|
|
||||||
user_id: user/motion_vote_$<meeting_id>_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface assignment {
|
|
||||||
id: number;
|
|
||||||
title: string;
|
|
||||||
description: HTML;
|
|
||||||
open_posts: number;
|
|
||||||
phase: number;
|
|
||||||
default_poll_description: string;
|
|
||||||
number_poll_candidates: boolean;
|
|
||||||
|
|
||||||
candidate_ids: (assignment_candidate/assignment_id)[];
|
|
||||||
poll_ids: (assignment_poll/assignment_id)[];
|
|
||||||
agenda_item_id: agenda_item/content_object_id;
|
|
||||||
list_of_speakers_id: list_of_speakers/content_object_id;
|
|
||||||
tag_ids: (tag/tagged_ids)[];
|
|
||||||
attachment_ids: (mediafile/attachment_ids)[];
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
meeting_id: meeting/assignment_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface assignment_candidate {
|
|
||||||
id: number;
|
|
||||||
weight: number;
|
|
||||||
|
|
||||||
assignment_id: assignment/candidate_ids;
|
|
||||||
user_id: user/assignment_candidate_$<meeting_id>_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface assignment_poll {
|
|
||||||
id: number;
|
|
||||||
description: string;
|
|
||||||
pollmethod: string;
|
|
||||||
votes_amount: number;
|
|
||||||
allow_multiple_votes_per_candidate: boolean;
|
|
||||||
global_abstain: boolean;
|
|
||||||
global_no: boolean;
|
|
||||||
amount_global_abstain: decimal(6);
|
|
||||||
amount_global_no: decimal(6);
|
|
||||||
state: number;
|
|
||||||
title: string;
|
|
||||||
type: string;
|
|
||||||
onehundred_percent_base: string;
|
|
||||||
majority_method: string;
|
|
||||||
votescast: decimal(6);
|
|
||||||
votesinvalid: decimal(6);
|
|
||||||
votesvalid: decimal(6);
|
|
||||||
user_has_voted: boolean; // This is user specific and set during restriction
|
|
||||||
|
|
||||||
assignment_id: assignment/poll_ids;
|
|
||||||
voted_ids: (user/assignment_poll_voted_$<meeting_id>_ids)[];
|
|
||||||
entitled_group_ids: (group/assignment_poll_ids)[];
|
|
||||||
option_ids: (assignment_option/poll_id)[];
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
meeting_id: meeting/assignment_poll_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface assignment_option {
|
|
||||||
id: number;
|
|
||||||
yes: decimal(6);
|
|
||||||
no: decimal(6);
|
|
||||||
abstain: decimal(6);
|
|
||||||
weight: number;
|
|
||||||
|
|
||||||
poll_id: assignment_poll/option_ids;
|
|
||||||
user_id: user/assignment_option_$<meeting_id>_ids;
|
|
||||||
vote_ids: (assignment_vote/option_id)[];
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface assignment_vote {
|
|
||||||
id: number;
|
|
||||||
value: string;
|
|
||||||
weight: decimal(6);
|
|
||||||
|
|
||||||
option_id: assignment_option/vote_ids;
|
|
||||||
user_id: user/assignment_vote_$<meeting_id>_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mediafiles are delivered by the mediafile server with the URL
|
|
||||||
// `<media-prefix>/media/<meeting_id>/path`
|
|
||||||
Interface mediafile {
|
|
||||||
id: number;
|
|
||||||
title: string; // title and parent_id must be unique.
|
|
||||||
is_directory: boolean;
|
|
||||||
filesize: number; // Note: in bytes, not the human readable format anymore
|
|
||||||
filename: string; // Note: The uploaded filename. will be used for downloading. Only writeable on create.
|
|
||||||
mimetype: string;
|
|
||||||
pdf_information: JSON;
|
|
||||||
create_timestamp: datetime;
|
|
||||||
has_inherited_access_groups: boolean; // Note: calculated
|
|
||||||
|
|
||||||
inherited_access_group_ids: (group/mediafile_inherited_access_group_ids)[]; // Note: calculated
|
|
||||||
access_group_ids: (group/mediafile_access_group_ids)[];
|
|
||||||
parent_id: mediafile/child_ids;
|
|
||||||
child_ids: (mediafile/parent_id)[];
|
|
||||||
list_of_speakers_id: list_of_speakers/content_object_id;
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
attachment_ids: ({motion,topic,assignment}/attachment_ids)[];
|
|
||||||
meeting_id: meeting/mediafile_ids;
|
|
||||||
|
|
||||||
// Reverse relations for meetings, if a mediafile is used as a special resource
|
|
||||||
used_as_logo_$<place>_in_meeting_id: meeting/logo_$<place>_id;
|
|
||||||
used_as_font_$<place>_in_meeting_id: meeting/font_$<place>_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface projector {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
scale: number;
|
|
||||||
scroll: number;
|
|
||||||
width: number;
|
|
||||||
aspect_ratio_numerator: number;
|
|
||||||
aspect_ratio_denominator: number;
|
|
||||||
color: string;
|
|
||||||
background_color: string;
|
|
||||||
header_background_color: string;
|
|
||||||
header_font_color: string;
|
|
||||||
header_h1_color: string;
|
|
||||||
chyron_background_color: string;
|
|
||||||
chyron_font_color: string;
|
|
||||||
show_header_footer: boolean;
|
|
||||||
show_title: boolean;
|
|
||||||
show_logo: boolean;
|
|
||||||
|
|
||||||
current_projection_ids: (projection/current_projector_id)[];
|
|
||||||
// A relation to the currently projected elements to get a direct link, if
|
|
||||||
// the element is projected.
|
|
||||||
current_element_ids: ({motion,mediafile,list_of_speakers,motion_block,assignment,agenda_item,user,assignment_poll,motion_poll,projector_message,projector_countdown}/current_projector_ids)[];
|
|
||||||
preview_projection_ids: (projection/projector_preview_id)[];
|
|
||||||
history_projection_ids: (projection/projector_history_id)[];
|
|
||||||
used_as_reference_projector_meeting_id: meeting/reference_projector_id;
|
|
||||||
projectiondefault_ids: (projectiondefault/projector_id)[];
|
|
||||||
meeting_id: meeting/projector_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
// A projection is a M2M model between an element that is assigned to a
|
|
||||||
// projector. This element can either be the current one projected, in the
|
|
||||||
// preview, or in the history, but not more than one once. A projection is
|
|
||||||
// projector-specific, meaning that once a projection is created for a projector
|
|
||||||
// and element, these references will not change.
|
|
||||||
Interface projection {
|
|
||||||
id: number;
|
|
||||||
options: JSON;
|
|
||||||
|
|
||||||
current_projector_id: projector/current_projection_ids;
|
|
||||||
preview_projector_id: projector/preview_projection_ids;
|
|
||||||
history_projector_id: projector/history_projection_ids;
|
|
||||||
element_id: {motion,mediafile,list_of_speakers,motion_block,assignment,agenda_item,user,assignment_poll,motion_poll,projector_message,projector_countdown}/projection_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface projectiondefault {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
display_name: string;
|
|
||||||
|
|
||||||
projector_id: projector/projectiondefault_ids;
|
|
||||||
meeting_id: meeting/projectiondefault_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface projector_message {
|
|
||||||
id: number;
|
|
||||||
message: HTML;
|
|
||||||
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
meeting_id: meeting/projector_message_ids;
|
|
||||||
}
|
|
||||||
|
|
||||||
Interface projector_countdown {
|
|
||||||
id: number;
|
|
||||||
title: string;
|
|
||||||
description: string;
|
|
||||||
default_time: number;
|
|
||||||
countdown_time: number; // float?
|
|
||||||
running: boolean;
|
|
||||||
|
|
||||||
projection_ids: (projection/element_id)[];
|
|
||||||
current_projector_ids: (projector/current_element_ids)[];
|
|
||||||
meeting_id: meeting/projector_countdown_ids;
|
|
||||||
}
|
|
@ -52,12 +52,18 @@ organisation:
|
|||||||
name: string
|
name: string
|
||||||
description: HTMLStrict
|
description: HTMLStrict
|
||||||
|
|
||||||
# Configs
|
# Settings (configurable by the client)
|
||||||
legal_notice: string
|
legal_notice: string
|
||||||
privacy_policy: string
|
privacy_policy: string
|
||||||
login_text: string
|
login_text: string
|
||||||
theme: string
|
theme: string
|
||||||
custom_translations: JSON
|
custom_translations: JSON
|
||||||
|
reset_password_verbose_errors: boolean
|
||||||
|
|
||||||
|
# Configuration (only for the server owner)
|
||||||
|
enable_electronic_voting:
|
||||||
|
type: boolean
|
||||||
|
read_only: true
|
||||||
|
|
||||||
committee_ids:
|
committee_ids:
|
||||||
type: relation-list
|
type: relation-list
|
||||||
@ -90,6 +96,9 @@ user:
|
|||||||
email: string
|
email: string
|
||||||
last_email_send: string
|
last_email_send: string
|
||||||
vote_weight: decimal(6)
|
vote_weight: decimal(6)
|
||||||
|
is_demo_user:
|
||||||
|
type: boolean
|
||||||
|
read_only: true
|
||||||
|
|
||||||
role_id:
|
role_id:
|
||||||
type: relation
|
type: relation
|
||||||
@ -173,6 +182,12 @@ user:
|
|||||||
fields:
|
fields:
|
||||||
type: relation-list
|
type: relation-list
|
||||||
to: motion_vote/user_id
|
to: motion_vote/user_id
|
||||||
|
motion_delegated_vote_$_ids:
|
||||||
|
type: template
|
||||||
|
replacement: meeting_id
|
||||||
|
fields:
|
||||||
|
type: relation-list
|
||||||
|
to: motion_vote/delegated_user_id
|
||||||
assignment_candidate_$_ids:
|
assignment_candidate_$_ids:
|
||||||
type: template
|
type: template
|
||||||
replacement: meeting_id
|
replacement: meeting_id
|
||||||
@ -197,6 +212,24 @@ user:
|
|||||||
fields:
|
fields:
|
||||||
type: relation-list
|
type: relation-list
|
||||||
to: assignment_vote/user_id
|
to: assignment_vote/user_id
|
||||||
|
assignment_delegated_vote_$_ids:
|
||||||
|
type: template
|
||||||
|
replacement: meeting_id
|
||||||
|
fields:
|
||||||
|
type: relation-list
|
||||||
|
to: assignment_vote/delegated_user_id
|
||||||
|
vote_delegated_$_to_id:
|
||||||
|
type: template
|
||||||
|
replacement: meeting_id
|
||||||
|
fields:
|
||||||
|
type: relation
|
||||||
|
to: user/vote_delegations_$_from_ids
|
||||||
|
vote_delegations_$_from_ids:
|
||||||
|
type: template
|
||||||
|
replacement: meeting_id
|
||||||
|
fields:
|
||||||
|
type: relation-list
|
||||||
|
to: user/vote_delegated_$_to_id
|
||||||
|
|
||||||
role:
|
role:
|
||||||
id: number
|
id: number
|
||||||
@ -276,7 +309,17 @@ meeting:
|
|||||||
location: string
|
location: string
|
||||||
start_time: timestamp
|
start_time: timestamp
|
||||||
end_time: timestamp
|
end_time: timestamp
|
||||||
custom_translations: JSON
|
|
||||||
|
# Configuration (only for the server owner)
|
||||||
|
jitsi_domain:
|
||||||
|
type: string
|
||||||
|
read_only: true
|
||||||
|
jitsi_room_name:
|
||||||
|
type: string
|
||||||
|
read_only: true
|
||||||
|
jitsi_room_password:
|
||||||
|
type: string
|
||||||
|
read_only: true
|
||||||
|
|
||||||
# System
|
# System
|
||||||
url_name:
|
url_name:
|
||||||
@ -292,6 +335,7 @@ meeting:
|
|||||||
conference_auto_connect: boolean
|
conference_auto_connect: boolean
|
||||||
conference_los_restriction: boolean
|
conference_los_restriction: boolean
|
||||||
conference_stream_url: string
|
conference_stream_url: string
|
||||||
|
conference_stream_poster_url: string
|
||||||
|
|
||||||
# Projector
|
# Projector
|
||||||
projector_default_countdown_time: number
|
projector_default_countdown_time: number
|
||||||
@ -400,14 +444,14 @@ meeting:
|
|||||||
- diff
|
- diff
|
||||||
- agreed
|
- agreed
|
||||||
motions_default_sorting: string
|
motions_default_sorting: string
|
||||||
motions_identifier_type:
|
motions_number_type:
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
- per_category
|
- per_category
|
||||||
- serially_numbered
|
- serially_numbered
|
||||||
- manually
|
- manually
|
||||||
motions_identifier_min_digits: number
|
motions_number_min_digits: number
|
||||||
motions_identifier_with_blank: boolean
|
motions_number_with_blank: boolean
|
||||||
motions_statutes_enabled: boolean
|
motions_statutes_enabled: boolean
|
||||||
motions_amendments_enabled: boolean
|
motions_amendments_enabled: boolean
|
||||||
motions_amendments_in_main_list: boolean
|
motions_amendments_in_main_list: boolean
|
||||||
@ -1314,6 +1358,17 @@ motion_vote:
|
|||||||
through:
|
through:
|
||||||
- option_id
|
- option_id
|
||||||
- poll_id
|
- poll_id
|
||||||
|
delegated_user_id:
|
||||||
|
type: relation
|
||||||
|
to:
|
||||||
|
collection: user
|
||||||
|
field:
|
||||||
|
name: motion_delegated_vote_$_ids
|
||||||
|
type: structured-relation
|
||||||
|
replacement: meeting_id
|
||||||
|
through:
|
||||||
|
- option_id
|
||||||
|
- poll_id
|
||||||
|
|
||||||
assignment:
|
assignment:
|
||||||
id: number
|
id: number
|
||||||
@ -1475,6 +1530,17 @@ assignment_vote:
|
|||||||
through:
|
through:
|
||||||
- option_id
|
- option_id
|
||||||
- poll_id
|
- poll_id
|
||||||
|
delegated_user_id:
|
||||||
|
type: relation
|
||||||
|
to:
|
||||||
|
collection: user
|
||||||
|
field:
|
||||||
|
name: assignment_delegated_vote_$_ids
|
||||||
|
type: structured-relation
|
||||||
|
replacement: meeting_id
|
||||||
|
through:
|
||||||
|
- option_id
|
||||||
|
- poll_id
|
||||||
|
|
||||||
# Mediafiles are delivered by the mediafile server with the URL
|
# Mediafiles are delivered by the mediafile server with the URL
|
||||||
# `<media-prefix>/media/<meeting_id>/path`
|
# `<media-prefix>/media/<meeting_id>/path`
|
||||||
|
Loading…
Reference in New Issue
Block a user