Jump to content


Blesta Developers
  • Posts

  • Joined

  • Last visited

  • Days Won


Abdy last won the day on August 4 2020

Abdy had the most liked content!


About Abdy

Profile Information

  • Gender
    Not Telling

Recent Profile Visitors

6,294 profile views
  1. We've already created a task for that CORE-3791
  2. I just tried it and indeed it's a MySQL error. SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F\xA4\xA0' for column 'details' at row 1
  3. Abdy

    Custom Smart Search

    You can change Smart Search to another one, clicking on the magnifying glass icon.
  4. Abdy

    Custom Smart Search

    I think the best way to implement your own custom search is by using events and not a route. To implement it using events you need to register the event in the *_plugin.php file as in the following example: In this example we register the search() function from the AdminMain controller. class SearchPlugin extends Plugin { // ... public function customSearch($event) { $params = $event->getParams(); if (isset($params['options'])) { $params['options'] += [ $params['base_uri'] . 'plugin/search/admin_main/search/' => 'Custom Search' ]; } $event->setParams($params); } public function getEvents() { return [ [ 'event' => 'Navigation.getSearchOptions', 'callback' => ['this', 'customSearch'] ] ]; } } Now we need to create the AdminMain controller and implement the search() method, which will perform the search: <?php class AdminMain extends AppController { public function preAction() { parent::preAction(); $this->requireLogin(); // Load the languages, models, components // and helpers needed by this controller. } public function index() { // There is nothing to see here $this->redirect($this->base_uri); } public function search() { // Restore structure view location of the admin portal $this->structure->setDefaultView(APPDIR); $this->structure->setView(null, $this->orig_structure_view); // Set page title $this->structure->set('page_title', 'My Custom Search'); // Implement your amazing code here to do the search! if ($this->isAjax()) { return $this->renderAjaxWidgetIfAsync( isset($this->post['search']) ? null : isset($this->get['search']) ); } } }
  5. Abdy


    You can add custom css and js files in both header and footer by adding them in the /app/views/client/bootstrap/structure.pdt file.
  6. I don't understand what is exactly the issue, could you please elaborate a little more on what the problem is?
  7. I think it is not necessary to use events for what you are looking for, from the addService() function you can add a condition that if the configurable option exists, a support ticket is created. The addService() function is automatically executed by the cron task when the invoice related to the service has been paid in full. Here's a quick example, assuming that the configurable option for the extra service is named "migration_service": public function addService( $package, array $vars = null, $parent_package = null, $parent_service = null, $status = 'pending' ) { ... if (isset($vars['configoptions']['migration_service'])) { // Create support ticket Loader::loadModels($this, ['SupportManager.SupportManagerTickets']); $ticket = $this->SupportManagerTickets->add([ 'department_id' => 1, 'staff_id' => 1, 'client_id' => 1, 'summary' => 'Subject', 'priority' => 'critical', 'status' => 'open' ]); // Add reply if (!is_null($ticket)) { $this->SupportManagerTickets->addReply($ticket, [ 'client_id' => 1, 'contact_id' => 1, 'type' => 'reply', 'details' => 'Reply text' ]); } } ... }
  8. Try using Loader::loadModels($this, ['SupportManager.SupportManagerTickets']); This is due to $this->uses() is not accessible from a module.
  9. Abdy


    You can use add-ons instead of configurable options. Add-ons can have different terms than the main package. Here's a quick example, I created an add-on package for a one time cost of $200. This package belongs to a package group of the Add-on type named Additional Services. I assigned the Hosting package group as a parent of the Additional Services package group. At the moment of adding a new service, regardless of the term of the parent package, the add-on "Migration Service" can be added, even though the parent package is monthly and the add-on is one time.
  10. You can change the price of a service for each user individually, modifying the service and overriding the price with the new price for that user in specific.
  11. The "Log In" definition can be located on /language/xx_xx/app_controller.php
  12. This usually happens when some definitions are missing from the language pack in use, Blesta does not come by default with a dropdown called "Billing" in the navigation bar. Maybe this one is being added by a third party plugin? If you are using a third party plugin, you may need to update the language files of that plugin. However, you can find the language definitions from the navigation bar on the /language/xx_xx/navigation.php file, where xx_xx is the language pack you are using.
  13. Abdy

    too many email sending

    All these emails are being sent duplicate to the same email address?
  14. Check if the automation tasks are enabled for the Mass Mailer plugin on Settings > Company > Automation in the Plugin tab.
  15. The navigation menu can be found on /app/views/client/bootstrap/structure.pdt, in this file is available the $logged_in variable, which allows you to know if a user has logged in or not. <?php if ($this->Html->ifSet($logged_in)) { ?> <!-- The user is logged in: navmenu1 --> <?php } else { ?> <!-- The user is not logged in: navmenu2 --> <?php } ?>
  • Create New...