diff --git a/modules/Vtiger/models/Field.php b/modules/Vtiger/models/Field.php index 99ea54ccb2bc10b9a55e532434132f2d5f131a17..cc74472bd9f755b7feeead7080d84eaa06ea33aa 100644 --- a/modules/Vtiger/models/Field.php +++ b/modules/Vtiger/models/Field.php @@ -25,7 +25,88 @@ class Vtiger_Field_Model extends Vtiger_Field { const QUICKCREATE_NOT_ENABLED = 1; const QUICKCREATE_ENABLED = 2; const QUICKCREATE_NOT_PERMITTED = 3; - + + const DISPLAYTYPE_ALL = 1; + const DISPLAYTYPE_DETAIL_AND_LIST = 2; //e.g. Created time, Modified time + const DISPLAYTYPE_LIST = 3;//e.g. Total, Subtotal in Inventory modules + const DISPLAYTYPE_PASSWORD = 4; + const DISPLAYTYPE_LINEITEM = 5; + const DISPLAYTYPE_STARRED = 6;//show on List View and as separate button on Detail View + + const PRESENCE_ALWAYS_VISIBLE = 0;//cannot be hidden by user + const PRESENCE_HIDDEN = 1; + const PRESENCE_VISIBLE = 2;//can be hidden by user + + //UITYPES + const UITYPE_TEXT = 1; + const UITYPE_NAME = 2; + const UITYPE_RECORD_NO = 4; //auto increment + const UITYPE_DATE = 5; + const UITYPE_ACTIVITY_DATE_START = 6; + const UITYPE_NUMERIC = 7; //same for float and integer + const UITYPE_EMAIL_RECIPIENT_ADDRESS = 8; + const UITYPE_PERCENTAGE = 9; + const UITYPE_RECORD_RELATION = 10; + const UITYPE_PHONE = 11; + const UITYPE_FROM_EMAIL = 12; + const UITYPE_EMAIL = 13; + const UITYPE_TIME = 14; + const UITYPE_ROLE_BASED_PICKLIST = 15; + const UITYPE_PICKLIST = 16; //non-role based picklist + const UITYPE_URL = 17; + const UITYPE_FULL_WIDTH_TEXT_AREA = 19; + const UITYPE_FAQ = 20; + const UITYPE_HALF_WIDTH_TEXT_AREA = 21; + const UITYPE_TICKET_TITLE = 22; + const UITYPE_DATE_2 = 23; + const UITYPE_STREET_ADDRESS = 24; + const UITYPE_COUNTER = 25; //e.g. click count & access count + const UITYPE_FOLDER_NAME = 26; + const UITYPE_DOWNLOAD_TYPE = 27; + const UITYPE_FILENAME = 28; + const UITYPE_ACTIVITY_SEND_REMINDER = 30; + const UITYPE_MULTI_SELECT = 33; + const UITYPE_ACCOUNT_REFERENCE = 51; + const UITYPE_USER_REFERENCE = 52;//e.g. assigned to + const UITYPE_ASSIGNED_TO_PICKLIST = 53; + const UITYPE_SALUTATION_OR_FIRSTNAME = 55; + const UITYPE_CHECKBOX = 56; + const UITYPE_CONTACT = 57; + const UITYPE_CAMPAIGN_REFERENCE = 58; + const UITYPE_PRODUCT_REFERENCE = 59; + const UITYPE_ATTACHMENT = 61; + const UITYPE_ACTIVITY_DURATION = 63; + const UITYPE_ACTIVITY_PARENT_REFERENCE = 66; + const UITYPE_IMAGE = 69;//e.g. product image & contact image + const UITYPE_DATE_TIME = 70; + const UITYPE_CURRENCY_AMOUNT = 71; + const UITYPE_LINEITEMS_CURRENCY_AMOUNT = 72; + const UITYPE_ACCOUNT_REFERENCE_2 = 73; + const UITYPE_POTENTIAL_REFERENCE = 76; + const UITYPE_QUOTES_INVENTORY_MANAGER = 77; + const UITYPE_QUOTES_REFERENCE = 78; + const UITYPE_SALESORDER_REFERENCE = 80; + const UITYPE_VENDOR_REFERENCE = 81; + const UITYPE_TAX = 83; + const UITYPE_SKYPE = 85; + const UITYPE_CURRENCY_CODE = 117;//picklist with currencies + const UITYPE_LASTNAME = 255;//last name in contacts and leads + const UITYPE_EMAIL_PARENT_RECORD = 357; + + //UITYPES for Users module + const UITYPE_USER_ACCESS_KEY = 3; + const UITYPE_USER_THEME = 31; + const UITYPE_USER_PICKLIST = 32; + const UITYPE_USER_ROLE = 98; + const UITYPE_USER_PASSWORD = 98; + const UITYPE_USER_REPORTS_TO = 101; + const UITYPE_USER_EMAIL = 104; + const UITYPE_USER_USERNAME = 106; + const UITYPE_USER_STATUS = 115; + const UITYPE_USER_END_HOUR = 116; + const UITYPE_USER_IS_ADMIN = 156; + + /** * Function to get the value of a given property * @param <String> $propertyName @@ -146,25 +227,25 @@ class Vtiger_Field_Model extends Vtiger_Field { public function getFieldDataType() { if(!isset($this->fieldDataType) || !$this->fieldDataType) { $uiType = $this->get('uitype'); - if($uiType == '69') { + if($uiType == self::UITYPE_IMAGE) { $fieldDataType = 'image'; - } else if($uiType == '26') { + } else if($uiType == self::UITYPE_FOLDER_NAME) { $fieldDataType = 'documentsFolder'; - } else if($uiType == '27') { + } else if($uiType == self::UITYPE_DOWNLOAD_TYPE) { $fieldDataType = 'fileLocationType'; - } else if($uiType == '9') { + } else if($uiType == self::UITYPE_PERCENTAGE) { $fieldDataType = 'percentage'; - } else if($uiType == '28') { + } else if($uiType == self::UITYPE_FILENAME) { $fieldDataType = 'documentsFileUpload'; - } else if($uiType == '83') { + } else if($uiType == self::UITYPE_TAX) { $fieldDataType = 'productTax'; - } else if($uiType == '117') { + } else if($uiType == self::UITYPE_CURRENCY_CODE) { $fieldDataType = 'currencyList'; - } else if($uiType == '55' && stripos($this->getName(), 'salutationtype') !== false) { + } else if($uiType == self::UITYPE_SALUTATION_OR_FIRSTNAME && stripos($this->getName(), 'salutationtype') !== false) { $fieldDataType = 'picklist'; - } else if($uiType == '55' && stripos($this->getName(), 'firstname') !== false) { + } else if($uiType == self::UITYPE_SALUTATION_OR_FIRSTNAME && stripos($this->getName(), 'firstname') !== false) { $fieldDataType = 'salutation'; - } else if($uiType == '55' && stripos($this->getName(), 'roundrobin_userid') !== false) { + } else if($uiType == self::UITYPE_SALUTATION_OR_FIRSTNAME && stripos($this->getName(), 'roundrobin_userid') !== false) { $fieldDataType = 'multiowner'; } else { $webserviceField = $this->getWebserviceFieldObject(); @@ -185,7 +266,7 @@ class Vtiger_Field_Model extends Vtiger_Field { if($presenceZero && is_array($referenceList) && count($referenceList) > 0) { foreach($referenceList as $key => $referenceModule) { $moduleModel = Vtiger_Module_Model::getInstance($referenceModule); - if($moduleModel && $moduleModel->get('presence') != 0) { + if($moduleModel && $moduleModel->get('presence') != self::PRESENCE_ALWAYS_VISIBLE) { unset($referenceList[$key]); } } @@ -240,7 +321,7 @@ class Vtiger_Field_Model extends Vtiger_Field { } public function isRoleBased() { - if($this->get('uitype') == '15' || $this->get('uitype') == '33' || ($this->get('uitype') == '55' && $this->getFieldName() == 'salutationtype')) { + if($this->get('uitype') == self::UITYPE_ROLE_BASED_PICKLIST || $this->get('uitype') == self::UITYPE_MULTI_SELECT || ($this->get('uitype') == SELF::UITYPE_SALUTATION_OR_FIRSTNAME && $this->getFieldName() == 'salutationtype')) { return true; } return false; @@ -342,7 +423,7 @@ class Vtiger_Field_Model extends Vtiger_Field { */ public function isViewEnabled() { $permision = $this->getPermissions(); - if ($this->getDisplayType() == '4' || in_array($this->get('presence'), array(1, 3))) { + if ($this->getDisplayType() == self::DISPLAYTYPE_PASSWORD || in_array($this->get('presence'), array(self::PRESENCE_HIDDEN, 3))) { return false; } return $permision; @@ -365,7 +446,7 @@ class Vtiger_Field_Model extends Vtiger_Field { * @return <Boolean> - true/false */ public function isViewableInDetailView() { - if(!$this->isViewable() || $this->getDisplayType() == '3' || $this->getDisplayType() == '5' || $this->getDisplayType() == '6') { + if(!$this->isViewable() || $this->getDisplayType() == self::DISPLAYTYPE_LIST || $this->getDisplayType() == self::DISPLAYTYPE_LINEITEM || $this->getDisplayType() == self::DISPLAYTYPE_STARRED) { return false; } return true; @@ -375,7 +456,7 @@ class Vtiger_Field_Model extends Vtiger_Field { if(!$this->isViewable()){ return false; } - if($this->getDisplayType() == '6' && $this->getName() =='tags') { + if($this->getDisplayType() == self::DISPLAYTYPE_STARRED && $this->getName() =='tags') { return false; } @@ -385,7 +466,7 @@ class Vtiger_Field_Model extends Vtiger_Field { public function isEditEnabled() { $displayType = (int)$this->get('displaytype'); $restrictedFields = array('isconvertedfrompotential','isconvertedfromlead'); - $editEnabledDisplayTypes = array(1,3,5); + $editEnabledDisplayTypes = array(self::DISPLAYTYPE_ALL, self::DISPLAYTYPE_LIST, self::DISPLAYTYPE_LINEITEM); if(!$this->isViewEnabled() || !in_array($displayType, $editEnabledDisplayTypes) || strcasecmp($this->getFieldDataType(),"autogenerated") ===0 || @@ -399,7 +480,7 @@ class Vtiger_Field_Model extends Vtiger_Field { $moduleModel = $this->getModule(); $quickCreate = $this->get('quickcreate'); if($moduleModel && ($quickCreate == self::QUICKCREATE_MANDATORY || $quickCreate == self::QUICKCREATE_ENABLED - || $this->isMandatory()) && $this->get('uitype') != 69) { + || $this->isMandatory()) && $this->get('uitype') != self::UITYPE_IMAGE) { //isQuickCreateSupported will not be there for settings if(method_exists($moduleModel,'isQuickCreateSupported') && $moduleModel->isQuickCreateSupported()) { return true; @@ -423,9 +504,9 @@ class Vtiger_Field_Model extends Vtiger_Field { public function isEditable() { if(!$this->isEditEnabled() || !$this->isViewable() - || !in_array(((int)$this->get('displaytype')), array(1,5)) + || !in_array(((int)$this->get('displaytype')), array(self::DISPLAYTYPE_ALL, self::DISPLAYTYPE_LINEITEM)) || $this->isReadOnly() == true - || $this->get('uitype') == 4) { + || $this->get('uitype') == self::UITYPE_RECORD_NO) { return false; } @@ -437,7 +518,13 @@ class Vtiger_Field_Model extends Vtiger_Field { * @return <Boolean> */ public function isAjaxEditable() { - $ajaxRestrictedFields = array('4', '72', '61', '27', '28'); + $ajaxRestrictedFields = array( + self::UITYPE_RECORD_NO, + self::UITYPE_CURRENCY_AMOUNT, + self::UITYPE_ATTACHMENT, + self::UITYPE_DOWNLOAD_TYPE, + self::UITYPE_FILENAME + ); if(!$this->isEditable() || in_array($this->get('uitype'), $ajaxRestrictedFields)) { return false; } @@ -1177,19 +1264,20 @@ class Vtiger_Field_Model extends Vtiger_Field { $user = Users_Record_Model::getCurrentUserModel(); $privileges = $user->getPrivileges(); $profilelist = $privileges->get('profiles'); + $visiblePresenceList = trim(implode(',', self::getVisiblePresenceCodesList()), ','); if (count($profilelist) > 0) { if ($accessmode == 'readonly') { - $query = "SELECT vtiger_profile2field.visible,vtiger_field.fieldid FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid in (" . generateQuestionMarks($profilelist) . ") AND vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + $query = "SELECT vtiger_profile2field.visible,vtiger_field.fieldid FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid in (" . generateQuestionMarks($profilelist) . ") AND vtiger_field.presence in ({$visiblePresenceList}) GROUP BY vtiger_field.fieldid"; } else { - $query = "SELECT vtiger_profile2field.visible,vtiger_field.fieldid FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid in (" . generateQuestionMarks($profilelist) . ") AND vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + $query = "SELECT vtiger_profile2field.visible,vtiger_field.fieldid FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly=0 AND vtiger_def_org_field.visible=0 AND vtiger_profile2field.profileid in (" . generateQuestionMarks($profilelist) . ") AND vtiger_field.presence in ({$visiblePresenceList}) GROUP BY vtiger_field.fieldid"; } $params = array($tabid, $profilelist); } else { if ($accessmode == 'readonly') { - $query = "SELECT vtiger_profile2field.visible,vtiger_field.fieldid FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + $query = "SELECT vtiger_profile2field.visible,vtiger_field.fieldid FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_def_org_field.visible=0 AND vtiger_field.presence in ({$visiblePresenceList}) GROUP BY vtiger_field.fieldid"; } else { - $query = "SELECT vtiger_profile2field.visible,vtiger_field.fieldid FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly=0 AND vtiger_def_org_field.visible=0 AND vtiger_field.presence in (0,2) GROUP BY vtiger_field.fieldid"; + $query = "SELECT vtiger_profile2field.visible,vtiger_field.fieldid FROM vtiger_field INNER JOIN vtiger_profile2field ON vtiger_profile2field.fieldid=vtiger_field.fieldid INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid=vtiger_field.fieldid WHERE vtiger_field.tabid=? AND vtiger_profile2field.visible=0 AND vtiger_profile2field.readonly=0 AND vtiger_def_org_field.visible=0 AND vtiger_field.presence in ({$visiblePresenceList}) GROUP BY vtiger_field.fieldid"; } $params = array($tabid); } @@ -1249,9 +1337,14 @@ class Vtiger_Field_Model extends Vtiger_Field { public function isActiveField() { $presence = $this->get('presence'); - return in_array($presence, array(0,2)); + return in_array($presence, self::getVisiblePresenceCodesList()); } - + + private static function getVisiblePresenceCodesList() + { + return array(self::PRESENCE_ALWAYS_VISIBLE, self::PRESENCE_VISIBLE); + } + public function isMassEditable() { return $this->masseditable == 1 ? true : false; }