PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/admincrud/extensions/bootstrap/widgets/TbJsonCheckBoxColumn.php

https://github.com/max-rautkin/yii-admincrud
PHP | 120 lines | 74 code | 10 blank | 36 comment | 15 complexity | dce5dab375f191b4f69f6bdd83c08599 MD5 | raw file
Possible License(s): LGPL-2.1, BSD-3-Clause
  1. <?php
  2. /**
  3. * TbJsonCheckBoxColumn class
  4. * Works in conjunction with TbJsonGridView. Renders HTML or returns JSON containing checkbox
  5. * according to the request to the Grid.
  6. *
  7. * @author: Mikhail Kuklin <mikhail@clevertech.biz>
  8. * @copyright Copyright &copy; Clevertech 2012-
  9. * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
  10. * @package YiiBooster bootstrap.widgets
  11. */
  12. /**
  13. * @property TbJsonGridView $grid
  14. */
  15. class TbJsonCheckBoxColumn extends CCheckBoxColumn
  16. {
  17. /**
  18. * Renders the header cell.
  19. */
  20. public function renderHeaderCell()
  21. {
  22. if ($this->grid->json) {
  23. $this->headerHtmlOptions['id'] = $this->id;
  24. if ($this->grid->json) {
  25. return CMap::mergeArray(
  26. $this->headerHtmlOptions,
  27. array('content' => $this->renderHeaderCellContent())
  28. );
  29. }
  30. }
  31. parent::renderHeaderCell();
  32. }
  33. /**
  34. * Renders the header cell content.
  35. * This method will render a checkbox in the header when {@link selectableRows} is greater than 1
  36. * or in case {@link selectableRows} is null when {@link CGridView::selectableRows} is greater than 1.
  37. */
  38. protected function renderHeaderCellContent()
  39. {
  40. if ($this->grid->json) {
  41. if (trim($this->headerTemplate) === '') {
  42. return $this->grid->blankDisplay;
  43. }
  44. if ($this->selectableRows === null && $this->grid->selectableRows > 1) {
  45. $item = CHtml::checkBox($this->id . '_all', false, array('class' => 'select-on-check-all'));
  46. } else if ($this->selectableRows > 1) {
  47. $item = CHtml::checkBox($this->id . '_all', false);
  48. } else {
  49. ob_start();
  50. parent::renderHeaderCellContent();
  51. $item = ob_get_clean();
  52. }
  53. return strtr(
  54. $this->headerTemplate,
  55. array(
  56. '{item}' => $item,
  57. )
  58. );
  59. }
  60. parent::renderHeaderCellContent();
  61. }
  62. /**
  63. * Renders|returns the data cell.
  64. *
  65. * @param int $row
  66. *
  67. * @return array|void
  68. */
  69. public function renderDataCell($row)
  70. {
  71. $data = $this->grid->dataProvider->data[$row];
  72. $options = $this->htmlOptions;
  73. if ($this->cssClassExpression !== null) {
  74. $class = $this->evaluateExpression($this->cssClassExpression, array('row' => $row, 'data' => $data));
  75. if (!empty($class)) {
  76. if (isset($options['class'])) {
  77. $options['class'] .= ' ' . $class;
  78. } else {
  79. $options['class'] = $class;
  80. }
  81. }
  82. }
  83. if ($this->grid->json) {
  84. return CMap::mergeArray(
  85. $options,
  86. array('content' => $this->renderDataCellContent($row, $data))
  87. );
  88. }
  89. parent::renderDataCell($row);
  90. }
  91. /**
  92. * Renders|returns the data cell content
  93. *
  94. * @param int $row
  95. * @param mixed $data
  96. *
  97. * @return array|void
  98. */
  99. protected function renderDataCellContent($row, $data)
  100. {
  101. ob_start();
  102. parent::renderDataCellContent($row, $data);
  103. $html = ob_get_contents();
  104. ob_end_clean();
  105. if ($this->grid->json) {
  106. return $html;
  107. }
  108. echo $html;
  109. }
  110. }