diff --git a/site/models/behaviors/linkable.php b/site/models/behaviors/linkable.php index 8bc10da..2a60128 100644 --- a/site/models/behaviors/linkable.php +++ b/site/models/behaviors/linkable.php @@ -254,26 +254,72 @@ class LinkableBehavior extends ModelBehavior { else $associationAlias = $modelAlias; + $this->pr(30, + array('checkpoint' => 'Options/Association pre-merge', + compact('association', 'options'), + )); + // A couple exceptions before performing a union of // options and association. Namely, most fields result // in either/or, but a couple should include BOTH the // options AND the association settings. foreach (array('fields', 'conditions') AS $fld) { - if (isset($options[$fld]) && empty($options[$fld]) && !is_array($options[$fld])) + $this->pr(31, + array('checkpoint' => 'Options/Associations field original', + compact('fld') + + array("options[$fld]" => + array('value' => array_key_exists($fld, $options) ? (isset($options[$fld]) ? $options[$fld] : '-null-') : '-unset-', + 'type' => array_key_exists($fld, $options) ? (isset($options[$fld]) ? gettype($options[$fld]) : '-null-') : '-unset-'), + "association[$fld]" => + array('value' => array_key_exists($fld, $association) ? (isset($association[$fld]) ? $association[$fld] : '-null-') : '-unset-', + 'type' => array_key_exists($fld, $association) ? (isset($association[$fld]) ? gettype($association[$fld]) : '-null-') : '-unset-'), + ))); + + if (!isset($options[$fld]) || + (empty($options[$fld]) && !is_array($options[$fld]))) unset($options[$fld]); elseif (!empty($options[$fld]) && !is_array($options[$fld])) $options[$fld] = array($options[$fld]); - if (isset($association[$fld]) && empty($association[$fld]) && !is_array($association[$fld])) + if (!isset($association[$fld]) || + (empty($association[$fld]) && !is_array($association[$fld]))) unset($association[$fld]); elseif (!empty($association[$fld]) && !is_array($association[$fld])) $association[$fld] = array($association[$fld]); + + $this->pr(31, + array('checkpoint' => 'Options/Associations field normalize', + compact('fld') + + array("options[$fld]" => + array('value' => array_key_exists($fld, $options) ? (isset($options[$fld]) ? $options[$fld] : '-null-') : '-unset-', + 'type' => array_key_exists($fld, $options) ? (isset($options[$fld]) ? gettype($options[$fld]) : '-null-') : '-unset-'), + "association[$fld]" => + array('value' => array_key_exists($fld, $association) ? (isset($association[$fld]) ? $association[$fld] : '-null-') : '-unset-', + 'type' => array_key_exists($fld, $association) ? (isset($association[$fld]) ? gettype($association[$fld]) : '-null-') : '-unset-'), + ))); + if (isset($options[$fld]) && isset($association[$fld])) $options[$fld] = array_merge($options[$fld], $association[$fld]); + + $this->pr(31, + array('checkpoint' => 'Options/Associations field merge complete', + compact('fld') + + array("options[$fld]" => + array('value' => array_key_exists($fld, $options) ? (isset($options[$fld]) ? $options[$fld] : '-null-') : '-unset-', + 'type' => array_key_exists($fld, $options) ? (isset($options[$fld]) ? gettype($options[$fld]) : '-null-') : '-unset-'), + "association[$fld]" => + array('value' => array_key_exists($fld, $association) ? (isset($association[$fld]) ? $association[$fld] : '-null-') : '-unset-', + 'type' => array_key_exists($fld, $association) ? (isset($association[$fld]) ? gettype($association[$fld]) : '-null-') : '-unset-'), + ))); } + $this->pr(30, + array('checkpoint' => 'Options/Association post-merge', + compact('association', 'options'), + )); + // For any option that's not already set, use // whatever is specified by the assocation. $options += array_intersect_key($association, $this->_options);