<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.3 |
+ | CiviCRM version 4.4 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2013 |
+--------------------------------------------------------------------+
* - fresh boolean ignore cache entries and go back to DB
* @param String $context: Context string
*
- * @return Array on success, FALSE on error.
+ * @return Array|bool - array on success, FALSE on error.
*
* @static
*/
$params += array(
'grouping' => FALSE,
'localize' => FALSE,
- 'onlyActive' => ($context == 'validate' || $context == 'create') ? FALSE : TRUE,
+ 'onlyActive' => ($context == 'validate' || $context == 'get') ? FALSE : TRUE,
'fresh' => FALSE,
);
// 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'])) {
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(, , , $ent) = explode('_', $daoName);
+ $sql = "SELECT path FROM civicrm_menu
+ WHERE page_callback LIKE '%CRM_Admin_Page_$ent%'
+ LIMIT 1";
+ return CRM_Core_Dao::singleValueQuery($sql);
+ }
+ return NULL;
+ }
+
/**
* DEPRECATED generic populate method
* All pseudoconstant functions that use this method are also deprecated.
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",