From 1e29f9e0faf05e65afc473ca19bedc1d61291d0a Mon Sep 17 00:00:00 2001
From: Prasad <prasad@vtiger.com>
Date: Sun, 3 Oct 2021 18:36:10 +0530
Subject: [PATCH] Fixed PHP warnings on List, Edit and Detail view

---
 include/ListView/ListViewController.php       |  8 +--
 .../QueryGenerator/EnhancedQueryGenerator.php | 10 ++--
 include/QueryGenerator/QueryGenerator.php     |  2 +-
 include/Webservices/PreserveGlobal.php        |  3 +-
 include/Webservices/WebserviceField.php       |  4 +-
 includes/runtime/Controller.php               | 59 +++++++++++++++----
 .../v7/modules/Vtiger/ListViewContents.tpl    |  8 ++-
 layouts/v7/modules/Vtiger/partials/Topbar.tpl |  3 +-
 .../v7/modules/Vtiger/uitypes/Picklist.tpl    | 10 ++--
 modules/CustomView/CustomView.php             |  9 +--
 modules/Settings/Picklist/models/Module.php   |  1 +
 modules/Vtiger/models/Block.php               |  2 +-
 modules/Vtiger/models/Field.php               | 21 ++++---
 modules/Vtiger/models/ListView.php            |  4 +-
 modules/Vtiger/models/Module.php              |  6 +-
 modules/Vtiger/models/Paging.php              |  4 +-
 modules/Vtiger/models/RelationListView.php    |  2 +-
 modules/Vtiger/views/Detail.php               |  8 ++-
 modules/Vtiger/views/List.php                 | 14 ++---
 .../modules/ModTracker/ModTracker.php         |  2 +-
 .../modules/ModTracker/models/Record.php      |  2 +-
 vtlib/Vtiger/FieldBasic.php                   |  2 +-
 22 files changed, 117 insertions(+), 67 deletions(-)

