/** * Color Calculations class for Kirki * Initially built for the Shoestrap-3 theme and then tweaked for Kirki. * * @package Kirki * @category Core * @author Themeum * @copyright Copyright (c) 2023, Themeum * @license https://opensource.org/licenses/MIT * @since 1.0 */ // phpcs:ignoreFile // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Helper class for color manipulation. */ final class Kirki_Color extends ariColor { /** * A proxy for the sanitize_color method. * * @param string|array $color The color. * @param bool $hash Whether we want to include a hash (#) at the beginning or not. * @return string The sanitized hex color. */ public static function sanitize_hex( $color = '#FFFFFF', $hash = true ) { if ( ! $hash ) { return ltrim( self::sanitize_color( $color, 'hex' ), '#' ); } return self::sanitize_color( $color, 'hex' ); } /** * A proxy the sanitize_color method. * * @static * @access public * @param string $color The color. * @return string */ public static function sanitize_rgba( $color ) { return self::sanitize_color( $color, 'rgba' ); } /** * Sanitize colors. * Determine if the current value is a hex or an rgba color and call the appropriate method. * * @static * @access public * @since 0.8.5 * @param string|array $color The color. * @param string $mode The mode to be used. * @return string */ public static function sanitize_color( $color = '', $mode = 'auto' ) { if ( is_string( $color ) && 'transparent' == trim( $color ) ) { return 'transparent'; } $obj = ariColor::newColor( $color ); if ( 'auto' == $mode ) { $mode = $obj->mode; } return $obj->toCSS( $mode ); } /** * Gets the rgb value of a color. * * @static * @access public * @param string $color The color. * @param boolean $implode Whether we want to implode the values or not. * @return array|string */ public static function get_rgb( $color, $implode = false ) { $obj = ariColor::newColor( $color ); if ( $implode ) { return $obj->toCSS( 'rgb' ); } return array( $obj->red, $obj->green, $obj->blue ); } /** * A proxy for the sanitize_color method. * * @static * @access public * @param string|array $color The color to convert. * @return string The hex value of the color. */ public static function rgba2hex( $color ) { return self::sanitize_color( $color, 'hex' ); } /** * Get the alpha channel from an rgba color. * * @static * @access public * @param string $color The rgba color formatted like rgba(r,g,b,a). * @return int|float The alpha value of the color. */ public static function get_alpha_from_rgba( $color ) { $obj = ariColor::newColor( $color ); return $obj->alpha; } /** * Gets the rgba value of the $color. * * @static * @access public * @param string $color The hex value of a color. * @param int|float $alpha Opacity level (0-1). * @return string */ public static function get_rgba( $color = '#fff', $alpha = 1 ) { $obj = ariColor::newColor( $color ); if ( 1 == $alpha ) { return $obj->toCSS( 'rgba' ); } // Make sure that opacity is properly formatted. // Converts 1-100 values to 0-1. if ( $alpha > 1 || $alpha < -1 ) { // Divide by 100. $alpha /= 100; } // Get absolute value. $alpha = abs( $alpha ); // Max 1. if ( 1 < $alpha ) { $alpha = 1; } $new_obj = $obj->getNew( 'alpha', $alpha ); return $new_obj->toCSS( 'rgba' ); } /** * Strips the alpha value from an RGBA color string. * * @static * @access public * @param string $color The RGBA color string. * @return string The corresponding RGB string. */ public static function rgba_to_rgb( $color ) { $obj = ariColor::newColor( $color ); return $obj->toCSS( 'rgb' ); } /** * Gets the brightness of the $hex color. * * @static * @access public * @param string $hex The hex value of a color. * @return int Value between 0 and 255. */ public static function get_brightness( $hex ) { $hex = self::sanitize_hex( $hex, false ); // Returns brightness value from 0 to 255. return intval( ( ( hexdec( substr( $hex, 0, 2 ) ) * 299 ) + ( hexdec( substr( $hex, 2, 2 ) ) * 587 ) + ( hexdec( substr( $hex, 4, 2 ) ) * 114 ) ) / 1000 ); } /** * Adjusts brightness of the $hex color. * * @static * @access public * @param string $hex The hex value of a color. * @param integer $steps Should be between -255 and 255. Negative = darker, positive = lighter. * @return string Returns hex color. */ public static function adjust_brightness( $hex, $steps ) { $hex = self::sanitize_hex( $hex, false ); $steps = max( -255, min( 255, $steps ) ); // Adjust number of steps and keep it inside 0 to 255. $red = max( 0, min( 255, hexdec( substr( $hex, 0, 2 ) ) + $steps ) ); $green = max( 0, min( 255, hexdec( substr( $hex, 2, 2 ) ) + $steps ) ); $blue = max( 0, min( 255, hexdec( substr( $hex, 4, 2 ) ) + $steps ) ); $red_hex = str_pad( dechex( $red ), 2, '0', STR_PAD_LEFT ); $green_hex = str_pad( dechex( $green ), 2, '0', STR_PAD_LEFT ); $blue_hex = str_pad( dechex( $blue ), 2, '0', STR_PAD_LEFT ); return self::sanitize_hex( $red_hex . $green_hex . $blue_hex ); } /** * Mixes 2 hex colors. * The "percentage" variable is the percent of the first color. * to be used it the mix. default is 50 (equal mix). * * @static * @access public * @param string|false $hex1 Color. * @param string|false $hex2 Color. * @param int $percentage A value between 0 and 100. * @return string Returns hex color. */ public static function mix_colors( $hex1, $hex2, $percentage ) { $hex1 = self::sanitize_hex( $hex1, false ); $hex2 = self::sanitize_hex( $hex2, false ); $red = ( $percentage * hexdec( substr( $hex1, 0, 2 ) ) + ( 100 - $percentage ) * hexdec( substr( $hex2, 0, 2 ) ) ) / 100; $green = ( $percentage * hexdec( substr( $hex1, 2, 2 ) ) + ( 100 - $percentage ) * hexdec( substr( $hex2, 2, 2 ) ) ) / 100; $blue = ( $percentage * hexdec( substr( $hex1, 4, 2 ) ) + ( 100 - $percentage ) * hexdec( substr( $hex2, 4, 2 ) ) ) / 100; $red_hex = str_pad( dechex( $red ), 2, '0', STR_PAD_LEFT ); $green_hex = str_pad( dechex( $green ), 2, '0', STR_PAD_LEFT ); $blue_hex = str_pad( dechex( $blue ), 2, '0', STR_PAD_LEFT ); return self::sanitize_hex( $red_hex . $green_hex . $blue_hex ); } /** * Convert hex color to hsv. * * @static * @access public * @param string $hex The hex value of color 1. * @return array Returns array( 'h', 's', 'v' ). */ public static function hex_to_hsv( $hex ) { $rgb = (array) (array) self::get_rgb( self::sanitize_hex( $hex, false ) ); return self::rgb_to_hsv( $rgb ); } /** * Convert hex color to hsv. * * @static * @access public * @param string $color The rgb color to convert array( 'r', 'g', 'b' ). * @return array Returns array( 'h', 's', 'v' ). */ public static function rgb_to_hsv( $color = array() ) { $var_r = ( $color[0] / 255 ); $var_g = ( $color[1] / 255 ); $var_b = ( $color[2] / 255 ); $var_min = min( $var_r, $var_g, $var_b ); $var_max = max( $var_r, $var_g, $var_b ); $del_max = $var_max - $var_min; $h = 0; $s = 0; $v = $var_max; if ( 0 != $del_max ) { $s = $del_max / $var_max; $del_r = ( ( ( $var_max - $var_r ) / 6 ) + ( $del_max / 2 ) ) / $del_max; $del_g = ( ( ( $var_max - $var_g ) / 6 ) + ( $del_max / 2 ) ) / $del_max; $del_b = ( ( ( $var_max - $var_b ) / 6 ) + ( $del_max / 2 ) ) / $del_max; if ( $var_r == $var_max ) { $h = $del_b - $del_g; } elseif ( $var_g == $var_max ) { $h = ( 1 / 3 ) + $del_r - $del_b; } elseif ( $var_b == $var_max ) { $h = ( 2 / 3 ) + $del_g - $del_r; } if ( $h < 0 ) { $h++; } if ( $h > 1 ) { $h--; } } return array( 'h' => round( $h, 2 ), 's' => round( $s, 2 ), 'v' => round( $v, 2 ), ); } /** * This is a very simple algorithm that works by summing up the differences between the three color components red, green and blue. * A value higher than 500 is recommended for good readability. * * @static * @access public * @param string $color_1 The 1st color. * @param string $color_2 The 2nd color. * @return string */ public static function color_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) { $color_1 = self::sanitize_hex( $color_1, false ); $color_2 = self::sanitize_hex( $color_2, false ); $color_1_rgb = self::get_rgb( $color_1 ); $color_2_rgb = self::get_rgb( $color_2 ); $r_diff = max( $color_1_rgb[0], $color_2_rgb[0] ) - min( $color_1_rgb[0], $color_2_rgb[0] ); $g_diff = max( $color_1_rgb[1], $color_2_rgb[1] ) - min( $color_1_rgb[1], $color_2_rgb[1] ); $b_diff = max( $color_1_rgb[2], $color_2_rgb[2] ) - min( $color_1_rgb[2], $color_2_rgb[2] ); $color_diff = $r_diff + $g_diff + $b_diff; return $color_diff; } /** * This function tries to compare the brightness of the colors. * A return value of more than 125 is recommended. * Combining it with the color_difference function above might make sense. * * @static * @access public * @param string $color_1 The 1st color. * @param string $color_2 The 2nd color. * @return string */ public static function brightness_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) { $color_1 = self::sanitize_hex( $color_1, false ); $color_2 = self::sanitize_hex( $color_2, false ); $color_1_rgb = self::get_rgb( $color_1 ); $color_2_rgb = self::get_rgb( $color_2 ); $br_1 = ( 299 * $color_1_rgb[0] + 587 * $color_1_rgb[1] + 114 * $color_1_rgb[2] ) / 1000; $br_2 = ( 299 * $color_2_rgb[0] + 587 * $color_2_rgb[1] + 114 * $color_2_rgb[2] ) / 1000; return intval( abs( $br_1 - $br_2 ) ); } /** * Uses the luminosity to calculate the difference between the given colors. * The returned value should be bigger than 5 for best readability. * * @static * @access public * @param string $color_1 The 1st color. * @param string $color_2 The 2nd color. * @return string */ public static function lumosity_difference( $color_1 = '#ffffff', $color_2 = '#000000' ) { $color_1 = self::sanitize_hex( $color_1, false ); $color_2 = self::sanitize_hex( $color_2, false ); $color_1_rgb = self::get_rgb( $color_1 ); $color_2_rgb = self::get_rgb( $color_2 ); $l1 = 0.2126 * pow( $color_1_rgb[0] / 255, 2.2 ) + 0.7152 * pow( $color_1_rgb[1] / 255, 2.2 ) + 0.0722 * pow( $color_1_rgb[2] / 255, 2.2 ); $l2 = 0.2126 * pow( $color_2_rgb[0] / 255, 2.2 ) + 0.7152 * pow( $color_2_rgb[1] / 255, 2.2 ) + 0.0722 * pow( $color_2_rgb[2] / 255, 2.2 ); $lum_diff = ( $l1 > $l2 ) ? ( $l1 + 0.05 ) / ( $l2 + 0.05 ) : ( $l2 + 0.05 ) / ( $l1 + 0.05 ); return round( $lum_diff, 2 ); } } What Are the Core Technical Concepts of Salesforce CRM

