Skip to content

Commit 0a8d149

Browse files
authored
Update set privacy tool (#474)
1 parent 18ec9ad commit 0a8d149

File tree

1 file changed

+82
-21
lines changed

1 file changed

+82
-21
lines changed

SetPrivacyTool/SetPrivacyTool.py

Lines changed: 82 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#
22
# Gramps - a GTK+/GNOME based genealogy program
33
#
4+
# Copyright (C) 2020 David Straub
45
# Copyright (C) 2019 Matthias Kemmer
56
#
67
# This program is free software; you can redistribute it and/or modify
@@ -22,8 +23,9 @@
2223
# GRAMPS modules
2324
#
2425
# ----------------------------------------------------------------------------
26+
from gramps.gen.filters import CustomFilters, GenericFilterFactory
2527
from gramps.gui.plug import MenuToolOptions, PluginWindows
26-
from gramps.gen.plug.menu import NumberOption, BooleanOption
28+
from gramps.gen.plug.menu import NumberOption, BooleanOption, FilterOption
2729
from gramps.gui.dialog import OkDialog
2830
from gramps.gen.lib.date import Today
2931
from gramps.gen.db import DbTxn
@@ -93,34 +95,46 @@ def lock_persons(self, date, lock_no_date):
9395
with DbTxn(_("Set Privacy Tool"), self.db, batch=True) as self.trans:
9496
self.db.disable_signals()
9597
person_list = list(self.db.iter_people())
98+
99+
filter_option = self.options.menu.get_option_by_name('person_filter')
100+
person_filter = filter_option.get_filter()
101+
filtered_person_handles = person_filter.apply(self.db, self.db.iter_person_handles())
102+
96103
self.progress.set_pass(_('Set persons private..'),
97-
len(person_list))
104+
len(filtered_person_handles))
98105
cnt = [0, 0]
106+
107+
99108
for Person in person_list:
109+
if Person.handle not in filtered_person_handles:
110+
continue
100111
birth_ref = Person.get_birth_ref()
101112
if birth_ref:
102113
birth = self.db.get_event_from_handle(birth_ref.ref)
103114
birth_date = birth.get_date_object()
115+
set_privacy = None
104116
if birth_date.get_year() == 0 and lock_no_date:
105-
Person.set_privacy(True)
117+
set_privacy = True
106118
cnt[0] += 1
107119
elif birth_date.get_year() == 0 and not lock_no_date:
108-
Person.set_privacy(False)
120+
set_privacy = False
109121
cnt[1] += 1
110122
elif birth_date.get_year() != 0 and birth_date >= date:
111-
Person.set_privacy(True)
123+
set_privacy = True
112124
cnt[0] += 1
113125
else:
114-
Person.set_privacy(False)
126+
set_privacy = False
115127
cnt[1] += 1
116128
else:
117129
if lock_no_date:
118-
Person.set_privacy(True)
130+
set_privacy = True
119131
cnt[0] += 1
120132
else:
121-
Person.set_privacy(False)
133+
set_privacy = False
122134
cnt[1] += 1
123-
self.db.commit_person(Person, self.trans)
135+
if set_privacy is not None and set_privacy != Person.private:
136+
Person.set_privacy(set_privacy)
137+
self.db.commit_person(Person, self.trans)
124138
self.progress.step()
125139
self.db.enable_signals()
126140
self.db.request_rebuild()
@@ -130,24 +144,35 @@ def lock_events(self, date, lock_no_date):
130144
with DbTxn(_("Set Privacy Tool"), self.db, batch=True) as self.trans:
131145
self.db.disable_signals()
132146
event_list = list(self.db.iter_events())
147+
148+
filter_option = self.options.menu.get_option_by_name('event_filter')
149+
event_filter = filter_option.get_filter()
150+
filtered_event_handles = event_filter.apply(self.db, self.db.iter_event_handles())
151+
133152
self.progress.set_pass(_('Set events private..'),
134-
len(event_list))
153+
len(filtered_event_handles))
154+
135155
cnt = [0, 0]
136156
for Event in event_list:
157+
if Event.handle not in filtered_event_handles:
158+
continue
137159
event_date = Event.get_date_object()
160+
set_privacy = None
138161
if event_date.get_year() == 0 and lock_no_date:
139-
Event.set_privacy(True)
162+
set_privacy = True
140163
cnt[0] += 1
141164
elif event_date.get_year() == 0 and not lock_no_date:
142-
Event.set_privacy(False)
165+
set_privacy = False
143166
cnt[1] += 1
144167
elif event_date.get_year() != 0 and event_date >= date:
145-
Event.set_privacy(True)
168+
set_privacy = True
146169
cnt[0] += 1
147170
else:
148-
Event.set_privacy(False)
171+
set_privacy = False
149172
cnt[1] += 1
150-
self.db.commit_event(Event, self.trans)
173+
if set_privacy is not None and set_privacy != Event.private:
174+
Event.set_privacy(set_privacy)
175+
self.db.commit_event(Event, self.trans)
151176
self.progress.step()
152177
self.db.enable_signals()
153178
self.db.request_rebuild()
@@ -157,24 +182,35 @@ def lock_media(self, date, lock_no_date):
157182
with DbTxn(_("Set Privacy Tool"), self.db, batch=True) as self.trans:
158183
self.db.disable_signals()
159184
media_list = list(self.db.iter_media())
185+
186+
filter_option = self.options.menu.get_option_by_name('media_filter')
187+
media_filter = filter_option.get_filter()
188+
filtered_media_handles = media_filter.apply(self.db, self.db.iter_media_handles())
189+
160190
self.progress.set_pass(_('Set media private..'),
161-
len(media_list))
191+
len(filtered_media_handles))
192+
162193
cnt = [0, 0]
163194
for Media in media_list:
195+
if Media.handle not in filtered_media_handles:
196+
continue
164197
media_date = Media.get_date_object()
198+
set_privacy = None
165199
if media_date.get_year() == 0 and lock_no_date:
166-
Media.set_privacy(True)
200+
set_privacy = True
167201
cnt[0] += 1
168202
elif media_date.get_year() == 0 and not lock_no_date:
169-
Media.set_privacy(False)
203+
set_privacy = False
170204
cnt[1] += 1
171205
elif media_date.get_year() != 0 and media_date >= date:
172-
Media.set_privacy(True)
206+
set_privacy = True
173207
cnt[0] += 1
174208
else:
175-
Media.set_privacy(False)
209+
set_privacy = False
176210
cnt[1] += 1
177-
self.db.commit_media(Media, self.trans)
211+
if set_privacy is not None and set_privacy != Media.private:
212+
Media.set_privacy(set_privacy)
213+
self.db.commit_media(Media, self.trans)
178214
self.progress.step()
179215
self.db.enable_signals()
180216
self.db.request_rebuild()
@@ -192,15 +228,40 @@ def __init__(self, name, person_id=None, dbstate=None):
192228
MenuToolOptions.__init__(self, name, person_id, dbstate)
193229

194230
def add_menu_options(self, menu):
231+
195232
self.person = BooleanOption(_("Persons"), False)
196233
menu.add_option(_("Option"), "person", self.person)
197234

235+
self.__person_filter = FilterOption(_("Person Filter"), 0)
236+
self.__person_filter.set_help(_("Select filter to restrict people"))
237+
menu.add_option(_("Option"), "person_filter", self.__person_filter)
238+
person_filter_all = GenericFilterFactory("Person")()
239+
person_filter_all.name = _("Entire Database")
240+
person_filter_list = [person_filter_all] + CustomFilters.get_filters("Person")
241+
self.__person_filter.set_filters(person_filter_list)
242+
198243
self.event = BooleanOption(_("Events"), False)
199244
menu.add_option(_("Option"), "event", self.event)
200245

246+
self.__event_filter = FilterOption(_("Event Filter"), 0)
247+
self.__event_filter.set_help(_("Select filter to restrict events"))
248+
menu.add_option(_("Option"), "event_filter", self.__event_filter)
249+
event_filter_all = GenericFilterFactory("Event")()
250+
event_filter_all.name = _("Entire Database")
251+
event_filter_list = [event_filter_all] + CustomFilters.get_filters('Event')
252+
self.__event_filter.set_filters(event_filter_list)
253+
201254
self.media = BooleanOption(_("Media"), False)
202255
menu.add_option(_("Option"), "media", self.media)
203256

257+
self.__media_filter = FilterOption(_("Media Filter"), 0)
258+
self.__media_filter.set_help(_("Select filter to restrict medias"))
259+
menu.add_option(_("Option"), "media_filter", self.__media_filter)
260+
media_filter_all = GenericFilterFactory("Media")()
261+
media_filter_all.name = _("Entire Database")
262+
media_filter_list = [media_filter_all] + CustomFilters.get_filters('Media')
263+
self.__media_filter.set_filters(media_filter_list)
264+
204265
self.no_date = BooleanOption(_("Always private if no date."), False)
205266
self.no_date.set_help(_("If checked, all objects without a date will "
206267
"also be set private."))

0 commit comments

Comments
 (0)