コード例 #1
0
ファイル: IndexAction.php プロジェクト: radphp/admin-bundle
 /**
  * {@inheritdoc}
  */
 public function __invoke()
 {
     TwigHelper::addCss('file:///Admin/vendor/bootstrap/dist/css/bootstrap.min.css');
     TwigHelper::addCss('file:///Admin/vendor/font-awesome/css/font-awesome.min.css');
     TwigHelper::addCss('file:////code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css');
     TwigHelper::addCss('file:///Admin/css/AdminLTE.min.css', 10);
     TwigHelper::addCss('file:///Admin/css/skins/skin-blue.min.css', 20);
     TwigHelper::addJs('file:////oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js');
     TwigHelper::addJs('file:////oss.maxcdn.com/respond/1.4.2/respond.min.js', 10);
     TwigHelper::addJs('file:///Admin/vendor/jquery/dist/jquery.min.js', 20);
     TwigHelper::addJs('file:///Admin/vendor/bootstrap/dist/js/bootstrap.min.js', 30);
     TwigHelper::addJs('file:///Admin/js/app.min.js', 40);
     $template = 'dashboard';
     $args = func_get_args();
     TwigHelper::addMasterTwig('@Admin/master.twig');
     /** @var \Twig_Environment $twig */
     $twig = $this->getContainer()->get('twig');
     $twig->addGlobal('menu', Menu::generate());
     if (!empty($args) && $args[0] == 'bundles') {
         $this->getRouter()->setPrefix(['admin', 'bundles']);
         array_shift($args);
         $args = implode('/', $args);
         $response = $this->forward($args, $this->getRequest()->getMethod());
         $this->getResponder()->setData('response', $response);
     } else {
         if ($args) {
             $template = implode('/', $args);
         }
     }
     $this->getResponder()->setData('template', $template);
 }
