$option ) { if ( $option->mandatory === true && $option->value === false ) { throw new ezcConsoleOptionMandatoryViolationException( $option ); } $this->validateDependencies( $option ); $this->validateExclusions( $option ); if ( $option->arguments === false && $option->value !== false && $hasArguments ) { throw new ezcConsoleOptionArgumentsViolationException( $option ); } } } /** * Validated option dependencies. * * Validates dependencies by $option. * * @param ezcConsoleOption $option. */ private function validateDependencies( ezcConsoleOption $option ) { $optSet = ( $option->value !== false && ( !is_array( $option->value ) || $option->value !== array() ) ); foreach ( $option->getDependencies() as $dep ) { if ( $dep->ifSet === $optSet ) { $this->validateDependency( $option, $dep ); } } } /** * Validates a single dependency. * * Validates the dependency $dep, which is set in the $srcOpt. * * @param ezcConsoleOption $srcOpt * @param ezcConsoleOptionRule $dep */ private function validateDependency( ezcConsoleOption $srcOpt, ezcConsoleOptionRule $dep ) { $optValue = $dep->option->value; if ( $optValue === false || $optValue === array() ) { throw new ezcConsoleOptionDependencyViolationException( $srcOpt, $dep->option ); } if ( $dep->values !== array() ) { $optVals = ( is_array( $optValue ) ? $optValue : array( $optValue) ); $unrecognizedVals = array_diff( $optVals, $dep->values ); if ( $unrecognizedVals !== array() ) { throw new ezcConsoleOptionDependencyViolationException( $srcOpt, $dep->option, implode( ', ', $dep->values ) ); } } } /** * Validated option exclusions. * * Validates exclusions by $option. * * @param ezcConsoleOption $option. */ private function validateExclusions( ezcConsoleOption $option ) { $optSet = ( $option->value !== false && ( !is_array( $option->value ) || $option->value !== array() ) ); foreach ( $option->getExclusions() as $excl ) { if ( $excl->ifSet === $optSet ) { $this->validateExclusion( $option, $excl ); } } } /** * Validates a single exclusion. * * Validates the exclusion $excl, which is set in the $srcOpt. * * @param ezcConsoleOption $srcOpt * @param ezcConsoleOptionRule $excl */ private function validateExclusion( ezcConsoleOption $srcOpt, ezcConsoleOptionRule $excl ) { $optValue = $excl->option->value; if ( $optValue !== false && $optValue !== array() && $excl->values === array() ) { throw new ezcConsoleOptionExclusionViolationException( $srcOpt, $excl->option ); } $optVals = ( is_array( $optValue ) ? $optValue : array( $optValue ) ); $forbiddenVals = array_intersect( $optVals, $excl->values ); if ( $forbiddenVals !== array() ) { throw new ezcConsoleOptionExclusionViolationException( $srcOpt, $excl->option, implode( ', ', $excl->values ) ); } } } ?>