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