@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3echo pht('Migrating Maniphest custom field configuration...')."\n";
4
5$old_key = 'maniphest.custom-fields';
6$new_key = 'maniphest.custom-field-definitions';
7
8if (PhabricatorEnv::getEnvConfig($new_key)) {
9 echo pht('Skipping migration, new data is already set.')."\n";
10 return;
11}
12
13$old = PhabricatorEnv::getEnvConfigIfExists($old_key);
14if (!$old) {
15 echo pht('Skipping migration, old data does not exist.')."\n";
16 return;
17}
18
19$new = array();
20foreach ($old as $field_key => $spec) {
21 $new_spec = array();
22
23 foreach ($spec as $key => $value) {
24 switch ($key) {
25 case 'label':
26 $new_spec['name'] = $value;
27 break;
28 case 'required':
29 case 'default':
30 case 'caption':
31 case 'options':
32 $new_spec[$key] = $value;
33 break;
34 case 'checkbox-label':
35 $new_spec['strings']['edit.checkbox'] = $value;
36 break;
37 case 'checkbox-value':
38 $new_spec['strings']['view.yes'] = $value;
39 break;
40 case 'type':
41 switch ($value) {
42 case 'string':
43 $value = 'text';
44 break;
45 case 'user':
46 $value = 'users';
47 $new_spec['limit'] = 1;
48 break;
49 }
50 $new_spec['type'] = $value;
51 break;
52 case 'copy':
53 $new_spec['copy'] = $value;
54 break;
55 }
56 }
57
58 $new[$field_key] = $new_spec;
59}
60
61PhabricatorConfigEntry::loadConfigEntry($new_key)
62 ->setIsDeleted(0)
63 ->setValue($new)
64 ->save();
65
66echo pht('Done.')."\n";