From 38d85502e7a7be381db3a468726a14a603415d11 Mon Sep 17 00:00:00 2001
From: Uma <uma.s@vtiger.com>
Date: Tue, 10 Dec 2019 18:18:45 +0530
Subject: [PATCH] Fixes #1221 Access to Emails whose sharing access set to
 PRivate

---
 .../modules/Settings/Profiles/DetailView.tpl  |   5 +-
 .../Settings/Profiles/EditViewContents.tpl    |   3 +-
 modules/Migration/models/Module.php           |   1 +
 modules/Migration/schema/720_to_721.php       |  48 ++++++++++++++++++
 modules/Settings/Profiles/models/Record.php   |  12 -----
 packages/vtiger/mandatory/ModTracker.zip      | Bin 16351 -> 16942 bytes
 .../modules/ModTracker/models/Relation.php    |   3 ++
 vtigerversion.php                             |   4 +-
 8 files changed, 57 insertions(+), 19 deletions(-)
 create mode 100644 modules/Migration/schema/720_to_721.php

diff --git a/layouts/v7/modules/Settings/Profiles/DetailView.tpl b/layouts/v7/modules/Settings/Profiles/DetailView.tpl
index 552bee433..f0aa84866 100644
--- a/layouts/v7/modules/Settings/Profiles/DetailView.tpl
+++ b/layouts/v7/modules/Settings/Profiles/DetailView.tpl
@@ -91,7 +91,6 @@
 								</thead>
 								<tbody>
 									{foreach from=$RECORD_MODEL->getModulePermissions() key=TABID item=PROFILE_MODULE}
-										{assign var=IS_RESTRICTED_MODULE value=$RECORD_MODEL->isRestrictedModule($PROFILE_MODULE->getName())}
 										<tr>
 											{assign var=MODULE_PERMISSION value=$RECORD_MODEL->hasModulePermission($PROFILE_MODULE)}
 											<td data-module-name='{$PROFILE_MODULE->getName()}' data-module-status='{$MODULE_PERMISSION}'>
@@ -102,7 +101,7 @@
 												{assign var="ACTION_MODEL" value=$ALL_BASIC_ACTIONS[$ACTION_ID]}
 												{assign var=MODULE_ACTION_PERMISSION value=$RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTION_MODEL)}
 												<td data-action-state='{$ACTION_MODEL->getName()}' data-moduleaction-status='{$MODULE_ACTION_PERMISSION}' style="text-align: center;">
-													{if !$IS_RESTRICTED_MODULE && $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)}
+													{if $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)}
 														<img src="{if $MODULE_ACTION_PERMISSION}{$ENABLE_IMAGE_PATH}{else}{$DISABLE_IMAGE_PATH}{/if}" />
 													{/if}
 												</td>
@@ -220,4 +219,4 @@
 			</div>
 		</div>
 	</div>
-{/strip}
\ No newline at end of file
+{/strip}
diff --git a/layouts/v7/modules/Settings/Profiles/EditViewContents.tpl b/layouts/v7/modules/Settings/Profiles/EditViewContents.tpl
index 0ebabbe07..e6267c44c 100644
--- a/layouts/v7/modules/Settings/Profiles/EditViewContents.tpl
+++ b/layouts/v7/modules/Settings/Profiles/EditViewContents.tpl
@@ -114,7 +114,6 @@
 				{foreach from=$PROFILE_MODULES key=TABID item=PROFILE_MODULE}
 					{assign var=MODULE_NAME value=$PROFILE_MODULE->getName()}
 					{if $MODULE_NAME neq 'Events'}
-						{assign var=IS_RESTRICTED_MODULE value=$RECORD_MODEL->isRestrictedModule($MODULE_NAME)}
 						<tr>
 							<td class="verticalAlignMiddleImp">
 								<input class="modulesCheckBox" type="checkbox" name="permissions[{$TABID}][is_permitted]" data-value="{$TABID}" data-module-state="" {if $RECORD_MODEL->hasModulePermission($PROFILE_MODULE)}checked="true"{else} data-module-unchecked="true" {/if}> {$PROFILE_MODULE->get('label')|vtranslate:$PROFILE_MODULE->getName()}
@@ -124,7 +123,7 @@
 								<td class="textAlignCenter verticalAlignMiddleImp">
 									{assign var="ACTION_MODEL" value=$ALL_BASIC_ACTIONS[$ORDERID]}
 									{assign var=ACTION_ID value=$ACTION_MODEL->get('actionid')}
-									{if !$IS_RESTRICTED_MODULE && $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)}
+									{if $ACTION_MODEL->isModuleEnabled($PROFILE_MODULE)}
 										<input class="action{$ACTION_ID}CheckBox" type="checkbox" name="permissions[{$TABID}][actions][{$ACTION_ID}]" data-action-state="{$ACTION_MODEL->getName()}" {if $RECORD_MODEL->hasModuleActionPermission($PROFILE_MODULE, $ACTION_MODEL)}checked="true"{elseif empty($RECORD_ID) && empty($IS_DUPLICATE_RECORD)} checked="true" {else} data-action{$ACTION_ID}-unchecked="true"{/if}></td>
 									{/if}
 								</td>
diff --git a/modules/Migration/models/Module.php b/modules/Migration/models/Module.php
index 3190eb623..8f9aa4ae1 100644
--- a/modules/Migration/models/Module.php
+++ b/modules/Migration/models/Module.php
@@ -45,6 +45,7 @@ class Migration_Module_Model extends Vtiger_Module_Model {
 			array('710' => '7.1.0'),
             array('711' => '7.1.1'),
             array('720' => '7.2.0'),
+            array('721' => '7.2.1'),
 		);
 		return $versions;
 	}
diff --git a/modules/Migration/schema/720_to_721.php b/modules/Migration/schema/720_to_721.php
new file mode 100644
index 000000000..18310b45a
--- /dev/null
+++ b/modules/Migration/schema/720_to_721.php
@@ -0,0 +1,48 @@
+<?php
+/*+********************************************************************************
+ * The contents of this file are subject to the vtiger CRM Public License Version 1.0
+ * ("License"); You may not use this file except in compliance with the License
+ * The Original Code is: vtiger CRM Open Source
+ * The Initial Developer of the Original Code is vtiger.
+ * Portions created by vtiger are Copyright (C) vtiger.
+ * All Rights Reserved.
+ *********************************************************************************/
+
+if (defined('VTIGER_UPGRADE')) {
+	global $current_user, $adb;
+	$db = PearDatabase::getInstance();
+
+	$actions = array('Save', 'EditView', 'Delete', 'DetailView', 'CreateView');
+    $emailsTabId = getTabid('Emails');
+
+    $actionIds = array();
+    foreach($actions as $actionName) {
+        array_push($actionIds, getActionid($actionName));
+    }
+
+    $profileIdsResult = $db->pquery("SELECT DISTINCT profileid FROM vtiger_profile", array());
+    $profileIdCount = $db->num_rows($profileIdsResult);
+    for($i = 0; $i < $profileIdCount; $i++) {
+        $profileId = $db->query_result($profileIdsResult, $i, 'profileid');
+        foreach($actionIds as $actionId) {
+            $db->pquery("INSERT INTO vtiger_profile2standardpermissions VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE permissions = ?",
+                    array($profileId, $emailsTabId, $actionId, 0, 0));
+        }
+        echo "Emails permission for profile id :: $profileId inserted into vtiger_profile2standardpermissions table.<br>";
+    }
+
+    $db->pquery("UPDATE vtiger_tab SET ownedby = ? WHERE tabid = ?", array(0, $emailsTabId));
+    echo "ownedby value updated to 0 for Emails in vtiger_tab table.<br>";
+    vimport('~modules/Users/CreateUserPrivilegeFile.php');
+    $usersResult = $db->pquery("SELECT id FROM vtiger_users", array());
+    $usersCount = $db->num_rows($usersResult);
+    for($i = 0; $i < $usersCount; $i++) {
+        $userId = $db->query_result($usersResult, $i, 'id');
+        createUserPrivilegesfile($userId); 
+        createUserSharingPrivilegesfile($userId);
+        echo "User privilege and sharing privilege files recreated for user id :: $userId.<br>";
+    }
+
+    Vtiger_Cache::flushAllData();
+    echo "Cache cleared <br>";
+}
\ No newline at end of file
diff --git a/modules/Settings/Profiles/models/Record.php b/modules/Settings/Profiles/models/Record.php
index dcba26e06..a4e4064bf 100644
--- a/modules/Settings/Profiles/models/Record.php
+++ b/modules/Settings/Profiles/models/Record.php
@@ -607,9 +607,6 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 						$db->pquery($utilityInsertQuery, array());
 					}
 				}
-			} elseif ($this->isRestrictedModule($moduleModel->getName())) {
-				//To check the module is restricted or not(Emails, Webmails)
-				$actionEnabled = true;
 			}
 		} else {
 			$actionEnabled = true;
@@ -798,15 +795,6 @@ class Settings_Profiles_Record_Model extends Settings_Vtiger_Record_Model {
 		}
     }
 
-	/**
-	 * Function to check whether module is restricted for to show actions and field access
-	 * @param <String> $moduleName
-	 * @return <boolean> true/false
-	 */
-	public function isRestrictedModule($moduleName) {
-		return in_array($moduleName, array('Emails'));
-	}
-
 	/**
 	 * Function recalculate the sharing rules
 	 */
diff --git a/packages/vtiger/mandatory/ModTracker.zip b/packages/vtiger/mandatory/ModTracker.zip
index 5c601415e360598d1e0d7108c4943669168dbf78..ca620cea7c868acd0016485dad2c45627441df9b 100644
GIT binary patch
delta 4470
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

delta 3849
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

diff --git a/pkg/vtiger/modules/ModTracker/modules/ModTracker/models/Relation.php b/pkg/vtiger/modules/ModTracker/modules/ModTracker/models/Relation.php
index 28219de3a..dcf11bba4 100644
--- a/pkg/vtiger/modules/ModTracker/modules/ModTracker/models/Relation.php
+++ b/pkg/vtiger/modules/ModTracker/modules/ModTracker/models/Relation.php
@@ -24,6 +24,9 @@ class ModTracker_Relation_Model extends Vtiger_Record_Model {
 		$targetId = $this->get('targetid');
 		$targetModule = $this->get('targetmodule');
         
+        if(!Users_Privileges_Model::isPermitted($targetModule, 'DetailView', $targetId)) {
+			return false;
+		}
         $query = 'SELECT * FROM vtiger_crmentity WHERE crmid = ?';
 		$params = array($targetId);
 		$result = $db->pquery($query, $params);
diff --git a/vtigerversion.php b/vtigerversion.php
index 399a93b8b..a6578bc39 100644
--- a/vtigerversion.php
+++ b/vtigerversion.php
@@ -8,9 +8,9 @@
  * All Rights Reserved.
  ************************************************************************************/
 
-$patch_version = '20191104'; // -ve timestamp before release, +ve timestamp after release.
+$patch_version = '-20191210'; // -ve timestamp before release, +ve timestamp after release.
 $modified_database = '';
-$vtiger_current_version = '7.2.0';
+$vtiger_current_version = '7.2.1';
 $_SESSION['vtiger_version'] = $vtiger_current_version;
 
 ?>
\ No newline at end of file
-- 
GitLab