Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00%
0 / 1
54.55%
12 / 22
CRAP
77.94%
53 / 68
Check
0.00%
0 / 1
54.55%
12 / 22
46.41
77.94%
53 / 68
 __construct()
100.00%
1 / 1
1
100.00%
7 / 7
 getResult()
100.00%
1 / 1
1
100.00%
1 / 1
 setName($name = null)
0.00%
0 / 1
3.58
60.00%
3 / 5
 getName()
100.00%
1 / 1
1
100.00%
1 / 1
 setGroup($group = null)
100.00%
1 / 1
3
100.00%
5 / 5
 getGroup()
100.00%
1 / 1
1
100.00%
1 / 1
 setParameters(Parameters $parameters)
100.00%
1 / 1
1
100.00%
2 / 2
 getParameters()
100.00%
1 / 1
1
100.00%
1 / 1
 setCache(IReadOnlyCache $cache)
0.00%
0 / 1
2
0.00%
0 / 2
 getDependencies()
0.00%
0 / 1
2
0.00%
0 / 1
 getDefaultGroupName()
0.00%
0 / 1
2
0.00%
0 / 1
 getDefaultSettingGroupName()
0.00%
0 / 1
2
0.00%
0 / 1
 addSetting($name, $value, $group = null, $flag = ISetting::NORMAL, $cachable = false)
100.00%
1 / 1
3
100.00%
8 / 8
 addCachableSetting($name, $value, $group = null, $flag = ISetting::NORMAL)
100.00%
1 / 1
1
100.00%
2 / 2
 addInfo($text = '', $name = null, $group = null)
100.00%
1 / 1
3
100.00%
8 / 8
 addNotice($text = '', $name = null, $group = null)
0.00%
0 / 1
3.14
75.00%
6 / 8
 addError($text = '', $name = null, $group = null)
0.00%
0 / 1
3.14
75.00%
6 / 8
 getDialogHelper()
0.00%
0 / 1
2
0.00%
0 / 1
 getOutputStream()
0.00%
0 / 1
2
0.00%
0 / 1
 setCommand(Command $command)
0.00%
0 / 1
2
0.00%
0 / 2
 getCommand()
100.00%
1 / 1
1
100.00%
1 / 1
 getRandomString($length = 8, $prefix = 'check_')
100.00%
1 / 1
1
100.00%
1 / 1
<?php
namespace Environaut\Checks;
use Environaut\Cache\Cache;
use Environaut\Cache\IReadOnlyCache;
use Environaut\Command\Command;
use Environaut\Config\Parameters;
use Environaut\Report\Results\IResult;
use Environaut\Report\Results\Result;
use Environaut\Report\Results\Messages\Message;
use Environaut\Report\Results\Settings\ISetting;
use Environaut\Report\Results\Settings\Setting;
/**
 * Class that custom Checks may extend to get access
 * to the dialog helper from the command (and thus
 * the input/output stream).
 */
