Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 03/19/24 in all areas

  1. WHMCS users and client accounts have separate contact information and they require separate updates to change details like the email addresses. The user management system allows a single user to access multiple client accounts. This separates authentication and authorization from services, billing, and support. To learn how to change the client account and the user account email address so they match please review this help guide: https://help.whmcs.com/m/managing/l/1681243-updating-user-and-client-account-details With this hook added to your WHMCS installation the system will now "Sync" the Client Account Email Address to match the User Account Email Address only when the change is made under the Account Details page via the client area. This hook adds a little "Note" under the Email Address field under the Hello Client! > Account Details section of the client area to inform that when this Email Address is changed, they will be logged out and they will need to log back in using the new Email Address they just set since this hook is updating both the client account and user account email addresses. Here is an example of the Account Details page Email Address field with this note: Via the Admin Area, when a client does this change and the hook was used it will make a log entry just like this: This entry indicates that the Client/User Email Sync Script hook was a success. Now both the Client Account Email Address and the User Account Email Address match for that client account. If there are multiple Users associated with the Client Account, this will only change the Email Address of the Owner of the account. <?php /* This script will update both the Client Account Profile email address and the user account email address when the change is made to the Account Details page for the email address field. Otherwise, you would have to update the email in both places and follow this article: https://help.whmcs.com/m/managing/l/1681243-updating-user-and-client-account-details Upload this file to your /includes/hooks directory of your WHMCS installation. There will be a Log entry when this script runs. @WHMCSDanny */ add_hook('ClientAreaHeadOutput', 1, function($vars) { // Only run if the on the Account Details page via the client area. // The action is going to be "details". This will make sure this message does not show anywhere else. $action = $_GET['action']; if($action == "details") { //Input the message under the Email Address field that they will be logged out after making the change. return <<<HTML <script type="text/javascript"> $(document).ready(function() { jQuery("input[name='email']").after('<span style="color:red; font-size:9pt;"><b>Note:</b> Changing your email address here will sync the email with your User Account. You will be logged out after you change the email. You must login using the new email address you just set.</span>'); }); </script> HTML; }; }); // prevent file from being loaded directly if (!defined("WHMCS")) { die("This file cannot be accessed directly."); } else { function clientowneruseremailsync_changeUserEmail(int $client_id, string $client_email){ // call the API and grab the owner user ID $command = 'GetClientsDetails'; $postData = array( 'clientid' => $client_id, 'stats' => false, ); $results = localAPI($command, $postData); if ($results['result'] == 'success') { // success! $client_owner_user_id = $results['client']['owner_user_id']; if (is_numeric($client_owner_user_id)){ // got a number, so it should be a valid owner user ID // now to perform the update to the user account to match the email set for the client account $command = 'UpdateUser'; $postData = array( 'user_id' => $client_owner_user_id, 'email' => $client_email, ); $results = localAPI($command, $postData); if ($results['result'] == 'success') { logActivity("Client/User Email Sync Script - Emails Successfully Changed and Synced. The e-mail address is set to $client_email for the Client Account and the Owners User ID: $client_owner_user_id", $client_id); } else { logActivity("Client/User Email Sync Script - Failed to change the e-mail address to $client_email for the Owners User ID: $client_owner_user_id . Results: ". $results, $client_id); } } } else { logActivity("Client/User Email Sync Script - Failed to verify that an e-mail change occurred on the clients profile. Results: ". $results, $client_id); } } add_hook('ClientEdit', 1, function($vars) { // Only run if the clients account profile email address is being changed. if ($vars['email'] != $vars['olddata']['email']){ // email is being changed. Update owning user accordingly. // get the client ID. It should be $vars['userid'] $client_id = $vars['userid']; // get the new e-mail address $client_email = $vars['email']; // call our helper function clientowneruseremailsync_changeUserEmail($client_id, $client_email); } }); } ?> Enhanced Version - Added a checkbox and tooltip In this new updated version of this hook, I added a checkbox/tooltip for the end-users to decide if they want to use this option to sync the Email Address under the Profile page too. Otherwise, nothing happens and WHMCS works as normal. The checkbox needs to be checked before it will run the same hook code to update both email addresses in both locations. (Account Details and Profile sections via the client area) <?php /* This hook script will update both the Client Account Profile email address and the User Account email address When the change is made to the Account Details page for the email address field only. It does not work for the Profile page. This version adds a new checkbox with a tooltip to let the end-user decide if they want to use this option or not. The checkbox needs to be checked for the hook to execute. If the checkbox does not get checked WHMCS works as expected and updates just the Account email. The Profile email account will still need to be updated if they want it to be the same. Otherwise, you would have to update the email in both places and follow this article: https://help.whmcs.com/m/managing/l/1681243-updating-user-and-client-account-details Upload this file to your /includes/hooks directory of your WHMCS installation. There will be a Log entry in the admin area when this script executes. @WHMCSDanny */ add_hook('ClientAreaHeadOutput', 1, function($vars) { // Only run if the on the Account Details page via the client area. // The page action is "details". This will make sure this message does not show anywhere else. $action = $_GET['action']; if($action == "details") { //Input the checkbox and tooltip under the Email Address field return <<<HTML <script type="text/javascript"> $(document).ready(function() { jQuery("input[name='email']").after('<input type="checkbox" name="syncEmails" id="syncEmails"> <span style="color:red; font-size:9pt;"><b>Sync Email with your User Account Email</b></span><span class="form-group"> &nbsp; <i class="far fa-question-circle" data-toggle="tooltip" data-placement="top" title="This option will sync your Email Address Here with your Profile Email Address. You will be logged out and will need to login with your new email address. If you do not check this option you will need to update it under the Your Profile page as well"></i></span>'); }); </script> HTML; }; }); // Prevent file from being loaded directly if (!defined("WHMCS")) { die("This file cannot be accessed directly."); } else { if (isset($_POST['syncEmails'])) { // Checkbox is checked // Perform actions and the logic to check the emails and replace them with the new one function clientowneruseremailsync_changeUserEmail(int $client_id, string $client_email){ // call the API and grab the owner user ID $command = 'GetClientsDetails'; $postData = array( 'clientid' => $client_id, 'stats' => false, ); $results = localAPI($command, $postData); if ($results['result'] == 'success') { // Success we have the owners user ID from the database! $client_owner_user_id = $results['client']['owner_user_id']; if (is_numeric($client_owner_user_id)){ // We have the ID number, so it should be a valid owner user ID // Perform the update to the user account to match the email set for the client account $command = 'UpdateUser'; $postData = array( 'user_id' => $client_owner_user_id, 'email' => $client_email, ); $results = localAPI($command, $postData); if ($results['result'] == 'success') { logActivity("Client/User Email Sync Script - Emails Successfully Changed and Synced. The e-mail address is set to $client_email for the Client Account and the Owners User ID: $client_owner_user_id", $client_id); } else { logActivity("Client/User Email Sync Script - Failed to change the e-mail address to $client_email for the Owners User ID: $client_owner_user_id . Results: ". $results, $client_id); } } } else { logActivity("Client/User Email Sync Script - Failed to verify that an e-mail change occurred on the clients profile. Results: ". $results, $client_id); } } add_hook('ClientEdit', 1, function($vars) { // Only run if the clients account detaoils email address field is being changed. if ($vars['email'] != $vars['olddata']['email']){ // Wmail is being changed. // Get the client ID. It should be $vars['userid'] $client_id = $vars['userid']; // Get the new e-mail address $client_email = $vars['email']; // Call the helper function to make the change clientowneruseremailsync_changeUserEmail($client_id, $client_email); } }); } } ?> At the time of writing this post, this process was tested on the latest stable release of WHMCS 8.9.0 I hope you find this useful. If you have any feedback or questions, please feel free to reply to this thread! WHMCSDanny
    3 points
  2. Has anyone noticed a significant improvement in their WHMCS site's SEO rankings after enabling Full Friendly URLs? Do search engines like Google favor sites with cleaner URLs, and could this potentially impact the visibility and traffic for WHMCS-based businesses?
    1 point
  3. Bootstrap 5 was released almost 3 years ago. Is it ever going to make it into WHMCS? Anytime soon?
    1 point
  4. Hello @jaysonvds Can you please clear the template cache as outlined at https://docs.whmcs.com/System_Cleanup#Empty_Template_Cache This typically resolves this issue.
    1 point
  5. Whmcs vps reseller server module v2. 0. 0 – major version release adds 1-click automatic products creator. WHMCS VPS Reseller Server Module Major Version v2.0.0 is released in Stable branch. Remotely and conveniently resell VPS servers with the #1 WHMCS VPS reseller provisioning module. which connects the intelligence of WHMCS billing and management software with the the cloud VPS infrastructure. Added Benefits for Cloud VPS Partners By integrating the VPS reseller module, fully-automated provisioning and sales of your cloud VPS services with from your remote WHMCS is finally possible. Ignite your Cloud VPS business by creating any custom service plans without restriction! If your client requests it, it can be done! Say yes and deliver more value with your existing services. 😃 We are pleased to announce the successful completion of the latest upgrade for VPS Reseller WHMCS Server module to v2.0.0 Major Version Update. See also What is VPS Hosting? The WHMCS server module provides ability to automatically deploy VPS servers directly from remote WHMCS, and provide clients with built-in VPS management in their client area. Offer your clients white-label cloud VPS server and instant server deployment with seamless end-to-end service delivery. Additionally, some API commands may have changed. For a complete list of available API commands, please visit the VPS API Knowledgebase. New Rad Cloud Server Import WHMCS addon module Addon Module Front-end Interface View imported products configured with Rad Cloud Server Import WHMCS addon module What’s New with WHMCS VPS Reseller Module? The latest version (download here) provides major code revision and adds the Rad Cloud Server Import addon module, enabling 1-click import of ready-to-sell Cloud VPS products, created and configured with Rad Cloud server module. Be ready to sell VPS in 3 minutes with our latest module updates, see guides: WHMCS VPS Reseller – Install Guide, Rad Cloud Server Import Guide Server module renamed to Rad Cloud (Virtualizor Cloud deprecation) Users with v1.x modules installed, follow guide: Upgrade WHMCS VPS Reseller (v1.x to v2.x) Added support for WHMCS v8.9 Added support for PHP 7.2-8.3 Take ownership of your client’s cloud VPS management experience by registering a free custom Cloud Panel endpoint (i.e. vm1.yourhostingbrand.tld) for your customers to use while using the panel’s convenient web-based cloud management interface. Read our latest guide to learn more about customizing the white-label features of your Cloud Panel: 👉 👉 6 Ways to Customize the VPS panel with Your Branding – Cloud Admin Guide 💪 Start Strong! New partners can take advantage of the Startup Assistance Package, which provides a full refund of all VPS reseller costs paid during the first 90 days! See also WHMCS VPS Reseller Server Module v1.1.7 Released in Stable Branch SEE ALSO: How to Create VM via API for VPS Resellers Changelog: Fully compatible with WHMCS v8.9 Server module renamed to Rad Cloud Server module path updated: /whmcs/modules/servers/virtualizor_cloud >> /whmcs/modules/servers/rad_cloud ‘Rad Cloud Server Import’ Addon module released (packaged with server module) ‘Rad Cloud Server Import’ addon enables automatic products creation and configuration with ‘Rad Cloud’ server module ‘Rad Cloud Server Import’ addon enables automatic configurable options creation for associated products Addon optionally eliminates all product setup with 1-click import of ready-to-sell Cloud VPS products Fully translated (Admin and End-user) into 11 languages Supports PHP v7.2-8.3, Ioncube 12-13 Code improvements View Diffs: https://github.com/Rad-Web-Hosting/whmcs-vps-reseller/compare/1.1.7…2.0.0 Contact us for any issues relating to your VPS or updating your WHMCS integrations. Our support techs will be available to provide complimentary update and installation if requested. See also How to Integrate VPS Reseller with WHMCS Please note that the previous versions of Rad Web Hosting WHMCS modules might be considered deprecated for all intents and purposes. Please update to this version at your earliest convenience to begin using WHMCS VPS Reseller v2.0.0 module version with latest features and benefits. For Questions and to Get Support Please submit a detailed request and our support staff will follow up with you shortly.
    1 point
  6. It will work more consistently if you append &promocode=<mypromo> where <mypromo> is replaced by the promocode.
    1 point
  7. 1 point
  8. Hi all, This should now be resolved. Please let me know if you're experiencing the issue.
    1 point
  9. Make sure the billing cycle is set to Free and not Monthly Add {debug} to your modules/servers/cpanel/template/overview.tpl file temporarily (again I must stress to not do this on a live environment, unless you put maintenance mode on) and check what $billingcycle shows when you reload the page. That's what you need to check in the if statement.
    1 point
  10. Except for the admin area, that's still on v3 and you cant even change some of the HTML as it's sitting in encoded files...
    1 point
  11. Try {if $billingcycle !== 'Free Account'} WHMCS's own code is wrong as they check it against the language variable..
    1 point
  12. Sorry you need to remove {if $domainoption eq "register"} checked{/if} from the checkbox in the $registerdomainenabled if statement and change {if $domainoption eq "subdomain"} checked{/if} to checked to the checkbox in the $subdomains if statement. {include file="orderforms/standard_cart/common.tpl"} <div id="order-standard_cart"> <div class="row"> <div class="cart-sidebar"> {include file="orderforms/standard_cart/sidebar-categories.tpl"} </div> <div class="cart-body"> <div class="header-lined"> <h1 class="font-size-36">{$LANG.domaincheckerchoosedomain}</h1> </div> {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} <form id="frmProductDomain"> <input type="hidden" id="frmProductDomainPid" value="{$pid}" /> <div class="domain-selection-options"> {if $subdomains} <div class="option"> <label> <input type="radio" name="domainoption" value="subdomain" id="selsubdomain" checked />{$LANG.cartsubdomainchoice|sprintf2:$companyname} </label> <div class="domain-input-group clearfix" id="domainsubdomain"> <div class="row"> <div class="col-sm-9"> <div class="row domains-row"> <div class="col-xs-2 col-2 text-right"> <p class="form-control-static">http://</p> </div> <div class="col-xs-5 col-5"> <input type="text" id="subdomainsld" value="{$sld}" placeholder="yourname" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.enterDomain'}" /> </div> <div class="col-xs-5 col-5"> <select id="subdomaintld" class="form-control"> {foreach $subdomains as $subid => $subdomain} <option value="{$subid}">{$subdomain}</option> {/foreach} </select> </div> </div> </div> <div class="col-sm-2"> <button type="submit" class="btn btn-primary btn-block"> {$LANG.orderForm.check} </button> </div> </div> </div> </div> {/if} {if $incartdomains} <div class="option"> <label> <input type="radio" name="domainoption" value="incart" id="selincart" />{$LANG.cartproductdomainuseincart} </label> <div class="domain-input-group clearfix" id="domainincart"> <div class="row"> <div class="col-sm-8 col-sm-offset-1 col-md-6 col-md-offset-2 offset-sm-1 offset-md-2"> <div class="domains-row"> <select id="incartsld" name="incartdomain" class="form-control"> {foreach key=num item=incartdomain from=$incartdomains} <option value="{$incartdomain}">{$incartdomain}</option> {/foreach} </select> </div> </div> <div class="col-sm-2"> <button type="submit" class="btn btn-primary btn-block"> {$LANG.orderForm.use} </button> </div> </div> </div> </div> {/if} {if $registerdomainenabled} <div class="option"> <label> <input type="radio" name="domainoption" value="register" id="selregister" />{$LANG.cartregisterdomainchoice|sprintf2:$companyname} </label> <div class="domain-input-group clearfix" id="domainregister"> <div class="row"> <div class="col-sm-8 col-sm-offset-1 offset-sm-1"> <div class="row domains-row"> <div class="col-xs-9 col-9"> <div class="input-group"> <div class="input-group-addon input-group-prepend"> <span class="input-group-text">{$LANG.orderForm.www}</span> </div> <input type="text" id="registersld" value="{$sld}" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.enterDomain'}" /> </div> </div> <div class="col-xs-3 col-3"> <select id="registertld" class="form-control"> {foreach from=$registertlds item=listtld} <option value="{$listtld}"{if $listtld eq $tld} selected="selected"{/if}>{$listtld}</option> {/foreach} </select> </div> </div> </div> <div class="col-sm-2"> <button type="submit" class="btn btn-primary btn-block"> {$LANG.orderForm.check} </button> </div> </div> </div> </div> {/if} {if $transferdomainenabled} <div class="option"> <label> <input type="radio" name="domainoption" value="transfer" id="seltransfer"{if $domainoption eq "transfer"} checked{/if} />{$LANG.carttransferdomainchoice|sprintf2:$companyname} </label> <div class="domain-input-group clearfix" id="domaintransfer"> <div class="row"> <div class="col-sm-8 col-sm-offset-1 offset-sm-1"> <div class="row domains-row"> <div class="col-xs-9 col-9"> <div class="input-group"> <div class="input-group-addon input-group-prepend"> <span class="input-group-text">{$LANG.orderForm.www}</span> </div> <input type="text" id="transfersld" value="{$sld}" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.enterDomain'}"/> </div> </div> <div class="col-xs-3 col-3"> <select id="transfertld" class="form-control"> {foreach from=$transfertlds item=listtld} <option value="{$listtld}"{if $listtld eq $tld} selected="selected"{/if}>{$listtld}</option> {/foreach} </select> </div> </div> </div> <div class="col-sm-2"> <button type="submit" class="btn btn-primary btn-block"> {$LANG.orderForm.transfer} </button> </div> </div> </div> </div> {/if} {if $owndomainenabled} <div class="option"> <label> <input type="radio" name="domainoption" value="owndomain" id="selowndomain"{if $domainoption eq "owndomain"} checked{/if} />{$LANG.cartexistingdomainchoice|sprintf2:$companyname} </label> <div class="domain-input-group clearfix" id="domainowndomain"> <div class="row"> <div class="col-sm-8 col-sm-offset-1 offset-sm-1"> <div class="row domains-row"> <div class="col-xs-9 col-9"> <div class="input-group"> <div class="input-group-addon input-group-prepend"> <span class="input-group-text">{lang key='orderForm.www'}</span> </div> <input type="text" id="owndomainsld" value="{$sld}" placeholder="{lang key='yourdomainplaceholder'}" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.enterDomain'}" /> </div> </div> <div class="col-xs-3 col-3"> <input type="text" id="owndomaintld" value="{$tld|substr:1}" placeholder="{$LANG.yourtldplaceholder}" class="form-control" autocapitalize="none" data-toggle="tooltip" data-placement="top" data-trigger="manual" title="{lang key='orderForm.required'}" /> </div> </div> </div> <div class="col-sm-2"> <button type="submit" class="btn btn-primary btn-block" id="useOwnDomain"> {$LANG.orderForm.use} </button> </div> </div> </div> </div> {/if} </div> {if $freedomaintlds} <p>* <em>{$LANG.orderfreedomainregistration} {$LANG.orderfreedomainappliesto}: {$freedomaintlds}</em></p> {/if} </form> <div class="clearfix"></div> <form method="post" action="{$WEB_ROOT}/cart.php?a=add&pid={$pid}&domainselect=1" id="frmProductDomainSelections"> <div id="DomainSearchResults" class="w-hidden"> <div id="searchDomainInfo"> <p id="primaryLookupSearching" class="domain-lookup-loader domain-lookup-primary-loader domain-searching domain-checker-result-headline"> <i class="fas fa-spinner fa-spin"></i> <span class="domain-lookup-register-loader">{lang key='orderForm.checkingAvailability'}...</span> <span class="domain-lookup-transfer-loader">{lang key='orderForm.verifyingTransferEligibility'}...</span> <span class="domain-lookup-other-loader">{lang key='orderForm.verifyingDomain'}...</span> </p> <div id="primaryLookupResult" class="domain-lookup-result domain-lookup-primary-results w-hidden"> <div class="domain-unavailable domain-checker-unavailable headline">{lang key='orderForm.domainIsUnavailable'}</div> <div class="domain-available domain-checker-available headline">{$LANG.domainavailablemessage}</div> <div class="btn btn-primary domain-contact-support headline">{$LANG.domainContactUs}</div> <div class="transfer-eligible"> <p class="domain-checker-available headline">{lang key='orderForm.transferEligible'}</p> <p>{lang key='orderForm.transferUnlockBeforeContinuing'}</p> </div> <div class="transfer-not-eligible"> <p class="domain-checker-unavailable headline">{lang key='orderForm.transferNotEligible'}</p> <p>{lang key='orderForm.transferNotRegistered'}</p> <p>{lang key='orderForm.trasnferRecentlyRegistered'}</p> <p>{lang key='orderForm.transferAlternativelyRegister'}</p> </div> <div class="domain-invalid"> <p class="domain-checker-unavailable headline">{lang key='orderForm.domainInvalid'}</p> <p> {lang key='orderForm.domainLetterOrNumber'}<span class="domain-length-restrictions">{lang key='orderForm.domainLengthRequirements'}</span><br /> {lang key='orderForm.domainInvalidCheckEntry'} </p> </div> <div id="idnLanguageSelector" class="margin-10 idn-language-selector idn-language w-hidden"> <div class="row"> <div class="col-sm-10 col-sm-offset-1 col-lg-8 col-lg-offset-2 offset-sm-1 offset-lg-2"> <div class="margin-10 text-center"> {lang key='cart.idnLanguageDescription'} </div> </div> </div> <div class="row"> <div class="col-sm-8 col-lg-6 col-sm-offset-2 col-lg-offset-3 offset-sm-2 offset-lg-3"> <div class="form-group"> <select name="idnlanguage" class="form-control"> <option value="">{lang key='cart.idnLanguage'}</option> {foreach $idnLanguages as $idnLanguageKey => $idnLanguage} <option value="{$idnLanguageKey}">{lang key='idnLanguage.'|cat:$idnLanguageKey}</option> {/foreach} </select> <div class="field-error-msg"> {lang key='cart.selectIdnLanguageForRegister'} </div> </div> </div> </div> </div> <div class="domain-price"> <span class="register-price-label">{lang key='orderForm.domainPriceRegisterLabel'}</span> <span class="transfer-price-label w-hidden">{lang key='orderForm.domainPriceTransferLabel'}</span> <span class="price"></span> </div> <p class="domain-error domain-checker-unavailable headline"></p> <input type="hidden" id="resultDomainOption" name="domainoption" /> <input type="hidden" id="resultDomain" name="domains[]" /> <input type="hidden" id="resultDomainPricingTerm" /> </div> </div> {if $registerdomainenabled} {if $spotlightTlds} <div id="spotlightTlds" class="spotlight-tlds clearfix w-hidden"> <div class="spotlight-tlds-container"> {foreach $spotlightTlds as $key => $data} <div class="spotlight-tld-container spotlight-tld-container-{$spotlightTlds|count}"> <div id="spotlight{$data.tldNoDots}" class="spotlight-tld"> {if $data.group} <div class="spotlight-tld-{$data.group}">{$data.groupDisplayName}</div> {/if} {$data.tld} <span class="domain-lookup-loader domain-lookup-spotlight-loader"> <i class="fas fa-spinner fa-spin"></i> </span> <div class="domain-lookup-result"> <button type="button" class="btn unavailable w-hidden" disabled="disabled"> {lang key='domainunavailable'} </button> <button type="button" class="btn invalid w-hidden" disabled="disabled"> {lang key='domainunavailable'} </button> <span class="available price w-hidden">{$data.register}</span> <button type="button" class="btn btn-add-to-cart product-domain w-hidden" data-whois="0" data-domain=""> <span class="to-add">{lang key='orderForm.add'}</span> <span class="loading"> <i class="fas fa-spinner fa-spin"></i> {lang key='loading'} </span> <span class="added"><i class="far fa-shopping-cart"></i> {lang key='domaincheckeradded'}</span> <span class="unavailable">{$LANG.domaincheckertaken}</span> </button> <button type="button" class="btn btn-primary domain-contact-support w-hidden"> {lang key='domainChecker.contactSupport'} </button> </div> </div> </div> {/foreach} </div> </div> {/if} <div class="suggested-domains w-hidden"> <div class="panel-heading card-header"> {lang key='orderForm.suggestedDomains'} </div> <div id="suggestionsLoader" class="card-body panel-body domain-lookup-loader domain-lookup-suggestions-loader"> <i class="fas fa-spinner fa-spin"></i> {lang key='orderForm.generatingSuggestions'} </div> <div id="domainSuggestions" class="domain-lookup-result list-group w-hidden"> <div class="domain-suggestion list-group-item w-hidden"> <span class="domain"></span><span class="extension"></span> <div class="actions"> <button type="button" class="btn btn-add-to-cart product-domain" data-whois="1" data-domain=""> <span class="to-add">{$LANG.addtocart}</span> <span class="loading"> <i class="fas fa-spinner fa-spin"></i> {lang key='loading'} </span> <span class="added">{lang key='domaincheckeradded'}</span> <span class="unavailable">{$LANG.domaincheckertaken}</span> </button> <button type="button" class="btn btn-primary domain-contact-support w-hidden">{lang key='domainChecker.contactSupport'}</button> <span class="price"></span> <span class="promo w-hidden"></span> </div> </div> </div> <div class="panel-footer card-footer more-suggestions text-center w-hidden"> <a id="moreSuggestions" href="#" onclick="loadMoreSuggestions();return false;">{lang key='domainsmoresuggestions'}</a> <span id="noMoreSuggestions" class="no-more small w-hidden">{lang key='domaincheckernomoresuggestions'}</span> </div> <div class="text-center text-muted domain-suggestions-warning"> <p>{lang key='domainssuggestionswarnings'}</p> </div> </div> {/if} </div> <div class="text-center"> <button id="btnDomainContinue" type="submit" class="btn btn-primary btn-lg w-hidden" disabled="disabled"> {$LANG.continue} &nbsp;<i class="fas fa-arrow-circle-right"></i> </button> </div> </form> </div> </div> </div> {include file="orderforms/standard_cart/recommendations-modal.tpl"}
    1 point
  13. Assuming you are using the standard cart template? If so, go to templates/orderforms/standard_cart/configureproductdomain.tpl and move the if statement (and code contained within) from line 144 to line 18 so its the first if statement.
    1 point
  14. I wouldn't mind even if we could use other frameworks, but a lot of the tables etc. in WHMCS are contained within the encoded source. That really needs sorting.
    1 point
  15. In this video I show how to use custom CSS with your WHMCS theme.
    1 point
  16. Your cPanel license is limited to X amount of users (X is either 1, 5, 30, 100, 150, 200, 250 etc). If you have a cPanel 100 account cPanel license, you will get the error "Creating the account would exceed the number of licensed users. Please upgrade your license and try again." when trying to create account number 101. You will need to upgrade the amount of accounts you can create with your cPanel license.
    1 point
  17. Hi @SamRudd1152, This indicates those ad-hoc addons were orphaned. The service to which the addon belongs must have been deleted without first removing the addon. These orphaned records can be recovered by associating it with an active service under the client's account: UPDATE `tblhostingaddons` SET `hostingid` = 'x' WHERE addonid = 'y'; Replace x with the value of a tblhosting.id value of one of the client's active services. Replace y with the tblhostingaddons.addonid value(s) of the orphaned addons. As always, before making changes to the database, please backup.
    1 point
  18. Hi @SamRudd1152, Please can you run this query and share the result? SELECT * FROM `tblhostingaddons` WHERE `hostingid` NOT IN (select id from tblhosting); Take care to remove any PII before sharing the output publicly here.
    1 point
  19. Version 1.0.0

    54 downloads

    An issue has been identified in the 8.9.0 release, published on 6th March 2024, that can cause an error after completing Duo two factor authentication when accessing the admin area: error: invalid_grant error_description: invalid redirect URI '/whmcs/admin/dologin.php'
    1 point
  20. Hi dougcassidy, You can't send the direct Pay Now button to the client via mail because as per WHMCS conditions, the user can't pay without logging into the client area. if you have seen the Pay Now button on your invoice view page in the client area it means your payment gateway (Paypal) is not configured properly. for better discussion please share your gateway setting after hide your secure key and login credentials.
    1 point
  21. <?php use \WHMCS\Module\GatewaySetting; $setting = GatewaySetting::where('gateway', '=', '{gatewayname}')->where('setting', '=', '{settingname}')->first(); var_dump($setting->value); // Unencrypted value $setting->value = 'THIS WILL BE ENCRYPTED IN THE DATABASE'; // This will be encrypted before saving to the DB $setting->save();
    1 point
  22. Hi Chris, I think I have Display Errors on right now because I was trying to figure things out. That said… I am not sure where to find reporting of those errors should I have any. I tried removing my Registrar apps and I still get a white screen when managing domain names. So that is good that it may not be OpenSRS. I also was trying to set up Rad Web Hosting API to see if this registrar would work better as their app seems to be updated more often. Is there a place where I can check for errors?
    1 point
  23. Ah okay. Thought I saw another function return rawdata that outputted and figured it may work there also. One method may be to do a $_SESSION variable in storeremote, then do a hook for ClientAreaPageCreditCard and return errormessage = 'your error'; so like: <?php add_hook('ClientAreaPageCreditCard', 1, function($vars) { return array('errormessage'=>$_SESSION['gateway_error']); }); but have not tested that and so do not know if that replacement would work. If not, you could set your own template variable with the same method and just update the template file to show it. If session doesn't work, last option is to store the error somewhere else, like a db table, and then output that via above method.
    1 point
  24. The WHMCS.Community is intended to provide a place for users of WHMCS to discuss, share and interact with each other as well as WHMCS Staff. To ensure we maintain a friendly environment, we ask users to respect the following rules and guidelines. Please let us know via the WHMCS.Community Assitance category should you have any questions or comments, posts in this category are visible between yourself and the WHMCS.Community Team. WHMCS reserves the right to alter these rules from time to time. 1.User Accounts Each person may have (one) 1 forum login regardless of the number of companies you may be part of. Duplicate accounts will be removed from WHMCS.Community Please do not share your user account with others - each person should retain their own username and password Usernames must not be created that contain any of the items listed below: An email address A website address The following words WHMCS cPanel Staff Moderator Admin Any word determined to cause offence or be deemed inappropriate. Usernames or Users that do not comply with these rules may be removed from WHMCS.Community 2. Behaviour on the Community We expect all users to be friendly and polite. While we understand that users will disagree and have different points of view at times, this can be communicated in a civil manner Please do not post rude, insulting or inflammatory posts. Personal attacks, name-calling and insults will not be tolerated on WHMCS.Community. Profanity and inappropriate images (including porn or gross violence) may not be posted anywhere on the WHMCS.Community. WHMCS.Community Staff & Moderators use their sole discretion as to what is deemed unacceptable behaviour in the community and may remove content at any time. Your posts assist other users, please do not delete content if you find an answer, please share this solution to help other users. 3. Advertising on WHMCS.Community Advertising, offers or self-promotion are to be posted only in the Third Party Add-ons section of the community. Community users seeking to hire a developer may post within the Service Offers & Requests section. Advertising is limited to one advertisement per seven (7) day period on a rolling 7-day basis. Additional or excessive advertising will be removed by the moderation team and your ability to post in advertising boards removed. Soliciting and/or self-promotion via the private messaging (PM) system is strictly prohibited. The sale or reselling of WHMCS Licenses is strictly prohibited on the community. Affiliate and referral links may not be used, these links are those that link to a site and contain information crediting the person with that referral 4. Posting and Moderation on WHMCS.Community The WHMCS.Community is moderated by WHMCS.Community Moderators and Staff. When a post is deemed to be in breach of the rules it will be removed and the user advised via a warning. Please do not cross-post across the community. If your topic is better suited to another section one of the WHMCS.Community team will move it to the best category for you. You may report your post if you wish to have it moved by a moderator. For privacy reasons please do not post any personally identifiable information including Usernames, Passwords, Contact Numbers, Email Addresses and/or Credit Card Numbers As WHMCS.Community is a moderated community we have implemented a Warning System. When a post is removed for breaching the community rules we’ll be sure to let you know. We allocate points to a warning and once you have a set number of points you may be suspended from posting on the community. Users that do not comply with the rules for WHMCS.Community may be banned temporarily. Ongoing temporary bans may result in a permanent ban from WHMCS.Community. The public discussion of moderation decisions is not permitted, these will be removed without notice and may result in a community ban. 5. Signature and Profile Rules Your signature may include links, however, please ensure these are reasonable (no more than 4) and they must not include Referral/Affiliate links. This includes pricing and plan details Signatures may not contain more than 4 lines at a 1024x768 resolution Please do not sell or rent your signature space, your signature is yours alone. Where your signature does not comply with these rules you may be asked to alter or remove it 6. WHMCS.Community Ranks Official WHMCS Staff & Moderators are identified by one of the following ranks located below their profile image, in addition, their posts are highlighted blue WHMCS CEO WHMCS Community Manager WHMCS Customer Service WHMCS Developer WHMCS Marketing WHMCS Staff WHMCS Support Manager WHMCS Technical Analyst WHMCS.Community runs a ranking system, new community members start with the rank of Newbie and can progress based on the number of posts, reputation points and length of time active on the community Some users have a special “Super Users” rank. These members are a select group of elite community members that are long-standing mentors in the community, courteous to other members, always providing technical insight and advice, and generally helping to make our community a better place to learn, troubleshoot and advance. The WHMCS.Community ranking formula is changed from time to time and without notice. The algorithm used is not published or discussed with users to prevent gaming the system 7. Contacting the WHMCS.Community Team You may contact a member of the WHMCS.Community via the WHMCS.Community Assitance board If you would prefer to email you may open a ticket by emailing forums@whmcs.com Thank you for helping to keep WHMCS.Community a great place
    1 point
  25. Just for those wanting this module with the last modification without having to sort out the modification I've attached a copy. I didn't code this or change it beyond including the modifications found in this thread already. I.e. I will not provide support . WHMCS_SixTemplateCreditBalance.php.zip
    1 point
  26. Question: How can I set up Office365 to effectively work with WHMCS' Email Piping feature? Office365 (herein referred to as "O365") offers an external email service provided by Microsoft that isn't hosted on the same server as WHMCS. This means the standard method for importing emails received to an O365 mailbox into the WHMCS support ticket system is to use the POP3 importing method. You may like to use the Email Piping option instead. This guide shows how this can be achieved using O365 and a cPanel server. As O365 is an external service that isn't hosted on the same server as WHMCS, to achieve the best results, this will require a second domain name. This can be anything you like. Nobody ever needs to see or know about it. For this example, whmcs.COM is my main domain (connected to O365) and whmcs.NET is my secondary domain (Emails hosted in cPanel with WHMCS - Notice the different TLDs). Today, we will be setting up whmcs.net to pipe emails from whmcs.com email addresses to WHMCS. The steps are fairly straightforward: Create a forwarder for your "Pipe" email in cPanel It's important to immediately note that cPanel does not require an email address to be set up in order to use Email Forwarding therefore, we won't be running through these steps. You only need one "Pipe" email address. WHMCS will be able to determine which email address a message was originally sent to before your "Pipe" email. The first thing we need to do is log in to cPanel. This is fairly straightforward and the easiest way is via one of two ways: - Via a redirect: Navigate to https://yourdomain.com/cpanel - Via a dedicated subdomain: Navigate to https://cpanel.yourdomain.com Once you have logged in to cPanel, you will need to navigate to the Email category and click "Forwarders". From inside the "Forwarders" page, click "Add Forwarder" Add a new Forwarder - In "Address to Forward", choose a name for your pipe email - We used "tickets" (This email can be absolutely anything you like however) which will create a forwarder for "tickets@whmcs.net" - Click "Advnaced Options" to show further forwarding options - Select "Pipe to a Program" and in put the path to your "pipe.php" file. (Pro Tip: You can get this from Setup >> Support >> Support Departments at the top of the page!) You will receive a success message similar to: "All email sent to ”tickets@whmcs.net” will now be copied to “|/home/whmcs/public_html/whmcs/crons/pipe.php”." That's it! You've finished configuring your "pipe" email. Create a shared mailbox on O365 with your publicly visible support email address. To perform the following tasks, you must be an Organisation Administrator on Office365. If you are not, please ask your System Administrator to perform these steps: In the O365 Admin Area, click "Groups" on the sidebar and select "Shared Mailboxes". You can find the Admin Area for O365 by navigating to https://portal.office365.com and clicking the "Admin" tile. Click "Add a Mailbox" - A new sidebar will open. - In here, set up your new Shared Mailbox. For example: - Name: WHMCS Support (Or any other name you are using for your Support Department, e.g. Sales) - Email: support@whmcs.com - We used "support" because the department we're setting up will be "Technical Support". - Make sure to click "Add" once you're ready to create this mailbox. Once created, this is the email address you must use in your Support Department configuration. Pro Tip: Occasionally, it may take up to 15-20 minutes for O365 to provision your new Shared Mailbox. You may need to wait until this has been completed before you can move on to the next step. On the "Shared Mailboxes" page, click on your newly created Shared Mailbox to edit it's settings. In here, you'll need to find "Email Forwarding" and click "Edit" Configure your Email Forwarder to forward to your "Pipe" email hosted on your cPanel server with WHMCS. - Enable the "Forward all email sent to this inbox" setting - Input your "Pipe" email into "Forwarding Address" - Disable "Keep a copy of forwarded email in this inbox" (Unless you want to keep the originals for any reason - Records perhaps?) - Save the changes. That's it. You're done! So how exactly does this work? When O355 forwards the email to your cPanel server, it retains the original "To" address. WHMCS reads the original email headers and so will be interpreted as being sent to support@whmcs.com, even though you are piping it in via tickets@whmcs.net. As long as the email address that the message was originally sent to is configured in a Support Department (in this case support@whmcs.com), WHMCS will import the email in to this department. Emails sent from WHMCS will show the "From" address of the Support Department (e.g. support@whmcs.com) and so nobody will ever see or know about your tickets@whmcs.net email address. Step-by-step the processing work like this: For example: Your client sends an email to support@whmcs.com Office365 receives this email, acknowledges that you have a forwarder active and passes the message over to tickets@whmcs.net Your cPanel mailserver which houses tickets@whmcs.net receives the email and delivers it. The email still shows that it was to support@whmcs.com. As your cPanel server delivers the email, it is piped by your forwarder in to WHMCS. As the email still looks like it was sent to support@whmcs.com, WHMCS knows exactly which department to open a ticket in. Success! Your email is received and processed by WHMCS.
    0 points
  27. Your cPanel license is limited to X amount of users, and you're trying to create number X+1. You will need to upgrade your cPanel license.
    -1 points
  28. Are you using the default nameservers or custom nameservers? If you are using nameservers that aren't the default, tick the button to enter custom nameservers.
    -1 points
  29. I don't understand your response. Are you using the default nameservers that you setup in the configuration (https://help.whmcs.com/m/64969/l/784165) or are you using other custom nameservers? And there is no reason to down vote my reply. I was donating some of my time to try and help you but I can stop doing so. You can wait for WHMCS staff to assist you or open a ticket directly to them.
    -1 points
  30. As I said yesterday, I have no more free time to donate to you. You can wait for WHMCS to answer you or open a support ticket with WHMCS directly. I don't need to continually be down voted by you because you don't understand what I am trying to say to you. Best of luck in finding a solution.
    -1 points
  31. I think your domain, serverclouds.in, is not registered at registrar 😂
    -1 points
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated