#19: The user profile grid is now much more Github-like

This commit is contained in:
Andy Heathershaw 2018-08-06 14:02:45 +01:00
parent 843f284570
commit 7e25e65336
3 changed files with 147 additions and 11 deletions

View File

@ -33,11 +33,14 @@ class UserController extends Controller
$cameras = $this->getCamerasUsedInAlbums($albumIDs); $cameras = $this->getCamerasUsedInAlbums($albumIDs);
$activity = $this->getActivityDatesInAlbums($albumIDs); $activity = $this->getActivityDatesInAlbums($albumIDs);
$daysInMonth = $this->getDaysInMonths();
return Theme::render('gallery.user_profile', [ return Theme::render('gallery.user_profile', [
'activity_taken' => $this->constructActivityGrid($activity['taken']), 'activity_taken' => $this->constructActivityGrid($activity['taken']),
'activity_uploaded' => $this->constructActivityGrid($activity['uploaded']), 'activity_uploaded' => $this->constructActivityGrid($activity['uploaded']),
'albums' => $albums, 'albums' => $albums,
'cameras' => $cameras, 'cameras' => $cameras,
'month_days' => $daysInMonth,
'user' => $user 'user' => $user
]); ]);
} }
@ -170,4 +173,29 @@ class UserController extends Controller
->orderBy('camera_software') ->orderBy('camera_software')
->get(); ->get();
} }
private function getDaysInMonths()
{
$results = [];
$lastYearFrom = new \DateTime();
$lastYearFrom->sub(new \DateInterval('P1Y'));
$lastYearFrom->sub(new \DateInterval(sprintf('P%dD', $lastYearFrom->format('d') - 1)));
$today = new \DateTime();
$current = clone $lastYearFrom;
while ($current < $today)
{
$year = intval($current->format('Y'));
$month = intval($current->format('m'));
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$results[$year][$current->format('M')] = $daysInMonth;
$current->add(new \DateInterval('P1M'));
}
return $results;
}
} }

View File

@ -2,13 +2,41 @@
font-size: smaller; font-size: smaller;
} }
.activity-grid th,td { .activity-grid th,
.activity-grid td {
padding: 5px !important; padding: 5px !important;
text-align: center; text-align: center;
} }
.activity-grid td { .activity-grid td {
color: #fff; color: #fff;
height: 20px;
}
.activity-grid .has-activity {
background-color: #1e90ff;
}
.activity-grid .invalid-date {
background-color: #e5e5e5;
}
.activity-grid .no-activity {
background-color: #fff;
}
.activity-grid th:first-child,
.activity-grid td:first-child {
border-left: 1px solid #dee2e6;
}
.activity-grid th,
.activity-grid td {
border-right: 1px solid #dee2e6;
}
.activity-grid tr:last-child td {
border-bottom: 1px solid #dee2e6;
} }
.album-slideshow-container #image-preview { .album-slideshow-container #image-preview {

View File

