Jump to content

Paul

Blesta Developers
  • Posts

    6,683
  • Joined

  • Last visited

  • Days Won

    838

Everything posted by Paul

  1. Anyone that has a large number of invoices should run the upgrade via CLI. The data in the table is required to reliably process renewals through a module. Not many modules support renewals, so for some people it might not be a big deal to skip populating the table (would require a modification to the migrator). If the table isn't populated though, and you have say a domain name for an invoice that was generated before the upgrade, then paid after the upgrade, it would not be renewed through the module. Hopefully this doesn't turn into a big issue. It may have been better for the cron to handle initial population.
  2. The table is to resolve CORE-2167. If you run into the issue again, try upgrading via CLI.
  3. Paul

    Release 4.1.1

    Version 4.1.1 is now available. Please see the announcement. This is a patch release that corrects issues with 4.1.0. Be sure to run /admin/upgrade after uploading the patch or full versions. NOTE! If you have a large number of invoices, it may be necessary to run the upgrade via CLI as the upgrade process can take some time while a new table is populated. To upgrade via CLI, from your Blesta directory run: php ./index.php admin/upgrade Patching Blesta See Patching Blesta in the User Manual for instructions. Release Notes See Blesta Core - Version 4.1.1. See all Change Logs.
  4. Modify in what way? The offline payment module allows you to add information that the customer needs to make payment. It will work for a variety of cases.
  5. How popular is the gateway, and what region/currency is it for? You could create a feature request here https://requests.blesta.com, though I've never heard of this one so demand may not be high enough right now. Contacting the developer would probably be a good idea, they may be willing to port it to Blesta.
  6. It is most likely related to your enforcement of TLS 1.2, whether the issue is with Swiftmailer itself or your PHP & OpenSSL I don't know. I found this though https://github.com/swiftmailer/swiftmailer/issues/598 which seems to indicate (look at the comments) that Swiftmailer does not implement its own crypto but relies on your PHP.
  7. I don't know which protocols & ciphers it is or isn't compatible with, I would have to look into it and Monday mornings are really busy. I threw that out as a possibility.
  8. Blesta uses the Swiftmailer library for outgoing mail. None of that is encoded. The only thing I can think of is that if you have a strict set of CipherSuites and Protocols that Swiftmailer may not be able to communicate with them. For example, if you're running a web server that only allows TLS 1.2 with a specific set of CipherSuites, even a browser that's capable of communicating with TLS 1.2 may not find a cipher they have in common... or, the browser may only be able to communicate with TLS 1.0/1.1. The same rules would apply for mail servers.
  9. Paul

    Webhostingtalk

    It seems like WHT is dropping in overall visitors and some of the others are gaining. Here are a few I check regularly: lowendtalk.com vpsboard.com hostingdiscussion.com forumweb.hosting
  10. Do you know if it's just a different API endpoint and/or currencies? Very odd.
  11. Just FYI, PayUmoney was released in this thread and is now included with Blesta 4.1.
  12. @Kronz An ISPConfig module is now available at Please test and let us know what you think.
  13. A new early release ISPConfig module is available. To install, download the attached ispconfig.zip and unzip the file. Upload the ispconfig directory to ~/components/modules/ and go to Settings > Company > Modules to install it. Please give it a spin and give us your feedback! Here's a sample welcome email you can use for your Package:
  14. public function unsuspendService($package, $service, $parent_package = null, $parent_service = null) { // unsuspendacct / unsuspendreseller ($package->meta->type == "reseller") if (($row = $this->getModuleRow())) { $api = $this->getApi($row->meta->host_name, $row->meta->user_name, $row->meta->key, $row->meta->use_ssl); $service_fields = $this->serviceFieldsToObject($service->fields); if ($package->meta->type == 'reseller') { $this->log( $row->meta->host_name . '|unsuspendreseller', serialize($service_fields->cpanel_username), 'input', true ); $this->parseResponse($api->unsuspendreseller($service_fields->cpanel_username)); } else { $this->log( $row->meta->host_name . '|unsuspendacct', serialize($service_fields->cpanel_username), 'input', true ); $to = 'nobody@example.com'; $subject = 'the subject'; $message = $service_fields->cpanel_username; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n"; mail($to, $subject, $message, $headers); return; } } return null; }
  15. public function suspendService($package, $service, $parent_package = null, $parent_service = null) { // suspendacct / suspendreseller ($package->meta->type == "reseller") $row = $this->getModuleRow(); if ($row) { $api = $this->getApi($row->meta->host_name, $row->meta->user_name, $row->meta->key, $row->meta->use_ssl); $service_fields = $this->serviceFieldsToObject($service->fields); if ($package->meta->type == 'reseller') { $this->log( $row->meta->host_name . '|suspendreseller', serialize($service_fields->cpanel_username), 'input', true ); $this->parseResponse($api->suspendreseller($service_fields->cpanel_username)); } else { $this->log( $row->meta->host_name . '|suspendacct', serialize($service_fields->cpanel_username), 'input', true ); $to = 'nobody@example.com'; $subject = 'the subject'; $message = $service_fields->cpanel_username; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n"; mail($to, $subject, $message, $headers); return; } } return null; } maybe
  16. In /components/modules/cpanel/cpanel.php look for the suspend method. It'll look like this: public function suspendService($package, $service, $parent_package = null, $parent_service = null) { // suspendacct / suspendreseller ($package->meta->type == "reseller") $row = $this->getModuleRow(); if ($row) { $api = $this->getApi($row->meta->host_name, $row->meta->user_name, $row->meta->key, $row->meta->use_ssl); $service_fields = $this->serviceFieldsToObject($service->fields); if ($package->meta->type == 'reseller') { $this->log( $row->meta->host_name . '|suspendreseller', serialize($service_fields->cpanel_username), 'input', true ); $this->parseResponse($api->suspendreseller($service_fields->cpanel_username)); } else { $this->log( $row->meta->host_name . '|suspendacct', serialize($service_fields->cpanel_username), 'input', true ); $this->parseResponse($api->suspendacct($service_fields->cpanel_username)); } } return null; } Change this so it doesn't try to suspend with cpanel public function suspendService($package, $service, $parent_package = null, $parent_service = null) { return; } Now, if you want to send an email to yourself, send the email before returning. Here's a very dirty way of doing it. I have not tested it. public function suspendService($package, $service, $parent_package = null, $parent_service = null) { $service_fields = $this->serviceFieldsToObject($service->fields); $to = 'nobody@example.com'; $subject = 'the subject'; $message = $service_fields->cpanel_username; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n"; mail($to, $subject, $message, $headers); return; }
  17. Package/Product based revenue reporting is coming
  18. Paul

    PHP7 Blank Page

    Yes, the /config/blesta.php contains a System.key that MUST match the database. If you move the database, you MUST move the System.key with it that is contained in the config file.
  19. Paul

    CSV Importer

    Just a note.. if you have trouble importing and have quote escaped strings, try removing the quotes and any commas in the field. We'll be working on a fix for this.
  20. How often do you come across this issue? As you mentioned, it can take some time to provision a service. The status in not updated until it is completed. I think this would necessitate, potentially, a new status for services that are being activated such that when the cron STARTS to activate a pending service, its status is changed to this new status, and when the cron finishes activating a service, it's status is changed to active. In this way, a service that is in the process of being activated would not be pending, and we could check when manually activating that it's in a status of pending before proceeding. I'm not sure what other implications this has, other than the possibility that a service "disappears" should the cron crash in the middle of provisioning.
  21. Here's a custom report for exporting client data that matches a specific list of comma separated package ID's. This is useful for exporting client data, and importing with the Blesta CSV importer into a new Blesta install. Does not import actual services/packages, which would have to be moved manually. To create the custom report, go to Billing > Reports, and click on the "Customize" tab, then the [+] button. 1. Give the report a name, like "Client Export from Package IDs" 2. Enter the following query into the Query text area: SELECT `contacts`.`first_name`, `contacts`.`last_name`, `contacts`.`company`, `contacts`.`title`, `contacts`.`address1`, `contacts`.`address2`, `contacts`.`city`, `contacts`.`country`, `contacts`.`state`, `contacts`.`zip`, `contacts`.`email`, `users`.`username` FROM `packages` INNER JOIN `package_pricing` ON `package_pricing`.`package_id` = `packages`.`id` INNER JOIN `services` ON `services`.`pricing_id` = `package_pricing`.`id` AND `services`.`status` = 'active' INNER JOIN `clients` ON `clients`.`id` = `services`.`client_id` INNER JOIN `users` ON `users`.`id` = `clients`.`user_id` INNER JOIN `contacts` ON `contacts`.`client_id` = `clients`.`id` AND `contacts`.`contact_type` = 'primary' WHERE `packages`.`id` IN (:package_ids) GROUP BY `clients`.`id`; 3. Create a field with a Label of "Package Ids", Name of "package_ids", Type of "Text", and Required: "Yes" 4. Save. The report will now be available under the "Generate" tab. When generating the report, enter package ids as a comma separated list (e.g. 23,24,81). NOTE! The Package ID is the internal ID, not the Package ID listed for the package listing. Hover over the Edit link, or click it to observe the actual ID of the package in the URL.
  22. You cannot do a fresh install and then import your database. The encryption keys in your database will not match the system key in your config file (/config/blesta.php) and you will permanently break your installation. You can re-upload all of the files for 4.1.0, but you must keep the key in your config, and it must match your database.
  23. I'm sure there will be an official announcement soon, but LC isn't going anywhere.
  24. Just to be clear, this happens if you are managing the pending service where the "Activate" button appears when the service is activated by the cron, and then you click "Activate", it will create a second service? If that's the case, I suppose when clicking the "Activate" button, we could check that the service is still in a pending state.
×
×
  • Create New...