What Are the Core Technical Concepts of Salesforce CRM for Beginners?

What-Are-the-Core-Technical-Concepts-of-Salesforce-CRM-for-Beginners

Starting a career in CRM can feel overwhelming when you first hear terms like objects, automation, workflows, and cloud platforms. Understanding the core technical concepts of Salesforce CRM for beginners is the first step toward building real confidence in this field. Many learners begin their journey through Salesforce Training in Kanchipuram to gain structured knowledge and practical exposure. With the right foundation, you not only understand how the platform works but also position yourself for roles in administration, development, and consulting.

Understanding the Cloud-Based CRM Architecture

At its core, Salesforce operates on a cloud-based architecture. This means you do not install heavy software on your computer. Instead, everything runs securely on remote servers and is accessed through a web browser. For beginners, this concept is important because it explains why updates, security patches, and new features happen automatically.

The platform follows a multi-tenant architecture, where multiple organizations share the same infrastructure while keeping data securely separated. This structure ensures scalability, reliability, and cost efficiency. Understanding this architecture helps you appreciate how businesses of all sizes rely on the system without worrying about server maintenance or downtime.

Exploring Standard and Custom Objects

Data organization is one of the most essential concepts to understand. In Salesforce, information is stored in objects, which are similar to database tables. Standard objects such as Accounts, Contacts, Leads, and Opportunities are already available to manage common business processes.

