Skip to content

Commit 9229903

Browse files
colemanwtotten
authored andcommitted
Toward civicrm#6 - use API instead of scanner to retrieve afforms
1 parent 6f7321a commit 9229903

File tree

9 files changed

+47
-41
lines changed

9 files changed

+47
-41
lines changed

ext/afform/core/CRM/Afform/AfformScanner.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public function getComputedFields($name) {
163163

164164
$fields = [];
165165
$fields['has_local'] = file_exists($localLayoutPath) || file_exists($localMetaPath);
166-
$fields['has_packaged'] = ($fields['has_local'] && count($allPaths) > 1)
166+
$fields['has_base'] = ($fields['has_local'] && count($allPaths) > 1)
167167
|| (!$fields['has_local'] && count($allPaths) > 0);
168168
return $fields;
169169
}

ext/afform/core/Civi/Api4/Action/Afform/Get.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public function getRecords() {
1919
$values = [];
2020
foreach ($names as $name) {
2121
$record = $scanner->getMeta($name);
22-
if ($record) {
22+
if ($record && ($this->_isFieldSelected('has_local') || $this->_isFieldSelected('has_base'))) {
2323
$record = array_merge($record, $scanner->getComputedFields($name));
2424
}
2525
$layout = $this->_isFieldSelected('layout') ? $scanner->getLayout($name) : NULL;

ext/afform/core/Civi/Api4/Afform.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public static function getFields() {
120120
'name' => 'has_local',
121121
];
122122
$fields[] = [
123-
'name' => 'has_packaged',
123+
'name' => 'has_base',
124124
];
125125
}
126126

ext/afform/core/Civi/Api4/Utils/AfformSaveTrait.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ protected function writeRecord($item) {
3636
unset($fields[array_search('layout', $fields)]);
3737
unset($fields[array_search('name', $fields)]);
3838
unset($fields[array_search('has_local', $fields)]);
39-
unset($fields[array_search('has_packaged', $fields)]);
39+
unset($fields[array_search('has_base', $fields)]);
4040
$orig = \Civi\Api4\Afform::get()->setCheckPermissions(FALSE)->addWhere('name', '=', $item['name'])->setSelect($fields)->execute()->first();
4141
}
4242

ext/afform/core/afform.php

+33-26
Original file line numberDiff line numberDiff line change
@@ -160,40 +160,48 @@ function afform_civicrm_caseTypes(&$caseTypes) {
160160
function afform_civicrm_angularModules(&$angularModules) {
161161
_afform_civix_civicrm_angularModules($angularModules);
162162

163-
/** @var CRM_Afform_AfformScanner $scanner */
164-
$scanner = Civi::service('afform_scanner');
165-
$names = array_keys($scanner->findFilePaths());
166-
foreach ($names as $name) {
167-
$meta = $scanner->getMeta($name);
168-
$angularModules[_afform_angular_module_name($name, 'camel')] = [
163+
$afforms = \Civi\Api4\Afform::get()
164+
->setCheckPermissions(FALSE)
165+
->setSelect(['name', 'requires'])
166+
->execute();
167+
168+
foreach ($afforms as $afform) {
169+
$angularModules[_afform_angular_module_name($afform['name'], 'camel')] = [
169170
'ext' => E::LONG_NAME,
170-
'js' => ['assetBuilder://afform.js?name=' . urlencode($name)],
171-
'requires' => $meta['requires'],
171+
'js' => ['assetBuilder://afform.js?name=' . urlencode($afform['name'])],
172+
'requires' => $afform['requires'],
172173
'basePages' => [],
173174
'partialsCallback' => '_afform_get_partials',
174-
'_afform' => $name,
175+
'_afform' => $afform['name'],
175176
'exports' => [
176-
_afform_angular_module_name($name, 'dash') => 'AE',
177+
_afform_angular_module_name($afform['name'], 'dash') => 'AE',
177178
],
178179
];
179180
}
180181
}
181182

182183
/**
183-
* Construct a list of partials for a given afform/angular module.
184+
* Callback to retrieve partials for a given afform/angular module.
185+
*
186+
* @see afform_civicrm_angularModules
184187
*
185188
* @param string $moduleName
186189
* The module name.
187190
* @param array $module
188191
* The module definition.
189192
* @return array
190193
* Array(string $filename => string $html).
194+
* @throws API_Exception
191195
*/
192196
function _afform_get_partials($moduleName, $module) {
193-
/** @var CRM_Afform_AfformScanner $scanner */
194-
$scanner = Civi::service('afform_scanner');
197+
$afform = civicrm_api4('Afform', 'get', [
198+
'where' => [['name', '=', $module['_afform']]],
199+
'select' => ['layout'],
200+
'layoutFormat' => 'html',
201+
'checkPermissions' => FALSE,
202+
], 0);
195203
return [
196-
"~/$moduleName/$moduleName.aff.html" => $scanner->getLayout($module['_afform']),
204+
"~/$moduleName/$moduleName.aff.html" => $afform['layout'],
197205
];
198206
}
199207

@@ -418,17 +426,11 @@ function afform_civicrm_buildAsset($asset, $params, &$mimeType, &$content) {
418426
throw new RuntimeException("Missing required parameter: afform.js?name=NAME");
419427
}
420428

421-
$name = $params['name'];
422-
/** @var \CRM_Afform_AfformScanner $scanner */
423-
$scanner = Civi::service('afform_scanner');
424-
$meta = $scanner->getMeta($name);
425-
$moduleName = _afform_angular_module_name($name, 'camel');
426-
429+
$moduleName = _afform_angular_module_name($params['name'], 'camel');
427430
$smarty = CRM_Core_Smarty::singleton();
428431
$smarty->assign('afform', [
429432
'camel' => $moduleName,
430-
'meta' => $meta,
431-
'metaJson' => json_encode($meta),
433+
'meta' => ['name' => $params['name']],
432434
'templateUrl' => "~/$moduleName/$moduleName.aff.html",
433435
]);
434436
$mimeType = 'text/javascript';
@@ -480,10 +482,15 @@ function afform_civicrm_permission_check($permission, &$granted, $contactId) {
480482
if (preg_match('/^@afform:(.*)/', $permission, $m)) {
481483
$name = $m[1];
482484

483-
/** @var CRM_Afform_AfformScanner $scanner */
484-
$scanner = \Civi::container()->get('afform_scanner');
485-
$meta = $scanner->getMeta($name);
486-
$granted = CRM_Core_Permission::check($meta['permission'], $contactId);
485+
$afform = \Civi\Api4\Afform::get()
486+
->setCheckPermissions(FALSE)
487+
->addWhere('name', '=', $name)
488+
->setSelect(['permission'])
489+
->execute()
490+
->first();
491+
if ($afform) {
492+
$granted = CRM_Core_Permission::check($afform['permission'], $contactId);
493+
}
487494
}
488495
}
489496

ext/afform/core/templates/afform/AfformAngularModule.tpl

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22
33
@param string $afform.camel The full camel-case name of the AngularJS module being created
44
@param array $afform.meta The full metadata record of the form
5-
@param string $afform.metaJson The full metadata record of the form
65
@param string $afform.layout The template content (HTML)
76
*}
87
{literal}
98
(function(angular, $, _) {
109
angular.module('{/literal}{$afform.camel}{literal}', CRM.angRequires('{/literal}{$afform.camel}{literal}'));
1110
angular.module('{/literal}{$afform.camel}{literal}').directive('{/literal}{$afform.camel}{literal}', function(afCoreDirective) {
12-
return afCoreDirective({/literal}{$afform.camel|json},{$afform.metaJson}{literal}, {
11+
return afCoreDirective({/literal}{$afform.camel|json}, {$afform.meta|@json_encode}{literal}, {
1312
templateUrl: {/literal}{$afform.templateUrl|json}{literal}
1413
});
1514
});

ext/afform/gui/ang/afGuiList.aff.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<i class="crm-i fa-plus"></i> {{ ts('New Form') }}
33
</a>
44
<div
5-
af-api4="['Afform', 'get', {select: ['name','title','is_public','server_route','has_local','has_packaged'], orderBy: {name:'ASC'}}]"
5+
af-api4="['Afform', 'get', {select: ['name','title','is_public','server_route','has_local','has_base'], orderBy: {name:'ASC'}}]"
66
af-api4-ctrl="listCtrl">
77

88
<div ng-if="apiData.result.length == 0">
@@ -38,14 +38,14 @@
3838
af-api4-success-msg="ts('Reverted')"
3939
af-api4-success="listCtrl.refresh()"
4040
class="btn btn-xs btn-default"
41-
ng-if="availForm.has_local && availForm.has_packaged"
41+
ng-if="availForm.has_local && availForm.has_base"
4242
>{{ts('Revert')}}</a>
4343
<a af-api4-action="['Afform', 'revert', {where: [['name','=', availForm.name]]}]"
4444
af-api4-start-msg="ts('Deleting...')"
4545
af-api4-success-msg="ts('Deleted')"
4646
af-api4-success="listCtrl.refresh()"
4747
class="btn btn-xs btn-default"
48-
ng-if="availForm.has_local && !availForm.has_packaged"
48+
ng-if="availForm.has_local && !availForm.has_base"
4949
>{{ts('Delete')}}</a>
5050
</td>
5151
</tr>

ext/afform/html/ang/afHtmlList.aff.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<div
2-
af-api4="['Afform', 'get', {select: ['name','title','is_public','server_route', 'has_local', 'has_packaged'], orderBy: {name:'ASC'}}]"
2+
af-api4="['Afform', 'get', {select: ['name','title','is_public','server_route', 'has_local', 'has_base'], orderBy: {name:'ASC'}}]"
33
af-api4-ctrl="listCtrl">
44

55
<div ng-if="apiData.result.length == 0">
@@ -35,14 +35,14 @@
3535
af-api4-success-msg="ts('Reverted')"
3636
af-api4-success="listCtrl.refresh()"
3737
class="btn btn-xs btn-default"
38-
ng-if="availForm.has_local && availForm.has_packaged"
38+
ng-if="availForm.has_local && availForm.has_base"
3939
>{{ts('Revert')}}</a>
4040
<a af-api4-action="['Afform', 'revert', {where: [['name','=', availForm.name]]}]"
4141
af-api4-start-msg="ts('Deleting...')"
4242
af-api4-success-msg="ts('Deleted')"
4343
af-api4-success="listCtrl.refresh()"
4444
class="btn btn-xs btn-default"
45-
ng-if="availForm.has_local && !availForm.has_packaged"
45+
ng-if="availForm.has_local && !availForm.has_base"
4646
>{{ts('Delete')}}</a>
4747
</td>
4848
</tr>

ext/afform/mock/tests/phpunit/api/v4/AfformTest.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public function testGetUpdateRevert($formName, $originalMetadata) {
6060
$this->assertEquals($get($originalMetadata, 'server_route'), $get($result[0], 'server_route'), $message);
6161
$this->assertEquals($get($originalMetadata, 'permission'), $get($result[0], 'permission'), $message);
6262
$this->assertTrue(is_array($result[0]['layout']), $message);
63-
$this->assertEquals(TRUE, $get($result[0], 'has_packaged'), $message);
63+
$this->assertEquals(TRUE, $get($result[0], 'has_base'), $message);
6464
$this->assertEquals(FALSE, $get($result[0], 'has_local'), $message);
6565

6666
$message = 'After updating with Afform.create, the revised data should be returned';
@@ -80,7 +80,7 @@ public function testGetUpdateRevert($formName, $originalMetadata) {
8080
$this->assertEquals($get($originalMetadata, 'server_route'), $get($result[0], 'server_route'), $message);
8181
$this->assertEquals('access foo', $get($result[0], 'permission'), $message);
8282
$this->assertTrue(is_array($result[0]['layout']), $message);
83-
$this->assertEquals(TRUE, $get($result[0], 'has_packaged'), $message);
83+
$this->assertEquals(TRUE, $get($result[0], 'has_base'), $message);
8484
$this->assertEquals(TRUE, $get($result[0], 'has_local'), $message);
8585

8686
Civi\Api4\Afform::revert()->addWhere('name', '=', $formName)->execute();
@@ -92,7 +92,7 @@ public function testGetUpdateRevert($formName, $originalMetadata) {
9292
$this->assertEquals($get($originalMetadata, 'server_route'), $get($result[0], 'server_route'), $message);
9393
$this->assertEquals($get($originalMetadata, 'permission'), $get($result[0], 'permission'), $message);
9494
$this->assertTrue(is_array($result[0]['layout']), $message);
95-
$this->assertEquals(TRUE, $get($result[0], 'has_packaged'), $message);
95+
$this->assertEquals(TRUE, $get($result[0], 'has_base'), $message);
9696
$this->assertEquals(FALSE, $get($result[0], 'has_local'), $message);
9797
}
9898

0 commit comments

Comments
 (0)