| @@ -198,8 +198,9 @@ | ||
| 198 | 198 | { |
| 199 | 199 | $fieldMaps = [ |
| 200 | 200 | 'bg_color' => 'sanitize_text_field', |
| 201 | 201 | 'color' => 'sanitize_text_field', |
| 202 | + 'color_preset' => 'sanitize_key', | |
| 202 | 203 | 'label' => 'sanitize_text_field', |
| 203 | 204 | 'boardId' => 'intval', |
| 204 | 205 | 'task_id' => 'intval', |
| 205 | 206 | 'meta_value' => 'intval', |
| @@ -240,10 +241,23 @@ | ||
| 240 | 241 | |
| 241 | 242 | return $data; |
| 242 | 243 | } |
| 243 | 244 | |
| 245 | + /** Store full custom-field messages in LONGTEXT while keeping legacy VARCHAR columns bounded. */ | |
| 244 | 246 | public static function createActivity($data) |
| 245 | 247 | { |
| 248 | + if (!empty($data['settings']['custom_field_id'])) { | |
| 249 | + $payload = []; | |
| 250 | + foreach (['column', 'old_value', 'new_value', 'description'] as $key) { | |
| 251 | + $payload[$key] = $data[$key] ?? null; | |
| 252 | + } | |
| 253 | + $data['settings']['custom_field_activity_payload'] = true; | |
| 254 | + $data['description'] = wp_json_encode($payload); | |
| 255 | + $data['column'] = Constant::ACTIVITY_CUSTOM_FIELD; | |
| 256 | + $data['old_value'] = null; | |
| 257 | + $data['new_value'] = null; | |
| 258 | + } | |
| 259 | + | |
| 246 | 260 | return Activity::create($data); |
| 247 | 261 | } |
| 248 | 262 | |
| 249 | 263 | public static function sanitizeTaskMeta($data) |
| @@ -334,8 +348,9 @@ | ||
| 334 | 348 | } |
| 335 | 349 | return fluent_boards_page_url() . 'boards/' . $boardId; |
| 336 | 350 | } |
| 337 | 351 | |
| 352 | + /** Format a CRM contact, avoiding a database lookup for unassociated tasks. */ | |
| 338 | 353 | public static function crm_contact($id) |
| 339 | 354 | { |
| 340 | 355 | if (!defined('FLUENTCRM')) { |
| 341 | 356 | return ''; |
| @@ -340,8 +355,12 @@ | ||
| 340 | 355 | if (!defined('FLUENTCRM')) { |
| 341 | 356 | return ''; |
| 342 | 357 | } |
| 343 | 358 | |
| 359 | + if (!$id) { | |
| 360 | + return null; | |
| 361 | + } | |
| 362 | + | |
| 344 | 363 | $contact = \FluentCrm\App\Models\Subscriber::with(['tags', 'lists'])->find($id); |
| 345 | 364 | |
| 346 | 365 | if (!$contact) { |
| 347 | 366 | return null; |
| @@ -434,9 +453,10 @@ | ||
| 434 | 453 | |
| 435 | 454 | return $users; |
| 436 | 455 | } |
| 437 | 456 | |
| 438 | - public static function sanitizeUsersArray($users, $boardId = null) | |
| 457 | + // Callers formatting multiple lists may supply a resolved board-manager result. | |
| 458 | + public static function sanitizeUsersArray($users, $boardId = null, $isBoardManager = null) | |
| 439 | 459 | { |
| 440 | 460 | if (current_user_can('list_users')) { |
| 441 | 461 | return $users; |
| 442 | 462 | } |
| @@ -442,9 +462,9 @@ | ||
| 442 | 462 | } |
| 443 | 463 | |
| 444 | 464 | $sanitizedUsers = []; |
| 445 | 465 | |
| 446 | - if(!PermissionManager::isBoardManager($boardId)) //Todo: may create permission security issue, will be modified later | |
| 466 | + if (!($isBoardManager ?? PermissionManager::isBoardManager($boardId))) | |
| 447 | 467 | { |
| 448 | 468 | $currentUser = wp_get_current_user(); |
| 449 | 469 | if($currentUser && isset($currentUser->user_email)){ |
| 450 | 470 | $currentUserEmail = $currentUser->user_email; |
| @@ -704,11 +724,13 @@ | ||
| 704 | 724 | 'deleted' => __('deleted', 'fluent-boards'), |
| 705 | 725 | 'archived' => __('archived', 'fluent-boards'), |
| 706 | 726 | 'restored' => __('restored', 'fluent-boards'), |
| 707 | 727 | 'set' => __('set', 'fluent-boards'), |
| 728 | + 'moved' => __('moved', 'fluent-boards'), | |
| 708 | 729 | ]; |
| 709 | 730 | |
| 710 | 731 | $columnTranslations = [ |
| 732 | + Constant::ACTIVITY_CUSTOM_FIELD => __('custom field', 'fluent-boards'), | |
| 711 | 733 | 'task' => __('task', 'fluent-boards'), |
| 712 | 734 | 'description' => __('description', 'fluent-boards'), |
| 713 | 735 | 'board' => __('board', 'fluent-boards'), |
| 714 | 736 | 'assignee' => __('assignee', 'fluent-boards'), |
| @@ -725,8 +747,9 @@ | ||
| 725 | 747 | 'the associate email' => __('the associate email', 'fluent-boards'), |
| 726 | 748 | 'attachment' => __('attachment', 'fluent-boards'), |
| 727 | 749 | 'repeat task' => __('repeat task', 'fluent-boards'), |
| 728 | 750 | 'Repeat Task' => __('Repeat Task', 'fluent-boards'), |
| 751 | + 'tasks' => __('tasks', 'fluent-boards'), | |
| 729 | 752 | ]; |
| 730 | 753 | |
| 731 | 754 | foreach ($activities as $activity) { |
| 732 | 755 | $activity->action_key = $activity->action; |