Custom objects allow companies to create structures tailored to their specific needs. For example, a training institute may create a custom object to track batches or student enrollments. Each object contains fields that store specific details. Learning how objects and fields work together is fundamental because almost every configuration task depends on this knowledge.

Fields, Data Types, and Relationships

Fields define what kind of information you store within an object. They can hold text, numbers, dates, picklist values, or even calculated formulas. Choosing the right data type ensures accurate reporting and better automation.

Equally important are relationships between objects. Relationships connect data logically, such as linking a Contact to an Account or an Opportunity to a Lead. There are lookup relationships and master-detail relationships, each serving different purposes. Understanding how relationships work allows beginners to design meaningful data models that reflect real business processes and avoid confusion later.

User Interface and Page Layout Customization

The user interface determines how users interact with the system daily. Salesforce provides tools to customize page layouts, record types, and tabs so that each department sees relevant information. For example, a sales team might need different fields than a support team.

Learning to modify page layouts without writing code is empowering for beginners. It shows how flexible the platform is and how business requirements can be implemented quickly. Many learners build these skills through structured programs like Salesforce Training, where hands-on configuration practice strengthens their understanding of system usability and business alignment.

Roles, Profiles, and Permission Sets

Security is a major technical concept that beginners must understand early. Salesforce uses roles, profiles, and permission sets to control access to data and features. Profiles define what users can do, such as creating or editing records. Roles determine data visibility within the organizational hierarchy.

