Exemplo n.º 1
0
 public function setup()
 {
     if (!$this->_modelStructure->hasColumn($this->_valueField)) {
         $this->_modelStructure->addColumn($this->_valueField, array('type' => 'varchar(255)'))->saveStructure();
         ModelOperator::getInstance()->updateDBForModel($this->_modelName);
     }
 }
Exemplo n.º 2
0
 /**
  * Update database and models
  */
 public function updateAllAction()
 {
     QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0');
     ModelOperator::getInstance(DC::getEnvironment()->getUserClassesRoot() . 'db/')->updateDBForAllModels();
     ModelOperator::getInstance()->generateAllModelClasses();
     $this->writeln('DB updated');
 }
Exemplo n.º 3
0
    protected static function putTestContent()
    {
        QC::executeSQL('DROP TABLE IF EXISTS products');
        $storagePath = __DIR__ . '/storage/';
        $mo = ModelOperator::getInstance($storagePath);
        $mo->generateBasicStructure('Product');
        $ms = new ModelStructure('Product');
        $ms->addColumn('id_brand', array('type' => 'int(11) unsigned'));
        $ms->saveStructure();
        $mo->generateAllModelClasses();
        $mo->updateDBForAllModels();
        require_once $storagePath . 'bases/BaseProduct.php';
        require_once $storagePath . 'classes/Product.php';
        QC::create('products')->insert(array('title' => 'Macbook air'))->execute();
        $testProductFileContent = <<<TEXT
<?php

class ProductCustom extends BaseProduct {
    private \$_internalManufacturer = 'solve';
    public function getManufacturer() { return \$this->_internalManufacturer; }
    public function setManufacturer(\$value) { \$this->_internalManufacturer = \$value; return \$this; }
}
TEXT;
        file_put_contents($storagePath . 'classes/ProductCustom.php', $testProductFileContent);
        require_once $storagePath . 'classes/ProductCustom.php';
        $mo->setStructureForModel('ProductCustom', $mo->generateBasicStructure('Product', false), false);
    }
Exemplo n.º 4
0
 /**
  * Generates default database model structure
  */
 public function modelAction()
 {
     $name = ucfirst(Inflector::camelize($this->getFirstParamOrAsk('Enter model name')));
     $path = DC::getEnvironment()->getUserClassesRoot() . 'db/';
     $mo = ModelOperator::getInstance($path);
     if ($mo->getModelStructure($name)) {
         $this->warning('model ' . $name . ' is already exists', '~ model exists, skipping:');
         return true;
     }
     $mo->generateBasicStructure($name);
     $mo->saveModelStructure($name);
     $this->notify($path . 'structure/' . $name . '.yml', '+ model created');
 }
Exemplo n.º 5
0
 protected static function putTestContent()
 {
     QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0');
     QC::executeSQL('DROP TABLE IF EXISTS brands');
     $storagePath = __DIR__ . '/storage/';
     $mo = ModelOperator::getInstance($storagePath);
     $mo->generateBasicStructure('Brand');
     ModelStructure::getInstanceForModel('Brand')->addAbility('slug')->saveStructure();
     $mo->generateAllModelClasses();
     require_once $storagePath . 'bases/BaseBrand.php';
     require_once $storagePath . 'classes/Brand.php';
     $mo->updateDBForAllModels();
 }
Exemplo n.º 6
0
 protected static function putTestContent()
 {
     QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0');
     QC::executeSQL('DROP TABLE IF EXISTS brands');
     $storagePath = __DIR__ . '/storage/';
     $mo = ModelOperator::getInstance($storagePath);
     $mo->generateBasicStructure('User');
     ModelStructure::getInstanceForModel('User')->dropColumn('title')->addColumn('name', array('type' => 'varchar(255)', 'validation' => array('CustomName' => array('class' => 'Solve\\Database\\Tests\\CustomNameValidationRule', 'error' => 'invalid name')), 'process' => array('trim')))->addColumn('email', array('type' => 'varchar(255)'))->saveStructure();
     $mo->generateDataProcessorRules('User');
     $mo->generateAllModelClasses();
     require_once $storagePath . 'bases/BaseUser.php';
     require_once $storagePath . 'classes/User.php';
     $mo->updateDBForAllModels();
 }
