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
    die;
}
// Check there's anything to save at all.
$usfm = trim($usfm);
if ($usfm == "") {
    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];
Ejemplo n.º 3
0
    public function testGetVerseNumbersTwo()
    {
        $usfm = <<<'EOD'
\c 80
\s Umkhuleko wokusizwa kukaIsrayeli
\d Kumqondisi wokuhlabelela. NgeShoshanimi. Ubufakazi. Isihlabelelo sikaAsafi
\p
\v 1 Melusi kaIsrayeli, beka indlebe, okhokhela uJosefa\x + Hlab. 81.5.\x* njengomhlambi\x + Gen. 48.15. 49.24. Hlab. 77.20. Hlab. 95.7.\x*, ohlezi \add phakathi\add* \w kwamakherubhi\w**\x + Hlab. 99.1. Eks. 25.22.\x*, khanyisa\x + Hlab. 50.2.\x*.
\v 2 Phambi kukaEfrayimi loBhenjamini loManase\x + Nani 2.18-23.\x* vusa amandla akho, uze ube lusindiso lwethu\x + Hlab. 35.23.\x*.
\p
\v 3 Siphendule, Nkulunkulu\x + 80.7,14,19. Hlab. 60.1. 85.4. Lilo 5.21.\x*, wenze ubuso bakho bukhanye, ngakho sizasindiswa\x + Nani 6.25. Hlab. 4.6.\x*.
\p
\v 4 N\nd kosi\nd* Nkulunkulu wamabandla\x + Ps 59.5. 84.8.\x*, koze kube nini uthukuthelela umkhuleko wabantu bakho\x + Hlab. 74.10.\x*?
\v 5 Ubenze badla isinkwa sezinyembezi\x + Hlab. 42.3. Hlab. 102.9.\x*, wabanathisa izinyembezi ngesilinganiso\x + Isa. 40.12.\x*.
\v 6 Usenza sibe yingxabano kubomakhelwane bethu, lezitha zethu ziyahlekisana \add ngathi\x + Hlab. 44.13. 79.4.\x*\add*.
\p
\v 7 Siphendule, Nkulunkulu wamabandla, wenze ubuso bakho bukhanye, ngakho sizasindiswa\x + 80.7,14,19. Hlab. 60.1. 85.4. Lilo 5.21.\x*.
\p
\v 8 Waliletha ivini livela eGibhithe\x + Isa. 5.1-7. 27.2. Jer. 2.21. 12.10. Hez. 15.6. 17.6. 19.10. Mat. 21.33. Mark. 12.1. Luka 20.9. Joha. 15.1-6.\x*, wazixotsha izizwe\x + Hlab. 78.55.\x*, walihlanyela lona\x + Hlab. 44.2.\x*.
\v 9 Walungisa \add indawo\add* phambi kwalo\x + Gen. 24.31. Josh. 24.12.\x*, wagxilisa impande zalo, laze lagcwala umhlaba.
\v 10 Izintaba zembeswa ngomthunzi walo, lezingatsha zalo zi\add njenge\add*misedari kaNkulunkulu.
\v 11 Lanabisela ingatsha zalo elwandle\x + Jobe 14.9.\x*, lamahlumela alo\x + Jobe 8.16.\x* emfuleni\x + Hlab. 72.8.\x*.
\v 12 Uyibhobozeleni imiduli yalo\x + Hlab. 89.40,41. Isa. 5.5.\x*, ukuze balikhe bonke abadlula ngendlela\x + Hlab. 89.40,41. Isa. 5.5.\x*?
\v 13 Ingulube yasehlathini iyalihlikiza\x + Jer. 5.6.\x*, lenyamazana yeganga iyalidla\x + Hlab. 50.11.\x*.
\p
\v 14 Nkulunkulu wamabandla, akubuyele\x + 80.3.\x*, ukhangele phansi usemazulwini\x + Isa. 63.15.\x*, ubone, wethekelele lelivini\x + Hlab. 84.9.\x*,
\v 15 ngitsho isivini isandla sakho sokunene esasihlanyelayo, lendodana\x + Gen. 49.22.\x* \add o\add*waziqinisela \add yona\x + 80.17. Isa.44.14.\x*\add*.
\v 16 Sitshisiwe ngomlilo\x + Isa. 33.12.\x*, saqunyelwa phansi\x + Isa. 33.12.\x*; bayabhubha ngokukhuza kobuso bakho\x + Hlab. 76.6. Hlab. 39.11.\x*.
\v 17 Isandla sakho kasibe phezu komuntu\x + Hlab. 89.21. Luka 1.66.\x* wesandla sakho sokunene\x + 80.15.\x*, phezu kwendodana yomuntu\x + Hlab. 8.4,5.\x*, \add o\add*ziqinisele \add yona\x + 80.17. Isa. 44.14.\x*\x + Hlab. 89.21. Luka 1.66.\x*\add*.
\v 18 Ngakho kasiyikubuyela emuva sisuke kuwe; sivuselele, khona sizabiza ibizo lakho\x + Hlab. 71.20.\x*.
\p
\v 19 N\nd kosi\nd*, Nkulunkulu wamabandla, siphendule, wenze ubuso bakho bukhanye, ngakho sizasindiswa\x + 80.3,7.\x*.
EOD;
        $this->assertEquals(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19), Filter_Usfm::getVerseNumbers($usfm));
    }
