1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
36:
37: 38: 39:
40: abstract class GridViewWidget extends SortableWidget {
41:
42: public $sortableWidgetJSClass = 'GridViewWidget';
43:
44: protected $compactResultsPerPage = false;
45:
46: private static $_JSONPropertiesStructure;
47:
48: 49: 50:
51: protected $_dataProvider;
52:
53: 54: 55:
56: private $_gridViewConfig;
57:
58: abstract protected function getDataProvider ();
59:
60: public function getPackages () {
61: if (!isset ($this->_packages)) {
62: $this->_packages = array_merge (parent::getPackages (), array (
63: 'GridViewWidgetJS' => array(
64: 'baseUrl' => Yii::app()->request->baseUrl,
65: 'js' => array(
66: 'js/sortableWidgets/GridViewWidget.js',
67: ),
68: 'depends' => array ('SortableWidgetJS')
69: ),
70: 'GridViewWidgetCSS' => array(
71: 'baseUrl' => Yii::app()->theme->baseUrl,
72: 'css' => array(
73: 'css/components/sortableWidget/views/gridViewWidget.css',
74: )
75: ),
76: ));
77: }
78: return $this->_packages;
79: }
80:
81: public static function getJSONPropertiesStructure () {
82: if (!isset (self::$_JSONPropertiesStructure)) {
83: self::$_JSONPropertiesStructure = array_merge (
84: parent::getJSONPropertiesStructure (),
85: array (
86: 'resultsPerPage' => 10,
87: 'showHeader' => false,
88: 'hideFullHeader' => false,
89: )
90: );
91: }
92: return self::$_JSONPropertiesStructure;
93: }
94:
95: protected function getJSSortableWidgetParams () {
96: if (!isset ($this->_JSSortableWidgetParams)) {
97: $this->_JSSortableWidgetParams = array_merge (array(
98: 'showHeader' => CPropertyValue::ensureBoolean (
99: $this->getWidgetProperty('showHeader')),
100: 'compactResultsPerPage' => $this->compactResultsPerPage,
101: ), parent::getJSSortableWidgetParams ()
102: );
103: }
104: return $this->_JSSortableWidgetParams;
105: }
106:
107: 108: 109:
110: public function getViewFileParams () {
111: if (!isset ($this->_viewFileParams)) {
112: $this->_viewFileParams = array_merge (
113: parent::getViewFileParams (),
114: array (
115: 'gridViewConfig' => $this->gridViewConfig,
116: )
117: );
118: }
119: return $this->_viewFileParams;
120: }
121:
122: public function getAjaxUpdateRouteAndParams () {
123: $updateRoute = '/profile/view';
124: $updateParams = array (
125: 'widgetClass' => get_called_class (),
126: 'widgetType' => $this->widgetType,
127: 'id' => $this->profile->id,
128: );
129: return array ($updateRoute, $updateParams);
130: }
131:
132: 133: 134:
135: public function getGridViewConfig () {
136: if (!isset ($this->_gridViewConfig)) {
137: list ($updateRoute, $updateParams) = $this->getAjaxUpdateRouteAndParams ();
138: $this->_gridViewConfig = array (
139: 'ajaxUrl' => Yii::app()->controller->createUrl ($updateRoute, $updateParams),
140: 'showHeader' => CPropertyValue::ensureBoolean (
141: $this->getWidgetProperty('showHeader')),
142: 'hideFullHeader' => CPropertyValue::ensureBoolean (
143: $this->getWidgetProperty('hideFullHeader')),
144: );
145: }
146: return $this->_gridViewConfig;
147: }
148:
149:
150: protected function () {
151: return
152: '<li class="hide-settings">'.
153: X2Html::fa('fa-toggle-down').
154: Yii::t('profile', 'Toggle Settings Bar').
155: '</li>'.
156: ($this->compactResultsPerPage ?
157: '<li class="results-per-page-container">
158: </li>' : '').
159: parent::getSettingsMenuContentEntries ();
160: }
161:
162: 163: 164:
165: protected function getTranslations () {
166: if (!isset ($this->_translations )) {
167: $this->_translations = array_merge (
168: parent::getTranslations (),
169: array (
170: 'Grid Settings' => Yii::t('profile', 'Widget Grid Settings'),
171: 'Cancel' => Yii::t('profile', 'Cancel'),
172: 'Save' => Yii::t('profile', 'Save'),
173: ));
174: }
175: return $this->_translations;
176: }
177:
178: public function init ($skipGridViewInit = false) {
179: parent::init ();
180: if (!$skipGridViewInit) {
181: list ($updateRoute, $updateParams) = $this->getAjaxUpdateRouteAndParams ();
182: $this->dataProvider->pagination->route = $updateRoute;
183: $this->dataProvider->pagination->params = $updateParams;
184: $this->dataProvider->sort->route = $updateRoute;
185: $this->dataProvider->sort->params = $updateParams;
186: }
187: }
188:
189:
190: }
191: ?>
192: