From 4e1cc9e810a624c3ca7651e67197f9d6df135d45 Mon Sep 17 00:00:00 2001 From: Manuel Raynaud Date: Mon, 2 Sep 2013 16:54:18 +0200 Subject: [PATCH] start refacroting install process --- .../Install.php => Install/BaseInstall.php} | 43 ++++------ core/lib/Thelia/Install/CheckPermission.php | 78 +++++++++++++++++++ .../Exception/AlreadyInstallException.php | 35 +++++++++ .../Install/Exception/InstallException.php | 32 ++++++++ 4 files changed, 159 insertions(+), 29 deletions(-) rename core/lib/Thelia/{Action/Install.php => Install/BaseInstall.php} (66%) create mode 100644 core/lib/Thelia/Install/CheckPermission.php create mode 100644 core/lib/Thelia/Install/Exception/AlreadyInstallException.php create mode 100644 core/lib/Thelia/Install/Exception/InstallException.php diff --git a/core/lib/Thelia/Action/Install.php b/core/lib/Thelia/Install/BaseInstall.php similarity index 66% rename from core/lib/Thelia/Action/Install.php rename to core/lib/Thelia/Install/BaseInstall.php index 4c5d31df4..58c510267 100644 --- a/core/lib/Thelia/Action/Install.php +++ b/core/lib/Thelia/Install/BaseInstall.php @@ -20,42 +20,27 @@ /* along with this program. If not, see . */ /* */ /*************************************************************************************/ - -namespace Thelia\Action; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; - +namespace Thelia\Install; +use Thelia\Install\Exception\AlreadyInstallException; /** - * Class Install - * @package Thelia\Action + * Class BaseInstall * @author Manuel Raynaud */ -class Install extends BaseAction implements EventSubscriberInterface { - +abstract class BaseInstall +{ /** - * Returns an array of event names this subscriber wants to listen to. - * - * The array keys are event names and the value can be: - * - * * The method name to call (priority defaults to 0) - * * An array composed of the method name to call and the priority - * * An array of arrays composed of the method names to call and respective - * priorities, or 0 if unset - * - * For instance: - * - * * array('eventName' => 'methodName') - * * array('eventName' => array('methodName', $priority)) - * * array('eventName' => array(array('methodName1', $priority), array('methodName2')) - * - * @return array The event names to listen to - * - * @api + * Verify if an installation already exists */ - public static function getSubscribedEvents() + public function __construct($verifyInstall = true) { - array( + if (file_exists(THELIA_ROOT . '/local/config/database.yml') && $verifyInstall) { + throw new AlreadyInstallException("Thelia is already installed"); + } - ); + + $this->exec(); } + + abstract public function exec(); } \ No newline at end of file diff --git a/core/lib/Thelia/Install/CheckPermission.php b/core/lib/Thelia/Install/CheckPermission.php new file mode 100644 index 000000000..db73330cf --- /dev/null +++ b/core/lib/Thelia/Install/CheckPermission.php @@ -0,0 +1,78 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Install; + + +/** + * Class CheckPermission + * @package Thelia\Install + * @author Manuel Raynaud + */ +class CheckPermission extends BaseInstall +{ + const CONF = "const"; + const LOG = "log"; + const CACHE = "cache"; + + private $directories = array(); + private $validation = array(); + private $valid = true; + + public function __construct($verifyInstall = true) + { + + + $this->directories = array( + self::CONF => THELIA_ROOT . "local/config", + self::LOG => THELIA_ROOT . "log", + self::CACHE => THELIA_ROOT . "cache" + ); + + $this->validation = array( + self::CONF => array( + "text" => sprintf("config directory(%s)...", $this->directories[self::CONF]), + "status" => true + ), + self::LOG => array( + "text" => sprintf("cache directory(%s)...", $this->directories[self::LOG]), + "status" => true + ), + self::CACHE => array( + "text" => sprintf("log directory(%s)...", $this->directories[self::CACHE]), + "status" => true + ) + ); + parent::__construct($verifyInstall); + } + + public function exec() + { + foreach ($this->directories as $key => $directory) { + if(is_writable($directory) === false) { + $this->valid = false; + $this->validation[$key]["status"] = false; + } + } + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Install/Exception/AlreadyInstallException.php b/core/lib/Thelia/Install/Exception/AlreadyInstallException.php new file mode 100644 index 000000000..1409c7cdd --- /dev/null +++ b/core/lib/Thelia/Install/Exception/AlreadyInstallException.php @@ -0,0 +1,35 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Install\Exception; + + +/** + * Class AlreadyInstallException + * @package Thelia\Install\Exception + * @author Manuel Raynaud + */ +class AlreadyInstallException extends InstallException +{ + +} \ No newline at end of file diff --git a/core/lib/Thelia/Install/Exception/InstallException.php b/core/lib/Thelia/Install/Exception/InstallException.php new file mode 100644 index 000000000..6924bcfe5 --- /dev/null +++ b/core/lib/Thelia/Install/Exception/InstallException.php @@ -0,0 +1,32 @@ +. */ +/* */ +/*************************************************************************************/ +namespace Thelia\Install\Exception; + +/** + * Class InstallException + * @author Manuel Raynaud + */ +class InstallException extends \RuntimeException +{ + +} \ No newline at end of file