Skip to main content

CiviCRM Pay Later Option Bug

One of our clients recently upgraded to CiviCRM 4.7.29 and then their existing Contribution page started giving a 500 Server Error.

They asked us to debug and we found that the issue was a missing classname and we traced that to the Pay Later option. Then we found this Pay later not appearing as payment option which looked similar and says it was fixed for CiviCRM 4.7.30.

We upgraded their site and indeed their bug was fixed also.

CiviCRM Extensions

CiviCRM is a fantastic tool right “out of the box” but there are also some important features not available in the core. Therefore we have CiviCRM Extensions, which are add-ons that give CiviCRM extended functionality. These extensions cover all kinds of features such as Webform integration, alerts, discounts, volunteer management, extended reporting and more. Almost all extensions work on Drupal and WordPress, and also Joomla.

The official directory maintains a centralized list of all “official” extensions and that’s here: Extensions Directory. But you don’t normally need to visit there because extensions can be installed from within your own CiviCRM site.

Installing Extensions

The basic procedure is quite easy. When your CiviCRM is set up correctly, extensions can be installed from within your site. Go to Administer > System Settings > Extensions. Then click on the Add New tab.

You should see there a list of extensions that are compatible with your version of CiviCRM. You may not see all the extensions that are in the official Extensions Directory as not all will be compatible with your particular version.

To install one, click on the Download link and then on the next page click on the Install link. The rest is automatic.

Developers

Check out the civix tool. The CiviCRM describes it like this:

The civix command-line tool is the community-endorsed method for building your CiviCRM extensions.

It sets up the basic structure for you, automatically, to build your own extensions.

CiviCRM in a Subdomain

We are often asked if CiviCRM can be installed in a subdomain and the answer is yes. For details how, just see our post called Nextcloud in a Subdomain.

Everything there applies to CiviCRM as well. 🙂

What is CiviCRM

In this post, we are going to clarify what CiviCRM is in very simple terms that anyone can understand.

Overview

CiviCRM is a free “CMS” (Constituent Management System) which means it’s a software package that allows you to manage a database of people, such as your donors, recipients, volunteers, parents, teachers, care-givers etc. You can view them, edit their details, email them, record activities and donations and more. They then can make contributions online, sign up online for events, sign up for memberships and more.

Basic Contacts Features

Each person in CiviCRM is called a Contact. Getting your contact list into CiviCRM is not a trivial matter and we discuss the basics of that process on our Quick Guide to Importing Contacts in CiviCRM page. Once you do have your contacts in, searching for the one you want is as simple as typing a few letters into the search box and then a list of matches pops up:

Search for a Contact

We click on the contact we want and then see all of that person’s details:

View a Contact’s Details

Now we click on the Edit button and can edit those details:

Edit a Contact’s Details

Events

Creating events in CiviCRM is easy and provides the option of allowing online registration as well. Here’s a look at part of the first step of the event creation process in CiviCRM:

Create an Event

Mailers

Bulk emails are a very popular feature of CiviCRM. You can send an email to one contact at a time, of course, or you can send a bulk email to all your contacts, or to just some of them. You can define groups of contacts and email them or search on criteria such as all contacts in the Boston area, and then send an email just to those contacts. Here is the first screen of the bulk mail creation process:

Create a Mailer

Contributions

Most NPOs need contributions. Of course you can manually record contributions in CiviCRM, but there’s an easier way also. Using the website to collect contributions automatically via a credit card is an effective way as your donors can give whenever it’s convenient for them. CiviCRM lets you create a contribution page, customized with whatever details you want, and then your contacts can visit there and donate. Here is the first screen of the contribution page creation process:

Create Contribution Page

Other Features

There are lots of other features as well, such as campaigns and petitions and email tracking and reporting.

We hope this post, however, has given you an overview of the basics of what CiviCRM can do.

Video Version

Click to start:

