Jump to content

Recommended Posts

This week we are happy to announce the release of a brand new module: Client Area Popup For WHMCS! It does exactly what you think it does, but in a really clever and fashionable way!

 

ModulesGarden Client Area Popup For WHMCS will let you create and customize various pop-ups and display them to your precisely chosen group of clients when specified restrictions are met. No random spamming - you will have full control over displayed information which can be presented as raw text, HTML content and image. You cannot skip this module!

 

Find Out More Client Area Popup For WHMCS!

 

 

 

See what's on the list of latest releases:

 

 

 

Coming soon:

 

  • DNS Manager For WHMCS - v2.5.0
  • Report Generator For WHMCS - v3.0.0
  • Discount Center For WHMCS - v1.2.0

 

 

Need Custom Software Development For Your Business?

 

Specially for you we will adapt an application and its design to your own needs, create a new module or even a completely new system built from scratch!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By kan
      Hello
      I have integrated stripe into WHMCS and it work perfectly with whmcs client area. We have our own client area using WHMCS API, but when we click on "PayNow" in invoice it will re directs to WHMCS client area for payment instead of Stripe payment gateway. Currently I'm using paypal because it will re direct to their gateway for payment.
      Is there any solution in whmcs or in stripe?
       
    • By Remitur
      Starting from the code provided by @brian! in this post: 
      I realized a pop-up system which shows every time user log-in, but once a day (that's to say: if the user login 5 or more times in a day, the pop-up shows just one time, in order not to annoy him)
      The pop-up shows to the user his previous log-in time, and one "trick of the day" (randomly chosen one) 
       
      (IMHO, "trick of the day" is a great way to spread knowledge and marketing news without annoying the user)
      The code, in form of a hook (note: line #35 is for testing purposes only: remove or comment it):
      <?php //Show modal popup to clients, with a welcome message and a random trick of the day //original code by brian! , modified by Remitur function client_custom_headoutput_hook($vars) { $head_return = ''; $head_return = '<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> <script> $(document).ready(function() { $(\'#myModal\').appendTo("body"); function show_modal(){ $(\'#myModal\').modal(); } window.setTimeout(show_modal, 100); $(".dismiss").click(function() {}); }); </script>'; return $head_return; } add_hook("ClientAreaHeadOutput",1,"client_custom_headoutput_hook"); use Carbon\Carbon; function client_custom_headeroutput_hook($vars) { $client = Menu::context('client'); $lastlogin = Carbon::parse($client->lastLoginDate); $enddate = Carbon::parse($client->lastLoginDate)->addDays(1); // next line is just for testing purposes: remove it! $enddate = Carbon::today(); $today = Carbon::today(); $templatefile = $vars['templatefile']; if (empty($client->id)) { return; } if ($today >= $enddate and $templatefile == "clientareahome") { $header_return = ''; $header_return = '<div class="container"> <div class="modal fade" id="myModal" role="dialog"> <div class="modal-dialog modal-md"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title"><i class="fa fa-thumbs-up fa-lg"></i> '.Lang::trans('hello').', '.$client->firstname.'</h4> <p>Your last login has been '.$lastlogin.'</p> </div> <div class="modal-body"> <p>Trick of the day:</p> <p>'.Lang::trans ('tricks.'.rand(1,13)).'</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary dismiss" data-dismiss="modal">'.Lang::trans('orderForm.close').'</button> </div> </div> </div> </div> </div>'; return $header_return; } } add_hook("ClientAreaHeaderOutput",1,"client_custom_headeroutput_hook"); The tricks are provided as an array of language variables; here there're 13, I guess that 30 is the minimum reasonable number; more is better.
      In the tricks you can provide also  internal and external links (just one here for example):
      #====================== tricks for popup ============================================ $_LANG['tricks']['1'] = "On DomainRegister you can register your own .com.br domain even if you have not a headquarter in Brazil"; $_LANG['tricks']['2'] = "Interface on DomainRegister is available in three different languages (English, Italian and Slovenian): select your preferred one using the flags in the upper right corner "; $_LANG['tricks']['3'] = "On DomainRegister you can renew any domain up to 10 years in advance (even those for which a multi-year renewal is not envisaged)"; $_LANG['tricks']['4'] = "If you manage a large number of domains, on DomainRegister you can create one or more DNS templates, to quickly implement complex DNS configurations for each single domain "; $_LANG['tricks']['5'] = "Using wildcard SSL certificates, with a single SSL certificate you can secure both your main domain and an unlimited number of subdomains on any number of different servers"; $_LANG['tricks']['6'] = "<a href=\"https://domainregister.international/dns-service.php\" target=\"_blank\">DomainRegister's DNS service</a> (which is free for any domain registered through us) got 100% uptime... since 2011!"; $_LANG['tricks']['7'] = "If you change the data of the registrant of a .com domain, you cannot transfer the domain for 60 days (sixty days lock)"; $_LANG['tricks']['8'] = "With DomainRegister's Linux Pro hosting plan, you get your own, dedicate european IP for your site"; $_LANG['tricks']['9'] = "DomainRegister's StarterMail starts with 5 email addresses and 5 GB archive space, and may be expanded up to 25 email addresses and 25 GB archive space; larger solutions are available upon request"; $_LANG['tricks']['10'] = "Keep your domains and services safe by protecting them with 2FA authentication: on DomainRegister it's free!"; $_LANG['tricks']['11'] = "trick 11"; $_LANG['tricks']['12'] = "trick 12"; $_LANG['tricks']['13'] = "trick 13";  
      Any idea to improve this hook is welcome!
       
       

    • By WGS
      We have released a more stable and feature-rich version 2.1.0 of the HostX WHMCS Theme. V 2.1.0 is now more stable and responsive than the previous versions.
      We have not left any stone unturned in this version, want to know what's new in this version?
      New Features
      3 New Variations Introduced New Mobile Menu Introduced Mobile Menu Domain Search Introduced 7 New Blocks Added New Banner Images Introduced Fully Responsive DNS Management, Get Epp Code, Manage Contact, Email Forwarding and Private Name Server options added in Client Area. Product detail page add a button for Cpanel login, webmail login, cancel service, etc Overall UI Enhancements SEO Manager and OG Tags now supports Multiple Language Top Menu now supports Multiple Language Improvements & Bugs Fixes
      Responsive Improvements UI/UX Improvements Add Funds Issues Fixed TLDs Showcase pricing issue fixed VPS Page Checks has been fixed Stability of the theme has been enhanced Security of the theme has been enhanced  
      New Versions Overview
             
       
      View More
    • By WGS
      We are giving flat 30% off on ClientX WHMCS Client Area Template. To Avail this offer, please use this coupon code: THEME30
      Buy Now at: https://whmcsglobalservices.com/clientarea-template/clientx/
      Dashboard:

       
      Domain registration Page:

       
      Order Page:

       
      Custom Order Form Template:

       

       
      Many Other Pages

       

       

       

    • By sokalsondha
      hello community...
      i hope all are doing very well. today i came back again for a small help with an code.
      basically by default now whmcs store the last 4 digit of the Credit card number of stripe gateway.
      which i found less confident for our clients.
      so i found an idea to modify the creditcard.tpl and make the RADIO BUTTON default to ENTER NEW CARD DETAILS
      and i will hide the 2nd radio button. this way client will never see that their credit card 4 digit is stored.. basically even storing the 4 digit we can't do anything.. but you know the clients....
      can someone guide me from this code what i should modify to make default to the 1st radio button even the card number is stored in the server
       
      {if $remotecode}
          <div id="frmRemoteCardProcess" class="text-center" align="center">
              {$remotecode}
              <iframe name="ccframe" class="auth3d-area" width="90%" height="600" scrolling="auto" src="about:blank"></iframe>
          </div>
          <script language="javascript">
              jQuery("#frmRemoteCardProcess").find("form:first").attr('target', 'ccframe');
              setTimeout("autoSubmitFormByContainer('frmRemoteCardProcess')", 1000);
          </script>
      {else}
          <form id="frmPayment" method="post" action="creditcard.php" class="form-horizontal" role="form">
              <input type="hidden" name="action" value="submit" />
              <input type="hidden" name="invoiceid" value="{$invoiceid}" />
              <div class="row">
                  <div class="col-md-7">
                      {if $errormessage}
                          {include file="$template/includes/alert.tpl" type="error" errorshtml=$errormessage}
                      {/if}
                      
                      
                          <div class="col-sm-12">
                          <img width="100%" src="/templates/{$template}/img/stripelogo.png">
                      </div>
                      <div class="alert alert-danger text-center gateway-errors hidden"></div>
                      <div class="form-group">
                          <div class="col-sm-8 col-sm-offset-4">
                              <div class="radio">
                                  <label>
                                      <input type="radio" name="ccinfo" value="new" onclick="showNewCardInputFields()"{if $ccinfo eq "new" || !$cardOnFile} checked{/if} /> {$LANG.creditcardenternewcard}</label>
                                  </label>
                              </div>
                              <div class="radio">
                                  <label>
                                      <input type="radio" name="ccinfo" value="useexisting" onclick="hideNewCardInputFields()" {if $cardOnFile && $ccinfo neq "new"}checked{elseif !$cardOnFile}disabled{/if} /> {$LANG.creditcarduseexisting}{if $cardOnFile} ({$existingCardType}-{$existingCardLastFour}){/if}
                                  </label>
                              </div>
                          </div>
                      </div>
                      <div class="form-group{if $userDetailsValidationError} hidden{/if}" id="billingAddressSummary">
                          <label for="cctype" class="col-sm-4 control-label">{$LANG.billingAddress}</label>
                          <div class="col-sm-6">
                              {if $companyname}{$companyname}{else}{$firstname} {$lastname}{/if} <button type="button" id="btnEditBillingAddress" onclick="editBillingAddress()" class="btn btn-default btn-sm"{if $cardOnFile} disabled="disabled"{/if}><i class="fa fa-edit"></i> {$LANG.change}</button><br />
                              {$address1}{if $address2}, {$address2}{/if}<br />
                              {$city}, {$state}, {$postcode}<br />
                              {$countryname}
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputFirstName" class="col-sm-4 control-label">{$LANG.clientareafirstname}</label>
                          <div class="col-sm-6">
                              <input type="text" name="firstname" id="inputFirstName" value="{$firstname}" class="form-control" />
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputLastName" class="col-sm-4 control-label">{$LANG.clientarealastname}</label>
                          <div class="col-sm-6">
                              <input type="text" name="lastname" id="inputLastName" value="{$lastname}" class="form-control" />
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputAddress1" class="col-sm-4 control-label">{$LANG.clientareaaddress1}</label>
                          <div class="col-sm-6">
                              <input type="text" name="address1" id="inputAddress1" value="{$address1}" class="form-control" />
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputAddress2" class="col-sm-4 control-label">{$LANG.clientareaaddress2}</label>
                          <div class="col-sm-6">
                              <input type="text" name="address2" id="inputAddress2" value="{$address2}" class="form-control" />
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputCity" class="col-sm-4 control-label">{$LANG.clientareacity}</label>
                          <div class="col-sm-6">
                              <input type="text" name="city" id="inputCity" value="{$city}" class="form-control" />
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputState" class="col-sm-4 control-label">{$LANG.clientareastate}</label>
                          <div class="col-sm-6">
                              <input type="text" name="state" id="inputState" value="{$state}" class="form-control" />
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputPostcode" class="col-sm-4 control-label">{$LANG.clientareapostcode}</label>
                          <div class="col-sm-6">
                              <input type="text" name="postcode" id="inputPostcode" value="{$postcode}" class="form-control" />
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputCountry" class="col-sm-4 control-label">{$LANG.clientareacountry}</label>
                          <div class="col-sm-6">
                              {$countriesdropdown}
                          </div>
                      </div>
                      <div class="form-group cc-billing-address{if !$userDetailsValidationError} hidden{/if}">
                          <label for="inputPhone" class="col-sm-4 control-label">{$LANG.clientareaphonenumber}</label>
                          <div class="col-sm-6">
                              <input type="text" name="phonenumber" id="inputPhone" value="{$phonenumber}" class="form-control" />
                          </div>
                      </div>
                      <div class="form-group cc-details{if !$addingNewCard} hidden{/if}">
                          <label for="cctype" class="col-sm-4 control-label">{$LANG.creditcardcardtype}</label>
                          <div class="col-sm-5">
                              <select name="cctype" id="cctype" class="form-control newccinfo">
                                  {foreach from=$acceptedcctypes item=type}
                                      <option{if $cctype eq $type} selected{/if}>
                                          {$type}
                                      </option>
                                  {/foreach}
                              </select>
                          </div>
                      </div>
                      <div class="form-group cc-details{if !$addingNewCard} hidden{/if}">
                          <label for="inputCardNumber" class="col-sm-4 control-label">{$LANG.creditcardcardnumber}</label>
                          <div class="col-sm-7">
                              <input type="tel" name="ccnumber" id="inputCardNumber" size="30" value="{if $ccnumber}{$ccnumber}{/if}" autocomplete="off" class="form-control newccinfo" />
                          </div>
                      </div>
                      {if $showccissuestart}
                          <div class="form-group cc-details{if !$addingNewCard} hidden{/if}">
                              <label for="inputCardStart" class="col-sm-4 control-label">{$LANG.creditcardcardstart}</label>
                              <div class="col-sm-8">
                                  <select name="ccstartmonth" id="inputCardStart" class="form-control select-inline">
                                      {foreach from=$months item=month}
                                          <option{if $ccstartmonth eq $month} selected{/if}>{$month}</option>
                                      {/foreach}
                                  </select>
                                  <select name="ccstartyear" id="inputCardStartYear" class="form-control select-inline">
                                      {foreach from=$startyears item=year}
                                          <option{if $ccstartyear eq $year} selected{/if}>{$year}</option>
                                      {/foreach}
                                  </select>
                              </div>
                          </div>
                      {/if}
                      <div class="form-group cc-details{if !$addingNewCard} hidden{/if}">
                          <label for="inputCardExpiry" class="col-sm-4 control-label">{$LANG.creditcardcardexpires}</label>
                          <div class="col-sm-8">
                              <select name="ccexpirymonth" id="inputCardExpiry" class="form-control select-inline">
                                  {foreach from=$months item=month}
                                      <option{if $ccexpirymonth eq $month} selected{/if}>{$month}</option>
                                  {/foreach}
                              </select>
                              <select name="ccexpiryyear" id="inputCardExpiryYear" class="form-control select-inline">
                                  {foreach from=$expiryyears item=year}
                                      <option{if $ccexpiryyear eq $year} selected{/if}>{$year}</option>
                                  {/foreach}
                              </select>
                          </div>
                      </div>
                      {if $showccissuestart}
                          <div class="form-group cc-details{if !$addingNewCard} hidden{/if}">
                              <label for="inputIssueNum" class="col-sm-4 control-label">{$LANG.creditcardcardissuenum}</label>
                              <div class="col-xs-2">
                                  <input type="number" name="ccissuenum" id="inputIssueNum" value="{$ccissuenum}" class="form-control input-" />
                              </div>
                          </div>
                      {/if}
                      <div class="form-group">
                          <label for="cctype" class="col-sm-4 control-label">{$LANG.creditcardcvvnumber}</label>
                          <div class="col-sm-7">
                              <input type="number" name="cccvv" id="inputCardCvv" value="{$cccvv}" autocomplete="off" class="form-control input-inline input-inline-100" />
                              <button type="button" class="btn btn-link" data-toggle="popover" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
                                  {$LANG.creditcardcvvwhere}
                              </button>
                          </div>
                      </div>
                      {if $shownostore}
                          <div class="form-group cc-details{if !$addingNewCard} hidden{/if}">
                              <div class="col-sm-offset-4 col-sm-8">
                                  <div class="checkbox">
                                      <label>
                                          <input type="checkbox" name="nostore" id="inputNoStore"> {$LANG.creditcardnostore}
                                      </label>
                                  </div>
                              </div>
                          </div>
                      {/if}
                      <div class="form-group">
                          <div class="text-center">
                              <button type="submit" class="btn btn-primary btn-lg" id="btnSubmit" value="{$LANG.submitpayment}">
                                  <span class="pay-text">{$LANG.submitpayment}</span>
                                  <span class="click-text hidden">{$LANG.pleasewait}</span>
                              </button>
                          </div>
                      </div>
                  </div>
                  <div class="col-md-5">
                      <div id="invoiceIdSummary" class="invoice-summary">
                          <h2 class="text-center">{$LANG.invoicenumber}{$invoiceid}</h2>
                          <div class="invoice-summary-table">
                          <table class="table table-condensed">
                              <tr>
                                  <td class="text-center"><strong>{$LANG.invoicesdescription}</strong></td>
                                  <td width="150" class="text-center"><strong>{$LANG.invoicesamount}</strong></td>
                              </tr>
                              {foreach $invoiceitems as $item}
                                  <tr>
                                      <td>{$item.description}</td>
                                      <td class="text-center">{$item.amount}</td>
                                  </tr>
                              {/foreach}
                              <tr>
                                  <td class="total-row text-right">{$LANG.invoicessubtotal}</td>
                                  <td class="total-row text-center">{$invoice.subtotal}</td>
                              </tr>
                              {if $invoice.taxrate}
                                  <tr>
                                      <td class="total-row text-right">{$invoice.taxrate}% {$invoice.taxname}</td>
                                      <td class="total-row text-center">{$invoice.tax}</td>
                                  </tr>
                              {/if}
                              {if $invoice.taxrate2}
                                  <tr>
                                      <td class="total-row text-right">{$invoice.taxrate2}% {$invoice.taxname2}</td>
                                      <td class="total-row text-center">{$invoice.tax2}</td>
                                  </tr>
                              {/if}
                              <tr>
                                  <td class="total-row text-right">{$LANG.invoicescredit}</td>
                                  <td class="total-row text-center">{$invoice.credit}</td>
                              </tr>
                              <tr>
                                  <td class="total-row text-right">{$LANG.invoicestotaldue}</td>
                                  <td class="total-row text-center">{$invoice.total}</td>
                              </tr>
                          </table>
                          </div>
                          <p class="text-center">
                              {$LANG.paymentstodate}: <strong>{$invoice.amountpaid}</strong><br />
                              {$LANG.balancedue}: <strong>{$balance}</strong>
                          </p>
                      </div>
                  </div>
              </div>
              <div class="alert alert-warning" role="alert">
                  <i class="fa fa-lock"></i> &nbsp; {$LANG.creditcardsecuritynotice}
              </div>
          </form>
      {/if}
       
       
       
      thanks very much to everyone for reading my post...
       
      Mahim
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

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