Skip to content

Commit

Permalink
Merge branch 'develop' into RES-1910_event_chat_counts
Browse files Browse the repository at this point in the history
  • Loading branch information
edwh committed Jul 10, 2023
2 parents 3818e3d + 0ce9671 commit c712411
Show file tree
Hide file tree
Showing 49 changed files with 3 additions and 722 deletions.
2 changes: 2 additions & 0 deletions app/Console/Commands/CheckTranslations.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public function handle()
// This is probably a special case used for form validation. It throws up many errors, and these
// are at best not visible and at worst not too bad given that they only occur in error cases. So
// ignore it.
} else if ($file == 'countries.php') {
// This is a special case used for country names.
} else if ($file == 'pagination.php') {
// This is probably a special case used for paging through data.
} else if (strpos($file, '-audits')) {
Expand Down
2 changes: 1 addition & 1 deletion app/Http/Controllers/API/EventController.php
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,7 @@ function ($attribute, $value, $fail) use ($request) {
$geocoded = $geocoder->geocode($location);

if (empty($geocoded)) {
throw ValidationException::withMessages(['location ' => __('groups.geocode_failed')]);
throw ValidationException::withMessages(['location ' => __('events.geocode_failed')]);
}

$latitude = $geocoded['latitude'];
Expand Down
290 changes: 0 additions & 290 deletions app/Http/Controllers/ExportController.php
Original file line number Diff line number Diff line change
Expand Up @@ -268,294 +268,4 @@ public function parties(Request $request)
'data' => ['No data to return'],
]);
}

