X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FCore%2FPseudoConstant.php;h=344cba8072ec3b44c3c9858ea061a41dcbd5455d;hb=900eb33a20f6f8ed03c1a8da6259a61679935ac8;hp=ef8b6daca7e38bb897c0da2054afb4c779d612b1;hpb=9541859723b7e4fcf94020aea37f71a0c486880b;p=civicrm-core.git diff --git a/CRM/Core/PseudoConstant.php b/CRM/Core/PseudoConstant.php index ef8b6daca7..344cba8072 100644 --- a/CRM/Core/PseudoConstant.php +++ b/CRM/Core/PseudoConstant.php @@ -1,7 +1,7 @@ FALSE, 'localize' => FALSE, - 'onlyActive' => ($context == 'validate' || $context == 'create') ? FALSE : TRUE, + 'onlyActive' => ($context == 'validate' || $context == 'get') ? FALSE : TRUE, 'fresh' => FALSE, ); @@ -276,20 +277,12 @@ class CRM_Core_PseudoConstant { // Core field: load schema $dao = new $daoName; - $fields = $dao->fields(); - $fieldKeys = $dao->fieldKeys(); + $fieldSpec = $dao->getFieldSpec($fieldName); $dao->free(); - - // Support "unique names" as well as sql names - $fieldKey = $fieldName; - if (empty($fields[$fieldKey])) { - $fieldKey = $fieldKeys[$fieldName]; - } // If neither worked then this field doesn't exist. Return false. - if (empty($fields[$fieldKey])) { + if (empty($fieldSpec)) { return FALSE; } - $fieldSpec = $fields[$fieldKey]; // If the field is an enum, explode the enum definition and return the array. if (isset($fieldSpec['enumValues'])) { @@ -501,6 +494,33 @@ class CRM_Core_PseudoConstant { return CRM_Utils_Array::key($value, $values); } + /** + * Lookup the admin page at which a field's option list can be edited + * @param $fieldSpec + * @return string|null + */ + static function getOptionEditUrl($fieldSpec) { + // If it's an option group, that's easy + if (!empty($fieldSpec['pseudoconstant']['optionGroupName'])) { + return 'civicrm/admin/options/' . $fieldSpec['pseudoconstant']['optionGroupName']; + } + // For everything else... + elseif (!empty($fieldSpec['pseudoconstant']['table'])) { + $daoName = CRM_Core_DAO_AllCoreTables::getClassForTable($fieldSpec['pseudoconstant']['table']); + if (!$daoName) { + return NULL; + } + // We don't have good mapping so have to do a bit of guesswork from the menu + list(, $parent, , $child) = explode('_', $daoName); + $sql = "SELECT path FROM civicrm_menu + WHERE page_callback LIKE '%CRM_Admin_Page_$child%' OR page_callback LIKE '%CRM_{$parent}_Page_$child%' + ORDER BY page_callback + LIMIT 1"; + return CRM_Core_Dao::singleValueQuery($sql); + } + return NULL; + } + /** * DEPRECATED generic populate method * All pseudoconstant functions that use this method are also deprecated. @@ -1043,6 +1063,7 @@ WHERE id = %1"; while ($relationshipTypeDAO->fetch()) { self::$relationshipType[$valueColumnName][$relationshipTypeDAO->id] = array( + 'id' => $relationshipTypeDAO->id, $column_a_b => $relationshipTypeDAO->$column_a_b, $column_b_a => $relationshipTypeDAO->$column_b_a, 'contact_type_a' => "$relationshipTypeDAO->contact_type_a",