1: <?php
2: /*****************************************************************************************
3: * X2Engine Open Source Edition is a customer relationship management program developed by
4: * X2Engine, Inc. Copyright (C) 2011-2016 X2Engine Inc.
5: *
6: * This program is free software; you can redistribute it and/or modify it under
7: * the terms of the GNU Affero General Public License version 3 as published by the
8: * Free Software Foundation with the addition of the following permission added
9: * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10: * IN WHICH THE COPYRIGHT IS OWNED BY X2ENGINE, X2ENGINE DISCLAIMS THE WARRANTY
11: * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12: *
13: * This program is distributed in the hope that it will be useful, but WITHOUT
14: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15: * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
16: * details.
17: *
18: * You should have received a copy of the GNU Affero General Public License along with
19: * this program; if not, see http://www.gnu.org/licenses or write to the Free
20: * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21: * 02110-1301 USA.
22: *
23: * You can contact X2Engine, Inc. P.O. Box 66752, Scotts Valley,
24: * California 95067, USA. or at email address contact@x2engine.com.
25: *
26: * The interactive user interfaces in modified source and object code versions
27: * of this program must display Appropriate Legal Notices, as required under
28: * Section 5 of the GNU Affero General Public License version 3.
29: *
30: * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31: * these Appropriate Legal Notices must retain the display of the "Powered by
32: * X2Engine" logo. If the display of the logo is not reasonably feasible for
33: * technical reasons, the Appropriate Legal Notices must display the words
34: * "Powered by X2Engine".
35: *****************************************************************************************/
36:
37: class X2CheckBoxColumn extends CCheckBoxColumn {
38:
39: /**
40: * @var array $headerHtmlOptions
41: */
42: public $headerHtmlOptions = array ();
43: public $headerCheckBoxHtmlOptions = array ();
44:
45: public $width;
46:
47: public function init () {
48: // allows width to be set for column using width property
49: if ($this->width) {
50: $this->headerHtmlOptions['style'] = isset ($this->headerHtmlOptions['style']) ?
51: $this->headerHtmlOptions['style'] : '';
52: $this->htmlOptions['style'] = isset ($this->htmlOptions['style']) ?
53: $this->htmlOptions['style'] : '';
54: $this->headerHtmlOptions['style'] .= 'width: '.$this->width.';';
55: $this->htmlOptions['style'] .= 'width: '.$this->width.';';
56: }
57: return parent::init ();
58: }
59:
60: /**
61: * Renders the header cell content.
62: * This method will render a checkbox in the header when {@link selectableRows} is greater than 1
63: * or in case {@link selectableRows} is null when {@link CGridView::selectableRows} is greater than 1.
64: * This method is Copyright (c) 2008-2014 by Yii Software LLC
65: * http://www.yiiframework.com/license/
66: */
67: public function renderHeaderCellContent()
68: {
69: if(trim($this->headerTemplate)==='')
70: {
71: echo $this->grid->blankDisplay;
72: return;
73: }
74:
75: $item = '';
76: if($this->selectableRows===null && $this->grid->selectableRows>1)
77: /* x2modstart */
78: $item = CHtml::checkBox(
79: $this->id.'_all',false,
80: array_merge (
81: array('class'=>'select-on-check-all'), $this->headerCheckBoxHtmlOptions));
82: /* x2modend */
83: elseif($this->selectableRows>1)
84: /* x2modstart */
85: $item = CHtml::checkBox(
86: $this->id.'_all',false, $this->headerCheckBoxHtmlOptions);
87: /* x2modend */
88: else
89: {
90: ob_start();
91: parent::renderHeaderCellContent();
92: $item = ob_get_clean();
93: }
94:
95: echo strtr($this->headerTemplate,array(
96: '{item}'=>$item,
97: ));
98: }
99:
100: /**
101: * Renders the data cell content.
102: * This method renders a checkbox in the data cell.
103: * @param integer $row the row number (zero-based)
104: * @param mixed $data the data associated with the row
105: * This method is Copyright (c) 2008-2014 by Yii Software LLC
106: * http://www.yiiframework.com/license/
107: */
108: protected function renderDataCellContent($row,$data)
109: {
110: if($this->value!==null)
111: $value=$this->evaluateExpression($this->value,array('data'=>$data,'row'=>$row));
112: elseif($this->name!==null)
113: $value=CHtml::value($data,$this->name);
114: else
115: $value=$this->grid->dataProvider->keys[$row];
116:
117: $checked = false;
118: if($this->checked!==null)
119: $checked=$this->evaluateExpression($this->checked,array('data'=>$data,'row'=>$row));
120:
121: $options=$this->checkBoxHtmlOptions;
122: if($this->disabled!==null)
123: $options['disabled']=$this->evaluateExpression($this->disabled,array('data'=>$data,'row'=>$row));
124:
125: $name=$options['name'];
126: unset($options['name']);
127: $options['value']=$value;
128: /* x2modstart */
129: // made id customizable through interface
130: if (isset ($options['id'])) {
131: $options['id'] = $this->evaluateExpression (
132: $options['id'], array ('data' => $data, 'row' => $row));
133: }
134: if (!isset ($options['id']))
135: /* x2modend */
136: $options['id']=$this->id.'_'.$row;
137: echo CHtml::checkBox($name,$checked,$options);
138: }
139: }
140:
141: ?>
142: