Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 05/02/23 in all areas

  1. I'm sorry, but this is an asinine comment. I'm beyond worried that this is an official response from anyone at WHMCS. It's impossible to compare WHMCS to App Stores from significant companies that can generate MILLIONS of dollars. We're discussing themes and extensions for a PHP-based billing platform with finite market growth capabilities. Let's not patronize and alienate the developers that help make this platform usable. It's insulting. So you're telling me, @WHMCS John, that it would be such a resource bottleneck for WHMCS staff to spend time reviewing bot sign-ups and using basic investigation tactics to see that there is a problem? Hell, you could even wait for one of us to complain and take a look to see if it's legitimate. At this point, I would even accept some efforts to make it more difficult for bots to register and review products. Maybe require users to put in their WHMCS license key? Maybe have them associate it with their WHMCS client login? There has to be some form of bare minimum work here. I do love the comment about charging us to utilize the Marketplace. Some of us do not use WHMCS as a product and still have to pay a monthly charge to access the latest product updates. Would you be able to fix that? Ridiculous.
    4 points
  2. Targeted Security Releases have been published for our Current and Long Term Support versions (8.7 and 8.6) Owned License holders will be able to auto-update to 8.7.3 or 8.6.2, if your Support & Updates was active during those releases. We have also exceeded our Long Term Support policy by providing a patch for 8.5, because it recently reached End of Life. Users can apply if your Support & Updates was active during the 8.5 release. We do not recommend running an End of Life version of WHMCS for this reason. However on this occasion, if you're running an older End of Life version, please contact support and we can assist: https://www.whmcs.com/submit-a-ticket/
    4 points
  3. At times, you may wish to have a separate Checkout Thanks Page, depending on the product/service that was just purchased. It could be a special page, that asks your customers to sign up to a specific Newsletter, as well as providing you with the opportunity to cross-sell something related. Additionally, it can form the basis of a more granular means of goal tracking for use in analytics. In both our examples (below), we use the order number stored in the $ordernumber string, that is available to us at the time of ordering. Utilising, GetOrders API, we can then retrieve further information about the order, such as the product name, etc. This can then been coded as a conditional, to simply redirect or to execute analytics tracking code, as you will see in the examples below: 1. Place your tracking code script in "complete.tpl". In the example below, we are using the Standard Cart, order form template. The code is placed in between the {if $ispaid} and the closing {/if} statement. E.G: /templates/orderforms/standard_cart/complete.tpl [line 51]: {if $ispaid} <!-- Enter any HTML code which should be displayed when a user has completed checkout --> <!-- Common uses of this include conversion and affiliate tracking scripts --> // We are using GetOrders API, providing the order number placed, so that we can retrieve the name of the Product that was ordered. $command = 'GetOrders'; $postData = array( 'id' => $ordernumber, ); $adminUsername = 'ADMIN_USERNAME'; // Optional for WHMCS 7.2 and later $results = localAPI($command, $postData, $adminUsername); // Below we are retrieving the productname value for the order. However, we can just as easily use another factor, e.g., product type, etc. // In the case of Product Name; this is retrieved from the results array, as follows: $productname = $results["orders"]["order"]["0"]["lineitems"]["lineitem"]["0"]["product"]; // The switch statement below will run code, depending on the Product Name as the condition. // For this example, we are simply redirecting to another URL, or web page. // Modify the links, or replace with your tracking code as needed. switch($productname){ case "Shared Hosting - Bronze": // This would need to be one of your own Product Names // In this example, we are redirecing when the above condition is met. // Or you can replace this with your own tracking code script here. header("Location: https://example.com/myOtherPage.php"); die(); break; case "Shared Hosting - Silver": header("Location: https://example.com/myOtherPage.php"); die(); break; case "Shared Hosting - Gold": header("Location: https://example.com/myOtherPage.php"); die(); break; default: // default forwarding URL, if above conditions are not met: header("Location: https://example.com/myOtherPage.php"); die(); break; } {/if} The above script, obtains the product name ordered, then based on this criteria, once the order has completed, forwards the user to a specified page. Alternatively, you could add your own tracking script, between the {if $ispaid} and the closing {/if} statement, shown above. The script would still of course need to use the {$ordernumber} to retrieve data about the order, e.g., product name, etc. Then based on this, you would run the desired tracking script. 2. Place your tracking code script in a Hook. Another option would be to utilise a hook. The hook point to use would be the ShoppingCartCheckoutCompletePage that executes when the Complete Page is displayed on checkout. Similar to the example above, the hook code could simply be a redirect, or run your tracking script as desired. Example Code: <?php require_once 'init.php'; add_hook('ShoppingCartCheckoutCompletePage', 1, function($vars) { // We are using GetOrders API, providing the order number placed, so that we can retrieve the name of the Product that was ordered. $command = 'GetOrders'; $postData = array( 'id' => $ordernumber, ); $adminUsername = 'ADMIN_USERNAME'; // Optional for WHMCS 7.2 and later $results = localAPI($command, $postData, $adminUsername); // Below we are retrieving the productname value for the order. However, we can just as easily use another factor, e.g., product type, etc. // In the case of Product Name; this is retrieved from the results array, as follows: $productname = $results["orders"]["order"]["0"]["lineitems"]["lineitem"]["0"]["product"]; // The switch statement below will run code, depending on the Product Name as the condition. // For this example, we are simply redirecting to another URL, or web page. // Modify the links, or replace with your tracking code as needed. switch($productname){ case "Shared Hosting - Bronze": // This would need to be one of your own Product Names // In this example, we are redirecing when the above condition is met. // Or you can replace this with your own tracking code script here. header("Location: https://example.com/myOtherPage.php"); die(); break; case "Shared Hosting - Silver": header("Location: https://example.com/myOtherPage.php"); die(); break; case "Shared Hosting - Gold": header("Location: https://example.com/myOtherPage.php"); die(); break; default: // default forwarding URL, if above conditions are not met: header("Location: https://example.com/myOtherPage.php"); die(); break; } }); Both examples above are based on three product names which we wish to track, and a fallback (default) option. However, you can adjust the switch statement according to your needs. Please see the PHP manual for switch statements. For further information: https://developers.whmcs.com/hooks-reference/shopping-cart/#shoppingcartcheckoutcompletepage 3. GetOrders API: Locating an Item within the $results Array You may be wondering how we constructed the $productname string, in the examples above. For the purposes of completeness, we shall further elaborate. As you have seen, using the GetOrders API, we utilise the $ordernumber available to us at the time of ordering, in order to retrieve the product name. However, the results array that is produced, can be a little daunting to navigate, especially when you simply need one value from it. For instance, for this to be useful in our examples above, we first need to be able to locate the respective product name, from the GetOrders API results array. To do this, you can feed the JSON $results, sample output provided, into a JSON to PHP Array Converter to get the following PHP array: As we previously noted, the $results (variable) is actually in the form of an array (shown above). Here we are depicting how we locate the product name, within the array. This can then be used to construct the statement below, allowing us to store this single value ("product") into a variable called $productname: $productname = $results["orders"]["order"]["0"]["lineitems"]["lineitem"]["0"]["product"]; This $productname (variable) can then be used as the criteria for a condition in an {if ...} ... {/if} statement, or another conditional, such as the switch we use in our examples above. Alternatively, this can just as easily be based on another criteria such as product type ("producttype"), etc. As such, this hopefully provides us with a very powerful and flexible means of analytics tracking, upon order placement. For further information: https://developers.whmcs.com/api-reference/getorders/ Further Reading https://developers.whmcs.com/api/getting-started/ https://developers.whmcs.com/hooks/getting-started/ https://developers.whmcs.com/themes/customising/ https://www.php.net/json_decode
    4 points
  4. It may be desirable to send clients a reminder message before their support ticket is automatically closed due to inactivity. This can be achieved natively in WHMCS using a combination of Custom Ticket Statuses and Escalation Rules. This guide demonstrates how to do so: Create the Custom Ticket Status 1. Go to Configuration > System Settings > Ticket Statuses. 2. Add a Ticket Status into which tickets will transition between the reminder message and closure: Name: Use any value for the name you like Status Colour: Any colour you desire Include in Active Tickets: Yes Include in Awaiting Reply: No Auto Close?: Yes Sort Order: Any value you prefer 3. Click Save Changes. Create the Escalation Rule 4. Go to Configuration > System Settings > Escalation Rules. 5. Click Add New Rule: Name: User any value for you name you like Departments: Select all the Support Departments which should receive this pre-closure message Statuses: Select Answered Priorities: Select all Priorities Time Elapsed: Enter the time since last reply for the message to be sent. This should be less than the Close Inactive Tickets time in Configuration > System Settings > Automation Settings. Eg. If Close Inactive Tickets is configured for 48 hours, you might specify 1440 minutes (24 hours) in the Escalation Rule. Status: Select the new Ticket Status created in step 2. Add Reply: Specify the message to be sent to clients before their ticket is closed. 6. Click Save Changes. New tickets opened from now on will receive the pre-closure message, if the ticket remains in the Answered status for 24 hours. If no further response is made by the client, the ticket will be closed after a further 24 hours. At the time of writing this post, this process was tested on versions of WHMCS from 7.10 to 8.7. If you have any feedback or questions, please feel free to reply to this thread!
    4 points
  5. 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
  6. If WHMCS were adding value by actually adding highly requested features that were requested years ago instead of outright ignoring them, I could understand the yearly increases, but these increases are obviously nothing more than a money grab by WebPros to satisfy shareholders. For example, adding support for automatically adding both the IPv4 and IPv6 IP addresses to a license for those using a dual IPv4/IPv6 environment. If an admin installs or reissues a license and logs into WHMCS from IPv4, WHMCS only assigns the servers IPv4 IP address to the license, even if the server also supports IPv6. The next admin to connect using IPv6 then gets an "Invalid License" error. To resolve this, WHMCS license holders and/or resellers have to submit a ticket to WHMCS licensing to have the IPv6 IP address manually added to a license to avoid the error. It's time consuming and ridiculous at this point. Yet, ModulesGarden (who uses WHMCS for client management and licensing) adds both the IPv4 and IPv6 IP addresses to their product licenses automatically. If ModulesGarden can figure it out, why can't the developer of WHMCS??? That is just one example. There are many important feature requests that have been ignored, but with every new release we continue to get more and more unwanted Marketplace vendors. 😞
    3 points
  7. Hello WHMCS Community! 🎉 Today, I'm thrilled to share with you a little guide on how to turn the **WHMCS 8** admin area into a **Progressive Web App (PWA)**, allowing it to be displayed in full screen and with a custom icon on mobile devices. ### 📁 File Structure - 📂 admin - 📄 sw.js - 📂 PWA - 📄 manifest.json - 🖼️ whmcs.png ### 🚀 Codes #### 1. **manifest.json** { "name": "WHMCS Admin PWA", "short_name": "WHMCS Admin", "description": "PWA for WHMCS Admin Area", "start_url": "/admin/", "display": "standalone", "background_color": "#ffffff", "theme_color": "#000000", "icons": [ { "src": "/admin/PWA/whmcs.png", "sizes": "192x192", "type": "image/png" } ] } 2. sw.js self.addEventListener('install', function(event) { // PWA Installation }); self.addEventListener('fetch', function(event) { // Handle network requests }); 3. login.tpl Add the following lines inside the <head> tag of your login.tpl file. <link rel="manifest" href="/admin/PWA/manifest.json"> <script> if ('serviceWorker' in navigator) { navigator.serviceWorker.register('/admin/sw.js') .then(function(registration) { console.log('Service Worker successfully registered:', registration); }) .catch(function(error) { console.log('Service Worker registration failed:', error); }); } </script> 🎁 Contribution I hope this little guide proves useful and enhances your experience using WHMCS on mobile devices. I'm eager to see how the community uses and possibly enhances this implementation!
    3 points
  8. Just use the userid variable. $clientId = $vars['userid'];
    3 points
  9. WHMCS have just sent a notice regarding an exploit that affects all versions of WHMCS. Sadly, it seems that owned license holders are exempt from receiving critical patches? I was a happy paying customer who paid their $99 per year for support and updates until the massive shift, and now I've been left in the dark. Can WHMCS staff kindly review this considering the impact of this matter, had this exploit been identified during the time in which I had paid for support a patch would have been released and further to this, the fact that the exploit affects all versions of whmcs means that this exploit existed when I had active support.
    3 points
  10. For companies operating hosting infrastructure in multiple countries, it is often desirable to allow the customer to choose where they would like their account to be hosted. There are several ways in which this could be done. One possible solution would be to create separate products for each location, and assign the appropriate Server Group to each one. However, this would mean that you would have to maintain several instances of the same product; if you wanted to update the product in the future, you would have to do so for each instance. Another solution, and the one that I will be covering in this post, is to create one product that allows users to select their location via a Custom Field. This means that all accounts with the same 'plan' are assigned to the same product, which is more streamlined for administrative purposes, and more logical for the end user. However, WHMCS is not able to automatically select the correct location for a new account in this scenario because it doesn't understand the concept of a 'location'. By default, WHMCS can only pick a server from the Server Group assigned under the product's Module Settings - this wouldn't work for this scenario. Therefore we are going to need to write an action hook that can automatically select a server based on the location specified by the client. This guide assumes that you have already added all of your Servers to WHMCS, and that they are all working as expected. Step 1: Create the a new product (and group if applicable) for your hosting plan The first thing that you need to do is create a new product for this hosting plan via System Settings > Products/Services, as per our documentation. Make sure to setup pricing and your module settings according to your requirements. Step 2: Add a new custom field With your product now setup, you should create a new Custom Field for the product called Location. You can do this in the Custom Fields tab in your product settings. Something like the following would work nicely: Step 3: Create the action hook that will assign the correct server In this example, we will only have three servers - one per selectable location. These are: Server ID 1: VPS node in London (UK) Server ID 2: VPS node in Paris (FR) Server ID 3: VPS node in New York (US) Keep in mind that you will need to substitute these IDs with the correct ones for your hosting environment. To achieve the desired outcome, we will be making use of the PreModuleCreate hook, which is called prior to the Create command being run. To get started, create a new file at /includes/hooks called set_serverid_by_location_hook.php With this file created, paste in the following content: <?php add_hook('PreModuleCreate', 1, function($vars) { // Check if the product ID matches a supported product $productId = $vars['pid']; $supportedProducts = array(1, 2, 3); // List of supported product IDs // If it doesn't, do nothing if (!in_array($productId, $supportedProducts)) { return; } // Define serverid and location pairings statically $serverIdMappings = array( 'London (UK)' => '1', 'Paris (FR)' => '2', 'New York (US)' => '3', // Add more location-serverid pairs as needed ); // Get the Location custom field value $location = isset($vars['customfields']['Location']) ? $vars['customfields']['Location'] : ''; // Check if the location is supported if (!isset($serverIdMappings[$location])) { logActivity("Server ID not found for location: $location"); return; } // Override parameters for account creation return array( 'serverid' => $serverIdMappings[$location], // Add any other parameters you want to override here ); }); ?> This script will set the server ID based on the Location defined by the customer. If you have multiple servers per location and want to assign one randomly, then the above will need to be modified slightly. Something like this should do the trick (the modified sections have comments - the other parts do not): <?php add_hook('PreModuleCreate', 1, function($vars) { $productId = $vars['pid']; $supportedProducts = array(1, 2, 3); if (!in_array($productId, $supportedProducts)) { return; } // Define serverid and location pairings // This time, there can be multiple server IDs per location. $serverIdMappings = array( 'London (UK)' => array('serverid1', 'serverid2', 'serverid3'), // Multiple server IDs for London 'Paris (FR)' => array('serverid4', 'serverid5'), // Multiple server IDs for Paris 'New York (US)' => array('serverid6', 'serverid7'), // Multiple server IDs for New York // Add more location-serverid pairs as needed ); $location = isset($vars['customfields']['Location']) ? $vars['customfields']['Location'] : ''; if (!isset($serverIdMappings[$location])) { logActivity("Server IDs not found for location: $location"); return; } // Get a random server ID from the list of server IDs for the location $randomServerId = $serverIdMappings[$location][array_rand($serverIdMappings[$location])]; return array( 'serverid' => $randomServerId, ); }); ?> The result of this will be that the server is provisioned in the appropriate location at the time of module creation. Keep in mind that changing the value of the Location field will not update the location of the account. To do this, you will need to migrate the account to the new server. The above code worked at the time of writing. Please keep in mind that this is a customisation to WHMCS, and as such our Support team won't be able to troubleshoot any issues that you encounter with it - this extends beyond the remit of our support package. Any questions or feedback on the above are always welcome.
    2 points
  11. I don't really check Bing so unsure. Thanks for that. I agree and have used the following in robots.txt: User-Agent: * Disallow: /clients/announcements/page/* I hope this will resolve the issue.
    2 points
  12. With the upcoming price increase, is there a roadmap you can share with us for future releases, maybe for 2024? How many releases, more MarketConnect, any of the highly requested features at requests.whmcs.com ? It would be nice to know when making business decisions for 2024.
    2 points
  13. *Note: To avoid claims of self-advertisement, I'll post screenshots with no links. You can find the links pretty quickly by searching on Marketplace Hi All, I wanted to highlight some oddities I've noticed in the WHMCS Marketplace recently, but they may have been plaguing the platform for several years now. For one of my products, I noticed I had two recent reviews that appeared odd and out of place: There is nothing odd about negative reviews, but neither of these are customers of mine. Either way, I did a quick search on the usernames listed via Google and found they had left similar reviews across several other theme developers: cc. @(Amr) @WGS However, a few theme developers are being left positive reviews across all of their products during a similar time frame: cc. @AALayer @zomex There seems to be some suspicious activity in this feedback. I contacted WHMCS support to see if this could be investigated, but I was told that "they do not remove or change reviews to maintain legitimacy." That seems odd, considering they've allowed other products to be boosted by spam reviews.: Bluishost - Nearly 100 5-star reviews from October 5th through October 26th. HostWHMCS - Tons of 5-star reviews across multiple pockets of 2-3 days spans. There should be some form of moderation if WHMCS is concerned about the legitimacy of this platform. For the developers who work hard to get their products rated highly by legitimate customers, it's not ideal to have their listings damaged or suppressed due to bot or shady practices.
    2 points
  14. For those of us who made the foolish decision to stay, it might be the time to consider leaving now... https://assets.whmcs.com/customer-licensing-guide-2024.pdf
    2 points
  15. @Muneef WHMCS does not have a released version compatible with anything higher than PHP 8.1 yet. You're still ok to keep using PHP 8.1 because security updates are still provided for that version. See https://docs.whmcs.com/PHP_Version_Support_Matrix Here's a post about PHP 8.2 - 8.3 support:
    2 points
  16. @DennisHermannsen so true. It seems to me that if it's not on the changelog for the current version they are working on, the answer always is 'we are not working on that for this version' and it just gets swept under the rug again and again. We are almost to 2024 and the software doesn't have fully compatible SEO URLs. Strange. It's only been requested for the last 10 years and marked 'in progress' for I don't know how many years now. https://requests.whmcs.com/idea/make-it-possible-to-have-seo-urls-for-all-the-pages-including-cart-and-members-area
    2 points
  17. For that many, you'd be better off just editing the database manually with SQL.
    2 points
  18. Hi Guys, Updating this thread as WHMCS have confirmed the above post regarding the change of IP address. If the clients IP address changes during the payment process it will not complete. This means that any customers using services such as "iCloud Private Relay" may be prone to payment failures.
    2 points
  19. Hi @WHMCS John Thanks for taking the time to answer. It's mostly the same ole story. Add features that grow MarketConnect and Web Pros bank account. The On Demand Renewals is a welcomed feature for sure. Server monitoring, not so much because it's tied to MarketConnect. Personally, I won't be using it. HetrixTools and others work well enough. Some features such as the new text to verify that I'm seeing with AMEX and Visa / Mastercard to cut down on fraud would be great. Finishing SEO URLs throughout the system. Fixing the promo codes so they don't apply to configurable options. Fixing the admin area so when I edit a product addon, I don't have to go through 3 - 4 steps again to get back to the product addons screen again. Microsoft Login, Apple Login. Add Apple and Google Pay to the authorize.net module. There are plenty of others at requests.whmcs.com but I'm sure you get the point.
    2 points
  20. Fixed that for you. Some of us who provide web design do NOT appreciate our control panel(s) offering their own version of site builders, thanks. You/they are once again COMPETING with the client base.
    2 points
  21. It won't make a difference, but the pricing tiers they've decided on basically punish success while it doesn't adversely affect the overhead the software deals with. They'd have gotten a bit more respect (albeit with less instant profit) if they'd instead found a way to have the base price at x, server provisioning a small addon cost and so on. Not everyone needs the 800 pound gorilla version, but we're all paying the same (if leasing) for everything in it, even if it's not being used. Basing it on active clients is a lazy catchall to simply squeeze more out of leases.
    2 points
  22. I agree. Recalculating all existing service and/or domain pricing in WHMCS should already be a feature and not require an additional script or addon.
    2 points
  23. I'd have preferred to remain on the older one (if not for security issues) for the old user system and things like the ability to change passwords. None of my customers ever asked for or needed the ability to manage several WHMCS accounts from one login, nor do I recall any discussions here or on the (generally useless) requests thing WHMCS has about either one. These 2 things appear to be related, and likely something the company decided to do, realized things could go horribly wrong with logins and passwords and plodded on anyway instead of abandoning development in that direction or method(s). IMHO, two of the very worst changes that were implemented.
    2 points
  24. Lots of people have been complaining about the removal of the "Change password" feature for clients. I've created this free module that allows you to set a new password for your users. At the moment, you can only set passwords for the user that owns the account. The form to change the user's password opens up in a dialogue. Success/error messages are shown in a toast. This module is provided as-is. You're free to do whatever you want with it. Don't expect me to fix issues - there's a chance but no guarantee. Module can be downloaded here: https://github.com/DennisSkov/WHMCSPasswordChange/ PRs are welcome.
    2 points
  25. In this video I show my 7 step WHMCS security checklist.
    2 points
  26. Calling your admin area "admin" is part of the issue. You should at the least use something less simple to guess.
    2 points
  27. If I am reading right, test123.comcy is invalid, so response is correct. test123.com.cy is valid.
    2 points
  28. Today we've enabled Mark as Solution on the community. Located in the footer of each post you'll see "Mark as Solution" as the post, this will be visible to the original poster. Once the post has been marked as solved you'll see a green banner appear in the top of the post with a link to the post selected as as the solution. This is the first of many new features we're rolling out as part of our latest community upgrade.
    2 points
  29. Some people want to show their client's credit balance when they login to client area, as the option not implemented by default in Six Template here is how to do it: 1) Upload the PHP file from Attachements to -> /WHMCS-Path/includes/hooks/ directory. WHMCS_SixTemplateCreditBalance.zip
    2 points
  30. Bootstrap 5 was released almost 3 years ago. Is it ever going to make it into WHMCS? Anytime soon?
    1 point
  31. 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
  32. I'll give free module of phonepe. Anyone wants ?
    1 point
  33. hi can every one help me fix error page from display error and page error Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 196608 bytes) in /home/makeyourwebdesig/public_html/vendor/illuminate/database/Connection.php on line 336 Oops! Something went wrong and we couldn't process your request. Please go back to the previous page and try again. For additional assistance, please reference the WHMCS TroubleShooting Guide » Whoops\Exception\ErrorException: Allowed memory size of 134217728 bytes exhausted (tried to allocate 196608 bytes) in /home/makeyourwebdesig/public_html/vendor/illuminate/database/Connection.php:336 Stack trace: #0 /home/makeyourwebdesig/public_html/vendor/whmcs/whmcs-foundation/lib/Utility/Error/Run.php(0): WHMCS\Utility\Error\Run->handleError() #1 [internal function]: WHMCS\Utility\Error\Run->handleShutdown() #2 {main}
    1 point
  34. Hello, Is there any way to change with php code to translate it into 2 languages in this section (Billing->Add Funds) in whmcs The code below helped me change the options in the invoice. Is there any way to change it? function custom_bank_gateway_text($vars) { global $details; global $_LANG; if ($vars['status'] == 'Unpaid' && $vars['paymentmethod'] == 'Bank Transfer') { return array("paymentbutton" => "Hello User!"); } } add_hook('ClientAreaPageViewInvoice', 5, 'custom_bank_gateway_text'); I added this line of code at the bottom: add_hook('ClientAreaPageAddFunds', 5, 'custom_bank_gateway_text'); but it didnt work.Any Solutions?
    1 point
  35. Hello, Did you find a solution??? We are having the same issue recently. Thanks.
    1 point
  36. Would be great if they finished the job with SEO implementation. I hope that it's been put on hold for a good reason 🫠
    1 point
  37. Really? I'm on the verge of getting past 2,500 clients which will be a SLOW climb. Let's take a look at the actual cost-per-client: 2,499 clients: $0.624 cost-per-client, per year. -> with the Business 2,500 licence at $129.95 /mo 2,501 clients: $1.0793 cost-per-client, per year. -> with the Business 5,000 licence at $224.95 /mo In case the math is not clear, that's more than twice the cost-per-client. But wait, let's say we're on a roll of sustained growth and we get closer to the next tier: 4,000 clients: 0.6749 cost-per-client, per year. -> again with the Business 5,000 licence at $224.95 /mo It's still MORE expensive than it was for 2,499 clients! So no, those prices don't have the success of your clients in mind. Prove me wrong.
    1 point
  38. great to hear but also funny that the systemhealthandupdates.phppage shows a warning about php 8.1 perhaps it needs to be re-worded a bit better as i saw the warning and thought oh i will switch to 8.2 and broke the site... so im guessing its just WHMCS hasnt been encoded for ion 13 yet?
    1 point
  39. They need to rename it - “MarketConnect: Now with WHMCS!” 😂
    1 point
  40. I believe this page gives users the option to turn off/on single sign on if enabled.
    1 point
  41. Domain registrars are often bound by legal and policy requirements to collect accurate WHOIS information for domain owners. Skipping these steps may lead to non-compliance issues. Configuring DNS settings is necessary for the domain to point to the desired website or server. Skipping this step would mean that the domain might not function as intended. Instead of skipping these steps, consider improving customer education and support. Provide clear instructions and guidance to customers on how to complete these configurations. Some domain registrars offer APIs or hooks that allow for more automated configurations after purchase. You might explore these options if they are available with your registrar.
    1 point
  42. Lagom WHMCS Client Theme has been updated to 2.0 version! Order Now Changelog Documentation Services Contact Different Styles & Colors Lagom WHMCS Client Area Theme consists of 4 unique styles. There are 5 different color schemes available for each style. Modern Futuristic Default Depth Style Manager Provides essential tools used to manage Lagom theme colors and styles without having any technical know-how. You will be empowered to apply various Styles and Color Schemes to tailor our theme to your brand style. Learn More Menu Manager From now on, you do not need to create complicated WHMCS hooks to modify the Lagom theme navigation. Menu Manager delivers a super convenient option to set up the menu items from the WHMCS addon. Learn More Multiple Layouts Make full use of 5 unique layouts for the main menu navigation and 2 various layouts for the footer. Other Lagom Features Login Based Layouts Display different menu and footer layouts based on the customer's login status. Learn More Basic SEO Management Manage SEO for selected theme pages. Assign your custom page title, description, and social image. Learn More Custom Layout for Pages Assign a unique Lagom Layout to specific pages and overwrite settings made in Layout Manager. Learn More Affix Theme Navigation Affix the top Lagom theme navigation when a customer scrolls your website up. Learn More Multiple Element Styles Using a few simple clicks you can choose from 3 different styles available for particular Lagom elements. Learn More Multiple Page Templates Define various templates for selected Lagom theme pages and configure its settings. Learn More Different Fonts Change Font Family used in the Lagom theme with a few simple clicks. Learn More Affix Theme Sidebars Affix theme sidebars to the top of the browser window. Learn More Hide Sidebars Hide Lagom theme sidebars for selected pages in Page Manager. Learn More
    1 point
  43. The hook (along with the latest addition) has been added to this repository: https://github.com/DennisSkov/WHMCS-Hooks-and-Modules
    1 point
  44. WHMCS works wonderfully on Nginx (faster at the least), however WHMCS don't provide enough documentation. You can find all the tools you need to put things together yourself using Google, but I wanted to start this thread (and hopefully keep it updated) to keep track of the latest directives required. I'm not trying to teach you how to use Nginx or how to configure it. WHMCS will load and install just fine, but you will run into a few links that don't work in the admin and client side. At the least you need to include the following directives (including a block of the /vendor folder, which WHMCS do actually provide directions on ) : https://gist.github.com/xyzulu/dbe2762c131b7bf3fbfc67056a565ae0 .. if you don't know where to use these directives, then Nginx and WHMCS probably isn't for you. If you have any suggestions on better directives, or run into and issues please let me know here.
    1 point
  45. Additionally, this error could be caused because your database does not have the "drop" privilege. For whatever reason it appears the compatibility check requires the drop privilege.
    1 point
  46. Hi @tkalfaoglu, I'm pleased to hear you're interested in our new NordVPN offering which offers competitive standard pricing with minimal commitment. The Standard monthly plan price on nordvpn.com is $12.99/month. Through MarketConnect your cost is as low as $4.50/month. This enables you to sell at the RRP of $8.99 which is a significant discount below the direct pricing. The Standard annual plan price on nordvpn.com is $124.35/year (or $68.85/year with the current promotion). Through MarketConnect your cost is as low as $42.00/year. This enables you to sell at the RRP of $59.88 which is a significant discount below the direct pricing. Of course you are welcome to set your own selling price at the margin you're most comfortable with.
    1 point
  47. Hi all! I have created an addon module, with two language files. It's working fine with _ADDONLANG vars. But then I create a hook that displays a message in client area home, and I need to access _ADDONLANG from that hook I tried LANG, _ADDONLANG, Lang::trans... and can't get it working. Can somebody tell me if addon's _ADDONLANG variables are accessible from hook?
    1 point
  48. @jcn50 @agarzon Received this reply from WHMCS support and it worked for me. During the update to WHMCS 8 a number of files are deleted from the installation. However, if these fail due to permission issues certain files left over could cause issues. This particular issue you experienced appears to be caused by the following file not being able to be deleted: /vendor/symfony/translation/TranslatorInterface.php Therefore if you experience the issue after upgrade removing that file should solve the problem.
    1 point
  49. Hello all I'm surprised that this doesn't appear to be have been quoted / commented on more than it has, as I'd suspect it affects far more than just the handful to raise their hands so far. When a client is logged into their WHMCS-based account, they have the ability to SSO to their cPanel-based account, a great hand-off from one platform to another. Unfortunately what doesn't happen is the domain name remaining the same - so client starts their journey at https://myhostingbrand.com/client and then is passed into cPanel at https://servername.myresellerbrand.com:2083 This breaks the whitelabelling nature of being a reseller and exposes domain names that can lead to confusion with the end client. @WHMCS Peter has documented that this is possible, and a Feature request has been created. If you also experience this (or even if you don't!) it would be great to get the "I like this idea" count up and try to bring this development forward, so that everyone who uses WHMCS with cPanel can enhance the reselling experience for their clients. Thanks Matt
    1 point
  50. I used this useful hook and all are now hidden. but now I have a lot of white space.. how can I reduce this space ?
    1 point
×
×
  • 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