9
I Use This!
Activity Not Available

News

Analyzed about 1 year ago. based on code collected about 1 year ago.
Posted about 13 years ago
Introduction If you installed Cerb5 from GitHub using Git then the process of updating to a new version is simple and straightforward. If you're using Subversion, you can switch to Git with these instructions. You won't need to copy your ... [More] framework.config.php or storage directories. Everything will be upgraded in place. Check your license expiration First, verify that your license is valid for the latest version. Navigate to Setup->Settings->License in Cerb5. Check the date for Software Updates Expire: If it's in the future, you're all set. Continue to the next section. If it's in the past, you either need to renew your license or upgrade to the latest version covered by your license. You can check approximate release dates from our profile on Freshmeat. Make a backup Refer to the instructions here to make a recent backup: http://wiki.cerb5.com/wiki/Backups Updating the project files We recommend creating a new branch for each version of the project. With a branch per version you can make an informed decision about which of your modifications and hacks to carry over. Some of your modifications to the project files may not make sense in the latest version because your feedback was implemented. You're perfectly welcome to modify the main project files, but the officially recommended way to extend the software is to take advantage of our comprehensive plugin system. Using plugins, your changes will be easily portable between versions or environments. Let's proceed with the upgrade by creating a new version branch: Open a console on your server and change to the directory of your Cerb5 installation. First, you'll want to stash your local changes to files like framework.config.php, which will make merging changes easier: git stash Find the name of the remote repository. In most cases this will be origin by default. You can verify this with: git remote Fetch the branches from the remote server: git fetch origin From here you can decide which version to upgrade to: git branch -r Add a new local branch for the desired version: git branch --track 5.5.2 origin/5.5.2 Switch to the new version branch: git checkout 5.5.2 Re-apply your local stashed changes: git stash pop Note: If you'd prefer to use a single branch instead of one branch per version, you can use the stable branch instead of a version number. This branch will always contain the files for the most recent release, but you may have to manually merge conflicts if you've made changes to the code. In the event of conflicts... If your stashed changes were non-trivial then you may run into a situation where your changes conflict with our changes in the new version. In such a situation you can decide to merge the changes by hand, using a command like git mergetool, or you can simply reset such files to their default state with git checkout -- <file> Permissions It is possible that using version control systems like Git and Subversion will modify your file permissions. You should verify that all files are owned and readable by your webserver user, and that the /storage directory and its contents are owned and readable+writeable by your webserver user. Upgrading the database Once your files are updated to a new version, Cerb5 automatically brings your database up to date and migrates any relevant data to new formats. For a major upgrade there will almost always be changes to the database. This section may not apply for smaller maintenance updates like the changes between 5.5.1 and 5.5.2. To start the database upgrade process you simply need to navigate to your helpdesk using a browser. You can also initiate this process manually by opening the /update page. For example, if your helpdesk is located at http://example.com/cerb5/ then you would open http://example.com/cerb5/update in your browser. Note: If you aren't using friendly URLs, then you would navigate to http://example.com/cerb5/index.php/update instead. Once the database is upgraded then you'll be returned to your login form and you can resume using the helpdesk. Purge the /install directory Make sure the /install directory is deleted. It is possible for version control systems like Git to restore this directory during an upgrade. Updating Community Portals If you have Community Portals in use, like the Support Center, then it's a good idea to make sure they're using the latest version of the deployed index.php file. This file rarely changes, but you will experience subtle and difficult to diagnose problems if it does change and you don't update your portals. Navigate to Setup->Community Portals->Configure. For each Community Portal, click on it and open the Installation tab. Copy the contents of index.php to the location where your portal is installed. All done! You should be all set to take advantage of our latest improvements. Be sure to review the list of changes for the new version. [Less]
Posted about 13 years ago
Introduction Prior to the release of Cerb5, the official recommendation was to use Subversion for installing and upgrading the app. This made sense years ago when support wasn't prevalent for the next generation of distributed version control tools ... [More] like Git. Today, Git is available for all major platforms. Our official repositories are managed with Git and collaboration is provided through GitHub. If you're still using Subversion to manage your Cerb5 installation, we highly recommend that you migrate to Git. In the future we may discontinue our Subversion mirror for the project. If for some reason you are unable to use Git, GitHub also provides read-only Subversion access to repositories. Make the change Move your existing Cerb5 installation to a directory named cerb5-svn. Make a backup Make a recent backup using the instructions here: http://wiki.cerb5.com/wiki/Backups Keep local modifications Change directory to your existing files: cd cerb5-svn Make a patch of your local modifications: svn diff > my_changes.patch Find your existing version grep "APP_VERSION" -m 1 api/Application.class.php Download the same version of Cerb5 with Git Return to the parent directory where cerb5-svn is located: cd .. Perform a fresh checkout of the Cerb5 project files from Git using the same version. Replace <version> in the command below with the version number from the previous section above with the following convention: 5.5.0 -> 5.5 5.5.2 -> 5.5.2 In other words, if the version ends in .0 then just include the first two numbers. Checkout the latest version of Cerb5 from GitHub using Git: git clone -b <version> git://github.com/wgm/cerb5.git cerb5-git Merge the copies Remove the .svn subdirectories from storage and then move it to cerb5-git: find -d cerb5-svn/storage -name '.svn' -exec rm -Rf {} \; mv -n cerb5-svn/storage/* cerb5-git/storage You can then apply your patch to the new files: cp cerb5-svn/my_changes.patch cerb5-git cd cerb5-git patch -p0 < my_changes.patch rm my_changes.patch Finish up If you placed any custom plugins in the /features directory, move them from cerb5-svn/features to cerb5-git/storage/plugins. This is where all custom plugins should go in the future. Be careful to not copy any official plugins. Move or rename the cerb5-git directory back to your desired location. Make sure all the files are owned and readable by the webserver user, and the /storage directory and its contents are owned and writeable+readable by the webserver user. This might be a good time to upgrade to the latest version using Git. Open Cerb5 in your web browser. [Less]
Posted about 13 years ago
Introduction If you're having trouble meeting the server requirements for installing Cerb5 on your own hardware, consider a virtual server as a convenient alternative. Virtual servers are generally part of a much larger infrastructure (e.g. cloud ... [More] computing), and each instance has a dedicated amount of storage, memory, and computing power. Virtualization has many advantages: You can isolate each best-of-breed application in a virtual server that provides its ideal environment (e.g. OS, programming language, server applications), even if that differs from your standard corporate tools. For example, Cerb5 requires PHP/MySQL. Other applications may require Ruby/Nginx/PostgreSQL, or Python/CouchDB, or Windows/IIS/C#/SQL-Server. You're able to utilize the best applications for a particular job rather than being limited to the tools of a specific platform. (This is even more of a benefit in web-based software that you subscribe to rather than install.) A virtual server can be isolated from the failure of specific hardware. Virtualization combines the resources of many computers and they are capable of automatically routing virtual machines to new hardware in the event of failure. You can scale up the resources of a virtual machine. With a physical server, you generally have to purchase new equipment (e.g. memory, hard drives) and install them, along with migrating your data. You often have to pay for all your capacity (memory, storage, processing) in advance. With a virtual server you can upgrade the memory, storage, and computing power with a couple of mouse clicks. You can scale down the resources of a virtual machine. When you're decommissioning a rented server (e.g. migrating customers to different hardware), you can end up in a situation where you're paying full price for despite utilizing only 10% of the server's resources. A virtual machine can downsized so you're only paying for what you're using. You can have root (full) access on a virtual server. Compared to a shared hosting account, this is one of the main advantages of upgrading to a virtual server. Our preferred vendor for Linux-based virtual servers is Linode. Here are our favorite things about them: Their virtual server plans are fair and inexpensive. The cost for increments of memory and storage scales linearly. Their smallest virtual server provides 512MB RAM / 20GB storage for $19.95/month. On the higher end, a 4GB RAM / 160GB storage server is $159.95/month. They cater to a technical audience. They provide a load balancer service, private IP networks w/ failover, DNS hosting, automation through "StackScripts", and a web-based API. They provide geographically diverse facilities in the United States (California, Texas, Georgia, New Jersey), as well as London and Tokyo. They provide an automated backups service. In particular, the StackScripts feature of Linode has allowed us to create a fully automated Cerb5 installation. This script can be used to deploy a new Linode virtual server, and it will: Install Debian or Ubuntu as the operating system Install Apache2, PHP5, MySQL5, Postfix, and Git as infrastructure Install Cerb5 and all of its system requirements (including the tricky 'mailparse' extension) Create a new virtual host in Apache for Cerb5 Configure a cronjob for Cerb5's scheduler (to check for mail and perform nightly maintenance) Install and configure both Memcached and XCache for fast performance Instructions Sign up at Linode First, you will need a Linode account to create a new virtual server. Sign up for a Linode account if you don't have one already. The creation of a new account requires a valid credit card. The cost for a new virtual server is prorated to the next 1st of the month. The least expensive server (Linode 512) is $19.95 per month with a 10% discount for annual prepayment. (Full disclosure: The signup link above includes our referral number which will credit our own Linode account with $20 if you stay signed up for more than 90 days. We recommend Linode based on its product offering and not the referral rewards. If you object to the commission policy you can delete our referral number during the signup form). During the signup process you'll be given the option to select the plan for your first Linode. You can upgrade your plan at any time, so we recommend starting with the first Linode 512 plan, which provides a virtual server with 512MB RAM and 20GB storage for $19.95/month (as of November 15th 2011). There's nothing wrong with choosing a larger plan if you anticipate needing more storage or computing resources. When you first log in to the Linode Manager you should see your virtual server in the Linodes tab along with its dedicated public IP. We recommend setting up a DNS "A" record for this IP on the new hostname where you plan to access Cerb5; e.g. helpdesk.example.com, groupware.example.com Click Dashboard next to the virtual machine name. If you plan to send mail from the virtual machine instead of using an existing SMTP server (like Exchange or Google Apps) then you should set up the Reverse DNS record to reduce the likelihood that your mail is marked as spam. Click the Remote Access tab near the top of the page. Click the Reverse DNS link under Public Network and enter the hostname you selected above. Deploy a Cerb5 automated installation Now that you have a virtual server we can deploy a fully automated installation of Cerb5 and all of its requirements. Click the Rebuild tab and select the Deploying using StackScripts option. Search for "cerb5" and select the jstanden / Cerb5 result. Enter your desired settings to automatically configure the server and Cerb5. When selecting a Distribution, a 32-bit OS like Ubuntu 11.10 is preferred because it will use less RAM on smaller virtual machines. Click the Rebuild button at the bottom of the page when finished. When the Host Job Queue finishes and every job says "Success" to the left, it's time to start up the virtual server. Click the Boot button near the top of the page. Connecting to your virtual server You can now connect to your new virtual server by IP or hostname using SSH. On a Unix-based OS like Linux or Mac OS X, type: ssh [email protected] If you're a Windows user, download PuTTY or run your favorite SSH client. At the server command line, type: tail -f stackscript.log You should now see a scrolling list of text as the server is automatically configured for you. Wait for a few minutes until you see the text "All set!". Type CTRL+C to return to the command line. Logging in to Cerb5 If you configured your DNS properly above, you should be able to access Cerb5 from your web browser. Open your web browser to http://helpdesk.example.com/cerb5/ (Be sure to replace helpdesk.example.com with your own hostname) Enter the Cerb5 login details you created when deploying the server. Welcome to your fully configured virtual server fine-tuned for Cerb5! Next steps Automated backups Linode offers an inexpensive, automated backup service. You can enable it from the Backups tab in the Linode Manager. Although this service makes consistent snapshots of your virtual server, you should still create a database backup using mysqldump for reliability. See: http://www.cerberusweb.com/book/#backups Customize the deployment script If you have specific deployment needs you can create your own version of the Cerb5 StackScript. You can also port it to different cloud services that have a similar feature. See: http://www.linode.com/stackscripts/view/?StackScriptID=3591 [Less]
Posted about 13 years ago
Introduction One of the major strengths of Cerb5 is that it provides you with a consolidated record of your contacts and customers. Your collected data can be enhanced with features like Broadcast and Virtual Attendants to supplement processes like ... [More] Customer Relationship Management (CRM). This information comes from a variety of sources (e.g. customer data entry in contact forms, worker data entry, imports, integration) and is prone to duplication. When your address book suffers from a high degree of redundancy then the information you base important decisions on may be fragmented and have degraded reliability. For example, if you make the distinction between paid customers and trial users (e.g. "freemium", evaluators) with a custom field on organization records, the main record for a company will likely be categorized properly. However, if duplicates exist for some of those organizations then you're faced with two major problems regardless of the outcome: (1) if the duplicates are categorized properly then your customer segment numbers are inflated, and the members of such organizations are fragmented; (2) if the duplicates are improperly categorized then you're likely to approach paying customers as if they were trial users, which doesn't show the proper appreciation that you likely desire to convey. It can be insulting for a customer to spend months of evaluation time, and potentially a large portion of their budget, over several conversations only to be treated as a stranger a few weeks later. Here's what a duplicated organization might look like in your address book: WebGroup Media, LLC. Webgroup Media WebGroupMedia WebGroup Media LLC Duplicates like this are especially frustrating when the interface "autocompletes" a list of suggested organizations based on what you start typing. Which of these organizations is the right one? While it is possible to merge these duplicates every time you encounter them, that process requires you to stop what you're doing and switch tasks; and the cost of such multitasking can be significant if you have to perform it several dozen times per day. We've created an optional plugin to help automatically discover duplication in your address book. Using these tools you can quickly examine duplicate records to verify they belong to the same company before merging them. If your data is more reliable then your productivity and efficiency are also likely to improve. Instructions To use the Organization Dupe Finder plugin you must be using Cerb5 version 5.6.1 or later. Download the Organization Dupe Finder plugin from GitHub. (These instructions will assume you have console access, but you can also download a ZIP file from GitHub and extract it to the same directory.) cd /path/to/cerb5/storage/plugins/ git clone git://github.com/cerb5-plugins/wgm.org_dupe_finder.git Activate the plugin in the web interface from Setup->Plugins. Click on address book link in the top navigation menu. Select the new Find Dupes tab. For smaller address books (e.g. a few thousand contacts), you can click on the Find Similar Orgs button to discover potential duplicates using all organizations. With a very large address book it's often more efficient and less tedious to distribute the work among several people. Using the "Starts with:" option you can divide alphabetic ranges between several people -- e.g. "You take A-E, I'll handle F-J, ...". The world is a big place. It is possible that two or more organizations in your address book will have the exact same name and still be separate companies. For this reason, it is a good practice to click the peek icon to the right of an organization. You can compare known contact information, as well as the email addresses of existing members in the People tab. Technical notes The discovery of duplicate organizations is accomplished through the following process: Punctuation and spaces are removed. Common corporate suffixes (e.g. Inc, Pty, LLC, Oy, BV) are removed. The Soundex algorithm converts the remaining text into phonetic notation. The phonetic results are filtered to a minimum length and then grouped by similarity up to a maximum length. Organization names that are entirely contained within the names of other organizations are grouped with them. Strengths: This process is capable of finding many representations for the same company that are separated by subtle spelling, spacing, or formal suffixes. These are the most likely differences in your address book entries. The execution of the process is fast; tens of thousands of organizations can be compared within seconds. Execution speed is favored over accuracy in edge cases in accordance with the Pareto Principle (i.e. 80% of the dupes can be discovered with 20% of the effort, and the remaining 20% would likely take 5X more execution time). Outliers can still be merged manually. Limitations: The notation of the Soundex algorithm uses the literal first letter of each phrase (in its PHP/MySQL implementation). For example, Soundex("Craft")=C613 and Soundex("Kraft")=K613. This means that, by default, the algorithm is not suitable for finding duplicates where the first letters are replaced with different letters that have a similar phonetic sound. This can be offset by adding the same prefix to every line of text being compared, although this also has the potential to introduce more false positives. We believe that misspellings at the beginning of an organization are likely to be rare compared to the hassle of false positives, so we have elected to leave this limitation in place. The Soundex algorithm may provide many false positive groupings for companies that are similar but distinct. For this reason we do not automatically merge duplicates, and instead tools are provided so that workers can perform a quick inspection of the records when in doubt. This Soundex algorithm may not produce optimal results for all languages. This process won't find every duplicate entry in your address book, although it has demonstrated great success in finding the majority of them. [Less]
Posted over 13 years ago
At this point there are more than 1,237 improvements in Cerb5 (as of 5.6) since the final version of Cerb4. The wiki is a great resource for browsing through our release notes, but the list has become big enough that people frequently write in to ... [More] ask us if we can summarize what we feel are the biggest improvements. Here's a comparison of the changes between Cerb4 and Cerb5 provided by Jeff Standen, Founder and Chief of R&D at WebGroup Media, and lead product developer for Cerb5 over all 10 years of its history. Virtual Attendants / Scheduled Behavior / Macros My pick for #1 innovation in Cerb5 is Virtual Attendants (VAs). They're a very flexible way to bring workflow automation into your environment. If we offered options for every feature variation that people ask for then the app would end up cluttered and confusing. VAs offer emergent behavior -- that is, users can use their creativity to mix and match the tools we provide to do interesting things that we had never considered; and then they can share those tips with the community like a recipe. For example, now you can use VAs to configure different auto-replies based on the current date/time, the sender's language, an SLA attached to the sender's organization, or anything else based on the information captured by the system. In the past, auto-replies were configured with a text box that offered no flexibility. Auto-replies are just an example -- you can add Virtual Attendant behavior to all kinds of events in Cerb5: new messages to a group, closed tickets, assigned tickets, before a worker reply (to modify the contents prior to sending), after a worker reply, when a notification is received, when new mail enters the helpdesk, etc. Virtual Attendant behavior can also be created on special events that function like macros, so you can pre-define the actions you do most often (e.g. send a reply, add a comment, set custom fields, link to other records, send a notification, add a task, post to Twitter/Facebook/Campfire, send SMS through Twilio) and then apply them in a single click from ticket lists or pages. VAs can also create "scheduled behavior": custom behavior that runs at a future date, allowing functionality like SLA escalation, a scheduled pipeline of sales messages for new leads (welcome, 2-day, 15-day), or anything else you can dream up. For more examples, see: http://cerberusweb.com/support/kb/browse/493/Cookbook Watchers/Activity Log Tickets had a single owner in Cerb4, and they mainly had to keep up to date about changes proactively from something like a 'My Work' list in the web interface. In Cerb5 you can 'watch' any record (tickets, tasks, opportunities, addresses, etc) in the same way you follow people on Twitter, friend them on Facebook, or connect to them on LinkedIn. There can be multiple watchers on a record and they receive automatic Notifications when something changes on it. These changes are also recorded in the Activity Log for every record type, and you can also view the activity log entries from the perspective of any worker to see what they've been up to in the entire system (beyond just replying to mail). Notifications Cerb5 generates notifications to keep workers in the loop about the things they're working on or interested in. The only analogous thing in Cerb4 had to do with sending copies of messages to workers' external email accounts, but that only worked for tickets and it didn't cover any other activities. Notifications in Cerb5 are implemented for every kind of record (tasks, tickets, opps, orgs, addys, calls, etc). They've been refined quite a bit by 5.6 -- by viewing any record that you've been watching (from a notification or otherwise) you'll see a list of everything that changed since your last visit. Combined with Virtual Attendants, workers can also have their notifications routed to any number of places (like text messages). Workspaces / Subtotals Custom worklists for every record type can be created and organized into workspaces. Workspaces can be owned by groups, roles, or workers. A group owned workspace is visible to any member of the group, but only managers can make underlying changes to it (e.g. columns, required parameters). Members can maintain their own preferences for filters, sorting, paging, and subtotaling. In Cerb4, ticket worklists had no subtotal sidebar like the default lists of mail. In Cerb5, you can subtotal any kind of worklist by a large number of columns -- including custom fields and fields from linked records. For example, on a ticket list you can add custom fields from the sender's organization as columns and also subtotal by them. This means if you add a custom field for 'Service Level' to organizations you could subtotal and filter tickets using it. This also makes it easier to organize tasks, opportunities, and other less structured record types. Presets In Cerb5 you can save commonly used search filters as presets, allowing you to quickly switch between combinations of filters in a single click on any worklist of the same type. Comments In Cerb4 you could only add comments to tickets. Comments can be added to every record type in Cerb5, which greatly enhances group collaboration. Comments can also generate notifications. Choosers Cerb5 introduced the concept of "choosers", which are popups that allow you to peek at content, edit it, or establish links regardless of where you happen to be in the interface. For example, when filtering a list of tickets or generating a report, one of the common options is providing a list of workers or groups. You can start typing names and the autocomplete functionality will give you hints -- and this works well for a limited number of things to choose from -- but a chooser will allow you to use presets and filters to quickly narrow down very long lists like contacts, tasks, or tickets (anywhere; even in the middle a ticket reply). Connections (Context Links) Context links have a scary name, but a very useful purpose. They allow you to connect any two records together. If you're working on a ticket and it involves a couple of organizations and several tasks, you can link all those records together for quick reference. A lot of functionality, like time tracking entries and opportunities, will automatically link themselves to records they're created from. Cerb4 lacks a comparable equivalent. Snippets Cerb4 had email templates. Cerb5 has snippets, which provide far larger list of placeholders that will automatically be substituted with the proper information based on the current record. Snippets are available for all the major record types, and can be owned by workers or groups. Unlike email templates, snippets can also contain conditional logic and modifiers. For example, you an inject a customer's first name when it's known. You could send a message that begins with "We haven't heard from you in a while" if it happens to be true. There are countless uses for such functionality, especially when combined with Broadcast. Broadcast Cerb4 lacked a feature to mass reply to several tickets at once. Cerb5 introduced a feature called Broadcast which allows to draft a message to any worklist that has contact information: tickets, addresses, opportunities, etc. You can use snippets so each message is personalized to the recipient. You can filter worklists with custom fields and target broadcasts at very specific audiences. During the 2008 U.S. Elections, we had a Senate campaign use broadcasts to instantly send personalized messages to two dynamic mailing lists of constituents (based on buckets): those who supported the financial bailouts of the auto and banking industries, and those who opposed them. Broadcasts also use an efficient mail queue to deliver messages so your system's performance doesn't suffer even for large lists. Explore mode In Cerb4 you could Next/Prev through a list of tickets to quickly change pages. However, this only worked for tickets and if you left the page you lost your place. In Cerb5 we introduced 'Explore mode', which is available for every worklist type. It provides a small banner at the top of the page with the familiar next/previous navigation information, but that banner remains on the page as you navigate around -- perhaps switching from a ticket to look up a contact record and then creating a task. You can instantly return back to where you were working with a single click. Explore mode is also social -- if you have a list of 250 opportunities you need to review by the end of the day and you're called off to a meeting, you can send the URL to another worker and they can pick up exactly where you left off (with all the same search filters). This is also a very efficient way to distribute work on a team. The team leader can perform the searches and then simply send the URLs to other workers by email or IM. Explore mode is also very useful when combined with things like notifications, as you can explore all your notifications without having to return to the list to click on the next one. Notifications are also 'folded' in explore mode, meaning you'll only visit each record once even if it had 20 notifications pointing you to it (and they'll all be marked read automatically). Drafts A common request in Cerb4 was the ability to have drafts auto-saved while writing responses. In Cerb5 we've implemented this feature, and also gone a step further to where your draft on a ticket is visible to other workers in that group. This has several great uses. For one, another worker looking at a ticket will immediately see that it is being worked on. Similarly, a worker can also send a ticket link to someone else (including their manager) before hitting send and ask for proofreading or approval (which is far superior to copy/paste or dragging someone over to your desk from across the building). Reports In Cerb4 the selection of reports was fairly limited. In Cerb5 the reports are much more visual and interactive. Plugins / SDK Cerb4 supported plugins, but they lacked documentation and community effort. Cerb5 has a growing list of plugins for you to use and learn from on GitHub: https://github.com/cerb5-plugins/ -- including very useful things like integration with OpenID, LDAP, Campfire, Twitter, Twilio, Facebook, Freshbooks, and more. Cerb5 also includes an SDK with examples in every distribution. Platform/Performance Cerb4 was fast, but Cerb5 is even faster despite doing so much more. We've streamlined our custom platform (Devblocks) through years of experience hosting a large network of On-Demand instances of the software. We've relentlessly profiled and optimized the software -- keeping memory usage low, loading the least amount of code required to serve a request, serving images as sprites to reduce HTTP connections, favoring dynamic content pulled through Ajax instead of reloading entire pages, strategically caching all kinds of information to reduce the complexity and frequency of database queries, and more. One common performance bottleneck in Cerb4 is fulltext searching of message content; which occurs for a number of reasons: every new message inserted into the database requires an expensive update to the index, and updating the index prevents lookups for commonly used information like displaying conversations. In Cerb5 we split up this process. Indexing happens on a separate table, and it's efficiently done in batches from a scheduler rather than performed in real-time (though it's close enough; usually within a couple minutes). Storage In Cerb4 we had moved heavy content that never changes out of the database and into the filesystem -- and this was a good first step. In Cerb5, you can ship that content off to services like Amazon S3. Translations In Cerb4 most of the available translations were scattered all over the place and quickly became out of date. In Cerb5 we bundle several up-to-date translations with the distribution: English, German, Spanish, Italian, Dutch, Russian, and Portuguese. We're aware of several others that are being updated (French, Chinese, Japanese). UTF-8/Unicode Cerb5 fully supports UTF-8 for international language support. This worked in a basic fashion in Cerb4 for things like email messages, but Cerb5 goes much further. We "Romanize" non-Latin languages like Chinese, Greek, and Russian, which makes their content available for search indexing or spam filtering without polluting the word database with foreign characters. That also means you can interchangeably search for text in either the native character set (such as Chinese or Japanese) or the Romanized equivalents. Either approach will yield the same matches. This also works for accented characters, making them optional in searches. In Cerb4, the anti-spam system simply ignored non-English content. It did "de-accent" characters, so a word like "résumé" would be converted to "resume"; but this did nothing about spam in languages like Chinese, Japanese, or Russian. By ignoring all that content, spam usually couldn't be given a high probability (since messages were considered blank, and 50% probable) so it created a lot of clutter. In Cerb5, the process of Romanizing foreign languages is very effective at quarantining this spam as well. jQuery This is a fairly esoteric bullet point for the benefit of web developers, but we also switched from the YUI (Yahoo User Interface) library in Cerb4 to jQuery in Cerb5. This provides cross-browser scripting, Ajax, effects, and familiar user interface patterns like tabs, drag&drop, autocompletes, popups, and more. This allows us to provide a great user experience in a web browser, while spending more of our limited time creating value instead of battling with browser inconsistencies. [Less]
Posted over 13 years ago
Introduction Cerb5 is a complex project with a 10 year history and more than 300,000 lines of source code. During this time there has been at least one known issue where file attachments on deleted records were not properly cleaned up on the disk. ... [More] This article provides instructions on how to compare the contents of the database and the filesystem, as well as instructions on how to clean up any inconsistencies that are found. Instructions Make a backup! The instructions in this article require the use of several console commands on your server. If these commands are entered improperly by accident then you may experience unintended data loss. Please make a current backup of your database and filesystem before proceeding. Creating a list of files on the disk Change directory to the attachments directory of the storage filesystem: cd /path/to/cerb5/storage/attachments Create a list of all the files on the disk: find * -type f > tmp Sort the list: sort tmp > files.disk rm tmp Creating a list of files in the database From the ./storage/attachments directory, run the following command: mysql -u <user> -p<pass> -BN -e \ "SELECT storage_key FROM attachment \ WHERE storage_extension = 'devblocks.storage.engine.disk' \ ORDER BY storage_key" <database> \ > files.db You will need to replace <user>, <pass>, and <database> with the proper values for your environment. If you are unsure of these values, consult your framework.config.php file. Checking file storage integrity Count files only on disk and not in the database comm -23 files.disk files.db | wc -l Count files only in the database and not on disk comm -13 files.disk files.db | wc -l Count where a file is both on disk and in the database comm -12 files.disk files.db | wc -l Cleaning orphaned files Cleaning up orphaned files on disk If you have files that only appear on the disk and are no longer in the database, you can transform the comparison list into a sequence of commands in order to remove or relocate the files. Make sure you are still in the ./storage/attachments directory. To remove these files, iterate over the list and delete each one: for f in `comm -23 files.disk files.db`; do rm -v $f; done; Cleaning up orphaned files in the database If you have files that only appear in the database and are no longer on the disk, you can transform the comparison list into a series of SQL statements to delete the records. Make sure you are still in the ./storage/attachments directory. Iterate over the list of orphaned files to generate a list of SQL statements in order to delete the affected rows: for key in `comm -13 files.disk files.db`; do echo "DELETE FROM attachment WHERE id = `basename ${key}`;" >> deletes.sql; done; You now have a file named deletes.sql with the statements required to clean up the database. The recommended way to execute these statements is to pipe them through the mysql command: mysql --verbose -u <user> -p<pass> <database> < deletes.sql Again, you will need to replace <user>, <pass>, and <database> with the proper values for your environment. When finished, delete the SQL statements file: rm deletes.sql Finishing up Remove the temporary files you created during this process: rm files.disk files.db [Less]
Posted over 13 years ago
Introduction We recommend that each developer maintains a local web environment on their development machine with a self-contained webserver, database, and dummy mail server. This article will explain how to accomplish this using the same toolset ... [More] as the official developers. Installing Eclipse as your Integrated Development Environment (IDE) We recommend using Eclipse as your IDE, along with the PHP Development Tools (PDT) plugin. There was no PDT package for the latest Eclipse 3.7 (Indigo) release, so you'll need to download Eclipse Classic and then install the PDT plugin manually. Installing Eclipse Download Eclipse Classic for your platform. Extract it. Run it. You'll be prompted to create a new workspace directory (e.g. "php5-workspaces"). Choose a location that is convenient for you; it does not need to be in the same place where your web-accessible files are located. Installing PDT Open the Help menu and select Install New Software. In the Work With: dropdown, select "Indigo - http://download.eclipse.org/releases/indigo" In the filter box, type "pdt" and hit ENTER. Check "PHP Development Tools" under Programming Languages Click the Next button twice. Accept the software terms and click the Finish button. When prompted to restart Eclipse, select Restart Now. Installing a web environment with Apache, MySQL, and PHP Your local development machine should have the following services available: Webserver (e.g. Apache, Nginx, lighttpd, IIS) MySQL Server 5.x+ PHP 5.2+ Extensions: curl, imap, mailparse, mbstring There are countless ways to install and maintain a local server: XAMPP One of the easiest ways to install a local webserver for PHP development is to use XAMPP. This will provide Apache, MySQL, and PHP. Installers are available for Linux, Mac OS X, Solaris, and Windows. MacPorts If you're using a Mac, you can use MacPorts to install these applications in /opt. sudo port install apache2 php5 mysql5-server Unix If you're using a Unix-based operating system, use your distribution's package manager (e.g. apt-get, yum) to install these applications. In Debian/Ubuntu: apt-get install apache2 mysql-server php5 Installing a dummy mail server Your development machine can use an existing mailserver, although you often want to remove the possibility of accidentally sending test messages to real recipients; especially if you're developing using a copy of your live data. This is best accomplished with a dummy SMTP server on a non-standard port (e.g. 2525). There are a couple different options for a fake mail server: Install Postfix using your package manager and set up a null transport. If you're using a Mac, install our FakeSMTP project. This will listen for SMTP connections on an arbitrary port (2525 by default) and provide an easy way to inspect outgoing mail without actually delivering anything. Python provides a dummy SMTP server by default: sudo python -m smtpd -n -c DebuggingServer localhost:2525 Installing Git We use Git for distributed source control and versioning. You can test if Git is currently installed by running the command: git --version If Git is not installed, you can download the latest version for your platform from: http://git-scm.com/download Pulling the project files from GitHub Our project and plugins repositories are hosted on GitHub. You don't need a GitHub account to simply download our project files, but we recommend creating one so you can take advantage of the collaborative tools. Navigate to the web-accessible directory for the appropriate virtual host (or default) of your local webserver. For example, if you're using Apache this path is usually something like /var/www/. In Windows Server with IIS it may be C:\Inetpub\. Selecting a repository We have two main repositories for the project. The wgm/cerb5.git repository is a fork of jstanden/cerb5.git. The jstanden repository is where development and integration actually take place. During a stable release, the progress from jstanden is pushed to the wgm repository for public consumption. Most people will only need to use the latter. If you're only developing third-party plugins... If you only intend to work on your own custom plugins then you can anonymously use our repositories. For access to stable releases, issue the following command at the console: git clone https://github.com/wgm/cerb5.git Otherwise, for access to development builds, issue the following command instead: git clone https://github.com/jstanden/cerb5.git If you plan to contribute to Cerb5, and work on plugins... If you plan to contribute patches (e.g. bug fixes) to the Cerb5 project, in addition to working on custom plugins, we recommend that you fork the project on GitHub. This will create your own copy of our official repository that you can commit (save) your changes to. It also makes it easier for us to view and integrate those changes. Create a free account at GitHub if you don't already have one. Once logged in, browse to https://github.com/jstanden/cerb5 Click the Fork button in the top right. This will create your own personal repository for making modifications to Cerb5. When your repository is created, use the credentials from the SSH section on your page at GitHub to download your files. For example (replace <you> with your account at GitHub): git clone [email protected]:<you>/cerb5.git Git graphical user interfaces You can also use a graphical Git client like TortoiseGit for Windows or Tower.app for Mac; however, it is worth becoming proficient with the command line interface to Git since it will always provide you with full functionality. Git also comes with a simple GUI for managing your repository which can be accessed with the git gui command. At WebGroup Media (WGM), we develop on Macs and use GitX to make it easy to visually audit changes before staging and committing them. Everything else is accomplished from the command line. Importing the Cerb5 project in Eclipse At this point, you will have a copy of the project in a web-accessible path. Open Eclipse. Open the File menu and select Import. Expand General and select Existing Projects into Workspace. Click the Next button. Click the Browse button next to Select root directory: and select the cerb5 directory from your webserver's web-accessible path. Click the Open button. The Cerb5 project should automatically be detected by Eclipse. Click the Finish button at the bottom of the popup window. It may take a few minutes to index the project the first time you open it. This process will enable many useful features like API autocompletion. Configuring Eclipse for PHP development Perspective If you see something other than PHP for the perspective in the top right, open the Window menu, select Open Perspective->Other... and double-click PHP. *.tpl files Our Smarty-based template files use the *.tpl file extension, which is not associated with the HTML editor in Eclipse by default. Open Eclipse's preferences. Expand General from the tree on the left and select Content Types. Expand Text on the right and select HTML. Click the Add button below, enter *.tpl and click the OK button. Click the OK button at the bottom of the popup window. Validation HTML By default, Eclipse PDT will output several HTML validation warnings. To suppress these: Open up Eclipse's Properties. Select Validation from the tree on the left of the popup. Click the "..." button to the right of _HTML Syntax Validator`. Click the Add Exclude Group button to the right of the popup. Highlight Exclude Group on the left and click the Add Rule... button. Select File Extension and click the Next button. Enter the extension tpl and click the Finish button. Click the OK button. Click the "..." button to the right of _HTML Syntax Validator (for PHP Files)`. Click the Add Exclude Group button to the right of the popup. Highlight Exclude Group on the left and click the Add Rule... button. Select Folder or File Name and click the Next button. Enter the filename devblocks-dao.php and click the Finish button. Click the OK button. Click the OK button at the bottom of the popup and let Eclipse refresh validation. XML There will also be a few XML validation errors from cerb5_lang_*.xml translation files due to missing schemas. To suppress these: Open Eclipse's preferences. Expand XML->XML Files in the tree on the left and select Validation. On the No grammar specified option change Warning to Ignore. Click the OK button and let Eclipse refresh validation. [Less]
Posted over 13 years ago
At this point there are more than 1,237 improvements in Cerb5 (as of 5.6) since the final version of Cerb4. The wiki is a great resource for browsing through our release notes, but the list has become big enough that people frequently write in to ... [More] ask us if we can summarize what we feel are the biggest improvements. Here's a comparison of the changes between Cerb4 and Cerb5 provided by Jeff Standen, Founder and Chief of R&D at WebGroup Media, and lead product developer for Cerb5 over all 10 years of its history. Virtual Attendants / Scheduled Behavior / Macros My pick for #1 innovation in Cerb5 is Virtual Attendants (VAs). They're a very flexible way to bring workflow automation into your environment. If we offered options for every feature variation that people ask for then the app would end up cluttered and confusing. VAs offer emergent behavior -- that is, users can use their creativity to mix and match the tools we provide to do interesting things that we had never considered; and then they can share those tips with the community like a recipe. For example, now you can use VAs to configure different auto-replies based on the current date/time, the sender's language, an SLA attached to the sender's organization, or anything else based on the information captured by the system. In the past, auto-replies were configured with a text box that offered no flexibility. Auto-replies are just an example -- you can add Virtual Attendant behavior to all kinds of events in Cerb5: new messages to a group, closed tickets, assigned tickets, before a worker reply (to modify the contents prior to sending), after a worker reply, when a notification is received, when new mail enters the helpdesk, etc. Virtual Attendant behavior can also be created on special events that function like macros, so you can pre-define the actions you do most often (e.g. send a reply, add a comment, set custom fields, link to other records, send a notification, add a task, post to Twitter/Facebook/Campfire, send SMS through Twilio) and then apply them in a single click from ticket lists or pages. VAs can also create "scheduled behavior": custom behavior that runs at a future date, allowing functionality like SLA escalation, a scheduled pipeline of sales messages for new leads (welcome, 2-day, 15-day), or anything else you can dream up. For more examples, see: http://cerberusweb.com/support/kb/browse/493/Cookbook Watchers/Activity Log Tickets had a single owner in Cerb4, and they mainly had to keep up to date about changes proactively from something like a 'My Work' list in the web interface. In Cerb5 you can 'watch' any record (tickets, tasks, opportunities, addresses, etc) in the same way you follow people on Twitter, friend them on Facebook, or connect to them on LinkedIn. There can be multiple watchers on a record and they receive automatic Notifications when something changes on it. These changes are also recorded in the Activity Log for every record type, and you can also view the activity log entries from the perspective of any worker to see what they've been up to in the entire system (beyond just replying to mail). Notifications Cerb5 generates notifications to keep workers in the loop about the things they're working on or interested in. The only analogous thing in Cerb4 had to do with sending copies of messages to workers' external email accounts, but that only worked for tickets and it didn't cover any other activities. Notifications in Cerb5 are implemented for every kind of record (tasks, tickets, opps, orgs, addys, calls, etc). They've been refined quite a bit by 5.6 -- by viewing any record that you've been watching (from a notification or otherwise) you'll see a list of everything that changed since your last visit. Combined with Virtual Attendants, workers can also have their notifications routed to any number of places (like text messages). Workspaces / Subtotals Custom worklists for every record type can be created and organized into workspaces. Workspaces can be owned by groups, roles, or workers. A group owned workspace is visible to any member of the group, but only managers can make underlying changes to it (e.g. columns, required parameters). Members can maintain their own preferences for filters, sorting, paging, and subtotaling. In Cerb4, ticket worklists had no subtotal sidebar like the default lists of mail. In Cerb5, you can subtotal any kind of worklist by a large number of columns -- including custom fields and fields from linked records. For example, on a ticket list you can add custom fields from the sender's organization as columns and also subtotal by them. This means if you add a custom field for 'Service Level' to organizations you could subtotal and filter tickets using it. This also makes it easier to organize tasks, opportunities, and other less structured record types. Presets In Cerb5 you can save commonly used search filters as presets, allowing you to quickly switch between combinations of filters in a single click on any worklist of the same type. Comments In Cerb4 you could only add comments to tickets. Comments can be added to every record type in Cerb5, which greatly enhances group collaboration. Comments can also generate notifications. Choosers Cerb5 introduced the concept of "choosers", which are popups that allow you to peek at content, edit it, or establish links regardless of where you happen to be in the interface. For example, when filtering a list of tickets or generating a report, one of the common options is providing a list of workers or groups. You can start typing names and the autocomplete functionality will give you hints -- and this works well for a limited number of things to choose from -- but a chooser will allow you to use presets and filters to quickly narrow down very long lists like contacts, tasks, or tickets (anywhere; even in the middle a ticket reply). Connections (Context Links) Context links have a scary name, but a very useful purpose. They allow you to connect any two records together. If you're working on a ticket and it involves a couple of organizations and several tasks, you can link all those records together for quick reference. A lot of functionality, like time tracking entries and opportunities, will automatically link themselves to records they're created from. Cerb4 lacks a comparable equivalent. Snippets Cerb4 had email templates. Cerb5 has snippets, which provide far larger list of placeholders that will automatically be substituted with the proper information based on the current record. Snippets are available for all the major record types, and can be owned by workers or groups. Unlike email templates, snippets can also contain conditional logic and modifiers. For example, you an inject a customer's first name when it's known. You could send a message that begins with "We haven't heard from you in a while" if it happens to be true. There are countless uses for such functionality, especially when combined with Broadcast. Broadcast Cerb4 lacked a feature to mass reply to several tickets at once. Cerb5 introduced a feature called Broadcast which allows to draft a message to any worklist that has contact information: tickets, addresses, opportunities, etc. You can use snippets so each message is personalized to the recipient. You can filter worklists with custom fields and target broadcasts at very specific audiences. During the 2008 U.S. Elections, we had a Senate campaign use broadcasts to instantly send personalized messages to two dynamic mailing lists of constituents (based on buckets): those who supported the financial bailouts of the auto and banking industries, and those who opposed them. Broadcasts also use an efficient mail queue to deliver messages so your system's performance doesn't suffer even for large lists. Explore mode In Cerb4 you could Next/Prev through a list of tickets to quickly change pages. However, this only worked for tickets and if you left the page you lost your place. In Cerb5 we introduced 'Explore mode', which is available for every worklist type. It provides a small banner at the top of the page with the familiar next/previous navigation information, but that banner remains on the page as you navigate around -- perhaps switching from a ticket to look up a contact record and then creating a task. You can instantly return back to where you were working with a single click. Explore mode is also social -- if you have a list of 250 opportunities you need to review by the end of the day and you're called off to a meeting, you can send the URL to another worker and they can pick up exactly where you left off (with all the same search filters). This is also a very efficient way to distribute work on a team. The team leader can perform the searches and then simply send the URLs to other workers by email or IM. Explore mode is also very useful when combined with things like notifications, as you can explore all your notifications without having to return to the list to click on the next one. Notifications are also 'folded' in explore mode, meaning you'll only visit each record once even if it had 20 notifications pointing you to it (and they'll all be marked read automatically). Drafts A common request in Cerb4 was the ability to have drafts auto-saved while writing responses. In Cerb5 we've implemented this feature, and also gone a step further to where your draft on a ticket is visible to other workers in that group. This has several great uses. For one, another worker looking at a ticket will immediately see that it is being worked on. Similarly, a worker can also send a ticket link to someone else (including their manager) before hitting send and ask for proofreading or approval (which is far superior to copy/paste or dragging someone over to your desk from across the building). Reports In Cerb4 the selection of reports was fairly limited. In Cerb5 the reports are much more visual and interactive. Plugins / SDK Cerb4 supported plugins, but they lacked documentation and community effort. Cerb5 has a growing list of plugins for you to use and learn from on GitHub: https://github.com/cerb5-plugins/ -- including very useful things like integration with OpenID, LDAP, Campfire, Twitter, Twilio, Facebook, Freshbooks, and more. Cerb5 also includes an SDK with examples in every distribution. Platform/Performance Cerb4 was fast, but Cerb5 is even faster despite doing so much more. We've streamlined our custom platform (Devblocks) through years of experience hosting a large network of On-Demand instances of the software. We've relentlessly profiled and optimized the software -- keeping memory usage low, loading the least amount of code required to serve a request, serving images as sprites to reduce HTTP connections, favoring dynamic content pulled through Ajax instead of reloading entire pages, strategically caching all kinds of information to reduce the complexity and frequency of database queries, and more. One common performance bottleneck in Cerb4 is fulltext searching of message content; which occurs for a number of reasons: every new message inserted into the database requires an expensive update to the index, and updating the index prevents lookups for commonly used information like displaying conversations. In Cerb5 we split up this process. Indexing happens on a separate table, and it's efficiently done in batches from a scheduler rather than performed in real-time (though it's close enough; usually within a couple minutes). Storage In Cerb4 we had moved heavy content that never changes out of the database and into the filesystem -- and this was a good first step. In Cerb5, you can ship that content off to services like Amazon S3. Translations In Cerb4 most of the available translations were scattered all over the place and quickly became out of date. In Cerb5 we bundle several up-to-date translations with the distribution: English, German, Spanish, Italian, Dutch, Russian, and Portuguese. We're aware of several others that are being updated (French, Chinese, Japanese). UTF-8/Unicode Cerb5 fully supports UTF-8 for international language support. This worked in a basic fashion in Cerb4 for things like email messages, but Cerb5 goes much further. We "Romanize" non-Latin languages like Chinese, Greek, and Russian, which makes their content available for search indexing or spam filtering without polluting the word database with foreign characters. That also means you can interchangeably search for text in either the native character set (such as Chinese or Japanese) or the Romanized equivalents. Either approach will yield the same matches. This also works for accented characters, making them optional in searches. In Cerb4, the anti-spam system simply ignored non-English content. It did "de-accent" characters, so a word like "résumé" would be converted to "resume"; but this did nothing about spam in languages like Chinese, Japanese, or Russian. By ignoring all that content, spam usually couldn't be given a high probability (since messages were considered blank, and 50% probable) so it created a lot of clutter. In Cerb5, the process of Romanizing foreign languages is very effective at quarantining this spam as well. jQuery This is a fairly esoteric bullet point for the benefit of web developers, but we also switched from the YUI (Yahoo User Interface) library in Cerb4 to jQuery in Cerb5. This provides cross-browser scripting, Ajax, effects, and familiar user interface patterns like tabs, drag&drop, autocompletes, popups, and more. This allows us to provide a great user experience in a web browser, while spending more of our limited time creating value instead of battling with browser inconsistencies. [Less]
Posted over 13 years ago
Introduction Auto-responders are a useful tool in many situations; for example: Groups can send a confirmation for new tickets, which gives customers a reference number and an ETA. Mail sent to a certain address, or with a specific subject like ... [More] "Tell me more", can be sent an automated response with more information. When new mail is received outside regular office hours, an automated response could manage the expectations of the sender with a message like "We'll reply to you first thing Monday morning". On their own, automated replies are nothing new. Many email applications provide "Vacation messages" which act on the same principle. What makes Cerb5's functionality interesting is that Virtual Attendants can use everything you know about the sender to personalize the message you're automatically sending. With Virtual Attendants, auto-replies can be based on: Hours of operation (e.g. time of day, day of week, month of year) Any information about the current conversation ticket (e.g. group; bucket; subject; sender; org) Any custom fields attached to the sender or their organization (e.g. service level agreement; paid support) The sender's native language Product lines or brands and pretty much anything else you can think of In this article, we'll cover how to create a new auto-responder using the group Virtual Attendant. The response will confirm receipt of the message and it will provide a reference ID. Implementation You'll need to be a group manager to continue. Click groups in the top right, and then choose the group you would like to create an auto-responder for. Select the Virtual Attendant tab. Under Create New Behavior, choose New message on a group conversation. Click on the new behavior and select Edit Behavior from the menu. Give it the title "New ticket auto-reply", and click the Save Changes button. We should restrict this behavior to only new messages and not replies to existing conversations: Click on the new behavior again and select Add Decision from the menu. Set the title to "Is it new?" and click the Save Changes button. Click on "Is it new?" and select Add Outcome from the menu. Set the title to "Yes". Click the Add Condition button and type "message is" in the text box. This filters the conditions to only those that match your search string. Click the message is first in conversation condition to add it. Leave the default at true. Now the behavior will only match the first message of a conversation, and you won't end up spamming your customers with the same auto-reply every time they contact you. Next, click the message is outgoing condition to add it too. Change its value to false. This will make sure you're only sending this auto-reply when customers write in to you, instead of when you're composing a new message to them. Click the Save Changes button. Now we're ready to set up the auto-reply message: Click the Yes bubble on the New ticket auto-reply behavior and select Add Actions from the menu. Set the title to "Send confirmation email". Add the action Send email to recipients. Add the following content: Thanks for writing to us! Your reference number for the ticket "{{ticket_subject}}" is #{{ticket_mask}}. We'll get back to you as soon as possible. - Example, Inc. You can customize this message to suit your needs. When sending an auto-reply, you may not want to include the message in the ticket history. This will prevent a copy of the automatic response from being included in every conversation or treated as a new message. This is probably what you want, so check the box next to Don't save a copy of this message in the conversation history. Click the Save Changes button and your Virtual Attendant will automatically send this message for every new incoming message that arrives for the group. More Things to Try Sending time-based auto-reply messages Sending auto-replies based on Service Level Responding with language-appropriate greetings [Less]
Posted over 13 years ago
Introduction LDAP (Lightweight Directory Access Protocol) is a service designed to share contact information between applications. It is often used to provide centrally managed corporate account information. A single login/password combination can ... [More] allow access to various applications, and it only needs to be changed in a single place to take effect everywhere. We provide a plugin for LDAP integration with Cerb5. This article explains how to use it. Instructions Prerequisites This plugin requires the LDAP PHP extension. This is usually available through the package manager for your distribution. On Debian/Ubuntu: sudo apt-get install php5-ldap Installing the plugin The plugin needs to be installed in the storage/plugins/ directory of your Cerb5 installation. Change directory to /path/to/cerb5/storage/plugins Run the command: git clone git://github.com/cerb5-plugins/wgm.ldap.git Enabling the plugin The plugin can be enabled from the web interface. Open Cerb5 in your web browser. Click Setup->Plugins. Enable the [Cerb5] LDAP Integration plugin and click the Save Changes button. Configuring the plugin You should substitute your own LDAP connection details during this section. Click the Plugins menu and select LDAP from the list. Enter your LDAP settings: Click the Save Changes button. Your connection information will be verified when you save it. Enabling LDAP logins for workers A worker account needs to exist in Cerb5 with an associated email address that matches their contact record in your LDAP directory. A new LDAP option will appear on the login form: The worker should enter their email address and the password on file in your LDAP directory. Enabling LDAP logins in the Support Center Unlike worker authentication, contacts will be automatically created in your Support Center during their first login if they exist in your LDAP directory. Additionally, their given name and surname will be imported if available. Configuring your Support Center profile Navigate to Setup->Community Portals->Configure. Select the Support Center where you want to enable LDAP logins. On the Settings tab, scroll to the Login section and select LDAP for the "Authenticate logins using these methods:" option. This can be set exclusively, or in conjunction with other login methods. Click the Save Changes button. Logging in Contacts from your LDAP address book should now be able to log in using their existing email address and password. Next Steps Alternate credentials With a relatively simple modification to the plugin's code you could change the login credentials from email/password to any other combination. For example, your users may be familiar with using a screen name or account number instead of an email address. Multi-factor authentication You could also modify the plugin's code to use multi-factor authentication for improved security. Two-factor security, for instance, is comprised of "something you know" and "something you have". For example, at an ATM (automated bank-teller machine), you have an access card and know a secret PIN number. You generally cannot use the ATM to access your account without both factors. Other accounts may also require a security token in addition to a login and password. [Less]