[ryvl video_url=”https://www.youtube.com/watch?v=d40gJqV7qp0″ auto_play=”yes”] [/ryvl]

How to Install CiviCRM in Drupal

The installation procedure for CiviCRM differs for each CMS. In this post, we will outline how to install in Drupal.

Outgoing Emails on CiviHosting

Outgoing email in CiviCRM on our servers works perfectly and it works “out of the box” with no configuration required. We also support bounce processing and other inbound email processing, but we will cover those in another blog post. Today’s post is about sending emails from your CiviCRM to your constituents.

Sending bulk mail involves two issues, from a technical standpoint. One is sending them out and the other is making sure the recipient receives them.

The second issue is usually easier, so let’s talk about that first. Every mail provider has its own policy with regard to incoming email. In general, to avoid the rate limits applied by some mail providers (such as Yahoo, Hotmail, Gmail, etc.), we recommend sending no more than 50-60 messages per minute. We would also recommend that messages are sent in batches of up to 2,000 per hour. Sending more than that can trigger anti-spam rules on some providers and then they block your emails.

Regarding sending all these emails from our servers, how precisely this works depends on the type of hosting you have with us, that being shared hosting or VPS.

Shared Hosting

We definitely don’t recommend sending more than 100 or maybe 200 outgoing emails per minute. Since our cron on shared hosting accounts runs only once every 15 minutes, that amounts to a maximum of 800 per hour.

You can configure your CiviCRM to send 100 (or 200) emails per batch by putting that number in the “Mailer Batch Limit” box on the CiviMail Settings page, which you can find in the menus under Administer — CiviMail — Mailer Settings.

VPS Hosting

On our VPS accounts, the cron can run every 5 minutes or even every minute. Since it runs more frequently, we definitely recommend that you set your CiviCRM batch throttle to be 60 or maybe 100. That is fine if all of your email addresses are valid. Our servers are configured, maintained and optimized for web hosting, not for bulk mail delivery. Thus if you would inject 8000 emails at once into the the mail queue, or clog up the queue with hundreds of messages with invalid addresses, we may be forced to delete the messages and/or suspend the SMTP service.

You would only be sabotaging yourself as a VPS is a private server, but no one, especially us, want to see that happen.

But if set your CiviCRM “Mailer Batch Limit” to 60 or 100 per minute and run it every 5 minutes or every minute, that should be fine.

Also, please keep in mind that we have a very strict anti-spam policy, and any email campaigns should be very carefully contained, meaning that you should not send messages to people that have not agreed to receive email from you.

Where to Find Help for CiviCRM

Stuck with your CiviCRM? Looking for online documentation or a place to ask your questions?

There are a few such places.

The first two are the CiviCRM User and Administrator Guide which is an online book. You can read it online, and use the search features, or you can download your own copy.

The second place is the CiviCRM Documentation wiki, which is an online wiki with a lot of the same information, but in a different format. Since it’s a wiki, you can also get involved and help edit it if you find something that needs fixing.

Those are the main documentation locations.

For Q&A with real people, the CiviCRM Stack Exchange site is the place. The community is very active there, answering most questions within hours.

If that didn’t do it, the last place we can suggest is the CiviCRM Help page, which has the links above, plus a few more ideas.

Quick Guide to Importing Contacts in CiviCRM

Importing Contact data is one of the most common initial activities required for a new CiviCRM site (if you’re still wondering what CiviCRM is, however, see our What is CiviCRM page). The process usually is either fairly easy, or quite complicated. In this post, we will review the basic ideas and if you’re lucky enough to have the “fairly easy” kind of import, then this will be sufficient. If you get stuck, then you will need to find more in-depth resources.

There are two steps to importing data. First is to export the data from wherever it is and then the second is to import it into CiviCRM.

Export

This is a step that depends on what system or service you have your data in. The basic idea is that you must the data out in either CSV format or in Excel format. Most tools will have a feature that allows you to export your Contact data in one of those formats. If there is an option, you should choose to Yes show column headers in the first row.

If you have your export in Excel, then open that in Excel and then you can convert that to a text file via the Save As command. Click the File tab, and then click Save As. In the next window, choose the “CSV (Comma delimited)” format and then save.

Import

Within CiviCRM, click the “Contacts” menu and then click the “Import Contacts” option. Leave the “Data Source” alone and click “Browse” and choose your CSV file.

The rest of this page is fairly straightforward — you must read each item and decide what selections are appropriate for your particular situation.

When you’re ready, click “Continue” — don’t worry, nothing “real” will happen yet.

On the next page, you need to match up each column in your CSV file to a field in CiviCRM. If one column doesn’t match up to anything, you can skip it.

When you’re done, click “Continue” again, but still don’t worry, no data will be imported yet.

Now you are on a page called “Preview (step 3 of 4)” and you can see what is going to happen in the last and final step. On this page, you may see errors or warnings. Take those seriously and try to fix them if you can, and then use the “Previous” buttons to get things right.

When it seems as good as it can, click “Import Now.” This is going to actually import your data now.

On the last page “Summary (step 4 of 4)” you will see a summary of how it went.

Hope it worked out. 🙂

How to Make a Cron Job for CiviCRM

This is the most common question we get about CiviCRM. For CiviHosting clients, our answer is very simple:

  We will make a cron job for you!

But if prefer to do this yourself (or if we are not your host), we definitely recommend you do and below we will show you two ways how to do it. We recommend using the CLI method, but sometimes it fails to work for reasons not always clear. In such a case, you should try second method, the URL method.

Some of the details below are only relevant for CiviHosting clients — if you use a different host, just adjust those for your host’s Control Panel.

The CLI Method

There are two steps to this method — first we make a .sh file which is the “command” file that the server will execute, and the second step is to create the cron entry to actually execute that file.

Create the .sh File

We recommend putting this file in a private place, for a few reasons. One is so that it won’t get overwritten when you run a CiviCRM upgrade and the second is that we certainly don’t want anyone finding it even, because it has a username and password. To start, login to your hosting Control Panel and click on the File Manager tool. Then at the top of the file list, you will see:

Location: /home/username/www

where username is your login. Click on your username there. Now on the right side, click on the link “private”. Now you are in the private area of your account — any files here are not accessible in any way to the public.

The bottom box there is labeled “Create File:” Put in the box there civicron.sh and click the button “Create File”.

Now at the top you will see a button “Edit.” Click on that to edit your new file. In this file, we need to put some code.

For WordPress, use this:

#!/bin/sh
wp --user=admin --url=mysite.org --path=/home/username/www/www/  civicrm api job.execute auth=0 

where you replace “mysite.org” with the actual URL of your site. The documentation page Scheduled jobs also mentions that you can add the –quiet parameter to that command to silence non-error output.

It is also possible to use the “cv” CiviCRM CLI Utility. To install it, you would use this code from the CLI:

cd ~/private
GET https://download.civicrm.org/cv/cv.phar > cv.phar

and then your cron job would look like this:

#!/bin/sh
cd ~/www/www
php ~/private/cv.phar api job.execute --user=admin

For Drupal 7, use this:

#!/bin/sh
drush -u 1 -r ~/www/www civicrm-api job.execute auth=0 -y

If you need to run a different version of PHP, such as 7.1, then you would use this:

#!/bin/sh
php /usr/local/bin/drush -u 1 -r ~/www/www civicrm-api job.execute auth=0 -y

Save the file and that’s it. Now the .sh file is ready.

For Drupal 8 or 9, you can use cv.phar as above, and then use this:

#!/bin/sh
php ~/private/cv.phar api job.execute --user=admin   --cwd=/home/myuser/www/www/web

You must edit /home/myuser/www/www/web to point to the root of your Drupal 8 install. Or you can use drush:

#!/bin/sh
drush -u 1 -r ~/www/www/web civicrm-api job.execute auth=0 -y

Create the Cron Entry

Go to the Cron Jobs section of your hosting Control Panel. In the section on that page called “Schedule a cron job” there is a small icon to the right of the first box. Click on that and a small window will popup. Click on “private” in that window and then on “civicron.sh” and then click the “Select” button.

Now in the box on the main page of the Control Panel you should see “/private/civicron.sh”

In the ‘Choose start time:” selector, you can choose “Every 15 minutes” or “Every 30 minutes” or “Every hour” and then click “Set cron.”

Testing

Now to test, click the “Run” button to the right of your new cron job. On the next page, you should see no output. That means it’s working. If it fails, then you may be able to determine the issue from the message — like if it says the username and password aren’t valid, then you must fix those. You can click on the link to the .sh file on the Cron Jobs page to edit.

But if you get another error, one easy trick is to try to switch to the URL method.

URL Method

Everything here is the same as above, except that the contents of the “/private/civicron.sh” file are a bit different. Here is what you should put there for WordPress:

#!/bin/sh
GET 'http://mysite.org/wp-content/plugins/civicrm/civicrm/bin/cron.php?name=admin&pass=MyPass&key=XXX'

and this for Drupal:

#!/bin/sh
GET 'http://mysite.org/sites/all/modules/civicrm/bin/cron.php?name=admin&pass=MyPass&key=XXX'

As noted in the comments below, if your site has SSL on it (and that comes free from Let’s Encrypt for all CiviHosting clients) then you would want to use https instead of http in the URL.

Now you must replace user with a CMS user that has full access to CiviCRM and pass with the password of that user. Then you must find your CiviCRM sitekey and replace XXX with the full sitekey.

To find your sitekey, you must first find your civicrm.settings.php file. For WordPress, it’s usually here:

wp-content/uploads/civicrm/civicrm.settings.php

For older sites, it may be in “wp-content/plugins/civicrm/civicrm.settings.php.”

For Drupal here, it should be here:

sites/default/civicrm.settings.php

So you must find that in the File Manager, and then click on it to edit it. A bit more than halfway through the file, you will find a line like this:

  define( 'CIVICRM_SITE_KEY', 'cd7238bdkjfiu33kdjkl121kjfiu49b0');

Now you copy that second value, in our case cd7238bdkjfiu33kdjkl121kjfiu49b0 and you replace the XXX with that.

That’s it.

Let us know if you have any questions or comments. 🙂