/**
  * @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;
 }
Exemple #2
0
 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;
 }