diff --git a/CRM/Contactcats/BAO/ContactCategoryDefinition.php b/CRM/Contactcats/BAO/ContactCategoryDefinition.php new file mode 100644 index 0000000..e499082 --- /dev/null +++ b/CRM/Contactcats/BAO/ContactCategoryDefinition.php @@ -0,0 +1,7 @@ + $row) { + if ($row['search_type'] === 'group') { + $groupIDs[] = $row['search_data']['group_id'] ?? NULL; + } + elseif ($row['search_type'] === 'search') { + $searchIDs[] = $row['search_data']['saved_search_id'] ?? NULL; + } + } + $groupIDs = array_filter($groupIDs); + $searchIDs = array_filter($searchIDs); + if ($groupIDs) { + $groupNames = Group::get() + ->addWhere('id', 'IN', $groupIDs) + ->addSelect('title') + ->execute()->indexBy('id')->column('title'); + } + if ($searchIDs) { + $searchNames = SavedSearch::get() + ->addWhere('id', 'IN', $searchIDs) + ->addSelect('label') + ->execute()->indexBy('id')->column('label'); + } + if ($searchNames || $groupNames) { + foreach ($result as $row) { + if ($row['search_type'] === 'group' + && !empty($groupNames[$row['search_data']['group_id'] ?? '']) + ) { + $row['search_source'] = $groupNames[$row['search_data']['group_id'] ?? '']; + } + elseif (($row['search_type'] === 'search') + && !empty($searchNames[$row['search_data']['saved_search_id'] ?? '']) + ) { + $row['search_source'] = $searchNames[$row['search_data']['saved_search_id'] ?? '']; + } + } + } + $result[$idx] = $row; + } + +} diff --git a/Civi/Api4/ContactCategoryDefinition.php b/Civi/Api4/ContactCategoryDefinition.php index 47a7653..1bc31fc 100644 --- a/Civi/Api4/ContactCategoryDefinition.php +++ b/Civi/Api4/ContactCategoryDefinition.php @@ -1,6 +1,8 @@ setCheckPermissions($checkPermissions); + } + } diff --git a/ang/crmContactcats.js b/ang/crmContactcats.js index e9fd138..0405af0 100644 --- a/ang/crmContactcats.js +++ b/ang/crmContactcats.js @@ -22,133 +22,75 @@ // this.$onInit gets run after the this controller is called, and after the bindings have been applied. this.$onInit = async function() { ctrl.saved = false; - const various = await crmApi4({ - settings: ["Setting", "get", { select: ["contact_categories"] }, 0], - groups: [ - "Group", - "get", - { - where: [ - ["is_active", "=", 1], - ["is_hidden", "=", 0] - ], - orderBy: { name: "ASC" } - } - ], - cats: [ - "OptionValue", - "get", - { - select: ["value", "label"], - where: [["option_group_id:name", "=", "contact_categories"]] - } - ] - }); - ctrl.catmap = []; - if (!various.settings.value || !various.settings.value.groupIDs) { - various.settings.value = { - groupIDs: ["0"], - updateAfter: 0 - }; - } - various.settings.value.groupIDs.forEach(groupID => { - let cat = various.cats.find(c => c.value == groupID); - ctrl.catmap.push({ - groupID, - name: cat ? cat.label : "" - }); - }); - console.log({ various, catmap: ctrl.catmap }); - ctrl.groups = various.groups; - ctrl.nameKeydown = (keyEvt, idx) => { - if (keyEvt.key === "ArrowUp" || keyEvt.key === "ArrowDown") { - keyEvt.preventDefault(); - keyEvt.stopPropagation(); - if ( - keyEvt.key === "ArrowUp" && - idx > 0 && - idx < ctrl.catmap.length - 1 - ) { - ctrl.catmap.splice(idx, 0, ...ctrl.catmap.splice(idx - 1, 1)); - console.log("up", { keyEvt }); - $timeout(() => keyEvt.target.focus(), 10); - } else if ( - keyEvt.key === "ArrowDown" && - idx < ctrl.catmap.length - 2 - ) { - ctrl.catmap.splice(idx + 1, 0, ...ctrl.catmap.splice(idx, 1)); - console.log( - "down", - ctrl.catmap.map(e => e.name) - ); - } - } - }; + ctrl.categoryDefinitions = null; + ctrl.categoryDefinitions = await crmApi4("ContactCategoryDefinition", 'get', { orderBy: { label: 'ASC' }, withLabels: true }); + $scope.$digest(); - ctrl.deleteRow = idx => { - ctrl.catmap.splice(idx, 1); - }; - ctrl.getGroupsFor = idx => { - let groupsInUse = ctrl.catmap.map(c => c.groupID); - groupsInUse.splice(idx, 1); - return ctrl.groups.filter( - g => !groupsInUse.includes(g.id.toString()) - ); - }; - ctrl.save = async () => { - console.log("save", ctrl.catmap); - // reconstruct everything. + // ctrl.deleteRow = idx => { + // ctrl.catmap.splice(idx, 1); + // }; + // ctrl.getGroupsFor = idx => { + // let groupsInUse = ctrl.catmap.map(c => c.groupID); + // groupsInUse.splice(idx, 1); + // return ctrl.groups.filter( + // g => !groupsInUse.includes(g.id.toString()) + // ); + // }; - const optValsRecords = []; - ctrl.catmap.forEach(r => { - if (!r.name || r.groupID === "") { - return; - } - // Do we have an option value for this group ID? - let c = various.cats.find(cat => cat.value == r.groupID); - if (c) { - if (c.label != r.name) { - optValsRecords.push({ - id: c.id, - label: r.name - }); - } - } else { - optValsRecords.push({ - label: r.name, - value: r.groupID, - "option_group_id:name": "contact_categories" - }); - } - }); - console.log("optionValue updates", optValsRecords, ctrl.catmap); - const updates = { - saveSetting: [ - "Setting", - "set", - { - values: { - contact_categories: { - groupIDs: ctrl.catmap.map(i => i.groupID), - updateAfter: 0 - } - } - } - ] - }; - if (optValsRecords.length) { - updates.saveOptions = [ - "OptionValue", - "save", - { records: optValsRecords } - ]; - } - await crmApi4(updates); - console.log("saved", updates); - ctrl.saved = true; - $scope.$digest(); - }; + // ctrl.save = async () => { + // console.log("save", ctrl.catmap); + // // reconstruct everything. + // + // const optValsRecords = []; + // ctrl.catmap.forEach(r => { + // if (!r.name || r.groupID === "") { + // return; + // } + // // Do we have an option value for this group ID? + // let c = various.cats.find(cat => cat.value == r.groupID); + // if (c) { + // if (c.label != r.name) { + // optValsRecords.push({ + // id: c.id, + // label: r.name + // }); + // } + // } else { + // optValsRecords.push({ + // label: r.name, + // value: r.groupID, + // "option_group_id:name": "contact_categories" + // }); + // } + // }); + // console.log("optionValue updates", optValsRecords, ctrl.catmap); + // const updates = { + // saveSetting: [ + // "Setting", + // "set", + // { + // values: { + // contact_categories: { + // groupIDs: ctrl.catmap.map(i => i.groupID), + // updateAfter: 0 + // } + // } + // } + // ] + // }; + // if (optValsRecords.length) { + // updates.saveOptions = [ + // "OptionValue", + // "save", + // { records: optValsRecords } + // ]; + // } + // await crmApi4(updates); + // console.log("saved", updates); + // ctrl.saved = true; + // $scope.$digest(); + // }; }; // this.$onChange = function(changes) { // // changes is object keyed by name what '<' binding changed in diff --git a/ang/crmContactcats/crmContactCategorySettings.html b/ang/crmContactcats/crmContactCategorySettings.html index 6fd8380..70cc933 100644 --- a/ang/crmContactcats/crmContactCategorySettings.html +++ b/ang/crmContactcats/crmContactCategorySettings.html @@ -1,51 +1,34 @@ -