/*+******************************************************************************* * 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. * *********************************************************************************/ Vtiger_Index_Js("Settings_ExtensionStore_ExtensionStore_Js", { showPopover : function(e) { var ele = jQuery(e); var options = { placement : ele.data('position'), trigger : 'hover' }; ele.popover(options); } }, { /** * Function to get import module index params */ getImportModuleIndexParams: function() { var params = { 'module': app.getModuleName(), 'parent': app.getParentModuleName(), 'view': 'ExtensionStore' }; return params; }, /** * Function to get import module with respect to view */ getImportModuleStepView: function(params) { var aDeferred = jQuery.Deferred(); app.helper.showProgress(); app.request.post({data: params}).then( function(error, data) { app.helper.hideProgress(); if(error) { aDeferred.reject(error); } aDeferred.resolve(data); } ); return aDeferred.promise(); }, /** * Function to register raty */ registerRaty: function() { jQuery('.rating').raty({ score: function() { return this.getAttribute('data-score'); }, readOnly: function() { return this.getAttribute('data-readonly'); } }); }, /** * Function to register event for index of import module */ registerEventForIndexView: function() { this.registerRaty(); var detailContentsHolder = jQuery('.contentsDiv'); app.helper.showScroll(jQuery('.extensionDescription'), {'height': '120px', 'width': '100%'}); this.registerEventsForExtensionStore(detailContentsHolder); }, getContainer : function() { return jQuery('.contentsDiv'); }, /** * Function to register event related to Import extrension Modules in index */ registerEventsForExtensionStore: function(container) { var thisInstance = this; thisInstance.registerShowCardInfoEvent(); jQuery(container).find('.installExtension, .installPaidExtension').on('click', function(e) { thisInstance.installExtension(e); }); jQuery('#logintoMarketPlace').off().on('click', function(e) { var loginAccountModal = jQuery(container).find('.loginAccount').clone(true, true); loginAccountModal.removeClass('hide'); app.helper.showProgress(); var callBackFunction = function(data) { app.helper.hideProgress(); jQuery(data).find('[name="signUp"]').on('click', function(e) { var signUpAccountModal = jQuery(container).find('.signUpAccount').clone(true, true); signUpAccountModal.removeClass('hide'); var callBackSignupFunction = function(data) { app.helper.hideModal(); var form = data.find('.signUpForm'); var params = { submitHandler : function(form){ var form = jQuery(form); var password = form.find('input[name=password]').val(); var confirmPassword = form.find('input[name=confirmPassword]').val(); if(password !== confirmPassword) { app.helper.showErrorNotification({"message": app.vtranslate('JS_PASSWORDS_MISMATCH')}); return false; } var formData = form.serializeFormData(); app.helper.showProgress(); app.request.post({'data':formData}).then( function(error,data) { app.helper.hideProgress(); app.helper.hidePopup(); if(error) { app.helper.showErrorNotification({"message": error}); return false; }else{ location.reload(); } } ); } }; form.vtValidate(params); }; app.helper.showPopup(signUpAccountModal,{cb:callBackSignupFunction}); }); jQuery(data).find('#forgotPasswordLink').on('click',function(){ var forgotPasswordModal = jQuery(container).find('.forgotPasswordModal').clone(true, true); forgotPasswordModal.removeClass('hide'); var forgotPasswordCallback = function(data){ app.helper.hideModal(); var forgotPasswordForm = data.find('.forgotPassword'); var params = { submitHandler : function(form){ var formData = jQuery(form).serializeFormData(); app.helper.showProgress(); app.request.post({data:formData}).then( function(error,data) { app.helper.hideProgress(); app.helper.hidePopup(); if(error) { app.helper.showErrorNotification({"message": error}); return false; }else{ app.helper.showSuccessNotification({"message": data.message}); return true; } } ); } }; forgotPasswordForm.vtValidate(params); }; app.helper.showPopup(forgotPasswordModal,{cb:forgotPasswordCallback}); }); var form = jQuery(data).find('.loginForm'); var params = { submitHandler : function(form){ var form = jQuery(form); var formData = form.serializeFormData(); var savePassword = form.find('input[name="savePassword"]:checked').length; if (savePassword) { formData["savePassword"] = true; } else { formData["savePassword"] = false; } app.helper.showProgress(); app.request.post({data:formData}).then( function(error,data) { app.helper.hideProgress(); if(error){ app.helper.showErrorNotification({"message": error}); }else{ app.helper.hideModal(); location.reload(); } } ); } }; form.vtValidate(params); }; app.helper.showModal(loginAccountModal,{cb:callBackFunction}); }); jQuery('#setUpCardDetails').off().on('click',function(e) { var element = jQuery(e.currentTarget); var setUpCardModal = jQuery(container).find('.setUpCardModal').clone(true, true); setUpCardModal.removeClass('hide'); var callback = function(data) { thisInstance.registerSetupCardDetailEvent(data,element); }; app.helper.showModal(setUpCardModal, {cb:callback}); }); jQuery(container).off('click', '.oneclickInstallFree, .oneclickInstallPaid'); jQuery(container).on('click', '.oneclickInstallFree, .oneclickInstallPaid', function(e) { var element = jQuery(e.currentTarget); var extensionContainer = element.closest('.extension_container'); var extensionId = extensionContainer.find('[name="extensionId"]').val(); var moduleAction = extensionContainer.find('[name="moduleAction"]').val(); var extensionName = extensionContainer.find('[name="extensionName"]').val(); if(element.hasClass('loginRequired')){ var loginError = app.vtranslate('JS_PLEASE_LOGIN_TO_MARKETPLACE_FOR_INSTALLING_EXTENSION'); app.helper.showErrorNotification({"message": loginError}); return false; } var params = { 'module': app.getModuleName(), 'parent': app.getParentModuleName(), 'view': 'ExtensionStore', 'mode': 'oneClickInstall', 'extensionId': extensionId, 'moduleAction': moduleAction, 'extensionName': extensionName }; if (element.hasClass('oneclickInstallPaid')) { var trial = element.data('trial'); if (!trial) { var customerCardId = jQuery(container).find('[name="customerCardId"]').val(); if (customerCardId.length == 0) { var cardSetupError = app.vtranslate('JS_PLEASE_SETUP_CARD_DETAILS_TO_INSTALL_THIS_EXTENSION'); app.helper.showErrorNotification({"message": cardSetupError}); return false; } } else { params['trial'] = trial; } } app.helper.showConfirmationBox({message:''+app.vtranslate('JS_ARE_YOU_SURE_INSTALL')+'?'}).then(function(){ thisInstance.getImportModuleStepView(params).then(function(installationLogData) { var callBackFunction = function(data) { var installationStatus = jQuery(data).find('[name="installationStatus"]').val(); if (installationStatus == "success") { if (!trial) { element.closest('span').html('' + app.vtranslate('JS_INSTALLED') + ''); extensionContainer.find('[name="moduleAction"]').val(app.vtranslate('JS_INSTALLED')); } else if ((element.hasClass('oneclickInstallPaid')) && trial) { thisInstance.updateTrialStatus(true, extensionName).then(function(data) { if (data.success) { element.closest('span').prepend('' + app.vtranslate('JS_TRIAL_INSTALLED') + ' '); element.remove(); } }); } else if ((element.hasClass('oneclickInstallPaid')) && (!trial)) { thisInstance.updateTrialStatus(false, extensionName).then(function(data) { if (data.success) { element.closest('span').html('' + app.vtranslate('JS_INSTALLED') + ''); extensionContainer.find('[name="moduleAction"]').val(app.vtranslate('JS_INSTALLED')); } }); } } }; var modalData = { cb: callBackFunction }; app.helper.showModal(installationLogData, modalData); }); }); }); jQuery(container).on('click', '#installLoader', function(e) { var extensionLoaderModal = jQuery(container).find('.extensionLoader').clone(true, true); extensionLoaderModal.removeClass('hide'); app.showModalWindow(extensionLoaderModal); }); }, registerEventForSearchExtension : function(container) { var thisInstance = this; container.on('keydown', '#searchExtension', function(e) { var currentTarget = jQuery(e.currentTarget); if (e.which === 13) { var searchTerm = jQuery.trim(currentTarget.val()); if(!searchTerm) { alert(app.vtranslate('JS_PLEASE_ENTER_SOME_VALUE')); currentTarget.focus(); return false; } var params = { 'module': app.getModuleName(), 'parent': app.getParentModuleName(), 'view': 'ExtensionStore', 'mode': 'searchExtension', 'searchTerm': searchTerm, 'type': 'Extension' }; app.helper.showProgress(); app.request.post({data: params}).then( function(error, data) { app.helper.hideProgress(); jQuery('#extensionContainer').html(data); thisInstance.registerEventForIndexView(); } ); } }); }, updateTrialStatus: function(trialStatus, extensionName) { var trialParams = { 'module': app.getModuleName(), 'parent': app.getParentModuleName(), 'action': 'Basic', 'mode': 'updateTrialMode', 'extensionName': extensionName }; if (trialStatus) { trialParams['trial'] = 1; } else { trialParams['trial'] = 0; } this.getImportModuleStepView(trialParams).then(function(data) { return data; }); }, installExtension: function(e) { var thisInstance = this; var element = jQuery(e.currentTarget); thisInstance.ExtensionDetails(element); }, /** * Function to download Extension */ ExtensionDetails: function(element) { var thisInstance = this; var extensionContainer = element.closest('.extension_container'); var extensionId = extensionContainer.find('[name="extensionId"]').val(); var moduleAction = extensionContainer.find('[name="moduleAction"]').val(); var extensionName = extensionContainer.find('[name="extensionName"]').val(); var params = { 'module': app.getModuleName(), 'parent': app.getParentModuleName(), 'view': 'ExtensionStore', 'mode': 'detail', 'extensionId': extensionId, 'moduleAction': moduleAction, 'extensionName': extensionName }; this.getImportModuleStepView(params).then(function(data) { var detailContentsHolder = jQuery('.contentsDiv'); detailContentsHolder.html(data); thisInstance.registerEventsForExtensionStoreDetail(detailContentsHolder); }); }, /** * Function to register event related to Import extrension Modules in detail */ registerEventsForExtensionStoreDetail: function(container) { var container = jQuery(container); var thisInstance = this; this.registerRaty(); jQuery('.carousel').carousel({ interval: 3000 }); container.find('#installExtension').on('click', function(e) { var element = jQuery(e.currentTarget); if(element.hasClass('loginRequired')){ var loginError = app.vtranslate('JS_PLEASE_LOGIN_TO_MARKETPLACE_FOR_INSTALLING_EXTENSION'); app.helper.showErrorNotification({"message": loginError}); return false; } if(element.hasClass('setUpCard')){ var paidError = app.vtranslate('JS_PLEASE_SETUP_CARD_DETAILS_TO_INSTALL_EXTENSION'); app.helper.showErrorNotification({"message": paidError}); return false; } app.helper.showConfirmationBox({message:''+app.vtranslate('JS_ARE_YOU_SURE_INSTALL')+'?'}).then(function(){ var extensionId = jQuery('[name="extensionId"]').val(); var targetModule = jQuery('[name="targetModule"]').val(); var moduleType = jQuery('[name="moduleType"]').val(); var moduleAction = jQuery('[name="moduleAction"]').val(); var fileName = jQuery('[name="fileName"]').val(); var params = { 'module': app.getModuleName(), 'parent': app.getParentModuleName(), 'view': 'ExtensionStore', 'mode': 'installationLog', 'extensionId': extensionId, 'moduleAction': moduleAction, 'targetModule': targetModule, 'moduleType': moduleType, 'fileName': fileName } thisInstance.getImportModuleStepView(params).then(function(installationLogData) { var callBackFunction = function(data) { var installationStatus = jQuery(data).find('[name="installationStatus"]').val(); if (installationStatus == "success") { jQuery('#installExtension').remove(); jQuery('#launchExtension').removeClass('hide'); jQuery('.writeReview').removeClass('hide'); } app.helper.showScroll(jQuery('#installationLog'), {'height': '150px'}); }; var modalData = { cb: callBackFunction }; app.helper.showModal(installationLogData, modalData); }); }); }); container.find('#uninstallModule').on('click', function(e) { var element = jQuery(e.currentTarget); var extensionName = container.find('[name="targetModule"]').val(); if(element.hasClass('loginRequired')){ var loginError = app.vtranslate('JS_PLEASE_LOGIN_TO_MARKETPLACE_FOR_UNINSTALLING_EXTENSION'); app.helper.showErrorNotification({"message": loginError}); return false; } app.helper.showConfirmationBox({message:''+app.vtranslate('JS_ARE_YOU_SURE_UNINSTALL')+'?'}).then(function(){ var params = { 'module': app.getModuleName(), 'parent': app.getParentModuleName(), 'action': 'Basic', 'mode': 'uninstallExtension', 'extensionName': extensionName }; app.helper.showProgress(); app.request.post({data: params}).then(function(error, data) { if (!error) { app.helper.hideProgress(); container.find('#declineExtension').trigger('click'); } }); }); }); container.find('#declineExtension').on('click', function() { var params = thisInstance.getImportModuleIndexParams(); thisInstance.getImportModuleStepView(params).then(function(data) { var detailContentsHolder = jQuery('.contentsDiv'); detailContentsHolder.html(data); thisInstance.registerEventForIndexView(); }); }); container.off().on('click', '.writeReview', function(e) { var customerReviewModal = jQuery(container).find('.customerReviewModal').clone(true, true); customerReviewModal.removeClass('hide'); var callBackFunction = function(data) { var form = data.find('.customerReviewForm'); form.find('.rating').raty(); var params = { submitHandler: function(form) { var form = jQuery(form); if(this.numberOfInvalids() > 0) { return false; } var review = form.find('[name="customerReview"]').val(); var listingId = form.find('[name="extensionId"]').val(); var rating = form.find('[name="score"]').val(); var params = { 'module': app.getModuleName(), 'parent': app.getParentModuleName(), 'action': 'Basic', 'mode': 'postReview', 'comment': review, 'listing': listingId, 'rating': rating } app.helper.showProgress(); app.request.post({data: params}).then(function(error, result) { app.helper.hideModal(); if (!error) { if (result) { var html = '