Ejemplo n.º 1
0
 /**
  * This filter produces files in USFM, html and text format.
  * The text files are to be used for showing the differences between them.
  * The files contain all verses that differ.
  * $bible: The Bible to go through.
  * $directory: The existing directory where to put the files.
  * Two files are created: verses_old.usfm and verses_new.usfm.
  * The book chapter.verse precede each verse.
  */
 public static function produceVerseLevel($bible, $directory)
 {
     $database_bibles = Database_Bibles::getInstance();
     $database_modifications = Database_Modifications::getInstance();
     $database_books = Database_Books::getInstance();
     $database_config_bible = Database_Config_Bible::getInstance();
     $stylesheet = $database_config_bible->getExportStylesheet($bible);
     $old_vs_usfm = array();
     $new_vs_usfm = array();
     $filter_text_old = new Filter_Text($bible);
     $filter_text_old->html_text_standard = new Html_Text(Locale_Translate::_("Bible"));
     $filter_text_old->text_text = new Text_Text();
     $filter_text_new = new Filter_Text($bible);
     $filter_text_new->html_text_standard = new Html_Text(Locale_Translate::_("Bible"));
     $filter_text_new->text_text = new Text_Text();
     $books = $database_modifications->getTeamDiffBooks($bible);
     foreach ($books as $book) {
         $bookname = $database_books->getEnglishFromId($book);
         $chapters = $database_modifications->getTeamDiffChapters($bible, $book);
         foreach ($chapters as $chapter) {
             // Go through the combined verse numbers in the old and new chapter.
             $old_chapter_usfm = $database_modifications->getTeamDiff($bible, $book, $chapter);
             $new_chapter_usfm = $database_bibles->getChapter($bible, $book, $chapter);
             $old_verse_numbers = Filter_Usfm::getVerseNumbers($old_chapter_usfm);
             $new_verse_numbers = Filter_Usfm::getVerseNumbers($new_chapter_usfm);
             $verses = array_merge($old_verse_numbers, $new_verse_numbers);
             $verses = array_unique($verses);
             sort($verses, SORT_NUMERIC);
             foreach ($verses as $verse) {
                 $old_verse_text = Filter_Usfm::getVerseText($old_chapter_usfm, $verse);
                 $new_verse_text = Filter_Usfm::getVerseText($new_chapter_usfm, $verse);
                 if ($old_verse_text != $new_verse_text) {
                     $usfmCode = "\\p {$bookname} {$chapter}.{$verse} {$old_verse_text}";
                     $old_vs_usfm[] = $usfmCode;
                     $filter_text_old->addUsfmCode($usfmCode);
                     $usfmCode = "\\p {$bookname} {$chapter}.{$verse} {$new_verse_text}";
                     $new_vs_usfm[] = $usfmCode;
                     $filter_text_new->addUsfmCode($usfmCode);
                 }
             }
         }
     }
     file_put_contents("{$directory}/verses_old.usfm", implode("\n", $old_vs_usfm));
     file_put_contents("{$directory}/verses_new.usfm", implode("\n", $new_vs_usfm));
     $filter_text_old->run($stylesheet);
     $filter_text_new->run($stylesheet);
     $filter_text_old->html_text_standard->save("{$directory}/verses_old.html");
     $filter_text_new->html_text_standard->save("{$directory}/verses_new.html");
     $filter_text_old->text_text->save("{$directory}/verses_old.txt");
     $filter_text_new->text_text->save("{$directory}/verses_new.txt");
 }
