From f7bb22156be22d38b2717d96e53dd8f2627242eb Mon Sep 17 00:00:00 2001
From: satish <satish.dvnk@vtiger.com>
Date: Wed, 27 Jul 2016 11:59:04 +0530
Subject: [PATCH] Throwing warning "require_once failed to open stream no such
 file or directory" in Google Sync

---
 packages/vtiger/optional/Google.zip           | Bin 70491 -> 72813 bytes
 .../Google/modules/Google/handlers/Vtiger.php | 123 ++++++++++++++++++
 .../modules/Google/handlers/VtigerSync.php    |  15 +++
 .../Google/modules/Google/views/List.php      |   2 +-
 4 files changed, 139 insertions(+), 1 deletion(-)
 create mode 100644 pkg/vtiger/modules/Google/modules/Google/handlers/Vtiger.php
 create mode 100644 pkg/vtiger/modules/Google/modules/Google/handlers/VtigerSync.php

diff --git a/packages/vtiger/optional/Google.zip b/packages/vtiger/optional/Google.zip
index 23cc620f01c5d57a8f4cc9430898022c150dff12..3d1ae659a25bbfe011a50e6316f84c8e22846658 100644
GIT binary patch
delta 11057
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
F_kSyr)%gGb

delta 8757
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
C=Z9_p

