map <int, string> workspace_get_default_urls (int id) { map <int, string> urls; switch (id) { case 1: urls [0] = editone_index_url (); urls [5] = resource_index_url (); break; case 2: urls [0] = editone_index_url (); urls [1] = notes_index_url (); break; case 3: urls [0] = resource_index_url (); urls [1] = editone_index_url (); urls [2] = notes_index_url (); break; case 4: urls [0] = editone_index_url (); urls [1] = consistency_index_url (); break; case 5: urls [0] = resource_index_url (); urls [1] = editone_index_url (); urls [5] = editverse_index_url (); break; default: urls [0] = editone_index_url (); urls [1] = resource_index_url (); urls [2] = notes_index_url (); urls [3] = search_index_url (); break; } return urls; }
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); if (Filter_Roles::translator ()) view.enable_zone ("editstatus"); else view.enable_zone ("viewstatus"); string verses = filter_passage_display_inline (database_notes.getPassages (id)); view.set_variable ("verses", verses); string severity = database_notes.getSeverity (id); view.set_variable ("severity", severity); string bible = database_notes.getBible (id); view.set_variable ("bible", bible); if (bible.empty ()) view.enable_zone ("nobible"); if (level >= Filter_Roles::manager ()) view.enable_zone ("rawedit"); if (level >= Filter_Roles::manager ()) view.enable_zone ("marknote"); bool marked = database_notes.isMarkedForDeletion (id); if (marked) view.enable_zone ("marked"); else view.enable_zone ("mark"); #ifndef HAVE_CLIENT view.enable_zone ("cloud"); string on_off = styles_logic_off_on_inherit_toggle_text (database_notes.getPublic (id)); view.set_variable ("publicnote", on_off); #endif // Roles of translator or higher can edit the public visibility of a note. if (level >= Filter_Roles::translator ()) view.enable_zone ("translator"); view.set_variable ("success", success); view.set_variable ("error", error); page += view.render ("notes", "actions"); page += Assets_Page::footer (); return page; }
void statistics_statistics () { Webserver_Request request; Database_Mail database_mail = Database_Mail (&request); Database_Modifications database_modifications; Database_Notes database_notes (&request); Database_Logs::log (translate("Sending statistics"), Filter_Roles::manager ()); string siteUrl = config_logic_site_url (); vector <string> bibles = request.database_bibles()->getBibles (); vector <string> users = request.database_users ()->getUsers (); for (auto & user : users) { string subject = "Bibledit " + translate("statistics"); vector <string> body; if (request.database_config_user()->getUserPendingChangesNotification (user)) { vector <int> ids = database_modifications.getNotificationIdentifiers (user); body.push_back ("<p><a href=\"" + siteUrl + changes_changes_url () + "\">" + translate("Number of change notifications") + "</a>: " + convert_to_string (ids.size()) + "</p>\n"); } if (request.database_config_user()->getUserAssignedNotesStatisticsNotification (user)) { vector <int> ids = database_notes.selectNotes ( bibles, // Bibles. 0, // Book 0, // Chapter 0, // Verse 3, // Passage selector. 0, // Edit selector. 0, // Non-edit selector. "", // Status selector. "", // Bible selector. user, // Assignment selector. 0, // Subscription selector. -1, // Severity selector. 0, // Text selector. "", // Search text. -1); // Limit. body.push_back ("<p><a href=\"" + siteUrl + notes_index_url () + "?presetselection=assigned\">" + translate("Number of consultation notes assigned to you awaiting your response") + "</a>: " + convert_to_string (ids.size ()) + "</p>\n"); } if (request.database_config_user()->getUserSubscribedNotesStatisticsNotification (user)) { body.push_back ("<p>" + translate("Number of consultation notes you are subscribed to") + ":</p>\n"); body.push_back ("<ul>\n"); request.session_logic ()->setUsername (user); vector <int> ids = database_notes.selectNotes ( bibles, // Bible. 0, // Book 0, // Chapter 0, // Verse 3, // Passage selector. 0, // Edit selector. 0, // Non-edit selector. "", // Status selector. "", // Bible selector. "", // Assignment selector. 1, // Subscription selector. -1, // Severity selector. 0, // Text selector. "", // Search text. -1); // Limit. body.push_back ("<li><a href=\"" + siteUrl + notes_index_url () + "?presetselection=subscribed\">" + translate("Total") + "</a>: " + convert_to_string (ids.size ()) + "</li>\n"); ids = database_notes.selectNotes ( bibles, // Bible. 0, // Book 0, // Chapter 0, // Verse 3, // Passage selector. 0, // Edit selector. 1, // Non-edit selector. "", // Status selector. "", // Bible selector. "", // Assignment selector. 1, // Subscription selector. -1, // Severity selector. 0, // Text selector. "", // Search text. -1); // Limit. body.push_back ("<li><a href=\"" + siteUrl + notes_index_url () + "?presetselection=subscribeddayidle\">" + translate("Inactive for a day") + "</a>: " + convert_to_string (ids.size ()) + "</li>\n"); ids = database_notes.selectNotes ( bibles, // Bible. 0, // Book 0, // Chapter 0, // Verse 3, // Passage selector. 0, // Edit selector. 3, // Non-edit selector. "", // Status selector. "", // Bible selector. "", // Assignment selector. 1, // Subscription selector. -1, // Severity selector. 0, // Text selector. "", // Search text. -1); // Limit. body.push_back ("<li><a href=\"" + siteUrl + notes_index_url () + "?presetselection=subscribedweekidle\">" + translate("Inactive for a week") + "</a>: " + convert_to_string (ids.size ()) + "</li>\n"); body.push_back ("</ul>\n"); request.session_logic ()->setUsername (""); } if (!body.empty ()) { string mailbody = filter_string_implode (body, "\n"); database_mail.send (user, subject, mailbody); } } }