diff --git a/src/data/templates/view_report_detail.html b/src/data/templates/view_report_detail.html index 98f053821..1dfdbda09 100644 --- a/src/data/templates/view_report_detail.html +++ b/src/data/templates/view_report_detail.html @@ -21,7 +21,10 @@ Options: -
+ +
Hint: use Gramps CLI options such as output file format off=pdf, off=ged, or off=gramps @@ -32,6 +35,12 @@ + + +Help: + +{{help|safe}} + diff --git a/src/webapp/dbdjango.py b/src/webapp/dbdjango.py index 73051987a..c2851db92 100644 --- a/src/webapp/dbdjango.py +++ b/src/webapp/dbdjango.py @@ -492,6 +492,12 @@ class DbDjango(DbWriteBase, DbReadBase): obj = gen.lib.Researcher() return obj + def get_tag_handles(self, sort_handles=False): + if sort_handles: + return [item.handle for item in self.dji.Tag.all().order_by("handle")] + else: + return [item.handle for item in self.dji.Tag.all()] + def get_person_handles(self, sort_handles=False): if sort_handles: return [item.handle for item in self.dji.Person.all().order_by("handle")] @@ -593,6 +599,15 @@ class DbDjango(DbWriteBase, DbReadBase): return None return self.make_person(person) + def get_tag_from_handle(self, handle): + if handle in self.import_cache: + return self.import_cache[handle] + try: + tag = self.dji.Tag.get(handle=handle) + except: + return None + return self.make_tag(tag) + def make_repository(self, repository): if self.use_db_cache and repository.cache: data = cPickle.loads(base64.decodestring(repository.cache)) diff --git a/src/webapp/grampsdb/views.py b/src/webapp/grampsdb/views.py index dc6c8dbe7..5159a5652 100644 --- a/src/webapp/grampsdb/views.py +++ b/src/webapp/grampsdb/views.py @@ -195,16 +195,18 @@ def process_report_run(request, handle): if report.options: for pair in str(report.options).split(" "): if "=" in pair: - key, value = pair.split("=", 1) - args[key] = value + key, value = [x.strip() for x in pair.split("=", 1)] + if key and value: + args[key] = value # override from options on webpage: if request.GET.has_key("options"): options = str(request.GET.get("options")) if options: - for pair in options.split(" "): # from webpage + for pair in options.split("\n"): # from webpage if "=" in pair: - key, value = pair.split("=", 1) - args[key] = value + key, value = [x.strip() for x in pair.split("=", 1)] + if key and value: + args[key] = value ############################################################################# if report.report_type == "report": filename = "/tmp/%s-%s.%s" % (str(profile.user.username), str(handle), args["off"]) @@ -437,6 +439,7 @@ def action(request, view, handle, act, add_to=None): View a particular object given /object/handle (implied view), /object/handle/action, or /object/add. """ + from webapp.reports import get_plugin_options # redirect: rd = None obj = None @@ -529,11 +532,34 @@ def action(request, view, handle, act, add_to=None): view_template = 'view_tag_detail.html' rd = process_tag(request, context, handle, act, add_to) elif view == "report": - if act not in ["add", "create", "share", "save-share"]: + if act not in ["add", "create"]: try: obj = Report.objects.get(handle=handle) except: raise Http404(_("Requested %s does not exist.") % view) + override = {} + if obj.options: + for pair in obj.options.split(" "): + key, value = pair.split("=") + override[key] = value + db = DbDjango() + opt_default, opt_help = get_plugin_options(db, obj.handle) + retval = "" + for key in sorted(opt_default.keys()): + if key in override: + retval += "%s=%s\n" % (key, override[key]) + del override[key] + else: + retval += "%s=%s\n" % (key, repr(opt_default[key])) + # Any leftover overrides: + for key in sorted(override.keys()): + retval += "%s=%s\n" % (key, override[key]) + obj.options = retval + retval = "
    " + for key in sorted(opt_help.keys()): + retval += "
  1. %s: %s
  2. \n" % (key, opt_help[key][1]) + retval += "
" + context["help"] = retval view_template = 'view_report_detail.html' rd = process_report(request, context, handle, act) else: diff --git a/src/webapp/reports.py b/src/webapp/reports.py index f20ec9b12..385fedda6 100644 --- a/src/webapp/reports.py +++ b/src/webapp/reports.py @@ -41,6 +41,24 @@ import os # db = dbdjango.DbDjango() # run_report(db, "ancestor_report", off="txt", of="ar.txt", pid="I0363") +def get_plugin_options(db, pid): + """ + Get the default options and help for this plugin. + """ + dbstate = DbState() + climanager = CLIManager(dbstate, False) # do not load db_loader + climanager.do_reg_plugins(dbstate, None) + pmgr = BasePluginManager.get_instance() + pdata = pmgr.get_plugin(pid) + if hasattr(pdata, "optionclass") and pdata.optionclass: + mod = pmgr.load_plugin(pdata) + optionclass = eval("mod." + pdata.optionclass) + optioninstance = optionclass("Name", db) + optioninstance.load_previous_values() + return optioninstance.options_dict, optioninstance.options_help + else: + return {}, {} + def import_file(db, filename, user): """ Import a file (such as a GEDCOM file) into the given db.