diff --git a/pkg/vtiger/modules/Google/modules/Google/handlers/Vtiger.php b/pkg/vtiger/modules/Google/modules/Google/handlers/Vtiger.php
new file mode 100644
index 000000000..680b6f847
--- /dev/null
+++ b/pkg/vtiger/modules/Google/modules/Google/handlers/Vtiger.php
@@ -0,0 +1,123 @@
+<?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.
+ *************************************************************************************/
+vimport('~~/modules/WSAPP/Handlers/vtigerCRMHandler.php');
+vimport('~~/include/Webservices/Utils.php');
+class Google_Vtiger_Handler extends vtigerCRMHandler {
+	public function put($recordDetails, $user) {
+        global $current_user;
+        $current_user = $user;
+        $this->user = $user;
+        $recordDetails = $this->syncToNativeFormat($recordDetails);
+        $createdRecords = $recordDetails['created'];
+        $updatedRecords = $recordDetails['updated'];
+        $deletedRecords = $recordDetails['deleted'];
+
+        if (count($createdRecords) > 0) {
+            $createdRecords = $this->translateReferenceFieldNamesToIds($createdRecords, $user);
+            $createdRecords = $this->fillNonExistingMandatoryPicklistValues($createdRecords);
+            $createdRecords = $this->fillMandatoryFields($createdRecords, $user);
+        }
+        foreach ($createdRecords as $index => $record) {
+			try {
+				$createdRecords[$index] = vtws_create($record['module'], $record, $this->user);
+			} catch (Exception $ex) {
+				unset($createdRecords[$index]);
+				continue;
+			}
+        }
+
+        if (count($updatedRecords) > 0) {
+            $updatedRecords = $this->translateReferenceFieldNamesToIds($updatedRecords, $user);
+        }
+
+        $crmIds = array();
+        foreach ($updatedRecords as $index => $record) {
+            $webserviceRecordId = $record["id"];
+            $recordIdComp = vtws_getIdComponents($webserviceRecordId);
+            $crmIds[] = $recordIdComp[1];
+        }
+        $assignedRecordIds = array();
+        if ($this->isClientUserSyncType()|| $this->isClientUserAndGroupSyncType()) {
+            $assignedRecordIds = wsapp_checkIfRecordsAssignToUser($crmIds, $this->user->id);
+			// To check if the record assigned to group
+            if($this->isClientUserAndGroupSyncType()){                
+                $groupIds = $this->getGroupIds($this->user->id);
+                foreach ($groupIds as $group) {
+                    $groupRecordId = wsapp_checkIfRecordsAssignToUser($crmIds, $group);
+                    $assignedRecordIds = array_merge($assignedRecordIds, $groupRecordId);
+                }
+            }
+			//  End
+        }
+        foreach ($updatedRecords as $index => $record) {
+            $webserviceRecordId = $record["id"];
+			//While Updating Vtiger Record, should not update these values for event
+			if($record['module'] == 'Events') {
+				unset($record['eventstatus']);
+				unset($record['activitytype']);
+				unset($record['duration_hours']);
+			}
+            $recordIdComp = vtws_getIdComponents($webserviceRecordId);
+            try {
+                if (in_array($recordIdComp[1], $assignedRecordIds)) {
+                    $updatedRecords[$index] = vtws_revise($record, $this->user);
+                } else if (!$this->isClientUserSyncType()) {
+                    $updatedRecords[$index] = vtws_revise($record, $this->user);
+                } else {
+                    $this->assignToChangedRecords[$index] = $record;
+                }
+            } catch (Exception $e) {
+				unset($updatedRecords[$index]);
+                continue;
+            }
+        }
+        $hasDeleteAccess = null;
+        $deletedCrmIds = array();
+        foreach ($deletedRecords as $index => $record) {
+            $webserviceRecordId = $record;
+            $recordIdComp = vtws_getIdComponents($webserviceRecordId);
+            $deletedCrmIds[] = $recordIdComp[1];
+        }
+        $assignedDeletedRecordIds = wsapp_checkIfRecordsAssignToUser($deletedCrmIds, $this->user->id);
+        
+        // To get record id's assigned to group of the current user
+        if($this->isClientUserAndGroupSyncType()){
+           foreach ($groupIds as $group) {
+                   $groupRecordId = wsapp_checkIfRecordsAssignToUser($deletedCrmIds, $group);
+                   $assignedDeletedRecordIds = array_merge($assignedDeletedRecordIds, $groupRecordId);
+           }
+        }
+        // End
+        
+        foreach ($deletedRecords as $index => $record) {
+            $idComp = vtws_getIdComponents($record);
+            if (empty($hasDeleteAccess)) {
+                $handler = vtws_getModuleHandlerFromId($idComp[0], $this->user);
+                $meta = $handler->getMeta();
+                $hasDeleteAccess = $meta->hasDeleteAccess();
+            }
+            if ($hasDeleteAccess) {
+                if (in_array($idComp[1], $assignedDeletedRecordIds)) {
+                    try {
+                        vtws_delete($record, $this->user);
+                    } catch (Exception $e) {
+						unset($deletedRecords[$index]);
+                        continue;
+                    }
+                }
+            }
+        }
+
+        $recordDetails['created'] = $createdRecords;
+        $recordDetails['updated'] = $updatedRecords;
+        $recordDetails['deleted'] = $deletedRecords;
+        return $this->nativeToSyncFormat($recordDetails);
+    }
+}
diff --git a/pkg/vtiger/modules/Google/modules/Google/handlers/VtigerSync.php b/pkg/vtiger/modules/Google/modules/Google/handlers/VtigerSync.php
new file mode 100644
index 000000000..ffe28050e
--- /dev/null
+++ b/pkg/vtiger/modules/Google/modules/Google/handlers/VtigerSync.php
@@ -0,0 +1,15 @@
+<?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.
+ *************************************************************************************/
+vimport('~~/modules/WSAPP/synclib/handlers/VtigerSyncEventHandler.php');
+class Google_VtigerSync_Handler extends WSAPP_VtigerSyncEventHandler {
+	public function getSyncServerInstance(){
+		return new Google_SyncServer_Controller();
+	}
+}
diff --git a/pkg/vtiger/modules/Google/modules/Google/views/List.php b/pkg/vtiger/modules/Google/modules/Google/views/List.php
index 35a52e479..5a7a668ab 100644
--- a/pkg/vtiger/modules/Google/modules/Google/views/List.php
+++ b/pkg/vtiger/modules/Google/modules/Google/views/List.php
@@ -51,7 +51,7 @@ class Google_List_View extends Vtiger_PopupAjax_View {
         $oauth2 = new Google_Oauth2_Connector($sourceModule); 
         if ($request->has('oauth_verifier')) {
             try {
-                $oauth->getHttpClient($sourceModule);
+                $oauth2->getHttpClient($sourceModule);
             } catch (Exception $e) {
                 $viewer->assign('DENY', true);
             }
-- 
GitLab