Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 75
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
UserDetailsReportResource
0.00% covered (danger)
0.00%
0 / 75
0.00% covered (danger)
0.00%
0 / 3
210
0.00% covered (danger)
0.00%
0 / 1
 toArray
0.00% covered (danger)
0.00%
0 / 70
0.00% covered (danger)
0.00%
0 / 1
156
 getVisibleColumns
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 checkFrontendKeysAgainstBackendKeys
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace App\Http\Resources;
4
5use App\Exceptions\ExpectedException;
6use App\Helpers\FlyMSGLogger;
7use Illuminate\Http\Request;
8use Illuminate\Http\Resources\Json\JsonResource;
9use App\Http\Models\Admin\UserDetailsColumnSetting;
10use PHPUnit\Event\Code\Throwable;
11
12class UserDetailsReportResource extends JsonResource
13{
14    /**
15     * Transform the resource into an array.
16     *
17     * @param Request $request
18     * @return array<string, mixed>
19     */
20    public function toArray($request): array
21    {
22        // Fetch visible columns for the user
23        $visibleColumns = $this->getVisibleColumns();
24
25        $user = $this->user;
26        if (!$user) {
27            FlyMSGLogger::logError("UserDetailsReportResource", new ExpectedException("User not found for HS property with ID $this->id"));
28            $user = $this;
29        }
30        $status = $user->status;
31
32        if ($user->deleted_at) {
33            $status = "Deactivated";
34        }
35
36        if ($user->status == "Invited") {
37            $status = "Not Active";
38        }
39
40        if ($user->status == "Active") {
41            $status = "Active";
42        }
43
44        $group_subgroup_id = null;
45        $group_id = $user->company_group->id ?? null;
46
47        if ($user->company_group && $user->company_group->parent_id) {
48            $group_id = $user->company_group->parent->id;
49            $group_subgroup_id = $user->company_group->id;
50        }
51
52        // Define all available columns
53        $allColumns = [
54            "first_name" => $this->firstname,
55            "last_name" => $this->lastname,
56            "email" => $this->email,
57            "license_type" => $this->subscription_type,
58            "flymsg_account_creation_date" => $this->account_creation_date,
59            "extension_installed_on_any_browser" => ($this->flymsg_chrome_extension_installed == "Yes" || $this->flymsg_edge_extension_installed == "Yes") ? "Yes" : "No",
60            "last_login_to_flymsg" => $this->last_login,
61            "total_no_of_characters_typed_by_flymsg_by_user" => $this->total___of_characters_typed_by_flymsg_by_user,
62            "total_no_of_characters_typed_summarized_monthly_by_flymsg_by_user" => $this->total___of_characters_typed_monthly_by_flymsg_by_user,
63            "is_the_user_signed_into_flymsg_extension" => $this->signed_into_flymsg_extension,
64            "last_login_to_flylearning" => $this->last_login_to_flylearning,
65            "total_time_saved_by_flymsg_by_user" => $this->total_time_saved_by_flymsg_by_user,
66            "total_cost_savings_by_flymsg_by_user" => $this->total_cost_savings_by_flymsg_by_user,
67            "last_date_user_used_a_flycut" => $this->last_date_user_used_a_flycut,
68            "flycuts_created_count" => $this->number_of_flycuts_created_count,
69            "flycuts_created_last_date" => $this->number_of_flycuts_created_last_date,
70            "flyplates_added_to_flycuts_count" => $this->number_of_flyplates_in_flycuts_count,
71            "flyplates_added_to_flycuts_last_date" => $this->number_of_flyplates_in_flycuts_last_date,
72            "total_no_of_times_flyengage_ai_used_count" => $this->total___of_times_flyengage_used__count_,
73            "total_no_of_characters_typed_by_flyengage" => $this->total_no_of_characters_typed_by_flyengage,
74            "total_no_of_times_sentence_rewrite_ai_used_count" => $this->total___of_times_sentence_rewrite_used__count_,
75            "total_no_of_characters_typed_by_sentence_rewrite" => $this->total_no_of_characters_typed_by_sentence_rewrite,
76            "total_no_of_times_paragraph_rewrite_ai_used_count" => $this->total___of_times_paragraph_rewrite_used__count_,
77            "total_no_of_characters_typed_by_paragraph_rewrite" => $this->total_no_of_characters_typed_by_paragraph_rewrite,
78            "total_no_of_times_flyposts_used_count" => $this->total___of_times_flyposts_used__count_,
79            "total_no_of_characters_typed_by_flyposts" => $this->total_no_of_characters_typed_by_flyposts,
80            "which_browser_has_an_extension_been_installed_on" => $this->which_browser_has_an_extension_been_installed_on,
81            "flymsg_chrome_extension_installed" => $this->flymsg_chrome_extension_installed,
82            "flymsg_chrome_extension_installed_date" => $this->flymsg_chrome_extension_installed__date_,
83            "flymsg_chrome_extension_uninstalled" => $this->flymsg_chrome_extension_uninstalled,
84            "flymsg_chrome_extension_uninstalled_date" => $this->flymsg_chrome_extension_uninstalled__date_,
85            "flymsg_edge_extension_installed_date" => $this->flymsg_edge_extension_installed__date_,
86            "flymsg_edge_extension_installed" => $this->flymsg_edge_extension_installed,
87            "flymsg_edge_extension_uninstalled" => $this->flymsg_edge_extension_uninstalled,
88            "flymsg_edge_extension_uninstalled__date_" => $this->flymsg_edge_extension_uninstalled__date_,
89            "other_reason_to_sign_out_free_form_field" => $this->other_reason_to_sign_out_free_form_field,
90            "flymsg_extension_version_for_edge" => $this->flymsg_extension_version_for_edge,
91            "flymsg_extension_version_for_chrome" => $this->flymsg_extension_version_for_chrome,
92            "clicked_help_request_help_from_menu_count" =>  $this->clicked_settings_count,
93            "typed_words_per_minute" => $this->typed_words_per_minute,
94            "user_id" => $user->id,
95            "group_id" => $group_id,
96            "subgroup_id" => $group_subgroup_id,
97            "status" => $status ?? "Active",
98        ];
99
100        if (empty($visibleColumns)) {
101            return $allColumns;
102        }
103
104        // Initialize an empty array for filtered columns
105        $filteredColumns = [];
106
107        // Loop through visible columns and add them to filteredColumns array
108        foreach ($visibleColumns as $column) {
109            if (array_key_exists($column, $allColumns)) {
110                $filteredColumns[$column] = $allColumns[$column];
111            }
112        }
113
114        return $filteredColumns;
115    }
116
117    private function getVisibleColumns()
118    {
119        return UserDetailsColumnSetting::where("user_id", auth()->user()->id)
120            ->where("visible", true)
121            ->pluck("column")
122            ->toArray();
123    }
124
125    private function checkFrontendKeysAgainstBackendKeys($key)
126    {
127        return array_key_exists($key, $this->getVisibleColumns());
128    }
129}