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 +124 -38 1.952.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,
@@ -77,8 +77,9 @@
77 77
78 78 const OBJECT_TYPE_BOARD = 'board';
79 79
80 80 const OBJECT_TYPE_FOLDER = 'folder';
81 + const OBJECT_TYPE_FOLDER_BOARD = 'FluentBoardsPro\App\Models\Folder';
81 82 const OBJECT_TYPE_TASK = 'TASK';
82 83 const CRM_CONTACT = 'crm_subscriber';
83 84 const CRM_CONTACT_ASSOCIATED_BOARD = 'contact_associated_board';
84 85 const BOARD_ASSOCIATED_CRM_CONTACT = 'board_associated_contact';
@@ -118,15 +119,12 @@
118 119 'table_view_dates' => true,
119 120 'table_view_assignees' => true,
120 121 'table_view_labels' => true,
121 122 'table_view_created_at' => true,
123 + 'table_view_subtasks' => false,
124 + 'table_view_activity' => false,
122 125 ];
123 126
124 -
125 - const BOARD_DEFAULT_IMAGE = 'board_default_image';
126 - const BOARD_DEFAULT_IMAGE_URL = 'https://fluentboards.com/shared-files/';
127 -
128 -
129 127 const TRELLO_COLOR_MAP = [
130 128 "green" => "#4bce97",
131 129 "yellow" => "#f5cd47",
132 130 "orange" => "#fea362",
@@ -191,103 +189,180 @@
191 189 "pink_light" => "#1B2533",
192 190 "black_light" => "#1B2533"
193 191 ];
194 192
193 + const LABEL_COLOR_PRESET_SETTING = 'color_preset';
195 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 +
196 253 const FBS_ONBOARDING = 'fbs_onboarding';
197 254 const FBS_RECENTLY_VIEWED_CHECK = 'fbs_recently_viewed_checked';
198 255 const BOARD_BACKGROUND_DEFAULT_SOLID_COLORS = [
199 256 [
200 257 'id' => 'solid_1',
201 - 'value' => '#d1d8e0'
258 + 'value' => '#6A88A7',
259 + 'dark_value' => '#314253'
202 260 ],
203 261 [
204 262 'id' => 'solid_2',
205 - 'value' => '#ff9ff3'
263 + 'value' => '#9E7D61',
264 + 'dark_value' => '#574435'
206 265 ],
207 266 [
208 267 'id' => 'solid_3',
209 - 'value' => '#a55eea'
268 + 'value' => '#D24F7D',
269 + 'dark_value' => '#6A223C'
210 270 ],
211 271 [
212 272 'id' => 'solid_4',
213 - 'value' => '#5f27cd'
273 + 'value' => '#D7543D',
274 + 'dark_value' => '#772E21'
214 275 ],
215 276 [
216 277 'id' => 'solid_5',
217 - 'value' => '#706fd3'
278 + 'value' => '#B17720',
279 + 'dark_value' => '#614113'
218 280 ],
219 281 [
220 282 'id' => 'solid_6',
221 - 'value' => '#4b7bec'
283 + 'value' => '#8C8920',
284 + 'dark_value' => '#44420F'
222 285 ],
223 286 [
224 287 'id' => 'solid_7',
225 - 'value' => '#4640FB'
288 + 'value' => '#429B3A',
289 + 'dark_value' => '#1B4C17'
226 290 ],
227 291 [
228 292 'id' => 'solid_8',
229 - 'value' => '#474787'
293 + 'value' => '#259A77',
294 + 'dark_value' => '#114B39'
230 295 ],
231 296 [
232 297 'id' => 'solid_9',
233 - 'value' => '#3F1770'
298 + 'value' => '#259697',
299 + 'dark_value' => '#114949'
234 300 ],
235 301 [
236 302 'id' => 'solid_10',
237 - 'value' => '#182C61'
303 + 'value' => '#2491B6',
304 + 'dark_value' => '#114659'
238 305 ],
239 306 [
240 307 'id' => 'solid_11',
241 - 'value' => '#1B1464'
308 + 'value' => '#2682F1',
309 + 'dark_value' => '#0F3F79'
242 310 ],
243 311 [
244 312 'id' => 'solid_12',
245 - 'value' => '#2f3640'
313 + 'value' => '#7F6DEE',
314 + 'dark_value' => '#3D3379'
246 315 ],
247 316 [
248 317 'id' => 'solid_13',
249 - 'value' => '#043D4A'
318 + 'value' => '#A85ED1',
319 + 'dark_value' => '#532B6A'
250 320 ],
251 321 [
252 322 'id' => 'solid_14',
253 - 'value' => '#009432'
323 + 'value' => '#C156AB',
324 + 'dark_value' => '#612655'
254 325 ],
255 326 [
256 327 'id' => 'solid_15',
257 - 'value' => '#10ac84'
328 + 'value' => '#FB98EE',
329 + 'dark_value' => '#673361'
258 330 ],
259 331 [
260 332 'id' => 'solid_16',
261 - 'value' => '#ffc048'
333 + 'value' => '#522BC1',
334 + 'dark_value' => '#352678'
262 335 ],
263 336 [
264 337 'id' => 'solid_17',
265 - 'value' => '#ffb142'
338 + 'value' => '#3C40F3',
339 + 'dark_value' => '#222A8C'
266 340 ],
267 341 [
268 342 'id' => 'solid_18',
269 - 'value' => '#F48D45'
343 + 'value' => '#FCB84E',
344 + 'dark_value' => '#6D4C14'
270 345 ],
271 346 [
272 347 'id' => 'solid_19',
273 - 'value' => '#EF6A64'
348 + 'value' => '#FCA848',
349 + 'dark_value' => '#714714'
274 350 ],
275 351 [
276 352 'id' => 'solid_20',
277 - 'value' => '#ff5252'
353 + 'value' => '#EF8346',
354 + 'dark_value' => '#763B19'
278 355 ],
279 356 [
280 357 'id' => 'solid_21',
281 - 'value' => '#c23616'
358 + 'value' => '#B63220',
359 + 'dark_value' => '#681D22'
282 360 ],
283 361 [
284 362 'id' => 'solid_22',
285 - 'value' => 'hsla(238, 100%, 71%, 1)'
286 - ],
287 - [
288 - 'id' => 'solid_23',
289 - 'value' => 'hsla(171, 87%, 67%, 1)'
363 + 'value' => '#63F1D9',
364 + 'dark_value' => '#15584E'
290 365 ]
291 366 ];
292 367
293 368 const BOARD_BACKGROUND_DEFAULT_GRADIENT_COLORS = [
@@ -292,29 +367,35 @@
292 367
293 368 const BOARD_BACKGROUND_DEFAULT_GRADIENT_COLORS = [
294 369 [
295 370 'id' => 'gradient_1',
296 - '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%)',
297 373 ],
298 374 [
299 375 'id' => 'gradient_2',
300 - '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%)',
301 378 ],
302 379 [
303 380 'id' => 'gradient_3',
304 - '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%)',
305 383 ],
306 384 [
307 385 'id' => 'gradient_4',
308 - '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%)',
309 388 ],
310 389 [
311 390 'id' => 'gradient_5',
312 - '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%)',
313 393 ],
314 394 [
315 395 'id' => 'gradient_6',
316 - '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%)',
317 398 ]
318 399 ];
319 400
320 401 const ACTIVITY_ACTION_CREATED = 'created';
@@ -325,8 +406,13 @@
325 406
326 407 const TASK_DESCRIPTION = 'task_description';
327 408
328 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';
329 415
330 416 const REPEAT_TASK_META = 'repeat_task';
331 417
332 418 const TASK_CUSTOM_FIELD = 'task_custom_field';