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