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