end updating module list

This commit is contained in:
Manuel Raynaud
2013-10-17 17:20:29 +02:00
parent 1b865d71a3
commit 1b0de7144a
8 changed files with 143 additions and 4 deletions

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<module>
<fullnamespace></fullnamespace>
<descriptive locale="en_US">
<title></title>
</descriptive>
<descriptive locale="fr_FR">
<title></title>
</descriptive>
<version></version>
<author>
<name></name>
<email></email>
</author>
<type></type>
<thelia></thelia>
<stability></stability>
</module>

View File

@@ -187,7 +187,7 @@ abstract class BaseModule extends ContainerAware
$this->reflected = new \ReflectionObject($this); $this->reflected = new \ReflectionObject($this);
} }
return dirname($this->reflected->getFileName()); return basename(dirname($this->reflected->getFileName()));
} }
abstract public function install(); abstract public function install();

View File

@@ -22,7 +22,15 @@
/*************************************************************************************/ /*************************************************************************************/
namespace Thelia\Module; namespace Thelia\Module;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Exception\PropelException;
use Propel\Runtime\Propel;
use Symfony\Component\Finder\Finder; use Symfony\Component\Finder\Finder;
use Thelia\Model\Map\ModuleTableMap;
use Thelia\Model\Module;
use Thelia\Model\ModuleI18n;
use Thelia\Model\ModuleQuery;
/** /**
@@ -33,6 +41,7 @@ use Symfony\Component\Finder\Finder;
class ModuleManagement class ModuleManagement
{ {
protected $baseModuleDir; protected $baseModuleDir;
protected $reflected;
public function __construct() public function __construct()
{ {
@@ -50,8 +59,63 @@ class ModuleManagement
$descriptorValidator = new ModuleDescriptorValidator(); $descriptorValidator = new ModuleDescriptorValidator();
foreach ($finder as $file) { foreach ($finder as $file) {
$content = $descriptorValidator->getDescriptor($file->getRealPath()); $content = $descriptorValidator->getDescriptor($file->getRealPath());
var_dump($content); exit; $reflected = new \ReflectionClass((string)$content->fullnamespace);
$code = basename(dirname($reflected->getFileName()));
if(null === ModuleQuery::create()->filterByCode($code)->findOne()) {
$module = new Module();
$con = Propel::getWriteConnection(ModuleTableMap::DATABASE_NAME);
$con->beginTransaction();
try {
$module
->setCode($code)
->setFullNamespace((string)$content->fullnamespace)
->setType($this->getModuleType($reflected))
->setActivate(0)
->save($con);
$this->saveDescription($module, $content, $con);
$con->commit();
} catch(PropelException $e) {
$con->rollBack();
throw $e;
}
}
} }
} }
private function saveDescription(Module $module,\SimpleXMLElement $content, ConnectionInterface $con)
{
foreach($content->descriptive as $description)
{
$locale = $description->attributes()->locale;
$moduleI18n = new ModuleI18n();
$moduleI18n
->setLocale($locale)
->setModule($module)
->setTitle($description->title)
->setDescription(isset($description->description)?$description->description:null)
->setPostscriptum(isset($description->postscriptum)?$description->postscriptum:null)
->setChapo(isset($description->subtitle)?$description->subtitle:null)
->save($con);
}
}
private function getModuleType(\ReflectionClass $reflected)
{
if($reflected->implementsInterface('Thelia\Module\DeliveryModuleInterface')) {
return BaseModule::DELIVERY_MODULE_TYPE;
} else if($reflected->implementsInterface('Thelia\Module\PaymentModuleInterface')) {
return BaseModule::PAYMENT_MODULE_TYPE;
} else {
return BaseModule::CLASSIC_MODULE_TYPE;
}
}
} }

View File

@@ -3,7 +3,7 @@
<xs:element name="module"> <xs:element name="module">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element type="xs:string" minOccurs="1" name="full-namespace"> <xs:element type="xs:string" minOccurs="1" name="fullnamespace">
<xs:annotation> <xs:annotation>
<xs:documentation>The full namespace for the main class module (for example MyModule\MyModule)</xs:documentation> <xs:documentation>The full namespace for the main class module (for example MyModule\MyModule)</xs:documentation>
</xs:annotation> </xs:annotation>

View File

@@ -1,9 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module> <module>
<full-namespace>Cheque\\Cheque</full-namespace> <fullnamespace>Cheque\Cheque</fullnamespace>
<descriptive locale="en_US"> <descriptive locale="en_US">
<title>Cheque</title> <title>Cheque</title>
</descriptive> </descriptive>
<descriptive locale="fr_FR">
<title>Cheque</title>
</descriptive>
<version>1.1</version> <version>1.1</version>
<author> <author>
<name>Manuel Raynaud</name> <name>Manuel Raynaud</name>

18
local/modules/Colissimo/Config/module.xml Executable file → Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<module>
<fullnamespace>Colissimo\Colissimo</fullnamespace>
<descriptive locale="en_US">
<title>colisimo</title>
</descriptive>
<descriptive locale="fr_FR">
<title>colisimo</title>
</descriptive>
<version>1.0</version>
<author>
<name>Manuel Raynaud</name>
<email>mraynaud@openstudio.fr</email>
</author>
<type>delivery</type>
<thelia>2.0.0</thelia>
<stability>alpha</stability>
</module>

18
local/modules/FakeCB/Config/module.xml Executable file → Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<module>
<fullnamespace>FakeCB\FakeCB</fullnamespace>
<descriptive locale="en_US">
<title>fake cb</title>
</descriptive>
<descriptive locale="fr_FR">
<title>simulation cb</title>
</descriptive>
<version>1.0</version>
<author>
<name>Manuel Raynaud</name>
<email>mraynaud@openstudio.fr</email>
</author>
<type>payment</type>
<thelia>2.0.0</thelia>
<stability>alpha</stability>
</module>

18
local/modules/TheliaDebugBar/Config/module.xml Executable file → Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<module>
<fullnamespace>TheliaDebugBar\TheliaDebugBar</fullnamespace>
<descriptive locale="en_US">
<title>debugbar for thelia</title>
</descriptive>
<descriptive locale="fr_FR">
<title>debugbar pour thelia</title>
</descriptive>
<version>1.0</version>
<author>
<name>Manuel Raynaud</name>
<email>mraynaud@openstudio.fr</email>
</author>
<type>classic</type>
<thelia>2.0.0</thelia>
<stability>alpha</stability>
</module>