summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@webtrees.net>2019-01-15 10:10:04 +0000
committerGreg Roach <fisharebest@webtrees.net>2019-01-15 10:10:11 +0000
commite778de49b6f9ff082806486da8ac3111c4ef86bd (patch)
tree1d61017571c07dbac66015eab5e3c6279ec2205f
parentff5d6496b3dbfb693ee8dd7d5d34621bade6b935 (diff)
downloadwebtrees-e778de49b6f9ff082806486da8ac3111c4ef86bd.tar.gz
webtrees-e778de49b6f9ff082806486da8ac3111c4ef86bd.tar.bz2
webtrees-e778de49b6f9ff082806486da8ac3111c4ef86bd.zip
Use Collection class
-rw-r--r--app/Http/Controllers/AdminMediaController.php40
-rw-r--r--app/Media.php16
2 files changed, 31 insertions, 25 deletions
diff --git a/app/Http/Controllers/AdminMediaController.php b/app/Http/Controllers/AdminMediaController.php
index 3888fd6a4f..0aa494a73f 100644
--- a/app/Http/Controllers/AdminMediaController.php
+++ b/app/Http/Controllers/AdminMediaController.php
@@ -149,7 +149,7 @@ class AdminMediaController extends AbstractBaseController
case 'local':
// Filtered rows
$SELECT1 =
- "SELECT SQL_CALC_FOUND_ROWS TRIM(LEADING :media_path_1 FROM multimedia_file_refn) AS media_path, m_id AS xref, descriptive_title, m_file AS gedcom_id, m_gedcom AS gedcom" .
+ "SELECT SQL_CALC_FOUND_ROWS TRIM(LEADING :media_path_1 FROM multimedia_file_refn) AS media_path, m_id, descriptive_title, m_file, m_gedcom, multimedia_file_refn" .
" FROM `##media`" .
" JOIN `##media_file` USING (m_file, m_id)" .
" JOIN `##gedcom_setting` ON (m_file = gedcom_id AND setting_name = 'MEDIA_DIRECTORY')" .
@@ -225,14 +225,21 @@ class AdminMediaController extends AbstractBaseController
$data = [];
foreach ($rows as $row) {
- $media = Media::getInstance($row->xref, Tree::findById((int) $row->gedcom_id), $row->gedcom);
- $media_files = $media->mediaFiles();
- $media_files = array_map(function (MediaFile $media_file): string {
- return $media_file->displayImage(150, 150, '', []);
- }, $media_files);
- $data[] = [
+ /** @var Media $media */
+ $media = Media::rowMapper()($row);
+
+ $media_files = $media->mediaFiles()
+ ->filter(function(MediaFile $media_file) use ($row): bool {
+ return $media_file->filename() == $row->multimedia_file_refn;
+ })
+ ->map(function (MediaFile $media_file): string {
+ return $media_file->displayImage(150, 150, '', []);
+ })
+ ->implode('');
+
+ $data[] = [
$this->mediaFileInfo($media_folder, $media_path, $row->media_path),
- implode('', $media_files),
+ $media_files,
$this->mediaObjectInfo($media),
];
}
@@ -253,16 +260,17 @@ class AdminMediaController extends AbstractBaseController
->select(['media.*', 'media_file.multimedia_file_refn', 'media_file.descriptive_title']);
return $datatables_service->handle($request, $query, ['multimedia_file_refn', 'descriptive_title'], function (stdClass $row): array {
+ /** @var Media $media */
$media = Media::rowMapper()($row);
- $media_files = $media->mediaFiles();
- $media_files = array_filter($media_files, function(MediaFile $media_file) use ($row): bool {
- return $media_file->filename() == $row->multimedia_file_refn;
- });
- $media_files = array_map(function (MediaFile $media_file): string {
- return $media_file->displayImage(150, 150, '', []);
- }, $media_files);
- $media_files = implode('', $media_files);
+ $media_files = $media->mediaFiles()
+ ->filter(function(MediaFile $media_file) use ($row): bool {
+ return $media_file->filename() == $row->multimedia_file_refn;
+ })
+ ->map(function (MediaFile $media_file): string {
+ return $media_file->displayImage(150, 150, '', []);
+ })
+ ->implode('');
return [
$row->multimedia_file_refn,
diff --git a/app/Media.php b/app/Media.php
index 8033e29648..42739dc95c 100644
--- a/app/Media.php
+++ b/app/Media.php
@@ -20,6 +20,7 @@ namespace Fisharebest\Webtrees;
use Closure;
use Fisharebest\Webtrees\Functions\FunctionsPrintFacts;
use Illuminate\Database\Capsule\Manager as DB;
+use Illuminate\Support\Collection;
use stdClass;
/**
@@ -112,17 +113,14 @@ class Media extends GedcomRecord
/**
* Get the media files for this media object
*
- * @return MediaFile[]
+ * @return Collection|MediaFile[]
*/
- public function mediaFiles(): array
+ public function mediaFiles(): Collection
{
- $media_files = [];
-
- foreach ($this->facts(['FILE']) as $fact) {
- $media_files[] = new MediaFile($fact->gedcom(), $this);
- }
-
- return $media_files;
+ return (new Collection($this->facts(['FILE'])))
+ ->map(function (Fact $fact): MediaFile {
+ return new MediaFile($fact->gedcom(), $this);
+ });
}
/**