public function getTimeVolunteered(Request $request, $search = null, $export = false)
{
$user = Auth::user();

//Get all group tags
$all_group_tags = GroupTags::all();

//Get all applicable groups
if (Fixometer::hasRole($user, 'Administrator'))
{
$all_groups = Group::all();
} else if (Fixometer::hasRole($user, 'NetworkCoordinator')) {
$all_groups = new Collection();
foreach ($user->networks as $network) {
$all_groups->merge($network->groups);
}
} elseif (Fixometer::hasRole($user, 'Host')) {
$host_groups = UserGroups::where('user', $user->id)->where('role', 3)->pluck('group')->toArray();
$all_groups = Group::whereIn('groups.idgroups', $host_groups);
} elseif (Fixometer::hasRole($user, 'Restarter')) {
$all_groups = null;
}

//See whether it is a get search or index page
if (is_null($search)) {
$user_events = EventsUsers::join('users', 'events_users.user', 'users.id')
->join('events', 'events_users.event', 'events.idevents')
->join('groups', 'events.group', 'groups.idgroups')
->whereNotNull('events_users.user');

if (Fixometer::hasRole($user, 'Host')) {
$user_events = $user_events->whereIn('groups.idgroups', $host_groups);
} elseif (Fixometer::hasRole($user, 'Restarter')) {
$user_events = $user_events->where('users.id', $user->id);
}
} else {
//Misc
//Anonymous
if ($request->input('misc') !== null && $request->input('misc') == 1) {
$user_events = EventsUsers::leftJoin('users', 'events_users.user', 'users.id')
->join('events', 'events_users.event', 'events.idevents')
->join('groups', 'events.group', 'groups.idgroups');
} else {
$user_events = EventsUsers::join('users', 'events_users.user', 'users.id')
->join('events', 'events_users.event', 'events.idevents')
->join('groups', 'events.group', 'groups.idgroups')
->whereNotNull('events_users.user');
}

if (Fixometer::hasRole($user, 'Host')) {
$user_events = $user_events->whereIn('groups.idgroups', $host_groups);
} elseif (Fixometer::hasRole($user, 'Restarter')) {
$user_events = $user_events->where('users.id', $user->id);
}

//Taxonomy
//Group filter
if ($request->input('groups') !== null) {
$user_events = $user_events->whereIn('groups.idgroups', $request->input('groups'));
}

//Group tags filter
if ($request->input('tags') !== null) {
$user_events = $user_events->whereIn('groups.idgroups', GrouptagsGroups::whereIn('group_tag', $request->input('tags'))->pluck('group'));
}

//By users
//Name
if ($request->input('name') !== null) {
$user_events = $user_events->where('users.name', 'like', '%'.$request->input('name').'%');
}

//Birth year
if ($request->input('year') !== null) {
$user_events = $user_events->whereBetween('users.age', explode('-', $request->input('year')));
}

//Gender
if ($request->input('gender') !== null) {
$user_events = $user_events->where('users.gender', 'like', '%'.$request->input('gender').'%');
}

//By date
// This is only used by admins and therefore the dates can be assumed to be in UTC.
if ($request->input('from_date') !== null && $request->input('to_date') == null) {
$user_events = $user_events->whereDate('events.event_start_utc', '>', $request->input('from_date'));
} elseif ($request->input('to_date') !== null && $request->input('from_date') == null) {
$user_events = $user_events->whereDate('events.event_end_utc', '<', $request->input('to_date'));
} elseif ($request->input('to_date') !== null && $request->input('from_date') !== null) {
$user_events = $user_events->whereBetween('events.event_start_utc', [
$request->input('from_date'),
$request->input('to_date'),
]);
}

//By location
//Country
if ($request->input('country') !== null) {
$user_events = $user_events->where('users.country', $request->input('country'));
}

//Region
//Need to add this in later is disabled at the moment
}

// Filter out the old 'superhero' Restarter that was automatically added
// in the old system (pre-July 2018) to any event that was created.
$user_events->where('users.id', '<>', 29);

//total users
$total_users = clone $user_events;
$total_users = $total_users->distinct('users.id')->count('users.id');

//anonymous users
$anonymous_users = clone $user_events;
$anonymous_users = $anonymous_users->whereNull('user')->count('*');

//group count
$group_count = clone $user_events;
$group_count = $group_count->distinct('group')->count('group');

//average age
$average_age = clone $user_events;
$average_age = $average_age->distinct('users.id')->pluck('users.age')->toArray();

foreach ($average_age as $key => $value) {
if (! is_int(intval($value)) || intval($value) <= 0) {
unset($average_age[$key]);
} else {
$average_age[$key] = intval($value);
}
}

if (! empty($average_age)) {
$average_age = array_sum($average_age) / count($average_age);
$average_age = intval(date('Y')) - $average_age;
} else {
$average_age = 0;
}

//hours completed
$hours_completed = clone $user_events;
$hours_completed = substr($hours_completed->sum(DB::raw('TIMEDIFF(event_start_utc, event_end_utc)')), 0, -4);

//country hours completed
$country_hours_completed = clone $user_events;
$country_hours_completed = $country_hours_completed->groupBy('users.country')->select('users.country', DB::raw('SUM(TIMEDIFF(event_start_utc, event_end_utc)) as event_hours'));
$all_country_hours_completed = $country_hours_completed->orderBy('event_hours', 'DESC')->get();
$country_hours_completed = $country_hours_completed->orderBy('event_hours', 'DESC')->take(5)->get();

//city hours completed
$city_hours_completed = clone $user_events;
$city_hours_completed = $city_hours_completed->groupBy('users.location')->select('users.location', DB::raw('SUM(TIMEDIFF(event_start_utc, event_end_utc)) as event_hours'));
$all_city_hours_completed = $city_hours_completed->orderBy('event_hours', 'DESC')->get();
$city_hours_completed = $city_hours_completed->orderBy('event_hours', 'DESC')->take(5)->get();

//order by event date.
$user_events = $user_events->orderBy('events.event_start_utc', 'DESC');

//Select all necessary information for table
//
// This is only used by Admins, and therefore we can assume that they are in UTC and return times accordingly.
$user_events = $user_events->select(
'users.id',
'users.name as username',
'events.idevents',
\DB::raw('TIME(events.event_start_utc) AS start'),
\DB::raw('TIME(events.event_end_utc) AS end'),
\DB::raw('DATE(events.event_start_utc) AS event_date'),
'events.location',
'events.venue',
'groups.name as groupname'
);

if (! $export) {
$user_events = $user_events->paginate(env('PAGINATE'));
} else {
$user_events = $user_events->get();
}

if (! $export) {
return view('reporting.time-volunteered', [
'user' => $user,
'user_events' => $user_events,
'all_groups' => $all_groups,
'all_group_tags' => $all_group_tags,
'groups' => $request->input('groups'),
'selected_tags' => $request->input('tags'),
'name' => $request->input('name'),
'age' => $request->input('year'),
'gender' => $request->input('gender'),
'from_date' => $request->input('from_date'),
'to_date' => $request->input('to_date'),
'country' => $request->input('country'),
'region' => null,
'misc' => $request->input('misc'),
'total_users' => $total_users,
'anonymous_users' => $anonymous_users,
'group_count' => $group_count,
'hours_completed' => $hours_completed,
'average_age' => number_format($average_age, 1),
'country_hours_completed' => $country_hours_completed,
'all_country_hours_completed' => $all_country_hours_completed,
'city_hours_completed' => $city_hours_completed,
'all_city_hours_completed' => $all_city_hours_completed,
'query' => str_replace($request->url(), '',$request->fullUrl())
]);
}

return [
'user' => $user,
'user_events' => $user_events,
'all_groups' => $all_groups,
'all_group_tags' => $all_group_tags,
'total_users' => $total_users,
'anonymous_users' => $anonymous_users,
'group_count' => $group_count,
'hours_completed' => $hours_completed,
'average_age' => number_format($average_age, 1),
'country_hours_completed' => $country_hours_completed,
'city_hours_completed' => $city_hours_completed,
];
}

