diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2019-01-08 22:33:43 +0000 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2019-01-08 22:33:43 +0000 |
| commit | 8e74ca6282bad61d0e7a289efa53a84e88dd0a7e (patch) | |
| tree | b5a6e1314a1c1fca91158fb01b63019753242cef /app/Module/ResearchTaskModule.php | |
| parent | 4b92b602b144dea9f1bfeee5cf821870a16f1d84 (diff) | |
| download | webtrees-8e74ca6282bad61d0e7a289efa53a84e88dd0a7e.tar.gz webtrees-8e74ca6282bad61d0e7a289efa53a84e88dd0a7e.tar.bz2 webtrees-8e74ca6282bad61d0e7a289efa53a84e88dd0a7e.zip | |
Use illuminate/database research task module
Diffstat (limited to 'app/Module/ResearchTaskModule.php')
| -rw-r--r-- | app/Module/ResearchTaskModule.php | 65 |
1 files changed, 53 insertions, 12 deletions
diff --git a/app/Module/ResearchTaskModule.php b/app/Module/ResearchTaskModule.php index 698d5b5262..6392dd61e9 100644 --- a/app/Module/ResearchTaskModule.php +++ b/app/Module/ResearchTaskModule.php @@ -18,10 +18,14 @@ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Database; +use Fisharebest\Webtrees\Family; use Fisharebest\Webtrees\GedcomRecord; use Fisharebest\Webtrees\I18N; +use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Tree; +use Illuminate\Database\Capsule\Manager as DB; +use Illuminate\Database\Query\JoinClause; +use Illuminate\Support\Collection; use Symfony\Component\HttpFoundation\Request; /** @@ -32,7 +36,6 @@ class ResearchTaskModule extends AbstractModule implements ModuleBlockInterface private const DEFAULT_SHOW_OTHER = '1'; private const DEFAULT_SHOW_UNASSIGNED = '1'; private const DEFAULT_SHOW_FUTURE = '1'; - private const DEFAULT_BLOCK = '1'; /** {@inheritdoc} */ public function getTitle(): string @@ -68,17 +71,11 @@ class ResearchTaskModule extends AbstractModule implements ModuleBlockInterface $end_jd = $show_future ? 99999999 : WT_CLIENT_JD; - $xrefs = Database::prepare( - "SELECT DISTINCT d_gid FROM `##dates`" . - " WHERE d_file = :tree_id AND d_fact = '_TODO' AND d_julianday1 < :jd" - )->execute([ - 'tree_id' => $tree->id(), - 'jd' => $end_jd, - ])->fetchOneColumn(); + $individuals = $this->individualsWithTasks($tree, $end_jd); + $families = $this->familiesWithTasks($tree, $end_jd); - $records = array_map(function ($xref) use ($tree): GedcomRecord { - return GedcomRecord::getInstance($xref, $tree); - }, $xrefs); + /** @var GedcomRecord[] $records */ + $records = $individuals->merge($families); $tasks = []; @@ -178,4 +175,48 @@ class ResearchTaskModule extends AbstractModule implements ModuleBlockInterface 'show_unassigned' => $show_unassigned, ]); } + + /** + * @param Tree $tree + * @param int $max_julian_day + * + * @return Collection + */ + private function familiesWithTasks(Tree $tree, int $max_julian_day): Collection + { + return DB::table('families') + ->join('dates', function (JoinClause $join): void { + $join + ->on('f_file', '=', 'd_file') + ->on('f_id', '=', 'd_gid'); + }) + ->where('f_file', '=', $tree->id()) + ->where('d_fact', '=', '_TODO') + ->where('d_julianday1', '<', $max_julian_day) + ->select(['f_id', 'f_gedcom']) + ->get() + ->map(Family::rowMapper($tree)); + } + + /** + * @param Tree $tree + * @param int $max_julian_day + * + * @return Collection + */ + private function individualsWithTasks(Tree $tree, int $max_julian_day): Collection + { + return DB::table('individuals') + ->join('dates', function (JoinClause $join): void { + $join + ->on('i_file', '=', 'd_file') + ->on('i_id', '=', 'd_gid'); + }) + ->where('i_file', '=', $tree->id()) + ->where('d_fact', '=', '_TODO') + ->where('d_julianday1', '<', $max_julian_day) + ->select(['i_id', 'i_gedcom']) + ->get() + ->map(Individual::rowMapper($tree)); + } } |
