Пример #1
0
 /**
  * Get index DataTable
  *
  * @param Query $query CakePHP query
  *
  * @return Table
  */
 protected function getIndexDataTable(Query $query)
 {
     $table = new Table('pages');
     $titleCol = new Column();
     $titleCol->setTitle('Title')->setData('Pages.title');
     $authorCol = new Column();
     $authorCol->setTitle('Author')->setData('Users.username')->setFormatter(function ($username, Page $page) {
         return $this->createView()->Html->link($username, ['author' => $page->getUserId()]);
     });
     $commentsCol = new Column();
     $commentsCol->setTitle('Comments')->setData('Pages.comment_count')->isSearchable(false);
     $dateCol = new Column();
     $dateCol->setTitle('Date')->setData('Pages.created_at')->isSearchable(false)->setFormatter(function (Time $cell) {
         return $cell->nice();
     });
     $action = new Column\Action();
     $action->setManager(function (Column\ActionBuilder $action, Page $page) {
         $action->addAction('view', __d('pages', 'View'), Router::url(['prefix' => false, 'controller' => 'Pages', 'action' => 'view', $page->getId()]), ['title' => __d('pages', 'View “%d”', $page->getTitle()), 'rel' => 'permalink']);
         $action->addAction('edit', __d('pages', 'Edit'), Router::url(['controller' => 'Pages', 'action' => 'edit', $page->getId()]), ['title' => __d('pages', 'Edit this item')]);
         $action->addAction('delete', __d('pages', 'Delete'), Router::url(['action' => 'delete', $page->getId()]), ['title' => __d('pages', 'Delete this item')]);
     })->setTitle('Action');
     $table->addColumn($titleCol)->addColumn($authorCol)->addColumn($commentsCol)->addColumn($dateCol)->addColumn($action);
     $table->setDataSource(new CakePHP($query, $this->request->here()));
     return $table;
 }
Пример #2
0
 /**
  * Get the data for for a column from the given data object row
  *
  * This method will first try calling the get method on the current
  * DataTable object. If the method doesn't exist, then it will default
  * to calling the method on the object for the current row
  *
  * @param object $object
  * @param Column $column
  * @return mixed
  */
 protected function getDataForColumn($object, Column $column)
 {
     $accessor = PropertyAccess::createPropertyAccessor();
     $property = $column->getName();
     if (is_array($object)) {
         $property = "[{$property}]";
     }
     return $accessor->getValue($object, $property);
 }
Пример #3
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;
    }
Пример #4
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);
    }
Пример #5
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;
    }
Пример #6
0
 public function column($column)
 {
     return \Datatable\Column::make($column['id'])->orderable($column['orderable'] == 'yes')->header(\Datatable\Header::make()->caption($column['header']['caption'])->style($column['header']['style']))->class($column['class'])->visible($column['visible'] == 'yes');
 }
Пример #7
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;
    }
Пример #8
0
 /**
  * Add column to table
  *
  * @param \DataTable\Column $column Column object
  *
  * @return Table
  */
 public function addColumn(Column $column)
 {
     $this->columns[] = $column;
     if ($column instanceof ColumnInterface) {
         $column->initialize($this);
     }
     return $this;
 }