本文整理汇总了C++中Assets_View::enable_zone方法的典型用法代码示例。如果您正苦于以下问题:C++ Assets_View::enable_zone方法的具体用法?C++ Assets_View::enable_zone怎么用?C++ Assets_View::enable_zone使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Assets_View
的用法示例。
在下文中一共展示了Assets_View::enable_zone方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: basic_index
string basic_index (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
Assets_Header header = Assets_Header ("Settings", webserver_request);
string page = header.run ();
Assets_View view;
if (request->query.count ("changebible")) {
string changebible = request->query ["changebible"];
if (changebible == "") {
Dialog_List dialog_list = Dialog_List ("index", translate("Select which Bible to make the active one for editing"), "", "");
vector <string> bibles = access_bible_bibles (request);
for (auto & bible : bibles) {
dialog_list.add_row (bible, "changebible", bible);
}
page += dialog_list.run();
return page;
} else {
request->database_config_user()->setBible (changebible);
// Going to another Bible, ensure that the focused book exists there.
int book = Ipc_Focus::getBook (request);
vector <int> books = request->database_bibles()->getBooks (changebible);
if (find (books.begin(), books.end(), book) == books.end()) {
if (!books.empty ()) book = books [0];
else book = 0;
Ipc_Focus::set (request, book, 1, 1);
}
}
}
string bible = access_bible_clamp (request, request->database_config_user()->getBible ());
view.set_variable ("bible", bible);
#ifdef CLIENT_PREPARED
view.enable_zone ("client");
if (client_logic_client_enabled ()) {
view.enable_zone ("connected");
}
#else
view.enable_zone ("cloud");
#endif
page += view.render ("basic", "index");
page += Assets_Page::footer ();
return page;
}
示例2: index_listing
string index_listing (void * webserver_request, string url)
{
string page;
page = Assets_Page::header ("Bibledit", webserver_request);
// No breadcrumbs because the user can arrive here from more than one place.
Assets_View view;
url = filter_url_urldecode (url);
url = filter_url_create_path ("", url);
url = filter_string_str_replace ("\\", "/", url);
view.set_variable ("url", url);
string parent = filter_url_dirname_web (url);
if (parent.length () > 1) {
view.enable_zone ("parent");
view.set_variable ("parent", parent);
}
string directory = filter_url_create_root_path (url);
if (!file_or_dir_exists (directory) || filter_url_is_dir (directory)) {
vector <string> files = filter_url_scandir (directory);
for (auto & file : files) {
string path = filter_url_create_path (directory, file);
string line;
line.append ("<tr>");
line.append ("<td>");
line.append ("<a href=\"" + filter_url_create_path (url, file) + "\">");
line.append (file);
line.append ("</a>");
line.append ("</td>");
line.append ("<td>");
if (!filter_url_is_dir (path)) {
line.append (convert_to_string (filter_url_filesize (path)));
}
line.append ("</td>");
line.append ("</tr>");
file = line;
}
string listing = filter_string_implode (files, "\n");
if (listing.empty ()) listing = translate ("No files in this folder");
else {
listing.insert (0, "<table>");
listing.append ("</table>");
}
view.set_variable ("listing", listing);
} else {
string filename = filter_url_create_root_path (url);
return filter_url_file_get_contents (filename);
}
page += view.render ("index", "listing");
page += Assets_Page::footer ();
return page;
}
示例3: editverse_index
string editverse_index (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
bool touch = request->session_logic ()->touchEnabled ();
if (request->query.count ("switchbook") && request->query.count ("switchchapter")) {
int switchbook = convert_to_int (request->query ["switchbook"]);
int switchchapter = convert_to_int (request->query ["switchchapter"]);
Ipc_Focus::set (request, switchbook, switchchapter, 1);
Navigation_Passage::recordHistory (request, switchbook, switchchapter, 1);
}
string page;
Assets_Header header = Assets_Header (translate("Edit USFM"), request);
header.setNavigator ();
if (touch) header.jQueryTouchOn ();
header.notifItOn ();
header.addBreadCrumb (menu_logic_translate_menu (), menu_logic_translate_text ());
page = header.run ();
Assets_View view;
if (request->query.count ("changebible")) {
string changebible = request->query ["changebible"];
if (changebible == "") {
Dialog_List dialog_list = Dialog_List ("index", translate("Select which Bible to open in the editor"), "", "");
vector <string> bibles = access_bible_bibles (request);
for (auto bible : bibles) {
dialog_list.add_row (bible, "changebible", bible);
}
page += dialog_list.run();
return page;
} else {
request->database_config_user()->setBible (changebible);
}
}
// Get active Bible, and check read access to it.
// If needed, change Bible to one it has read access to.
string bible = access_bible_clamp (request, request->database_config_user()->getBible ());
if (request->query.count ("bible")) bible = access_bible_clamp (request, request->query ["bible"]);
view.set_variable ("bible", bible);
// Store the active Bible in the page's javascript.
view.set_variable ("navigationCode", Navigation_Passage::code (bible));
string chapterLoaded = locale_logic_text_loaded ();
string chapterSaving = locale_logic_text_saving ();
string chapterSaved = locale_logic_text_saved ();
string chapterRetrying = locale_logic_text_retrying ();
string script =
"var verseEditorVerseLoaded = '" + chapterLoaded + "';\n"
"var verseEditorVerseSaving = '" + chapterSaving + "';\n"
"var verseEditorVerseSaved = '" + chapterSaved + "';\n"
"var verseEditorChapterRetrying = '" + chapterRetrying + "';\n"
"var verseEditorWriteAccess = true;"
"var unsentBibleDataTimeoutWarning = '" + bible_logic_unsent_unreceived_data_warning (false) + "';\n";
config_logic_swipe_enabled (webserver_request, script);
view.set_variable ("script", script);
string cls = Filter_Css::getClass (bible);
string font = Fonts_Logic::getTextFont (bible);
int direction = Database_Config_Bible::getTextDirection (bible);
int lineheight = Database_Config_Bible::getLineHeight (bible);
int letterspacing = Database_Config_Bible::getLetterSpacing (bible);
view.set_variable ("custom_class", cls);
view.set_variable ("custom_css", Filter_Css::getCss (cls,
Fonts_Logic::getFontPath (font),
direction,
lineheight,
letterspacing));
// Whether to enable fast Bible editor switching.
if (request->database_config_user ()->getFastEditorSwitchingAvailable ()) {
view.enable_zone ("fastswitcheditor");
}
page += view.render ("editverse", "index");
page += Assets_Page::footer ();
return page;
}
示例4: setup_index
string setup_index (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
Assets_View view;
// Get the existing Administrators.
vector <string> admins = request->database_users ()->getAdministrators ();
// Admins do not yet exist: Allow to enter an admin.
if (admins.empty ()) {
if (!request->post ["Submit"].empty ()) {
string admin_username = request->post ["admin_username"];
string admin_password = request->post ["admin_password"];
string admin_email = request->post ["admin_email"];
vector <string> errors;
if (admin_username.length() < 5) errors.push_back ("Choose a longer username.");
if (admin_password.length() < 7) errors.push_back ("Choose a longer password.");
if (admin_email.length() < 5) errors.push_back ("Enter a valid email address.");
if (errors.empty()) {
// Store admin details.
setup_set_admin_details (admin_username, admin_password, admin_email);
setup_complete_gui ();
// Store web site's base URL.
string siteUrl = get_base_url (request);
Database_Config_General::setSiteURL (siteUrl);
// Redirect.
redirect_browser (request, index_index_url ());
} else {
view.enable_zone ("errors");
view.set_variable ("error", filter_string_implode (errors, " "));
}
}
}
// Enable appropriate zones: Either enter admin's details, or else display the details.
if (admins.empty ()) {
view.enable_zone ("enteradmin");
view.enable_zone ("enteruser");
view.enable_zone ("enterpass");
view.enable_zone ("entermail");
view.enable_zone ("displaysubmit");
} else {
string usernames;
string emails;
for (unsigned int i = 0; i < admins.size(); i++) {
if (i) {
usernames.append (" / ");
emails.append (" / ");
}
usernames.append (admins[i]);
emails.append (request->database_users ()->getUserToEmail (admins[i]));
}
view.set_variable ("usernames", usernames);
view.set_variable ("emails", emails);
view.enable_zone ("displayok");
view.set_variable ("readonly", "readonly");
// If the admin's are already there, then the setup has completed.
// The automatic page refresh will kick in, and navigate to the main screen.
Database_Config_General::setInstalledInterfaceVersion (config_logic_version ());
}
return view.render ("setup", "index");
}
示例5: notes_index
string notes_index (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
Database_Notes database_notes (webserver_request);
string page;
Assets_Header header = Assets_Header (translate("Consultation Notes"), request);
header.setNavigator ();
header.addBreadCrumb (menu_logic_translate_menu (), menu_logic_translate_text ());
page = header.run();
Assets_View view;
string error;
string success;
// Presets for notes selectors.
// This is for the daily statistics and the workspace.
if (request->query.count ("presetselection")) {
request->database_config_user()->setConsultationNotesPassageSelector (3);
request->database_config_user()->setConsultationNotesEditSelector (0);
request->database_config_user()->setConsultationNotesNonEditSelector (0);
request->database_config_user()->setConsultationNotesStatusSelector ("");
request->database_config_user()->setConsultationNotesBibleSelector ("");
request->database_config_user()->setConsultationNotesAssignmentSelector ("");
request->database_config_user()->setConsultationNotesSubscriptionSelector (0);
request->database_config_user()->setConsultationNotesSeveritySelector (-1);
request->database_config_user()->setConsultationNotesTextSelector (0);
string preset_selector = request->query ["presetselection"];
if (preset_selector == "assigned") {
request->database_config_user()->setConsultationNotesAssignmentSelector (request->session_logic()->currentUser ());
}
if (preset_selector == "subscribed") {
request->database_config_user()->setConsultationNotesSubscriptionSelector (1);
}
if (preset_selector == "subscribeddayidle") {
request->database_config_user()->setConsultationNotesSubscriptionSelector (1);
request->database_config_user()->setConsultationNotesNonEditSelector (1);
}
if (preset_selector == "subscribedweekidle") {
request->database_config_user()->setConsultationNotesSubscriptionSelector (1);
request->database_config_user()->setConsultationNotesNonEditSelector (3);
}
if (preset_selector == "forverse") {
request->database_config_user()->setConsultationNotesPassageSelector (0);
}
}
int level = request->session_logic ()->currentLevel ();
// Manager roles and higher can do mass updates on the notes.
if (level >= Filter_Roles::manager ()) {
// No mass updates in basic mode.
if (!config_logic_basic_mode (webserver_request)) {
view.enable_zone ("update");
}
}
// Whether the user can create a new note.
if (access_logic_privilege_create_comment_notes (webserver_request)) {
view.enable_zone ("create");
}
page += view.render ("notes", "index");
page += Assets_Page::footer ();
return page;
}
示例6: notes_actions
string notes_actions (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
Database_Notes database_notes (webserver_request);
Notes_Logic notes_logic = Notes_Logic (webserver_request);
string page;
Assets_Header header = Assets_Header (translate("Note actions"), request);
header.setNavigator ();
page += header.run ();
Assets_View view;
string success, error;
string user = request->session_logic()->currentUser ();
int level = request->session_logic()->currentLevel ();
int id;
if (request->query.count ("id")) id = convert_to_int (request->query ["id"]);
else id = convert_to_int (request->post ["id"]);
if (request->query.count ("unsubscribe")) {
notes_logic.unsubscribe (id);
}
if (request->query.count ("subscribe")) {
notes_logic.subscribe (id);
}
if (request->query.count ("unassign")) {
string unassign = request->query["unassign"];
notes_logic.unassignUser (id, unassign);
}
if (request->query.count ("done")) {
notes_logic.unassignUser (id, user);
}
if (request->query.count ("markdel")) {
notes_logic.markForDeletion (id);
success = translate("The note will be deleted after a week.") + " " + translate ("Adding a comment to the note cancels the deletion.");
}
if (request->query.count ("unmarkdel")) {
notes_logic.unmarkForDeletion (id);
}
if (request->query.count ("delete")) {
notes_logic.erase (id);
redirect_browser (request, notes_index_url ());
return "";
}
if (request->query.count ("publicnote")) {
bool state = database_notes.getPublic (id);
database_notes.setPublic (id, !state);
}
view.set_variable ("id", convert_to_string (id));
string summary = database_notes.getSummary (id);
view.set_variable ("summary", summary);
bool subscribed = database_notes.isSubscribed (id, user);
if (subscribed) view.enable_zone ("subscribed");
else view.enable_zone ("subscribe");
vector <string> assignees = database_notes.getAssignees (id);
string assigneeblock;
for (auto & assignee : assignees) {
assigneeblock.append (assignee);
if (level >= Filter_Roles::manager ()) {
assigneeblock.append ("<a href=\"?id=" + convert_to_string (id) + "&unassign=" + assignee + "\"> [" + translate("unassign") + "]</a>");
assigneeblock.append (" | ");
}
}
view.set_variable ("assigneeblock", assigneeblock);
if (level >= Filter_Roles::manager ()) view.enable_zone ("assign");
bool assigned = database_notes.isAssigned (id, user);
if (assigned) view.enable_zone ("assigned");
string status = database_notes.getStatus (id);
view.set_variable ("status", status);
//.........这里部分代码省略.........
示例7: public_index
string public_index (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
// If the person providing public feedback is not logged in, foward to the page for entering details.
if (!request->session_logic ()->loggedIn ()) {
redirect_browser (request, public_login_url ());
return "";
}
// Take the Bible for this user, and ensure that it is one of the Bibles that have public feedback enabled.
string bible = request->database_config_user()->getBible ();
vector <string> public_bibles = public_logic_bibles (webserver_request);
if (!in_array (bible, public_bibles)) {
bible.clear ();
if (!public_bibles.empty ()) {
bible = public_bibles [0];
}
request->database_config_user()->setBible (bible);
}
// Switch Bible before displaying the passage navigator because the navigator contains the active Bible.
if (request->query.count ("bible")) {
bible = request->query ["bible"];
if (bible == "") {
Dialog_List dialog_list = Dialog_List ("index", translate("Select which Bible to display"), "", "");
for (auto & bible : public_bibles) {
dialog_list.add_row (bible, "bible", bible);
}
Assets_Header header = Assets_Header ("", request);
string page = header.run ();
page += dialog_list.run();
return page;
} else {
request->database_config_user()->setBible (bible);
}
}
string page;
Assets_Header header = Assets_Header (translate ("Public feedback"), request);
header.setNavigator ();
header.setStylesheet ();
page = header.run ();
Assets_View view;
string stylesheet = Database_Config_Bible::getExportStylesheet (bible);
bible = request->database_config_user()->getBible ();
view.set_variable ("bible", bible);
// If there's more than one Bible with public feedback enabled, the public can select a Bible.
if (public_bibles.size () > 1) {
view.enable_zone ("bibles");
}
string clss = Filter_Css::getClass (bible);
string font = Fonts_Logic::getTextFont (bible);
int direction = Database_Config_Bible::getTextDirection (bible);
int lineheight = Database_Config_Bible::getLineHeight (bible);
int letterspacing = Database_Config_Bible::getLetterSpacing (bible);
view.set_variable ("custom_class", clss);
view.set_variable ("custom_css", Filter_Css::getCss (clss,
Fonts_Logic::getFontPath (font),
direction,
lineheight,
letterspacing));
Styles_Css styles_css = Styles_Css (&request, stylesheet);
styles_css.exports ();
styles_css.generate ();
string css = styles_css.css ();
view.set_variable ("exports_css", css);
page += view.render ("public", "index");
page += Assets_Page::footer ();
return page;
}
示例8: resource_download
string resource_download (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
Database_UsfmResources database_usfmresources;
string page;
Assets_Header header = Assets_Header (translate("Download resource"), request);
header.addBreadCrumb (menu_logic_settings_menu (), menu_logic_settings_text ());
header.addBreadCrumb (resource_cache_url (), menu_logic_resources_text ());
page = header.run ();
Assets_View view;
string name = request->query["name"];
view.set_variable ("name", name);
bool old = request->query.count ("old");
if (old) view.enable_zone ("old");
else view.enable_zone ("current");
if (request->query.count ("clear")) {
// The client clears the two older storage locations just to be sure they are gone.
database_usfmresources.deleteResource (name);
// The client clears the installed resource.
Database_Cache::remove (name);
}
if (request->query.count ("clearold")) {
// The client clears the two older storage locations just to be sure they are gone.
database_usfmresources.deleteResource (name);
redirect_browser (request, resource_cache_url ());
return "";
}
if (request->query.count ("download")) {
// Trigger caching the resource.
// Add the resource to the general configuration to be cached, if it is not already there.
vector <string> resources = Database_Config_General::getResourcesToCache ();
if (!in_array (name, resources)) {
resources.push_back (name);
Database_Config_General::setResourcesToCache (resources);
}
tasks_logic_queue (SYNCRESOURCES);
redirect_browser (request, journal_index_url ());
return "";
}
int count = 0;
if (count == 0) {
vector <int> books = database_usfmresources.getBooks (name);
for (auto book : books) {
vector <int> chapters = database_usfmresources.getChapters (name, book);
// Rough average of 20 verses per chapter.
count += (20 * chapters.size());
}
}
if (count == 0) count = Database_Cache::count (name);
view.set_variable ("count", convert_to_string (count));
page += view.render ("resource", "download");
page += Assets_Page::footer ();
return page;
}
示例9: checks_settings
//.........这里部分代码省略.........
}
page += dialog_list.run();
return page;
} else {
request->database_config_user()->setBible (bible);
}
}
string bible = access_bible_clamp (webserver_request, request->database_config_user()->getBible ());
if (request->query.count ("run")) {
checks_logic_start (bible);
view.set_variable ("success", translate("Will run the checks. See the Journal for progress."));
}
string checkbox = request->post ["checkbox"];
bool checked = convert_to_bool (request->post ["checked"]);
if (checkbox == "doublespacesusfm") {
Database_Config_Bible::setCheckDoubleSpacesUsfm (bible, checked);
}
view.set_variable ("doublespacesusfm", get_checkbox_status (Database_Config_Bible::getCheckDoubleSpacesUsfm (bible)));
if (checkbox == "fullstopheadings") {
Database_Config_Bible::setCheckFullStopInHeadings (bible, checked);
}
view.set_variable ("fullstopheadings", get_checkbox_status (Database_Config_Bible::getCheckFullStopInHeadings (bible)));
if (checkbox == "spacebeforepunctuation") {
Database_Config_Bible::setCheckSpaceBeforePunctuation (bible, checked);
}
view.set_variable ("spacebeforepunctuation", get_checkbox_status (Database_Config_Bible::getCheckSpaceBeforePunctuation (bible)));
if (checkbox == "sentencestructure") {
Database_Config_Bible::setCheckSentenceStructure (bible, checked);
}
view.set_variable ("sentencestructure", get_checkbox_status (Database_Config_Bible::getCheckSentenceStructure (bible)));
if (checkbox == "paragraphstructure") {
Database_Config_Bible::setCheckParagraphStructure (bible, checked);
}
view.set_variable ("paragraphstructure", get_checkbox_status (Database_Config_Bible::getCheckParagraphStructure (bible)));
if (checkbox == "booksversification") {
Database_Config_Bible::setCheckBooksVersification (bible, checked);
}
view.set_variable ("booksversification", get_checkbox_status (Database_Config_Bible::getCheckBooksVersification (bible)));
if (checkbox == "chaptersversesversification") {
Database_Config_Bible::setCheckChaptesVersesVersification (bible, checked);
}
view.set_variable ("chaptersversesversification", get_checkbox_status (Database_Config_Bible::getCheckChaptesVersesVersification (bible)));
if (checkbox == "wellformedusfm") {
Database_Config_Bible::setCheckWellFormedUsfm (bible, checked);
}
view.set_variable ("wellformedusfm", get_checkbox_status (Database_Config_Bible::getCheckWellFormedUsfm (bible)));
if (checkbox == "punctuationatendverse") {
Database_Config_Bible::setCheckMissingPunctuationEndVerse (bible, checked);
}
view.set_variable ("punctuationatendverse", get_checkbox_status (Database_Config_Bible::getCheckMissingPunctuationEndVerse (bible)));
if (checkbox == "patterns") {
Database_Config_Bible::setCheckPatterns (bible, checked);
}
view.set_variable ("patterns", get_checkbox_status (Database_Config_Bible::getCheckPatterns (bible)));
if (checkbox == "pairs") {
Database_Config_Bible::setCheckMatchingPairs (bible, checked);
}
view.set_variable ("pairs", get_checkbox_status (Database_Config_Bible::getCheckMatchingPairs (bible)));
view.set_variable ("bible", bible);
#ifdef HAVE_CLIENT
view.enable_zone ("client");
#else
view.enable_zone ("cloud");
#endif
page += view.render ("checks", "settings");
page += Assets_Page::footer ();
return page;
}
示例10: bible_manage
//.........这里部分代码省略.........
if (!access_bible_write (request, bible)) {
string me = request->session_logic ()->currentUser ();
Database_Privileges::setBible (me, bible, true);
}
success_message = translate("The Bible was created");
// Creating a Bible removes any Sample Bible that might have been there.
if (!config_logic_demo_enabled ()) {
request->database_bibles ()->deleteBible (demo_sample_bible_name ());
search_logic_delete_bible (demo_sample_bible_name ());
}
}
}
// Copy Bible handler.
if (request->query.count ("copy")) {
string copy = request->query["copy"];
Dialog_Entry dialog_entry = Dialog_Entry ("manage", translate("Please enter a name for where to copy the Bible to"), "", "", "A new Bible will be created with the given name, and the current Bible copied to it");
dialog_entry.add_query ("origin", copy);
page += dialog_entry.run ();
return page;
}
if (request->query.count ("origin")) {
string origin = request->query["origin"];
if (request->post.count ("entry")) {
string destination = request->post["entry"];
vector <string> bibles = request->database_bibles ()->getBibles ();
if (find (bibles.begin(), bibles.end(), destination) != bibles.end()) {
error_message = translate("Cannot copy the Bible because the destination Bible already exists.");
} else {
// User needs read access to the original.
if (access_bible_read (request, origin)) {
request->database_bibles ()->createBible (destination);
vector <int> books = request->database_bibles ()->getBooks (origin);
for (auto & book : books) {
vector <int> chapters = request->database_bibles ()->getChapters (origin, book);
for (auto & chapter : chapters) {
string data = request->database_bibles ()->getChapter (origin, book, chapter);
Bible_Logic::storeChapter (destination, book, chapter, data);
}
}
success_message = translate("The Bible was copied.");
// Check / grant access to destination Bible.
if (!access_bible_write (request, destination)) {
string me = request->session_logic ()->currentUser ();
Database_Privileges::setBible (me, destination, true);
}
// Creating a Bible removes any Sample Bible that might have been there.
if (!config_logic_demo_enabled ()) {
request->database_bibles ()->deleteBible (demo_sample_bible_name ());
search_logic_delete_bible (demo_sample_bible_name ());
}
}
}
}
}
// Delete Bible handler.
if (request->query.count ("delete")) {
string bible = request->query ["delete"];
string confirm = request->query ["confirm"];
if (confirm == "yes") {
// User needs write access for delete operation.
if (access_bible_write (request, bible)) {
Bible_Logic::deleteBible (bible);
string gitdirectory = filter_git_directory (bible);
if (file_exists (gitdirectory)) {
filter_url_rmdir (gitdirectory);
}
// Remove associated settings and privileges.
Database_Privileges::removeBible (bible);
Database_Config_Bible::remove (bible);
} else {
page += Assets_Page::error ("Insufficient privileges to complete action");
}
}
if (confirm == "") {
Dialog_Yes dialog_yes = Dialog_Yes ("manage", translate("Would you like to delete this Bible?") + " (" + bible + ")");
dialog_yes.add_query ("delete", bible);
page += dialog_yes.run ();
return page;
}
}
view.set_variable ("success_message", success_message);
view.set_variable ("error_message", error_message);
vector <string> bibles = access_bible_bibles (request);
string bibleblock;
for (auto & bible : bibles) {
bibleblock.append ("<li><a href=\"settings?bible=" + bible + "\">" + bible + "</a></li>\n");
}
view.set_variable ("bibleblock", bibleblock);
if (!client_logic_client_enabled ()) view.enable_zone ("server");
page += view.render ("bible", "manage");
page += Assets_Page::footer ();
return page;
}
示例11: changes_changes
//.........这里部分代码省略.........
vector <int> ids = database_modifications.getNotificationTeamIdentifiers (username, user, true);
for (auto id : ids) {
trash_change_notification (request, id);
database_modifications.deleteNotification (id);
#ifdef HAVE_CLIENT
request->database_config_user ()->addRemovedChange (id);
#endif
request->database_config_user ()->setChangeNotificationsChecksum ("");
}
}
// Read the identifiers.
// Limit the number of results to keep the page reasonably fast even if there are many notifications.
vector <int> personal_ids = database_modifications.getNotificationPersonalIdentifiers (username, changes_personal_category (), true);
vector <int> bible_ids = database_modifications.getNotificationTeamIdentifiers (username, changes_bible_category (), true);
vector <int> ids = database_modifications.getNotificationIdentifiers (username, true);
string textblock;
for (auto id : ids) {
Passage passage = database_modifications.getNotificationPassage (id);
string link = filter_passage_link_for_opening_editor_at (passage.book, passage.chapter, passage.verse);
string category = database_modifications.getNotificationCategory (id);
if (category == changes_personal_category ()) category = emoji_smiling_face_with_smiling_eyes ();
if (category == changes_bible_category ()) category = emoji_open_book ();
string modification = database_modifications.getNotificationModification (id);
textblock.append ("<div id=\"entry" + convert_to_string (id) + "\">\n");
textblock.append ("<a href=\"expand\" id=\"expand" + convert_to_string (id) + "\">" + emoji_file_folder () + "</a>\n");
textblock.append ("<a href=\"remove\" id=\"remove" + convert_to_string (id) + "\">" + emoji_wastebasket () + "</a>\n");
textblock.append (link + "\n");
textblock.append (category + "\n");
textblock.append (modification + "\n");
textblock.append ("</div>\n");
}
view.set_variable ("textblock", textblock);
string loading = "\"" + translate("Loading ...") + "\"";
string script = "var loading = " + loading + ";";
config_logic_swipe_enabled (webserver_request, script);
view.set_variable ("script", script);
// Enable links to dismiss categories of notifications depending on whether there's anything to dismiss.
if (!personal_ids.empty ()) view.enable_zone ("personal");
if (!bible_ids.empty ()) view.enable_zone ("bible");
// Add links to clear the notifications from the individual contributors.
string dismissblock;
vector <string> categories = database_modifications.getCategories ();
for (auto & category : categories) {
if (category == changes_personal_category ()) continue;
if (category == changes_bible_category ()) continue;
string user = category;
vector <int> ids = database_modifications.getNotificationTeamIdentifiers (username, user, true);
if (!ids.empty ()) {
dismissblock.append ("<p>* <a href=\"?dismiss=");
dismissblock.append (user);
dismissblock.append ("\">");
dismissblock.append (user);
dismissblock.append (": ");
dismissblock.append (translate("all of them"));
dismissblock.append (": ");
dismissblock.append (convert_to_string (ids.size ()));
dismissblock.append ("</a></p>\n");
}
}
view.set_variable ("dismissblock", dismissblock);
// Add links to clear matching notifications of the various users.
for (auto & category : categories) {
if (category == changes_bible_category ()) continue;
string user = category;
vector <int> personal_ids = database_modifications.getNotificationTeamIdentifiers (username, user, true);
string icon = category;
if (category == changes_personal_category ()) icon = emoji_smiling_face_with_smiling_eyes ();
if (!personal_ids.empty () && !bible_ids.empty ()) {
view.add_iteration ("matching", { make_pair ("user", user), make_pair ("icon", icon) } );
}
}
view.set_variable ("VERSION", config_logic_version ());
if (touch) view.enable_zone ("touch");
view.set_variable ("interlinks", changes_interlinks (webserver_request, changes_changes_url ()));
page += view.render ("changes", "changes");
page += Assets_Page::footer ();
return page;
}
示例12: bible_book
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;
}
示例13: bible_import_usfm
string bible_import_usfm (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
string page;
page = Assets_Page::header (translate ("Import USFM"), webserver_request, "");
Assets_View view = Assets_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));
// 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 (IMPORTUSFM, { datafile, bible });
} else {
error_message = translate("Please supply valid Unicode UTF-8 text.");
}
} else {
success_message = translate("Nothing was imported.");
}
}
// 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 (IMPORTUSFM, { datafile, bible });
} else {
error_message = translate ("Nothing was uploaded");
}
}
view.set_variable ("success_message", success_message);
view.set_variable ("error_message", error_message);
page += view.render ("bible", "import_usfm");
page += Assets_Page::footer ();
return page;
}
示例14: bible_import
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;
}
示例15: manage_index
string manage_index (void * webserver_request)
{
Webserver_Request * request = (Webserver_Request *) webserver_request;
string page;
Assets_Header header = Assets_Header (translate("Manage"), webserver_request);
header.addBreadCrumb (menu_logic_settings_menu (), menu_logic_settings_text ());
page = header.run ();
Assets_View view;
string success;
string error;
// Force re-index Bibles.
if (request->query ["reindex"] == "bibles") {
Database_Config_General::setIndexBibles (true);
tasks_logic_queue (REINDEXBIBLES, {"1"});
redirect_browser (request, journal_index_url ());
return "";
}
// Re-index consultation notes.
if (request->query ["reindex"] == "notes") {
Database_Config_General::setIndexNotes (true);
tasks_logic_queue (REINDEXNOTES);
redirect_browser (request, journal_index_url ());
return "";
}
// Delete a font.
string deletefont = request->query ["deletefont"];
if (!deletefont.empty ()) {
string font = filter_url_basename (deletefont);
bool font_in_use = false;
vector <string> bibles = request->database_bibles ()->getBibles ();
for (auto & bible : bibles) {
if (font == Fonts_Logic::getTextFont (bible)) font_in_use = true;
}
if (!font_in_use) {
// Only delete a font when it is not in use.
Fonts_Logic::erase (font);
} else {
error = translate("The font could not be deleted because it is in use");
}
}
// Upload a font.
if (request->post.count ("uploadfont")) {
string filename = request->post ["filename"];
string path = filter_url_create_root_path ("fonts", filename);
string fontdata = request->post ["fontdata"];
filter_url_file_put_contents (path, fontdata);
success = translate("The font has been uploaded.");
}
// Assemble the font block html.
vector <string> fonts = Fonts_Logic::getFonts ();
vector <string> fontsblock;
for (auto & font : fonts) {
fontsblock.push_back ("<p>");
#ifndef CLIENT_PREPARED
fontsblock.push_back ("<a href=\"?deletefont=" + font+ "\" title=\"" + translate("Delete font") + "\"> ✗ </a>");
#endif
fontsblock.push_back (font);
fontsblock.push_back ("</p>");
}
view.set_variable ("fontsblock", filter_string_implode (fontsblock, "\n"));
#ifdef CLIENT_PREPARED
view.enable_zone ("client");
view.set_variable ("cloudlink", client_logic_link_to_cloud (manage_index_url (), ""));
#else
view.enable_zone ("server");
#endif
view.set_variable ("success", success);
view.set_variable ("error", error);
page += view.render ("manage", "index");
page += Assets_Page::footer ();
return page;
}