PluginProbe
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration / 2.2.0
FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration v2.2.0
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 1.40 All 43 releases
← All changes | app/Services/Constant.php +203 -35 1.12 → 2.2.0 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,101 +204,180 @@
156 204 "pink_light" => "#1B2533",
157 205 "black_light" => "#1B2533"
158 206 ];
159 207
208 + const LABEL_COLOR_PRESET_SETTING = 'color_preset';
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 +
160 268 const FBS_ONBOARDING = 'fbs_onboarding';
269 + const FBS_RECENTLY_VIEWED_CHECK = 'fbs_recently_viewed_checked';
161 270 const BOARD_BACKGROUND_DEFAULT_SOLID_COLORS = [
162 271 [
163 272 'id' => 'solid_1',
164 - 'value' => '#d1d8e0'
273 + 'value' => '#6A88A7',
274 + 'dark_value' => '#314253'
165 275 ],
166 276 [
167 277 'id' => 'solid_2',
168 - 'value' => '#ff9ff3'
278 + 'value' => '#9E7D61',
279 + 'dark_value' => '#574435'
169 280 ],
170 281 [
171 282 'id' => 'solid_3',
172 - 'value' => '#a55eea'
283 + 'value' => '#D24F7D',
284 + 'dark_value' => '#6A223C'
173 285 ],
174 286 [
175 287 'id' => 'solid_4',
176 - 'value' => '#5f27cd'
288 + 'value' => '#D7543D',
289 + 'dark_value' => '#772E21'
177 290 ],
178 291 [
179 292 'id' => 'solid_5',
180 - 'value' => '#706fd3'
293 + 'value' => '#B17720',
294 + 'dark_value' => '#614113'
181 295 ],
182 296 [
183 297 'id' => 'solid_6',
184 - 'value' => '#4b7bec'
298 + 'value' => '#8C8920',
299 + 'dark_value' => '#44420F'
185 300 ],
186 301 [
187 302 'id' => 'solid_7',
188 - 'value' => '#4640FB'
303 + 'value' => '#429B3A',
304 + 'dark_value' => '#1B4C17'
189 305 ],
190 306 [
191 307 'id' => 'solid_8',
192 - 'value' => '#474787'
308 + 'value' => '#259A77',
309 + 'dark_value' => '#114B39'
193 310 ],
194 311 [
195 312 'id' => 'solid_9',
196 - 'value' => '#3F1770'
313 + 'value' => '#259697',
314 + 'dark_value' => '#114949'
197 315 ],
198 316 [
199 317 'id' => 'solid_10',
200 - 'value' => '#182C61'
318 + 'value' => '#2491B6',
319 + 'dark_value' => '#114659'
201 320 ],
202 321 [
203 322 'id' => 'solid_11',
204 - 'value' => '#1B1464'
323 + 'value' => '#2682F1',
324 + 'dark_value' => '#0F3F79'
205 325 ],
206 326 [
207 327 'id' => 'solid_12',
208 - 'value' => '#2f3640'
328 + 'value' => '#7F6DEE',
329 + 'dark_value' => '#3D3379'
209 330 ],
210 331 [
211 332 'id' => 'solid_13',
212 - 'value' => '#043D4A'
333 + 'value' => '#A85ED1',
334 + 'dark_value' => '#532B6A'
213 335 ],
214 336 [
215 337 'id' => 'solid_14',
216 - 'value' => '#009432'
338 + 'value' => '#C156AB',
339 + 'dark_value' => '#612655'
217 340 ],
218 341 [
219 342 'id' => 'solid_15',
220 - 'value' => '#10ac84'
343 + 'value' => '#FB98EE',
344 + 'dark_value' => '#673361'
221 345 ],
222 346 [
223 347 'id' => 'solid_16',
224 - 'value' => '#ffc048'
348 + 'value' => '#522BC1',
349 + 'dark_value' => '#352678'
225 350 ],
226 351 [
227 352 'id' => 'solid_17',
228 - 'value' => '#ffb142'
353 + 'value' => '#3C40F3',
354 + 'dark_value' => '#222A8C'
229 355 ],
230 356 [
231 357 'id' => 'solid_18',
232 - 'value' => '#F48D45'
358 + 'value' => '#FCB84E',
359 + 'dark_value' => '#6D4C14'
233 360 ],
234 361 [
235 362 'id' => 'solid_19',
236 - 'value' => '#EF6A64'
363 + 'value' => '#FCA848',
364 + 'dark_value' => '#714714'
237 365 ],
238 366 [
239 367 'id' => 'solid_20',
240 - 'value' => '#ff5252'
368 + 'value' => '#EF8346',
369 + 'dark_value' => '#763B19'
241 370 ],
242 371 [
243 372 'id' => 'solid_21',
244 - 'value' => '#c23616'
373 + 'value' => '#B63220',
374 + 'dark_value' => '#681D22'
245 375 ],
246 376 [
247 377 'id' => 'solid_22',
248 - 'value' => 'hsla(238, 100%, 71%, 1)'
249 - ],
250 - [
251 - 'id' => 'solid_23',
252 - 'value' => 'hsla(171, 87%, 67%, 1)'
378 + 'value' => '#63F1D9',
379 + 'dark_value' => '#15584E'
253 380 ]
254 381 ];
255 382
256 383 const BOARD_BACKGROUND_DEFAULT_GRADIENT_COLORS = [
@@ -255,33 +382,74 @@
255 382
256 383 const BOARD_BACKGROUND_DEFAULT_GRADIENT_COLORS = [
257 384 [
258 385 'id' => 'gradient_1',
259 - '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%)',
260 388 ],
261 389 [
262 390 'id' => 'gradient_2',
263 - '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%)',
264 393 ],
265 394 [
266 395 'id' => 'gradient_3',
267 - '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%)',
268 398 ],
269 399 [
270 400 'id' => 'gradient_4',
271 - '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%)',
272 403 ],
273 404 [
274 405 'id' => 'gradient_5',
275 - '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%)',
276 408 ],
277 409 [
278 410 'id' => 'gradient_6',
279 - '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%)',
280 413 ]
281 414 ];
282 415
283 416 const ACTIVITY_ACTION_CREATED = 'created';
284 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';
285 422 const ACTIVITY_ACTION_DELETED = 'deleted';
286 423
424 + const TASK_ATTACHMENT = 'TASK';
425 +
426 + const TASK_DESCRIPTION = 'task_description';
427 +
428 + const COMMENT_IMAGE = 'comment_image';
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';
287 455 }