コード例 #2
0
    /**
     * Get DataTable
     *
     * @return Table
     * @throws \DataTable\Exception
     */
    protected function getDataTable()
    {
        TwigHelper::addCss('file:///Admin/vendor/datatables/media/css/jquery.dataTables.min.css', 100);
        TwigHelper::addJs('file:///Admin/vendor/jquery/dist/jquery.min.js', 20);
        TwigHelper::addJs('file:///Admin/vendor/datatables/media/js/jquery.dataTables.min.js', 100);
        TwigHelper::addJs('
        function deleteUser(id) {
    if (confirm(\'Delete this user?\')) {
        $.ajax({
            type: "DELETE",
            url: \'users/\' + id,
            success: function(affectedRows) {
                if (affectedRows > 0) window.location = \'users\';
            }
        });
    }
}', 110);
        $table = new Table();
        $col = new Column();
        $col->setTitle('Username')->setData('Users.username');
        $table->addColumn($col);
        $col = new Column();
        $col->setTitle('Email')->setData('Users.email');
        $table->addColumn($col);
        $col = new Column();
        $col->setTitle('Status')->setData('Users.status')->isSearchable(false)->setFormatter(function ($status, User $user) {
            $statuses = [0 => 'Inactive', 1 => 'Active', 2 => 'Banned'];
            return $statuses[$status];
        });
        $table->addColumn($col);
        $router = $this->getRouter();
        $col = new Column\Action();
        $col->setManager(function (Column\ActionBuilder $action, User $user) use($router) {
            /* TODO Admin RBAC */
            if (true) {
                $action->addAction('edit', 'Edit', $router->generateUrl(['users', $user->get('id')]));
                $action->addAction('delete', 'Delete', 'javascript:deleteUser("' . $user->get('id') . '");');
            }
        })->setTitle('Actions');
        $table->addColumn($col);
        $table->setDataSource(new CakePHP($this->getUsers(), $this->getRequest()->getRequestTarget()));
        return $table;
    }
コード例 #3
0
    private function generateDatatable()
    {
        TwigHelper::addCss('file:///Admin/vendor/datatables/media/css/jquery.dataTables.min.css', 100);
        TwigHelper::addJs('file:///Admin/vendor/jquery/dist/jquery.min.js', 20);
        TwigHelper::addJs('file:///Admin/vendor/datatables/media/js/jquery.dataTables.min.js', 100);
        TwigHelper::addJs('
        function deletePage(id) {
    if (confirm(\'Delete this user?\')) {
        $.ajax({
            type: "DELETE",
            url: \'pages/\' + id,
            success: function(affectedRows) {
                if (affectedRows > 0) window.location = \'pages\';
            }
        });
    }
}', 110);
        /** @var \Cake\ORM\Table $pagesTable */
        $pagesTable = TableRegistry::get('Pages.Pages');
        $pages = $pagesTable->find();
        $table = new Table();
        $col = new Column();
        $col->setTitle('Title')->setData('Pages.title');
        $table->addColumn($col);
        $col = new Column();
        $col->setTitle('Slug')->setData('Pages.slug');
        $table->addColumn($col);
        $router = $this->getRouter();
        $col = new Column\Action();
        $col->setManager(function (Column\ActionBuilder $action, Entity $page) use($router) {
            if (true) {
                $action->addAction('edit', 'Edit', $router->generateUrl(['pages', $page->get('slug'), 'edit']));
                $action->addAction('delete', 'Delete', 'javascript:deletePage("' . $page->get('slug') . '");');
            }
        })->setTitle('Actions');
        $table->addColumn($col);
        $table->setDataSource(new CakePHP($pages, $this->getRequest()->getRequestTarget()));
        if ($this->getRequest()->isAjax()) {
            die($table->getResponse());
        }
        $this->getResponder()->setData('table', $table->render());
        $this->getResponder()->setData('pages', $pages);
    }
コード例 #4
0
    /**
     * Get DataTable
     *
     * @return Table
     * @throws \DataTable\Exception
     */
    protected function getDataTable()
    {
        TwigHelper::addCss('file:///Admin/vendor/datatables/media/css/jquery.dataTables.min.css', 100);
        TwigHelper::addJs('file:///Admin/vendor/jquery/dist/jquery.min.js', 20);
        TwigHelper::addJs('file:///Admin/vendor/datatables/media/js/jquery.dataTables.min.js', 100);
        TwigHelper::addJs('
        function deleteRole(id) {
    if (confirm(\'Delete this role?\')) {
        $.ajax({
            type: "DELETE",
            url: \'roles/\' + id,
            success: function(affectedRows) {
                if (affectedRows > 0) window.location = \'users/roles\';
            }
        });
    }
}', 110);
        $table = new Table();
        $col = new Column();
        $col->setTitle('name')->setData('Roles.name');
        $table->addColumn($col);
        $col = new Column();
        $col->setTitle('title')->setData('Roles.title');
        $table->addColumn($col);
        $router = $this->getRouter();
        $col = new Column\Action();
        $col->setManager(function (Column\ActionBuilder $action, Role $role) use($router) {
            /* TODO Admin RBAC */
            if (true) {
                $action->addAction('edit', 'Edit', $router->generateUrl(['users', 'roles', $role->get('id')]));
                $action->addAction('delete', 'Delete', 'javascript:deleteRole("' . $role->get('id') . '");');
            }
        })->setTitle('Actions');
        $table->addColumn($col);
        $table->setDataSource(new CakePHP($this->getRoles(), $this->getRequest()->getRequestTarget()));
        return $table;
    }
コード例 #5
0
ファイル: TwigBundle.php プロジェクト: radphp/twig-bundle
 /**
  * {@inheritdoc}
  */
 public function loadService()
 {
     $this->getContainer()->setShared('twig', function () {
         $loader = new \Twig_Loader_Filesystem([]);
         $loader->addPath(SRC_DIR . "/App/Resource/template");
         foreach (Bundles::getLoaded() as $bundleName) {
             if (is_dir(SRC_DIR . "/{$bundleName}/Resource/template/")) {
                 $loader->addPath(SRC_DIR . "/{$bundleName}/Resource/template", $bundleName);
             }
         }
         $loader->addPath(ROOT_DIR . '/vendor/symfony/twig-bridge/Resources', 'TwigBridgeTemplates');
         if (Config::get('debug', false)) {
             $options = ['debug' => true, 'cache' => false];
         } else {
             $options = ['debug' => false, 'cache' => CACHE_DIR . '/twig/'];
         }
         $twig = new \Twig_Environment($loader, $options);
         if (Config::get('debug', false)) {
             $twig->addExtension(new Twig_Extension_Debug());
         }
         // add route generator function
         $twig->addFunction(new \Twig_SimpleFunction('generateUrl', function ($url = null, $withParams = true, $withLanguage = true, $incDomain = true) {
             $router = $this->getRouter();
             return $router->generateUrl($url, [Router::GEN_OPT_LANGUAGE => $withLanguage, Router::GEN_OPT_WITH_PARAMS => $withParams, Router::GEN_OPT_INC_DOMAIN => $incDomain]);
         }));
         $twig->addFunction(new \Twig_SimpleFunction('getService', function ($name, array $args = []) {
             return $this->getContainer()->get($name, $args);
         }));
         /** @var Registry $registry */
         $registry = $this->getContainer()->get('registry');
         // return css tags
         $twig->addFunction(new \Twig_SimpleFunction('getCss', function ($css = null, $priority = 0) use($registry) {
             $result = $registry->get(TwigHelper::GLOBAL_CSS, TwigHelper::TWIG_REGISTRY_SCOPE);
             if (null !== $css) {
                 $result = [['css' => $css, 'priority' => $priority]];
             }
             if (is_array($result)) {
                 foreach ($result as $row) {
                     $order[] = $row['priority'];
                 }
                 array_multisort($order, $result);
                 array_walk($result, function (&$item) {
                     $item = $item['css'];
                     // if it is direct link to file
                     if (strpos($item, 'file://') === 0) {
                         $item = substr($item, 7);
                         $item = "<link rel=\"stylesheet\" href=\"{$item}\">";
                     } else {
                         $item = "<style>\n{$item}\n</style>";
                     }
                 });
                 $result = implode("\n", $result);
             }
             return strval($result);
         }, ['is_safe' => ['html']]));
         // return js tags
         $twig->addFunction(new \Twig_SimpleFunction('getJs', function ($js = null, $priority = 0) use($registry) {
             $result = $registry->get(TwigHelper::GLOBAL_JS, TwigHelper::TWIG_REGISTRY_SCOPE);
             if (null !== $js) {
                 $result = [['js' => $js, 'priority' => $priority]];
             }
             if (is_array($result)) {
                 foreach ($result as $row) {
                     $order[] = $row['priority'];
                 }
                 array_multisort($order, $result);
                 array_walk($result, function (&$item) {
                     $item = $item['js'];
                     // if it is direct link to file
                     if (strpos($item, 'file://') === 0) {
                         $item = substr($item, 7);
                         $item = "<script src=\"{$item}\"></script>";
                     } else {
                         $item = "<script>\n{$item}\n</script>";
                     }
                 });
                 $result = implode("\n", $result);
             }
             return strval($result);
         }, ['is_safe' => ['html']]));
         $twig->addFunction(new \Twig_SimpleFunction('addCss', function ($css, $priority = 0) {
             TwigHelper::addCss($css, $priority);
         }));
         $twig->addFunction(new \Twig_SimpleFunction('addJs', function ($js, $priority = 0) {
             TwigHelper::addJs($js, $priority);
         }));
         // return master twig
         $twig->addFunction(new \Twig_SimpleFunction('getMasterTwig', function () use($registry) {
             $result = $registry->get(TwigHelper::MASTER_TWIG, TwigHelper::TWIG_REGISTRY_SCOPE);
             $item = array_pop($result);
             $registry->set(TwigHelper::MASTER_TWIG, $result, TwigHelper::TWIG_REGISTRY_SCOPE);
             return strval($item);
         }, ['is_safe' => ['html']]));
         Library\Helper::addMasterTwig('@App/master.twig');
         $renderer = new TwigRendererEngine(['@TwigBridgeTemplates/views/Form/form_div_layout.html.twig']);
         $renderer->setEnvironment($twig);
         $twig->addExtension(new FormExtension(new TwigRenderer($renderer)));
         $twig->addExtension(new TranslationExtension(new IdentityTranslator()));
         return $twig;
     });
     $this->getContainer()->setShared('form_factory', function () {
         if (class_exists('Symfony\\Component\\Validator\\Mapping\\Factory\\LazyLoadingMetadataFactory')) {
             $metadataFactory = new LazyLoadingMetadataFactory(new StaticMethodLoader());
         } else {
             $metadataFactory = new ClassMetadataFactory(new StaticMethodLoader());
         }
         $builder = Validation::createValidatorBuilder()->setConstraintValidatorFactory(new ConstraintValidatorFactory())->setTranslationDomain('validators')->setMetadataFactory($metadataFactory);
         $extensions = [new HttpFoundationExtension(), new ValidatorExtension($builder->getValidator())];
         return Forms::createFormFactoryBuilder()->addExtensions($extensions)->setResolvedTypeFactory(new ResolvedFormTypeFactory())->getFormFactory();
     });
 }
コード例 #6
0
    /**
     * Get DataTable
     *
     * @return Table
     * @throws \DataTable\Exception
     */
    protected function getDataTable()
    {
        TwigHelper::addCss('file:///Admin/vendor/datatables/media/css/jquery.dataTables.min.css', 100);
        TwigHelper::addJs('file:///Admin/vendor/datatables/media/js/jquery.dataTables.min.js', 100);
        TwigHelper::addJs('
        function deleteCategory(id) {
    if (confirm(\'Delete this category?\')) {
        $.ajax({
            type: "DELETE",
            url: \'categories/\' + id,
            success: function(affectedRows) {
                if (affectedRows > 0) window.location = \'categories\';
            }
        });
    }
}', 110);
        $table = new Table();
        $col = new Column();
        $col->setTitle('Slug')->setData('Categories.slug');
        $table->addColumn($col);
        $col = new Column();
        $col->setTitle('Title')->setData('Categories.title');
        $table->addColumn($col);
        $col = new Column();
        $col->setTitle('Scope')->setData('Categories.scope');
        $table->addColumn($col);
        $col = new Column();
        $col->setTitle('Parent')->setData('Categories.parent_id')->isSearchable(false)->setFormatter(function ($parentId, Category $category) {
            if (null === $parentId) {
                return '-';
            }
            return $category->parentCategory->get('title');
        });
        $table->addColumn($col);
        $router = $this->getRouter();
        $col = new Column\Action();
        $col->setManager(function (Column\ActionBuilder $action, Category $category) use($router) {
            /* TODO Admin RBAC */
            if (true) {
                $action->addAction('edit', 'Edit', $router->generateUrl(['categories', $category->get('id')]));
                $action->addAction('delete', 'Delete', 'javascript:deleteCategory("' . $category->get('id') . '");');
            }
        })->setTitle('Actions');
        $table->addColumn($col);
        $table->setDataSource(new CakePHP($this->getCategories(), $this->getRequest()->getRequestTarget()));
        return $table;
    }