diff --git a/install/create.sql b/install/create.sql index 11bc7a5..303bc52 100644 --- a/install/create.sql +++ b/install/create.sql @@ -542,6 +542,7 @@ CREATE TABLE `calcms_roles` ( `studio_id` int unsigned NOT NULL, `role` varchar(40) NOT NULL, `level` tinyint unsigned NOT NULL DEFAULT '0', + `admin` INT(1) UNSIGNED NOT NULL DEFAULT 0, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `modified_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `read_role` tinyint unsigned DEFAULT NULL, @@ -635,11 +636,11 @@ CREATE TABLE `calcms_roles` ( LOCK TABLES `calcms_roles` WRITE; /*!40000 ALTER TABLE `calcms_roles` DISABLE KEYS */; -INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (7,1,1,'Admin',7,NULL,'2023-02-19 21:32:32',1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); -INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (3,1,1,'Studio Manager',6,NULL,'2023-02-19 21:32:32',1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1); -INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (1,1,1,'Program Planing',4,NULL,'2023-02-19 21:32:32',1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1); -INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (2,1,1,'Editorial',2,NULL,'2023-02-19 21:32:32',0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1); -INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (25,1,1,'Guest',1,NULL,'2023-02-19 21:32:32',0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `admin`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (7,1,1,'Admin',7,1,NULL,'2023-02-19 21:32:32',1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1); +INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `admin`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (3,1,1,'Studio Manager',6,0,NULL,'2023-02-19 21:32:32',1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,1); +INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `admin`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (1,1,1,'Program Planing',4,0,NULL,'2023-02-19 21:32:32',1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1); +INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `admin`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (2,1,1,'Editorial',2,0,NULL,'2023-02-19 21:32:32',0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1); +INSERT INTO `calcms_roles` (`id`, `project_id`, `studio_id`, `role`, `level`, `admin`, `created_at`, `modified_at`, `read_role`, `update_role`, `read_user_role`, `create_user`, `read_user`, `update_user`, `delete_user`, `update_user_role`, `disable_user`, `create_project`, `read_project`, `update_project`, `delete_project`, `assign_project_studio`, `create_studio`, `read_studio`, `update_studio`, `delete_studio`, `read_studio_timeslot_schedule`, `update_studio_timeslot_schedule`, `create_series`, `read_series`, `update_series`, `delete_series`, `update_series_template`, `assign_series_member`, `remove_series_member`, `scan_series_events`, `assign_series_events`, `read_schedule`, `update_schedule`, `delete_schedule`, `create_event`, `create_event_from_schedule`, `create_event_of_series`, `read_event`, `delete_event`, `update_event_of_series`, `update_event_of_others`, `update_event_time`, `update_event_after_week`, `update_event_field_title`, `update_event_field_title_extension`, `update_event_field_excerpt`, `update_event_field_content`, `update_event_field_content_format`, `update_event_field_description`, `update_event_field_topic`, `update_event_field_episode`, `update_event_field_excerpt_extension`, `update_event_field_image`, `update_event_field_podcast_url`, `update_event_field_archive_url`, `update_event_status_disable_event_sync`, `update_event_status_published`, `update_event_status_rerun`, `update_event_status_draft`, `update_event_status_live`, `update_event_status_playout`, `update_event_status_archived`, `create_image`, `update_image_own`, `read_image`, `delete_image_own`, `update_image_others`, `delete_image_others`, `read_changes`, `undo_changes`, `read_user_stats`, `read_comment`, `update_comment_status_lock`, `update_comment_status_read`, `upload_audio_recordings`, `delete_audio_recordings`, `read_playout`, `create_download`) VALUES (25,1,1,'Guest',1,0,NULL,'2023-02-19 21:32:32',0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); /*!40000 ALTER TABLE `calcms_roles` ENABLE KEYS */; UNLOCK TABLES; @@ -1306,7 +1307,6 @@ CREATE TABLE `calcms_studios` ( `location` varchar(100) NOT NULL, `stream` varchar(100) NOT NULL, `image` varchar(200) NOT NULL, - `google_calendar` varchar(100) NOT NULL, `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `modified_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) USING BTREE, @@ -1322,7 +1322,7 @@ CREATE TABLE `calcms_studios` ( LOCK TABLES `calcms_studios` WRITE; /*!40000 ALTER TABLE `calcms_studios` DISABLE KEYS */; -INSERT INTO `calcms_studios` (`id`, `name`, `description`, `location`, `stream`, `image`, `google_calendar`, `created_at`, `modified_at`) VALUES (1,'My Studio','My Radio Studio','studio','','','https://my-radio.org',NULL,'2023-02-19 21:17:18'); +INSERT INTO `calcms_studios` (`id`, `name`, `description`, `location`, `stream`, `image`, `created_at`, `modified_at`) VALUES (1,'My Studio','My Radio Studio','studio','','',NULL,'2023-02-19 21:17:18'); /*!40000 ALTER TABLE `calcms_studios` ENABLE KEYS */; UNLOCK TABLES; @@ -1770,7 +1770,7 @@ UNLOCK TABLES; -- Dump completed on 2023-02-19 23:01:42 -CREATE TABLE `coloradio`.`calcms_help_texts` ( +CREATE TABLE `calcms_help_texts` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `project_id` INT UNSIGNED NOT NULL, `studio_id` INT UNSIGNED NOT NULL, diff --git a/install/migrate.sql b/install/migrate.sql index 78b4a4d..519c6db 100644 --- a/install/migrate.sql +++ b/install/migrate.sql @@ -274,23 +274,22 @@ ADD COLUMN `listen_key` VARCHAR(100) NULL; ALTER TABLE `calcms_audio_recordings` ADD COLUMN `active` TINYINT(1) NOT NULL DEFAULT 0 AFTER `event_id`; -ALTER TABLE `calcms`.`calcms_audio_recordings` +ALTER TABLE `calcms_audio_recordings` ADD INDEX `active_index` (`active`); -ALTER TABLE `calcms`.`calcms_events` +ALTER TABLE `calcms_events` DROP COLUMN `category_count`, DROP COLUMN `category`, DROP INDEX `category` ; -; -ALTER TABLE `calcms`.`calcms_event_history` + +ALTER TABLE `calcms_event_history` DROP COLUMN `category_count`, DROP COLUMN `category`, DROP INDEX `category` ; -; ALTER TABLE calcms_user_series DROP COLUMN active; -CREATE TABLE `coloradio`.`calcms_help_texts` ( +CREATE TABLE `calcms_help_texts` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `project_id` INT UNSIGNED NOT NULL, `studio_id` INT UNSIGNED NOT NULL, @@ -301,3 +300,9 @@ CREATE TABLE `coloradio`.`calcms_help_texts` ( PRIMARY KEY (`id`)); ALTER TABLE `calcms_roles` ADD COLUMN `edit_help_texts` INT(1) UNSIGNED NOT NULL; + +-- admin roles +ALTER TABLE `calcms_roles` ADD COLUMN `admin` INT(1) UNSIGNED NOT NULL DEFAULT 0 AFTER `level`; +update calcms_roles set admin=1 where role = 'Admin'; + +ALTER TABLE calcms_studios DROP COLUMN google_calendar; diff --git a/lib/calcms/events.pm b/lib/calcms/events.pm index 341c88f..d5c0b77 100644 --- a/lib/calcms/events.pm +++ b/lib/calcms/events.pm @@ -1841,3 +1841,4 @@ sub get_keys($) { #do not delete last line! 1; + diff --git a/lib/calcms/roles.pm b/lib/calcms/roles.pm deleted file mode 100644 index eb3f1a6..0000000 --- a/lib/calcms/roles.pm +++ /dev/null @@ -1,162 +0,0 @@ -package roles; - -use strict; -use warnings; -no warnings 'redefine'; - -use Apache2::Reload(); - -use config(); - -#use base 'Exporter'; -my @EXPORT_OK = qw(get_user get_user_permissions get_template_parameters get_jobs); - -my $ROLES = { - 'admin' => { - access_events => 1, - access_images => 1, - access_comments => 1, - access_sync => 1, - access_system => 1, - read_event_all => 1, - create_event => 1, - delete_event => 1, - update_comment => 1, - create_image => 1, - read_image_own => 1, - read_image_all => 1, - update_image_own => 1, - update_image_all => 1, - delete_image_own => 1, - delete_image_all => 1, - sync_own => 1, - sync_all => 1, - sync_select_range => 1, - upload_playlist => 1, - }, - 'dev' => { - access_events => 1, - access_images => 1, - access_comments => 1, - access_sync => 1, - access_system => 0, - read_event_all => 1, - create_event => 1, - delete_event => 1, - update_comment => 1, - create_image => 1, - read_image_own => 1, - read_image_all => 1, - update_image_own => 1, - update_image_all => 1, - delete_image_own => 1, - delete_image_all => 1, - sync_own => 0, - sync_all => 1, - sync_select_range => 1, - upload_playlist => 1, - }, - 'editor' => { - access_events => 1, - access_images => 1, - access_comments => 1, - access_sync => 1, - access_system => 0, - read_event_all => 0, - create_event => 1, - delete_event => 0, - update_comment => 0, - create_image => 1, - read_image_own => 1, - read_image_all => 1, - update_image_own => 1, - update_image_all => 0, - delete_image_own => 1, - delete_image_all => 0, - sync_own => 1, - sync_all => 0, - sync_select_range => 0, - upload_playlist => 1, - }, - 'nobody' => { - access_events => 0, - access_images => 0, - access_comments => 0, - access_sync => 0, - access_system => 0, - read_event_all => 0, - create_event => 0, - delete_event => 0, - update_comment => 0, - create_image => 0, - read_image_own => 0, - read_image_all => 0, - update_image_own => 0, - update_image_all => 0, - delete_image_own => 0, - delete_image_all => 0, - sync_own => 0, - sync_all => 0, - sync_select_range => 0, - upload_playlist => 0, - } -}; - -sub get_user($) { - my $config = shift; - - my $user = $ENV{REMOTE_USER}; - my $users = $config->{users}; - return $user if defined $users->{$user}; - return 'nobody'; -} - -sub get_user_permissions($) { - my $config = shift; - - my $user = $ENV{REMOTE_USER} || ''; - my $roles = $roles::ROLES; - return $roles->{nobody} unless $user =~ /\S/; - my $users = $config->{users}; - if ( defined $users->{$user} ) { - my $role = $users->{$user}; - return $roles->{$role} if defined $roles->{$role}; - } - return $roles->{nobody}; -} - -sub get_user_jobs ($;$) { - my $config = shift; - - my $user = $ENV{REMOTE_USER} || ''; - return [] unless ( $user =~ /\S/ ); - my $result = []; - my $jobs = $config->{jobs}->{job}; - - for my $job (@$jobs) { - for my $job_user ( split /\,/, $job->{users} ) { - push @$result, $job if ( $user eq $job_user ); - } - } - return $result; -} - -sub get_jobs($) { - my $config = shift; - - return $config->{jobs}->{job}; -} - -sub get_template_parameters($$) { - my $config = shift; - my $user_permissions = shift; - - $user_permissions = roles::get_user_permissions($config) unless defined $user_permissions; - my @user_permissions = (); - for my $usecase ( keys %$user_permissions ) { - push @user_permissions, $usecase if $user_permissions->{$usecase} eq '1'; - } - return \@user_permissions; -} - -return 1; diff --git a/lib/calcms/template.pm b/lib/calcms/template.pm index 74e797e..8b3f668 100644 --- a/lib/calcms/template.pm +++ b/lib/calcms/template.pm @@ -18,7 +18,6 @@ use config(); use params(); use project(); use log(); -use roles(); #use base 'Exporter'; our @EXPORT_OK = qw(check process exit_on_missing_permission clear_cache); @@ -45,26 +44,6 @@ sub process($$$$) { $params->{user} = $ENV{REMOTE_USER} unless defined $params->{user}; - my $user_permissions = roles::get_user_permissions($config); - for my $permission ( keys %$user_permissions ) { - $params->{$permission} = $user_permissions->{$permission} - if ( $user_permissions->{$permission} eq '1' ); - } - - $params->{jobs} = roles::get_user_jobs($config); - if ( ( $filename =~ /json\-p/ ) || (params::isJson) ) { - my $header = "Content-type:application/json; charset=utf-8\n\n"; - my $json = JSON->new->pretty(1)->canonical()->encode($params); - - $json = $header . $params->{json_callback} . $json; - if ( ( defined $_[1] ) && ( $_[1] eq 'print' ) ) { - print $json. "\n"; - } else { - $_[1] = $json . "\n"; - } - return; - } - unless ( -r $filename ) { log::error( $config, qq{template "$filename" does not exist} ) unless -e $filename; log::error( $config, qq{missing permissions to read "$filename"} ); @@ -207,22 +186,5 @@ sub check($;$$) { return $template; } -#deprecated (for old admin only) -sub exit_on_missing_permission($$) { - my $config = shift; - my $permission = shift; - - my $user_permissions = roles::get_user_permissions($config); - if ( $user_permissions->{$permission} ne '1' ) { - print STDERR "missing permission to $permission\n"; - template::process( - $config, 'print', - template::check( $config, 'default.html' ), - { error => 'sorry, missing permission!' } - ); - die(); - } -} - #do not delete last line! 1; diff --git a/lib/calcms/uac.pm b/lib/calcms/uac.pm index 9dc1f06..cb4f837 100644 --- a/lib/calcms/uac.pm +++ b/lib/calcms/uac.pm @@ -456,7 +456,7 @@ sub get_admin_user_roles ($$) { my $query = qq{ select distinct r.*, ur.studio_id, ur.project_id from calcms_users u, calcms_user_roles ur, calcms_roles r - where ur.user_id=u.id and ur.role_id=r.id and r.role='Admin' + where ur.user_id=u.id and ur.role_id=r.id and r.admin=1 $conditions limit 1 }; @@ -735,6 +735,11 @@ sub get_user_presets($$) { my $permissions = uac::get_user_permissions( $config, { user => $user, project_id => $project_id, studio_id => $studio_id } ); + if ($permissions->{admin} == 1) { + for my $key (keys %$permissions) { + $permissions->{$key} = 1; + } + } #only admin is allowed to select all projects # if($permissions->{is_admin}==1){ diff --git a/tools/remove-recordings.pl b/tools/remove-recordings.pl new file mode 100644 index 0000000..f6c58eb --- /dev/null +++ b/tools/remove-recordings.pl @@ -0,0 +1,42 @@ +#! /usr/bin/perl + +use warnings; +use strict; +use Data::Dumper; +use List::Util qw(); + +use FindBin qw($Bin); +use lib "$Bin/../lib/calcms"; +use config; +use time; +use db; +use File::Basename qw(basename); +my $config = config::get(pop @ARGV); +my $delete = grep {$_ eq "--delete"} @ARGV; + +my $dbh = db::connect($config); +my $query = qq{ + select start, path + from calcms_events e, calcms_audio_recordings r + where e.id = r.event_id + and e.start > date_add(now(), INTERVAL -14 DAY) +}; +my $entries = db::get($dbh, $query); +my %paths = map {normalize($_->{path}) => $_->{start}} @$entries; + +my $dir = $config->{locations}->{local_audio_recordings_dir}; +for my $file (sort glob("$dir/*m4a")) { + next if -M $file < 14; + my $filename = normalize($file); + unless (exists $paths{$filename}) { + print " --- $filename\n"; + unlink $file or die $! if $delete; + } +} + +sub normalize { + my $s = shift; + $s = basename $s; + $s =~ s/\.master(\.\w+)$/$1/; + return $s; +} diff --git a/website/agenda/config/config.cgi.off b/website/agenda/config/config.cgi.off index c8074ca..4fe18d4 100755 --- a/website/agenda/config/config.cgi.off +++ b/website/agenda/config/config.cgi.off @@ -72,6 +72,7 @@ domain ${DOMAIN} # multi language support admin_pot_dir ${BASE_DIR}/agenda/planung/pot/ email info@${DOMAIN} + event_sender_email programm@${DOMAIN} theme default diff --git a/website/agenda/planung/assign-series.cgi b/website/agenda/planung/assign-series.cgi index 075a713..1c60f2e 100755 --- a/website/agenda/planung/assign-series.cgi +++ b/website/agenda/planung/assign-series.cgi @@ -15,7 +15,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use project(); use studios(); use events(); diff --git a/website/agenda/planung/assignments.cgi b/website/agenda/planung/assignments.cgi index c8c4213..1b12bb3 100755 --- a/website/agenda/planung/assignments.cgi +++ b/website/agenda/planung/assignments.cgi @@ -14,7 +14,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use project(); use studios(); use events(); diff --git a/website/agenda/planung/calendar.cgi b/website/agenda/planung/calendar.cgi index 092d11f..bf58fc9 100755 --- a/website/agenda/planung/calendar.cgi +++ b/website/agenda/planung/calendar.cgi @@ -20,7 +20,6 @@ use template(); use calendar(); use auth(); use uac(); -use roles(); use project(); use studios(); use events(); diff --git a/website/agenda/planung/event.cgi b/website/agenda/planung/event.cgi index 8770a96..e06d651 100755 --- a/website/agenda/planung/event.cgi +++ b/website/agenda/planung/event.cgi @@ -20,7 +20,6 @@ use db(); use auth(); use uac(); -#use roles; use time(); use markup(); use project(); diff --git a/website/agenda/planung/help.cgi b/website/agenda/planung/help.cgi index ed2ce3b..9b2b9b7 100755 --- a/website/agenda/planung/help.cgi +++ b/website/agenda/planung/help.cgi @@ -14,7 +14,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use studios(); use markup(); use localization(); diff --git a/website/agenda/planung/notify-events.cgi b/website/agenda/planung/notify-events.cgi index 5741281..ff6366a 100755 --- a/website/agenda/planung/notify-events.cgi +++ b/website/agenda/planung/notify-events.cgi @@ -202,12 +202,12 @@ sub getMail { $event->{noRecipient} = 1; return; } - + my $sender = $config->{location}->{event_sender_email}; my $mail = { - 'From' => 'programm@radiopiloten.de', + 'From' => $sender, 'To' => join( ', ', @$userMails ), - 'Cc' => 'programm@radiopiloten.de', - 'Reply-To' => 'programm@radiopiloten.de', + 'Cc' => $sender, + 'Reply-To' => $sender, 'Subject' => "$event->{start} - $event->{full_title}", 'Data' => "Hallo " . join( ' und ', @$userNames ) . ",\n\n" }; diff --git a/website/agenda/planung/playout.cgi b/website/agenda/planung/playout.cgi index ef07329..9d123f5 100755 --- a/website/agenda/planung/playout.cgi +++ b/website/agenda/planung/playout.cgi @@ -15,7 +15,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use project(); use studios(); use events(); diff --git a/website/agenda/planung/pot/de/studios.po b/website/agenda/planung/pot/de/studios.po index 52281d4..c94daa4 100644 --- a/website/agenda/planung/pot/de/studios.po +++ b/website/agenda/planung/pot/de/studios.po @@ -40,6 +40,3 @@ msgstr "Logo" msgid "label_stream" msgstr "Stream-URL" -msgid "label_google_calendar" -msgstr "Google Kalender" - diff --git a/website/agenda/planung/pot/en/studios.po b/website/agenda/planung/pot/en/studios.po index 278f28d..16beb46 100644 --- a/website/agenda/planung/pot/en/studios.po +++ b/website/agenda/planung/pot/en/studios.po @@ -39,7 +39,3 @@ msgstr "image" msgid "label_stream" msgstr "stream" - -msgid "label_google_calendar" -msgstr "google_calendar" - diff --git a/website/agenda/planung/projects.cgi b/website/agenda/planung/projects.cgi index f48ac9d..2db400f 100755 --- a/website/agenda/planung/projects.cgi +++ b/website/agenda/planung/projects.cgi @@ -12,7 +12,6 @@ use params(); use log(); use template(); use auth(); -use roles(); use uac(); use studios(); use series(); @@ -26,7 +25,6 @@ my $config = config::get('../config/config.cgi'); my ( $user, $expires ) = auth::get_user( $config, $params, $cgi ); return if ( $user eq '' ); -my $permissions = roles::get_user_permissions($config); my $user_presets = uac::get_user_presets( $config, { diff --git a/website/agenda/planung/roles.cgi b/website/agenda/planung/roles.cgi index 5cce20a..ba02fb1 100755 --- a/website/agenda/planung/roles.cgi +++ b/website/agenda/planung/roles.cgi @@ -12,7 +12,6 @@ use entry(); use log(); use template(); use auth(); -use roles(); use uac(); use studios(); use localization(); @@ -152,8 +151,14 @@ sub save_roles { } } elsif ( $column eq 'role' ) { $values->{$id}->{$column} = $value; + } elsif ( $column eq 'admin' ) { + if ( $permissions->{is_admin} ){ + $values->{$id}->{$column} = $value; + } else { + uac::permissions_denied("set admin!"); + return; + } } elsif ( $column eq 'id' || $column eq 'project_id' || $column eq 'studio_id' ) { - #id and studio id will be set later } else { $values->{$id}->{$column} = 1 if ( $value =~ /^\d+$/ ); @@ -310,7 +315,6 @@ sub show_roles { } for my $role (@$roles) { - my $id = $role->{id} || ''; my $value = $role->{role} || ''; my $style = ''; diff --git a/website/agenda/planung/series.cgi b/website/agenda/planung/series.cgi index 631aa54..538cc89 100755 --- a/website/agenda/planung/series.cgi +++ b/website/agenda/planung/series.cgi @@ -16,7 +16,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use project(); use studios(); use events(); diff --git a/website/agenda/planung/studio-timeslots.cgi b/website/agenda/planung/studio-timeslots.cgi index 8903ee6..91cf393 100755 --- a/website/agenda/planung/studio-timeslots.cgi +++ b/website/agenda/planung/studio-timeslots.cgi @@ -14,7 +14,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use project(); use studios(); use studio_timeslot_schedule(); diff --git a/website/agenda/planung/studios.cgi b/website/agenda/planung/studios.cgi index e016cb1..9017967 100755 --- a/website/agenda/planung/studios.cgi +++ b/website/agenda/planung/studios.cgi @@ -12,7 +12,6 @@ use params(); use log(); use template(); use auth(); -use roles(); use uac(); use studios(); use series(); @@ -26,7 +25,6 @@ my $config = config::get('../config/config.cgi'); my ( $user, $expires ) = auth::get_user( $config, $params, $cgi ); return if ( $user eq '' ); -my $permissions = roles::get_user_permissions($config); my $user_presets = uac::get_user_presets( $config, { @@ -220,7 +218,7 @@ sub check_params { $checked->{action} = entry::element_of( $params->{action}, ['save', 'delete']); entry::set_strings( $checked, $params, [ - 'name', 'description', 'location', 'stream', 'google_calendar', 'image', 'setImage' ]); + 'name', 'description', 'location', 'stream', 'image', 'setImage' ]); entry::set_numbers( $checked, $params, [ 'project_id', 'studio_id', 'default_studio_id', 'id' diff --git a/website/agenda/planung/user-settings.cgi b/website/agenda/planung/user-settings.cgi index 29245ca..d123ae8 100755 --- a/website/agenda/planung/user-settings.cgi +++ b/website/agenda/planung/user-settings.cgi @@ -13,7 +13,6 @@ use template(); use auth(); use entry(); use uac(); -use roles(); use project(); use studios(); use params(); diff --git a/website/agenda/planung/user-stats.cgi b/website/agenda/planung/user-stats.cgi index 255faa8..ca26920 100755 --- a/website/agenda/planung/user-stats.cgi +++ b/website/agenda/planung/user-stats.cgi @@ -12,7 +12,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use project(); use studios(); use params(); diff --git a/website/agenda/planung/users.cgi b/website/agenda/planung/users.cgi index e5eff65..e25d6ac 100755 --- a/website/agenda/planung/users.cgi +++ b/website/agenda/planung/users.cgi @@ -12,7 +12,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use studios(); use params(); use localization(); diff --git a/website/agenda/planung/work-time.cgi b/website/agenda/planung/work-time.cgi index c295cb0..fee2fba 100755 --- a/website/agenda/planung/work-time.cgi +++ b/website/agenda/planung/work-time.cgi @@ -13,7 +13,6 @@ use log(); use template(); use auth(); use uac(); -use roles(); use project(); use studios(); use work_schedule();