| 551 | return mkdir_parser |
| 552 | |
| 553 | def execute(self, params, **kwargs): |
| 554 | base_folder = params.folder_cache[params.current_folder] if params.current_folder in params.folder_cache else params.root_folder |
| 555 | |
| 556 | name = kwargs['folder'] if 'folder' in kwargs else None |
| 557 | if name: |
| 558 | rs = try_resolve_path(params, name) |
| 559 | if rs is not None: |
| 560 | base_folder, name = rs |
| 561 | if len(name) == 0: |
| 562 | logging.warning('mkdir: Folder "%s" already exists', kwargs['folder']) |
| 563 | return |
| 564 | |
| 565 | shared_folder = kwargs['shared_folder'] if 'shared_folder' in kwargs else None |
| 566 | user_folder = kwargs['user_folder'] if 'user_folder' in kwargs else None |
| 567 | |
| 568 | request = {"command": "folder_add"} |
| 569 | if shared_folder: |
| 570 | if base_folder.type in {BaseFolderNode.RootFolderType, BaseFolderNode.UserFolderType}: |
| 571 | request['folder_type'] = 'shared_folder' |
| 572 | grant = kwargs['grant'] if 'grant' in kwargs else None |
| 573 | for flag in ['manage_users', 'manage_records', 'can_share', 'can_edit']: |
| 574 | if grant or (flag in kwargs and kwargs[flag]): |
| 575 | request[flag] = True |
| 576 | else: |
| 577 | raise CommandError('mkdir', 'Shared folders cannot be nested') |
| 578 | |
| 579 | elif user_folder: |
| 580 | if base_folder.type in {BaseFolderNode.SharedFolderType, BaseFolderNode.SharedFolderFolderType}: |
| 581 | request['folder_type'] = 'shared_folder_folder' |
| 582 | else: |
| 583 | request['folder_type'] = 'user_folder' |
| 584 | |
| 585 | if request.get('folder_type') is None: |
| 586 | if base_folder.type in {BaseFolderNode.SharedFolderType, BaseFolderNode.SharedFolderFolderType}: |
| 587 | request['folder_type'] = 'shared_folder_folder' |
| 588 | |
| 589 | if request.get('folder_type') is None: |
| 590 | inp = user_choice('Do you want to create a shared folder?', 'yn', default='n') |
| 591 | if inp.lower() == 'y': |
| 592 | request['folder_type'] = 'shared_folder' |
| 593 | pq = 'Default user permissions: (A)ll | Manage (U)sers / (R)ecords; Can (E)dit / (S)hare records?' |
| 594 | inp = user_choice(pq, 'aures', multi_choice=True) |
| 595 | request['manage_users'] = False |
| 596 | request['manage_records'] = False |
| 597 | request['can_edit'] = False |
| 598 | request['can_share'] = False |
| 599 | if len(inp) > 0: |
| 600 | s1 = set([x.lower() for x in inp]) |
| 601 | if 'a' in s1: |
| 602 | request['manage_users'] = True |
| 603 | request['manage_records'] = True |
| 604 | request['can_edit'] = True |
| 605 | request['can_share'] = True |
| 606 | else: |
| 607 | if 'u' in s1: |
| 608 | request['manage_users'] = True |
| 609 | if 'r' in s1: |
| 610 | request['manage_records'] = True |