Afform Gui - Support cloning existing forms
authorColeman Watts <coleman@civicrm.org>
Wed, 27 Jan 2021 20:13:04 +0000 (15:13 -0500)
committerColeman Watts <coleman@civicrm.org>
Sat, 30 Jan 2021 01:41:06 +0000 (20:41 -0500)
ext/afform/admin/ang/afAdmin.js
ext/afform/admin/ang/afAdmin/afAdminList.html
ext/afform/admin/ang/afGuiEditor/afGuiEditor.component.js

index 4d8a85670060d3d925ba78fa8464fa65cb21fe91..a298306d32e8d5e17a765caa226c7b33f5409c35 100644 (file)
           }
         }
       });
+      $routeProvider.when('/clone/:name', {
+        controller: 'afAdminGui',
+        template: '<af-gui-editor mode="clone" data="$ctrl.data"></af-gui-editor>',
+        resolve: {
+          // Load data for gui editor
+          data: function($route, crmApi4) {
+            return crmApi4('Afform', 'loadAdminData', {
+              definition: {name: $route.current.params.name}
+            }, 0);
+          }
+        }
+      });
     });
 
 })(angular, CRM.$, CRM._);
index 5ab6d0cc127fdd0cd606371cbc77f68d2cb2557a..c4b0901d184f70a3fcef6da8bf52b97407c308ca 100644 (file)
@@ -57,6 +57,7 @@
       <td>{{afform.is_public ? ts('Frontend') : ts('Backend')}}</td>
       <td>
         <a ng-if="afform.type !== 'system'" href="#/edit/{{ afform.name }}" class="btn btn-xs btn-primary">{{ ts('Edit') }}</a>
+        <a ng-if="afform.type !== 'system'" href="#/clone/{{ afform.name }}" class="btn btn-xs btn-primary">{{ ts('Clone') }}</a>
         <a href ng-if="afform.has_local" class="btn btn-xs btn-danger" crm-confirm="{type: afform.has_base ? 'revert' : 'delete', obj: afform}" on-yes="$ctrl.revert(afform)">
           {{ afform.has_base ? ts('Revert') : ts('Delete') }}
         </a>
index 80ce49a798bcb00e372c687b9cda8ca853cee0ad..092505cb2061dfcab2364a42338fc72b305a1639 100644 (file)
         if (!$scope.afform) {
           alert('Error: unknown form');
         }
+        if (editor.mode === 'clone') {
+          delete $scope.afform.name;
+          $scope.afform.title += ' ' + ts('(copy)');
+        }
         $scope.canvasTab = 'layout';
         $scope.layoutHtml = '';
         editor.layout = {'#children': []};