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; }
// Recursively scans a directory for directories and files. void filter_url_recursive_scandir (string folder, vector <string> & paths) { vector <string> files = filter_url_scandir (folder); for (auto & file : files) { string path = filter_url_create_path (folder, file); paths.push_back (path); if (filter_url_is_dir (path)) { filter_url_recursive_scandir (path, paths); } } }
void bible_import_run (string location, string bible, int book, int chapter) { Database_Logs::log ("Importing Bible data from location " + location + " into Bible " + bible); string folder = filter_archive_uncompress (location); if (!folder.empty ()) location = folder; vector <string> files; if (filter_url_is_dir (location)) { filter_url_recursive_scandir (location, files); } else { files.push_back (location); } for (auto & file : files) { if (filter_url_is_dir (file)) continue; Database_Logs::log ("Examining file for import: " + file); string success_message = ""; string error_message = ""; string data = filter_url_file_get_contents (file); if (data != "") { if (unicode_string_is_valid (data)) { // Check whether this is USFM data. bool id = data.find ("\\id ") != string::npos; bool c = data.find ("\\c ") != string::npos; if (id || c) { bible_import_usfm (data, bible, book, chapter); } else { bible_import_text (data, bible, book, chapter); } } else { Database_Logs::log ("The file does not contain valid Unicode UTF-8 text.", true); } } else { Database_Logs::log ("Nothing was imported.", true); } } Database_Logs::log ("Import Bible data has finished"); }
// Copies the entire directory $input to a directory named $output. // It will recursively copy the inner directories also. void filter_url_dir_cp (const string & input, const string & output) { // Create the output directory. filter_url_mkdir (output); // Check on all files in the input directory. vector <string> files = filter_url_scandir (input); for (auto & file : files) { string input_path = filter_url_create_path (input, file); string output_path = filter_url_create_path (output, file); if (filter_url_is_dir (input_path)) { // Create output directory. filter_url_mkdir (output_path); // Handle the new input directory. filter_url_dir_cp (input_path, output_path); } else { // Copy input file to output. filter_url_file_cp (input_path, output_path); } } }