void Navigation_Passage::setPassage (void * webserver_request, string bible, string passage) { int currentBook = Ipc_Focus::getBook (webserver_request); int currentChapter = Ipc_Focus::getChapter (webserver_request); int currentVerse = Ipc_Focus::getVerse (webserver_request); passage = filter_string_trim (passage); Passage passage_to_set; if ((passage == "") || (passage == "+")) { passage_to_set = Navigation_Passage::getNextVerse (webserver_request, bible, currentBook, currentChapter, currentVerse); } else if (passage == "-") { passage_to_set = Navigation_Passage::getPreviousVerse (webserver_request, bible, currentBook, currentChapter, currentVerse); } else { Passage inputpassage = Passage ("", currentBook, currentChapter, convert_to_string (currentVerse)); passage_to_set = filter_passage_interpret_passage (inputpassage, passage); } if (passage_to_set.book != 0) { Ipc_Focus::set (webserver_request, passage_to_set.book, passage_to_set.chapter, convert_to_int (passage_to_set.verse)); Navigation_Passage::recordHistory (webserver_request, passage_to_set.book, passage_to_set.chapter, convert_to_int (passage_to_set.verse)); } }
string Consistency_Logic::response () { // The request. Webserver_Request * request = (Webserver_Request *) webserver_request; // The resources to display in the Consistency tool. vector <string> resources = request->database_config_user()->getConsistencyResources (); string bible = access_bible_clamp (webserver_request, request->database_config_user()->getBible ()); resources.insert (resources.begin (), bible); // The passages entered in the Consistency tool. string s_passages = Database_Volatile::getValue (id, "passages"); s_passages = filter_string_trim (s_passages); vector <string> passages = filter_string_explode (s_passages, '\n'); // The translations entered in the Consistency tool. string s_translations = Database_Volatile::getValue (id, "translations"); s_translations = filter_string_trim (s_translations); vector <string> translations = filter_string_explode (s_translations, '\n'); // Contains the response to display. vector <string> response; // Go through the passages interpreting them. Passage previousPassage = Passage ("", 1, 1, "1"); for (auto line : passages) { // Clean line. line = filter_string_trim (line); // Skip empty line. if (line.empty ()) continue; // Remove verse text remaining with the passage(s) only. line = omit_verse_text (line); vector <string> range_sequence = filter_passage_handle_sequences_ranges (line); for (auto line : range_sequence) { Passage passage = filter_passage_interpret_passage (previousPassage, line); if (passage.book != 0) { int book = passage.book; int chapter = passage.chapter; string verse = passage.verse; line = filter_passage_link_for_opening_editor_at (book, chapter, verse); line += " "; // Check whether the chapter identifier has changed for this reference. // If so, set a flag so the data can be re-assembled for this verse. // If there was no change, then the data can be fetched from the volatile database. bool redoPassage = false; string passageKey = convert_to_string (book) + "." + convert_to_string (chapter) + "." + verse; int currentChapterId = request->database_bibles()->getChapterId (resources [0], book, chapter); int storedChapterId = convert_to_int (Database_Volatile::getValue (id, passageKey + ".id")); if (currentChapterId != storedChapterId) { Database_Volatile::setValue (id, passageKey + ".id", convert_to_string (currentChapterId)); redoPassage = true; } // Go through each resource. for (auto resource : resources) { // Produce new verse text if the passage is to be redone, or else fetch the existing text. string text; if (redoPassage) { text = verseText (resource, book, chapter, convert_to_int (verse)); if (!translations.empty ()) { text = filter_string_markup_words (translations, text); } Database_Volatile::setValue (id, passageKey + "." + resource, text); } else { text = Database_Volatile::getValue (id, passageKey + "." + resource); } // Formatting. if (resources.size () > 1) { line += "<br>"; } line += text; } response.push_back (line); previousPassage = passage; } else { response.push_back ("<span class=\"error\">" + translate("Unknown passage") + " " + line + "</span>"); } } } string output; for (auto line : response) { output += "<div>" + line + "</div>\n"; } return output; }