Ejemplo n.º 4
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.º 5
0
$check_patterns = $database_config_bible->getCheckPatterns($bible);
$checking_patterns = $database_config_bible->getCheckingPatterns($bible);
$checking_patterns = Filter_String::string2array($checking_patterns);
$checking_patterns = array_filter($checking_patterns, 'strlen');
$books = $database_bibles->getBooks($bible);
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();
Ejemplo n.º 6
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.º 7
0
 private static function getPreviousVerse($bible, $book, $chapter, $verse)
 {
     $verse--;
     if ($bible != "") {
         $database_bibles = Database_Bibles::getInstance();
         $verses = Filter_Usfm::getVerseNumbers($database_bibles->getChapter($bible, $book, $chapter));
         if (!in_array($verse, $verses)) {
             $verse = array_shift($verses);
         }
     }
     $passage = array($book, $chapter, $verse);
     return $passage;
 }
Ejemplo n.º 8
0
            }
        }
    }
}
// Updating the search indexes if there's a difference with the data in the Bibles.
// There's a difference if the raw USFM differs.
// When the raw USFM matches for a chapter, than this chapter is considered okay.
$bibles = $database_bibles->getBibles();
foreach ($bibles as $bible) {
    $database_logs->log("Updating search index for Bible {$bible}", Filter_Roles::MANAGER_LEVEL);
    $books = $database_bibles->getBooks($bible);
    foreach ($books as $book) {
        $chapters = $database_bibles->getChapters($bible, $book);
        foreach ($chapters as $chapter) {
            $usfm = $database_bibles->getChapter($bible, $book, $chapter);
            $verses = Filter_Usfm::getVerseNumbers($usfm);
            $updateChapter = false;
            foreach ($verses as $verse) {
                if (!$updateChapter) {
                    $verseUSFM = Filter_Usfm::getVerseText($usfm, $verse);
                    $searchUSFM = $database_search->getBibleVerseUsfm($bible, $book, $chapter, $verse);
                    if ($searchUSFM != $verseUSFM) {
                        $updateChapter = true;
                    }
                }
            }
            if ($updateChapter) {
                $database_search->updateSearchFields($bible, $book, $chapter);
            }
        }
    }
Ejemplo n.º 9
0
 foreach ($chapters as $chapter) {
     if (!in_array($chapter, $bibleChapters)) {
         $absent[] = Locale_Translate::_("Bible") . " " . $bible . " " . Locale_Translate::_("does not contain") . " {$bookName} {$chapter}.";
         continue;
     }
     if (!in_array($chapter, $compareChapters) && !in_array($chapter, $resourceChapters)) {
         $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);
Ejemplo n.º 10
0
 public static function verseNumber2offset($usfm, $verse)
 {
     // Verse number 0 starts at offset 0.
     if ($verse == 0) {
         return 0;
     }
     $totalOffset = 0;
     $lines = explode("\n", $usfm);
     foreach ($lines as $line) {
         $verses = Filter_Usfm::getVerseNumbers($line);
         @($v = $verses[1]);
         if ($v == $verse) {
             return $totalOffset;
         }
         $totalOffset += mb_strlen($line);
         // Add 1 for new line.
         $totalOffset += 1;
     }
     return mb_strlen($usfm);
 }
Ejemplo n.º 11
0
 $author = Filter_Git::committer($directory, $sha1);
 $timestamp = Filter_Git::timestamp($directory, $sha1);
 $datetime = date('j F Y g:i:s a', $timestamp);
 $database_logs->log("{$history} {$author} {$datetime} {$bible} {$sha1}", Filter_Roles::MANAGER_LEVEL);
 $files = Filter_Git::files($directory, $sha1);
 foreach ($files as $path) {
     $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);