Permission sets provide additional access without changing the user’s main profile. This layered security model ensures that sensitive data remains protected while enabling collaboration. By mastering this structure, beginners learn how organizations maintain data integrity and compliance while supporting smooth workflows across departments.

Automation Tools and Business Logic

One of the most powerful aspects of Salesforce is automation. Instead of manually updating records or sending reminders, businesses can automate processes using tools like Flow and approval processes. Automation reduces errors, saves time, and ensures consistency.

Flows allow you to create logic-based actions triggered by user input or system events. For example, when a lead is converted, the system can automatically assign tasks or send notifications. Understanding automation concepts is crucial for anyone aiming to move beyond basic administration into more advanced roles. It demonstrates how technology supports efficiency and strategic decision-making.

Reports and Dashboards for Data Insights

Data is only valuable when you can interpret it. Salesforce provides reporting tools that allow users to analyze performance metrics, track sales pipelines, and measure campaign success. Reports can be filtered, grouped, and summarized to generate meaningful insights.

Dashboards visually display these reports through charts and graphs. For beginners, learning to build reports builds analytical thinking. It also highlights how CRM systems directly influence business growth. When you understand reporting, you begin to see how decisions are backed by real-time data rather than assumptions.

Introduction to Apex and Declarative vs Programmatic Development

While many configurations can be done without coding, Salesforce also supports programmatic development through Apex and Visualforce. Beginners should understand the difference between declarative tools and coding-based customization.

Declarative development uses point-and-click features to create functionality. Programmatic development involves writing code for complex requirements. Knowing when to use each approach is an important technical skill. In competitive job markets, especially after completi at FITA Academy earners often explore both areas to expand career opportunities and demonstrate technical adaptability.

Integration and APIs

Modern businesses rarely use a single system. Salesforce integrates with external applications using APIs. APIs allow different software systems to communicate and exchange data securely. For example, a company might connect its CRM with accounting software or marketing tools.

Understanding integration concepts prepares beginners for real-world scenarios. Even if you are not building integrations yourself, knowing how data flows between systems helps you troubleshoot issues and collaborate effectively with technical teams. This knowledge adds depth to your profile and increases your value within an organization.

Data Management and Migration

Managing data correctly ensures system reliability. Salesforce provides tools for importing, exporting, and updating records. Data Loader and import wizards help move information from spreadsheets into the system. Maintaining data quality through validation rules and duplicate management is equally important.

For beginners, learning data management concepts builds responsibility and attention to detail. Clean data improves reporting accuracy and automation performance. In professional environments, data accuracy directly impacts customer relationships and business credibility.

Understanding Sandboxes and Deployment

Before implementing changes in a live environment, professionals use sandboxes. A sandbox is a testing environment where you can experiment without affecting real users. This concept is vital for safe development and configuration.

Deployment tools allow changes made in sandboxes to be moved to production. Beginners should understand why testing is critical and how controlled releases maintain system stability. This technical awareness prepares you for structured project environments and collaborative team workflows.

Mastering these core concepts builds a strong technical foundation and opens doors to diverse career paths in CRM. From understanding architecture and security to automation and integration, each concept strengthens your practical confidence. As you continue learning and refining your skills, structured programs like Salesforce Training in Tirunelveli can help align your knowledge with industry demands. With consistent practice and curiosity, beginners can transform foundational understanding into long-term professional growth in the CRM ecosystem.

Also check : what is Salesforce and how does it works