Fixed yet another bug in the merging of actions & options
git-svn-id: file:///svn-source/pmgr/branches/yafr_20090716/site@388 97e9348a-65ac-dc4b-aefc-98561f571b83
This commit is contained in:
@@ -254,26 +254,72 @@ class LinkableBehavior extends ModelBehavior {
|
|||||||
else
|
else
|
||||||
$associationAlias = $modelAlias;
|
$associationAlias = $modelAlias;
|
||||||
|
|
||||||
|
$this->pr(30,
|
||||||
|
array('checkpoint' => 'Options/Association pre-merge',
|
||||||
|
compact('association', 'options'),
|
||||||
|
));
|
||||||
|
|
||||||
// A couple exceptions before performing a union of
|
// A couple exceptions before performing a union of
|
||||||
// options and association. Namely, most fields result
|
// options and association. Namely, most fields result
|
||||||
// in either/or, but a couple should include BOTH the
|
// in either/or, but a couple should include BOTH the
|
||||||
// options AND the association settings.
|
// options AND the association settings.
|
||||||
foreach (array('fields', 'conditions') AS $fld) {
|
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]);
|
unset($options[$fld]);
|
||||||
elseif (!empty($options[$fld]) && !is_array($options[$fld]))
|
elseif (!empty($options[$fld]) && !is_array($options[$fld]))
|
||||||
$options[$fld] = 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]);
|
unset($association[$fld]);
|
||||||
elseif (!empty($association[$fld]) && !is_array($association[$fld]))
|
elseif (!empty($association[$fld]) && !is_array($association[$fld]))
|
||||||
$association[$fld] = 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]))
|
if (isset($options[$fld]) && isset($association[$fld]))
|
||||||
$options[$fld] = array_merge($options[$fld],
|
$options[$fld] = array_merge($options[$fld],
|
||||||
$association[$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
|
// For any option that's not already set, use
|
||||||
// whatever is specified by the assocation.
|
// whatever is specified by the assocation.
|
||||||
$options += array_intersect_key($association, $this->_options);
|
$options += array_intersect_key($association, $this->_options);
|
||||||
|
|||||||
Reference in New Issue
Block a user