예제 #1
0
 /**
  * @depends testGetOtherModel
  */
 public function testSetOtherModel()
 {
     $m1 = Blueprint::make('Model1');
     $m2 = Blueprint::make('Model2');
     $m1->Model2 = $m2;
     $this->assertEquals($m2->id, $m1->model2_id);
     $this->assertEquals($m2, $m1->Model2());
     $m1->commit();
 }
예제 #2
0
 public function testDefaultOrder()
 {
     $key = "ordertest";
     $m1 = Blueprint::make('Model1', ['int1' => 1, 'str1' => $key]);
     $m2 = Blueprint::make('Model1', ['int1' => 2, 'str1' => $key]);
     Model1Ordered::$order = "int1";
     $selection = Model1Ordered::selection(['str1' => $key]);
     $this->assertEquals($m1->id, $selection[0]->id);
     $this->assertEquals($m2->id, $selection[1]->id);
     Model1Ordered::$order = "int1:desc";
     $selection = Model1Ordered::selection(['str1' => $key]);
     $this->assertEquals($m2->id, $selection[0]->id);
     $this->assertEquals($m1->id, $selection[1]->id);
 }
예제 #3
0
Blueprint::make('Marketplace', function ($blueprint) {
    $blueprint->setController(MarketplaceController::class);
    $blueprint->disablePluralForm();
    $blueprint->setIcon('cloud');
    $blueprint->setToolbarOrders(['section' => ['getHome.search', 'postInstall', 'getInstallProgress', 'getInstalled'], 'item' => ['getDetails', 'postRequire'], 'provider' => ['postToggleProvider']]);
    $blueprint->makeAction(['name' => 'getHome', 'pattern' => '/']);
    $blueprint->makeToolbarItem(['action' => 'getHome', 'label' => 'Marketplace', 'icon' => 'shopping-cart']);
    $blueprint->makeToolbarItem(['action' => 'getHome', 'identifier' => 'getHome.search', 'fields' => function () {
        $query = new FieldMetadata('q', 'search', true);
        $query->label = 'Query';
        $query->placeholder = 'Search for Packages';
        $query->attributes['results'] = 5;
        return [$query];
    }], new FormToolbarItemFactory());
    $blueprint->makeAction(['name' => 'postInstall', 'pattern' => 'install', 'method' => 'POST']);
    $blueprint->makeToolbarItem(['action' => 'postInstall', 'label' => 'Run Installer', 'icon' => 'download', 'color' => 'green', 'dialog' => new Dialog(Lang::get('oxygen/mod-marketplace::dialogs.runInstaller')), 'shouldRenderCallback' => function (ActionToolbarItem $item, array $arguments) {
        return $item->shouldRenderBasic($arguments) && !Marketplace::getInstaller()->isInstalling();
    }]);
    $blueprint->makeAction(['name' => 'getInstallProgress', 'pattern' => 'install/progress']);
    $blueprint->makeToolbarItem(['action' => 'getInstallProgress', 'label' => 'Install Progress', 'icon' => 'info-circle', 'color' => 'white', 'shouldRenderCallback' => function (ActionToolbarItem $item, array $arguments) {
        return $item->shouldRenderBasic($arguments) && Marketplace::getInstaller()->isInstalling();
    }]);
    $blueprint->makeAction(['name' => 'deleteInstallProgress', 'pattern' => 'install/progress', 'method' => 'DELETE']);
    $blueprint->makeToolbarItem(['action' => 'deleteInstallProgress', 'label' => 'Clear Install Log', 'icon' => 'trash-o', 'color' => 'red', 'shouldRenderCallback' => function ($item, $arguments) {
        return $item->shouldRenderBasic($arguments) && Marketplace::getInstaller()->hasInstallProgress();
    }]);
    $blueprint->makeAction(['name' => 'postInstallProgress', 'pattern' => 'install/progress', 'method' => 'POST']);
    $blueprint->makeAction(['name' => 'getDetails', 'pattern' => '{vendor}/{package}', 'routeParametersCallback' => function ($action, array $options) {
        return [$options['vendor'], $options['package']];
    }]);
    $blueprint->makeToolbarItem(['action' => 'getDetails', 'label' => 'Show Details', 'icon' => 'info-circle']);
    $blueprint->makeAction(['name' => 'postRequire', 'pattern' => '{vendor}/{package}/require/{version?}', 'method' => 'POST', 'routeParametersCallback' => function ($action, array $options) {
        return [$options['vendor'], $options['package']];
    }]);
    $blueprint->makeToolbarItem(['action' => 'postRequire', 'label' => 'Require', 'icon' => 'plus', 'color' => 'green'])->addDynamicCallback(function ($item, $arguments) {
        $installer = Marketplace::getInstaller();
        $package = $arguments['vendor'] . '/' . $arguments['package'];
        if ($installer->isRequired($package)) {
            $item->color = 'red';
            $item->icon = 'trash-o';
            $item->label = 'Remove';
        }
    });
    $blueprint->makeAction(['name' => 'getInstalled', 'pattern' => 'installed']);
    $blueprint->makeToolbarItem(['action' => 'getInstalled', 'label' => 'Installed Packages', 'icon' => 'list', 'color' => 'white']);
    $blueprint->makeAction(['name' => 'postToggleProvider', 'pattern' => 'provider/toggle/{class}', 'method' => 'POST', 'routeParametersCallback' => function ($action, array $options) {
        return [$options['provider']];
    }]);
    $blueprint->makeToolbarItem(['action' => 'postToggleProvider', 'label' => 'Enable', 'icon' => 'check', 'color' => 'white', 'shouldRenderCallback' => function (ActionToolbarItem $item, array $arguments) {
        return $item->shouldRenderBasic($arguments) && !Marketplace::getProviderRepository()->isCore($arguments['provider']);
    }])->addDynamicCallback(function ($item, $arguments) {
        $repository = Marketplace::getProviderRepository();
        if ($repository->isEnabled($arguments['provider'])) {
            $item->icon = 'power-off';
            $item->label = 'Disable';
        }
    });
});
예제 #4
0
 /**
  */
 public function testSum()
 {
     Blueprint::make('Model1', ['int1' => 100, 'str1' => 'testSum']);
     Blueprint::make('Model1', ['int1' => 10, 'str1' => 'testSum']);
     $this->assertEquals(220, Model1::sum(['int1', '+', 'int1'], ['str1' => 'testSum']));
 }
예제 #5
0
 /**
  * @depends testSelection
  */
 public function testMultipleOr()
 {
     $date = date('Y-m-d H:i:s');
     $models = [Blueprint::make('Model1', ['str1' => "or_test_multiple", 'timestamp1' => $date]), Blueprint::make('Model1', ['int1' => 5715, 'timestamp1' => $date])];
     $res = Model1::selection(["@or" => ['str1' => "or_test_multiple", 'int1' => 5715], "@or:banana" => ["timestamp1" => $date]]);
     $this->assertCount(2, $res);
 }
예제 #6
0
 private function create($set, $name, $commit)
 {
     if (!isset($this->data[$name])) {
         throw new BlueprintException("Unknow blueprint '{$name}' for {$this->class_name}");
     }
     $data = array_merge($this->data[$name], $set);
     $attr = array('sn' => Blueprint::$sn++);
     $class_name = $this->class_name;
     $obj = new $class_name();
     foreach ($data as $key => $value) {
         if (is_string($value)) {
             $obj->{$key} = preg_replace_callback("/#\\{(.+?)\\}/", function ($matches) use($attr, $data) {
                 $k = $matches[1];
                 $replace = false;
                 if (isset($attr[$k])) {
                     $replace = $attr[$k];
                 } else {
                     $replace = $obj->{$k};
                 }
                 return $replace;
             }, $value);
         } else {
             if (is_array($value)) {
                 $blueprint = "default";
                 $class = $key;
                 $values = array();
                 if (isset($value['blueprint'])) {
                     $blueprint = $value['blueprint'];
                     unset($value['blueprint']);
                 }
                 if (isset($value['class'])) {
                     $class = $value['class'];
                     unset($value['class']);
                 }
                 if (isset($value['values'])) {
                     $values = $value['values'];
                     unset($value['values']);
                 }
                 $values = array_merge($values, $value);
                 $obj->{$key} = Blueprint::make($class, $blueprint, $values, true);
             } else {
                 $obj->{$key} = $value;
             }
         }
     }
     if ($commit) {
         $obj->commit();
     }
     return $obj;
 }