public function exportTimeVolunteered(Request $request) {
if (!empty($request->all())) {
$data = $this->getTimeVolunteered($request, true, true);
} else {
$data = $this->getTimeVolunteered($request, null, true);
}

//Creat new file and set headers
$file_name = 'time_reporting.csv';
$file = fopen($file_name, 'w+');
$file_headers = [
"Content-type" => "text/csv",
];

//Put stats in csv
$stats_headers = ['Hours Volunteered', 'Average age', 'Number of groups', 'Total number of users', 'Number of anonymous users'];
fputcsv($file, ['Overall Stats:']);
fputcsv($file, $stats_headers);
fputcsv($file, [number_format($data['hours_completed'], 0, '.', ','), 'N/A', $data['group_count'], $data['total_users'], $data['anonymous_users']]);
fputcsv($file, []);

//Put breakdown by country in csv
$country_headers = ['Country name', 'Total hours'];
fputcsv($file, ['Breakdown by country:']);
fputcsv($file, $country_headers);
foreach($data['country_hours_completed'] as $country_hours) {
if(!is_null($country_hours->country)) {
$country = $country_hours->country;
} else {
$country = 'N/A';
}
fputcsv($file, [$country, number_format($country_hours->hours/60/60, 0, '.', ',')]);
}
fputcsv($file, []);

//Put breakdown by city in csv
$city_headers = ['Town/city name', 'Total hours'];
fputcsv($file, ['Breakdown by city:']);
fputcsv($file, $city_headers);
foreach($data['city_hours_completed'] as $city_hours) {
if(!is_null($city_hours->location)) {
$city = $city_hours->location;
} else {
$city = 'N/A';
}
fputcsv($file, [$city, number_format($city_hours->hours/60/60, 0, '.', ',')]);
}
fputcsv($file, []);

//Put users in csv
$users_headers = ['#', 'Hours', 'Event date', 'Restart group', 'Location'];
fputcsv($file, ['Results:']);
fputcsv($file, $users_headers);
foreach($data['user_events'] as $ue) {
fputcsv($file, [$ue->id, date('H:i', strtotime($ue->end) - strtotime($ue->start)),
date('d/m/Y', strtotime($ue->event_date)), $ue->groupname, $ue->location]);
}
fputcsv($file, []);

//close file
fclose($file);

return Response::download($file_name, $file_name, $file_headers);

}
}
3 changes: 0 additions & 3 deletions app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -1124,9 +1124,6 @@ public function getUserMenus(Request $request)

