<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.3 |
+ | CiviCRM version 4.4 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2013 |
+--------------------------------------------------------------------+
* @param $labelColumnName string the column to use for 'label'
* @param $onlyActive boolean return only the action option values
* @param $fresh boolean ignore cache entries and go back to DB
+ * @param $keyColumnName string the column to use for 'key'
*
* @return array the values as specified by the above params
* @static
static function &values(
$name, $flip = FALSE, $grouping = FALSE,
$localize = FALSE, $condition = NULL,
- $labelColumnName = 'label', $onlyActive = TRUE, $fresh = FALSE
+ $labelColumnName = 'label', $onlyActive = TRUE, $fresh = FALSE, $keyColumnName = 'value'
) {
- $cacheKey = self::createCacheKey($name, $flip, $grouping, $localize, $condition, $labelColumnName, $onlyActive);
-
- if (array_key_exists($cacheKey, self::$_cache) && !$fresh) {
- return self::$_cache[$cacheKey];
- }
-
$cache = CRM_Utils_Cache::singleton();
- $var = $cache->get($cacheKey);
- if ($var && !$fresh) {
- return $var;
+ $cacheKey = self::createCacheKey($name, $flip, $grouping, $localize, $condition, $labelColumnName, $onlyActive, $keyColumnName);
+
+ if (!$fresh) {
+ // Fetch from static var
+ if (array_key_exists($cacheKey, self::$_cache)) {
+ return self::$_cache[$cacheKey];
+ }
+ // Fetch from main cache
+ $var = $cache->get($cacheKey);
+ if ($var) {
+ return $var;
+ }
}
$query = "
-SELECT v.{$labelColumnName} as {$labelColumnName} ,v.value as value, v.grouping as grouping
+SELECT v.{$labelColumnName} as {$labelColumnName} ,v.{$keyColumnName} as value, v.grouping as grouping
FROM civicrm_option_value v,
civicrm_option_group g
WHERE v.option_group_id = g.id
$query .= $condition;
}
- $query .= " ORDER BY v.weight";
+ $query .= " ORDER BY v.weight";
$p = array(1 => array($name, 'String'));
$dao = CRM_Core_DAO::executeQuery($query, $p);
* @param $labelColumnName
* @param $onlyActive
*/
- protected static function flushValues($name, $flip, $grouping, $localize, $condition, $labelColumnName, $onlyActive) {
- $cacheKey = self::createCacheKey($name, $flip, $grouping, $localize, $condition, $labelColumnName, $onlyActive);
+ protected static function flushValues($name, $flip, $grouping, $localize, $condition, $labelColumnName, $onlyActive, $keyColumnName = 'value') {
+ $cacheKey = self::createCacheKey($name, $flip, $grouping, $localize, $condition, $labelColumnName, $onlyActive, $keyColumnName);
$cache = CRM_Utils_Cache::singleton();
$cache->delete($cacheKey);
unset(self::$_cache[$cacheKey]);
}
- protected static function createCacheKey($name, $flip, $grouping, $localize, $condition, $labelColumnName, $onlyActive) {
- $cacheKey = "CRM_OG_{$name}_{$flip}_{$grouping}_{$localize}_{$condition}_{$labelColumnName}_{$onlyActive}";
+ protected static function createCacheKey() {
+ $cacheKey = "CRM_OG_" . serialize(func_get_args());
return $cacheKey;
}
* @static
* @void
*/
- static function &valuesByID($id, $flip = FALSE, $grouping = FALSE, $localize = FALSE, $labelColumnName = 'label') {
- $cacheKey = "CRM_OG_ID_{$id}_{$flip}_{$grouping}_{$localize}_{$labelColumnName}";
+ static function &valuesByID($id, $flip = FALSE, $grouping = FALSE, $localize = FALSE, $labelColumnName = 'label', $onlyActive = TRUE, $fresh = FALSE) {
+ $cacheKey = self::createCacheKey($id, $flip, $grouping, $localize, $labelColumnName, $onlyActive);
$cache = CRM_Utils_Cache::singleton();
- $var = $cache->get($cacheKey);
- if ($var) {
- return $var;
+ if (!$fresh) {
+ $var = $cache->get($cacheKey);
+ if ($var) {
+ return $var;
+ }
}
$query = "
SELECT v.{$labelColumnName} as {$labelColumnName} ,v.value as value, v.grouping as grouping
civicrm_option_group g
WHERE v.option_group_id = g.id
AND g.id = %1
- AND v.is_active = 1
AND g.is_active = 1
- ORDER BY v.weight, v.label;
";
+ if ($onlyActive) {
+ $query .= " AND v.is_active = 1 ";
+ }
+ $query .= " ORDER BY v.weight, v.label";
+
$p = array(1 => array($id, 'Integer'));
$dao = CRM_Core_DAO::executeQuery($query, $p);
* @static
*
* @return string the value from the row where is_default = true
- */
+ */
static function getDefaultValue($groupName) {
if (empty($groupName)) {
return NULL;
$p = array(1 => array($groupName, 'String'));
return CRM_Core_DAO::singleValueQuery($query, $p);
}
-
+
/**
* Creates a new option group with the passed in values
* @TODO: Should update the group if it already exists intelligently, so multi-lingual is
static function flushAll() {
self::$_values = array();
self::$_cache = array();
+ CRM_Utils_Cache::singleton()->flush();
}
}