abstract class Check implements ICheck
{
    /**
     * @var string
     */
    protected $name;
    /**
     * @var string
     */
    protected $group;
    /**
     * @var Parameters
     */
    protected $parameters;
    /**
     * @var Command
     */
    protected $command;
    /**
     * @var IResult
     */
    protected $result;
    /**
     * @var IReadOnlyCache
     */
    protected $cache;
    /**
     * Creates a new Check instance with a random name and the default group.
     */
    public function __construct()
    {
        $this->name = self::getRandomString(8);
        $this->group = $this->getDefaultGroupName();
        $this->parameters = new Parameters(array());
        $this->result = new Result();
        $this->result->setCheck($this);
        $this->cache = new Cache();
    }
    /**
     * Returns the result of this check. This should be called after the run() method has been run.
     *
     * @return IResult result of this check
     */
    public function getResult()
    {
        return $this->result;
    }
    /**
     * Sets the name of the check. When null or a non-string value is given a random name is set.
     *
     * @param string $name name of the check
     *
     * @return Check this instance for fluent API support
     */
    public function setName($name = null)
    {
        if (null === $name || !is_string($name)) {
            $this->name = self::getRandomString(8);
        } else {
            $this->name = $name;
        }
        return $this;
    }
    /**
     * Returns the name of this check.
     *
     * @return string name of this check
     */
    public function getName()
    {
        return $this->name;
    }
    /**
     * Sets the group name of the check (for reports). Null or non-string values will set the default group name.
     *
     * @param string $group name of the group the check belongs to
     *
     * @return Check this instance for fluent API support
     */
    public function setGroup($group = null)
    {
        if (null === $group || !is_string($group)) {
            $this->group = $this->getDefaultGroupName();
        } else {
            $this->group = $group;
        }
        return $this;
    }
    /**
     * Returns the group name of this check that may be useful to group/namespace settings.
     *
     * @return string group name of this check
     */
    public function getGroup()
    {
        return $this->group;
    }
    /**
     * Sets the necessary runtime parameters of the check.
     *
     * @param Parameters $parameters runtime configuration parameters for this check
     *
     * @return Check this instance for fluent API support
     */
    public function setParameters(Parameters $parameters)
    {
        $this->parameters = $parameters;
        return $this;
    }
    /**
     * Returns the runtime parameters that are used to run this check.
     *
     * @return Parameters runtime parameters of this check
     */
    public function getParameters()
    {
        return $this->parameters;
    }
    /**
     * Sets the cache instance a check may use to retrieve old values from the cache
     * to prevent e.g. asking already configured settings.
     *
     * @param IReadOnlyCache $cache cache instance
     *
     * @return Check this instance for fluent API support
     */
    public function setCache(IReadOnlyCache $cache)
    {
        $this->cache = $cache;
        return $this;
    }
    /**
     * Returns the tokens that should be available prior to running this check.
     *
     * @return array with token names
     */
    public function getDependencies()
    {
        return array();
    }
    /**
     * Returns the default group name this check uses when none is specified.
     *
     * @return string default group name of the check
     */
    public function getDefaultGroupName()
    {
        return self::DEFAULT_GROUP_NAME;
    }
    /**
     * Returns the default group name this check uses for settings when none is specified.
     *
     * @return string default group name of settings of this check
     */
    public function getDefaultSettingGroupName()
    {
        return $this->getDefaultGroupName();
    }
    /**
     * Adds the given value under the given key to the settings
     * of the result. The setting may have a group name to more
     * easily separate them on export. If no group name is specified
     * the check's default setting group name is used as the default.
     *
     * @param string $name key for that setting
     * @param mixed $value usually a string value
     * @param string $group name of group this setting belongs to
     * @param int $flag type of the setting (normal or sensitive)
     * @param boolean $cachable whether that setting should also be stored in a cache. Default is false (NOT cached!).
     *
     * @return Check this instance for fluent API support
     *
     * @throws \InvalidArgumentException if no valid setting key was given
     */
    protected function addSetting($name, $value, $group = null, $flag = ISetting::NORMAL, $cachable = false)
    {
        if (empty($name)) {
            throw new \InvalidArgumentException('A setting must have a valid name.');
        }
        if (null === $group) {
            $group = $this->getDefaultSettingGroupName();
        }
        $setting = new Setting($name, $value, $group, $flag);
        $this->result->addSetting($setting, $cachable);
        return $this;
    }
    /**
     * Adds the given value under the given key to the settings
     * of the result. The setting may have a group name to more
     * easily separate them on export. If no group name is specified
     * the check's default setting group name is used as the default.
     * This setting may be written to a cache to be available on re-runs
     * of the check.
     *
     * @param string $name key for that setting
     * @param mixed $value usually a string value
     * @param string $group name of group this setting belongs to
     * @param int $flag type of the setting (ISetting::NORMAL by default)
     *
     * @return Check this instance for fluent API support
     *
     * @throws \InvalidArgumentException if no valid setting key was given
     */
    protected function addCachableSetting($name, $value, $group = null, $flag = ISetting::NORMAL)
    {
        $this->addSetting($name, $value, $group, $flag, true);
        return $this;
    }
    /**
     * Convenience method to add an informational message to the
     * result (message severity is Message::SEVERITY_INFO).
     *
     * @param string $text message text
     * @param string $name message name
     * @param string $group group name
     *
     * @return Check this instance for fluent API support
     */
    protected function addInfo($text = '', $name = null, $group = null)
    {
        if (null === $name) {
            $name = $this->name;
        }
        if (null === $group) {
            $group = $this->getDefaultGroupName();
        }
        $this->result->addMessage(new Message($name, $text, $group, Message::SEVERITY_INFO));
        return $this;
    }
    /**
     * Convenience method to add notification to the result
     * (message severity is Message::SEVERITY_NOTICE).
     *
     * @param string $text message text
     * @param string $name message name
     * @param string $group group name
     *
     * @return Check this instance for fluent API support
     */
    protected function addNotice($text = '', $name = null, $group = null)
    {
        if (null === $name) {
            $name = $this->name;
        }
        if (null === $group) {
            $group = $this->getDefaultGroupName();
        }
        $this->result->addMessage(new Message($name, $text, $group, Message::SEVERITY_NOTICE));
        return $this;
    }
    /**
     * Convenience method to add an error message to the
     * result (message severity is Message::SEVERITY_ERROR).
     *
     * @param string $text message text
     * @param string $name message name
     * @param string $group group name
     *
     * @return Check this instance for fluent API support
     */
    protected function addError($text = '', $name = null, $group = null)
    {
        if (null === $name) {
            $name = $this->name;
        }
        if (null === $group) {
            $group = $this->getDefaultGroupName();
        }
        $this->result->addMessage(new Message($name, $text, $group, Message::SEVERITY_ERROR));
        return $this;
    }
    /**
     * @return \Symfony\Component\Console\Helper\DialogHelper
     */
    public function getDialogHelper()
    {
        return $this->command->getDialogHelper();
    }
    /**
     * @return \Symfony\Component\Console\Output\OutputInterface
     */
    public function getOutputStream()
    {
        return $this->command->getOutput();
    }
    /**
     * @param \Environaut\Command\Command $command
     *
     * @return Check this instance for fluent API support
     */
    public function setCommand(Command $command)
    {
        $this->command = $command;
        return $this;
    }
    /**
     * @return \Environaut\Command\Command
     */
    public function getCommand()
    {
        return $this->command;
    }
    /**
     * Returns a random string with the specified length and prefix (prefix is not part of the length).
     *
     * @param int $length
     * @param string $prefix
     *
     * @return string
     */
    public static function getRandomString($length = 8, $prefix = 'check_')
    {
        return $prefix . bin2hex(openssl_random_pseudo_bytes($length));
    }
}