Overview

Packages

  • application
    • commands
    • components
      • actions
      • filters
      • leftWidget
      • permissions
      • sortableWidget
      • util
      • webupdater
      • x2flow
        • actions
        • triggers
      • X2GridView
      • X2Settings
    • controllers
    • models
      • embedded
    • modules
      • accounts
        • controllers
        • models
      • actions
        • controllers
        • models
      • calendar
        • controllers
        • models
      • charts
        • models
      • contacts
        • controllers
        • models
      • docs
        • components
        • controllers
        • models
      • groups
        • controllers
        • models
      • marketing
        • components
        • controllers
        • models
      • media
        • controllers
        • models
      • mobile
        • components
      • opportunities
        • controllers
        • models
      • products
        • controllers
        • models
      • quotes
        • controllers
        • models
      • services
        • controllers
        • models
      • template
        • models
      • users
        • controllers
        • models
      • workflow
        • controllers
        • models
      • x2Leads
        • controllers
        • models
  • None
  • system
    • base
    • caching
    • console
    • db
      • ar
      • schema
    • validators
    • web
      • actions
      • auth
      • helpers
      • widgets
        • captcha
        • pagers
  • zii
    • widgets
      • grid

Classes

  • AccountsGridViewProfileWidget
  • ActionMenu
  • ActionsGridViewProfileWidget
  • ActionsQuickCreateRelationshipBehavior
  • ActiveDateRangeInput
  • ApplicationConfigBehavior
  • Attachments
  • ChatBox
  • CommonControllerBehavior
  • ContactMapInlineTags
  • ContactsGridViewProfileWidget
  • CronForm
  • CSaveRelationsBehavior
  • DateRangeInputsWidget
  • DocsGridViewProfileWidget
  • DocViewer
  • DocViewerProfileWidget
  • EButtonColumnWithClearFilters
  • EmailDeliveryBehavior
  • EmailProgressControl
  • EncryptedFieldsBehavior
  • EventsChartProfileWidget
  • FileUploader
  • FontPickerInput
  • Formatter
  • FormView
  • GridViewWidget
  • History
  • IframeWidget
  • ImportExportBehavior
  • InlineActionForm
  • InlineEmailAction
  • InlineEmailForm
  • InlineEmailModelBehavior
  • InlineQuotes
  • JSONEmbeddedModelFieldsBehavior
  • JSONFieldsDefaultValuesBehavior
  • LeadRoutingBehavior
  • LeftWidget
  • LoginThemeHelper
  • LoginThemeHelperBase
  • MarketingGridViewProfileWidget
  • MediaBox
  • MessageBox
  • MobileFormatter
  • MobileFormLayoutRenderer
  • MobileLayoutRenderer
  • MobileLoginThemeHelper
  • MobileViewLayoutRenderer
  • ModelFileUploader
  • NewWebLeadsGridViewProfileWidget
  • NormalizedJSONFieldsBehavior
  • NoteBox
  • OnlineUsers
  • OpportunitiesGridViewProfileWidget
  • Panel
  • ProfileDashboardManager
  • ProfileGridViewWidget
  • ProfileLayoutEditor
  • ProfilesGridViewProfileWidget
  • Publisher
  • PublisherActionTab
  • PublisherCalendarEventTab
  • PublisherCallTab
  • PublisherCommentTab
  • PublisherEventTab
  • PublisherSmallCalendarEventTab
  • PublisherTab
  • PublisherTimeTab
  • QuickContact
  • QuickCreateRelationshipBehavior
  • QuotesGridViewProfileWidget
  • RecordAliasesWidget
  • RecordViewLayoutManager
  • RecordViewWidgetManager
  • RememberPagination
  • Reminders
  • ResponseBehavior
  • ResponsiveHtml
  • SearchIndexBehavior
  • ServicesGridViewProfileWidget
  • SmallCalendar
  • SmartActiveDataProvider
  • SmartDataProviderBehavior
  • SmartSort
  • SocialForm
  • SortableWidgetManager
  • SortableWidgets
  • TagBehavior
  • TagCloud
  • TemplatesGridViewProfileWidget
  • TimeZone
  • TopContacts
  • TopSites
  • TransformedFieldStorageBehavior
  • TranslationLogger
  • TwitterFeed
  • TwoColumnSortableWidgetManager
  • UpdaterBehavior
  • UpdatesForm
  • UserIdentity
  • UsersChartProfileWidget
  • WorkflowBehavior
  • X2ActiveGridView
  • X2ActiveGridViewForSortableWidgets
  • X2AssetManager
  • X2AuthManager
  • X2ChangeLogBehavior
  • X2ClientScript
  • X2Color
  • X2DateUtil
  • X2FixtureManager
  • X2FlowFormatter
  • X2GridView
  • X2GridViewBase
  • X2GridViewForSortableWidgets
  • X2GridViewSortableWidgetsBehavior
  • X2LeadsGridViewProfileWidget
  • X2LinkableBehavior
  • X2ListView
  • X2PillBox
  • X2ProgressBar
  • X2SmartSearchModelBehavior
  • X2TimestampBehavior
  • X2TranslationBehavior
  • X2UrlRule
  • X2WebModule
  • X2Widget
  • X2WidgetList
  • Overview
  • Package
  • Class
  • Tree
  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('zii.widgets.grid.CGridView');
 38: Yii::import('X2GridViewBase');
 39: 
 40: /**
 41:  * Custom grid view display function.
 42:  *
 43:  * Displays a dynamic grid view that permits save-able resizing and reordering of
 44:  * columns and also the adding of new columns based on the available fields for
 45:  * the model.
 46:  *
 47:  * @property bool $isAdmin If true, the grid view will be generated under the
 48:  *  assumption that the user viewing it has full/administrative access to
 49:  *  whichever module that it is being used in.
 50:  * @package application.components
 51:  */
 52: class X2GridView extends X2ActiveGridView {
 53:     public $viewName;
 54:     public $fieldFormatter = 'X2GridViewFieldFormatter';
 55: 
 56:     /**
 57:      * @var string $dataColumnClass
 58:      */
 59:     public $dataColumnClass = 'X2DataColumn'; 
 60: 
 61:     public $allFields = array ();
 62: 
 63:     /**
 64:      * @deprecated tag column enabled if model has TagBehavior
 65:      */
 66:     public $enableTags = false;
 67: 
 68:     protected $_fieldModels;
 69:     protected $_isAdmin;
 70: 
 71:     public function __construct($owner = null){
 72:         X2Model::$autoPopulateFields = false;
 73:         parent::__construct($owner);
 74:     }
 75: 
 76:      
 77: 
 78:     protected function addSpecialFieldNames () {
 79:         parent::addSpecialFieldNames ();
 80: 
 81:         // add tags column if specified
 82:         if($this->model->asa ('TagBehavior'))
 83:             $this->allFieldNames['tags'] = Yii::t('app','Tags');
 84:     }
 85: 
 86:     protected function addFieldNames () {
 87:         $this->addSpecialFieldNames ();
 88: 
 89:         foreach($this->allFields as $fieldName=>&$field) {
 90:             $this->allFieldNames[$fieldName] =
 91:                 X2Model::model($this->modelName)->getAttributeLabel($field->fieldName);
 92:         }
 93:     }
 94: 
 95:     protected $_model;
 96:     public function getModel ($row=null, $data=null) {
 97:         if (!isset ($this->_model)) {
 98:             $this->_model = X2Model::model ($this->modelName);
 99:         }
100:         return $this->_model;
101:     }
102: 
103:     protected function handleFields () {
104:         $fields = X2Model::model($this->modelName)->getFields();
105: 
106:         $fieldPermissions = array();
107:         if(!$this->isAdmin && !empty(Yii::app()->params->roles)) {
108:             $rolePermissions = Yii::app()->db->createCommand()
109:                 ->select('fieldId, permission')
110:                 ->from('x2_role_to_permission')
111:                 ->join('x2_fields','x2_fields.modelName="'.$this->modelName.
112:                     '" AND x2_fields.id=fieldId AND roleId IN ('.
113:                     implode(',',Yii::app()->params->roles).')')
114:                 ->queryAll();
115: 
116:             foreach($rolePermissions as &$permission) {
117:                 if(!isset($fieldPermissions[$permission['fieldId']]) ||
118:                    $fieldPermissions[$permission['fieldId']] < (int)$permission['permission']) {
119: 
120:                     $fieldPermissions[$permission['fieldId']] = (int)$permission['permission'];
121:                 }
122:             }
123:         }
124: 
125:         // Begin setting fields
126:         $excludedColumns = array_flip ($this->excludedColumns ? $this->excludedColumns : array ());
127:         foreach($fields as $field) {
128:             if (isset($excludedColumns[$field->fieldName]))
129:                 continue;
130:             if((!isset($fieldPermissions[$field->id]) || $fieldPermissions[$field->id] > 0))
131:                 $this->allFields[$field->fieldName] = $field;
132:         }
133:     }
134: 
135:     protected function createDefaultStyleColumn ($columnName, $width) {
136:         $isCurrency = in_array($columnName,array('annualRevenue','quoteAmount'));
137:         $newColumn = array();
138: 
139:         if ((array_key_exists($columnName, $this->allFields))) { 
140: 
141:             $newColumn['name'] = $columnName;
142:             $newColumn['id'] = $this->namespacePrefix.'C_'.$columnName;
143:             $newColumn['header'] = X2Model::model($this->modelName)
144:                 ->getAttributeLabel($columnName);
145:             $newColumn['fieldModel'] = isset($this->fieldModels[$columnName]) ?
146:                 $this->fieldModels[$columnName]->attributes : array();
147:             $newColumn['headerHtmlOptions'] = array(
148:                 'style'=>'width:'.$this->formatWidth ($width).';');
149: 
150:             $makeLinks = in_array (
151:                 $this->allFields[$columnName]->type, array ('phone', 'link', 'assignment'));
152:             
153:             $newColumn['value'] = 
154:                  '$this->grid->setFormatter ($data)
155:                      ->renderAttribute ("'.$columnName.'", '.($makeLinks ? 'true' : 'false').');';
156:         } else if($columnName == 'tags') {
157:             $newColumn['id'] = $this->namespacePrefix.'C_'.'tags';
158:             $newColumn['header'] = Yii::t('app','Tags');
159:             $newColumn['headerHtmlOptions'] = array('style'=>'width:'.$width.'px;');
160:             $newColumn['value'] = 'Tags::getTagLinks("'.$this->modelName.'",$data->id)';
161:             $newColumn['type'] = 'raw';
162:             $newColumn['filter'] = $this->filter->renderTagInput ();
163:         } 
164:         return $newColumn;
165:     }
166: 
167:     public function getFieldModels() {
168:         if(!isset($this->_fieldModels)) {
169:             $this->_fieldModels = X2Model::model($this->modelName)->getFields(true);
170:         }
171:         return $this->_fieldModels;
172:     }
173: 
174:     public function getIsAdmin() {
175:         if(!isset($this->_isAdmin)) {
176:             $this->_isAdmin = 
177:                 (bool) Yii::app()->user->checkAccess(ucfirst($this->moduleName).'AdminAccess');
178:         }
179:         return $this->_isAdmin;
180:     }
181: 
182:     public function init () {
183:         $this->calculateChecksum = filter_input (INPUT_GET, 'calculateGridViewChecksum');
184:         $this->handleFields ();
185:         if ($this->enableSelectAllOnAllPages && 
186:             $this->calculateChecksum) {
187: 
188:             $this->dataProvider->calculateChecksum = true;
189:         }
190:         parent::init ();
191:     }
192: 
193:     public function setModuleName($value) {
194:         $this->_moduleName = $value;
195:     }
196: 
197:     protected function renderContentBeforeHeader () {
198:         if ($this->enableSelectAllOnAllPages) {
199:             $this->renderSelectAllRecordsOnAllPagesStrip ();
200:         }
201:     }
202: 
203:     private function renderSelectAllRecordsOnAllPagesStrip () {
204:         echo 
205:             '<div class="select-all-records-on-all-pages-strip-container" style="display: none;">
206:                 <div class="select-all-notice">
207:                 '.Yii::t('app', 'All {count} {recordType} on this page have been selected. '.
208:                 '{clickHereLink} to select all {recordType} on all pages.', array (
209:                     '{count}' => '<b>'.$this->dataProvider->itemCount.'</b>',
210:                     '{clickHereLink}' => 
211:                         '<a class="select-all-records-on-all-pages" href="#">'.
212:                             Yii::t('app', 'Click here').
213:                         '</a>',
214:                     '{recordType}' => X2Model::getRecordName ($this->modelName, true),
215:                 )).'
216:                 </div>
217:                 <div class="all-selected-notice" style="display: none;">
218:                 '.Yii::t(
219:                     'app', 
220:                     'All {recordType} on all pages have been selected ({count} in total). '.
221:                         '{clickHereLink} to clear your selection.', 
222:                     array (
223:                         '{count}' => '<b>'.$this->dataProvider->totalItemCount.'</b>',
224:                         '{clickHereLink}' => 
225:                             '<a class="unselect-all-records-on-all-pages" href="#">'.
226:                                 Yii::t('app', 'Click here').
227:                             '</a>',
228:                         '{recordType}' => X2Model::getRecordName ($this->modelName, true),
229:                     )).'
230:                 </div>
231:             </div>';
232:     }
233: 
234: }
235: ?>
236: 
X2CRM Documentation API documentation generated by ApiGen 2.8.0