add support for modifying shared stores
This commit is contained in:
		| @@ -23,6 +23,7 @@ from time import mktime | |||||||
| import getpass | import getpass | ||||||
| import time | import time | ||||||
| from optparse import OptionGroup | from optparse import OptionGroup | ||||||
|  | from tabulate import tabulate | ||||||
| try: | try: | ||||||
|     from dotty_dict import dotty |     from dotty_dict import dotty | ||||||
| except ImportError: | except ImportError: | ||||||
| @@ -50,6 +51,15 @@ def opt_args(print_help=None): | |||||||
|     group.add_option("--reset", dest="reset", action="store_true", help="Reset WebApp settings") |     group.add_option("--reset", dest="reset", action="store_true", help="Reset WebApp settings") | ||||||
|     parser.add_option_group(group) |     parser.add_option_group(group) | ||||||
|  |  | ||||||
|  |     # Addionals stores group | ||||||
|  |     group = OptionGroup(parser, "Store", "") | ||||||
|  |     group.add_option("--add-store",   dest="add_store", action="store", help="Add shared store") | ||||||
|  |     group.add_option("--del-store",   dest="del_store", action="store", help="Delete shared store") | ||||||
|  |     group.add_option("--folder-type", dest="folder_type", action="store", help="Folder to add") | ||||||
|  |     group.add_option("--subfolder",  dest="sub_folder", action="store_true", help="Add subfolders") | ||||||
|  |     group.add_option("--list-stores", dest="list_stores", action="store_true", help="List shared stores") | ||||||
|  |     parser.add_option_group(group) | ||||||
|  |  | ||||||
|     # Signature option group |     # Signature option group | ||||||
|     group = OptionGroup(parser, "Signature", "") |     group = OptionGroup(parser, "Signature", "") | ||||||
|     group.add_option("--backup-signature", dest="backup_signature", action="store_true", help="Backup signature") |     group.add_option("--backup-signature", dest="backup_signature", action="store_true", help="Backup signature") | ||||||
| @@ -199,6 +209,73 @@ def language(user, language): | |||||||
|     write_settings(user, json.dumps(settings)) |     write_settings(user, json.dumps(settings)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | Add shared store | ||||||
|  | """ | ||||||
|  | def add_store(user, user_to_add, folder_type, subfolder=False): | ||||||
|  |     allowed_folder_types = ["all", "inbox", "calendar", "contact", "note", "task"] | ||||||
|  |     if folder_type not in allowed_folder_types: | ||||||
|  |         print("Unknown folder type allowed: {}".format(','.join(allowed_folder_types))) | ||||||
|  |         sys.exit(1) | ||||||
|  |  | ||||||
|  |     settings = read_settings(user) | ||||||
|  |     if not settings['settings']['zarafa']['v1']['contexts'].get('hierarchy') or not settings['settings']['zarafa']['v1']['contexts']['hierarchy'].get('shared_stores'): | ||||||
|  |         settings['settings']['zarafa']['v1']['contexts']['hierarchy']['shared_stores'] = {} | ||||||
|  |  | ||||||
|  |     settings['settings']['zarafa']['v1']['contexts']['hierarchy']['shared_stores'][user_to_add]= {folder_type : {'folder_type': folder_type, 'show_subfolders': subfolder}} | ||||||
|  |     print("Saving settings") | ||||||
|  |     write_settings(user, json.dumps(settings)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | Delete shared store  | ||||||
|  | """ | ||||||
|  | def del_store(user, user_to_del, folder_type=None): | ||||||
|  |     if folder_type: | ||||||
|  |         allowed_folder_types = ["all", "inbox", "calendar", "contact", "note", "task"] | ||||||
|  |         if folder_type not in allowed_folder_types: | ||||||
|  |             print("Unknown folder type allowed: {}".format(','.join(allowed_folder_types))) | ||||||
|  |             sys.exit(1) | ||||||
|  |      | ||||||
|  |  | ||||||
|  |     settings = read_settings(user) | ||||||
|  |     if not settings['settings']['zarafa']['v1']['contexts'].get('hierarchy') or not settings['settings']['zarafa']['v1']['contexts']['hierarchy'].get('shared_stores'): | ||||||
|  |         print("No additional stores found") | ||||||
|  |         return | ||||||
|  |  | ||||||
|  |     shared_store = settings['settings']['zarafa']['v1']['contexts']['hierarchy']['shared_stores'].get(user_to_del) | ||||||
|  |     if not shared_store: | ||||||
|  |         print("No additional stores found") | ||||||
|  |         return | ||||||
|  |     try: | ||||||
|  |         if not folder_type: | ||||||
|  |             settings['settings']['zarafa']['v1']['contexts']['hierarchy']['shared_stores'].pop(user_to_del) | ||||||
|  |         else: | ||||||
|  |             settings['settings']['zarafa']['v1']['contexts']['hierarchy']['shared_stores'][user_to_del].pop(folder_type) | ||||||
|  |     except KeyError: | ||||||
|  |         pass | ||||||
|  |     print("Saving settings") | ||||||
|  |     write_settings(user, json.dumps(settings)) | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | List all added stores | ||||||
|  | """ | ||||||
|  | def list_stores(user): | ||||||
|  |     settings = read_settings(user)  | ||||||
|  |  | ||||||
|  |     try: | ||||||
|  |         stores =  settings['settings']['zarafa']['v1']['contexts']['hierarchy']['shared_stores'] | ||||||
|  |     except KeyError: | ||||||
|  |         print("No additional stores found") | ||||||
|  |         return | ||||||
|  |     table_header = ["User", 'Folder type', 'Show subfolders'] | ||||||
|  |     table_data =[] | ||||||
|  |     for user in stores: | ||||||
|  |         for folder in stores[user]: | ||||||
|  |             table_data.append([user, folder, stores[user][folder]['show_subfolders']]) | ||||||
|  |  | ||||||
|  |     print(tabulate(table_data, headers=table_header,tablefmt="grid")) | ||||||
|  |      | ||||||
| """ | """ | ||||||
| Backup signature from the users store | Backup signature from the users store | ||||||
|  |  | ||||||
| @@ -532,11 +609,21 @@ def main(): | |||||||
|         if options.language: |         if options.language: | ||||||
|             language(user, options.language) |             language(user, options.language) | ||||||
|  |  | ||||||
|  |         if options.add_store: | ||||||
|  |             add_store(user, options.add_store, options.folder_type, options.sub_folder) | ||||||
|  |  | ||||||
|  |         if options.del_store: | ||||||
|  |             del_store(user, options.del_store, options.folder_type) | ||||||
|  |  | ||||||
|  |         if options.list_stores: | ||||||
|  |             list_stores(user) | ||||||
|  |  | ||||||
|         #Categories |         #Categories | ||||||
|         if options.export_categories: |         if options.export_categories: | ||||||
|             export_categories(user, options.file) |             export_categories(user, options.file) | ||||||
|         if options.import_categories: |         if options.import_categories: | ||||||
|             import_categories(user, options.file) |             import_categories(user, options.file) | ||||||
|  |  | ||||||
|         # S/MIME import/export |         # S/MIME import/export | ||||||
|         if options.export_smime: |         if options.export_smime: | ||||||
|             export_smime(user, options.location, options.public_smime) |             export_smime(user, options.location, options.public_smime) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user