/** * @param Revision $revision * * @return string * @throws LawHasNoTextAtRevision */ public function getRevisionText(Revision $revision) { $law = $revision->getLaw(); if ($law->notHasText()) { return ''; } if ($revision->text) { return $revision->text; } $previous_revision = Revision::where('text', '<>', '')->where('law_id', $revision->law_id)->where('date', '<', $revision->date)->orderBy('date', 'desc')->first(); if (!$previous_revision) { return ''; } return $previous_revision->text; }
public function groupRevisionsForCommits($date) { /** * @var $all Revision[] */ $all = $this->filterQuery(Revision::where(['date' => $date]))->get(); $revisions = []; foreach ($all as $revision) { $revisions[$revision->law_id] = $revision; } foreach ($revisions as $revision) { $revision->related = array_merge($this->getRevisionReferences($revision), $revision->related ?: []); foreach ($revision->related as $ref) { if (!isset($revisions[$ref])) { continue; } $r = $revisions[$ref]->related ?: []; $r[$revision->law_id] = $revision->law_id; $revisions[$ref]->related = $r; } } $commits = []; reset($revisions); while (list($key, $revision) = each($revisions)) { $commit = [$key => $revision]; foreach ($revision->related as $ref) { if (!isset($revisions[$ref])) { continue; } $commit[$ref] = $revisions[$ref]; unset($revisions[$ref]); } $main_revision = $this->getRevisionWithNoReferences($commit); unset($commit[$main_revision->law_id]); $commit = array_merge([$main_revision->law_id => $main_revision], $commit); $commits[] = $commit; } return $commits; }