@ -1,26 +1,106 @@
<table class="table activity-grid"> <table class="table activity-grid">
<thead> <thead>
<tr> <tr>
<th></th> @php
$i = 0;
@endphp
@foreach ($activity as $year => $months) @foreach ($activity as $year => $months)
@foreach ($months as $month => $dates) @foreach ($months as $month => $dates)
<th style="vertical-align: top;">{{ $month }}@if ($month == 'Jan')<br/>{{ $year }}@endif</th> <th colspan="{{ ceil($month_days[$year][$month] / 7) }}" style="vertical-align: top;">{{ $month }}@if ($i == 0 || $i == 12 || $month == 'Jan')<br/>{{ $year }}@endif</th>
@php
$i++
@endphp
@endforeach @endforeach
@endforeach @endforeach
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@for ($i = 1; $i <= 31; $i++) {{-- Output a table containing columns for days 1-7, 8-14, 15-21, 22-28, 29-31 (if applicable) --}}
@for ($row = 0; $row < 7; $row++)
<tr> <tr>
<th>{{ $i }}</th>
@foreach ($activity as $year => $months) @foreach ($activity as $year => $months)
@foreach ($months as $month => $dates) @foreach ($months as $month => $dates)
@if (isset($dates[$i]) && $dates[$i] > 0) @php
<td class="bg-primary" data-toggle="tooltip" data-placement="top" title="{{ trans_choice('gallery.user_profile.activity_summary', $dates[$i], ['count' => $dates[$i], 'date' => sprintf('%d %s %d', $i, $month, $year)]) }}">{{ $dates[$i] }}</td> $day1 = $row + 1;
@elseif (isset($dates[$i]) && $dates[$i] == 0) $day2 = $row + 8;
<td>&nbsp;</td> $day3 = $row + 15;
$day4 = $row + 22;
$day5 = $row + 29;
@endphp
@if (ceil($month_days[$year][$month] / 7) >= 1)
@if ($day1 <= $month_days[$year][$month])
@if (isset($dates[$day1]) && $dates[$day1] > 0)
<td class="has-activity" data-toggle="tooltip" data-placement="top" title="{{ trans_choice('gallery.user_profile.activity_summary', $dates[$day1], ['count' => $dates[$day1], 'date' => sprintf('%d %s %d', $day1, $month, $year)]) }}">
</td>
@else @else
<td class="bg-light">&nbsp;</td> <td class="no-activity">
</td>
@endif
@else
<td class="invalid-date">
</td>
@endif
@endif
@if (ceil($month_days[$year][$month] / 7) >= 2)
@if ($day2 <= $month_days[$year][$month])
@if (isset($dates[$day2]) && $dates[$day2] > 0)
<td class="has-activity" data-toggle="tooltip" data-placement="top" title="{{ trans_choice('gallery.user_profile.activity_summary', $dates[$day2], ['count' => $dates[$day2], 'date' => sprintf('%d %s %d', $day2, $month, $year)]) }}">
</td>
@else
<td class="no-activity">
</td>
@endif
@else
<td class="invalid-date">
</td>
@endif
@endif
@if (ceil($month_days[$year][$month] / 7) >= 3)
@if ($day3 <= $month_days[$year][$month])
@if (isset($dates[$day3]) && $dates[$day3] > 0)
<td class="has-activity" data-toggle="tooltip" data-placement="top" title="{{ trans_choice('gallery.user_profile.activity_summary', $dates[$day3], ['count' => $dates[$day3], 'date' => sprintf('%d %s %d', $day3, $month, $year)]) }}">
</td>
@else
<td class="no-activity">
</td>
@endif
@else
<td class="invalid-date">
</td>
@endif
@endif
@if (ceil($month_days[$year][$month] / 7) >= 4)
@if ($day4 <= $month_days[$year][$month])
@if (isset($dates[$day4]) && $dates[$day4] > 0)
<td class="has-activity" data-toggle="tooltip" data-placement="top" title="{{ trans_choice('gallery.user_profile.activity_summary', $dates[$day4], ['count' => $dates[$day4], 'date' => sprintf('%d %s %d', $day4, $month, $year)]) }}">
</td>
@else
<td class="no-activity">
</td>
@endif
@else
<td class="invalid-date">
</td>
@endif
@endif
@if (ceil($month_days[$year][$month] / 7) >= 5)
@if ($day5 <= $month_days[$year][$month])
@if (isset($dates[$day5]) && $dates[$day5] > 0)
<td class="has-activity" data-toggle="tooltip" data-placement="top" title="{{ trans_choice('gallery.user_profile.activity_summary', $dates[$day5], ['count' => $dates[$day5], 'date' => sprintf('%d %s %d', $day5, $month, $year)]) }}">
</td>
@else
<td class="no-activity">
</td>
@endif
@else
<td class="invalid-date">
</td>
@endif
@endif @endif
@endforeach @endforeach
@endforeach @endforeach