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: Yii::import ('application.components.sortableWidget.ProfileGridViewWidget');
38:
39: /**
40: * @package application.components
41: */
42: class NewWebLeadsGridViewProfileWidget extends ProfileGridViewWidget {
43:
44: public $canBeDeleted = true;
45:
46: public $defaultTitle = 'New Web Leads';
47:
48: public $relabelingEnabled = true;
49:
50: public $template = '<div class="submenu-title-bar widget-title-bar">{widgetLabel}{closeButton}{minimizeButton}{settingsMenu}</div>{widgetContents}';
51:
52: private static $_JSONPropertiesStructure;
53:
54: protected $_viewFileParams;
55:
56: /**
57: * @var array the config array passed to widget ()
58: */
59: private $_gridViewConfig;
60:
61: public function init ($skipGridViewInit = false) {
62: parent::init ($skipGridViewInit);
63:
64: // set default sort order if this widget is new
65: $gridId = $this->getWidgetKey ();
66: $isNew = $this->getWidgetProperty ('new');
67: if ($isNew) {
68: $this->asa ('GridViewDbSettingsBehavior')->uid = $gridId;
69: $this->asa ('GridViewDbSettingsBehavior')->saveSetting ('sort', 'createDate.desc');
70: // We're about to modify the profile again in setWidgetProperty. This prevents change
71: // made in saveSetting from being wiped out
72: $this->profile->refresh ();
73: $this->setWidgetProperty ('new', 0);
74: }
75: }
76:
77: public function behaviors () {
78: return array_merge (parent::behaviors (), array (
79: 'GridViewDbSettingsBehavior' => 'GridViewDbSettingsBehavior',
80: ));
81: }
82:
83: protected function getModel () {
84: if (!isset ($this->_model)) {
85: $this->_model = new Contacts ('search',
86: $this->widgetKey, $this->getWidgetProperty ('dbPersistentGridSettings'));
87: $this->afterGetModel ();
88: }
89: return $this->_model;
90: }
91:
92: public static function getJSONPropertiesStructure () {
93: if (!isset (self::$_JSONPropertiesStructure)) {
94: self::$_JSONPropertiesStructure = array_merge (
95: parent::getJSONPropertiesStructure (),
96: array (
97: 'label' => 'New Web Leads',
98: 'dbPersistentGridSettings' => 1,
99: 'hidden' => 0,
100: 'new' => 1
101: )
102: );
103: }
104: return self::$_JSONPropertiesStructure;
105: }
106:
107: public function getDataProvider () {
108: if (!isset ($this->_dataProvider)) {
109: $criteria = new CDbCriteria;
110: $criteria->distinct = true;
111: $criteria->join = "
112: JOIN x2_events ON x2_events.associationType='Contacts' AND
113: x2_events.associationId=t.id
114: ";
115: $resultsPerPage = self::getJSONProperty (
116: $this->profile, 'resultsPerPage', $this->widgetType, $this->widgetUID);
117: $this->_dataProvider = $this->model->searchAll ($resultsPerPage, $criteria);
118: }
119: return $this->_dataProvider;
120: }
121:
122: /**
123: * @return array the config array passed to widget ()
124: */
125: public function getGridViewConfig () {
126: if (!isset ($this->_gridViewConfig)) {
127: $this->_gridViewConfig = array_merge (
128: parent::getGridViewConfig (),
129: array (
130: 'enableQtips' => true,
131: 'qtipManager' => array (
132: 'X2GridViewQtipManager',
133: 'loadingText'=> addslashes(Yii::t('app','loading...')),
134: 'qtipSelector' => ".contact-name"
135: ),
136: 'moduleName' => 'Contacts',
137: 'defaultGvSettings'=>array(
138: 'gvCheckbox' => 30,
139: 'name' => 125,
140: 'email' => 165,
141: 'leadSource' => 83,
142: ),
143: 'specialColumns'=>array(
144: 'name'=>array(
145: 'name'=>'name',
146: 'header'=>Yii::t('contacts','Name'),
147: 'value'=>'$data->link',
148: 'type'=>'raw',
149: ),
150: ),
151: 'massActions'=>array(
152: 'MassAddToList', 'NewListFromSelection',
153: ),
154: 'enableTags'=>true,
155: )
156: );
157: }
158: return $this->_gridViewConfig;
159: }
160:
161: }
162: ?>
163: