Jump to content

Search the Community

Showing results for tags 'php'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • The latest WHMCS Release
  • WHMCS Beta Program
  • The Latest from the WHMCS Team
    • News & Announcements
    • The WHMCS Blog
  • WHMCS.Community
    • Community Announcements
    • Introduce Yourself
  • Using WHMCS
    • Pre-Sales Questions
    • Admin & Configuration Questions
    • Installation, Upgrade, and Import Support
    • Using WHMCS
    • Troubleshooting Issues
    • Vendor Discussions
  • WHMCS Showcase
    • Showcase Your Site
    • Share Your Best Practices & Tips
  • Developing & Extending WHMCS
    • Third Party Add-ons
    • Service Offers & Requests
    • Developer Corner
    • Building Modules
    • Share Ideas for WHMCS Modules
  • Community Competitions
    • Competitions
  • General Discussions
    • General Discussion
  • General Feedback & Assistance
    • WHMCS.Community Tips & Tricks
  • Third Party Developers's Topics
  • Turkish International Discussions's Topics
  • Russian International Discussions's Topics
  • Spanish International Discussions's Topics
  • Portuguese International Discussions's Topics
  • French International Discussions's Topics
  • Italian International Discussions's Topics
  • German International Discussions's Topics
  • WHMCS Brasil's Topics
  • WHMCS Brasil's Tópicos
  • ModulesGarden Club's Topics
  • Hungarian International Discussions's Segítség
  • ThemeMetro Club's Topics
  • WHMCS Services Club's Topics
  • SwiftModders Club's Topics
  • WHMCS Global Services Club's Topics
  • Zomex Club's Topics

WHMCS Version

  • V7.9.x Hotfixes
  • V7.8.x Hotfixes
  • V7.7.x Hotfixes

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start



Found 32 results

  1. I am trying to create a custom WHMCS page without any sidebars. I only want it to show the top bar where clients can choose language, etc. I have this code currently: <?php define("CLIENTAREA",true); //define("FORCESSL",true); // Uncomment to force the page to use https:// require("init.php"); $ca = new WHMCS_ClientArea(); $ca->setPageTitle("Support Center"); $ca->addToBreadCrumb('index.php',$whmcs->get_lang('globalsystemname')); $ca->addToBreadCrumb('support.php','HostAble Support'); $ca->addToBreadCrumb('support-center.php','Support Center'); $ca->initPage(); # Check login status if ($ca->isLoggedIn()) { # User is logged in - put any code you like here # Here's an example to get the currently logged in clients first name $result = mysql_query("SELECT firstname FROM tblclients WHERE id=".$ca->getUserID()); $data = mysql_fetch_array($result); $clientname = $data[0]; $ca->assign('clientname', $clientname); } else { # User is not logged in } # Define the template filename to be used without the .tpl extension $ca->setTemplate('supportcenter'); $ca->output(); ?> But obviously it isnt working, it just shows the page but with the sidebars and navigation bar too. Thank you if you can help me :)
  2. Hello, I'm working on an Addon Module to store a License Key for an addon. I can have it verify the get the license key from the table.. but what I'm trying to do is figure out how to put a check_license within this: class License extends Model { /** @var string $table The table in which the addon settings are stored. (mod_mylicensetable) */ protected $table = 'mod_squareLicensing'; //protected function results($results); private $vString = "16da9d4d6fc1e1ec25ce622d59d3d34e2b147bed894296693492985d85d27868"; } $Licensedata = License::where('id', '1')->first( As such, I can get my License data as expected, however, within the Addon Module itself -- to ideally get everything, the check needs to be inside the Class. I'd like to do something like function verify_license { //--get information from original license call and do our actions for invalid or active } Can someone give me guidance? I'm new working with Laravel. I know how to do a license call with the default check_sample.php and have adapted that as needed, and have built upon it.. but working with the classes are new to me. Any help and pointers would be greatly appreciated 🙂
  3. Hi all, Grizzlyware has just released Ranger for WHMCS, which will allow you to generate, manage and distribute license keys for software that you sell, via WHMCS. It's much like the WHMCS 'Licensing' module, however it has only just been released, so while it's fully functional and full featured, there is more to be added. We built Ranger to satisfy our own needs, it's open source and allows developers to license their software in the field. This is a WHMCS module which uses the Ranger framework. You can of course use the Ranger library on its own if you prefer. The module is bundled with email templates too. It's free - There is no charge for this module or the Ranger framework, all of the source code is available online as well as a packaged up WHMCS module. More information can be found here: https://www.grizzlyware.com/apps/whmcs/ranger/ We will have more WHMCS modules coming out in the not too distant future too. With that said, we just released 'Email Catcher' which scans your ticket replies for mismatched client email addresses (so you don't send an email address to the wrong client). Any questions or confusion, please give me a shout. Thank you, Josh
  4. Hello, I am trying to create a hook for adding a new element in sidebar. I have created the hook. add_hook('ClientAreaPrimarySidebar', 1, function($primarySidebar) { /* @var \WHMCS\View\Menu\Item $primarySidebar */ $newMenu = $primarySidebar->addChild( 'accountmanager', array( 'name' => 'Home', 'label' => Lang::trans('account_manager'), 'order' => 1, 'icon' => 'fas fa-life-ring', ) ); $newMenu->addChild( 'accountmanager', array( 'label' => Lang::trans('account_manager_label'), ) ); }); I am trying somehow to get the userid, and assign it to a variable. And is it possible to be used in translations? I tried with this one here but it's not working: $variable = $template->getVariable('variablename')->value; $template->assign('variablename ', 'variable');
  5. Hello, I got to thinking.. For the license module, if you have different license tiers, and want to offer auto upgrades.. Could you make a page like this: https://www.whmcs.com/members/autoupgrade.php With using bootstrap like that.. I know it's possible, but does this somehow manage a custom field within WHMCS? I've always thought about that! I'd love to know your thoughts, as I'd love to build something like it!
  6. mfoland

    Avoiding PHP Smarty

    Hello, I made a Square Gateway, which is in the Marketplace. The issue right now, is it's coded with PHP, and has to rely on allowing it to run with the php smarty tags, which aren't recommended. Is there an alternative way to avoid Smarty PHP tags? Thanks!
  7. I found a old pretty cool script and i would like to perform him because like as been reported before the hook put the admin area with infinite loops <?php add_hook('ClientAreaPage', 1, switch_language($vars)); function switch_language($vars) { $country_to_language = array( 'default' => 'english', 'AR' => 'arabic', 'AR-DZ' => 'arabic', 'AR-BH' => 'arabic', 'AR-EG' => 'arabic', 'AR-IQ' => 'arabic', 'AR-JO' => 'arabic', 'AR-KW' => 'arabic', 'AR-LB' => 'arabic', 'AR-LY' => 'arabic', 'AR-MA' => 'arabic', 'AR-OM' => 'arabic', 'AR-QA' => 'arabic', 'AR-SA' => 'arabic', 'AR-SY' => 'arabic', 'AR-TN' => 'arabic', 'AR-AE' => 'arabic', 'AR-YE' => 'arabic', 'AZ' => 'azerbaijani', 'CA' => 'catalan', 'ZH' => 'chinese', 'ZH-HK' => 'chinese', 'ZH-CN' => 'chinese', 'ZH-SG' => 'chinese', 'ZH-TW' => 'chinese', 'HR' => 'croatian', 'CS' => 'czech', 'DA' => 'danish', 'NL' => 'dutch', 'NL-BE' => 'dutch', 'EN' => 'english', 'EN-AU' => 'english', 'EN-BZ' => 'english', 'EN-CA' => 'english', 'EN-IE' => 'english', 'EN-JM' => 'english', 'EN-NZ' => 'english', 'EN-PH' => 'english', 'EN-ZA' => 'english', 'EN-TT' => 'english', 'EN-GB' => 'english', 'EN-US' => 'english', 'EN-ZW' => 'english', 'ET' => 'estonian', 'FA' => 'farsi', 'FR' => 'french', 'FR-BE' => 'french', 'FR-CA' => 'french', 'FR-FR' => 'french', 'FR-LU' => 'french', 'FR-MC' => 'french', 'FR-CH' => 'french', 'DE' => 'german', 'DE-AT' => 'german', 'DE-DE' => 'german', 'DE-LI' => 'german', 'DE-LU' => 'german', 'DE-CH' => 'german', 'HE' => 'hebrew', 'HU' => 'hungarian', 'IT' => 'italian', 'IT-CH' => 'italian', 'MK' => 'macedonian', 'NO' => 'norwegian', 'NB' => 'norwegian', 'NN' => 'norwegian', 'PT-BR' => 'portuguese-br', 'PT' => 'portuguese-pt', 'RO' => 'romanian', 'RO-MO' => 'romanian', 'RU' => 'russian', 'RU-MO' => 'russian', 'ES' => 'spanish', 'ES-AR' => 'spanish', 'ES-BO' => 'spanish', 'ES-CL' => 'spanish', 'ES-CO' => 'spanish', 'ES-CR' => 'spanish', 'ES-DO' => 'spanish', 'ES-EC' => 'spanish', 'ES-SV' => 'spanish', 'ES-GT' => 'spanish', 'ES-HN' => 'spanish', 'ES-MX' => 'spanish', 'ES-NI' => 'spanish', 'ES-PA' => 'spanish', 'ES-PY' => 'spanish', 'ES-PE' => 'spanish', 'ES-PR' => 'spanish', 'ES-ES' => 'spanish', 'ES-UY' => 'spanish', 'ES-VE' => 'spanish', 'SV' => 'swedish', 'SV-FI' => 'swedish', 'SV-SV' => 'swedish', 'TR' => 'turkish', 'UK' => 'ukranian', // NOTE: You can add more below ); if(!isset($_SESSION['switch-language']) && $_SESSION['uid'] == false) { $_SESSION['switch-language'] = true; // prevent from redirecting back again in this session } $current_country = strtoupper(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)); $language = $current_country != '' && isset($country_to_language[$current_country]) ? $country_to_language[$current_country] : $country_to_language['default']; if(!isset($_SESSION['Language']) || $_SESSION['Language'] != $language) { $location = '?language='.$language; if($_SERVER['QUERY_STRING'] != '') $location .= '&'.$_SERVER['QUERY_STRING']; ob_clean(); header('location: '.$location); die(); } } ?> some one have one idea to do a work arround, he give so many loops on admin area like this administator/?language=portuguese-pt&language=portuguese-pt&language=portuguese-pt&amp;lang... so there is any suggestion to fix this old good script he works great for client area but no for admin area ☹️ credits for, @webix @Remitur @brian!
  8. Hi @ all, got some problems with modifying the configuredomains.tpl This is what I have at the moment : This is what I would like to have : That's the part that drives me to despair : {foreach key=domainfieldname item=domainfield from=$domain.fields} <div class="form-group"> <label class="{$responsio.classes.col}-3 {$responsio.classes.label} control-label">{$domainfieldname}</label> <div class="{$responsio.classes.col}-8"> {if $domainfield.type == "tickbox"}<div class="checkbox {$responsio.classes.checkbox}">{$domainfield}</div>{else}{$domainfield|replace:"type=\"text\"":"type=\"text\" class=\"form-control `$responsio.classes.input`\""|replace:"type=\"password\"":"type=\"password\" class=\"form-control `$responsio.classes.input`\""|replace:"<select":"<select class=\"form-control `$responsio.classes.input`\""|replace:"<textarea":"<textarea class=\"form-control `$responsio.classes.input`\""|replace:"style=\"width:90%;\"":""}{/if} </div> </div>{/foreach} Maybe someone has an idea how I could solve it . Thanks and best regards Christian
  9. I found an older post regarding this but I wanted to post a working hook that adds recaptcha to the checkout page. I think this a great thing especially if you're being bombarded with fake accounts and orders. /includes/hooks/checkout-recaptcha.php: <?php if (!defined("WHMCS")) die("This file cannot be accessed directly"); function limitOrders($vars) { $url = 'https://www.google.com/recaptcha/api/siteverify'; $privatekey = "YOUR_RECAPTCHA_SECRET_KEY_HERE"; $response = file_get_contents($url . "?secret=" . $privatekey . "&response=" . $_POST['g-recaptcha-response'] . "&remoteip=" . $_SERVER['REMOTE_ADDR']); $data = json_decode($response); if (isset($data->success) AND $data->success == true) { // everything is ok! } else { $pm = $vars['paymentmethod']; if ($pm == "paypalpaymentspro") { global $errormessage; $errormessage.= "<li> Please, confirm that you are not a robot! <br/></li>"; } //if CC } } //function add_hook("ShoppingCartValidateCheckout", 1, "limitOrders"); Change YOUR_RECAPTCHA_SECRET_KEY_HERE to your the recaptcha private/secret key Google gives you. I'm using for my credit card checkout which is "paypalpaymentspro" but you can use it for any payment method. I think you really only need if you accept credits though. To get your payment method view source on the checkout page and search for "paymentmethod" your payment method will be near this. In your checkout.tpl file you also need to add somewhere under the "Complete Payment" button: <div class="g-recaptcha" data-sitekey="YOUR_RECAPTCHA_PUBLIC_KEY_HERE"></div> Replace YOUR_RECAPTCHA_PUBLIC_KEY_HERE with your public recaptcha key provided by Google. This is tested working on WHMCS v7.5.1.
  10. When it comes time to order a hosting plan, sometimes you don't want your users to be able to enter in a subdomain when using an existing domain for their order. In this post I am going to walk you through a basic hook that prevents entering a subdomain by using some client-side JavaScript. Our first order of business will be to check out the WHMCS hooks index to see if there is a hook point that will fit our needs: https://developers.whmcs.com/hooks/hook-index/ It turns out, the ClientAreaFooterOutput hook will do nicely: https://developers.whmcs.com/hooks-reference/output/#clientareafooteroutput The reason for this is because that hook point will allow you to inject HTML code, which also can contain JavaScript, into the client-side template so you can make the magic happen. Before getting into more detail, let's go ahead and dive right into the code. You can also download it from this link block_subdomains.txt (then rename the extension to .php). Here is the entire snippet: <?php add_hook('ClientAreaFooterOutput', 1, function($vars) { $jqueryCode = '<script> $("#owndomainsld").on("keyup", function(e) { var str = $("#owndomainsld").val(); if ( str.indexOf(".") != -1 ) { $("#owndomainsld").val(""); alert("Subdomains are not allowed!"); } }); </script>'; if (strpos($_SERVER['REQUEST_URI'], 'cart.php') !== false ) { return $jqueryCode; } }); The first thing to notice is the add_hook function is being called with the ClientAreaFooterOutput hook point as the first argument and an anonymous function as the second argument. The anonymous function also has a $vars variable being passed into it. For this example the $vars variable is not actually being used in the body of the function, but it does contain some useful parameters should you need to access them. Those parameters can be found in the documentation for the hook point linked above. The next thing to notice is the $jqueryCode variable. which is actually a PHP string that contains the JavaScript code we will be injecting into our client-side page. Since WHMCS uses the jQuery JavaScript library and loads it on the page, we can use it in our code. First, we need to bind an event listener to the keyup event on the domain text box and provide it a callback function to execute when that event occurs. This can be easily done by targeting the element's HTML ID attribute. That is what is happening here: $("#owndomainsld").on("keyup", function(e) {... After that, the value of the domain text field is stored in a JavaScript variable called str. Since this code is inside our callback function, it will be executed every time the user presses a key on the keyboard and then releases it: var str = $("#owndomainsld").val(); Once we have that text stored in our str variable, we need to check it for a dot or period '.' character to see if it is a subdomain. This can be done with indexOf string function in JavaScript. If the text appears to be a subdomain, we'll go ahead and empty out the text field and then show an alert to the user to let them know that subdomains are not allowed: if ( str.indexOf(".") != -1 ) { $("#owndomainsld").val(""); alert("Subdomains are not allowed!"); } Finally, the last part of the hook does a case-insensitive string search on the $_SERVER['REQUEST_URI'] (the URL of the page you're visiting), to check and see if a cart page is being rendered. If a cart page is detected, the JavaScript code is injected into that page so it can run. if (strpos($_SERVER['REQUEST_URI'], 'cart.php') !== false ) { return $jqueryCode; } Putting it all together, we get the final results in WHMCS which look like the picture here: I hope this post proved helpful and gives some insight on some of the ways that WHMCS can be extended to do many different things outside the box! At the time of writing this post, this hook was tested on the latest stable release of WHMCS 7.4.2 and should work with any that fall under Active Support as per the LTS schedule here: https://docs.whmcs.com/Long_Term_Support#WHMCS_Version_.26_LTS_Schedule If you have any feedback, questions, or concerns that I did not cover in this post, please feel free to reach out!
  11. Hello everyone, Hope you guys doing good. I came up with something new or maybe old . I want to implement whmcs lang from English to Hindi. for my indian customers. So i will convert each and every English Words to hindi words. Already 50% done. but please anyone tell me how to Add a extension ex- Hindi in header dropdown menu and target it to my Hindi lang File. Check the screenshot for more info, So i have added a Hindi.php file in Lang directory but in dropdown its showing English 2 times. Sorry for my Bad English. Here is all. Thanks Bagful International
  12. Anyone have idea, how to show other domain registration in modern tpl? Thanks Madan Malhotra
  13. I have two WHMCS installations, both using google apps gmail as the support mail. For the sake of discussion let's call them system1.com and system2.com. Both are configured identically as far as I can see, using the pop.php script. For all normal purposes it seems to work fine, customers can mail to the google apps mail accounts, the mail is imported with the pop.php scripts, no problems. The odd thing is, I get a mail sent to the admin email account when there are tickets, and for one installation I can directly reply through email, and the reply is entering into the ticket system. For the other, the mail arrives in the google apps email account, but is never imported into the ticket system. The util > mail log shows nothing, there are no entries for this mail. When I run the pop.php script manually, one account comes up like this: 2$ php -q /home/system1/crons/pop.php POP Import Log Date: 15/08/2017 13:01:10 --- Host: pop.gmail.com Email: support@system1.com Mailbox is empty --- Host: pop.gmail.com Email: sales@system1.com Mailbox is empty --- The other one comes out like this: $ php -q /home/system2/crons/pop.php POP Import Log Date: 15/08/2017 14:35:51 --- Host: pop.gmail.com<br>Email: support@system2.com<br>-bash-4.2$ So, 2 odd things: 1) system1 outputs in standard txt mode, system2 outputs in HTML (br tags) 2) both systems have both a sales and support email account, but whereas system1 reads both, system2 seems to crash and exit after checking the first account. If I go to setup > support > support departments and change the order of the emails, the exact same thing happens just with the sales@ mail account. md5sum reports same value for the two pop.php scripts - 5314ac613216da7ac7e76a7b64f87600 - so the output *ought* to be the same? I've been digging in this for a couple of hours already and are kinda pulling my non-existing hair out. Any ideas?
  14. Hi! I am looking for a FREE panel, that have the opportunity to disable PHP, since cPanel/WHM doesn't support it. Do you have any idea how to archieve that? Tried ISPConfig 3 but unfortunately got many errors with the module. I could only able to create the client's account via WHMCS inside ISPConfig 3 but no the hosting plus others. So basically do you know any nice panel with suppoting disable PHP? Thank you!
  15. Hello! I having some issue with integrating WP header into WHMCS.. What I already did ... https://billing.brohosting.eu/?systpl=brohosting As you can see looks almost great, but WHMCS menu is missing. Should be related to some JS or something. Can you please help me? If you need any information just tell me! Regards, Marcell
  16. So, I've been looking into this a little bit... Diving into it. The "fraud" module is kind of laid out like a module. Noticed the following functions: getConfigArray() return configarray() doFraudCheck($params) return results() getResultsArray($results) resultarray() When I configured the getConfigArray() and setup the array as such: function getConfigArray() { $configarray = array( "Enable" => array( "Type" => "yesno", "Description" => "Tick to enable My Fraud Module" ), ); return $configarray; } //end configArray when I select the fraud module from the list, it wont display the option. Any help?
  17. I'm attempting to install WHMCS-6.3.1 on Plesk-12.5.30 on CentOS-6.7 but the WHMCS installer complains that the currently installed version of PHP (i.e., PHP-5.3.3) is inadequate. (WHMCS-6.x requires PHP >= 5.3.7.) [root@cp whmcs]# php -v PHP 5.3.3 (cli) (built: Jul 9 2015 17:39:00) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.0.12, Copyright (c) 2002-2015, by ionCube Ltd. [root@cp whmcs]# yum upgrade php <<<snip>>> --> Running transaction check ---> Package php.x86_64 0:5.3.3-46.el6_6 will be updated ---> Package php.x86_64 0:5.3.3-47.el6 will be an update AFAICT, three versions of PHP are currently installed: [root@cp whmcs]# rpm -qa | grep php | sort php-5.3.3-46.el6_6.x86_64 php5-ioncube-loader-5.0.12-centos6.15081418.x86_64 php-cli-5.3.3-46.el6_6.x86_64 php-common-5.3.3-46.el6_6.x86_64 php-gd-5.3.3-46.el6_6.x86_64 php-imap-5.3.3-46.el6_6.x86_64 php-mbstring-5.3.3-46.el6_6.x86_64 php-mysql-5.3.3-46.el6_6.x86_64 php-pdo-5.3.3-46.el6_6.x86_64 php-xml-5.3.3-46.el6_6.x86_64 plesk-php56-5.6.24-centos6.16072212.x86_64 plesk-php56-bcmath-5.6.24-centos6.16072212.x86_64 plesk-php56-cli-5.6.24-centos6.16072212.x86_64 plesk-php56-dba-5.6.24-centos6.16072212.x86_64 plesk-php56-enchant-5.6.24-centos6.16072212.x86_64 plesk-php56-fpm-5.6.24-centos6.16072212.x86_64 plesk-php56-gd-5.6.24-centos6.16072212.x86_64 plesk-php56-imagick-3.1.2-centos6.15081011.x86_64 plesk-php56-imap-5.6.24-centos6.16072212.x86_64 plesk-php56-intl-5.6.24-centos6.16072212.x86_64 plesk-php56-ioncube-loader-5.0.18-centos6.15101214.x86_64 plesk-php56-ldap-5.6.24-centos6.16072212.x86_64 plesk-php56-mbstring-5.6.24-centos6.16072212.x86_64 plesk-php56-mcrypt-5.6.24-centos6.16072212.x86_64 plesk-php56-mysql-5.6.24-centos6.16072212.x86_64 plesk-php56-odbc-5.6.24-centos6.16072212.x86_64 plesk-php56-opcache-5.6.24-centos6.16072212.x86_64 plesk-php56-pdo-5.6.24-centos6.16072212.x86_64 plesk-php56-pear-1.9.4-centos6.16072212.noarch plesk-php56-pgsql-5.6.24-centos6.16072212.x86_64 plesk-php56-process-5.6.24-centos6.16072212.x86_64 plesk-php56-pspell-5.6.24-centos6.16072212.x86_64 plesk-php56-redis-2.2.5-centos6.15081011.x86_64 plesk-php56-release-5.6.24-centos6.16072212.x86_64 plesk-php56-snmp-5.6.24-centos6.16072212.x86_64 plesk-php56-soap-5.6.24-centos6.16072212.x86_64 plesk-php56-tidy-5.6.24-centos6.16072212.x86_64 plesk-php56-xdebug-2.2.3-centos6.15081011.x86_64 plesk-php56-xml-5.6.24-centos6.16072212.x86_64 plesk-php56-xmlrpc-5.6.24-centos6.16072212.x86_64 plesk-php70-7.0.9-centos6.16072211.x86_64 plesk-php70-bcmath-7.0.9-centos6.16072211.x86_64 plesk-php70-cli-7.0.9-centos6.16072211.x86_64 plesk-php70-dba-7.0.9-centos6.16072211.x86_64 plesk-php70-enchant-7.0.9-centos6.16072211.x86_64 plesk-php70-fpm-7.0.9-centos6.16072211.x86_64 plesk-php70-gd-7.0.9-centos6.16072211.x86_64 plesk-php70-imagick-3.4.1-centos6.16063012.x86_64 plesk-php70-imap-7.0.9-centos6.16072211.x86_64 plesk-php70-intl-7.0.9-centos6.16072211.x86_64 plesk-php70-ldap-7.0.9-centos6.16072211.x86_64 plesk-php70-mbstring-7.0.9-centos6.16072211.x86_64 plesk-php70-mcrypt-7.0.9-centos6.16072211.x86_64 plesk-php70-mysql-7.0.9-centos6.16072211.x86_64 plesk-php70-odbc-7.0.9-centos6.16072211.x86_64 plesk-php70-opcache-7.0.9-centos6.16072211.x86_64 plesk-php70-pdo-7.0.9-centos6.16072211.x86_64 plesk-php70-pear-1.10.1-centos6.16072211.noarch plesk-php70-pgsql-7.0.9-centos6.16072211.x86_64 plesk-php70-process-7.0.9-centos6.16072211.x86_64 plesk-php70-pspell-7.0.9-centos6.16072211.x86_64 plesk-php70-release-7.0.9-centos6.16072211.x86_64 plesk-php70-snmp-7.0.9-centos6.16072211.x86_64 plesk-php70-soap-7.0.9-centos6.16072211.x86_64 plesk-php70-tidy-7.0.9-centos6.16072211.x86_64 plesk-php70-xml-7.0.9-centos6.16072211.x86_64 plesk-php70-xmlrpc-7.0.9-centos6.16072211.x86_64 psa-php5-configurator-1.7.0-cos6.build1205150820.19.x86_64 psa-phpmyadmin-4.6.0-cos6.build1205160427.18.noarch psa-phppgadmin-5.1-cos6.build1205150814.17.noarch How can I fix this?
  18. sebsimappus

    Stop scroll in cart

    Hello, I come to you to see if anyone is how the scroll Stope at some point. I joined the js code, in hope to have your help thank you in advance cordially $(document).ready(function () { var $orderSummaryEl = jQuery("#scroll"); if ($orderSummaryEl.length) { var offset = jQuery("#scrollingPanelContainer").parent('.row').offset(); //var maxTopOffset = jQuery("#scrollingPanelContainer").parent('.row').outerHeight() - 35; var maxTopOffset = jQuery("#scrollingPanelContainer").parent('.row'); var topPadding = 15; jQuery(window).resize(function() { offset = jQuery("#scrollingPanelContainer").parent('.row').offset(); //maxTopOffset = jQuery("#scrollingPanelContainer").parent('.row').outerHeight() - 35; maxTopOffset = jQuery("#scrollingPanelContainer").parent('.row'); repositionScrollingSidebar(); }); jQuery(window).scroll(function() { repositionScrollingSidebar(); }); repositionScrollingSidebar(); } function repositionScrollingSidebar() { if (jQuery("#scrollingPanelContainer").css('float') != 'left') { $orderSummaryEl.stop().css('margin-top', '0'); return false; } var heightOfOrderSummary = $orderSummaryEl.outerHeight(); var newTopOffset = jQuery(window).scrollTop() - offset.top + topPadding; if (newTopOffset > maxTopOffset - heightOfOrderSummary) { newTopOffset = maxTopOffset - heightOfOrderSummary; } if (jQuery(window).scrollTop() > offset.top) { $orderSummaryEl.stop().animate({ marginTop: newTopOffset }); } else { $orderSummaryEl.stop().animate({ marginTop: 0 }); } } });
  19. Hey, Today ionCube released v4.5.0 which compatible with PHP 5.5.X. So I updated my PHP 5.4.x to 5.5.x and installed the new loaders but when I try to access to the Administrator panel I got this error: Please know that before you update to PHP 5.5.x because WHMCS team need to the update WHMCS files in order support the new ionCube loaders.
  20. Hi guys, I've tried searching for this in Google and all I see are other people's web sites that have the same issue On my cart page (cart.php) I get the following error: array_key_exists() expects parameter 2 to be array, null given in /path/to/orderfunctions.php In my configuration.php I have $display_errors set to E_ALL ^ E_NOTICE. If I add ^ E_WARNING then the errors go. So maybe the real question here is, should I be hiding warnings on production? Thanks for any advice on the issue.
  21. PDF-Invoice template # Clients Details $addressypos = $pdf->GetY(); $pdf->SetFont($pdfFont, '', 12); $pdf->SetFillColor(59,78,135); $pdf->SetTextColor(255,255,255); $pdf->Cell(50, 6, strtoupper(Lang::trans('supportticketsclient')), 0, 1, 'L', true); How to make that cell to show UpperCase letters for the translated word "supportticketsclient" I tried with strtoupper command, but still the word is with small letters.
  22. Hi, I'm not sure if this has already been done but I use Sticky Notes to record additional work that needs to be invoiced at a later date but kept on forgetting who I'd done extra work for. So I've created a widget for the Admin Summary page that displays all the Sticky Notes with links through to the Customers Note and also the customer summary. Just create a new file in modules/widgets and paste this code in. Then head over to Setup > Staff Management > Administrator Roles > Edit and scroll down to Widgets and then tick yours (in this example it's called "Display Customer\'s Sticky Notes". This was created in Version: 5.3.11 and is still working in 6.1.1 but it if breaks yours or makes the sky fall down, I'm not liable... ?php # WHMCS Widget to display sticky notes on the Admin Summary # Hedley Phillips - Digital Essence if (!defined("WHMCS")) die("This file cannot be accessed directly"); function widget_display_sticky_notes() { $content = '<table bgcolor="#cccccc" align="center" style="margin-bottom:5px;width:100%;" cellspacing="1"> <tr bgcolor="#efefef" style="text-align:center;font-weight:bold;"><td>Customer</td><td>Note</td><td>Modified</td></tr>'; $x=1; $range = "<= 364"; $result = mysql_query("SELECT * FROM `tblnotes` JOIN tblclients ON tblclients.id=tblnotes.userid WHERE `sticky` = '1'"); while ($data = @mysql_fetch_array ($result)) { $noteid = $data["id"]; $userid = $data["userid"]; $firstname = $data["firstname"]; $lastname = $data["lastname"]; $note = $data["note"]; $date = $data["modified"]; $content .= '<tr bgcolor="#ffffff" style="text-align:center;"><td><a href="/whmcsadmin/clientssummary.php?userid='.$userid.'">'.$firstname. ' ' .$lastname.'</a></td><td><a href="/whmcsadmin/clientsnotes.php?userid='.$userid.'&action=edit&id='.$noteid.'">'.$note.'</a></td><td>'.$date.'</td></tr>'; $x=0; } if($x) $content = '<tr bgcolor="#ffffff" style="text-align:center;"><td colspan="7">No Sticky Notes to display</td></tr>'; $content .= '</table>'; return array( 'title' => 'Display Customer\'s Sticky Notes', 'content' => $content ); } add_hook("AdminHomeWidgets",1,"widget_display_sticky_notes"); ?> NOTE: What I can't get to work and am looking for input from others on is the edit function. I'm using: <a href="/whmcsadmin/clientsnotes.php?userid='.$userid.'&action=edit&id='.$noteid.'"> where: $noteid = $data["id"]; $userid = $data["userid"]; but it keeps on putting the customer id in both $userid and $noteid and I can't work out why.
  23. I know this is a shot in the dark. I am using a custom addon that won't work with whmcs 6, it's pretty straightforward and basically checks hosted sites for a certain html code and returns with a list of site that does or doesn't have the code installed, the sites the do not have the code should be terminated be the module but this is not happening. Here's the code and any help would be much appreciated. <?php if (!defined("WHMCS")) die("This file cannot be accessed directly"); /** * get "need banner" hosting types list * */ function _bannersforfree_get_banner_hosting_list2() { $db_result = full_query("SELECT b.*, h.name as hosting_name FROM `mod_banners_hosting_types` as b LEFT JOIN `tblproducts` h ON b.hid = h.id WHERE h.type='hostingaccount' ORDER BY `id` DESC"); $result_array = array(); while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $result_array[] = $row; } return $result_array; } /** * get hosting data by order id * */ function _bannersforfree_get_hosting_data_by_order_id($order_id = 0) { $db_result = full_query("SELECT * FROM `tblhosting` WHERE orderid='$order_id' LIMIT 1"); $result_array = array(); while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $result_array = $row; return $result_array; } return false; } /** * get free hosting users list counter * */ function _bannersforfree_get_hosting_user_counter2($free_package_ids) { $ids = join(',', $free_package_ids); $db_result = full_query("SELECT count(*) as counter FROM `tblhosting` WHERE packageid IN ($ids) AND domainstatus = 'Active' ORDER BY `id`"); $result_row = array(); while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $result_row = $row; return $result_row['counter']; break; } return 0; } /** * get free hosting users list * */ function _bannersforfree_get_hosting_users2($free_package_ids, $start_from, $page_size) { $ids = join(',', $free_package_ids); $db_result = full_query("SELECT * FROM `tblhosting` WHERE packageid IN ($ids) AND domainstatus = 'Active' ORDER BY `id` LIMIT $start_from, $page_size"); $result_array = array(); while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $result_array[] = $row; } return $result_array; } /** * Update banner * */ function _bannersforfree_update_hosting($id, $status, $suspendedto) { return full_query("UPDATE `tblhosting` SET `domainstatus` = '$status', `overidesuspenduntil` = '$suspendedto' WHERE `id` = '$id' "); } /** * Get banners * */ function _bannersforfree_get_banners2() { $db_result = full_query("SELECT * FROM `mod_banners_banners` ORDER BY `id` DESC"); $result_array = array(); while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $result_array[] = $row; } return $result_array; } /** * set setting value by slug * */ function _bannersforfree_set_setting2($slug, $value = '') { return full_query("UPDATE `mod_banners_config` SET `value`='" . $value . "' WHERE `slug` = '" . $slug . "' LIMIT 1"); } /** * Get setting value by slug * */ function _bannersforfree_get_setting2($slug = '') { $db_result = full_query("SELECT * FROM `mod_banners_config` WHERE `slug` = '" . $slug . "' LIMIT 1"); $result = false; while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $result = $row; break; } return $result; } /** * Get user * */ function _bannersforfree_get_user($uid) { $db_result = full_query("SELECT * FROM `tblclients` WHERE `id` = '$uid' LIMIT 1"); $result = false; while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $result = $row; break; } return $result; } /** * Get email template * */ function _bannersforfree_get_email_template_by_name($name) { $db_result = full_query("SELECT * FROM `tblemailtemplates` WHERE `name` = '$name' LIMIT 1"); $result = false; while ($row = mysql_fetch_array($db_result, MYSQL_ASSOC)) { $result = $row; break; } return $result; } /** * Sending curl post * */ function _curl_post_sender($postfields) { // Get website URL $table = "tblconfiguration"; $fields = "value"; $where = array("setting" => "SystemURL"); $result = select_query($table, $fields, $where); $urldata = mysql_fetch_assoc($result); $url = $urldata['value'] . 'includes/api.php'; // Get username and pass to use in api $table = "tbladmins"; $fields = "id,username,password"; $where = ''; $result = select_query($table, $fields, $where); $data = mysql_fetch_assoc($result); $postfields["username"] = $data['username']; $postfields["password"] = $data['password']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 100); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); $data = curl_exec($ch); curl_close($ch); return $data; } /** * Make domain suspended * */ function _suspend_domain($domain_id) { $postfields["action"] = "modulesuspend"; $postfields["accountid"] = $domain_id; _curl_post_sender($postfields); } /** * Mail sending * */ function _bannersforfree_mail($uid) { error_reporting(E_ALL); $query = full_query("SELECT value FROM `mod_banners_config` WHERE `slug` = 'cron_email_tpl' LIMIT 1"); $templateid = mysql_fetch_assoc($query); $table = "tblemailtemplates"; $fields = "name"; $where = array("id" => $templateid['value']); $result = select_query($table, $fields, $where); $data = mysql_fetch_assoc($result); $postfields["messagename"] = $data['name']; $postfields["action"] = "sendemail"; $postfields["id"] = $uid; _curl_post_sender($postfields); } /** * Banners cron process * */ function _bannersforfree_cron() { echo "<b>Start checking free hostings</b><br />"; # getting cron settings $cron_limit_array = _bannersforfree_get_setting2('cron_limit'); $cron_last_id_array = _bannersforfree_get_setting2('cron_last_id'); $cron_limit = $cron_limit_array['value']; $cron_last_id = $cron_last_id_array['value']; if (!$cron_limit) { $cron_limit = 100; } if (!$cron_last_id) { $cron_last_id = 0; } echo "<i>Getting settings</i>"; echo "<i>( limit = $cron_limit, start from row# $cron_last_id)</i><br />"; # getting free hosting types $free_hosting_types = _bannersforfree_get_banner_hosting_list2(); $free_ids = array(); foreach ($free_hosting_types as $hosting_free) { $free_ids[] = $hosting_free['hid']; } $free_hostings_list = _bannersforfree_get_hosting_users2($free_ids, $cron_last_id, $cron_limit); $free_hosting_counter = _bannersforfree_get_hosting_user_counter2($free_ids); echo "<i>Getting hosting list...</i><br />"; # save hosting pointer if (($cron_limit + $cron_last_id) < $free_hosting_counter) { _bannersforfree_set_setting2('cron_last_id', $cron_limit + $cron_last_id); } else { _bannersforfree_set_setting2('cron_last_id', 0); } # checking websites $banners = _bannersforfree_get_banners2(); if (!empty($free_hostings_list)) { foreach ($free_hostings_list as $hosting) { $url = $hosting['domain']; echo "Checking <b>$url</b> html<br />"; # getting hosting website html $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, 0); $website_html = curl_exec($ch); curl_close($ch); # compare website html with banners html $banner_founded = false; foreach ($banners as $banner) { $banner_html = htmlspecialchars_decode($banner['html']); if (strpos($website_html, $banner_html) !== false) { $banner_founded = true; break; } } # changing hosting status if banner not found if (!$banner_founded) { //_bannersforfree_update_hosting($hosting['id'], 'Suspended', date("Y-m-d", time() + 60*60*24*3 )); // suspended for 3 days _suspend_domain($hosting['id']); _bannersforfree_mail($hosting['userid']); echo "<i style='color:red'>AD not found</i><br />"; } else { echo "<i style='color:green'>AD found</i><br />"; } } } die('<b>done</b>'); } /** * Hook running before checkout complete page shows * */ function bannersforfree_hook1($vars) { $order_id = $vars['orderid']; $free_hosting_types = _bannersforfree_get_banner_hosting_list2(); $free_ids = array(); foreach ($free_hosting_types as $hosting_free) { $free_ids[] = $hosting_free['hid']; } $current_hosting = _bannersforfree_get_hosting_data_by_order_id($order_id); # if hosting type "may have banner" if (in_array($current_hosting['packageid'], $free_ids)) { # redirect to the banners list header("Location: index.php?m=bannersforfree&ordernumber=" . $vars['ordernumber']); } } if (isset($_GET['action'])) { # banners list on product details page if ($_GET['action'] == "productdetails") { $product_id = (int) $_GET['id']; $current_hosting = _bannersforfree_get_hosting_data_by_order_id($product_id); $free_hostings_array = _bannersforfree_get_banner_hosting_list2(); $free_ids = array(); foreach ($free_hostings_array as $hosting_free) { $free_ids[] = $hosting_free['hid']; } if (in_array($current_hosting['packageid'], $free_ids)) { $_LANG['freehosting'] = 1; } else { $_LANG['freehosting'] = 0; } $banners_list = _bannersforfree_get_banners2(); $output = "<table class='datatable' width='100%' cellspacing='3' cellpadding='3' border='0'>"; $output .= "<tr><th>View</th><th>Code</th></tr>"; foreach ($banners_list as $banner) { $b_id = $banner['id']; $output .= "<tr>"; $output .= "<td>"; $output .= "<div style='width:300px;overflow:auto'>" . htmlspecialchars_decode($banner['html']) . "</div>"; $output .= "</td>"; $output .= "<td>"; $output .= '<textarea cols="40" rows="12" name="banners[' . $b_id . ']">' . $banner['html'] . '</textarea>'; $output .= "</td>"; $output .= "</tr>"; } $output .= "</table>"; $_LANG['bannerslist'] = $output; } # banners cron if ($_GET['action'] == "bannerscron") { _bannersforfree_cron(); } } add_hook("ShoppingCartCheckoutCompletePage", 1, "bannersforfree_hook1"); ?> - - - Updated - - - There's also this file and thats all there is to the addon. <?php if (!defined("WHMCS")) die("This file cannot be accessed directly"); /** * Addon config hook **/ function bannersforfree_config() { $configarray = array( "name" => "for Hosting", "description" => "", "version" => "1.1", "author" => "", "language" => "english", ); return $configarray; } /** * Plugin activation hook **/ function bannersforfree_activate(){ $query = "CREATE TABLE IF NOT EXISTS `mod_banners_banners` ( `id` INT NOT NULL AUTO_INCREMENT, `html` TEXT NOT NULL, PRIMARY KEY ( `id` ))"; $result1 = full_query($query); $query = "CREATE TABLE IF NOT EXISTS `mod_banners_config` ( `id` INT NOT NULL AUTO_INCREMENT, `slug` VARCHAR (255) NOT NULL, `value` VARCHAR (255) NOT NULL, PRIMARY KEY ( `id` ))"; $result2 = full_query($query); $query = "CREATE TABLE IF NOT EXISTS `mod_banners_hosting_types` ( `id` INT NOT NULL AUTO_INCREMENT, `hid` INT NOT NULL, PRIMARY KEY ( `id` ))"; $result3 = full_query($query); # set default value for cron limit $query = "INSERT INTO `mod_banners_config` VALUES (NULL, 'cron_limit', '100')"; $result4 = full_query($query); $query = "INSERT INTO `mod_banners_config` VALUES (NULL, 'cron_last_id', '0')"; $result5 = full_query($query); $query = "INSERT INTO `mod_banners_config` VALUES (NULL, 'cron_email_tpl', '56')"; $result6 = full_query($query); if(!$result1 || !$result2 || !$result3 || !$result4 || !$result5 || !$result6){ return array('status'=>'error', 'description'=>'There was an error occurred on addon activation'); } else{ return array('status'=>'success', 'description'=>'"Forced Ads for Hosting" addon activated successfully'); } } /** * Addon deactivation hook **/ function bannersforfree_deactivate() { $query = "DROP TABLE IF EXISTS `mod_banners_banners`"; $result1 = full_query($query); $query = "DROP TABLE IF EXISTS `mod_banners_config`"; $result2 = full_query($query); $query = "DROP TABLE IF EXISTS `mod_banners_hosting_types`"; $result3 = full_query($query); if(!$result1 || !$result2 || !$result3){ return array('status'=>'error', 'description'=>'There was an error occurred on addon deactivation'); } else{ return array('status'=>'success', 'description'=>'"Forced Ads for Hosting" addon deactivated successfully'); } } function bannersforfree_clientarea($vars){ if(isset($_GET['ordernumber'])){ $ordernumber = $_GET['ordernumber']; } else{ $ordernumber = 0; } $banners_list = _bannersforfree_get_banners(); foreach($banners_list as $key => $banner){ $banners_list[$key] = htmlspecialchars_decode( $banners_list[$key]['html'] ); } $LANG = $vars['_lang']; return array( 'pagetitle' => 'Banners list', 'breadcrumb' => array('index.php?m=bannersforfree'=>'Banners list'), 'templatefile' => 'clientbannerslist', 'requirelogin' => true, # or false 'vars' => array( 'ordernumber' => $ordernumber, 'banners' => $banners_list, 'text' => $vars['_lang'], ), ); } /** * Addon's admin-sde page **/ function bannersforfree_output(){ # saving data if(!empty($_POST)){ # add new banner if(isset($_POST['newbanner'])){ $new_banner_html = trim( $_POST['newbanner'] ); _bannersforfree_add_banner($new_banner_html); } # update banner if(isset($_POST['banners'])){ if(!empty($_POST['banners'])){ foreach($_POST['banners'] as $b_id => $b_html){ _bannersforfree_update_banner($b_id, $b_html); } } } # remove banner if(isset($_POST['banners'])){ if(!empty($_POST['banners'])){ foreach($_POST['deletebanners'] as $b_id => $flag){ _bannersforfree_remove_banner($b_id); } } } # new "must have banner" hosting if(isset($_POST['newhosting'])){ $hosting_id = (int)$_POST['newhosting']; _bannersforfree_add_banner_hosting($hosting_id); } # delete hosting from "must have banner" list if(isset($_POST['deletehosting'])){ if(!empty($_POST['deletehosting'])){ foreach($_POST['deletehosting'] as $h_id => $flag){ _bannersforfree_remove_banner_hosting($h_id); } } } # set cron limit if(isset($_POST['settings'])){ if(!empty($_POST['settings'])){ foreach($_POST['settings'] as $slug => $value){ _bannersforfree_set_setting($slug, $value); } } } } # new banner form $output = '<form action="addonmodules.php?module=bannersforfree" method="post">'; $output .= '<textarea style="width:100%; height:80px" name="newbanner">Place the HTML code of the AD</textarea><br /><br />'; $output .= '<input type="submit" class="btn btn-success" value="Add New AD" name="msave_bannersforfree" />'; $output .= '</form>'; # banners list $output .= '<br><h2 style="border-bottom: 1px dashed #CCCCCC;font-weight: bold;padding-bottom: 10px;">ADS list</h3>'; # getting banners list $banners_list = _bannersforfree_get_banners(); if(!empty($banners_list)){ $output .= '<form action="addonmodules.php?module=bannersforfree" method="post">'; $output .= "<table class='datatable' width='100%' cellspacing='3' cellpadding='3' border='0'>"; $output .= "<tr><th>Delete</th><th>View</th><th>Code</th></tr>"; foreach($banners_list as $banner){ $b_id = $banner['id']; $output .= "<tr>"; $output .= "<td>"; $output .= "<input type='checkbox' value='1' name='deletebanners[$b_id]' />"; $output .= "</td>"; $output .= "<td>"; $output .= "<div style='width:100%;'>".htmlspecialchars_decode($banner['html'])."</div>"; $output .= "</td>"; $output .= "<td>"; $output .= '<textarea style="width:100%; height:80px" name="banners['.$b_id.']">'.$banner['html'].'</textarea>'; $output .= "</td>"; $output .= "</tr>"; } $output .= "</table>"; $output .= "<br><input type='submit' class='btn primary' value='Update' name='msave_bannersforfree' />"; $output .= "</form>"; } else{ $output .= "<p>Empty list</p>"; } $output .= "<br /><hr /><br />"; $output .= '<br><h2 style="border-bottom: 1px dashed #CCCCCC;font-weight: bold;padding-bottom: 10px;">Hosting Plans</h3>'; # Hosting list # Current "need banner" hosting list $output .= "<div style='float:left; width:50%; margin-right:50px'><h3>List of hosting plans that should has a forced ads.</h3>"; $hosting_with_banner_list = _bannersforfree_get_banner_hosting_list(); if(!empty($hosting_with_banner_list)){ $output .= '<form action="addonmodules.php?module=bannersforfree" method="post">'; $output .= "<table class='datatable' width='100%' cellspacing='3' cellpadding='3' border='0'>"; $output .= "<tr><th width='20'>Delete</th><th>Hosting name</th></tr>"; foreach($hosting_with_banner_list as $hosting){ $h_id = $hosting['id']; $output .= "<tr>"; $output .= "<td>"; $output .= "<input type='checkbox' value='1' name='deletehosting[$h_id]' />"; $output .= "</td>"; $output .= "<td>"; $output .= '<a href="configproducts.php?action=edit&id='.$hosting['id'].'">'.$hosting['hosting_name'].'</a>'; $output .= "</td>"; $output .= "</tr>"; } $output .= "</table>"; $output .= '<br><input type="submit" class="btn primary" value="Update" name="msave_bannersforfree" />'; $output .= '</form>'; } else{ $output .= "<p>Empty list</p>"; } $output .= "</div><div style='float:left; width:40%'>"; # Add new hosting to "need banner" list $output .= "<h3>Add new hosting plan</h3>"; $output .= '<form action="addonmodules.php?module=bannersforfree" method="post">'; $hosting_list = _bannersforfree_get_hosting_types_list(); foreach($hosting_list as $key => $hosting_type){ foreach($hosting_with_banner_list as $h_with_banner){ if($hosting_type['id'] == $h_with_banner['hid']){ unset($hosting_list[$key]); break; } } } if(!empty($hosting_list)){ $output .= '<select name="newhosting">'; foreach($hosting_list as $htype){ $output .= "<option value='".$htype['id']."'>".$htype['name']."</>"; } $output .= '</select>'; $output .= '<br /><br />'; $output .= '<input type="submit" class="btn btn btn-success" value="Add" name="msave_bannersforfree" />'; } else{ $output .= "<p>Hosting types list is empty</p>"; } $output .= '</form></div>'; $output .= "<div style='clear:both'><br /></div>"; //_bannersforfree_get_email_template_list $output .= "<br /><hr /><br />"; # Hosting users list $output .= '<h2 style="border-bottom: 1px dashed #CCCCCC;font-weight: bold;padding-bottom: 10px;">Suspended Websites</h2>'; $free_ids = array(); foreach($hosting_with_banner_list as $hosting_free){ $free_ids[] = $hosting_free['hid']; } if(isset($_GET['host-page'])){ $current_host_page = $_GET['host-page']; } else{ $current_host_page = 1; } if(!empty($free_ids)){ $host_list = _bannersforfree_get_hosting_users($free_ids, $current_host_page); if(!empty($host_list)){ $output .= "<table class='datatable' width='100%' cellspacing='3' cellpadding='3' border='0'>"; # paginator logic $total_hosts = _bannersforfree_get_hosting_user_counter( $free_ids ); $total_hosts_pages = (int) ($total_hosts / 10 ); //$left_link = "<a href='addonmodules.php?module=bannersforfree&host-page=".($current_host_page-1)."'>Prev</a>"; if($current_host_page != 1){ $left_link = "<a href='addonmodules.php?module=bannersforfree&host-page=".($current_host_page-1)."'>Prev</a>"; } else{ $left_link = ''; } //$right_link = "<a href='addonmodules.php?module=bannersforfree&host-page=".($current_host_page+1)."'>Next</a>"; if($current_host_page <= $total_hosts_pages){ $right_link = "<a href='addonmodules.php?module=bannersforfree&host-page=".($current_host_page+1)."'>Next</a>"; } else{ $right_link = ''; } $output .= "<tr><th>Domain</th><th>Status</th><th>Suspend until</th></tr>"; foreach($host_list as $host){ $output .= "<tr>"; $output .= "<td align='center'><a href='clientsservices.php?userid=".$host['userid']."&id=".$host['id']."'>".$host['domain']."</a></td>"; $output .= "<td align='center'>".$host['domainstatus']."</td>"; if($host['domainstatus'] == "Suspended" && $host['overidesuspenduntil'] != "0000-00-00"){ $susp_until_value = $host['overidesuspenduntil']; } else{ $susp_until_value = ''; } $output .= "<td align='center'>".$susp_until_value."</td>"; $output .= "</tr>"; } //if(!empty($left_link)) $output .= "<tr><td align='center' colspan='3'>$left_link $right_link</td></tr>"; $output .= "</table>"; } else{ $output .= "<p>Empty list</p>"; } } else{ $output .= "<p>Empty list</p>"; } # Settings Area $current_cron_limit_array = _bannersforfree_get_setting('cron_limit'); $current_cron_limit = $current_cron_limit_array['value']; $mail_tpl_list = _bannersforfree_get_email_template_list(); $current_cron_tpl_array = _bannersforfree_get_setting('cron_email_tpl'); $current_cron_tpl = $current_cron_tpl_array['value']; # Form $output .= "<br /><hr /><br />"; $output .= '<h2 style="border-bottom: 1px dashed #CCCCCC;font-weight: bold;padding-bottom: 10px;">Addon Settings</h2>'; $output .= '<form action="addonmodules.php?module=bannersforfree" method="post">'; # Cron limit $output .= '<lable for="cron-limit">Set users limit per cron:</label><br /><br />'; $output .= '<input id="cron-limit" type="text" name="settings[cron_limit]" value="'.$current_cron_limit.'" /><br /><br />'; # Choosing email template $output .= '<lable for="cron-email-tpl">Choose email template to send to suspended customers:</label><br /><br />'; if(!empty($mail_tpl_list)){ $output .= "<select id='cron-email-tpl' name='settings[cron_email_tpl]'>"; foreach($mail_tpl_list as $tpl){ $selected = ($current_cron_tpl == $tpl['id']) ? "selected" : ""; $output .= "<option $selected value='".$tpl['id']."'>".$tpl['name']."</option>"; } $output .= "</select>"; } else{ $output .= "<p>Empty list</p>"; } # Submit form $output .= '<br /><br /><input type="submit" class="btn btn-success" value="Save" name="msave_bannersforfree" style="float:left; margin-right:10px"/>'; $output .= '</form>'; # Cron link $output .= " <script> $(document).ready(function(){ $('#cron-popup-link').click(function(){ var cron_load_href = $(this).attr('href'); $('#cron-popup').load( cron_load_href ); $('#cron-popup').dialog(); return false; }); }); </script> <div style='display:none' id='cron-popup' title='Cron'> <p>Cron running...</p> </div> "; $output .= "<a id='cron-popup-link' target='_blank' href='../clientarea.php?action=bannerscron'><input type='button' class='btn-info' value='Run CRON' /></a>"; $output .= "<br />"; echo $output; } /** * get free hosting users list counter **/ function _bannersforfree_get_hosting_user_counter($free_package_ids){ $page_size = 30; $ids = join(',', $free_package_ids); $query = "SELECT count(*) as counter FROM `tblhosting` WHERE packageid IN ($ids) ORDER BY `id`"; $db_result = full_query($query); $result_row = array(); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)){ $result_row = $row; return $result_row['counter']; break; } return 0; } /** * get free hosting users list **/ function _bannersforfree_get_hosting_users($free_package_ids, $page_number = 1){ $page_size = 10; $ids = join(',', $free_package_ids); $a = $page_number * $page_size - $page_size; $b = $page_number * $page_size; $query = "SELECT * FROM `tblhosting` WHERE packageid IN ($ids) AND domainstatus!='Cancelled' GROUP BY `domain` ORDER BY `id` DESC LIMIT $a, $page_size"; $db_result = full_query($query); $result_array = array(); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)){ $result_array[] = $row; } return $result_array; } /** * set setting valueby slug **/ function _bannersforfree_set_setting($slug, $value = ''){ $query = "UPDATE `mod_banners_config` SET `value`='".$value."' WHERE `slug` = '".$slug."' LIMIT 1"; return full_query($query); } /** * Get setting value by slug **/ function _bannersforfree_get_setting($slug = ''){ $query = "SELECT * FROM `mod_banners_config` WHERE `slug` = '".$slug."' LIMIT 1"; $db_result = full_query($query); $result = false; while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)){ $result = $row; break; } return $result; } /** * Remove banner **/ function _bannersforfree_remove_banner_hosting($id = 0){ $query = "DELETE FROM `mod_banners_hosting_types` WHERE `id` = '".$id."' LIMIT 1"; return full_query($query); } /** * Add banner hosting **/ function _bannersforfree_add_banner_hosting($id = ''){ $query = "INSERT INTO `mod_banners_hosting_types` VALUES (NULL, '".$id."')"; return full_query($query); } /** * search hosting in "need banner" list by hosting id **/ function _bannersforfree_search_banner_hosting($id=0){ $query = "SELECT * FROM `mod_banners_hosting_types` ORDER BY `id` DESC LIMIT 1"; $db_result = full_query($query); $result_array = array(); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)){ $result_array[] = $row; break; } return $result_array; } /** * get "need banner" hosting types list **/ function _bannersforfree_get_banner_hosting_list(){ $query = "SELECT b.*, h.name as hosting_name FROM `mod_banners_hosting_types` as b LEFT JOIN `tblproducts` h ON b.hid = h.id WHERE h.type='hostingaccount' ORDER BY `id` DESC"; $db_result = full_query($query); $result_array = array(); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)){ $result_array[] = $row; } return $result_array; } /** * get hosting types list **/ function _bannersforfree_get_hosting_types_list(){ $query = "SELECT * FROM `tblproducts` WHERE type='hostingaccount' ORDER BY `id` DESC"; $db_result = full_query($query); $result_array = array(); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)){ $result_array[] = $row; } return $result_array; } /** * Update banner **/ function _bannersforfree_update_banner($id, $html = ''){ $query = "UPDATE `mod_banners_banners` SET `html` = '".$html."' WHERE `id` = '".$id."' "; return full_query($query); } /** * Remove banner **/ function _bannersforfree_remove_banner($id = 0){ $query = "DELETE FROM `mod_banners_banners` WHERE `id` = '".$id."' LIMIT 1"; return full_query($query); } /** * Add banner **/ function _bannersforfree_add_banner($html_code = ''){ $query = "INSERT INTO `mod_banners_banners` VALUES (NULL, '".$html_code."')"; return full_query($query); } /** * Get email template (only general type) **/ function _bannersforfree_get_email_template_list(){ $query = "SELECT * FROM `tblemailtemplates` WHERE `type` = 'general'"; $db_result = full_query($query); $result = array(); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)){ $result[] = $row; } return $result; } /** * Get banners **/ function _bannersforfree_get_banners(){ $query = "SELECT * FROM `mod_banners_banners` ORDER BY `id` DESC"; $db_result = full_query($query); $result_array = array(); while($row = mysql_fetch_array($db_result, MYSQL_ASSOC)){ $result_array[] = $row; } return $result_array; } ?>
  24. Hi, I have a custom create module for my program and I'm wondering how I can have the WHMCS password post to my create module. So if a new user types "test" as their WHMCS password, I would like it to be posted to my create script so they will have the same password in my program. Right now I'm using a randomly generated password and it's confusing users with 2 different passwords. Thanks, Christian
  25. I am trying to modify a template using code that always worked in version 5 and before but doesn't work in 6. This sample from the documentation doesn't work, it crashes. {php} $userid = $this->_tpl_vars['clientsdetails']['userid']; echo 'User ID is '. $userid ; {/php} This code is working now in 5.3.13 but crashes in 6.0 {php} $cldetails=$this->get_template_vars("clientsdetails"); echo 'Users ID is '. $cldetails['userid']; {/php} What am I doing wrong? This is in /templates/mytemplate/clientareaproductdetails.tpl

Important Information

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