Exemplo n.º 7
0
 protected static function putTestContent()
 {
     QC::executeSQL('DROP TABLE IF EXISTS products');
     $storagePath = __DIR__ . '/storage/';
     $mo = ModelOperator::getInstance($storagePath);
     $mo->generateBasicStructure('Product');
     $ms = new ModelStructure('Product');
     $ms->addColumn('info', array('type' => 'array'));
     $ms->saveStructure();
     $mo->generateAllModelClasses();
     $mo->updateDBForAllModels();
     require_once $storagePath . 'bases/BaseProduct.php';
     require_once $storagePath . 'classes/Product.php';
     QC::create('products')->insert(array('title' => 'Macbook air'))->execute();
 }
Exemplo n.º 8
0
 protected static function putTestContent()
 {
     QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0');
     QC::executeSQL('DROP TABLE IF EXISTS brands');
     $storagePath = __DIR__ . '/storage/';
     $mo = ModelOperator::getInstance($storagePath);
     $mo->generateBasicStructure('Brand');
     ModelStructure::getInstanceForModel('Brand')->addAbility('files', array('logo' => array('name' => 'original', 'multiple' => true), 'info' => array(), 'avatar' => array('sizes' => array('small' => array('size' => '100x100', 'method' => 'fitOut')))))->saveStructure();
     $mo->generateAllModelClasses();
     require_once $storagePath . 'bases/BaseBrand.php';
     require_once $storagePath . 'classes/Brand.php';
     $webRoot = __DIR__ . '/upload/';
     FilesAbility::setBaseStoreLocation($webRoot);
     FSService::setWebRoot($webRoot);
     FSService::unlinkRecursive($webRoot);
     $mo->updateDBForAllModels();
 }
Exemplo n.º 9
0
 protected static function putTestContent()
 {
     QC::executeSQL('SET FOREIGN_KEY_CHECKS = 0');
     QC::executeSQL('DROP TABLE IF EXISTS products');
     QC::executeSQL('DROP TABLE IF EXISTS brands');
     QC::executeSQL('DROP TABLE IF EXISTS brands_translate');
     $storagePath = __DIR__ . '/storage/';
     $mo = ModelOperator::getInstance($storagePath);
     $mo->generateBasicStructure('Product');
     $mo->generateBasicStructure('Brand');
     ModelStructure::getInstanceForModel('Product')->addColumn('id_brand', array('type' => 'int(11) unsigned'))->addRelation('brand')->saveStructure();
     ModelStructure::getInstanceForModel('Brand')->addRelation('products')->addAbility('translate', array('columns' => array('title')))->saveStructure();
     $mo->generateAllModelClasses();
     require_once $storagePath . 'bases/BaseProduct.php';
     require_once $storagePath . 'bases/BaseBrand.php';
     require_once $storagePath . 'classes/Product.php';
     require_once $storagePath . 'classes/Brand.php';
     ModelOperator::getAbilityInstanceForModel('Brand', 'Translate')->cleanup();
     $mo->updateDBForAllModels();
 }
Exemplo n.º 10
0
 public function testBasic()
 {
     $mo = ModelOperator::getInstance(self::$_storagePath);
     $this->assertEmpty($mo->getModelStructure('User'), 'Empty structure returns array()');
     $mo->generateBasicStructure('User');
     $data = $mo->getModelStructure('User');
     $this->assertEquals(array('table' => 'users', 'columns' => array('id' => array('type' => 'int(11) unsigned', 'auto_increment' => true), 'title' => array('type' => 'varchar(255)')), 'indexes' => array('primary' => array('columns' => array('id')))), $data, 'Basic structure generator is ok');
     $mo->saveModelStructure('User');
     $this->assertFileExists(self::$_storagePath . 'structure/User.yml', 'Save model structure is ok');
     $mo->generateModelClass('User');
     require_once __DIR__ . '/storage/bases/BaseUser.php';
     require_once __DIR__ . '/storage/classes/User.php';
     $this->assertFileExists(self::$_storagePath . 'bases/BaseUser.php', 'BaseModel generated');
     $this->assertFileExists(self::$_storagePath . 'classes/User.php', 'Model generated');
     $this->assertTrue(class_exists('\\User'), 'Generated model class is available');
     QC::executeSQL('DROP TABLE IF EXISTS users');
     $mo->updateDBForModel('User');
     $data = DBOperator::getInstance()->getTableStructure('users');
     $this->assertNotEmpty($data, 'Table generation is ok');
 }
