Jump to content


Popular Content

Showing content with the highest reputation since 09/26/21 in all areas

  1. 7 points
    I am more than glad to discuss this since it gives me the opportunity to prove that what moves me. Surely I'm not the best business man and developer of the world but I have a lot of direct experience since I'm playing with WHMCS since 2007. Let's go. If I had a euro for every time I heard that, I would own a Ferrari. There are probably 50k providers using WHMCS. Can you imagine how many developers and CEOs are out there? Ones that use this software on a daily basis sharing the same needs and requirements. There are many opportunities and potential customers to fulfill the growth of multiple companies. There's room for everyone. This market is rich and can provide for everyone. That being said, apart from the usual Modulesgarden and few more companies, I can't see anyone showing up with a module that solves something relevant and that is maintained for more than a couple of weeks. Why is it like this? Short answer: easier said than done & the devil is in the details. WHMCS gives people the perception to be a developer-friendly environment. One sees action hooks, API and concludes that making modules and adjustments is not a big deal till you begin coding for real and relize that this is far from being true. When I started in 2007 there were tens of developers actievely releasing modules. They all disappeared. Today there are less than 5 companies left and probably only 1 or 2 are capable of assisting you decently while they maintain their softwares in this WHMCS that keeps growing bugs, bloats and stupid ideas. It is also worth to underline that many of these companies are focusing on meeting small and trouble-free needs like creating templates, micro-management scripts, integrating some kind of services with API and payment gateways. With very few exceptions, nothing can match the complexity of Modulesgarden works. In essence we are talking about a market with almost no competition so two questions arise. First. Why in such a rich market with almost no competition and many needs that are waiting to be satisfied no one is investing money into module development? Second. If this market is rich and creating modules is easy, why Modulesgarden and others are expanding or moving to other markets? For me the answer is that creating modules for WHMCS is not like creating plugins for WordPress where tens of thousands of devs are welcome. In WHMCS no one gives a flying duck of your work. They never valued nor considered the job of third-party developers that are helping them to sell their product. This shouldn't surprise us as they don't even care about their own customers. Also don't forget that as a developer you are required to pruchase WHMCS in order to start coding. As for me, I started building this monster (Billing Extension) in 2014 exactly because I had the idea that coding in WHMCS was relatively easy and profitable. I was wrong as hell. Unfortunately I couldn't predict years or bad twists by WHMCS. To make matters worse, unlike most of my competitors, I focused on the dark side of WHMCS aiming to fix its issues and add missing features. If I could go back in time, I would stay away from billing. Profit-wise, creating a template or couple of payment gateways would have been the best decision but I don't regret it since I learned many things and met many people. So today I have a module so complex that would take a company of the size of Modulesgarden to support customers and maintain its code. I tried to scale-up. I hired developers, added more funds, merged modules rebuilding them from scratch with the same framework (1 year of work), wrote 500+ pages of docs in two languages, tried to increase prices (...) but it was still not enough. All while WHMCS from day to night release once another a version that breaks the mega-complex script that took you one month of work and that still needs to work in the old way only for people running older versions of WHMCS 🥵 After 3 consecutive years of Ok-ish results and nightmares due to WHMCS releases, I was still dealing with the same problem. I needed more funds to hire more developers but customers didn't want to support us with price increases because (I quote) «We don't need support», «Your module can't cost us more than WHMCS, Plesk or cPanel licenses», «I only use one feature». Fair enough, got it. Ironically few years later WHMCS increased prices up to $1.299.95/mo and put an end to life-time licenses 🤔 In retrospect, I should have raised prices anticipating the trend started by WHMCS, Plesk, cPanel and competitors. You can't grow customers and face increased complexity and challenges driven by poor management of WHMCS keeping the same cheap price. You end up investing tons of man-hours debugging the impossible and money doesn't grow on trees. In conclusion for me it was time to let it go. Funding such an unsustainable business just because you happen to have other sources of income doesn't make it better. You are just prolonging an agony. And for what? Cons: More nightmares, working on 25 December, at night, 12-hours per day (even 16 during emergencies 😑), being permanently unable to keep up with the so-called "stable" releases of WHMCS, receiving five new tickets every time you close one, being "stalked" and "hated" by customers, negative reviews, dealing with all the crazy stuff involving billing and e-invoicing and that unexpected change that forces you to update your module so that it works with: five, six, twentyone, ThemeMetro, Swiftmodders, bootstrap 3, 4, my uncle, my grandmother... give me a break. Pros: some profit that doesn't repay you for the toxicity you have been subjected to. In all honesty it is not worth the effort. I prefer to invest in a grid bot to buy low and sell high on a random crypto. It feels better even when I lose 1k in less than a minute. This reminds me the 2007-2012 period when I was running a quite successful game hosting provider. Everything was going fine. Good vibes, revenues, high dedication, passion for what I was doing till people started playing with ddos attacks to fulfill their egos and live the "hacker-life". At that time anti-ddos protection was very costly. I was spending 28 times the money spent by attackers to ddos me. When you spend 80% the money just to cover firewall and bandwidth costs with servers still lagging, you know it is time to sell your toy and move on. Many years later on a different market and for different reasons the story repeated with WHMCS. Ask me anything but when it comes to gameservers and WHMCS my wallet is closed and my time is better spent on a bycycle in the attempt to win a race on Zwift even if it hurts and leaves you panting like a lizard on a hot rock. Atm I' happily working on a different market that is way more complex than WHMCS but it is still more rewarding. There's a bigger pool of talents and teaching stuff is easier. Not to mention we can plan incomes, expenses and predict changes well ahead simply because there's no entity like WHMCS that feels the urge to pump out sloppy updates driven by nothing that resembles user feedback not couting shady collabs. In my opinion these are only ways to perform well as third-part developer of WHMCS: Making small scripts that are not subjected to WHMCS decisions Work for providers with deep pockets Find a way to gather tens of software developers, designers and specialistys in various fields Embracing open source hoping providers sponsor your project and that other devs come to help. If I had to choose I'd go for open source but considering risks and the fact that WHMCS doesn't care about you, why should I spend my reputation for them? Why should I keep supporting them in chains? At this point I would create my own system
  2. 2 points
    Just to note, I've posted a cleaned up version on my GitHub at https://github.com/leemahoney3/whmcs-decrypt-custom-fields-in-tickets Has the ability to exclude certain custom fields by their name if needed.
  3. 2 points
    These forums are becoming a joke, I can't even post code snippets anymore without getting 403's. Please see my solution for this here: https://pastebin.com/0Tf26CKN
  4. 2 points
    None at all, I'm afraid. I believe it. The product has moved away from what the user wants and towards what WHMCS feels is important. User feedback is ignored, as it's sent to the idea graveyard "feature request", where it sits for literally years with no action, even with hundreds of votes. Meaningless.
  5. 2 points
    Greetings! We are excited to announce that WHMCS with PHP 8.1 is right around the corner! Ioncube has started to publish v12 of their Loader and Encoder products. Our developers are testing these, reporting issues, and tweaking WHMCS for a v8.6.0 beta release. We anticipate publishing v8.6.0 beta in the next 2-3 weeks. Ioncube Loader v12It is important to remember that Ioncube Loader v12 is only compatible with PHP 8.1 and later environments (which is detailed in their initial June 29th...View the full blog post
  6. 2 points
    Hi guys, I just spot a critical and dangerous vulnerability in a third-party component of WHMCS. I would like to share info but the thing is that as soon as I reveal details, all lamers will start exploiting it. I'm pretty sure that no one other than me and my clients know anything about it. Let me give you a bit of context: I underline that this is NOT caused by WHMCS but by a widely used third-party component When I say "critical" I mean that you can lose real money and cause enormous legal troubles The issue has been already reported by me a month ago to the developer in question but no fix so far Only few minutes ago I discovered how it can be exploited to cause harm I have already shared updated details with the developer in question. They are checking it The fix is pretty easy. It takes few seconds. I just finished securing a dozen of my clients I think I'll stay quiet for now so that the developer can do his job but the fix will require providers to perform an update. We all know most people ignore software updates unless there is a security issue. So what if the developer refuses to admit the issue? Should I post something here our tell the story to people like @WHMCS John @WHMCS ChrisD so that I can go back to my business? p.s. As soon as the update is available, I'll post here without mentioning the name of the module... this way you simply need to update all modules you have 🤣 Edit: I sent a DM to John to make sure WHMCS is not affected. I'm 99% sure that it is all right but I can't see encrypted files (have no time to decrypt it) so let's wait 🤞
  7. 2 points
    Today we are pleased to announce Lara Session rePlayer (beta) for WHMCS ! Have you ever wondered what experience your clients receive when visiting your website ?!, what errors do they face ?!, how do they navigate your website ?! All these questions and more can now be answered, as this plugin will allow you to record and re-play their entire session, as if you were sitting with them while they navigate your website ! See what confuses them, what attracts their attention and much much more. To make that happen, we blended the power of rrweb opensource recording software and WHMCS, and the Lara Session rePlayer was born. The plugin comes with a lot of exciting features, including but not limited to : Works with any WHMCS client theme. Complete logging of errors and debug events. Record all sessions or limit the number of recording per day (to save disk space). The ability to limit recording size and length (to save disk space). Fully automated clean-up system, to delete old recordings (to save disk space). EU GDPR compliance, by only recording sessions after a consent cookie is set by the user (i.e., after accepting your website's cookie and privacy policy). All recorded sessions will be stored locally on your server, so no user data will be shared with 3rd parties. The ability to mask all inputs, to protect users' privacy. The ability to ignore recording certain input fields by type, name, class or id. Testing mode, where only sessions by logged in admins will be recorded. We are in a closed beta stage, currently testing the plugin and getting feedback from selected beta testers, before releasing the final version. We welcome any feedback or feature request, to make Lara Session rePlayer the one stop solution for recording WHMCS sessions. If you would like to join our beta testers, please open a support ticket at : https://clients.xtraorbit.com/submitticket.php?step=2&deptid=2&subject=Lara-Session-rePlayer-Beta-Tester The beta tester program is only available to our current active customers. If you don't currently have an active account with us, feel free to post your feedback or feature request in this post. You may watch the demo video of the plugin here : Main Screen : Settings Page : Have a lovely day !
  8. 2 points
    Often, when creating helpful articles within the knowledgebase, it can be difficult to provide a large amount of information in such a small form and still ensure it is readable. In past experience, there has been occasions when a certain article needed multiple outcomes based on a clients decision. When i have been faced with this scenario, i have added a Bootstrap accordian style element into the knowledgebase article, allowing me to add styling that hides the unneeded information untill it is called by the user. WHMCS its self uses mutiple elements from the Bootstrap library. Using the Bootstrap 4 library, it is possible to add cetain styles and elements into the knowledgebase textfield. The best way to implement this would be click the “Enable/disable Rich Text Editor” button. From this point you can add your HTML and call most of the Bootstap tools. In this particular scenario, i called the accordion class as seen below. <div class="accordion" id="accordionExample"> <div class="card"> <div class="card-header" id="headingOne"> <h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Collapsible Group Item #1 </button> </h2> </div> <div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample"> <div class="card-body"> Some placeholder content for the first accordion panel. This panel is shown by default, thanks to the <code>.show</code> class. </div> </div> </div> <div class="card"> <div class="card-header" id="headingTwo"> <h2 class="mb-0"> <button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"> Collapsible Group Item #2 </button> </h2> </div> <div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionExample"> <div class="card-body"> Some placeholder content for the second accordion panel. This panel is hidden by default. </div> </div> </div> <div class="card"> <div class="card-header" id="headingThree"> <h2 class="mb-0"> <button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree"> Collapsible Group Item #3 </button> </h2> </div> <div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordionExample"> <div class="card-body"> And lastly, the placeholder content for the third and final accordion panel. This panel is hidden by default. </div> </div> </div> </div> After all of this is added to the KB article, saving would then result in the article contents being dislayed within an accordian whenever a client views the article, allowing the client to select the information that is needed.
  9. 2 points
    Hi Folks, We have in the past 7 years redesigned and branded a few times and I think we are finally there 🙂 Our main site is https://www.ukbss.com Our client area is https://clients.ukbss.com added some images so you can see the client area and our new reseller area with API and module. Any thoughts will be great as we are always trying to improve user experience and productivity.
  10. 2 points
    This has bothered me for a long time. I love it when WHMCS introduces new features, but trying to implement some of it is often a challenge. Why is there no built in support for multi-language support unless you're trying to build an "addon" module? Basically any other type of module can output code to the client area, and it makes no sense that you have to write your own code to support multi-language. I mean, the code already exists in WHMCS 😅 The documentation is lacking a lot of information. Take this as an example: https://developers.whmcs.com/provisioning-modules/supported-functions/. There are some functions (like _AdminArea) that just has no information at all. How is it used? You can't echo or return anything. Is it just a typo and meant to say _AdminLink? I know how to use that function by looking at other modules, but there's still no documentation about it. Why is there no documentation for Application Links? It's a really cool feature, but it makes no sense that the feature is basically reserved for cPanel. Another nice feature that feels like it was only built for cPanel is Server Sync - mostly because of this: https://docs.whmcs.com/Servers#Sync_Report ... But some control panels do. I know that cPanel doesn't. Some other control panels (not just limited to web hosting) do keep a record of the user's full name, address, phone number etc. Importing a client into WHMCS using the Server Sync feature feels so akward. Who wants to send an email to their customer that starts with "Dear Name Placeholder"? That's very unprofessional. I know that not all control panels track the client's details, but who thought it would be a good idea to not even implement importing the details in case the control panel actually did? It would make life so much easier for WHMCS admins wanting to import clients. I hope someone can give me an explanation that isn't "Because WHMCS just doesn't care" 😅
  11. 2 points
    I don't get email notifications any more for posts and/or mentions (I disabled them last year) - so mentioning me in a thread, in the hope that I will see it, is really not worth doing. here I am... hello everyone! I hope everyone is doing well - i've literally no idea what has been posted in this place over the last year... I enjoy living my life in ignorance of this place for the most part! 😎 yes - I knew two things... one of them i've sadly now forgotten and the second i've carelessly misplaced. 😜 others will be your best bet now... my time visiting this place on a regular basis ended last year and my knowledge is fading... and as much as I could get back into the habit of coming here, I won't as there are much more enjoyable things to do. 🏝️ all that said, many months ago I did get asked to code an action hook that completely rewrites the v8 admin menu into something more sensibly organised and useful.... works on v8.3 and as there were no admin changes, I assume it works on v8.4... and seeing no specific admin changes in the changelogs (though experience tells you that might not necessarily mean that there aren't any lol), it should probably work in v8.5.... screenshot below is a little overkill as all display options are enabled (which you wouldn't really do normally), but topbar / stats bar / menus can all be individually enabled or their content changed... the damn thing has over 1k+ lines of code, but should continue to work regardless of using WHMCS. the irony is that having written it, I no longer personally have any need to run v8 as I don't use it myself and am not actively answering questions in this place anymore. 🙄 perhaps when v8.5 goes GA (or I suppose if things haven't changed at WHMCS, I should probably wait for the first v8.5.1 maintenance release lol) and if the inclination hits me, i'll test it again and perhaps post it on GitHub. thanks to @DennisHermannsen for posting a solution.
  12. 2 points
    Hey Guys, We've been using WHMCS for 12 years to run our business and I went to do an upgrade today myself, and found that 12 years later, the same bugs are STILL in this software. C'mon guys, this is honestly a bit sad and pathetic. 1. The upgrade process overwrites custom.css - what is the point of this file if it is going to be overwritten? 2. The upgrade process overwrites invoicepdf.tpl - again, what is the point of having customisation of the invoice if you have to still manually copy it each time. Guys, you keep adding more features, but surely these 12 year old bugs could easily be fixed. Hell, give me the code unencrypted and I'll fix these stupid bugs myself! What's the point of an automated upgrade if you still need to manually copy files around. What will be even sadder is if you don't publish this post. Loyal, but frustrated customer.
  13. 2 points
    Disabling right-clicking serves no use and has nothing to do with security. First thing first, when I browse your website I already own a copy of your theme information (HTML, CSS, javascript, libraries, assets...). I don't need right-click to get eveything my computer "sees". I just need to press File > Save Page As. This way I'll have a folder that runs on my computer with an exact copy of your website. Alternaivelly I can use source view, dev console or any other tool that every browser has. Secondly anyone with a bit of sense can re-enable right-click with few lines of javascript via console. It takes seconds. Not to mention there are tens of plugins that allow to re-enable the possibility to use right-click (sorry for the pun) in one click. Third. Did you know that anyone can download/view every file of your Smarty template by simply visiting it? Try opening /templates/{YOUR_TEMPLATE}/clientareahome.tpl. Most people don't know that and it's funny 😛 Sometimes you can spot things that should stay reserved. For example in invoicepdf.tpl I often see insults towards WHMCS developers, swear words and so on. Many belive that comments in tpl files are hidden from public view. Given that you can't prevent people from downloading your code, don't waste time fighting right-click. The only outcome is frustration for your customers.
  14. 2 points
    Sonofagun. It's just the "test this connection" that fails. Each time I'd tried, I stopped short of making the department because it told me it wasn't connecting, and the server logs bore that out. Decided to follow through, make the department and set up the cron and it imports fine. Thanks for the replies, looks like this is a case of the WHMCS check doing something weird. So much wasted time...
  15. 2 points
    It is not only possible but super easy. You don't even need this backdoor to be a WHMCS module. Generally speaking you can do that in 3 ways. One (hit and run). Place a single PHP file that does the following: Read SQL credentials and encryption hash from configuration.php Export the entire database in a zip file Send you and email with the zip as attachment and the encryption hash in the body Self-destroy the script in question so that there's no trace of what happened Now you can comfortably decrypt all passwords and do stuff safely from your own server. Two (backdoor). Leave the backdoor hidden somewhere in WHMCS file system. Lamers usually bury this file in weird locations (eg. vendor folder) or inject the malicous code in official files, action hooks, modules, a nulled version of WHMCS or a cracked version of popular modules and templates. Thanks to the backdoor they can connect and do things in real time or tell the script to automatically do things (eg. override your PayPal email but you would easily spot them 🤣). Three (intelligent backdoor). The most advanced way that leaves you with no way to protect yourself unless you hire a skilled developer to inspect every line of code. Sadly even with this there's the risk you can't protect yourself as one could hide the malicious code in highly intelligent ways. With scheduled checksum validations you can easily protect yourself from one and two. Unfortunately 99% of WHMCS admins don't know anything about it so lamers don't even need to be worry about more intelligent ways to hide their stuff. That's why fortunately the third way I previously described is a rarity in WHMCS. That said, the greatest way to protect youself is trust. I mean if I had to choose between modulesgarden.com and whmcs-free-awesome-spectactural-modules.cc or an unknown dev, I'd go with MG.
  16. 2 points
    Technically everyone lost their license. When a security hole is discovered, and owned users can't patch they are going to be forced into a lease. Or they will have to upgrade PHP and other server versions at some point, eventually their installations will be incompatible, and they will have to update. Its not as WHMCS gave anyone a choice here. I just feel its wrong to keep giving these companies money, cPanel included. I pay the costs to run the software, they don't pay my hardware, why should they care how many users or customers I have. Its a greedy taxed model, it cost them the same if you have 1 active customer or a million.
  17. 2 points
    Hi there, I trust you are well. I am using the payment gateway https://github.com/PayFast/mod-whmcs. The callback refuses to work for manual payments since latest update. The original developers at the company called PayFast have been unable to find the problem. Willing to pay for a solution to the issue.
  18. 2 points
    If all they see here are complaints (and no one helping), it will likely go the way of most boards for products, and be closed down. Kayako made absurd pricing changes, stopped participating on the community, and it's totally gone now. Be ready, it's probably coming at some point that this will become announce only, or gone all together.
  19. 2 points
    Just a quick follow up, this bug has already been hot-fixed and the files can be located here: https://whmcs.community/files/category/84-v84x-hotfixes/ I have applied it and it seems to work. I have not transferred a service, but I no longer get that error
  20. 2 points
    What you did there; I see it. 😛
  21. 2 points
    That was only 4 months ago. Some people are still waiting for bug fixes from 3 years ago 😁😪
  22. 2 points
    Instead of reselling from Enom you would be reselling from WHMCS. That is the main difference. The biggest issue I see is that WHMCS can't even properly support its own software and now they plant support third party services. Ouch... Market Connect is a glorified affiliate system. WHMCS is trying to make money by reselling things that most of its customers already sell. To me this is also a huge conflict of interests. Your customers are now WHMCS customers.
  23. 2 points
    Hi @WebHostingPeople I'm pleased to see that our support team were able to help explain the Billing Logic operation, and how deleting invoices was blocking further invoices from being generated. In the broad context; WHMCS will never generate duplicate invoices for the same service on the same Next Due Date. If a service renewal invoice is deleted, but you wish to generate a new invoice for a similar period, edit the client's Products/Service to move the Next Due Date forward by 1 day, then Save Changes. This will allow a new invoice to be generated for almost the same period. Additionally it was my personal pleasure to explain the operation of the Store Client Data Snapshot feature in the follow-up questions in your ticket. If you have any further questions, please don't hesitate to get back in touch.
  24. 2 points
    Great idea as long as he has that installed. Saves time on future coding and upgrades.
  25. 2 points
    I feel the urge to reply on this matter because what you are saying is wrong on many levels. I'm fine with people leaving bad reviews and not renewing me but I refuse to be compared to what WHMCS is doing. First thing first, at the moment I have direct access to 78 systems where BX is installed and working plus hundreds more that I know are working fine. That being said, unlike WHMCS I'm not saying that the module is problem-free. The vast majority of these problems would be easy to solve if only I had time for the usual stuff: get FTP/backend credentials, connect, see the error, fix the problem. But I can't keep up with such a big number of providers and their requests. I don't even have time for presales questions that would easily bring me money just answering to a couple of questions. In other words, I am not avoiding difficult tickets focussing on ones that bring money. This puts me miles away from what WHMCS is doing. For them it's money > anything else, even reputation. For me it's pure and simple lack of time. I am democratically ignoring every incoming request including ones from coming from huge providers, ones that end up buying dedicated support and that spend weeks trying to get my attention. As I said earlier, I even dropped customers who purchased Pro plan (199€/month each) simply because Business and Enterprise plans were already too much demanding and I don't want to do overselling with the time I don't have. Before covid pandemic I burned 45.000€ of my personal money (I have more sources of income) in the attempt to fuel my business with more resources to meet customers' expectation so please, don't put me on the same level of WHMCS. Unlike them, I invested more than I was earning. I'm working in the hosting business since 2007 and let me tell you that the last 3 years before pandemic got me no profit. I paid expenses and made my developer rich 😁 I'll tell you more. We stopped selling BX multiple times in the attempt to buy us time to hire a new developer and finishing writing documentation. This is something you don't see from WHMCS. They often give you final releases without documentation. We planned to increase BX price multiple times to halve the number of active customers (less tickets) increasing inflow of money. We wanted to reach 399€/year in 3 years but we immediately discarded the idea when the first price increase occurred in 2020 (from 95€ to 149€/year). We received so much complaints in response that we decided to stop. Customers valued cheaper price more than the idea of having better support so unlike WHMCS, we listened to customers and end up building dedicated (paid) support. I'm making modules since 2008 and I spent probably 2 years merging them into bigger and more complete modules keeping the same price. For example BX was born as a combination of 3 modules I was selling 95€/year each. As you can imagine, I lost money from this decision but I did it because I didn't like what my competitors were doing. They were selling tens or tiny modules aiming to maximize profits at the expense of ease of use and maintainability. As if it wasn't enough, I am seriously considering to release all my modules as free and open source on Github. Time will tell. That being said, next time you think I don't move a finger unless I get money, please remember what I just told you. I'm open to criticismI about my decisions and my abilities as a developer, human being etc. but don't compare me to WHMCS greediness. We are on two different planets. BX surely wasn't the module for you and we failed to meet your expectations. I agree with you. I am not here making excuses. Parts of my plans for WHMCS have failed. The best I can do is focusing on a small number of customers hoping the rest can use BX without the need to contact me. Unhappy customers can freely open PayPal disputes. I never reply so that they can get their money back by default. From time to time I even allow them to use the module for free for one year so that they have time to find alternatives. Let me conclude by saying that there must be a reason why there are less than 4 software-companies left in WHMCS. Most of them don't even have employees. With very few exceptions, we all fail to meet expectations. Guess why... 🤔
  26. 2 points
    I'm responding just to point out few things. As for the issue reported here, we're cointinuing here. This is true and not a secret. I don't care about WHMCS anymore (not my products) for reasons described in "Submit ticket" page on my website. My job now is to make sure modules keep working with WHMCS. I no longer try to improve WHMCS features, workaround its numerous bugs or follow their poor decisions. To borrow a phrase favoured by WHMCS, I have no plans to switch my life to purely focussing on bugs/defects and code optimization of a software owned and poorly maintained by another company. WHMCS staff don't care about fixing their software. Me neither. I did for 15 years but enough is enough. Actually it is more expensive. The cheapest plan was Pro (199€ / month) but it has been retired to allow me to focus on customers with Business and Enterprise plans that cost not less than 5 times that price with the service being restricted to Italian providers. Understand that Billing Extension is immensely complex and complexity leads to lot of questions, requests and customizations especially when you face the many problems and shortcomings of WHMCS. Focusing on a small group of companies that can speak my language is mutually profitable and manageable. I didn't plan it but it is what it is. I tried for a decade to follow the steps of Modulesgarden where many devs are capable of handling hundreds of customers but this doesn't work with this module. Try finding developers who are experts in such a very specific position. One that masters WHMCS and understands advanced concepts of billing and electronic invoicing for multiple countries and legislations. I never found one. The amount of time I need to invest to get a developer fluent with such topics is unsustainable given customers' demands. As a reference, on average I need to spend 2 hours on Skype/Zoom with the customer just for showing features and configure part of the settings. Following this, add a couple of hours for fine tuning and the inevitable advanced requests. Not counting when they ask me to teach them how to do stuff in WHMCS & BX. Lastly most of the times when they realize my knowledge of WHMCS and hosting in general, I am "condemned" to be their main and only contact person for all requests. I know it is awful for customers with no support plan but I can't do the impossible. I can't keep up with incoming requests neither grow talents at a sustainable speed. For sure not for a module that costs just 149€ / year in such a framework - WHMCS - that is getting worse from years, that has lost connection with customer base and that I don't think has a future. As if it wasn't enough, it drained my passion for coding. For this reason there's plenty of documentation available in two languages. To people expecting replies, I can only suggest to stop renewing the module if they can't live with my silence. I am truly sorry but life is one and I can't be victim of this platform. WHMCS is now my secondary job I do for a very limited number of customers. My main job is still coding but on a different market and for a company that deserves my time. Peace 👍
  27. 2 points
    We've already established that WHMCS could care less about fixing bugs and they'll tell you 'you're the only one raising an issue about this'. Which registrar are you using? If it's Resellerclub or LogicBoxes based, Marco at ResellerClub-Mods has a module or two that should help with this.
  28. 2 points
    This is all crap. The first module is a copy of the third. Basically one guy went on Github, stole the code and made a commercial module. The second is useless since it can only track PageView event. Same goes for the other two that can track PageView, AddToCart and InitiateCheckout. Pretty much useless. One needs Facebook Pixel to track things like Contact (leads), Registration, CustomizeProduct and Purchase. In conclusion, people think that tracking events on Facebook Pixel in WHMCS is easy but that's not true. It took me weeks if not months of attempts and coding but I left this community so I am not willing to share details.
  29. 2 points
    Thanks for the suggestion, I did have a look at this before but for my setup it is way over-complicated and doesnt meet my needs, I've had a look at the code and as a non-developer it doesnt help me unfourtunately. I really just want what seems to be a fairly simple if condition in PHP working in the above hook
  30. 2 points
    Our Bulk Pricing Updater should be able to help: https://docs.whmcs.com/Bulk_Pricing_Updater_Addon
  31. 2 points
    I highly suggest to check if a registrar has a dedicated team assigned to 3rd-party Software Integrations. Most of the registrars don't have this in place and will lack in support when it comes to issues or problems. We at CentralNic are there for our brands (HEXONET, RRPproxy, et al)
  32. 2 points
    Hi AladdinJ, so the variable for the Registration Date is regdate - below is the code for template clientareaproducts.tpl file, comments above sections of code added to default file: {include file="$template/includes/tablelist.tpl" tableName="ServicesList" filterColumn="4" noSortColumns="0"} <script> jQuery(document).ready(function() { var table = jQuery('#tableServicesList').show().DataTable(); {if $orderby == 'product'} table.order([1, '{$sort}'], [4, 'asc']); {elseif $orderby == 'amount' || $orderby == 'billingcycle'} table.order(2, '{$sort}'); {elseif $orderby == 'nextduedate'} table.order(3, '{$sort}'); {elseif $orderby == 'domainstatus'} table.order(4, '{$sort}'); //ADD ABILITY TO SORT VIA REGISTER DATE {elseif $orderby == 'regdate'} table.order(5, '{$sort}'); {/if} table.draw(); jQuery('#tableLoading').hide(); }); </script> <div class="table-container clearfix"> <table id="tableServicesList" class="table table-list w-hidden"> <thead> <tr> <th></th> <th>{lang key='orderproduct'}</th> <th>{lang key='clientareaaddonpricing'}</th> <th>{lang key='clientareahostingnextduedate'}</th> <th>{lang key='clientareastatus'}</th> <!-- ADD TABLE HEADER FOR REGISTERED DATE --> <th>{lang key='clientareahostingregdate'}</th> </tr> </thead> <tbody> {foreach $services as $service} <tr onclick="clickableSafeRedirect(event, 'clientarea.php?action=productdetails&amp;id={$service.id}', false)"> <td class="py-0 text-center{if $service.sslStatus} ssl-info{/if}" data-element-id="{$service.id}" data-type="service"{if $service.domain} data-domain="{$service.domain}"{/if}> {if $service.sslStatus} <img src="{$service.sslStatus->getImagePath()}" data-toggle="tooltip" title="{$service.sslStatus->getTooltipContent()}" class="{$service.sslStatus->getClass()}" width="25"> {elseif !$service.isActive} <img src="{$BASE_PATH_IMG}/ssl/ssl-inactive-domain.png" data-toggle="tooltip" title="{lang key='sslState.sslInactiveService'}" width="25"> {/if} </td> <td><strong>{$service.product}</strong>{if $service.domain}<br /><a href="http://{$service.domain}" target="_blank">{$service.domain}</a>{else}<br />-{/if}</td> <td class="text-center" data-order="{$service.amountnum}">{$service.amount} <small class="text-muted">{$service.billingcycle}</small></td> <td class="text-center"><span class="w-hidden">{$service.normalisedNextDueDate}</span>{$service.nextduedate}</td> <td class="text-center"><span class="label status status-{$service.status|strtolower}">{$service.statustext}</span></td> <!-- ADD TABLE CONTENT FOR REGISTERED DATE --> <td class="text-center"><span class="w-hidden">{$service.normalisedRegDate}</span>{$service.regdate}</td> </tr> {/foreach} </tbody> </table> <div class="text-center" id="tableLoading"> <p><i class="fas fa-spinner fa-spin"></i> {lang key='loading'}</p> </div> </div>
  33. 2 points
    Hi there, This error indicates the client account contains an orphaned service. Ie. A service without a valid product assigned to it: SELECT * FROM tblhosting WHERE packageid NOT IN (SELECT id FROM tblproducts); One potential approach to resolve this might be: Create a new hidden product (Configuration > System Settings > Products/Services) Call it something like "Orphaned Product" Save the product and take a note of the ID (tblproducts.id) Then run this SQL query against your database: UPDATE tblhosting SET packageid='x' WHERE packageid NOT IN (SELECT id FROM tblproducts); Replace x with the ID of the newly created product. As always, before making changes to your database, please backup.
  34. 2 points
    I had already cleared all caches. For me it turned out to be the third party admin theme (Lara). Updating to the version specifically for 8.3.0 took care of it.
  35. 2 points
    Don't worry. This service no longer exists. I should remove it from the website but I'm so done with WHMCS that even updating my own WHMCS-related site tilts me. I prefer to refund people and lose 7.35 euro with PayPal fees 🤣 I completely agree with you but as I said tens of times, supporting WHMCS is like emptying Hoover Dam with a sieve. I don't want to repeat myself but I have tried everything from hiring devs to writing 250.000 words of documentation. Nothing worked. Every release of WHMCS introduces tens of new bugs that can take weeks to debug. Fixing them is a whole new story. Why am I supposed to do the job of WHMCS? What's the point of investing weeks into fixing a bug of v8.1.0 when WHMCS is already releasing v8.1.1 with new bugs? Not to mention they refuse to fix bugs from 2009. That being said, for me the only viable option was to focus on big providers that can afford to spend 200 euro / month. Less customers = more time to code. Sadly I was still overwhelmed by requests so I had to focus on huge providers that pay way more than 200/month. Long story short, I am working with a very limited number of providers that allow me enough free time to work on my main job (not WHMCS 🥳) and cycling 💖 Maybe 2 times in 15 years. I don't need to read reviews to understand that I can't provide support. I would hate myself too but I can't fix WHMCS for the rest of my life. Unlike other developers, I focused on an impossible task: fixing WHMCS and adding missing features. That was a masochistic decision. The average WHMCS developer plays with hooks and API and supports just the latest version of WHMCS. As for me, I'm working with hacks to trick WHMCS into thinking he did X (bugged) so I can do X (fixed) myself. Injecting classes with custom autoloaders in crazy places, sending fake POSTs, emulating clicks, creating "man in the middle" files, scraping data with bots, implementing internal API functions. There must be a problem with this platform if a damn module needs to be this extreme 🥵 And I also keep supporting WHMCS v5, v6 and v7 because I understand and respect the fact that many prefer to stay away from v8 (myself included). I'm looking forward to release everything I did as open source so that I can finally leave this place and let everyone see how silly is this platform 😐 Back to the topic, I can easy fix the "array" column in the XLSX (or CSV can't remember). I'll post here when it's fixed.
  36. 2 points
    Even those forced into lease. 😉
  37. 2 points
    as i'm finding whilst reading the backlog of hundreds of threads since my last visit.... thankfully I don't get emails about mentions, so i'm happily going through my whmcs-free life in ignorant bliss... i'll be back in November if I have the time (and inclination!). they still haven't reversed on this ??? disappointing , but sadly not unexpected.
  38. 2 points
    Please don't tell me that having working licensing servers should be a feature request? 🤭
  39. 2 points
    History has shown, they don't revert decisions regardless of how stupid, poorly implemented and buggy they are perceived by users. They will forge ahead, continue making awful development decisions and the hired chimps will say how great it is and how they got asked so much.... except in public LOL ... for it! "It's a feature, not a bug" - whmcs staff authorised response list.
  40. 2 points
    I just fixed the issue for us. I will share the code with you. Just save it into an extra file income_by_product_yearly.php in the module/report folder <?php //Modifizierte income_by_product.php von Max //Ausgabe nach Jahren nicht mehr nach Monaten //16.02.2021 use Illuminate\Database\Query\Builder; use WHMCS\Carbon; use WHMCS\Database\Capsule; if (!defined("WHMCS")) { die("This file cannot be accessed directly"); } //$pmonth = str_pad((int)$month, 2, "0", STR_PAD_LEFT); $year = $year; $reportdata["title"] = "Income by Product for " . $year; $reportdata["description"] = "This report provides a breakdown per product/service of invoices paid in a given month. Please note this excludes overpayments & other payments made to deposit funds (credit), and includes invoices paid from credit added in previous months, and thus may not match the income total for the month."; $reportdata["currencyselections"] = true; $reportdata["tableheadings"] = array("Product Name","Units Sold","Value"); $products = $addons = array(); $dateRange = Carbon::create( $year, 1, 1 ); # Loop Through Products $result = Capsule::table('tblinvoiceitems') ->join('tblinvoices', 'tblinvoices.id', '=', 'tblinvoiceitems.invoiceid') ->join('tblhosting', 'tblhosting.id', '=', 'tblinvoiceitems.relid') ->join('tblclients', 'tblclients.id', '=', 'tblinvoices.userid') ->whereBetween( 'tblinvoices.datepaid', [ $dateRange->startOfYear()->toDateTimeString(), $dateRange->endOfYear()->toDateTimeString(), ] ) ->where(function (Builder $query) { $query->where('tblinvoiceitems.type', 'Hosting') ->orWhere('tblinvoiceitems.type', 'Setup') ->orWhere('tblinvoiceitems.type', 'like', 'ProrataProduct%'); }) ->where('currency', $currencyid) ->groupBy('tblhosting.packageid') ->select( [ Capsule::raw('tblhosting.packageid as packageId'), Capsule::raw('COUNT(*) as unitsSold'), Capsule::raw('SUM(tblinvoiceitems.amount) as amount') ] )->get(); foreach ($result as $data) { $products[$data->packageId] = [ 'amount' => $data->amount, 'unitssold' => $data->unitsSold, ]; } $result = Capsule::table('tblinvoiceitems') ->join('tblinvoices', 'tblinvoices.id', '=', 'tblinvoiceitems.invoiceid') ->join('tblhosting', 'tblhosting.id', '=', 'tblinvoiceitems.relid') ->join('tblclients', 'tblclients.id', '=', 'tblinvoices.userid') ->whereBetween( 'tblinvoices.datepaid', [ $dateRange->startOfYear()->toDateTimeString(), $dateRange->endOfYear()->toDateTimeString(), ] ) ->where('tblinvoiceitems.type', 'PromoHosting') ->where('currency', $currencyid) ->groupBy('tblhosting.packageid') ->select( [ Capsule::raw('tblhosting.packageid as packageId'), Capsule::raw('COUNT(*) as unitsSold'), Capsule::raw('SUM(tblinvoiceitems.amount) as amount') ] ) ->get(); foreach ($result as $data) { $products[$data->packageId]["amount"] += $data->amount; } # Loop Through Addons $result = Capsule::table('tblinvoiceitems') ->join('tblinvoices', 'tblinvoices.id', '=', 'tblinvoiceitems.invoiceid') ->join('tblhostingaddons', 'tblhostingaddons.id', '=', 'tblinvoiceitems.relid') ->join('tblclients', 'tblclients.id', '=', 'tblinvoices.userid') ->whereBetween( 'tblinvoices.datepaid', [ $dateRange->startOfYear()->toDateTimeString(), $dateRange->endOfYear()->toDateTimeString(), ] ) ->where('tblinvoiceitems.type', 'Addon') ->where('currency', $currencyid) ->groupBy('tblhostingaddons.addonid') ->select( [ Capsule::raw('tblhostingaddons.addonid as addonId'), Capsule::raw('COUNT(*) as unitsSold'), Capsule::raw('SUM(tblinvoiceitems.amount) as amount') ] )->get() ->all(); foreach ($result as $data) { $addons[$data->addonId] = [ 'amount' => $data->amount, 'unitssold' => $data->unitsSold, ]; } $total = 0; $itemtotal = 0; $firstdone = false; $result = Capsule::table('tblproducts') ->join( 'tblproductgroups', 'tblproductgroups.id', '=', 'tblproducts.gid' ) ->orderBy('tblproductgroups.order') ->orderBy('tblproducts.order') ->orderBy('tblproducts.name') ->get( [ 'tblproducts.id', 'tblproducts.name', Capsule::raw('`tblproductgroups`.`name` as groupname') ] ) ->all(); foreach ($result as $data) { $pid = $data->id; $group = $data->groupname; $prodname = $data->name; if ($group!=$prevgroup) { $total += $itemtotal; if ($firstdone) { $reportdata["tablevalues"][] = array('','<strong>Sub-Total</strong>','<strong>'.formatCurrency($itemtotal).'</strong>'); $chartdata['rows'][] = array('c'=>array(array('v'=>$prevgroup),array('v'=>$itemtotal,'f'=>formatCurrency($itemtotal)))); } $reportdata["tablevalues"][] = array("**<strong>$group</strong>"); $itemtotal = 0; } $amount = $products[$pid]["amount"]; $number = $products[$pid]["unitssold"]; $itemtotal += $amount; if (!$amount) $amount="0.00"; if (!$number) $number="0"; $amount = formatCurrency($amount); $reportdata["tablevalues"][] = array($prodname,$number,$amount); $prevgroup = $group; $firstdone = true; } $total += $itemtotal; $reportdata["tablevalues"][] = array('','<strong>Sub-Total</strong>','<strong>'.formatCurrency($itemtotal).'</strong>'); $chartdata['rows'][] = array('c'=>array(array('v'=>$group),array('v'=>$itemtotal,'f'=>formatCurrency($itemtotal)))); $reportdata["tablevalues"][] = array("**<strong>Addons</strong>"); $itemtotal = 0; $result = Capsule::table('tbladdons') ->orderBy('name') ->get( [ 'id', 'name', ] ) ->all(); foreach ($result as $data) { $addonid = $data->id; $prodname = $data->name; $amount = $addons[$addonid]["amount"]; $number = $addons[$addonid]["unitssold"]; $itemtotal += $amount; if (!$amount) $amount="0.00"; if (!$number) $number="0"; $amount = formatCurrency($amount); $reportdata["tablevalues"][] = array($prodname,$number,$amount); $prevgroup = $group; } $itemtotal += $addons[0]["amount"]; $number = $addons[0]["unitssold"]; $amount = $addons[0]["amount"]; if (!$amount) $amount="0.00"; if (!$number) $number="0"; $reportdata["tablevalues"][] = array('Miscellaneous Custom Addons',$number,formatCurrency($amount)); $total += $itemtotal; $reportdata["tablevalues"][] = array('','<strong>Sub-Total</strong>','<strong>'.formatCurrency($itemtotal).'</strong>'); $chartdata['rows'][] = array('c'=>array(array('v'=>"Addons"),array('v'=>$itemtotal,'f'=>formatCurrency($itemtotal)))); $itemtotal = 0; $reportdata["tablevalues"][] = array("**<strong>Miscellaneous</strong>"); $data = Capsule::table('tblinvoiceitems') ->join('tblinvoices', 'tblinvoices.id', '=', 'tblinvoiceitems.invoiceid') ->join('tblclients', 'tblclients.id', '=', 'tblinvoices.userid') ->whereBetween( 'tblinvoices.datepaid', [ $dateRange->startOfYear()->toDateTimeString(), $dateRange->endOfYear()->toDateTimeString(), ] ) ->where('tblinvoiceitems.type', 'Item') ->where('tblclients.currency', $currencyid) ->first( [ Capsule::raw('COUNT(*) as number'), Capsule::raw('SUM(tblinvoiceitems.amount) as amount') ] ); $itemtotal += $data->amount; $number = $data->number; $amount = $data->amount; if (!$amount) $amount="0.00"; if (!$number) $number="0"; $reportdata["tablevalues"][] = array('Billable Items',$number,formatCurrency($amount)); $data = Capsule::table('tblinvoiceitems') ->join('tblinvoices', 'tblinvoices.id', '=', 'tblinvoiceitems.invoiceid') ->join('tblclients', 'tblclients.id', '=', 'tblinvoices.userid') ->whereBetween( 'tblinvoices.datepaid', [ $dateRange->startOfYear()->toDateTimeString(), $dateRange->endOfYear()->toDateTimeString(), ] ) ->where('tblinvoiceitems.type', '') ->where('tblclients.currency', $currencyid) ->first( [ Capsule::raw('COUNT(*) as number'), Capsule::raw('SUM(tblinvoiceitems.amount) as amount') ] ); $itemtotal += $data->amount; $number = $data->number; $amount = $data->amount; $reportdata["tablevalues"][] = array('Custom Invoice Line Items',$number,formatCurrency($amount)); $total += $itemtotal; $reportdata["tablevalues"][] = array('','<strong>Sub-Total</strong>','<strong>'.formatCurrency($itemtotal).'</strong>'); $chartdata['rows'][] = array('c'=>array(array('v'=>"Miscellaneous"),array('v'=>$itemtotal,'f'=>formatCurrency($itemtotal)))); $total = formatCurrency($total); $chartdata['cols'][] = array('label'=>'Days Range','type'=>'string'); $chartdata['cols'][] = array('label'=>'Value','type'=>'number'); $args = array(); $args['legendpos'] = 'right'; $reportdata["footertext"] = $chart->drawChart('Pie',$chartdata,$args,'300px'); $reportdata["yearspagination"] = true;
  41. 2 points
    For me it was because the domain i wanted to register was already set as the hostname on one of the vps service for a client, so i simply had to rename the hostname from within whmcs
  42. 2 points
    yes - either by editing theheader template or using an action hook. the hook below should change the logo based on client groups - it needs to be given a filename (ending in .php) and uploaded to /includes/hooks <?php # Compamy Logo Based On Client Group Hook # Written by brian! function client_group_logo_hook($vars) { $client = Menu::context('client'); $groupid = $client->groupid; if ($groupid > 0) { $logo = "assets/img/logo".$groupid.".png"; if (file_exists($logo)) { return array ("assetLogoPath" => $logo); } } } add_hook("ClientAreaPage", 1, "client_group_logo_hook"); it assumes that the logos for each client group are... uploaded to /assets/img/ - although you can put the images anywhere and adjust the path in the hook... the filenames of the logo images are in the format logo{groupID}.png - so the logo for client group #1 will be logo1.png; the logo for client group #2 will be logo2.png and so on. if the logged in client is a member of a client group, and if the image file exists, then the logo variable will be updated to the correct URL - if they are not logged in, or a member of a client group or if the image doesn't exist, then the hook does nothing and the default logo / text will be shown.
  43. 2 points
    https://docs.whmcs.com/Changelog:WHMCS_V7.6 if you want to edit the template, you could always use {$smarty.now} to add a timestamp as the hostname... not random, but unless you get 2 users ordering at exactly the same time, it should work... alternatively, you could use a ClientAreaPageCart hook, generate a random string, optionally check that it hasn't been previously used in the db, and then pass it back to the template as $server.hostname - but if you've already edited the template to add the other NA values, then you might as well just edit the template one more time! 😀
  44. 2 points
    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 ?
  45. 1 point
    @bear and @leemahoney3, thanks!!!! (I want an A.I. based code editor, in order to remedy my natural stupidity... 😀 )
  46. 1 point
    It's not really a good idea to delete invoices because of the accounts! You should rather cancel invoices that are incorrect or that are not to be paid.
  47. 1 point
    With 2022 at full tilt now, let us not focus exclusively on keeping all the New Year’s resolutions that we have set for ourselves so ambitiously, but also, and more importantly, appreciate every favorable opportunity that the last year brought us, and reflect upon what important lessons are to be learned from it. As always at this time of the year, we have reserved some time to cherish all the past successes, such as the enthusiastically welcomed proxy for Proxmox console or DNS Manager For WHMCS 3.0 with a stunningly enhanced look and feel - all so we can establish the right growth path for the future. How about you head over to our recently launched Blog post, and join us in this meaningful celebration? Take a trip down the memory lane with us!
  48. 1 point
    Thanks for this Hein. Any idea of the name of any of the ready made solutions please?
  49. 1 point
    WHMCS should have just left those of us who purchased the owned license on grandfathered plans and saved a huge backlash.. but... that's not likely to happen. It's strange that they were so willing to use current customers as the "whipping boy" to increase their bottom line instead of being confident enough with their new pricing that only need to apply it to new customers.
  50. 1 point
    Welcome to WHMCS ticket import system. It is not possible out of the box and no better way to solve it. Yes it is bored, because when you read a ticket you need to deal with a lot things (HTML codes, css, lot of garbage)...Also there is no module to get it better, and WHMCS perhaps do not care a lot about it, because usually I guess all WHMCS clients usually log in before answer their ticket, but we know in our real lives our clients do not do that, and get us on mess. My clients usually find me at my local office or phone call, so We manual register them on admin side, so they are not familiar to login in their client area. This means they usually reply all tickets direct to their email, so 90% of my tickets has this mess garbage on there (importing all previous message). But yes We still a live, waiting that someday it could get better 🤞
  • 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