From 9526c9beff1509e5328859262bfb5337fb3873ec Mon Sep 17 00:00:00 2001 From: satish <satish.dvnk@vtiger.com> Date: Fri, 31 Mar 2017 19:15:38 +0530 Subject: [PATCH] Email Templates and google issues fixed --- layouts/v7/modules/Reports/ScheduleReport.tpl | 4 +- packages/vtiger/optional/EmailTemplates.zip | Bin 73016 -> 72794 bytes packages/vtiger/optional/Google.zip | Bin 73425 -> 73380 bytes .../DefaultContentForTemplates.tpl | 17 +-------- .../modules/Google/connectors/Oauth.php | 28 +++++++------- .../modules/Google/connectors/Oauth2.php | 36 +++++++++--------- .../Google/modules/Google/helpers/Utils.php | 2 +- .../Google/modules/Google/models/Contacts.php | 1 + .../Google/modules/Google/models/Module.php | 2 +- 9 files changed, 37 insertions(+), 53 deletions(-) diff --git a/layouts/v7/modules/Reports/ScheduleReport.tpl b/layouts/v7/modules/Reports/ScheduleReport.tpl index fbf5be99a..d60695a0c 100644 --- a/layouts/v7/modules/Reports/ScheduleReport.tpl +++ b/layouts/v7/modules/Reports/ScheduleReport.tpl @@ -163,11 +163,11 @@ </div> {/if} {if $SCHEDULEDREPORTS->get('next_trigger_time')} - <div class="col-lg-12"> + <div class="col-lg-12" style="padding:5px 0px 10px 0px;"> <div class='col-lg-3'> <span class=''>{vtranslate('LBL_NEXT_TRIGGER_TIME', $MODULE)}</span> </div> - <div class='span'> + <div class='col-lg-5'> {$SCHEDULEDREPORTS->getNextTriggerTimeInUserFormat()}<span> ({$CURRENT_USER->time_zone})</span> </div> </div> diff --git a/packages/vtiger/optional/EmailTemplates.zip b/packages/vtiger/optional/EmailTemplates.zip index 7067bee08933e07fc57493687e2390933deb1422..ed7ead222091a8cc6179a6afc2a0e412354c8fc1 100644 GIT binary patch delta 2142 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 LLm(&sfTF(vVr)Xb delta 2299 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 F{Rd;siC+K! diff --git a/packages/vtiger/optional/Google.zip b/packages/vtiger/optional/Google.zip index c44156b2ef0cde5e1c71ef28807ebe880966765c..1e046d6e2f75180dc633dcc58f7b215fdb1c23f5 100644 GIT binary patch delta 12471 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 delta 12319 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 diff --git a/pkg/vtiger/modules/EmailTemplates/layouts/v7/modules/EmailTemplates/DefaultContentForTemplates.tpl b/pkg/vtiger/modules/EmailTemplates/layouts/v7/modules/EmailTemplates/DefaultContentForTemplates.tpl index df728714d..c2f176ba4 100644 --- a/pkg/vtiger/modules/EmailTemplates/layouts/v7/modules/EmailTemplates/DefaultContentForTemplates.tpl +++ b/pkg/vtiger/modules/EmailTemplates/layouts/v7/modules/EmailTemplates/DefaultContentForTemplates.tpl @@ -21,21 +21,6 @@ <center> <table border="0" cellpadding="0" cellspacing="0" class="borderGrey" width="600px"> <tbody> - <tr> - <td colspan="6"><!-- Begin Pre header --> - <table border="0" cellpadding="5" cellspacing="0" height="52" style="font-family: Helvetica,Verdana,sans-serif; font-size: 10px; color: rgb(102, 102, 102); background-color: rgb(232, 245, 254);" width="597"> - <tbody> - <tr> - <td> - <div>Use this area to offer a short teaser of your email's content. Text here will show in the preview area<br /> - of some email clients.</div> - </td> - <td><a href="{$VIEW_IN_BROWSER_TAG}" target="_blank">View in browser</a></td> - </tr> - </tbody> - </table> - <!-- // End Pre header \ --></td> - </tr> <tr style="height:50px;"> <td colspan="6" style="border-top: 1px solid #ddd; font-family: Helvetica,Verdana,sans-serif"></td> </tr> @@ -54,7 +39,7 @@ <tr> <td valign="top" width="350px"> <center> - <div><em>Copyright © 2014 {if !(empty($WEBSITE_URL))}<a href="{$WEBSITE_URL}" target="_blank">{$WEBSITE_URL}</a>{else}your company.com{/if}, All rights reserved.</em></div> + <div><em>Copyright © {date('Y')} {if !(empty($WEBSITE_URL))}<a href="{$WEBSITE_URL}" target="_blank">{$WEBSITE_URL}</a>{else}your company.com{/if}, All rights reserved.</em></div> </center> </td> </tr> diff --git a/pkg/vtiger/modules/Google/modules/Google/connectors/Oauth.php b/pkg/vtiger/modules/Google/modules/Google/connectors/Oauth.php index cdae95dd1..537440dd7 100644 --- a/pkg/vtiger/modules/Google/modules/Google/connectors/Oauth.php +++ b/pkg/vtiger/modules/Google/modules/Google/connectors/Oauth.php @@ -31,6 +31,8 @@ class Google_Oauth_Connector { protected $_oauthOptions = array( 'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 'version' => '1.0', + 'consumerKey' => '639253257022.apps.googleusercontent.com', + 'consumerSecret' => 'CxnOsnYx_RNyTWVfzTIenmhQ', 'signatureMethod' => 'HMAC-SHA1', 'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken', 'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken', @@ -45,8 +47,6 @@ class Google_Oauth_Connector { self::initializeSchema(); $this->userId = $userId; $this->_oauthOptions['callbackUrl'] = $callbackUrl; - $this->_oauthOptions['consumerKey'] = VtigerConfig::getOD('GOOGLESYNC_CONSUMER_KEY'); - $this->_oauthOptions['consumerSecret'] = VtigerConfig::getOD('GOOGLESYNC_CONSUMER_SECRET'); $this->db = PearDatabase::getInstance(); } @@ -77,15 +77,15 @@ class Google_Oauth_Connector { $this->userId = Users_Record_Model::getCurrentUserModel()->getId(); if (!$accessToken && !$requestToken){ - $query = "SELECT 1 FROM vtiger_app_oauth1 WHERE userid=? and service=?"; + $query = "SELECT 1 FROM vtiger_google_oauth WHERE userid=? and service=?"; $params = array($this->userId, $service); } else if ($accessToken){ - $query = "SELECT access_token FROM vtiger_app_oauth1 WHERE userid=? and service=? AND access_token<>? AND access_token IS NOT NULL"; + $query = "SELECT access_token FROM vtiger_google_oauth WHERE userid=? and service=? AND access_token<>? AND access_token IS NOT NULL"; $params = array($this->userId, $service, ''); } else if ($requestToken){ - $query = "SELECT request_token FROM vtiger_app_oauth1 WHERE userid=? and service=? AND request_token<>? AND request_token IS NOT NULL"; + $query = "SELECT request_token FROM vtiger_google_oauth WHERE userid=? and service=? AND request_token<>? AND request_token IS NOT NULL"; $params = array($this->userId, $service, ''); } $result = $this->db->pquery($query, $params); @@ -103,10 +103,10 @@ class Google_Oauth_Connector { */ protected function storeAccessToken($service, $token) { $user = Users_Record_Model::getCurrentUserModel(); - $query = "INSERT INTO vtiger_app_oauth1(service,access_token,userid) VALUES(?,?,?)"; + $query = "INSERT INTO vtiger_google_oauth(service,access_token,userid) VALUES(?,?,?)"; $params = array($service, base64_encode(serialize($token)), $user->getid()); if (self::hasStoredToken($service, false, true)) { - $query = "UPDATE vtiger_app_oauth1 SET access_token=? WHERE userid=? AND service=?"; + $query = "UPDATE vtiger_google_oauth SET access_token=? WHERE userid=? AND service=?"; $params = array(base64_encode(serialize($token)), $user->getId(), $service); } @@ -117,7 +117,7 @@ class Google_Oauth_Connector { if(!$this->userId) $this->userId = Users_Record_Model::getCurrentUserModel()->getId(); - $query = "SELECT access_token FROM vtiger_app_oauth1 WHERE userid=? AND service =?"; + $query = "SELECT access_token FROM vtiger_google_oauth WHERE userid=? AND service =?"; $params = array($this->userId, $service); $result = $this->db->pquery($query, $params); @@ -128,10 +128,10 @@ class Google_Oauth_Connector { protected function storeRequestToken($service, $token) { $user = Users_Record_Model::getCurrentUserModel(); - $query = "DELETE FROM vtiger_app_oauth1 where service=? and userid=?"; + $query = "DELETE FROM vtiger_google_oauth where service=? and userid=?"; $this->db->pquery($query, array($service, $user->getId())); - $query = "INSERT INTO vtiger_app_oauth1(service,request_token,userid) values(?,?,?)"; + $query = "INSERT INTO vtiger_google_oauth(service,request_token,userid) values(?,?,?)"; $this->db->pquery($query, array($service, base64_encode(serialize($token)), $user->getId())); } @@ -139,7 +139,7 @@ class Google_Oauth_Connector { protected function retrieveRequestToken($service) { $user = Users_Record_Model::getCurrentUserModel(); - $query = "SELECT request_token FROM vtiger_app_oauth1 WHERE userid=? AND service =?"; + $query = "SELECT request_token FROM vtiger_google_oauth WHERE userid=? AND service =?"; $params = array($user->getId(), $service); $result = $this->db->pquery($query, $params); @@ -180,9 +180,9 @@ class Google_Oauth_Connector { public static function initializeSchema(){ - if(!Vtiger_Utils::CheckTable('vtiger_app_oauth1')) { - Vtiger_Utils::CreateTable('vtiger_app_oauth1', - '(service varchar(64),request_token text,access_token text,userid int, serviceid varchar(255), name varchar(255))',true); + if(!Vtiger_Utils::CheckTable('vtiger_google_oauth')) { + Vtiger_Utils::CreateTable('vtiger_google_oauth', + '(service varchar(64),request_token text,access_token text,userid int)',true); } } diff --git a/pkg/vtiger/modules/Google/modules/Google/connectors/Oauth2.php b/pkg/vtiger/modules/Google/modules/Google/connectors/Oauth2.php index 5b59c6456..58d90bf8e 100644 --- a/pkg/vtiger/modules/Google/modules/Google/connectors/Oauth2.php +++ b/pkg/vtiger/modules/Google/modules/Google/connectors/Oauth2.php @@ -54,13 +54,14 @@ class Google_Oauth2_Connector { const OAUTH2_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke'; public function __construct($module,$userId=false) { + global $site_URL; $this->source_module = $module; if($userId) $this->user_id = $userId; $this->service_name = $this->service_provider . $module; - $this->client_id = VtigerConfig::getOD('GOOGLE_SYNC_CLIENT_ID'); - $this->client_secret = VtigerConfig::getOD('GOOGLE_SYNC_CLIENT_SECRET'); - $this->redirect_uri = VtigerConfig::getOD('OAUTH_SERVER_URL'); - $this->scope = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.google.com/m8/feeds https://www.googleapis.com/auth/calendar'; + $this->client_id = Google_Config_Connector::$clientId; + $this->client_secret = Google_Config_Connector::$clientSecret; + $this->redirect_uri = rtrim($site_URL, '/').'/index.php?module=Google&view=List&operation=sync&sourcemodule='.$this->source_module.'&service='.$this->service_name; + $this->scope = $this->scopes[$this->source_module]; } public function getClientId() { @@ -100,9 +101,6 @@ class Google_Oauth2_Connector { 'access_type=' . urlencode($this->access_type), 'approval_prompt=' . urlencode($this->approval_prompt), ); - if (isset($this->state)) { - $params[] = 'state=' . urlencode($this->state); - } $queryString = implode('&', $params); return self::OAUTH2_AUTH_URL . "?$queryString"; } @@ -119,8 +117,8 @@ class Google_Oauth2_Connector { public function getState($source) { global $site_URL; - $callbackUri = $site_URL . '/index.php?module=Google&view=List&operation=sync&sourcemodule=' . - $this->source_module . '&service=' . $source.'&_ignoreOnBoardCompletion=true'; + $callbackUri = rtrim($site_URL, '/') . '/index.php?module=Google&view=List&operation=sync&sourcemodule=' . + $this->source_module . '&service=' . $source; $stateDetails['url'] = $callbackUri; $parse = parse_url($site_URL); $ipAddr = getHostByName($parse['host']); @@ -183,11 +181,11 @@ class Google_Oauth2_Connector { $modulesSupported = array('Contacts', 'Calendar'); foreach($modulesSupported as $moduleName) { $params = array($this->service_provider.$moduleName,$accessToken,$refresh_token,$this->user_id); - $sql = 'INSERT INTO ' . $this->table_name . ' VALUES (' . generateQuestionMarks($params) . ')'; - $this->db->pquery($sql,$params); - } + $sql = 'INSERT INTO ' . $this->table_name . ' VALUES (' . generateQuestionMarks($params) . ')'; + $this->db->pquery($sql,$params); + } } - + protected function retreiveToken() { if(!$this->user_id) $this->user_id = Users_Record_Model::getCurrentUserModel()->getId(); $query = 'SELECT access_token,refresh_token FROM ' . $this->table_name . ' WHERE userid=? AND service =?'; @@ -232,12 +230,12 @@ class Google_Oauth2_Connector { $encodedToken = $this->fireRequest(self::OAUTH2_TOKEN_URI,array(),$params); $decodedToken = json_decode($encodedToken,true); if(!isset($decodedToken['error'])) { - $decodedToken['created'] = time(); - $token['access_token'] = $decodedToken; - $token['refresh_token'] = $this->token['refresh_token']; - $this->updateAccessToken(json_encode($decodedToken),$token['refresh_token']); - $this->setToken($token); - } + $decodedToken['created'] = time(); + $token['access_token'] = $decodedToken; + $token['refresh_token'] = $this->token['refresh_token']; + $this->updateAccessToken(json_encode($decodedToken),$token['refresh_token']); + $this->setToken($token); + } } public function authorize() { diff --git a/pkg/vtiger/modules/Google/modules/Google/helpers/Utils.php b/pkg/vtiger/modules/Google/modules/Google/helpers/Utils.php index 08da62df1..68695c71e 100644 --- a/pkg/vtiger/modules/Google/modules/Google/helpers/Utils.php +++ b/pkg/vtiger/modules/Google/modules/Google/helpers/Utils.php @@ -92,7 +92,7 @@ class Google_Utils_Helper { static function getCallbackUrl($request, $options = array()) { global $site_URL; - $callback = $site_URL . "/index.php?module=" . $request['module'] . "&view=List&sourcemodule=" . $request['sourcemodule']; + $callback = rtrim($site_URL, '/') . "/index.php?module=".$request['module']."&view=List&sourcemodule=".$request['sourcemodule']; foreach ($options as $key => $value) { $callback.="&" . $key . "=" . $value; } diff --git a/pkg/vtiger/modules/Google/modules/Google/models/Contacts.php b/pkg/vtiger/modules/Google/modules/Google/models/Contacts.php index 3d06b8ffa..559f4e0dd 100644 --- a/pkg/vtiger/modules/Google/modules/Google/models/Contacts.php +++ b/pkg/vtiger/modules/Google/modules/Google/models/Contacts.php @@ -195,6 +195,7 @@ class Google_Contacts_Model extends WSAPP_SyncRecordModel { $recordModel->set('mode', ''); $recordModel->set('accountname', $orgName); $recordModel->set('assigned_user_id', $userId); + $recordModel->set('source', 'GOOGLE'); if($description) { $recordModel->set('description', $description); } diff --git a/pkg/vtiger/modules/Google/modules/Google/models/Module.php b/pkg/vtiger/modules/Google/modules/Google/models/Module.php index 81173edec..f841028d1 100755 --- a/pkg/vtiger/modules/Google/modules/Google/models/Module.php +++ b/pkg/vtiger/modules/Google/modules/Google/models/Module.php @@ -11,7 +11,7 @@ class Google_Module_Model extends Vtiger_Module_Model { public static function removeSync($module, $id) { $db = PearDatabase::getInstance(); - $query = "DELETE FROM vtiger_app_oauth1 WHERE service = ? AND userid = ?"; + $query = "DELETE FROM vtiger_google_oauth WHERE service = ? AND userid = ?"; $db->pquery($query, array($module, $id)); } -- GitLab