PluginProbe
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration / 2.1.0
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration v2.1.0
2.1.0 2.0.15 2.0.12 2.0.10 2.0.4 2.0.1 2.0.0 1.95.3 1.95.2 1.95 1.91.6 trunk 1.11 1.12 1.13 1.20 1.21 1.22 1.23 1.30 1.31 1.32 1.35 1.40 1.41 All 42 releases
← All changes | app/Services/Constant.php +171 -35 1.322.1.0 View file →
@@ -18,8 +18,9 @@
18 18 const ACTIVITY_TASK = 'task_activity';
19 19 const ACTIVITY_BOARD = 'board_activity';
20 20
21 21 const TASK_ASSIGNEE = 'task_assignee';
22 + const TASK_SOURCE_FLUENT_SUPPORT = 'FluentSupport';
22 23
23 24 const OBJECT_TYPE_BOARD_USER_EMAIL_NOTIFICATION = 'board_user_email';
24 25 const OBJECT_TYPE_BOARD_USER_NOTIFICATION = 'board_user_notification';
25 26 const OBJECT_TYPE_TASK_ASSIGNEE = 'task_assignee';
@@ -30,9 +31,8 @@
30 31
31 32 const TASK_WATCH_NOTIFICATION_TYPES = [
32 33 'comment_add' => true,
33 34 'comment_update' => true,
34 - 'description_update' => true,
35 35 'title_change' => true,
36 36 'move_to_another_board' => true,
37 37 'Label' => true,
38 38 'due_at' => true,
@@ -54,13 +54,20 @@
54 54 const OBJECT_TYPE_BOARD_NOTIFICATION = 'board_notification';
55 55
56 56 const OBJECT_TYPE_USER_TASK_WATCH = 'task_user_watch';
57 57
58 + const OBJECT_TYPE_TASK_DEPENDENCY = 'task_dependency';
59 +
58 60 const IS_TASK_TEMPLATE = 'is_template';
61 + const IS_TASK_PINNED = 'is_pinned';
59 62
60 63 const BOARD_USER_SETTINGS = [
61 64 'is_admin' => false
62 65 ];
66 + const BOARD_USER_VIEWER_ONLY_SETTINGS = [
67 + 'is_admin' => false,
68 + 'is_viewer_only' => true
69 + ];
63 70
64 71 const FLUENT_BOARD_ADMIN = 'fluent_board_admin';
65 72
66 73 const IS_BOARD_ADMIN = 'is_admin';
@@ -68,8 +75,11 @@
68 75 const USER_RECENT_BOARDS = 'user_recent_boards';
69 76 const USER_GLOBAL_NOTIFICATIONS = 'user_global_notifications';
70 77
71 78 const OBJECT_TYPE_BOARD = 'board';
79 +
80 + const OBJECT_TYPE_FOLDER = 'folder';
81 + const OBJECT_TYPE_FOLDER_BOARD = 'FluentBoardsPro\App\Models\Folder';
72 82 const OBJECT_TYPE_TASK = 'TASK';
73 83 const CRM_CONTACT = 'crm_subscriber';
74 84 const CRM_CONTACT_ASSOCIATED_BOARD = 'contact_associated_board';
75 85 const BOARD_ASSOCIATED_CRM_CONTACT = 'board_associated_contact';
@@ -81,16 +91,39 @@
81 91 const GLOBAL_EMAIL_NOTIFICATION_STAGE_CHANGE = 'email_after_task_stage_change';
82 92 const GLOBAL_EMAIL_NOTIFICATION_DUE_DATE = 'email_after_task_due_date_change';
83 93 const GLOBAL_EMAIL_NOTIFICATION_REMOVE_FROM_TASK = 'email_after_remove_from_task';
84 94 const GLOBAL_EMAIL_NOTIFICATION_TASK_ARCHIVE = 'email_after_task_archive';
95 + const GLOBAL_EMAIL_NOTIFICATION_CREATING_TASK = 'watch_on_creating_task';
96 + const GLOBAL_EMAIL_NOTIFICATION_COMMENTING = 'watch_on_commenting';
97 + const GLOBAL_EMAIL_NOTIFICATION_ASSIGNING= 'watch_on_assigning';
85 98 const GLOBAL_DASHBOARD_NOTIFICATION = 'dashboard_notification';
86 99
87 100 const USER_DASHBOARD_VIEW = 'user_dashboard_view';
88 101
102 + const USER_LISTVIEW_PREFERENCES = 'user_listview_preferences';
103 + const USER_TABLEVIEW_PREFERENCES = 'user_tableview_preferences';
89 104
90 - const BOARD_DEFAULT_IMAGE = 'board_default_image';
91 - const BOARD_DEFAULT_IMAGE_URL = 'https://fluentboards.com/shared-files/';
105 + const DEFAULT_DASHBOARD_VIEW_PREFERENCES = [
106 + 'dashboard_view_label' => true,
107 + 'dashboard_view_priority' => true,
108 + 'dashboard_view_assignee' => true,
109 + 'dashboard_view_subtask' => true,
110 + 'dashboard_view_attachment' => true,
111 + 'dashboard_view_due_date' => true,
112 + 'dashboard_view_comment' => true,
113 + 'dashboard_view_notification' => true
114 + ];
92 115
116 + const DEFAULT_TABLEVIEW_VIEW_PREFERENCES = [
117 + 'table_view_priority' => true,
118 + 'table_view_status' => true,
119 + 'table_view_dates' => true,
120 + 'table_view_assignees' => true,
121 + 'table_view_labels' => true,
122 + 'table_view_created_at' => true,
123 + 'table_view_subtasks' => false,
124 + 'table_view_activity' => false,
125 + ];
93 126
94 127 const TRELLO_COLOR_MAP = [
95 128 "green" => "#4bce97",
96 129 "yellow" => "#f5cd47",
@@ -156,103 +189,180 @@
156 189 "pink_light" => "#1B2533",
157 190 "black_light" => "#1B2533"
158 191 ];
159 192
193 + const LABEL_COLOR_PRESET_SETTING = 'color_preset';
160 194
195 + /**
196 + * Theme-aware label colors in the same order shown by the label picker.
197 + *
198 + * The persisted preset ID is stable; the UI selects the light or dark
199 + * pair at render time. The light pair is also stored as a compatibility
200 + * fallback for integrations and older clients.
201 + */
202 + const LABEL_COLOR_PRESETS = [
203 + ['id' => 'green-soft', 'light_bg_color' => '#C1EED9', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#234030', 'dark_text_color' => '#FFFFFF'],
204 + ['id' => 'yellow-soft', 'light_bg_color' => '#F1E593', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#463817', 'dark_text_color' => '#FFFFFF'],
205 + ['id' => 'orange-soft', 'light_bg_color' => '#F7E0A8', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#562F15', 'dark_text_color' => '#FFFFFF'],
206 + ['id' => 'red-soft', 'light_bg_color' => '#F6D2CE', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#4B211D', 'dark_text_color' => '#FFFFFF'],
207 + ['id' => 'purple-soft', 'light_bg_color' => '#E6D3F7', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#3A234F', 'dark_text_color' => '#FFFFFF'],
208 + ['id' => 'green-bold', 'light_bg_color' => '#70C392', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#366048', 'dark_text_color' => '#FFFFFF'],
209 + ['id' => 'yellow-bold', 'light_bg_color' => '#E4CA59', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#6F5523', 'dark_text_color' => '#FFFFFF'],
210 + ['id' => 'orange-bold', 'light_bg_color' => '#EBA146', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#874922', 'dark_text_color' => '#FFFFFF'],
211 + ['id' => 'red-bold', 'light_bg_color' => '#E17066', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#95362D', 'dark_text_color' => '#FFFFFF'],
212 + ['id' => 'purple-bold', 'light_bg_color' => '#B579E7', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#6B3E92', 'dark_text_color' => '#FFFFFF'],
213 + ['id' => 'green-strong', 'light_bg_color' => '#3F7654', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#70C392', 'dark_text_color' => '#1B2533'],
214 + ['id' => 'yellow-strong', 'light_bg_color' => '#826429', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#CFAA47', 'dark_text_color' => '#1B2533'],
215 + ['id' => 'orange-strong', 'light_bg_color' => '#A6572A', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#EBA146', 'dark_text_color' => '#1B2533'],
216 + ['id' => 'red-strong', 'light_bg_color' => '#AF4035', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#E17066', 'dark_text_color' => '#1B2533'],
217 + ['id' => 'purple-strong', 'light_bg_color' => '#8049AE', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#B579E7', 'dark_text_color' => '#1B2533'],
218 + ['id' => 'blue-soft', 'light_bg_color' => '#CCDDF9', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#1A2D53', 'dark_text_color' => '#FFFFFF'],
219 + ['id' => 'sky-soft', 'light_bg_color' => '#C9E8F7', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#223B49', 'dark_text_color' => '#FFFFFF'],
220 + ['id' => 'lime-soft', 'light_bg_color' => '#D5ECAA', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#333E22', 'dark_text_color' => '#FFFFFF'],
221 + ['id' => 'pink-soft', 'light_bg_color' => '#F4CDE6', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#402436', 'dark_text_color' => '#FFFFFF'],
222 + ['id' => 'gray-soft', 'light_bg_color' => '#D8D9DC', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#424446', 'dark_text_color' => '#FFFFFF'],
223 + ['id' => 'blue-bold', 'light_bg_color' => '#6A93E3', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#294FA9', 'dark_text_color' => '#FFFFFF'],
224 + ['id' => 'sky-bold', 'light_bg_color' => '#7BB9D6', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#345E73', 'dark_text_color' => '#FFFFFF'],
225 + ['id' => 'lime-bold', 'light_bg_color' => '#97BD5C', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#4A5F2B', 'dark_text_color' => '#FFFFFF'],
226 + ['id' => 'pink-bold', 'light_bg_color' => '#D172AE', 'light_text_color' => '#1B2533', 'dark_bg_color' => '#7D3D65', 'dark_text_color' => '#FFFFFF'],
227 + ['id' => 'gray-bold', 'light_bg_color' => '#81848B', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#595B60', 'dark_text_color' => '#FFFFFF'],
228 + ['id' => 'blue-strong', 'light_bg_color' => '#305FCA', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#6A93E3', 'dark_text_color' => '#1B2533'],
229 + ['id' => 'sky-strong', 'light_bg_color' => '#3D708B', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#7BB9D6', 'dark_text_color' => '#1B2533'],
230 + ['id' => 'lime-strong', 'light_bg_color' => '#5A7133', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#97BD5C', 'dark_text_color' => '#1B2533'],
231 + ['id' => 'pink-strong', 'light_bg_color' => '#964878', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#D172AE', 'dark_text_color' => '#1B2533'],
232 + ['id' => 'gray-strong', 'light_bg_color' => '#60636A', 'light_text_color' => '#FFFFFF', 'dark_bg_color' => '#8B8E93', 'dark_text_color' => '#1B2533'],
233 + ];
234 +
235 + /**
236 + * Find a predefined label color by its persisted ID.
237 + *
238 + * @param string $presetId
239 + * @return array|null
240 + */
241 + public static function getLabelColorPreset($presetId)
242 + {
243 + foreach (self::LABEL_COLOR_PRESETS as $preset) {
244 + if ($preset['id'] === $presetId) {
245 + return $preset;
246 + }
247 + }
248 +
249 + return null;
250 + }
251 +
252 +
161 253 const FBS_ONBOARDING = 'fbs_onboarding';
162 254 const FBS_RECENTLY_VIEWED_CHECK = 'fbs_recently_viewed_checked';
163 255 const BOARD_BACKGROUND_DEFAULT_SOLID_COLORS = [
164 256 [
165 257 'id' => 'solid_1',
166 - 'value' => '#d1d8e0'
258 + 'value' => '#6A88A7',
259 + 'dark_value' => '#314253'
167 260 ],
168 261 [
169 262 'id' => 'solid_2',
170 - 'value' => '#ff9ff3'
263 + 'value' => '#9E7D61',
264 + 'dark_value' => '#574435'
171 265 ],
172 266 [
173 267 'id' => 'solid_3',
174 - 'value' => '#a55eea'
268 + 'value' => '#D24F7D',
269 + 'dark_value' => '#6A223C'
175 270 ],
176 271 [
177 272 'id' => 'solid_4',
178 - 'value' => '#5f27cd'
273 + 'value' => '#D7543D',
274 + 'dark_value' => '#772E21'
179 275 ],
180 276 [
181 277 'id' => 'solid_5',
182 - 'value' => '#706fd3'
278 + 'value' => '#B17720',
279 + 'dark_value' => '#614113'
183 280 ],
184 281 [
185 282 'id' => 'solid_6',
186 - 'value' => '#4b7bec'
283 + 'value' => '#8C8920',
284 + 'dark_value' => '#44420F'
187 285 ],
188 286 [
189 287 'id' => 'solid_7',
190 - 'value' => '#4640FB'
288 + 'value' => '#429B3A',
289 + 'dark_value' => '#1B4C17'
191 290 ],
192 291 [
193 292 'id' => 'solid_8',
194 - 'value' => '#474787'
293 + 'value' => '#259A77',
294 + 'dark_value' => '#114B39'
195 295 ],
196 296 [
197 297 'id' => 'solid_9',
198 - 'value' => '#3F1770'
298 + 'value' => '#259697',
299 + 'dark_value' => '#114949'
199 300 ],
200 301 [
201 302 'id' => 'solid_10',
202 - 'value' => '#182C61'
303 + 'value' => '#2491B6',
304 + 'dark_value' => '#114659'
203 305 ],
204 306 [
205 307 'id' => 'solid_11',
206 - 'value' => '#1B1464'
308 + 'value' => '#2682F1',
309 + 'dark_value' => '#0F3F79'
207 310 ],
208 311 [
209 312 'id' => 'solid_12',
210 - 'value' => '#2f3640'
313 + 'value' => '#7F6DEE',
314 + 'dark_value' => '#3D3379'
211 315 ],
212 316 [
213 317 'id' => 'solid_13',
214 - 'value' => '#043D4A'
318 + 'value' => '#A85ED1',
319 + 'dark_value' => '#532B6A'
215 320 ],
216 321 [
217 322 'id' => 'solid_14',
218 - 'value' => '#009432'
323 + 'value' => '#C156AB',
324 + 'dark_value' => '#612655'
219 325 ],
220 326 [
221 327 'id' => 'solid_15',
222 - 'value' => '#10ac84'
328 + 'value' => '#FB98EE',
329 + 'dark_value' => '#673361'
223 330 ],
224 331 [
225 332 'id' => 'solid_16',
226 - 'value' => '#ffc048'
333 + 'value' => '#522BC1',
334 + 'dark_value' => '#352678'
227 335 ],
228 336 [
229 337 'id' => 'solid_17',
230 - 'value' => '#ffb142'
338 + 'value' => '#3C40F3',
339 + 'dark_value' => '#222A8C'
231 340 ],
232 341 [
233 342 'id' => 'solid_18',
234 - 'value' => '#F48D45'
343 + 'value' => '#FCB84E',
344 + 'dark_value' => '#6D4C14'
235 345 ],
236 346 [
237 347 'id' => 'solid_19',
238 - 'value' => '#EF6A64'
348 + 'value' => '#FCA848',
349 + 'dark_value' => '#714714'
239 350 ],
240 351 [
241 352 'id' => 'solid_20',
242 - 'value' => '#ff5252'
353 + 'value' => '#EF8346',
354 + 'dark_value' => '#763B19'
243 355 ],
244 356 [
245 357 'id' => 'solid_21',
246 - 'value' => '#c23616'
358 + 'value' => '#B63220',
359 + 'dark_value' => '#681D22'
247 360 ],
248 361 [
249 362 'id' => 'solid_22',
250 - 'value' => 'hsla(238, 100%, 71%, 1)'
251 - ],
252 - [
253 - 'id' => 'solid_23',
254 - 'value' => 'hsla(171, 87%, 67%, 1)'
363 + 'value' => '#63F1D9',
364 + 'dark_value' => '#15584E'
255 365 ]
256 366 ];
257 367
258 368 const BOARD_BACKGROUND_DEFAULT_GRADIENT_COLORS = [
@@ -257,29 +367,35 @@
257 367
258 368 const BOARD_BACKGROUND_DEFAULT_GRADIENT_COLORS = [
259 369 [
260 370 'id' => 'gradient_1',
261 - 'value' => 'linear-gradient(111.53deg, #4A9B7F 2%, #0A3431 100%)',
371 + 'value' => 'linear-gradient(145deg, #479176 0%, #0F2C2B 100%)',
372 + 'dark_value' => 'linear-gradient(145deg, #156A4F 0%, #0D302F 100%)',
262 373 ],
263 374 [
264 375 'id' => 'gradient_2',
265 - 'value' => 'linear-gradient(135deg, #B57BEE -2.09%, #392D69 100%)',
376 + 'value' => 'linear-gradient(145deg, #A470E1 0%, #2E2758 100%)',
377 + 'dark_value' => 'linear-gradient(145deg, #7637B7 0%, #2A2650 100%)',
266 378 ],
267 379 [
268 380 'id' => 'gradient_3',
269 - 'value' => 'linear-gradient(111.53deg, #FD792F 0%, #F83D5C 98%)',
381 + 'value' => 'linear-gradient(145deg, #F86E35 0%, #F13855 98%)',
382 + 'dark_value' => 'linear-gradient(145deg, #9F3A13 0%, #580A18 98%)',
270 383 ],
271 384 [
272 385 'id' => 'gradient_4',
273 - 'value' => 'linear-gradient(140.25deg, #0968E5 0.02%, #020344 100%)',
386 + 'value' => 'linear-gradient(145deg, #145CD7 0%, #050634 100%)',
387 + 'dark_value' => 'linear-gradient(145deg, #1858B4 0%, #242155 100%)',
274 388 ],
275 389 [
276 390 'id' => 'gradient_5',
277 - 'value' => 'linear-gradient(90deg, hsla(238, 100%, 71%, 1) 0%, hsla(295, 100%, 84%, 1) 100%)',
391 + 'value' => 'linear-gradient(145deg, #5E69F9 0%, #F3A6FB 100%)',
392 + 'dark_value' => 'linear-gradient(145deg, #423EA7 0%, #4B1D50 100%)',
278 393 ],
279 394 [
280 395 'id' => 'gradient_6',
281 - 'value' => 'linear-gradient(90deg, hsla(171, 87%, 67%, 1) 0%, hsla(236, 100%, 72%, 1) 100%)',
396 + 'value' => 'linear-gradient(145deg, #62EED9 0%, #646FF9 100%)',
397 + 'dark_value' => 'linear-gradient(145deg, #187767 0%, #2A2660 100%)',
282 398 ]
283 399 ];
284 400
285 401 const ACTIVITY_ACTION_CREATED = 'created';
@@ -291,9 +407,29 @@
291 407 const TASK_DESCRIPTION = 'task_description';
292 408
293 409 const COMMENT_IMAGE = 'comment_image';
294 410
411 + const ATTACHMENT_UPLOAD_BOARD_ID = 'upload_board_id';
412 + const ATTACHMENT_UPLOAD_USER_ID = 'upload_user_id';
413 + const ATTACHMENT_LEGACY_SIGNATURE_QUERY_KEY = 'secure_sign';
414 + const ATTACHMENT_LEGACY_EXPIRES_QUERY_KEY = 'secure_expires';
415 +
295 416 const REPEAT_TASK_META = 'repeat_task';
296 417
297 418 const TASK_CUSTOM_FIELD = 'task_custom_field';
298 419
420 + const BOARD_CSV_EXPORT = 'csv_export';
421 + const BOARD_JSON_EXPORT = 'json_export';
422 + const BOARD_ATTACHMENT = 'BOARD';
423 +
424 + const BOARD_BACKGROUND_IMAGE = 'board_background_image';
425 + const FBS_TASK_TABS_CONFIG = "fbs_task_tabs_config";
426 +
427 + const FBS_OLD_SUBTASK_SYNC = 'fbs_old_subtask_sync';
428 +
429 + const SUBTASK_GROUP_NAME = 'group_name';
430 + const SUBTASK_GROUP_CHILD = 'subtask_group_id';
431 +
432 + const USER_PINNED_BOARDS = 'pinned_boards';
433 +
434 + const META_KEY_ARCHIVED_BY_STAGE = 'archived_by_stage';
299 435 }