/**
  * @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;
 }
Beispiel #2
0
 public function formatRevisionComment(Revision $revision, $add_links = false)
 {
     $comment = $revision->comment;
     $comment = preg_replace_callback('%<a href="(.*?)" target="_blank">(.*?)</a>%', function ($matches) use($revision, $add_links) {
         $url = urldecode($matches[1]);
         $title = $matches[2];
         if ($add_links) {
             if (preg_match('%/laws/(.*?)(?:$|/ed|#|\\?)%', $url, $matches)) {
                 $law_id = $matches[1];
                 $url = $this->getLawURL($law_id, '/RadaData/zakon');
             }
             return "[{$title}]({$url})";
         } else {
             return $title;
         }
     }, $comment);
     $comment = preg_replace_callback('%([\\s\\S]+?)(, підстава.*)?$%', function ($matches) use($revision) {
         $statuses = explode("\n", array_get($matches, 1, ''));
         $reason = array_get($matches, 2, '');
         $law = $revision->getLaw();
         $type = $law->types()->get()->first();
         if (!$type) {
             return $matches[0];
         }
         $title = $law->title;
         $type_name = $type->name;
         $type_name = mb_strtolower(mb_substr($type_name, 0, 1)) . mb_substr($type_name, 1, mb_strlen($type_name) - 1);
         $i = 0;
         foreach ($statuses as &$status) {
             $status = trim($status);
             if ($status == 'Прийняття') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Прийнята';
                         break;
                     case 'b':
                         $status = 'Прийнято';
                         break;
                     case 'b+':
                         $status = 'Прийняті';
                         break;
                     default:
                         $status = 'Прийнятий';
                         break;
                 }
             }
             if ($status == 'Ратифікація') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Ратифікована';
                         break;
                     case 'b':
                         $status = 'Ратифіковано';
                         break;
                     case 'b+':
                         $status = 'Ратифіковані';
                         break;
                     default:
                         $status = 'Ратифікований';
                         break;
                 }
             }
             if ($status == 'Скасування') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Скасована';
                         break;
                     case 'b':
                         $status = 'Скасовано';
                         break;
                     case 'b+':
                         $status = 'Скасовані';
                         break;
                     default:
                         $status = 'Скасований';
                         break;
                 }
             }
             if ($status == 'Затвердження') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Затверджена';
                         break;
                     case 'b':
                         $status = 'Затверджено';
                         break;
                     case 'b+':
                         $status = 'Затверджені';
                         break;
                     default:
                         $status = 'Затверджений';
                         break;
                 }
             } elseif (mb_strpos($status, 'Набрання чинності') !== FALSE) {
                 $status = preg_replace('| міжнародного договору|u', '', $status);
                 switch ($type->getRid()) {
                     case 'f':
                         $status = preg_replace('|Набрання чинності|u', 'Набрала чинності', $status);
                         break;
                     case 'b':
                         $status = preg_replace('|Набрання чинності|u', 'Набрало чинності', $status);
                         break;
                     case 'b+':
                         $status = preg_replace('|Набрання чинності|u', 'Набрали чинності', $status);
                         break;
                     default:
                         $status = preg_replace('|Набрання чинності|u', 'Набрав чинності', $status);
                         break;
                 }
             } elseif ($status == 'Введення в дію') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Введена в дію';
                         break;
                     case 'b':
                         $status = 'Введено в дію';
                         break;
                     case 'b+':
                         $status = 'Введені в дію';
                         break;
                     default:
                         $status = 'Введений в дію';
                         break;
                 }
             } elseif ($status == 'Припинення дії') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Припинила дію';
                         break;
                     case 'b':
                         $status = 'Припинило дію';
                         break;
                     case 'b+':
                         $status = 'Припинили дію';
                         break;
                     default:
                         $status = 'Припинив дію';
                         break;
                 }
             } elseif ($status == 'Зупинення дії') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Зупинила дію';
                         break;
                     case 'b':
                         $status = 'Зупинило дію';
                         break;
                     case 'b+':
                         $status = 'Зупинили дію';
                         break;
                     default:
                         $status = 'Зупинив дію';
                         break;
                 }
             } elseif ($status == 'Відновлення дії') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Відновила дію';
                         break;
                     case 'b':
                         $status = 'Відновило дію';
                         break;
                     case 'b+':
                         $status = 'Відновили дію';
                         break;
                     default:
                         $status = 'Відновив дію';
                         break;
                 }
             } elseif ($status == 'Не набрав чинності') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Не набрала чинності';
                         break;
                     case 'b':
                         $status = 'Не набрало чинності';
                         break;
                     case 'b+':
                         $status = 'Не набрали чинності';
                         break;
                     default:
                         $status = 'Не набрав чинності';
                         break;
                 }
             } elseif ($status == 'Підписання') {
                 switch ($type->getRid()) {
                     case 'f':
                         $status = 'Підписана';
                         break;
                     case 'b':
                         $status = 'Підписано';
                         break;
                     case 'b+':
                         $status = 'Підписані';
                         break;
                     default:
                         $status = 'Підписаний';
                         break;
                 }
             } elseif ($status == 'Редакція') {
                 $status = 'Додано нову редакцію в';
             } elseif ($status == 'Тлумачення') {
                 $status = 'Додано нове тлумачення в';
             } elseif ($status == 'Приєднання' && $type == 'конвенція') {
                 $status = 'Приєднання до';
                 $type = 'конвенції';
             }
             if ($i > 0) {
                 $status = mb_strtolower($status);
             }
             $i++;
         }
         $last_status = array_pop($statuses);
         $status = $statuses ? implode(', ', $statuses) . ' та ' . $last_status : $last_status;
         $comment = $status . ' ' . $type_name . ' "' . $title . '"' . $reason;
         $comment = preg_replace('|україн|u', 'Україн', $comment);
         return $comment;
     }, $comment);
     return $comment;
 }