Jump to content


Popular Content

Showing content with the highest reputation since 12/17/20 in all areas

  1. 3 points
    Seeing as WHMCS don't have a list of the bugs they have had reported and are working on, I thought I'd create this thread to track the current 8.1 GA bugs. If you find any, please let me know and I will edit this post to add them (hopefully I have enough permission to do so). Below is the list of ones I am aware of: CORE-16022 double validation warning password reset page: https://whmcs.community/topic/304324-twenty-one-template-minor-tweaks/?do=findComment&comment=1346483 CORE-16025 twenty one theme hard coded strings: Twenty one theme hard-coded string - WHMCS 8.1 Beta Discussion Board - WHMCS.Community CORE-16026 client email history missing: https://whmcs.community/topic/304324-twenty-one-template-minor-tweaks/?do=findComment&comment=1346510 (this might be a showstopper for you) PS WHMCS staff you are welcome to edit this post of mine to add any other bugs currently being worked on if you like.
  2. 3 points
    Happy New Year! We are pleased to announce we have released a Hotfix for this issue:
  3. 3 points
    i'm pretty sure that I haven't bothered to install any hotfixes in the v8.0.4 dev. give @web2008 a medal... πŸ₯‡ ... *now* I can reproduce the exact error that @xyzulu is seeing - and all I had to do was to replace the default version of /includes/ticketfunctions.php with the version in the CORE-15639 hotfix... reverting back to the version of the file that was already there (which must be the v8.0.3 version as there wasn't an update to that file in the v8.0.4 incremental patch) allows the form to work as normal. πŸ™‚ in that hotfix, there are other files within the/vendor folder that I haven't bother to test - so potentially they might have an impact on this too. if @xyzulu isn't piping, then I suspect just swapping the v8.0.3 or later version of the file should get him through until later, more "stable", v8.1 versions are available. only WHMCS could think of launching a major release GA in the week of Christmas - prepare for v8.1.1 before the New Year everyone. πŸ™„ frankly, i'd prefer to see a fix to the hotfix and delaying the GA until next month... but maybe i'm biased cos I was planning on a relaxing Xmas break! πŸŽ„
  4. 2 points
    if you wanted the decrypted cPanel service password value available to the template, you could use the hook below... <?php # cPanel Service Password Hook # Written by brian! function product_details_cpanel_password_hook($vars) { $service = Menu::context('service'); $servertype = $service->product->servertype; if ($servertype == 'cpanel') { $password = $service->password; $command = 'DecryptPassword'; $postData = array('password2' => $password,); $results = localAPI($command, $postData); $realpassword = $results['password']; return array ("realpassword" => $realpassword); } } add_hook("ClientAreaPageProductDetails", 1, "product_details_cpanel_password_hook"); that would then allow you to use {$realpassword} in the template to show the password value.
  5. 2 points
    in v7 and earlier, you could right-click on the "Login As Client" link and open it in a new tab - useful if you need to see both admin and client areas at the same time. in v8, "Login As Owner" now uses a form and you can't right-click on it to open a new tab... *sighs* πŸ™„ so the simple hook below will open that link in a new tab by default... <?php # Login As Owner Open In New Tab Hook # Written by brian! function admin_login_as_owner_hook($vars) { if ($vars['filename'] == 'clientssummary' && isset($_GET["userid"])) { return '<script>$("#frmLoginAsOwner").prop("target","_blank");</script>'; } } add_hook("AdminAreaFooterOutput", 1, "admin_login_as_owner_hook"); you could edit the clientssummary.tpl template too and just add the target link to the form code.
  6. 2 points
    Yup, Thanks @twhiting9275 Now it's Working Perfect,
  7. 2 points
    I posted the hook below previously in the v8 beta forums.... of course, the thread has got deleted.... when will i ever learn not to post code in the beta forums? <?php function admin_custom_css_hook($vars) { $head_return = '<style>.col-md-8 {width: 100% !important} .tasks {display: none;}</style>'; return $head_return; } add_hook("AdminAreaHeaderOutput",1,"admin_custom_css_hook");
  8. 2 points
    Hi, I'm facing a problem in a ticket that shown wrong client name and email for example shown XYZ Staff instead of the real account name also with different email registered to another contact account.. also market in Orange as External User
  9. 2 points
    Just change the "grepp" to your registrar modules name. You could get them via the database directly and pass the passwords to the DecryptPassword API to get them unencrypted.
  10. 2 points
    even if there was a hotfix, WHMCS doesn't automatically tell you about it's existence... i'm going to have a look again at doing something about this. if you got a ticket opened an hour ago, that was me testing your form - and yes I did see the oops error... FWIW, if I do the same on my v8 dev, no similar error occurs and the ticket gets created.... the value of 0 is passed to the userid column rather than null. oh I so miss the days when bug reports were posted through this place and you then had an idea where the errors are and could look out and work around them... instead of finding out either a) when you got them yourselves or b) when the changelog suggests that they think they've fixed it. now you're in a position were your guest ticket might not work correctly - and the WHMCS solution might come in the next 5 minutes, 5 days, 5 weeks or might he held back for v8.1 and you're then almost obliged to update to fix it. i've said it before - WHMCS are one of the worst communicating companies i've ever seen... in many ways, they've got worse over the years and I bet nothing changes in the New Year.
  11. 1 point
    Hi @SwiftModders LLC, Thanks for your message, I've let the relevant people know this is needed.
  12. 1 point
    I suspect you could do it your way if you modified sidebar.tpl to expect a color to be passed to it as an extra (and assuming the CSS was defined for it as per the panels). the way I would do it would be to use setClass... it would still work on v8.1 and Six...
  13. 1 point
    Hello WHMCS New V8 Email Campaigns, is amazing and bring us more value to how we can deal with communications with clients, and email marketing inside WHMCS, but after some tests I understand that this future improvements, could be locked to Administration roles permission. Currently if a staff has permission to access or create email campaigns also he has permission to decide to send or not, this is not right in my point of view. I understand that would be better if has a new permission ability to send mass mail So with this this new permission role means that I could authorize a staff to access Mass mail, create, preview but NOT SEND, because SEND OUT need some more responsibility and need another staff\administrator to decide to send out if everything is OK. As a company owner, I need to delegate this task to another staff, but I do not want to give him access to send it. What if some day this staff gets crazy and send out whatever email he wants to all clients? Could get a company in bad bad reputation, that I could never get fixed. If you have a business that only you managed, fine, but as business grow-up and as a business owner you need a team, but also you need to be on control. Hope WHMCS also understand that this is a valued contribution. PS: I intend to give a staff a task to create some emails, but is it fair that this staff to send mass email for example to over 600 clients without my consent.
  14. 1 point
    πŸ˜„ Yes, I am shocked that they are finally getting to feature requests from 7 years ago. What's the rush?
  15. 1 point
    Ah, just found it, you have to change the value on the tablelist include to: noSortColumns="0" startOrderCol="1" filterColumn="4"
  16. 1 point
    Happy New Year. You need to change the version number in the `$configarray`. "version" => "1.0",
  17. 1 point
    to use the relevant hook point for this would likely be ShoppingCartViewCartOutput - an example of which is in the thread below... now in your case, you're probably going to need to loop through the contents of the cart, to determine the content of the output.... e.g., there could be scenarios where multiple alerts could be triggered my the cart containing multiple applicable products.
  18. 1 point
    Have you checked the Friendly URL > Advanced settings for the correct .htaccess entries? Perhaps these are not synced?
  19. 1 point
    Hello It is being long time from my last post. Since I stared using WHMCS ... (on the way to 4 year), this is the first time I took so long to upgrade to latest version.... Was so busy on last 4 months, so I did not take the risks and need to worry if anything goes wrong during update. So here I am and happy I could perform update alone today, and follow-up all those steps required before starting my update (perhaps I am not a newbie anymore). My production are now with v8.1 released few days ago. Now need to open support ticket to WHMCS staff to help with upgrade this time πŸ˜‡ Despite I am using 5 addon modules, I could be able to get them working and even better not having any error regarding till for now. Happy new year to every one!πŸ’₯
  20. 1 point
    for example, if you used the values 10,15,60 on your logo.png image (which seems to be 4176x3500px) - you should see the following... with 10,15,65 the width of the image would be larger... it's just a case of playing with the values until you find those which suit your logo and PDF design. if you're talking about emails, WHMCS doesn't store the headers/footers in the database, only the content of the emails. if you sent an old invoice to a user, the invoice would use the old logo, but the email would use the new one.... possibly you could get around that by modifying the mail header in general settings, but that could get messy. possibly what you should really have done, if you knew there were company changes like this, would have been to invest in a multi-brand addon module last year. the height of the logo if set using CSS and defaults to 50px... as you're using the Six template, you can change it using CSS in a custom.css file section#header .logo img { max-height: 100px !important; } again, it's just a case of playing with the px value to get a suitable height for your logo.
  21. 1 point
    Support were quick and helpful. If anyone else gets this issue check your modules. I had an outdated module (Tawk.to) causing a javascript conflict with Stripe.
  22. 1 point
    create a new .php file in /includes/hooks, called it newtlds.php (or whatever), paste the above code into it and save - there is no need to edit clientareahome to add the code.
  23. 1 point
    @WHMCS Marcus - small point, but isn't the tag on the hotfix post wrong, it says 8.0_HF, but surely there should be a v8.1 folder of hotfixes (to follow the existing pattern for 8.0, 7.10, 7.9 etc releases) and this hotfix should be in there rather than with the older v8.0 hotfixes and then this tagged 8.1_HF?
  24. 1 point
    it would apply to child themes of Six too, and seemingly all dataTables pages, so not just domains, but invoices, services, tickets, quotes etc... they're all limited to 10 records displayed.
  25. 1 point
    if it is hardcoded, I wouldn't bother to try to change it - just hide the existing banner with CSS and then create your own banner... that will give you the option of styling it to suit your site, using language strings to allow it to show the text in the client's language (if you have a site where clients are from differing countries) etc. <?php add_hook('ClientAreaHomepage', 1, function($vars) { return '<div class="alert alert-info text-center">The next generation of domains is coming! Take advantage of New TLD opportunities. <a href="index.php?m=newtlds">Learn More Β»</a></div>'; }); top is the new banner created by the hook; bottom is the original banner that you can hide with CSS.
  26. 1 point
    well you chose the right hook point - clientareapageviewinvoice... and you won't need to check the template name. πŸ™‚ you can't do it the way you're trying to do it... the client will be logged in and therefore you can find out their currency - you don't need the currencies array.; you would have to modify the $gatewaydropdown variable (usually be removing specific gateway strings per gateway) - often easier said than done; there are scenarios where you might have to reset the default gateway (if you're removing the existing default for that invoice) by updating the database table; I will have posted previous hooks that modified $gatewaydropdown for various purposes - I would suggest that one of those would be a better starting point.
  27. 1 point
    That we need a release or two of PURE bug fixes? The last I don't know how many releases are loaded with new bugs and to me it's like 'ok, which version do I pick that will have the least amount of bugs that effect our customers?' and I'll go with that version. For example, 7.10.2 had a bug that causes the admin and the customer to not be able to update a billing address for credit card payments. So, that's fixed in v8.0 which introduced it's own set of new bugs. Now, we were hoping to upgrade to 8.1 so that we could finally get the 7.10.2 bug fixed and now see numerous reports of bugs on the 8.1 release. It seems like WHMCS just has a calendar saying we're going to release x number of updates this year, on these set dates, no matter what and then they're all pushed out. Personally, I'd be more than happy to pay all year and only receive 1 or 2 updates for the year as long as they were of high quality - to fix numerous bugs. Why not sit down and take the time to do things right? I highly doubt that even 50% of your customer base wants or needs these new MarketConnect features and SSL monitoring and other 'features' that you're adding so often.
  28. 1 point
    As you probably know WHMCS v8 no longer provides statistics on top of the page about pending orders, overdue invoices and tickets awaiting reply. This action hook adds them back to interface as you can see from the following screenshot. This badge is fully responsive and appears if there's at least one pending order, overdue invoice or ticket awaiting reply. If there's nothing to show it disappears. To avoid any possibility of confusion, the hook automatically detects if you're running v8. Get the Code Β»
  29. 1 point
    Hello @Beekingo Thanks for taking the time to report this, appreciated. I see it https://github.com/WHMCS/templates-twenty-one/blob/master/login.tpl#L55 I've opened a case #CORE-16025 with our team to have that resolved. Season's greetings and all the best for the new year.
  30. 1 point
    this is what i'm seeing - custom theme with same structure as yours (though I haven't modified footer.tpl)... ignore that it's red rather than black - I just needed to know it was calling the correct css file... working on both Firefox and Chrome.
  31. 1 point
  32. 1 point
    the issue will be that you can't add CSS changes how you're trying to do it - assuming the CSS ID of yours is correct, it should be... <?php # Remove Gateways for Product Addons Hook # Written by brian! function cart_gateway_removal_for_product_addons($vars) { if ($vars['templatefile']=='viewcart'){ $gateways = $vars['gateways']; $allowed = ['mailin','paypal']; if (count($vars['addons']) > 0 && count($vars['products']) == 0) { foreach ($gateways as $k => $item) { if (!in_array($item['sysname'],$allowed)) { unset($gateways[$k]); } } function addon_gateway_custom_headeroutput_hook($vars) { $header_return = '<style>#creditCardInputFields {display: none !important;}</style>'; return $header_return; } add_hook("ClientAreaHeaderOutput",1,"addon_gateway_custom_headeroutput_hook"); if (count($gateways) > 0) { return array("gateways" => $gateways); } } } } add_hook("ClientAreaPageCart", 1, "cart_gateway_removal_for_product_addons");
  33. 1 point
    Kian has a hook that works in a similar way with domains, e.g count how many domains and assign client to a group... you would have to adjust the db query, e.g change references of tbldomains to tblhosting; define the hosting statuses to count etc... https://github.com/Katamaze/WHMCS-Free-Scripts/blob/master/hooks/AssignClientToGroupBasedOnRegisteredDomains.php
  34. 1 point
    I know it sounds a little bit cliche, but cycling, gym and running works great for me. It boosts mental health and concentration... unless I meet idiot drivers and cyclists then we start fighting 🀬 but it is still better than overworking. Eating good stuff to reward yourself and living with gf / wife / someone also helps as we can't meet with friends.
  35. 1 point
    Oh the stuff we go through for taxes.
  36. 1 point
    $clientsdetails.currency will return the id value from the tblcurrencies database table - so it's going to return a number rather than a specific currency code, e.g USD, GBP etc. now you could look that value up in the database, or if you know the ids of your currencies, then you can code based on the values instead of using GBP, USD directly... if you don't, then a quick way might be to use... $currencydata = getCurrency($userid); $currencycode = $currencydata["code"]; $currencycode should then contain the code, e.g GBP, USD etc and you should then be able to use that in your IF statements to decide what to do based on the client's currency.
  37. 1 point
    I had to stop using PreModuleCreate for the better πŸ˜• Few weeks ago I realized that this hook point acts weirdly. Yes, it changes the password used for provisioning BUT in the same time stores a different password in tblhosting.password. The only way to make it sure that both password are the same, is via OverrideModuleUsernameGeneration πŸ˜₯
  38. 1 point
    Kian has some relevant password generator hooks that I think you could slightly tweak for your situation, e.g remove those characters, numbers from the string of available characters and it should generate a password without using them.... https://github.com/Katamaze/WHMCS-Free-Scripts/blob/master/hooks/StrongerPasswordGeneratorForAutoProvisioning_v1.php https://github.com/Katamaze/WHMCS-Free-Scripts/blob/master/hooks/StrongerPasswordGeneratorForAutoProvisioning_v2.php there is a third version of the hook, but that won't be relevant for your situation.
  39. 1 point
    it would have to be custom written - though it should literally only take a few lines of code... if I quickly modify the productsinfo.php feed to have a stock option, then the code would look like... <?php use WHMCS\Application; use WHMCS\Config\Setting; use WHMCS\Exception\ProgramExit; use WHMCS\Product\Product; use WHMCS\Session; use WHMCS\User\Client; use WHMCS\Database\Capsule; require("../init.php"); /* *** USAGE SAMPLES *** <script language="javascript" src="feeds/productsinfo.php?pid=1&get=name"></script> <script language="javascript" src="feeds/productsinfo.php?pid=1&get=description"></script> <script language="javascript" src="feeds/productsinfo.php?pid=1&get=price&billingcycle=monthly&currency=1"></script> <script language="javascript" src="feeds/productsinfo.php?pid=1&get=orderurl&carttpl=web20cart"></script> */ $whmcs = App::self(); $pid = (int) $whmcs->get_req_var('pid'); $get = $whmcs->get_req_var('get'); $language = $whmcs->get_req_var('language') ?: null; $data = array(); $name = $description = ''; // Verify user input for pid exists, is greater than 0, and as is a valid id if ($pid > 0) { $data = Capsule::table('tblproducts') ->where('id', '=', $pid) ->first(); $pid = (int) $data->id; $qty = (int) $data->qty; // If there is a user logged in, we will use the client language if (((int) $userId = Session::get('userid'))) { $language = Client::find($userId, array('language'))->language ?: null; } $name = Product::getProductName($pid, $data->name, $language); $description = Product::getProductDescription($pid, $data->description, $language); } // Verify that the pid is not less than 1 to in order to continue. if ($pid < 1) { widgetOutput('Product ID Not Found'); } if ($get=="name") { widgetOutput($name); } elseif ($get=="description") { $description = str_replace(array("\r", "\n", "\r\n"), "", nl2br($description)); widgetOutput($description); } elseif ($get=="configoption") { $configOptionNum = $whmcs->get_req_var('configoptionnum'); if (!$configOptionNum) { widgetOutput('The variable configoptionnum is required when get is configoption.'); } widgetoutput($data['configoption' . (int) $configOptionNum]); } elseif ($get=="orderurl") { $cartTemplate = $whmcs->get_req_var('carttpl'); if ($cartTemplate == "ajax") { $cartTemplate = "ajaxcart"; } $systemUrl = App::getSystemUrl(); if (!$cartTemplate) { $cartTemplate = Setting::getValue('OrderFormTemplate '); } widgetOutput("{$systemUrl}cart.php?a=add&pid={$pid}&carttpl={$cartTemplate}"); } elseif ($get=="price") { // Verify user input for currency exists, is numeric, and as is a valid id $billingCycle = $whmcs->get_req_var('billingcycle'); $currencyID = $whmcs->get_req_var('currency'); if (!is_numeric($currencyID)) { $currency = array(); } else { $currency = getCurrency('', $currencyID); } if (!$currency || !is_array($currency) || !isset($currency['id'])) { $currency = getCurrency(); } $currencyID = $currency['id']; $data = Capsule::table('tblpricing') ->where('type', '=', 'product') ->where('currency', '=', $currencyID) ->where('relid', '=', $pid) ->first(); $price = $data->$billingCycle; $price = formatCurrency($price); widgetOutput($price); } elseif ($get=="qty") { widgetOutput($qty); } else { widgetOutput('Invalid get option. Valid options are "name", "description", "configoption", "orderurl", "qty" or "price"'); } /** * The function to output the widget data to the browser in a javascript format. * * @throws WHMCS\Exception\ProgramExit * @param string $value the data to output */ function widgetOutput($value) { echo "document.write('".addslashes($value)."');"; throw new ProgramExit(); } however, do not modify the existing productsinfo.php file as it will get overwritten during an update... create a new .php file in the feeds folder, call it productstock.php (or whatever) and then to display a stock quantity for a given product, you would call the feed using... <script language="javascript" src="feeds/productstock.php?pid=1&get=qty"></script> the feed will return the stock quantity for the product, but will not contain any styling (unlike your image) - you can add your styling to the template or the feed, whichever you're more comfortable doing.
  40. 1 point
    You can set the status to active, smash the create button, and restore. No need for them to sign up again. As for invoice, I would change the next due date to say the next day and hit the "Generate Invoices" link on the client's details page.
  41. 1 point
    it should be waiting for the next cron run to occur - so if you're running the cron hourly, then it should occur within the next hour; if you running the cron every 5 mins, then it should have already begun.
  42. 1 point
    THIS is probably the most ridiculous change I've seen in the 8.x series (and trust me, I've seen quite a few). Choosing a client's password , or resetting it for them (no, sending them a link is not the same thing) is a pretty crucial thing. You can tell the WHMCS team haven't actually spent time on the phone with customers, at least end hosting customers, because, in the time I did end user support for various companies this came up rather frequently. It doesn't take that much to verify clients, really, and honestly, given the hosting industry, if you can't do something as simple as this, you're going to get some ugly feedback from your customers Again, agreed. It's obvious that this was an after thought here. Hooks shouldn't be needed to fix the design mess (and yes, it's broken) caused by software developers.
  43. 1 point
    You can still trigger a password reset in 8.x.. see: You can't choose the password for the customer however.
  44. 1 point
    As with any new release we craft a range of new documentation heres an overview of our new documentation for WHMCS V8.1 New Twenty-One Client Area Theme Disabling Outgoing Mail Email Importing OAuth2 for Email Importing Social Networking (Updated) Data Retention Policy Automation (Updated) Clients Users Tab (Updated) Users and Accounts (Updated) General Tab (Updated) Standard Order Form Templates (Updated)
  45. 1 point
    The support is excellent. The team in place is very reactive. I had a problem with one of the API updates and it was fixed very quickly. It took me a bit of time to get familiar with their interface, but now it's fine. The prices are good, their module works well with WHMCS. So, I am very satisfied!
  46. 1 point
    out of the box, there will at least a couple commercial third-party solutions... WordPress Manager For WHMCS IBG App Installer - All-in-One (AiO) both would be $100 per year, so check out reviews (where available) and use a trial version on a development install before committing to purchasing (if possible). for free solutions, you could take a look at the Softaculous WHMCS Auto Install Module - though that would likely require more manual configuration on your side than using the commercial options.
  47. 1 point
    hey bro is it possible to saw internet provider name in hostname https://prnt.sc/rqkolg
  48. 1 point
  49. 1 point
    you can use the following hook to remove the Store menu dropdown... <?php # Remove Store From Navbar Hook # Written by brian! use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { if (!is_null($primaryNavbar->getChild('Store'))) { $primaryNavbar->removeChild('Store'); } });
  50. 1 point
    require_once __DIR__ . '/../../includes/registrarfunctions.php'; . . . $params = getRegistrarConfigOptions('grepp'); Another workaround is to read them directly from the database and use 'decrypt' method.
  • 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