/** * @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(); }
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); }
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'; } }); });
/** */ 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'])); }
/** * @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); }
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; }