string bible_abbreviations (void * webserver_request) { Webserver_Request * request = (Webserver_Request *) webserver_request; string page; Assets_Header header = Assets_Header (translate("Abbreviations"), webserver_request); header.addBreadCrumb (menu_logic_settings_menu (), menu_logic_settings_text ()); header.addBreadCrumb (bible_manage_url (), menu_logic_bible_manage_text ()); page = header.run (); Assets_View view; string success_message; string error_message; // The name of the Bible. string bible = access_bible_clamp (request, request->query ["bible"]); view.set_variable ("bible", filter_string_sanitize_html (bible)); // Data submission. if (request->post.count ("submit")) { string data = request->post ["data"]; data = filter_string_trim (data); if (data != "") { if (unicode_string_is_valid (data)) { Database_Config_Bible::setBookAbbreviations (bible, data); success_message = translate("The abbreviations were saved."); } else { error_message = translate("Please supply valid Unicode UTF-8 text."); } } else { success_message = translate("Nothing was saved."); } } string data = Database_Config_Bible::getBookAbbreviations (bible); data = filter_abbreviations_display (data); view.set_variable ("data", data); view.set_variable ("success_message", success_message); view.set_variable ("error_message", error_message); page += view.render ("bible", "abbreviations"); page += Assets_Page::footer (); return page; }
string bible_book (void * webserver_request) { Webserver_Request * request = (Webserver_Request *) webserver_request; string page; Assets_Header header = Assets_Header (translate("Book"), webserver_request); header.addBreadCrumb (menu_logic_settings_menu (), menu_logic_settings_text ()); header.addBreadCrumb (bible_manage_url (), menu_logic_bible_manage_text ()); page = header.run (); Assets_View view; string success_message; string error_message; // The name of the Bible. string bible = access_bible_clamp (request, request->query["bible"]); view.set_variable ("bible", filter_string_sanitize_html (bible)); // The book. int book = convert_to_int (request->query ["book"]); view.set_variable ("book", convert_to_string (book)); string book_name = Database_Books::getEnglishFromId (book); view.set_variable ("book_name", filter_string_sanitize_html (book_name)); // Whether the user has write access to this Bible book. bool write_access = access_bible_book_write (request, "", bible, book); if (write_access) view.enable_zone ("write_access"); // Delete chapter. string deletechapter = request->query ["deletechapter"]; if (deletechapter != "") { string confirm = request->query ["confirm"]; if (confirm == "") { Dialog_Yes dialog_yes = Dialog_Yes ("book", translate("Would you like to delete this chapter?")); dialog_yes.add_query ("bible", bible); dialog_yes.add_query ("book", convert_to_string (book)); dialog_yes.add_query ("deletechapter", deletechapter); page += dialog_yes.run (); return page; } if (confirm == "yes") { if (write_access) Bible_Logic::deleteChapter (bible, book, convert_to_int (deletechapter)); } } // Add chapter. if (request->query.count ("createchapter")) { Dialog_Entry dialog_entry = Dialog_Entry ("book", translate("Please enter the number for the new chapter"), "", "createchapter", ""); dialog_entry.add_query ("bible", bible); dialog_entry.add_query ("book", convert_to_string (book)); page += dialog_entry.run (); return page; } if (request->post.count ("createchapter")) { int createchapter = convert_to_int (request->post ["entry"]); vector <int> chapters = request->database_bibles ()->getChapters (bible, book); // Only create the chapters if it does not yet exist. if (find (chapters.begin(), chapters.end(), createchapter) == chapters.end()) { vector <string> feedback; bool result = true; if (write_access) result = book_create (bible, book, createchapter, feedback); string message = filter_string_implode (feedback, " "); if (result) success_message = message; else error_message = message; } else { error_message = translate ("This chapter already exists"); } } // Available chapters. vector <int> chapters = request->database_bibles ()->getChapters (bible, book); string chapterblock; for (auto & chapter : chapters) { chapterblock.append ("<a href=\"chapter?bible="); chapterblock.append (bible); chapterblock.append ("&book="); chapterblock.append (convert_to_string (book)); chapterblock.append ("&chapter="); chapterblock.append (convert_to_string (chapter)); chapterblock.append ("\">"); chapterblock.append (convert_to_string (chapter)); chapterblock.append ("</a>\n"); } view.set_variable ("chapterblock", chapterblock); view.set_variable ("success_message", success_message); view.set_variable ("error_message", error_message); if (!client_logic_client_enabled ()) view.enable_zone ("server"); page += view.render ("bible", "book"); page += Assets_Page::footer (); return page; }
string bible_import (void * webserver_request) { Webserver_Request * request = (Webserver_Request *) webserver_request; string page; Assets_Header header = Assets_Header (translate("Import"), webserver_request); header.setNavigator (); header.addBreadCrumb (menu_logic_settings_menu (), menu_logic_settings_text ()); header.addBreadCrumb (bible_manage_url (), menu_logic_bible_manage_text ()); page = header.run (); Assets_View view; string success_message; string error_message; // The name of the Bible. string bible = access_bible_clamp (request, request->query["bible"]); view.set_variable ("bible", filter_string_sanitize_html (bible)); int book = Ipc_Focus::getBook (webserver_request); int chapter = Ipc_Focus::getChapter (webserver_request); // Whether the user has write access to this Bible. bool write_access = access_bible_write (request, bible); if (write_access) view.enable_zone ("write_access"); // USFM data submission. if (request->post.count ("submit")) { // Submission may take long if there's a lot of data or the network is slow. string data = request->post ["data"]; data = filter_url_tag_to_plus (data); data = filter_string_trim (data); if (data != "") { if (unicode_string_is_valid (data)) { string datafile = filter_url_tempfile (); filter_url_file_put_contents (datafile, data); success_message = translate("Import has started. See Journal for progress."); tasks_logic_queue (IMPORTBIBLE, { datafile, bible, convert_to_string (book), convert_to_string (chapter) }); } else { error_message = translate("Please supply valid Unicode UTF-8 text."); } } else { success_message = translate("Nothing was imported."); } // User imported something into this Bible: Set it as the default Bible. request->database_config_user()->setBible (bible); } // File upload. if (request->post.count ("upload")) { string datafile = filter_url_tempfile () + request->post ["filename"]; string data = request->post ["data"]; if (!data.empty ()) { filter_url_file_put_contents (datafile, data); success_message = translate("Import has started. See Journal for progress."); tasks_logic_queue (IMPORTBIBLE, { datafile, bible, convert_to_string (book), convert_to_string (chapter) }); } else { error_message = translate ("Nothing was uploaded"); } // User imported something into this Bible: Set it as the default Bible. request->database_config_user()->setBible (bible); } #ifdef HAVE_UPLOAD view.enable_zone ("enable_upload"); #else view.enable_zone ("disable_upload"); #endif view.set_variable ("success_message", success_message); view.set_variable ("error_message", error_message); page += view.render ("bible", "import"); page += Assets_Page::footer (); return page; }