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