Here is another guest post from Shijin Krishna from BHEA Technologies.

When a user logs into Sugar 7, an OAuth access token (with a 1 hour timeout by default) and a refresh token (with a 2 week timeout by default) are returned. When the access token expires, Sugar will automatically retrieve another access token as long as the refresh token is valid. This allows a user to use a Sugar browser tab for days on end without having to log back in.

Automated notification requests are made to the server on the user’s behalf at a default interval of every 5 minutes. These requests will allow the current session to remain active without actual user input. So tracking user activity by adjusting access token and refresh token expiry time or tracking network activity alone is not a good idea.

In this blog we are going to explore a way to track a user’s true idle time based on actual user interface activity. For example, one or more of clicks, typing, mouse movements etc. To track a user’s idle time we will use the JQuery IdleTimeout plugin.

Continue Reading…

Important security changes in Sugar 7.8

As we near the release of Sugar 7.8, we wanted to update the Sugar Developer community on a couple of important security changes that are coming in this release.

Continue Reading…

Sugar’s Single Page Architecture

Sugar relies on a single page architecture (SPA) for the Sidecar framework. But when a user navigates across the Sugar application (for example, when switching to another Sugar module), while the page is not refreshed, you will find that the majority of the HTML on the page is still re-rendered based upon the newly selected layout. This is done to not only change the style or configuration of the view (ex. List View → Record View) but also to update the context and configuration for the dashboard panel.

But not everything changes – the footer and header of the application remain fixed so they can serve as navigational anchors for Sugar users. This is an important use case but there are certainly others.

Telephony integration scenarios

A common set of integrations that are built for Sugar involve integrating a phone system for use by customer service organizations. This can vary from simple “click to dial” softphone functionality to full blown multi-channel call center capability where an agent handles phone, SMS, and e-mail inquiries at the same time.

A typical in-bound call process follows:

Continue Reading…

Sugar REST PHP Client

A new open source library for working with Sugar 7’s powerful REST API has just been published! You can view the library in our GitHub account here: https://github.com/sugarcrm/rest-php-client

Full instructions for installation, usage, current included API Endpoints, and ways to contribute can all be found in the GitHub Wiki on the repository.

Who should use it?

The Sugar REST PHP Client was built initially to make working with Sugar instances easier for some of our internal tools. I wanted to provide a quick, easy, and object oriented, way to access Sugar 7’s REST API that could be used by all PHP developers. Any developer who is developing PHP applications that integrate with Sugar 7 should be interested in using the new library. The simplified architecture takes away the hassle of setting up and managing Curl connections, and allows the developer to focus on what matters most, which is working with the data in their Sugar application.

Continue Reading…

This post originally appeared on the SynoLab blog hosted by Synolia, an Elite SugarCRM Partner. This post describes how to extend the new Sugar CLI framework to add commands that allow Sugar Administrators to monitor the Sugar e-mail queue.

Since the Sugar 7.7.1.0 version, SugarCRM introduced a Sugar CLI tool based on Symfony Console. This Sugar CLI tool is under beta version at this moment (August 2016) and can be changed in the future.

We will see in this article how to use this new Sugar CLI to add a command which provides some statistics from the Email Manager Queue. We want to display how many emails by campaign by module are waiting to be sent.

The first step is to define the Command itself

To perform this operation we implementSugarcrm\Sugarcrm\Console\CommandRegistry\Mode\InstanceModeInterface because our command must be executed only on an installed Sugar instance. The only required things to do is to provide the command name, the description, and the help text on the configure() method and then to implement our logic in the execute() method. We are using a SugarQuery to retrieve the data and display the result on a table. We can imagine externalizing this part and using it in an API and creating unit tests.


//File: custom/Synolia/EmailMan/Console/Command/ListQueueCommand.php
namespace Synolia\EmailMan\Console\Command;

use Sugarcrm\Sugarcrm\Console\CommandRegistry\Mode\InstanceModeInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Helper\TableSeparator;

/**
 *
 * Email Manager Queue statistics
 *
 */
class ListQueueCommand extends Command implements InstanceModeInterface
{

    /**
     * {inheritdoc}
     */
    protected function configure()
    {
        $this
            ->setName('synolia:emailman:queue')
            ->setDescription('Show Email Manager Queue statistics')
            ->setHelp('This command displays statistics from Email Manager Queue.')
        ;
    }

    /**
     * {inheritdoc}
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $result = $this->getSugarQuery()->execute();

        $nbEmailsToSent = 0;

        $table = new Table($output);
        $table->setHeaders(array('Campaign', 'Module', 'Count'));
        foreach ($result as $row) {
            $table->addRow(array($row['name'], $row['related_type'], $row['record_count']));
            $nbEmailsToSent += $row['record_count'];
        }
        $table->addRow(new TableSeparator());
        $table->addRow(array('# Emails to send', '', $nbEmailsToSent));
        $table->render();
    }

    /**
     * @return \SugarQuery
     * @throws \SugarQueryException
     */
    protected function getSugarQuery()
    {
        $sq = new \SugarQuery();
        $sq->from(\BeanFactory::newBean('EmailMan'))
            ->joinTable('campaigns', array(
                    'alias' => 'campaigns',
                    'joinType' => 'LEFT',
                    'linkingTable' => true)
            )->on()->equalsField('campaigns.id', 'emailman.campaign_id');
        $sq->select(array('campaigns.name', 'emailman.related_type'))->setCountQuery();
        $sq->groupBy('campaigns.name')
            ->groupBy('emailman.related_type');

        return $sq;
    }
}

Declare the Command

Now we need to make this command available by using the application/Ext/Console framework:


//File: custom/Extension/application/Ext/Console/SynoliaEmailManListQueueCommand.php
Sugarcrm\Sugarcrm\Console\CommandRegistry\CommandRegistry::getInstance()
->addCommand(new Synolia\EmailMan\Console\Command\ListQueueCommand());

Add our namespace

To use our own namespace we can follow one of the way described in our previous article by using theapplication/Ext/Utils framework:


//File: custom/Extension/application/Ext/Utils/SynoliaEmailManConsoleCommandNamespace.php
SugarAutoLoader::addNamespace('Synolia\\EmailMan\\Console\\Command', 'custom/Synolia/EmailMan/Console/Command', 'psr4');

Perform a Quick Repair and Rebuild et voilà!

sugarcliemailmanqueue

Thanks to Jelle Vink about his presentation of this new Sugar CLI tools at UnCon 2016!

You can find more information about Sugar CLI on the Sugar Developer Guide.

We are half way through the SugarCRM Solution Architect Webinar Series and we have had a great turn-out so far with over 400 people coming to our first 4 webinars. Even if you miss the live webinars, you can still go back and watch the recordings on your own time.

For more information on what you can expect, you should read our recent blog post on the webinar series.

Accessing the Recordings

Visit Sugar University’s webinar library for all previous recordings. Recordings are posted usually one or two business days after the live event.

Webinars with recordings are as follows:

1. (Sep 6th) – Introduction to Solution Architecture for Sugar & CRM Project Fundamentals
2. (Sep 7th) – The Sugar Platform
3. (Sep 20th) – Design
4. (Sep 21st) – Integration

Continue Reading…

Sugar Developers now have a new tool for building upgrade safe mobile customizations that address most branding, theming, and mobile security requirements.

Introducing Sugar MACS

Introducing the Sugar Mobile Application Configurator Service (Sugar MACS)! This tool allows Sugar Developers building solutions for Sugar Enterprise customers to create and distribute custom-branded versions of the SugarCRM Mobile app.

Many of you have seen earlier previews of Sugar MACS at SugarCon and UnCon.

Continue Reading…