diff --git a/include/ListView/ListViewController.php b/include/ListView/ListViewController.php
index a88722332..2c5488809 100644
--- a/include/ListView/ListViewController.php
+++ b/include/ListView/ListViewController.php
@@ -127,7 +127,7 @@ class ListViewController {
 		$fields = $this->queryGenerator->getFields(); 
 		$headerFields = array();
 		foreach($fields as $fieldName) {
-			if(array_key_exists($fieldName, $moduleFields)) {
+			if(is_array($moduleFields) && array_key_exists($fieldName, $moduleFields)) {
 				$headerFields[$fieldName] = $moduleFields[$fieldName];
 			}
 		}
@@ -142,7 +142,7 @@ class ListViewController {
 		$meta = $this->queryGenerator->getMeta($this->queryGenerator->getModule());
 		$baseModule = $module;
 		$moduleFields = $this->queryGenerator->getModuleFields();
-		$accessibleFieldList = array_keys($moduleFields);
+		$accessibleFieldList = is_array($moduleFields) ? array_keys($moduleFields) : array();
 		$listViewFields = array_intersect($fields, $accessibleFieldList);
 
 		$referenceFieldList = $this->queryGenerator->getReferenceFieldList();
@@ -180,7 +180,7 @@ class ListViewController {
 					}
 				}
 				if(count($idList) > 0) {
-					if(!is_array($this->ownerNameList[$fieldName])) {
+					if(isset($this->onwerNameList[$fieldName]) && !is_array($this->ownerNameList[$fieldName])) {
 						$this->ownerNameList[$fieldName] = getOwnerNameList($idList);
 					} else {
 						//array_merge API loses key information so need to merge the arrays
@@ -491,7 +491,7 @@ class ListViewController {
 					}
 				} elseif ( in_array($uitype,array(7,9,90)) ) {
 					$value = "<span align='right'>".textlength_check($value)."</span>";
-				} elseif($field && $field->isNameField) {
+				} elseif($field && isset($field->isNameField) && $field->isNameField) {
 					$value = "<a href='?module=$field->moduleName&view=Detail&".
 								"record=$recordId' title='".vtranslate($field->moduleName, $field->moduleName)."'>$value</a>";
 				} elseif($field->getUIType() == 61) {
diff --git a/include/QueryGenerator/EnhancedQueryGenerator.php b/include/QueryGenerator/EnhancedQueryGenerator.php
index 67c7275c4..c2411cb6c 100644
--- a/include/QueryGenerator/EnhancedQueryGenerator.php
+++ b/include/QueryGenerator/EnhancedQueryGenerator.php
@@ -32,7 +32,7 @@ class EnhancedQueryGenerator extends QueryGenerator {
 	}
 
 	public function getModuleFields() {
-		if ($this->moduleFields == null) {
+		if (!isset($this->moduleFields) || $this->moduleFields == null) {
 			$moduleFields = parent::getModuleFields();
 
 			//add reference fields also in the list
@@ -79,7 +79,7 @@ class EnhancedQueryGenerator extends QueryGenerator {
 			}
 			$this->moduleFields = $moduleFields;
 		}
-		return $this->moduleFields;
+		return isset($this->moduleFields) ? $this->moduleFields : null;
 	}
 
 	public function parseAdvFilterList($advFilterList, $glue = '') {
@@ -232,7 +232,7 @@ class EnhancedQueryGenerator extends QueryGenerator {
 	public function getSelectClauseColumnSQL() {
 		$columns = array();
 		$moduleFields = $this->getModuleFields();
-		$accessibleFieldList = array_keys($moduleFields);
+		$accessibleFieldList = is_array($moduleFields) ? array_keys($moduleFields) : array();
 
 		$moduleFields = $this->getModuleFields();
 
@@ -394,7 +394,7 @@ class EnhancedQueryGenerator extends QueryGenerator {
 			if (empty($fieldName))
 				continue;
 
-			$field = $moduleFields[$fieldName];
+			$field = isset($moduleFields) ? $moduleFields[$fieldName] : null;
 			if (empty($field))
 				continue; // not accessible field.
 
@@ -624,7 +624,7 @@ class EnhancedQueryGenerator extends QueryGenerator {
 			$parentReferenceField = '';
 			$baseFieldName = $fieldName = $conditionInfo['name'];
 			$parentReferenceField = $referenceModule = '';
-			$field = $moduleFieldList[$fieldName];
+			$field = isset($moduleFieldList) ? $moduleFieldList[$fieldName] : null;
 
 			// if its a reference field then we need to add the fieldname to table name
 			preg_match('/(\w+) ; \((\w+)\) (\w+)/', $baseFieldName, $matches);
diff --git a/include/QueryGenerator/QueryGenerator.php b/include/QueryGenerator/QueryGenerator.php
index 148ed5317..d7db71653 100644
--- a/include/QueryGenerator/QueryGenerator.php
+++ b/include/QueryGenerator/QueryGenerator.php
@@ -1195,7 +1195,7 @@ class QueryGenerator {
 
 	public function fixDateTimeValue($name, $value, $first = true) {
 		$moduleFields = $this->getModuleFields();
-		$field = $moduleFields[$name];
+		$field = isset($moduleFieldList) ? $moduleFields[$name] : null;
 		$type = $field ? $field->getFieldDataType() : false;
 		if($type == 'datetime') {
 			if(strrpos($value, ' ') === false) {
diff --git a/include/Webservices/PreserveGlobal.php b/include/Webservices/PreserveGlobal.php
index b0c9d7a70..d855d78a1 100644
--- a/include/Webservices/PreserveGlobal.php
+++ b/include/Webservices/PreserveGlobal.php
@@ -18,7 +18,8 @@ class VTWS_PreserveGlobal{
 		//To not push null value . Ideally we should not push null value for any name
 		//But current user null is dangerous so we are checking for only current user
         if(!empty(${$name}) || $name != 'current_user') {
-			if(!is_array(VTWS_PreserveGlobal::$globalData[$name])){
+			if(!isset(VTWS_PreserveGlobal::$globalData[$name]) ||
+				!is_array(VTWS_PreserveGlobal::$globalData[$name])){
 				VTWS_PreserveGlobal::$globalData[$name] = array();		
 			}
 			
diff --git a/include/Webservices/WebserviceField.php b/include/Webservices/WebserviceField.php
index 57be736e2..e4824ef4e 100644
--- a/include/Webservices/WebserviceField.php
+++ b/include/Webservices/WebserviceField.php
@@ -59,7 +59,7 @@ class WebserviceField{
 		$this->displayType = $row['displaytype'];
 		$this->massEditable = ($row['masseditable'] === '1')? true: false;
 		$this->presence = $row['presence'];
-		$this->isunique = ($row['isunique']) ? true : false;
+		$this->isunique = isset($row['isunique']) && $row['isunique'] ? true : false;
 		$typeOfData = $row['typeofdata'];
 		$this->typeOfData = $typeOfData;
 		$typeOfData = explode("~",$typeOfData);
@@ -258,7 +258,7 @@ class WebserviceField{
 			$referenceTypes = array();
 			if($this->getUIType() != $this->genericUIType){
 				$sql = "select type from vtiger_ws_referencetype where fieldtypeid=?";
-				$params = array($fieldTypeData['fieldtypeid']);
+				$params = array(isset($fieldTypeData['fieldtypeid'])? $fieldTypeData['fieldtypeid'] : 0);
 			}else{
 				$sql = 'SELECT relmodule AS type FROM vtiger_fieldmodulerel WHERE fieldid=? ORDER BY sequence ASC';
 				$params = array($this->getFieldId());
diff --git a/includes/runtime/Controller.php b/includes/runtime/Controller.php
index 41fc5a376..87e3c5551 100644
--- a/includes/runtime/Controller.php
+++ b/includes/runtime/Controller.php
@@ -165,6 +165,52 @@ abstract class Vtiger_View_Controller extends Vtiger_Action_Controller {
 			$viewer->assign('VTIGER_DISPLAY_VERSION', $vtiger_display_version);
             $viewer->assign('ONLY_V7_INSTANCE', $onlyV7Instance);
 			$this->viewer = $viewer;
+
+			// Defaults to avoid warning
+			// General
+			$viewer->assign('V7_THEME_PATH', '');
+			$viewer->assign('MODULE_NAME', '');
+			$viewer->assign('MODULE', '');
+			$viewer->assign('QUALIFIED_MODULE', '');
+			$viewer->assign('VIEW', '');
+			$viewer->assign('PARENT_MODULE', '');
+			$viewer->assign('EXTENSION_MODULE', '');
+			$viewer->assign('moduleName', '');
+
+			$viewer->assign('NOTIFIER_URL', '');
+			$viewer->assign('GLOBAL_SEARCH_VALUE', '');
+			$_REQUEST["view"] = isset($_REQUEST["view"])? $_REQUEST["view"] : "";
+
+			// Listview
+			$viewer->assign('SEARCH_MODE_RESULTS', null);
+			$viewer->assign('SHARED_MEMBER_COUNT', 0);
+			$viewer->assign('CUSTOM_VIEWS_NAMES', array());
+			$viewer->assign('ACTIVE', false);   // Tag
+			$viewer->assign('BUTTON_NAME', ''); // footer Buttom (for custom action)
+			$viewer->assign('BUTTON_ID', '');
+			$viewer->assign('NO_EDIT', '');
+			$viewer->assign('SOURCE_MODULE', '');
+			$viewer->assign('OPERATOR', '');
+			$viewer->assign('LISTVIEW_COUNT', 0);
+			$viewer->assign('FOLDER_ID', 0);
+			$viewer->assign('FOLDER_VALUE', '');
+			$viewer->assign('VIEWTYPE', '');
+			$viewer->assign('PRINT_TEMPLATE', '');
+			$viewer->assign('CLASS_VIEW_ACTION', '');
+			$viewer->assign('RELATED_MODULE_NAME', '');
+
+			// Editview
+			$viewer->assign('LEFTPANELHIDE', false);
+			$viewer->assign('RECORD_ID', '');
+			$viewer->assign('RETURN_VIEW', '');
+			$viewer->assign('MASS_EDITION_MODE', false);
+			$viewer->assign('OCCUPY_COMPLETE_WIDTH', true);
+			$viewer->assign('VIEW_SOURCE', false);
+			
+			// DetailView
+			$viewer->assign('MORE_TAB_ACTIVE', false);
+			$viewer->assign('NO_DELETE', false);
+			$viewer->assign('IS_EXTERNAL_LOCATION_TYPE', false);
 		}
 		return $this->viewer;
 	}
@@ -202,18 +248,7 @@ abstract class Vtiger_View_Controller extends Vtiger_Action_Controller {
 		$viewer->assign('SKIN_PATH', Vtiger_Theme::getCurrentUserThemePath());
 		$viewer->assign('LANGUAGE_STRINGS', $this->getJSLanguageStrings($request));
 		$viewer->assign('LANGUAGE', $currentUser->get('language'));
-
-		$viewer->assign('V7_THEME_PATH', '');
-		$viewer->assign('MODULE_NAME', '');
-		$viewer->assign('MODULE', '');
-		$viewer->assign('VIEW', '');
-		$viewer->assign('PARENT_MODULE', '');
-		$viewer->assign('EXTENSION_MODULE', '');
-
-		$viewer->assign('NOTIFIER_URL', '');
-		$viewer->assign('GLOBAL_SEARCH_VALUE', '');
-		$_REQUEST["view"] = isset($_REQUEST["view"])? $_REQUEST["view"] : "";
-
+		
 		if ($request->getModule() != 'Install') {
 			$userCurrencyInfo = getCurrencySymbolandCRate($currentUser->get('currency_id'));
 			$viewer->assign('USER_CURRENCY_SYMBOL', $userCurrencyInfo['symbol']);
diff --git a/layouts/v7/modules/Vtiger/ListViewContents.tpl b/layouts/v7/modules/Vtiger/ListViewContents.tpl
index 61425fe54..1a10e5168 100644
--- a/layouts/v7/modules/Vtiger/ListViewContents.tpl
+++ b/layouts/v7/modules/Vtiger/ListViewContents.tpl
@@ -127,8 +127,12 @@
                                     {foreach item=LISTVIEW_HEADER from=$LISTVIEW_HEADERS}
 						<th>
 							{assign var=FIELD_UI_TYPE_MODEL value=$LISTVIEW_HEADER->getUITypeModel()}
-							{include file=vtemplate_path($FIELD_UI_TYPE_MODEL->getListSearchTemplateName(),$MODULE) FIELD_MODEL= $LISTVIEW_HEADER SEARCH_INFO=$SEARCH_DETAILS[$LISTVIEW_HEADER->getName()] USER_MODEL=$CURRENT_USER_MODEL}
-							<input type="hidden" class="operatorValue" value="{$SEARCH_DETAILS[$LISTVIEW_HEADER->getName()]['comparator']}">
+							{assign var=SEARCH_INFO_DETAILS_FOR_FIELD value=array( 'searchValue' => '', 'comparator' => '' )}
+							{if isset($SEARCH_DETAILS[$LISTVIEW_HEADER->getName()])}
+								{assign var=SEARCH_INFO_DETAILS_FOR_FIELD value=$SEARCH_DETAILS[$LISTVIEW_HEADER->getName()]}
+							{/if}
+							{include file=vtemplate_path($FIELD_UI_TYPE_MODEL->getListSearchTemplateName(),$MODULE) FIELD_MODEL= $LISTVIEW_HEADER SEARCH_INFO=$SEARCH_INFO_DETAILS_FOR_FIELD USER_MODEL=$CURRENT_USER_MODEL}
+							<input type="hidden" class="operatorValue" value="{$SEARCH_INFO_DETAILS_FOR_FIELD['comparator']}">
 						</th>
 					{/foreach}
 					</tr>
diff --git a/layouts/v7/modules/Vtiger/partials/Topbar.tpl b/layouts/v7/modules/Vtiger/partials/Topbar.tpl
index 8ea4a0f2b..a5f4da0f9 100644
--- a/layouts/v7/modules/Vtiger/partials/Topbar.tpl
+++ b/layouts/v7/modules/Vtiger/partials/Topbar.tpl
@@ -65,6 +65,7 @@
 												{if $moduleModel->isPermitted('CreateView') || $moduleModel->isPermitted('EditView')}
 													{assign var='quickCreateModule' value=$moduleModel->isQuickCreateSupported()}
 													{assign var='singularLabel' value=$moduleModel->getSingularLabelKey()}
+													{assign var='count' value=0}
 													{assign var=hideDiv value={!$moduleModel->isPermitted('CreateView') && $moduleModel->isPermitted('EditView')}}
 													{if $quickCreateModule == '1'}
 														{if $count % 3 == 0}
@@ -200,4 +201,4 @@
 				</div>
 			</div>
 		</div>
-{/strip}
\ No newline at end of file
+{/strip}
diff --git a/layouts/v7/modules/Vtiger/uitypes/Picklist.tpl b/layouts/v7/modules/Vtiger/uitypes/Picklist.tpl
index a508a0ed7..de5783fca 100644
--- a/layouts/v7/modules/Vtiger/uitypes/Picklist.tpl
+++ b/layouts/v7/modules/Vtiger/uitypes/Picklist.tpl
@@ -21,7 +21,7 @@
 	{if $FIELD_MODEL->isEmptyPicklistOptionAllowed()}<option value="">{vtranslate('LBL_SELECT_OPTION','Vtiger')}</option>{/if}
 	{foreach item=PICKLIST_VALUE key=PICKLIST_NAME from=$PICKLIST_VALUES}
 		{assign var=CLASS_NAME value="picklistColor_{$FIELD_MODEL->getFieldName()}_{$PICKLIST_NAME|replace:' ':'_'}"}
-		<option value="{Vtiger_Util_Helper::toSafeHTML($PICKLIST_NAME)}" {if $PICKLIST_COLORS[$PICKLIST_NAME]}class="{$CLASS_NAME}"{/if} {if trim(decode_html($FIELD_MODEL->get('fieldvalue'))) eq trim($PICKLIST_NAME)} selected {/if}>{$PICKLIST_VALUE}</option>
+		<option value="{Vtiger_Util_Helper::toSafeHTML($PICKLIST_NAME)}" {if isset($PICKLIST_COLORS[$PICKLIST_NAME]) && $PICKLIST_COLORS[$PICKLIST_NAME]}class="{$CLASS_NAME}"{/if} {if trim(decode_html($FIELD_MODEL->get('fieldvalue'))) eq trim($PICKLIST_NAME)} selected {/if}>{$PICKLIST_VALUE}</option>
 	{/foreach}
 </select>
 {if $PICKLIST_COLORS}
@@ -29,9 +29,11 @@
 		{foreach item=PICKLIST_VALUE key=PICKLIST_NAME from=$PICKLIST_VALUES}
 		{assign var=CLASS_NAME value="{$FIELD_MODEL->getFieldName()}_{$PICKLIST_NAME|replace:' ':'_'}"}
 		.picklistColor_{$CLASS_NAME} {
-			background-color: {$PICKLIST_COLORS[$PICKLIST_NAME]} !important;
-			{if $PICKLIST_COLORS[$PICKLIST_NAME] eq '#ffffff'}
-			color: #000000 !important;
+			{if isset($PICKLIST_COLORS[$PICKLIST_NAME])}
+				background-color: {$PICKLIST_COLORS[$PICKLIST_NAME]} !important;
+				{if $PICKLIST_COLORS[$PICKLIST_NAME] eq '#ffffff'}
+				color: #000000 !important;
+				{/if}
 			{/if}
 		}
 		.picklistColor_{$CLASS_NAME}.select2-highlighted {
diff --git a/modules/CustomView/CustomView.php b/modules/CustomView/CustomView.php
index f329b8a7b..8b00af365 100644
--- a/modules/CustomView/CustomView.php
+++ b/modules/CustomView/CustomView.php
@@ -92,9 +92,9 @@ class CustomView extends CRMEntity {
 	 */
 	function getViewId($module) {
 		global $adb, $current_user;
-		$now_action = vtlib_purify($_REQUEST['action']);
+		$now_action = vtlib_purify(isset($_REQUEST['action']) ? $_REQUEST['action'] : '');
 		if(!$now_action) {
-			$now_action = vtlib_purify($_REQUEST['view']);
+			$now_action = vtlib_purify(isset($_REQUEST['view']) ? $_REQUEST['view'] : '');
 		}
 		if (empty($_REQUEST['viewname'])) {
 			if (isset($_SESSION['lvs'][$module]["viewname"]) && $_SESSION['lvs'][$module]["viewname"] != '') {
@@ -938,7 +938,7 @@ class CustomView extends CRMEntity {
 
 					$advFilterColumn = $criteria['columnname'];
 					$advFilterComparator = $criteria['comparator'];
-					$advFilterColumnCondition = $criteria['column_condition'];
+					$advFilterColumnCondition = isset($criteria['column_condition'])? $criteria['column_condition'] : null;
 
 					$columnInfo = explode(":", $advFilterColumn);
 					$fieldName = $columnInfo[2];
@@ -946,6 +946,7 @@ class CustomView extends CRMEntity {
 					$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
 					preg_match('/(\w+) ; \((\w+)\) (\w+)/', $fieldName, $matches);
 
+					$referenceParentField = null;
 					if (count($matches) != 0) {
 						list($full, $referenceParentField, $referenceModule, $referenceFieldName) = $matches;
 					}
@@ -1937,7 +1938,7 @@ class CustomView extends CRMEntity {
 			if (trim($block_label) == '') {
 				$block_info[$pre_block_label] = $block_info[$pre_block_label] . "," . $block_result['block'];
 			} else {
-				$lan_block_label = $current_mod_strings[$block_label];
+				$lan_block_label = isset($current_mod_strings[$block_label])? $current_mod_strings[$block_label] : $block_label;
 				if (isset($block_info[$lan_block_label]) && $block_info[$lan_block_label] != '') {
 					$block_info[$lan_block_label] = $block_info[$lan_block_label] . "," . $block_result['block'];
 				} else {
diff --git a/modules/Settings/Picklist/models/Module.php b/modules/Settings/Picklist/models/Module.php
index 81f5e76e9..384ada451 100644
--- a/modules/Settings/Picklist/models/Module.php
+++ b/modules/Settings/Picklist/models/Module.php
@@ -538,6 +538,7 @@ class Settings_Picklist_Module_Model extends Vtiger_Module_Model {
 	public static function getPicklistColorByValue($fieldName, $fieldValue) {
 		$db = PearDatabase::getInstance();
 		$tableName = "vtiger_$fieldName";
+		$color = '';
 		if(Vtiger_Utils::CheckTable($tableName)) {
 			$colums = $db->getColumnNames($tableName);
 			$fieldValue = decode_html($fieldValue);
diff --git a/modules/Vtiger/models/Block.php b/modules/Vtiger/models/Block.php
index ea842ea92..9823253c1 100644
--- a/modules/Vtiger/models/Block.php
+++ b/modules/Vtiger/models/Block.php
@@ -19,7 +19,7 @@ class Vtiger_Block_Model extends Vtiger_Block {
             $this->fields = array();
             
             // if block does not contains any fields 
-            if(!is_array($moduleFields[$this->id])){
+            if(!isset($moduleFields[$this->id]) || !is_array($moduleFields[$this->id])){
                 $moduleFields[$this->id] = array();
             }
             
diff --git a/modules/Vtiger/models/Field.php b/modules/Vtiger/models/Field.php
index 455c08d67..da6d0b0bf 100644
--- a/modules/Vtiger/models/Field.php
+++ b/modules/Vtiger/models/Field.php
@@ -75,14 +75,14 @@ class Vtiger_Field_Model extends Vtiger_Field {
 	}
 
 	public function getModule() {
-		if(!$this->module) {
+		if(!isset($this->module) || !$this->module) {
 			$moduleObj = $this->block->module;
 			if(empty($moduleObj)) {
 				return false;
 			}
 			$this->module = Vtiger_Module_Model::getInstanceFromModuleObject($moduleObj);
 		}
-		return $this->module;
+		return isset($this->module) ? $this->module : null;
 	}
 
 	public function setModule($moduleInstance) {
@@ -95,7 +95,7 @@ class Vtiger_Field_Model extends Vtiger_Field {
 	 * @return <String> - converted display value
 	 */
 	public function getDisplayValue($value, $record=false, $recordInstance = false) {
-		if(!$this->uitype_instance) {
+		if(!isset($this->uitype_instance) || !$this->uitype_instance) {
 			$this->uitype_instance = Vtiger_Base_UIType::getInstanceFromField($this);
 		}
 		$uiTypeInstance = $this->uitype_instance;
@@ -144,7 +144,7 @@ class Vtiger_Field_Model extends Vtiger_Field {
 	 * @return <String> Data type of the field
 	 */
 	public function getFieldDataType() {
-		if(!$this->fieldDataType) {
+		if(!isset($this->fieldDataType) || !$this->fieldDataType) {
 			$uiType = $this->get('uitype');
 			if($uiType == '69') {
 				$fieldDataType = 'image';
@@ -172,7 +172,7 @@ class Vtiger_Field_Model extends Vtiger_Field {
 			}
 			$this->fieldDataType = $fieldDataType;
 		}
-		return $this->fieldDataType;
+		return isset($this->fieldDataType) ? $this->fieldDataType : null;
 	}
 
 	/**
@@ -398,7 +398,7 @@ class Vtiger_Field_Model extends Vtiger_Field {
 	public function isQuickCreateEnabled() {
 		$moduleModel = $this->getModule();
 		$quickCreate = $this->get('quickcreate');
-		if(($quickCreate == self::QUICKCREATE_MANDATORY || $quickCreate == self::QUICKCREATE_ENABLED
+		if($moduleModel && ($quickCreate == self::QUICKCREATE_MANDATORY || $quickCreate == self::QUICKCREATE_ENABLED
 				|| $this->isMandatory()) && $this->get('uitype') != 69) {
 			//isQuickCreateSupported will not be there for settings
 			if(method_exists($moduleModel,'isQuickCreateSupported') && $moduleModel->isQuickCreateSupported()) {
@@ -949,7 +949,10 @@ class Vtiger_Field_Model extends Vtiger_Field {
 
 			foreach($fieldObjects as $fieldObject){
 				$fieldModelObject= self::getInstanceFromFieldObject($fieldObject);
-				$fieldModelList[$fieldModelObject->get('block')->id][] = $fieldModelObject;
+				$block = $fieldModelObject->get('block');
+				if ($block) {
+					$fieldModelList[$block->id][] = $fieldModelObject;
+				}
 				Vtiger_Cache::set('field-'.$moduleModel->getId(),$fieldModelObject->getId(),$fieldModelObject);
 				Vtiger_Cache::set('field-'.$moduleModel->getId(),$fieldModelObject->getName(),$fieldModelObject);
 			}
@@ -1062,7 +1065,7 @@ class Vtiger_Field_Model extends Vtiger_Field {
 			case 'start_period'			:	$funcName = array('name' => 'lessThanDependentField', 'params' => array('end_period'));
 											break;
 		}
-		if ($funcName) {
+		if (isset($funcName) && $funcName) {
 			array_push($validator, $funcName);
 		}
 		return $validator;
@@ -1074,7 +1077,7 @@ class Vtiger_Field_Model extends Vtiger_Field {
 	 * @return <String> - converted display value
 	 */
 	public function getEditViewDisplayValue($value) {
-		if(!$this->uitype_instance) {
+		if(!isset($this->uitype_instance) || !$this->uitype_instance) {
 			$this->uitype_instance = Vtiger_Base_UIType::getInstanceFromField($this);
 		}
 		$uiTypeInstance = $this->uitype_instance;
diff --git a/modules/Vtiger/models/ListView.php b/modules/Vtiger/models/ListView.php
index 420319a7a..0d5bf538c 100644
--- a/modules/Vtiger/models/ListView.php
+++ b/modules/Vtiger/models/ListView.php
@@ -144,7 +144,7 @@ class Vtiger_ListView_Model extends Vtiger_Base_Model {
 		$headerFields = $listViewContoller->getListViewHeaderFields();
 		foreach($headerFields as $fieldName => $webserviceField) {
 			if($webserviceField && !in_array($webserviceField->getPresence(), array(0,2))) continue;
-			if($webserviceField && $webserviceField->parentReferenceField && !in_array($webserviceField->parentReferenceField->getPresence(), array(0,2))){
+			if($webserviceField && isset($webserviceField->parentReferenceField) && !in_array($webserviceField->parentReferenceField->getPresence(), array(0,2))){
 				continue;
 			}
 			if($webserviceField->getDisplayType() == '6') continue;
@@ -534,7 +534,7 @@ class Vtiger_ListView_Model extends Vtiger_Base_Model {
 	}
 
 	public function getSortParamsSession($key) {
-		return $_SESSION[$key];
+		return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
 			}
 
 	public function setSortParamsSession($key, $params) {
diff --git a/modules/Vtiger/models/Module.php b/modules/Vtiger/models/Module.php
index 2e7d26d4c..af7b87b2e 100644
--- a/modules/Vtiger/models/Module.php
+++ b/modules/Vtiger/models/Module.php
@@ -1389,7 +1389,7 @@ class Vtiger_Module_Model extends Vtiger_Module {
 	 * @return <Array> list of field models <Vtiger_Field_Model>
 	 */
 	public function getSummaryViewFieldsList() {
-		if (!$this->summaryFields) {
+		if (!isset($this->summaryFields) || !$this->summaryFields) {
 			$summaryFields = array();
 			$fields = $this->getFields();
 			foreach ($fields as $fieldName => $fieldModel) {
@@ -1407,7 +1407,7 @@ class Vtiger_Module_Model extends Vtiger_Module {
 	 * @return <Array> list of field models <Vtiger_Field_Model>
 	 */
 	public function getHeaderViewFieldsList() {
-		if (!$this->headerFields) {
+		if (!isset($this->headerFields) || !$this->headerFields) {
 			$headerFields = array();
 			$fields = $this->getFields();
 			foreach ($fields as $fieldName => $fieldModel) {
@@ -1425,7 +1425,7 @@ class Vtiger_Module_Model extends Vtiger_Module {
 	 * @return <Array> list of field models <Vtiger_Field_Model>
 	 */
 	public function getHeaderAndSummaryViewFieldsList() {
-		if(!$this->relationListViewFields) {
+		if(!isset($this->relationListViewFields) || !$this->relationListViewFields) {
 			$summaryViewFields = $this->getSummaryViewFieldsList();
 			$headerViewFields = $this->getHeaderViewFieldsList();
 			$allRelationListViewFields = array_merge($headerViewFields,$summaryViewFields);
diff --git a/modules/Vtiger/models/Paging.php b/modules/Vtiger/models/Paging.php
index f9ff37ac7..993012a00 100644
--- a/modules/Vtiger/models/Paging.php
+++ b/modules/Vtiger/models/Paging.php
@@ -67,7 +67,7 @@ class Vtiger_Paging_Model extends Vtiger_Base_Model {
 	 */
 	function getRecordStartRange() {
 		$rangeInfo = $this->getRecordRange();
-		return $rangeInfo['start'];
+		return isset($rangeInfo) ? $rangeInfo['start'] : 0;
 	}
 
 	/**
@@ -76,7 +76,7 @@ class Vtiger_Paging_Model extends Vtiger_Base_Model {
 	 */
 	function getRecordEndRange() {
 		$rangeInfo = $this->getRecordRange();
-		return $rangeInfo['end'];
+		return isset($rangeInfo) ? $rangeInfo['end'] : 0;
 	}
 
 	/**
diff --git a/modules/Vtiger/models/RelationListView.php b/modules/Vtiger/models/RelationListView.php
index ebeacaa34..84b7c6d5e 100644
--- a/modules/Vtiger/models/RelationListView.php
+++ b/modules/Vtiger/models/RelationListView.php
@@ -331,7 +331,7 @@ class Vtiger_RelationListView_Model extends Vtiger_Base_Model {
 				}
 				$query = "$query ORDER BY $qualifiedOrderBy $sortOrder";
 			}
-		} else if(empty($orderBy) && empty($sortOrder) && $moduleName != "Users") {
+		} else if(empty($orderBy) && empty($sortOrder) && $relationModuleName != "Users") {
 			$query .= ' ORDER BY vtiger_crmentity.modifiedtime DESC';
 		}
 
diff --git a/modules/Vtiger/views/Detail.php b/modules/Vtiger/views/Detail.php
index 1d8411a88..6221eb4df 100644
--- a/modules/Vtiger/views/Detail.php
+++ b/modules/Vtiger/views/Detail.php
@@ -495,7 +495,7 @@ class Vtiger_Detail_View extends Vtiger_Index_View {
 			$rollupsettings = ModComments_Module_Model::getRollupSettingsForUser($currentUserModel, $moduleName);
 		}
 
-		if($rollupsettings['rollup_status']) {
+		if(isset($rollupsettings['rollup_status']) && $rollupsettings['rollup_status']) {
 			$parentRecordModel = Vtiger_Record_Model::getInstanceById($parentId, $moduleName);
 			$recentComments = $parentRecordModel->getRollupCommentsForModule(0, 6);
 		}else {
@@ -520,8 +520,10 @@ class Vtiger_Detail_View extends Vtiger_Index_View {
 		$viewer->assign('MAX_UPLOAD_LIMIT_MB', Vtiger_Util_Helper::getMaxUploadSize());
 		$viewer->assign('MAX_UPLOAD_LIMIT_BYTES', Vtiger_Util_Helper::getMaxUploadSizeInBytes());
 		$viewer->assign('COMMENTS_MODULE_MODEL', $modCommentsModel);
-		$viewer->assign('ROLLUP_STATUS', $rollupsettings['rollup_status']);
-		$viewer->assign('ROLLUPID', $rollupsettings['rollupid']);
+		$viewer->assign('ROLLUP_STATUS', isset($rollupsettings['rollup_status']) ? 
+			$rollupsettings['rollup_status'] : false);
+		$viewer->assign('ROLLUPID', isset($rollupsettings['rollupid']) ?
+			$rollupsettings['rollupid'] : 0);
 		$viewer->assign('PARENT_RECORD', $parentId);
 
 		return $viewer->view('RecentComments.tpl', $moduleName, 'true');
diff --git a/modules/Vtiger/views/List.php b/modules/Vtiger/views/List.php
index c889cb7c4..6420da053 100644
--- a/modules/Vtiger/views/List.php
+++ b/modules/Vtiger/views/List.php
@@ -39,7 +39,7 @@ class Vtiger_List_View extends Vtiger_Index_View {
 		}
 
 		$viewer = $this->getViewer($request);
-		$cvId = $this->viewName;
+		$cvId = isset($this->viewName) ? $this->viewName : 0;
 
 		if(!$cvId) {
 			$customView = new CustomView();
@@ -56,7 +56,7 @@ class Vtiger_List_View extends Vtiger_Index_View {
                 $this->listViewModel = Vtiger_ListView_Model::getInstance($moduleName, $cvId, $listHeaders);
 		$orderParams = $this->listViewModel->getSortParamsSession($listViewSessionKey);
 
-		if(empty($listHeaders)) {
+		if(empty($listHeaders) && is_array($orderParams)) {
 			$listHeaders = $orderParams['list_headers'];
 		}
 
@@ -216,12 +216,12 @@ class Vtiger_List_View extends Vtiger_Index_View {
 			$orderBy = '';
 			$sortOrder = '';
 		}
-		if(empty($listHeaders)) {
+		if(empty($listHeaders) && is_array($orderParams)) {
 			$listHeaders = $orderParams['list_headers'];
 		}
                 
                 
-		if(!empty($tag) && empty($tagParams)){
+		if(!empty($tag) && empty($tagParams) && is_array($orderParams)){
                     $tagParams = $orderParams['tag_params'];
 		}
                 
@@ -363,15 +363,15 @@ class Vtiger_List_View extends Vtiger_Index_View {
 		}
 		$viewer->assign('PAGE_NUMBER',$pageNumber);
 
-		if(!$this->moduleFieldStructure) {
+		if(!isset($this->moduleFieldStructure) || !$this->moduleFieldStructure) {
 			$recordStructure = Vtiger_RecordStructure_Model::getInstanceForModule($listViewModel->getModule(), Vtiger_RecordStructure_Model::RECORD_STRUCTURE_MODE_FILTER);
 			$this->moduleFieldStructure = $recordStructure->getStructure();   
 		}
 
-		if(!$this->tags) {
+		if(!isset($this->tags) || !$this->tags) {
 			$this->tags = Vtiger_Tag_Model::getAllAccessible($currentUser->id, $moduleName);
 		}
-		if(!$this->allUserTags) {
+		if(!isset($this->allUserTags) || !$this->allUserTags) {
 			$this->allUserTags = Vtiger_Tag_Model::getAllUserTags($currentUser->getId());
 		}
 
diff --git a/pkg/vtiger/modules/ModTracker/modules/ModTracker/ModTracker.php b/pkg/vtiger/modules/ModTracker/modules/ModTracker/ModTracker.php
index ab9c5d957..49e4b647c 100644
--- a/pkg/vtiger/modules/ModTracker/modules/ModTracker/ModTracker.php
+++ b/pkg/vtiger/modules/ModTracker/modules/ModTracker/ModTracker.php
@@ -231,7 +231,7 @@ class ModTracker {
 	 */
 	static function getVisibilityForModule($tabid){
 		if (isset(self::$__cache_modtracker[$tabid])) {
-			return $__cache_modtracker[$tabid]['visible'];
+			return self::$__cache_modtracker[$tabid]['visible'];
 		}
 		return false;
 	}
diff --git a/pkg/vtiger/modules/ModTracker/modules/ModTracker/models/Record.php b/pkg/vtiger/modules/ModTracker/modules/ModTracker/models/Record.php
index 0c7b5c229..380baa9df 100644
--- a/pkg/vtiger/modules/ModTracker/modules/ModTracker/models/Record.php
+++ b/pkg/vtiger/modules/ModTracker/modules/ModTracker/models/Record.php
@@ -143,7 +143,7 @@ class ModTracker_Record_Model extends Vtiger_Record_Model {
 		return $relationInstance;
 	}
         
-	public function getTotalRecordCount($recordId) {
+	public static function getTotalRecordCount($recordId) {
     	$db = PearDatabase::getInstance();
         $result = $db->pquery("SELECT COUNT(*) AS count FROM vtiger_modtracker_basic WHERE crmid = ?", array($recordId));
         return $db->query_result($result, 0, 'count');
diff --git a/vtlib/Vtiger/FieldBasic.php b/vtlib/Vtiger/FieldBasic.php
index a7df23891..4423a0445 100644
--- a/vtlib/Vtiger/FieldBasic.php
+++ b/vtlib/Vtiger/FieldBasic.php
@@ -252,7 +252,7 @@ class Vtiger_FieldBasic {
 	 * Get module name to which this field instance is associated
 	 */
 	function getModuleName() {
-		return $this->block->module->name;
+		return $this->block && $this->block->module ? $this->block->module->name : "";
 	}
 
 	/**
-- 
GitLab