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 +165 -35 1.412.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,9 +54,12 @@
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 ];
@@ -72,8 +75,11 @@
72 75 const USER_RECENT_BOARDS = 'user_recent_boards';
73 76 const USER_GLOBAL_NOTIFICATIONS = 'user_global_notifications';
74 77
75 78 const OBJECT_TYPE_BOARD = 'board';
79 +
80 + const OBJECT_TYPE_FOLDER = 'folder';
81 + const OBJECT_TYPE_FOLDER_BOARD = 'FluentBoardsPro\App\Models\Folder';
76 82 const OBJECT_TYPE_TASK = 'TASK';
77 83 const CRM_CONTACT = 'crm_subscriber';
78 84 const CRM_CONTACT_ASSOCIATED_BOARD = 'contact_associated_board';
79 85 const BOARD_ASSOCIATED_CRM_CONTACT = 'board_associated_contact';
@@ -85,16 +91,39 @@
85 91 const GLOBAL_EMAIL_NOTIFICATION_STAGE_CHANGE = 'email_after_task_stage_change';
86 92 const GLOBAL_EMAIL_NOTIFICATION_DUE_DATE = 'email_after_task_due_date_change';
87 93 const GLOBAL_EMAIL_NOTIFICATION_REMOVE_FROM_TASK = 'email_after_remove_from_task';
88 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';
89 98 const GLOBAL_DASHBOARD_NOTIFICATION = 'dashboard_notification';
90 99
91 100 const USER_DASHBOARD_VIEW = 'user_dashboard_view';
92 101
102 + const USER_LISTVIEW_PREFERENCES = 'user_listview_preferences';
103 + const USER_TABLEVIEW_PREFERENCES = 'user_tableview_preferences';
93 104
94 - const BOARD_DEFAULT_IMAGE = 'board_default_image';
95 - 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 + ];
96 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 + ];
97 126
98 127 const TRELLO_COLOR_MAP = [
99 128 "green" => "#4bce97",
100 129 "yellow" => "#f5cd47",
@@ -160,103 +189,180 @@
160 189 "pink_light" => "#1B2533",
161 190 "black_light" => "#1B2533"
162 191 ];
163 192
193 + const LABEL_COLOR_PRESET_SETTING = 'color_preset';
164 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 +
165 253 const FBS_ONBOARDING = 'fbs_onboarding';
166 254 const FBS_RECENTLY_VIEWED_CHECK = 'fbs_recently_viewed_checked';
167 255 const BOARD_BACKGROUND_DEFAULT_SOLID_COLORS = [
168 256 [
169 257 'id' => 'solid_1',
170 - 'value' => '#d1d8e0'
258 + 'value' => '#6A88A7',
259 + 'dark_value' => '#314253'
171 260 ],
172 261 [
173 262 'id' => 'solid_2',
174 - 'value' => '#ff9ff3'
263 + 'value' => '#9E7D61',
264 + 'dark_value' => '#574435'
175 265 ],
176 266 [
177 267 'id' => 'solid_3',
178 - 'value' => '#a55eea'
268 + 'value' => '#D24F7D',
269 + 'dark_value' => '#6A223C'
179 270 ],
180 271 [
181 272 'id' => 'solid_4',
182 - 'value' => '#5f27cd'
273 + 'value' => '#D7543D',
274 + 'dark_value' => '#772E21'
183 275 ],
184 276 [
185 277 'id' => 'solid_5',
186 - 'value' => '#706fd3'
278 + 'value' => '#B17720',
279 + 'dark_value' => '#614113'
187 280 ],
188 281 [
189 282 'id' => 'solid_6',
190 - 'value' => '#4b7bec'
283 + 'value' => '#8C8920',
284 + 'dark_value' => '#44420F'
191 285 ],
192 286 [
193 287 'id' => 'solid_7',
194 - 'value' => '#4640FB'
288 + 'value' => '#429B3A',
289 + 'dark_value' => '#1B4C17'
195 290 ],
196 291 [
197 292 'id' => 'solid_8',
198 - 'value' => '#474787'
293 + 'value' => '#259A77',
294 + 'dark_value' => '#114B39'
199 295 ],
200 296 [
201 297 'id' => 'solid_9',
202 - 'value' => '#3F1770'
298 + 'value' => '#259697',
299 + 'dark_value' => '#114949'
203 300 ],
204 301 [
205 302 'id' => 'solid_10',
206 - 'value' => '#182C61'
303 + 'value' => '#2491B6',
304 + 'dark_value' => '#114659'
207 305 ],
208 306 [
209 307 'id' => 'solid_11',
210 - 'value' => '#1B1464'
308 + 'value' => '#2682F1',
309 + 'dark_value' => '#0F3F79'
211 310 ],
212 311 [
213 312 'id' => 'solid_12',
214 - 'value' => '#2f3640'
313 + 'value' => '#7F6DEE',
314 + 'dark_value' => '#3D3379'
215 315 ],
216 316 [
217 317 'id' => 'solid_13',
218 - 'value' => '#043D4A'
318 + 'value' => '#A85ED1',
319 + 'dark_value' => '#532B6A'
219 320 ],
220 321 [
221 322 'id' => 'solid_14',
222 - 'value' => '#009432'
323 + 'value' => '#C156AB',
324 + 'dark_value' => '#612655'
223 325 ],
224 326 [
225 327 'id' => 'solid_15',
226 - 'value' => '#10ac84'
328 + 'value' => '#FB98EE',
329 + 'dark_value' => '#673361'
227 330 ],
228 331 [
229 332 'id' => 'solid_16',
230 - 'value' => '#ffc048'
333 + 'value' => '#522BC1',
334 + 'dark_value' => '#352678'
231 335 ],
232 336 [
233 337 'id' => 'solid_17',
234 - 'value' => '#ffb142'
338 + 'value' => '#3C40F3',
339 + 'dark_value' => '#222A8C'
235 340 ],
236 341 [
237 342 'id' => 'solid_18',
238 - 'value' => '#F48D45'
343 + 'value' => '#FCB84E',
344 + 'dark_value' => '#6D4C14'
239 345 ],
240 346 [
241 347 'id' => 'solid_19',
242 - 'value' => '#EF6A64'
348 + 'value' => '#FCA848',
349 + 'dark_value' => '#714714'
243 350 ],
244 351 [
245 352 'id' => 'solid_20',
246 - 'value' => '#ff5252'
353 + 'value' => '#EF8346',
354 + 'dark_value' => '#763B19'
247 355 ],
248 356 [
249 357 'id' => 'solid_21',
250 - 'value' => '#c23616'
358 + 'value' => '#B63220',
359 + 'dark_value' => '#681D22'
251 360 ],
252 361 [
253 362 'id' => 'solid_22',
254 - 'value' => 'hsla(238, 100%, 71%, 1)'
255 - ],
256 - [
257 - 'id' => 'solid_23',
258 - 'value' => 'hsla(171, 87%, 67%, 1)'
363 + 'value' => '#63F1D9',
364 + 'dark_value' => '#15584E'
259 365 ]
260 366 ];
261 367
262 368 const BOARD_BACKGROUND_DEFAULT_GRADIENT_COLORS = [
@@ -261,29 +367,35 @@
261 367
262 368 const BOARD_BACKGROUND_DEFAULT_GRADIENT_COLORS = [
263 369 [
264 370 'id' => 'gradient_1',
265 - '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%)',
266 373 ],
267 374 [
268 375 'id' => 'gradient_2',
269 - '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%)',
270 378 ],
271 379 [
272 380 'id' => 'gradient_3',
273 - '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%)',
274 383 ],
275 384 [
276 385 'id' => 'gradient_4',
277 - '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%)',
278 388 ],
279 389 [
280 390 'id' => 'gradient_5',
281 - '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%)',
282 393 ],
283 394 [
284 395 'id' => 'gradient_6',
285 - '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%)',
286 398 ]
287 399 ];
288 400
289 401 const ACTIVITY_ACTION_CREATED = 'created';
@@ -295,11 +407,29 @@
295 407 const TASK_DESCRIPTION = 'task_description';
296 408
297 409 const COMMENT_IMAGE = 'comment_image';
298 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 +
299 416 const REPEAT_TASK_META = 'repeat_task';
300 417
301 418 const TASK_CUSTOM_FIELD = 'task_custom_field';
302 419
303 420 const BOARD_CSV_EXPORT = 'csv_export';
421 + const BOARD_JSON_EXPORT = 'json_export';
422 + const BOARD_ATTACHMENT = 'BOARD';
304 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';
305 435 }