/** * Add a dependency where the value in one field can change settings for the other field * * Dependencies are processed in the order they are added * * @param mixed $dependency \MUtil\Model\Dependency\DependencyInterface or string or array to create one * @param mixed $dependsOn Optional string field name or array of fields that do the changing * @param array $effects Optional array of field => array(setting) of settings are changed, array of whatever * the dependency accepts as an addEffects() argument * @param mixed $key A key to identify the specific dependency. * @return int The actual key used. */ public function addDependency($dependency, $dependsOn = null, array $effects = null, $key = null) { if (!$dependency instanceof DependencyInterface) { $loader = \MUtil_Model::getDependencyLoader(); if (is_array($dependency)) { $parameters = $dependency; $className = array_shift($parameters); } else { $parameters = array(); $className = (string) $dependency; } $dependency = $loader->createClass($className, $parameters); } if (null !== $dependsOn) { $dependency->addDependsOn($dependsOn); } if (is_array($effects)) { $dependency->addEffecteds($effects); } if (null === $key) { $keys = array_filter(array_keys($this->_model_dependencies), 'is_int'); $key = ($keys ? max($keys) : 0) + 10; } $dependency->applyToModel($this); $this->_model_dependencies[$key] = $dependency; return $key; }