Exemplo n.º 11
0
 public function onKernelReady(BaseEvent $event)
 {
     $this->onEnvironmentUpdate($event);
     if ($webRoot = DC::getProjectConfig('webRoot')) {
         DC::getEnvironment()->setWebRoot($webRoot);
     }
     $databaseConfig = DC::getDatabaseConfig();
     $request = DC::getRouter()->getCurrentRequest();
     if ($profiles = $databaseConfig->get('profiles')) {
         foreach ($profiles as $profileName => $profileInfo) {
             DatabaseService::configProfile($profileInfo, $profileName);
         }
         if (empty($request) || $request && !$request->isConsoleRequest()) {
             ModelOperator::getInstance(DC::getEnvironment()->getUserClassesRoot() . 'db/');
             if ($databaseConfig->get('autoUpdateAll')) {
                 ModelOperator::getInstance()->generateAllModelClasses()->updateDBForAllModels();
             }
         }
     }
 }
Exemplo n.º 12
0
    protected static function putTestContent()
    {
        QC::executeSQL('DROP TABLE IF EXISTS products');
        QC::executeSQL('DROP TABLE IF EXISTS categories');
        $storagePath = __DIR__ . '/storage/';
        $mo = ModelOperator::getInstance($storagePath);
        $mo->generateBasicStructure('Product');
        $mo->generateBasicStructure('Category');
        ModelStructure::getInstanceForModel('Product')->addColumn('id_category', array('type' => 'int(11) unsigned'))->addRelation('category')->addRelation('category_title', array('table' => 'categories', 'fields' => array('title'), 'use' => 'title', 'type' => 'many_to_one', 'local_field' => 'id_category'))->saveStructure();
        ModelStructure::getInstanceForModel('Category')->addRelation('products')->saveStructure();
        $mo->generateAllModelClasses();
        require_once $storagePath . 'bases/BaseProduct.php';
        require_once $storagePath . 'bases/BaseCategory.php';
        require_once $storagePath . 'classes/Product.php';
        require_once $storagePath . 'classes/Category.php';
        $mo->updateDBForAllModels();
        QC::create('products')->insert(array('title' => 'Macbook Air', 'id_category' => 1))->execute();
        QC::create('products')->insert(array('title' => 'Macbook Pro', 'id_category' => 1))->execute();
        QC::create('products')->insert(array('title' => 'iMac 27"', 'id_category' => 2))->execute();
        QC::create('categories')->insert(array('title' => 'Notebooks'))->execute();
        QC::create('categories')->insert(array('title' => 'Computers'))->execute();
        $categoriesCollectionText = <<<TEXT
<?php
use Solve\\Database\\Models\\ModelCollection;

class CategoriesCollection extends ModelCollection {

    public function getProductsCount() {
        return 12;
    }

}
TEXT;
        file_put_contents($storagePath . 'classes/CategoriesCollection.php', $categoriesCollectionText);
        require_once $storagePath . 'classes/CategoriesCollection.php';
    }
Exemplo n.º 13
0
 public function saveStructure()
 {
     ModelOperator::getInstance()->setStructureForModel($this->_modelName, $this->_data->getArray());
     ModelOperator::getInstance()->saveModelStructure($this->_modelName);
     $this->setupAddedAbilities();
     ModelOperator::getInstance()->setStructureForModel($this->_modelName, $this->_data->getArray());
     ModelOperator::getInstance()->saveModelStructure($this->_modelName);
     return $this;
 }