if ($user->hasRole('Administrator') || $user->hasRole('Host')) {
$items = [];
if ($user->hasRole('Administrator')) {
$items[Lang::get('general.time_reporting')] = url('/reporting/time-volunteered?a');
}
$items[Lang::get('general.party_reporting')] = url('/search');

$reportingMenu = [
Expand Down
4 changes: 0 additions & 4 deletions app/Services/CheckAuthService.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,6 @@ private function handle($email)
if ($this->is_host || $this->is_admin) {
$this->menu->get('reporting')->put('header', 'Reporting');

if ($this->is_admin) {
$this->menu->get('reporting')->put(Lang::get('general.time_reporting'), url('reporting/time-volunteered?a'));
}

$this->menu->get('reporting')->put(Lang::get('general.party_reporting'), url('search'));

$this->menu->get('reporting')->put('reporting_spacer', 'spacer');
Expand Down
1 change: 0 additions & 1 deletion lang/de/devices.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
return [
'devices' => 'Devices',
'export_device_data' => 'Export device data',
'by_taxonomy' => 'By taxonomy',
'by_date' => 'By date',
'category' => 'Category',
'group' => 'Group',
Expand Down
6 changes: 0 additions & 6 deletions lang/de/events.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,6 @@
'field_event_venue' => 'Venue address',
'field_event_images' => 'Add event images here',
'field_event_images_2' => 'Choose an image for your event',
'field_event_street_address' => 'Street address',
'field_event_route' => 'Route',
'field_event_city' => 'City',
'field_event_county' => 'County/State',
'field_event_zip' => 'Post/Zip code',
'field_event_country' => 'Country',
'field_add_image' => 'Add images',
'before_submit_text' => 'Once confirmed by our community lead, your event will be made public on The Restart Project homepage.',
'save_event' => 'Save Event',
Expand Down
1 change: 0 additions & 1 deletion lang/de/general.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
'alert_uptodate_text' => 'You have nothing to action now. When you do, we\'ll let you know.',
'general' => 'General',
'reporting' => 'Reporting',
'time_reporting' => 'Volunteer hours',
'party_reporting' => 'Event reporting',
'signmeup' => 'Sign me up!',
'introduction_message' => 'We are a global community of people who help others fix their electronics in community events. Join us!',
Expand Down
3 changes: 0 additions & 3 deletions lang/de/groups.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@
'group_admin_only' => 'Admin only',
'group_tags' => 'Group tags',
'approve_group' => 'Approve group',
'groups_modal-button' => 'Yes, lets get started!',
'groups_modal_title' => 'Would you like to start a community repair group?',
'groups_modal_content' => 'We can help you get started, scheduling and announcing events, logging data and getting reports on their impact.',
'email_addresses_field' => 'Email addresses',
'type_email_addresses_message' => 'Type in the email addresses of the people you would like to invite to this group. Press the tab or comma key after each email address.',
'message_header' => 'Invitation message',
Expand Down
2 changes: 0 additions & 2 deletions lang/de/reporting.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
'yes' => 'Yes',
'no' => 'No',
'country' => 'Country',
'time_volunteered' => 'Time Volunteered',
'average_age' => 'Average age',
'number_of_groups' => 'Number of groups',
'total_number_of_users' => 'Total number of users',
Expand All @@ -34,5 +33,4 @@
'event_date' => 'Event date',
'event_name' => 'Event',
'restart_group' => 'Group',
'export_csv' => 'Export to CSV',
];
1 change: 0 additions & 1 deletion lang/en/devices.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
'export_device_data' => 'Export all data',
'export_event_data' => 'Export event data',
'export_group_data' => 'Export group data',
'by_taxonomy' => 'By taxonomy',
'by_date' => 'By date',
'category' => 'Category',
'group' => 'Group',
Expand Down

0 comments on commit c712411

Please sign in to comment.