| 525 | return mkdir_parser |
| 526 | |
| 527 | def execute(self, params, **kwargs): |
| 528 | base_folder = params.folder_cache[params.current_folder] if params.current_folder in params.folder_cache else params.root_folder |
| 529 | |
| 530 | name = kwargs['folder'] if 'folder' in kwargs else None |
| 531 | if name: |
| 532 | rs = try_resolve_path(params, name) |
| 533 | if rs is not None: |
| 534 | base_folder, name = rs |
| 535 | if len(name) == 0: |
| 536 | logging.warning('mkdir: Folder "%s" already exists', kwargs['folder']) |
| 537 | return |
| 538 | |
| 539 | shared_folder = kwargs['shared_folder'] if 'shared_folder' in kwargs else None |
| 540 | user_folder = kwargs['user_folder'] if 'user_folder' in kwargs else None |
| 541 | |
| 542 | request = {"command": "folder_add"} |
| 543 | if shared_folder: |
| 544 | if base_folder.type in {BaseFolderNode.RootFolderType, BaseFolderNode.UserFolderType}: |
| 545 | request['folder_type'] = 'shared_folder' |
| 546 | grant = kwargs['grant'] if 'grant' in kwargs else None |
| 547 | for flag in ['manage_users', 'manage_records', 'can_share', 'can_edit']: |
| 548 | if grant or (flag in kwargs and kwargs[flag]): |
| 549 | request[flag] = True |
| 550 | else: |
| 551 | raise CommandError('mkdir', 'Shared folders cannot be nested') |
| 552 | |
| 553 | elif user_folder: |
| 554 | if base_folder.type in {BaseFolderNode.SharedFolderType, BaseFolderNode.SharedFolderFolderType}: |
| 555 | request['folder_type'] = 'shared_folder_folder' |
| 556 | else: |
| 557 | request['folder_type'] = 'user_folder' |
| 558 | |
| 559 | if request.get('folder_type') is None: |
| 560 | if base_folder.type in {BaseFolderNode.SharedFolderType, BaseFolderNode.SharedFolderFolderType}: |
| 561 | request['folder_type'] = 'shared_folder_folder' |
| 562 | |
| 563 | if request.get('folder_type') is None: |
| 564 | inp = user_choice('Do you want to create a shared folder?', 'yn', default='n') |
| 565 | if inp.lower() == 'y': |
| 566 | request['folder_type'] = 'shared_folder' |
| 567 | pq = 'Default user permissions: (A)ll | Manage (U)sers / (R)ecords; Can (E)dit / (S)hare records?' |
| 568 | inp = user_choice(pq, 'aures', multi_choice=True) |
| 569 | request['manage_users'] = False |
| 570 | request['manage_records'] = False |
| 571 | request['can_edit'] = False |
| 572 | request['can_share'] = False |
| 573 | if len(inp) > 0: |
| 574 | s1 = set([x.lower() for x in inp]) |
| 575 | if 'a' in s1: |
| 576 | request['manage_users'] = True |
| 577 | request['manage_records'] = True |
| 578 | request['can_edit'] = True |
| 579 | request['can_share'] = True |
| 580 | else: |
| 581 | if 'u' in s1: |
| 582 | request['manage_users'] = True |
| 583 | if 'r' in s1: |
| 584 | request['manage_records'] = True |