Ejemplo n.º 2
0
    echo Locale_Translate::_("Nothing to save");
    die;
}
// Check on valid UTF-8.
if (!Validate_Utf8::valid($usfm)) {
    echo Locale_Translate::_("Cannot save: Needs Unicode");
    die;
}
// Get the old chapter USFM into an array of verse => USFM fragment.
$usfmString = $database_bibles->getChapter($bible, $book, $chapter);
$verses = Filter_Usfm::getVerseNumbers($usfmString);
$verses = array_unique($verses);
sort($verses, SORT_NUMERIC);
$usfmArray = array();
foreach ($verses as $vs) {
    $usfmArray[$vs] = Filter_Usfm::getVerseText($usfmString, $vs);
}
// Store the verse USFM in the array.
$usfmArray[$verse] = $usfm;
// Create the updated chapter USFM as a string.
$usfm = implode("\n", $usfmArray);
$stylesheet = $database_config_user->getStylesheet();
$book_chapter_text = Filter_Usfm::import($usfm, $stylesheet);
foreach ($book_chapter_text as $data) {
    $book_number = $data[0];
    $chapter_number = $data[1];
    $chapter_data_to_save = $data[2];
    if (($book_number == $book || $book_number == 0) && $chapter_number == $chapter) {
        // Collect some data about the changes for this user.
        $username = $session_logic->currentUser();
        $oldID = $database_bibles->getChapterId($bible, $book, $chapter);
Ejemplo n.º 3
0
<?php

/*
Copyright (©) 2003-2014 Teus Benschop.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
require_once "../bootstrap/bootstrap.php";
page_access_level(Filter_Roles::TRANSLATOR_LEVEL);
$bible = $_GET['bible'];
$book = $_GET['book'];
$chapter = $_GET['chapter'];
$verse = $_GET['verse'];
$database_bibles = Database_Bibles::getInstance();
$usfm = $database_bibles->getChapter($bible, $book, $chapter);
$usfm = Filter_Usfm::getVerseText($usfm, $verse);
echo Checksum_Logic::send($usfm);
Ejemplo n.º 4
0
    public function testGetVerseText()
    {
        $usfm = <<<EOD
\\p
\\v 1 One
EOD;
        $this->assertEquals("\\v 1 One", Filter_Usfm::getVerseText($usfm, 1));
        $this->assertEquals("\\p", Filter_Usfm::getVerseText($usfm, 0));
        $this->assertEquals("", Filter_Usfm::getVerseText($usfm, 2));
        $usfm = <<<'EOD'
\c 1
\s Isibingelelo
\p
\v 1 Umdala
\p
\v 2 Sithandwa
\v 3 Ngoba
\v 4 Kangilantokozo
\s Inkathazo
\p
\v 5 Sithandwa
\v 6 abafakazele
\v 7 Ngoba
\v 8 Ngakho
\p
\v 9 Ngabhalela
\v 10 Ngakho
\p
\v 11 Sithandwa
\v 12 NgoDemetriyu
\s Isicino
\p
\v 13 Bengilezinto
\v 14 kodwa
\p Ukuthula
EOD;
        $output = <<<'EOD'
\c 1
\s Isibingelelo
\p
EOD;
        $this->assertEquals($output, Filter_Usfm::getVerseText($usfm, 0));
        $output = <<<'EOD'
\v 1 Umdala
\p
EOD;
        $this->assertEquals($output, Filter_Usfm::getVerseText($usfm, 1));
        $output = <<<'EOD'
\v 12 NgoDemetriyu
\s Isicino
\p
EOD;
        $this->assertEquals($output, Filter_Usfm::getVerseText($usfm, 12));
    }
Ejemplo n.º 5
0
 public function updateSearchFields($name, $book, $chapter)
 {
     $database_bibles = Database_Bibles::getInstance();
     $database_config_bible = Database_Config_Bible::getInstance();
     $usfm = $database_bibles->getChapter($name, $book, $chapter);
     $stylesheet = $database_config_bible->getExportStylesheet($name);
     // Data to store.
     $usfmraw = array();
     $usfmlower = array();
     $plainraw = array();
     $plainlower = array();
     // Get the verses in the chapter.
     $verses = Filter_Usfm::getVerseNumbers($usfm);
     $verses = array_unique($verses);
     sort($verses, SORT_NUMERIC);
     // One column contains the raw USFM as it is, and another one the lowercase text.
     foreach ($verses as $verse) {
         $raw = Filter_Usfm::getVerseText($usfm, $verse);
         $lower = mb_convert_case($raw, MB_CASE_LOWER);
         $usfmraw[$verse] = $raw;
         $usfmlower[$verse] = $lower;
     }
     // Text filter for getting the plain text.
     $filter_text = new Filter_Text($name);
     $filter_text->text_text = new Text_Text();
     $filter_text->initializeHeadingsAndTextPerVerse();
     $filter_text->addUsfmCode($usfm);
     $filter_text->run($stylesheet);
     // Get the clean verse texts.
     $texts = $filter_text->getVersesText();
     foreach ($texts as $verse => $text) {
         if (!isset($plainraw[$verse])) {
             $plainraw[$verse] = "";
         }
         $plainraw[$verse] .= "{$text}\n";
     }
     // Add any clean headings.
     $headings = $filter_text->verses_headings;
     foreach ($headings as $verse => $heading) {
         if (!isset($plainraw[$verse])) {
             $plainraw[$verse] = "";
         }
         $plainraw[$verse] .= "{$heading}\n";
     }
     // Create the lower case plain text.
     foreach ($plainraw as $verse => $raw) {
         $plainlower[$verse] = mb_convert_case($raw, MB_CASE_LOWER);
     }
     // Get all possible verses.
     $allverses = array_merge(array_keys($usfmraw), array_keys($plainraw));
     $allverses = array_unique($allverses);
     // Store everything.
     Database_SQLite::exec($this->db, "BEGIN;");
     $name = Database_SQLiteInjection::no($name);
     $book = Database_SQLiteInjection::no($book);
     $chapter = Database_SQLiteInjection::no($chapter);
     $query = "DELETE FROM bibles WHERE bible = '{$name}' AND book = {$book} AND chapter = {$chapter};";
     Database_SQLite::exec($this->db, $query);
     foreach ($allverses as $verse) {
         if ($verse == "") {
             $verse = 0;
         }
         $verse = (int) $verse;
         @($ur = Database_SQLiteInjection::no($usfmraw[$verse]));
         @($ul = Database_SQLiteInjection::no($usfmlower[$verse]));
         @($pr = Database_SQLiteInjection::no($plainraw[$verse]));
         @($pl = Database_SQLiteInjection::no($plainlower[$verse]));
         $query = "INSERT INTO bibles (bible, book, chapter, verse, usfmraw, usfmlower, plainraw, plainlower) VALUES ('{$name}', {$book}, {$chapter}, {$verse}, '{$ur}', '{$ul}', '{$pr}', '{$pl}');";
         Database_SQLite::exec($this->db, $query);
     }
     Database_SQLite::exec($this->db, "COMMIT;");
 }
Ejemplo n.º 6
0
if ($check_versification) {
    Checks_Versification::books($bible, $books);
}
foreach ($books as $book) {
    $chapters = $database_bibles->getChapters($bible, $book);
    if ($check_versification) {
        Checks_Versification::chapters($bible, $book, $chapters);
    }
    foreach ($chapters as $chapter) {
        $chapterUsfm = $database_bibles->getChapter($bible, $book, $chapter);
        $verses = Filter_Usfm::getVerseNumbers($chapterUsfm);
        if ($check_versification) {
            Checks_Versification::verses($bible, $book, $chapter, $verses);
        }
        foreach ($verses as $verse) {
            $verseUsfm = Filter_Usfm::getVerseText($chapterUsfm, $verse);
            if ($check_double_spaces_usfm) {
                Checks_Space::doubleSpaceUsfm($bible, $book, $chapter, $verse, $verseUsfm);
            }
        }
        $filter_text = new Filter_Text($bible);
        $filter_text->initializeHeadingsAndTextPerVerse();
        $filter_text->addUsfmCode($chapterUsfm);
        $filter_text->run($stylesheet);
        $verses_headings = $filter_text->verses_headings;
        $verses_text = $filter_text->getVersesText();
        if ($check_full_stop_in_headings) {
            Checks_Headers::noPunctuationAtEnd($bible, $book, $chapter, $verses_headings, $center_marks, $end_marks);
        }
        if ($check_space_before_punctuation) {
            Checks_Space::spaceBeforePunctuation($bible, $book, $chapter, $verses_text);
Ejemplo n.º 7
0
function processIdentifiers($user, $bible, $book, $chapter, $oldId, $newId, &$email)
{
    if ($oldId != 0) {
        $database_modifications = Database_Modifications::getInstance();
        $database_config_user = Database_Config_User::getInstance();
        $database_config_bible = Database_Config_Bible::getInstance();
        $database_bibles = Database_Bibles::getInstance();
        $database_history = Database_History::getInstance();
        $stylesheet = $database_config_bible->getExportStylesheet($bible);
        $old_chapter_usfm = $database_modifications->getUserChapter($user, $bible, $book, $chapter, $oldId);
        $old_chapter_usfm = $old_chapter_usfm['oldtext'];
        $new_chapter_usfm = $database_modifications->getUserChapter($user, $bible, $book, $chapter, $newId);
        $new_chapter_usfm = $new_chapter_usfm['newtext'];
        $timestamp = $database_modifications->getUserTimestamp($user, $bible, $book, $chapter, $newId);
        $old_verse_numbers = Filter_Usfm::getVerseNumbers($old_chapter_usfm);
        $new_verse_numbers = Filter_Usfm::getVerseNumbers($new_chapter_usfm);
        $verses = array_merge($old_verse_numbers, $new_verse_numbers);
        $verses = array_unique($verses);
        sort($verses, SORT_NUMERIC);
        foreach ($verses as $verse) {
            $old_verse_usfm = Filter_Usfm::getVerseText($old_chapter_usfm, $verse);
            $new_verse_usfm = Filter_Usfm::getVerseText($new_chapter_usfm, $verse);
            if ($old_verse_usfm != $new_verse_usfm) {
                $filter_text_old = new Filter_Text($bible);
                $filter_text_new = new Filter_Text($bible);
                $filter_text_old->html_text_standard = new Html_Text(Locale_Translate::_("Bible"));
                $filter_text_new->html_text_standard = new Html_Text(Locale_Translate::_("Bible"));
                $filter_text_old->text_text = new Text_Text();
                $filter_text_new->text_text = new Text_Text();
                $filter_text_old->addUsfmCode($old_verse_usfm);
                $filter_text_new->addUsfmCode($new_verse_usfm);
                $filter_text_old->run($stylesheet);
                $filter_text_new->run($stylesheet);
                $old_html = $filter_text_old->html_text_standard->getInnerHtml();
                $new_html = $filter_text_new->html_text_standard->getInnerHtml();
                $old_text = $filter_text_old->text_text->get();
                $new_text = $filter_text_new->text_text->get();
                if ($old_text != $new_text) {
                    $modification = Filter_Diff::diff($old_text, $new_text);
                    $email .= "<div>";
                    $email .= Filter_Books::passageDisplay($book, $chapter, $verse);
                    $email .= " ";
                    $email .= $modification;
                    $email .= "</div>";
                    if ($database_config_user->getUserUserChangesNotificationsOnline($user)) {
                        $changeNotificationUsers = array($user);
                        $database_modifications->recordNotification($changeNotificationUsers, "☺", $bible, $book, $chapter, $verse, $old_html, $modification, $new_html);
                    }
                    $database_history->record($timestamp, $user, $bible, $book, $chapter, $verse, $old_html, $modification, $new_html);
                }
            }
        }
    }
}
Ejemplo n.º 8
0
     $absent[] = Locale_Translate::_("Bible/Resource") . " " . $compare . " " . Locale_Translate::_("does not contain") . " {$bookName} {$chapter}.";
     continue;
 }
 $bible_chapter_usfm = $database_bibles->getChapter($bible, $book, $chapter);
 $compare_chapter_usfm = $database_bibles->getChapter($compare, $book, $chapter);
 if ($compare_chapter_usfm == "") {
     $compare_chapter_usfm = $database_usfmresources->getUsfm($compare, $book, $chapter);
 }
 $bible_verse_numbers = Filter_Usfm::getVerseNumbers($bible_chapter_usfm);
 $compare_verse_numbers = Filter_Usfm::getVerseNumbers($compare_chapter_usfm);
 $verses = array_merge($bible_verse_numbers, $compare_verse_numbers);
 $verses = array_unique($verses);
 sort($verses, SORT_NUMERIC);
 foreach ($verses as $verse) {
     $bible_verse_usfm = Filter_Usfm::getVerseText($bible_chapter_usfm, $verse);
     $compare_verse_usfm = Filter_Usfm::getVerseText($compare_chapter_usfm, $verse);
     if ($bible_verse_usfm != $compare_verse_usfm) {
         $filter_text_bible = new Filter_Text($bible);
         $filter_text_compare = new Filter_Text($compare);
         $filter_text_bible->html_text_standard = new Html_Text("");
         $filter_text_compare->html_text_standard = new Html_Text("");
         $filter_text_bible->text_text = new Text_Text();
         $filter_text_compare->text_text = new Text_Text();
         $filter_text_bible->addUsfmCode($bible_verse_usfm);
         $filter_text_compare->addUsfmCode($compare_verse_usfm);
         $filter_text_bible->run($stylesheet);
         $filter_text_compare->run($stylesheet);
         $bible_html = $filter_text_bible->html_text_standard->getInnerHtml();
         $compare_html = $filter_text_compare->html_text_standard->getInnerHtml();
         $bible_text = $filter_text_bible->text_text->get();
         $compare_text = $filter_text_compare->text_text->get();
Ejemplo n.º 9
0
        if ($xref['verse'] == $verse) {
            $xrefs[] = array($xref['offset'], $xref['text']);
        }
    }
    if (empty($xrefs)) {
        continue;
    }
    // Get the USFM for the current verse in the target Bible, if any.
    if (!isset($usfmArray[$verse])) {
        continue;
    }
    $usfm = $usfmArray[$verse];
    // Get the length of the text of the verse in the source Bible without the xrefs.
    // Get the ratio for positioning the xrefs by comparing the lengths of source and target verse text.
    $sourceUsfm = $database_bibles->getChapter($sourceBible, $book, $chapter);
    $sourceUsfm = Filter_Usfm::getVerseText($sourceUsfm, $verse);
    $sourceUsfm = Filter_Usfm::removeNotes($sourceUsfm, array("x"));
    $sourceLength = mb_strlen($sourceUsfm);
    $targetLength = mb_strlen($usfm);
    $ratio = $targetLength / $sourceLength;
    // Insert the notes.
    $usfm = Filter_Usfm::insertNotes($usfm, $xrefs, $ratio);
    $usfmArray[$verse] = $usfm;
}
$usfm = implode("\n", $usfmArray);
Bible_Logic::storeChapter($targetBible, $book, $chapter, $usfm);
$header = new Assets_Header(Locale_Translate::_("Cross references"));
$header->run();
$view = new Assets_View(__FILE__);
$view->render("insert.php");
Assets_Page::footer();
Ejemplo n.º 10
0
$count = count($identifiers);
$view->view->count = $count;
$summaries = array();
$verse_texts = array();
$contents = array();
foreach ($identifiers as $identifier) {
    $summary = $database_notes->getSummary($identifier);
    $passages = $database_notes->getPassages($identifier);
    $verses = Filter_Books::passagesDisplayInline($passages);
    $summaries[] = $summary . " | " . $verses;
    $verse_text = "";
    if ($passage_inclusion_selector) {
        $passages = $database_notes->getPassages($identifier);
        foreach ($passages as $passage) {
            $usfm = $database_bibles->getChapter($bible, $passage[0], $passage[1]);
            $text = Filter_Usfm::getVerseText($usfm, $passage[2]);
            $verse_text .= $text;
            $verse_text .= "\n";
        }
    }
    $verse_texts[] = nl2br($verse_text);
    $content = "";
    if ($text_inclusion_selector) {
        $content = $database_notes->getContents($identifier);
    }
    $contents[] = $content;
}
$view->view->summaries = $summaries;
$view->view->versetexts = $verse_texts;
$view->view->contents = $contents;
$view->render("notes.php");
Ejemplo n.º 11
0
 public static function getText($resource, $book, $chapter, $verse)
 {
     $database_bibles = Database_Bibles::getInstance();
     $database_resources = Database_Resources::getInstance();
     $database_usfmresources = Database_UsfmResources::getInstance();
     $database_offlineresources = Database_OfflineResources::getInstance();
     $bibles = $database_bibles->getBibles();
     $usfms = $database_usfmresources->getResources();
     $externals = $database_resources->getNames();
     $isBible = in_array($resource, $bibles);
     $isUsfm = in_array($resource, $usfms);
     if ($isBible || $isUsfm) {
         if ($isBible) {
             $chapter_usfm = $database_bibles->getChapter($resource, $book, $chapter);
         }
         if ($isUsfm) {
             $chapter_usfm = $database_usfmresources->getUsfm($resource, $book, $chapter);
         }
         $verse_usfm = Filter_Usfm::getVerseText($chapter_usfm, $verse);
         $database_config_user = Database_Config_User::getInstance();
         $stylesheet = $database_config_user->getStylesheet();
         $filter_text = new Filter_Text($resource);
         $filter_text->text_text = new Text_Text();
         $filter_text->addUsfmCode($verse_usfm);
         $filter_text->run($stylesheet);
         $text = $filter_text->text_text->get();
     } else {
         if (in_array($resource, $externals)) {
             // Use offline copy if it exists, else fetch it online.
             if ($database_offlineresources->exists($resource, $book, $chapter, $verse)) {
                 $text = $database_offlineresources->get($resource, $book, $chapter, $verse);
             } else {
                 $text = Resource_Logic::getExternal($resource, $book, $chapter, $verse, true);
             }
             $text = Filter_Html::html2text($text);
         } else {
             $text = "";
         }
     }
     return $text;
 }
Ejemplo n.º 12
0
 $database_logs->log("{$history} {$path}", Filter_Roles::MANAGER_LEVEL);
 $data = Filter_Git::explodePath($path);
 if ($data) {
     $book = $data['book'];
     $chapter = $data['chapter'];
     $data = Filter_Git::changes($directory, $sha1, $path);
     $oldusfm = $data['old'];
     $newusfm = $data['new'];
     $oldverses = Filter_Usfm::getVerseNumbers($oldusfm);
     $newverses = Filter_Usfm::getVerseNumbers($newusfm);
     $verses = array_merge($oldverses, $newverses);
     $verses = array_unique($verses);
     sort($verses, SORT_NUMERIC);
     foreach ($verses as $verse) {
         $old_verse_usfm = Filter_Usfm::getVerseText($oldusfm, $verse);
         $new_verse_usfm = Filter_Usfm::getVerseText($newusfm, $verse);
         if ($old_verse_usfm != $new_verse_usfm) {
             $filter_text_old = new Filter_Text($bible);
             $filter_text_new = new Filter_Text($bible);
             $filter_text_old->html_text_standard = new Html_Text("");
             $filter_text_new->html_text_standard = new Html_Text("");
             $filter_text_old->text_text = new Text_Text();
             $filter_text_new->text_text = new Text_Text();
             $filter_text_old->addUsfmCode($old_verse_usfm);
             $filter_text_new->addUsfmCode($new_verse_usfm);
             $filter_text_old->run($stylesheet);
             $filter_text_new->run($stylesheet);
             $old_html = $filter_text_old->html_text_standard->getInnerHtml();
             $new_html = $filter_text_new->html_text_standard->getInnerHtml();
             $old_text = $filter_text_old->text_text->get();
             $new_text = $filter_text_new->text_text->get();