array( * 'reload' => 1 * ), * )); * @endcode * * @package CRM * @copyright CiviCRM LLC (c) 2004-2014 * $Id$ */ require_once 'api/Wrapper.php'; /** * Class CRM_Utils_API_ReloadOption */ class CRM_Utils_API_ReloadOption implements API_Wrapper { /** * @var CRM_Utils_API_ReloadOption */ private static $_singleton = NULL; /** * @return CRM_Utils_API_ReloadOption */ public static function singleton() { if (self::$_singleton === NULL) { self::$_singleton = new CRM_Utils_API_ReloadOption(); } return self::$_singleton; } /** * {@inheritDoc} */ public function fromApiInput($apiRequest) { return $apiRequest; } /** * {@inheritDoc} */ public function toApiOutput($apiRequest, $result) { $reloadMode = NULL; if ($apiRequest['action'] === 'create' && isset($apiRequest['params'], $apiRequest['params']['options']) && is_array($apiRequest['params']['options']) && isset($apiRequest['params']['options']['reload'])) { if (!CRM_Utils_Array::value('is_error', $result, FALSE)) { $reloadMode = $apiRequest['params']['options']['reload']; } } switch ($reloadMode) { case NULL: case '0': case 'null': case '': return $result; case '1': case 'default': $params = array( 'id' => $result['id'], ); $reloadResult = civicrm_api3($apiRequest['entity'], 'get', $params); if ($reloadResult['is_error']) { throw new API_Exception($reloadResult['error_message']); } $result['values'][$result['id']] = array_merge($result['values'][$result['id']], $reloadResult['values'][$result['id']]); return $result; case 'selected': $params = array( 'id' => $result['id'], 'return' => $this->pickReturnFields($apiRequest), ); $reloadResult = civicrm_api3($apiRequest['entity'], 'get', $params); $result['values'][$result['id']] = array_merge($result['values'][$result['id']], $reloadResult['values'][$result['id']]); return $result; default: throw new API_Exception("Unknown reload mode " . $reloadMode); } } /** * Identify the fields which should be returned * * @param $apiRequest * @return array */ public function pickReturnFields($apiRequest) { $fields = civicrm_api3($apiRequest['entity'], 'getfields', array()); $returnKeys = array_intersect( array_keys($apiRequest['params']), array_keys($fields['values']) ); return $returnKeys; } }